Press n or j to go to the next uncovered block, b, p or k for the previous block.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 | 36x 36x 36x 36x 12079x 3057x 3057x 3057x 9022x 12223x 9022x 9022x 3201x 3201x 36x 150x 150x 150x 12082x 12082x 4513x 12082x 3x 3x 3x 12079x 12079x 36x 36x 1578x 11545x 343x 1235x 36x 1736x 1736x 1736x 8290x 8290x 5013x 1736x | /* Copyright 2008-2010 University of Cambridge Copyright 2008-2009 University of Toronto Licensed under the Educational Community License (ECL), Version 2.0 or the New BSD license. You may not use this file except in compliance with one these Licenses. You may obtain a copy of the ECL 2.0 License and BSD License at https://github.com/fluid-project/infusion/raw/master/Infusion-LICENSE.txt */ var fluid_3_0_0 = fluid_3_0_0 || {}; (function ($, fluid) { "use strict"; fluid.dom = fluid.dom || {}; // Node walker function for iterateDom. var getNextNode = function (iterator) { if (iterator.node.firstChild) { iterator.node = iterator.node.firstChild; iterator.depth += 1; return iterator; } while (iterator.node) { if (iterator.node.nextSibling) { iterator.node = iterator.node.nextSibling; return iterator; } iterator.node = iterator.node.parentNode; iterator.depth -= 1; } return iterator; }; /** * Walks the DOM, applying the specified acceptor function to each element. * There is a special case for the acceptor, allowing for quick deletion of elements and their children. * Return "delete" from your acceptor function if you want to delete the element in question. * Return "stop" to terminate iteration. * Implementation note - this utility exists mainly for performance reasons. It was last tested * carefully some time ago (around jQuery 1.2) but at that time was around 3-4x faster at raw DOM * filtration tasks than the jQuery equivalents, which was an important source of performance loss in the * Reorderer component. General clients of the framework should use this method with caution if at all, and * the performance issues should be reassessed when we have time. * * @param {Element} node - The node to start walking from. * @param {Function} acceptor - The function to invoke with each DOM element. * @param {Boolean} allNodes - Use <code>true</code> to call acceptor on all nodes, rather than just element nodes * (type 1). * @return {Object|undefined} - Returns `undefined` if the run completed successfully. If a node stopped the run, * that node is returned. */ fluid.dom.iterateDom = function (node, acceptor, allNodes) { var currentNode = {node: node, depth: 0}; var prevNode = node; var condition; while (currentNode.node !== null && currentNode.depth >= 0 && currentNode.depth < fluid.dom.iterateDom.DOM_BAIL_DEPTH) { condition = null; if (currentNode.node.nodeType === 1 || allNodes) { condition = acceptor(currentNode.node, currentNode.depth); } if (condition) { Iif (condition === "delete") { currentNode.node.parentNode.removeChild(currentNode.node); currentNode.node = prevNode; } else Eif (condition === "stop") { return currentNode.node; } } prevNode = currentNode.node; currentNode = getNextNode(currentNode); } }; // Work around IE circular DOM issue. This is the default max DOM depth on IE. // http://msdn2.microsoft.com/en-us/library/ms761392(VS.85).aspx fluid.dom.iterateDom.DOM_BAIL_DEPTH = 256; /** * Checks if the specified container is actually the parent of containee. * * @param {Element} container - the potential parent * @param {Element} containee - the child in question * @return {Boolean} - `true` if `container` contains `containee`, `false` otherwise. */ fluid.dom.isContainer = function (container, containee) { for (; containee; containee = containee.parentNode) { if (container === containee) { return true; } } return false; }; /* Return the element text from the supplied DOM node as a single String. * Implementation note - this is a special-purpose utility used in the framework in just one * position in the Reorderer. It only performs a "shallow" traversal of the text and was intended * as a quick and dirty means of extracting element labels where the user had not explicitly provided one. * It should not be used by general users of the framework and its presence here needs to be * reassessed. */ fluid.dom.getElementText = function (element) { var nodes = element.childNodes; var text = ""; for (var i = 0; i < nodes.length; ++i) { var child = nodes[i]; if (child.nodeType === 3) { text = text + child.nodeValue; } } return text; }; })(jQuery, fluid_3_0_0); |