elementLayout.js
Summary
No overview generated for 'elementLayout.js'
var elementLayout = new function()
{
const
PADDING_TOP = 0,
PADDING_RIGHT = 1,
PADDING_BOTTOM = 2,
PADDING_LEFT = 3,
BORDER_TOP_WIDTH = 4,
BORDER_RIGHT_WIDTH = 5,
BORDER_BOTTOM_WIDTH = 6,
BORDER_LEFT_WIDTH = 7,
MARGIN_TOP = 8,
MARGIN_RIGHT = 9,
MARGIN_BOTTOM = 10,
MARGIN_LEFT = 11,
WIDTH = 12,
HEIGHT = 13,
OFFSET_TOP= 1,
OFFSET_LEFT= 2,
OFFSET_WIDTH= 3,
OFFSET_HEIGHT= 4,
SCROLL_TOP= 5,
SCROLL_LEFT= 6,
SCROLL_WIDTH= 7,
SCROLL_HEIGHT= 8,
CLIENT_TOP= 9,
CLIENT_LEFT= 10,
CLIENT_WIDTH= 11,
CLIENT_HEIGHT= 12,
OFFSETS =
[
'',
'offsetTop',
'offsetLeft',
'offsetWidth',
'offsetHeight',
'scrollTop',
'scrollLeft',
'scrollWidth',
'scrollHeight',
'clientTop',
'clientLeft',
'clientWidth',
'clientHeight'
],
GET_OFFSETS_SCRIPT = "\
(function(ele)\
{\
var \
parent = ele,\
log = ele.nodeName + '|0;',\
offsetParent = ele.offsetParent,\
offsets =\
[\
'" + OFFSETS[OFFSET_TOP] + "',\
'" + OFFSETS[OFFSET_LEFT] + "',\
'" + OFFSETS[OFFSET_WIDTH] + "',\
'" + OFFSETS[OFFSET_HEIGHT] + "',\
'" + OFFSETS[SCROLL_TOP] + "',\
'" + OFFSETS[SCROLL_LEFT] + "',\
'" + OFFSETS[SCROLL_WIDTH] + "',\
'" + OFFSETS[SCROLL_HEIGHT] + "',\
'" + OFFSETS[CLIENT_TOP] + "',\
'" + OFFSETS[CLIENT_LEFT] + "',\
'" + OFFSETS[CLIENT_WIDTH] + "',\
'" + OFFSETS[CLIENT_HEIGHT] + "'\
],\
offset = '',\
i = 0;\
while( parent = parent.parentElement )\
{\
if(parent == offsetParent)\
{\
log = parent.nodeName + '|1,' + log;\
offsetParent = parent.offsetParent;\
}\
else\
{\
log = parent.nodeName + '|0,' + log;\
}\
};\
for( ; offset = offsets[i]; i++)\
{\
log += ele[offset] + ';';\
}\
return log;\
})(ele)\
";
var layout_map = [];
var setup_layout_map = function()
{
var prop = '', i = 0;
for (; prop = css_index_map[i]; i++)
{
switch(prop)
{
case 'padding-top':
{
layout_map[PADDING_TOP] = i;
break;
}
case 'padding-right':
{
layout_map[PADDING_RIGHT] = i;
break;
}
case 'padding-bottom':
{
layout_map[PADDING_BOTTOM] = i;
break;
}
case 'padding-left':
{
layout_map[PADDING_LEFT] = i;
break;
}
case 'border-top-width':
{
layout_map[BORDER_TOP_WIDTH] = i;
break;
}
case 'border-right-width':
{
layout_map[BORDER_RIGHT_WIDTH] = i;
break;
}
case 'border-bottom-width':
{
layout_map[BORDER_BOTTOM_WIDTH] = i;
break;
}
case 'border-left-width':
{
layout_map[BORDER_LEFT_WIDTH] = i;
break;
}
case 'margin-top':
{
layout_map[MARGIN_TOP] = i;
break;
}
case 'margin-right':
{
layout_map[MARGIN_RIGHT] = i;
break;
}
case 'margin-bottom':
{
layout_map[MARGIN_BOTTOM] = i;
break;
}
case 'margin-left':
{
layout_map[MARGIN_LEFT] = i;
break;
}
case 'width':
{
layout_map[WIDTH] = i;
break;
}
case 'height':
{
layout_map[HEIGHT] = i;
break;
}
}
}
}
var __selectedElement = null;
var __comp_style = null;
var __offsets_values = "";
var __views = ['css-layout'];
var onElementSelected = function(msg)
{
__comp_style = null;
__offsets_values = "";
__selectedElement = {rt_id: msg.rt_id, obj_id: msg.obj_id};
var i = 0, view_id = '';
for ( i = 0; view_id = __views[i]; i++)
{
views[view_id].update();
}
}
this.getLayoutValues = function(org_args)
{
if( !__selectedElement)
{
return null;
}
if(__comp_style)
{
return __comp_style;
}
var
rt_id = __selectedElement.rt_id,
obj_id = __selectedElement.obj_id;
if( stylesheets.hasStylesheetsRuntime(rt_id) )
{
var tag = tagManager.setCB(null, handleGetMetricsData, [rt_id, obj_id, org_args]);
services['ecmascript-debugger'].cssGetStyleDeclarations( tag, rt_id, obj_id, '10000', 'json' );
}
else
{
stylesheets.getStylesheets(__selectedElement.rt_id, arguments);
}
return null;
}
var handleGetMetricsData = function(xml, rt_id, obj_id, org_args)
{
var
json = xml.getNodeData('matching-style-declarations'),
declarations = null;
if( json )
{
declarations = eval('(' + json +')');
__comp_style = declarations[0];
if( !layout_map.length )
{
setup_layout_map();
}
if( org_args && !org_args[0].__call_count )
{
org_args[0].__call_count = 1;
org_args.callee.apply(null, org_args)
}
}
}
this.getOffsetsValues = function(org_args)
{
if( !__selectedElement)
{
return null;
}
if(__offsets_values)
{
return __offsets_values;
}
var
rt_id = __selectedElement.rt_id,
obj_id = __selectedElement.obj_id,
tag = tagManager.setCB(null, handleGetOffsetsData, [rt_id, obj_id, org_args] );
services['ecmascript-debugger'].eval( tag, rt_id, '', '', GET_OFFSETS_SCRIPT, ['ele', obj_id]);
return null;
}
this.prettyprintOffsetValues = function()
{
var
data = __offsets_values.split(';'),
ret = '<h2>' + ui_strings.M_VIEW_SUB_LABEL_PARENT_OFFSETS + '</h2><parent-node-chain>',
i = 0,
chain = data[0].split(','),
cur = '';
for( i = 0; cur = chain[i]; i++)
{
chain[i] = cur.split('|');
}
ret += document.renderInner(templates.breadcrumb(dom_data.getCSSPath(chain)));
ret += "</parent-node-chain><h2>" + ui_strings.M_VIEW_SUB_LABEL_OFFSET_VALUES + "</h2><offsets>";
for( i = 1; data[i]; i++ )
{
ret += "<item>" +
"<key>" + OFFSETS[i] + "</key>" +
"<value>" + data[i] + "</value>" +
"</item>";
}
ret += "</offsets>";
return ret;
}
var handleGetOffsetsData = function(xml, rt_id, obj_id, org_args)
{
if( xml.getNodeData('status') == 'completed' )
{
__offsets_values = xml.getNodeData('string')
if( org_args && !org_args[0].__call_count )
{
org_args[0].__call_count = 1;
org_args.callee.apply(null, org_args)
}
}
else
{
opera.postError('handleGetOffsetsData failed')
}
}
this.metricsTemplate = function(styles)
{
return ['div',
['ul',
['li',['p','\u00a0',['span', 'margin']]],
['li', __comp_style[layout_map[MARGIN_TOP]]],
['li']
],
['ul', ['li', __comp_style[layout_map[MARGIN_LEFT]]], ['li',
['ul',
['li',['p','\u00a0',['span', 'border']]],
['li', __comp_style[layout_map[BORDER_TOP_WIDTH]]],
['li']
],
['ul', ['li', __comp_style[layout_map[BORDER_LEFT_WIDTH]]], ['li',
['ul',
['li',['p','\u00a0',['span', 'padding']]],
['li', __comp_style[layout_map[PADDING_TOP]]],
['li']
],
['ul',
['li', __comp_style[layout_map[PADDING_LEFT]]],
['li',
['ul', ['li', __comp_style[layout_map[WIDTH]], 'class', 'elementWidth']],
['ul', ['li', __comp_style[layout_map[HEIGHT]],'class', 'elementHeight']],
['ul', ['li', '\u00a0']],
'class', 'element'],
['li', __comp_style[layout_map[PADDING_RIGHT]]]
],
['ul', ['li', __comp_style[layout_map[PADDING_BOTTOM]], 'colspan', '3']],
'class', 'padding'], ['li', __comp_style[layout_map[BORDER_RIGHT_WIDTH]]]],
['ul', ['li', __comp_style[layout_map[BORDER_BOTTOM_WIDTH]], 'colspan', '3']],
'class', 'border'], ['li', __comp_style[layout_map[MARGIN_RIGHT]]]],
['ul', ['li', __comp_style[layout_map[MARGIN_BOTTOM]], 'colspan', '3']],
'class', 'metrics border'];
}
messages.addListener('element-selected', onElementSelected);
}
Documentation generated by
JSDoc on Thu Oct 30 18:01:10 2008