1 /* See license.txt for terms of usage */ 2 3 define([ 4 ], 5 function() { 6 7 // ********************************************************************************************* // 8 // Constants 9 10 const ident = { 11 frame: 0, 12 boxModel: 1, 13 imageMap: 2, 14 proxyElt: 3 15 }; 16 17 // ********************************************************************************************* // 18 // Implementation 19 20 var HighlighterCache = 21 { 22 ident: ident, 23 24 highlighters: { 25 frameArr: [], 26 boxModelArr: [], 27 proxyEltArr: [] 28 }, 29 30 get: function(type) 31 { 32 var node; 33 var hl = this.highlighters; 34 35 switch (type) 36 { 37 case ident.boxModel: 38 if (hl.boxModelArr.length === 1) 39 { 40 node = hl.boxModelArr[0]; 41 if (!node.parentElement) 42 return node; 43 } 44 break; 45 case ident.frame: 46 if (hl.frameArr.length === 1) 47 { 48 node = hl.frameArr[0]; 49 if (!node.parentElement) 50 return node; 51 } 52 break; 53 case ident.proxyElt: 54 if (hl.proxyEltArr.length === 1) 55 { 56 node = hl.proxyEltArr[0]; 57 if (!node.parentElement) 58 return node; 59 } 60 break; 61 } 62 }, 63 64 add: function(node) 65 { 66 switch (node.ident) 67 { 68 case ident.boxModel: 69 this.highlighters.boxModelArr.push(node); 70 break; 71 case ident.frame: 72 this.highlighters.frameArr.push(node); 73 break; 74 case ident.proxyElt: 75 this.highlighters.proxyEltArr.push(node); 76 break; 77 } 78 }, 79 80 clear: function() 81 { 82 clearBoxModelCache(this.highlighters.boxModelArr); 83 84 clearCache(this.highlighters.frameArr); 85 clearCache(this.highlighters.proxyEltArr); 86 87 this.highlighters.boxModelArr = []; 88 this.highlighters.frameArr = []; 89 this.highlighters.proxyEltArr = []; 90 } 91 }; 92 93 // ********************************************************************************************* // 94 // Helpers 95 96 function clearCache(arr) 97 { 98 try 99 { 100 var i, highlighter; 101 for (i = arr.length - 1; i >= 0; i--) 102 { 103 highlighter = arr[i]; 104 105 if (highlighter && highlighter.parentNode) 106 highlighter.parentNode.removeChild(highlighter); 107 } 108 } 109 catch (err) 110 { 111 FBTrace.sysout("highlighterCache.clearCache; EXCEPTION " + err, err); 112 } 113 } 114 115 function clearBoxModelCache(arr) 116 { 117 try 118 { 119 var node; 120 for (var i = arr.length - 1; i >= 0; i--) 121 { 122 var names = ["lines", "offset", "parent"]; 123 for (var j=0; j<names.length; j++) 124 { 125 var name = names[j]; 126 if (name === "lines") 127 { 128 var lineNames = ["bottom", "left", "top", "right"]; 129 for (var k=0; k<lineNames.length; k++) 130 { 131 var lineName = lineNames[k]; 132 node = arr[i].lines[lineName]; 133 134 if (node && node.parentNode) 135 node.parentNode.removeChild(node); 136 } 137 } 138 else 139 { 140 node = arr[i][name]; 141 if (node && node.parentNode) 142 node.parentNode.removeChild(node); 143 } 144 } 145 } 146 } 147 catch (err) 148 { 149 FBTrace.sysout("clearBoxModelCache.clearCache; EXCEPTION " + err, err); 150 } 151 } 152 153 // ********************************************************************************************* // 154 // Registration 155 156 return HighlighterCache; 157 158 // ********************************************************************************************* // 159 }); 160