A Composit struktúrát létrehozó három függvény működésének az elemzése

Azért publikálom ilyen módon is a módosított Composit struktúrát létrehozó három függvényt, mert függetlenek a program minden más részétől, csak egymást hívják meg, és ezért – elvileg – könnyű bemutatni az összműködésüket, valamint azt szeretném, ha a laikusoknak is lehetőségük nyílna legalább egy kicsit betekinteni egy valódi Javascript kódrészletbe. A lefontosabb részeket beszámoztam, és ha föléjük viszed a kurzort, elolvashatod az adott részhez tartozó magyarázatot.

1
2
3
4
{ /*############# CUT #################*/ compileNavi : function(root, options, skip_class ){ options = options || {}; skip_class = skip_class || 'dealt_with'; root = $(root); options.composit_name = options.composit_name || 'main_navi'; options.sub_composit_name = options.sub_composit_name || 'sub_box' options.show_name = options.show_name || 'show'; options.open_name = options.open_name || 'open'; options.selected_name = options.selected_name || 'selected'; options.off_lefted_name = options.off_lefted_name || 'off_lefted'; var children = $A(root.childNodes) || []; children = children.filter(function(elem){ return elem.nodeType == 1; }); root = new Top_Nav_Composit(root, null, options); var child, s = skip_class for(var i= 0, count = children.length; i < count; i++){ child = children[i]; tool_box.walkTheDomRecursive(child, tool_box.processNodes, root, options, root, s); } return root; } /*######### cut ################*/ }
5
6
7
{ /*############# CUT #################*/ walkTheDomRecursive : function(node, func, context, options, top_composit, skip_class ){ var root = node || document.body; context = func.call(context, root, options, top_composit, skip_class); node = node.firstChild ? node.firstChild : null; while(node){ tool_box.walkTheDomRecursive(node, func, context, options, top_composit, skip_class); node = node.nextSibling; } } /*######### cut ################*/ }
8
9
10
11
12
{ /*############# CUT #################*/ processNodes: function(node, op, top_composit, skip_class ){ skip_class = skip_class || 'dealt_with'; node = $(node); if(node.nodeType == 1){ if(node.hasClassName(op.composit_name) && !node.hasClassName(skip_class)){ var nav_composit = new Nav_Composit(node, this, op, top_composit); node.addClassName(skip_class); this.add_child(nav_composit); return nav_composit; } else if(node.hasClassName(op.sub_composit_name) && !node.hasClassName(skip_class)){ var sub_nav_composit = new Sub_Nav_Composit(node, this, op, top_composit); node.addClassName(skip_class); this.add_child(sub_nav_composit); return sub_nav_composit; } else if(node.hasClassName(op.off_lefted_name) && !node.hasClassName(skip_class)){ node.addClassName(skip_class); this.add_off_lefted(node); return this; } } return this; } /*######### cut ################*/ }