Rietveld Code Review Tool
Help | Bug tracker | Discussion group | Source code

Delta Between Two Patch Sets: lib/aardvark.js

Issue 5684127030312960: Issue 1091 - Implement a better templating approach for Element Hiding Helper (Closed)
Left Patch Set: Created July 21, 2014, 7:27 p.m.
Right Patch Set: Switched to a functional approach Created Sept. 11, 2014, 4:50 p.m.
Left:
Right:
Use n/p to move between diff chunks; N/P to move between comments.
Jump to:
Left: Side by side diff | Download
Right: Side by side diff | Download
« no previous file with change/comment | « chrome/content/overlay.xul ('k') | lib/main.js » ('j') | no next file with change/comment »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
LEFTRIGHT
1 /* 1 /*
2 * This Source Code is subject to the terms of the Mozilla Public License 2 * This Source Code is subject to the terms of the Mozilla Public License
3 * version 2.0 (the "License"). You can obtain a copy of the License at 3 * version 2.0 (the "License"). You can obtain a copy of the License at
4 * http://mozilla.org/MPL/2.0/. 4 * http://mozilla.org/MPL/2.0/.
5 */ 5 */
6 6
7 let {Prefs} = require("prefs"); 7 let {Prefs} = require("prefs");
8 8
9 // Make sure to stop selection when we are uninstalled 9 // Make sure to stop selection when we are uninstalled
10 onShutdown.add(function() Aardvark.quit()); 10 onShutdown.add(function() Aardvark.quit());
11 11
12 // To be replaced when selection starts 12 // To be replaced when selection starts
13 function E(id) {return null;} 13 function E(id) {return null;}
14 14
15 /********************************* 15 /*********************************
16 * Minimal element creation code * 16 * Minimal element creation code *
17 *********************************/ 17 *********************************/
18 18
19 function Element(el) 19 function createElement(doc, tagName, attrs, children)
20 {
21 this._el = el;
22 }
23 Element.prototype =
24 {
25 _el: null,
26 child: function(tagName, attrs, callback)
27 {
28 let child = Element.create(this._el.ownerDocument, tagName, attrs, callback) ;
29 this._el.appendChild(child);
30 }
31 };
32 Element.create = function(doc, tagName, attrs, callback)
33 { 20 {
34 let el = doc.createElement(tagName); 21 let el = doc.createElement(tagName);
35 if (attrs) 22 if (attrs)
36 for (let key in attrs) 23 for (let key in attrs)
37 el.setAttribute(key, attrs[key]); 24 el.setAttribute(key, attrs[key]);
38 if (typeof callback == "function") 25 if (children)
39 callback(new Element(el)); 26 for (let child of children)
27 el.appendChild(child)
40 return el; 28 return el;
41 }; 29 };
Thomas Greiner 2014/07/23 13:55:52 What's the reason for introducing a custom type he
Wladimir Palant 2014/09/11 16:52:13 This code went through several iteration, particul
42 30
43 /********************************** 31 /**********************************
44 * General element selection code * 32 * General element selection code *
45 **********************************/ 33 **********************************/
46 34
47 let Aardvark = exports.Aardvark = 35 let Aardvark = exports.Aardvark =
48 { 36 {
49 window: null, 37 window: null,
50 browser: null, 38 browser: null,
51 anchorElem: null, 39 anchorElem: null,
(...skipping 26 matching lines...) Expand all
78 this.browser.addEventListener("DOMMouseScroll", this.onMouseScroll, true); 66 this.browser.addEventListener("DOMMouseScroll", this.onMouseScroll, true);
79 this.browser.addEventListener("keypress", this.onKeyPress, true); 67 this.browser.addEventListener("keypress", this.onKeyPress, true);
80 this.browser.addEventListener("mousemove", this.onMouseMove, true); 68 this.browser.addEventListener("mousemove", this.onMouseMove, true);
81 this.browser.addEventListener("select", this.quit, false); 69 this.browser.addEventListener("select", this.quit, false);
82 this.browser.contentWindow.addEventListener("pagehide", this.onPageHide, tru e); 70 this.browser.contentWindow.addEventListener("pagehide", this.onPageHide, tru e);
83 71
84 this.browser.contentWindow.focus(); 72 this.browser.contentWindow.focus();
85 73
86 let doc = this.browser.contentDocument; 74 let doc = this.browser.contentDocument;
87 let {elementMarkerClass} = require("main"); 75 let {elementMarkerClass} = require("main");
88 this.boxElem = Element.create(doc, "div", {"class": elementMarkerClass}, fun ction(el) 76 this.boxElem = createElement(doc, "div", {"class": elementMarkerClass}, [
89 { 77 createElement(doc, "div", {"class": "ehh-border"}),
90 el.child("div", {"class": "ehh-border"}); 78 createElement(doc, "div", {"class": "ehh-label"}, [
91 el.child("div", {"class": "ehh-label"}, function(el) 79 createElement(doc, "span", {"class": "ehh-labelTag"}),
92 { 80 createElement(doc, "span", {"class": "ehh-labelAddition"})
93 el.child("span", {"class": "ehh-labelTag"}) 81 ])
94 el.child("span", {"class": "ehh-labelAddition"}); 82 ]);
95 });
96 });
97 83
98 this.initHelpBox(); 84 this.initHelpBox();
99 85
100 if (Prefs.showhelp) 86 if (Prefs.showhelp)
101 this.showMenu(); 87 this.showMenu();
102 88
103 // Make sure to select some element immeditely (whichever is in the center o f the browser window) 89 // Make sure to select some element immeditely (whichever is in the center o f the browser window)
104 let [wndWidth, wndHeight] = this.getWindowSize(doc.defaultView); 90 let [wndWidth, wndHeight] = this.getWindowSize(doc.defaultView);
105 this.isUserSelected = false; 91 this.isUserSelected = false;
106 this.onMouseMove({clientX: wndWidth / 2, clientY: wndHeight / 2, screenX: -1 , screenY: -1, target: null}); 92 this.onMouseMove({clientX: wndWidth / 2, clientY: wndHeight / 2, screenX: -1 , screenY: -1, target: null});
(...skipping 304 matching lines...) Expand 10 before | Expand all | Expand 10 after
411 this.boxElem.parentNode.removeChild(this.boxElem); 397 this.boxElem.parentNode.removeChild(this.boxElem);
412 398
413 if (this.paintNode) 399 if (this.paintNode)
414 this.paintNode.removeEventListener("MozAfterPaint", this.onAfterPaint, fal se); 400 this.paintNode.removeEventListener("MozAfterPaint", this.onAfterPaint, fal se);
415 this.paintNode = null; 401 this.paintNode = null;
416 this.prevPos = null; 402 this.prevPos = null;
417 }, 403 },
418 404
419 getWindowSize: function(wnd) 405 getWindowSize: function(wnd)
420 { 406 {
421 return [wnd.innerWidth, wnd.innerHeight]; 407 return [wnd.innerWidth, wnd.document.documentElement.clientHeight];
422 }, 408 },
423 409
424 getElementPosition: function(element) 410 getElementPosition: function(element)
425 { 411 {
426 // Restrict rectangle coordinates by the boundaries of a window's client are a 412 // Restrict rectangle coordinates by the boundaries of a window's client are a
427 function intersectRect(rect, wnd) 413 function intersectRect(rect, wnd)
428 { 414 {
429 let [wndWidth, wndHeight] = this.getWindowSize(wnd); 415 let [wndWidth, wndHeight] = this.getWindowSize(wnd);
430 rect.left = Math.max(rect.left, 0); 416 rect.left = Math.max(rect.left, 0);
431 rect.top = Math.max(rect.top, 0); 417 rect.top = Math.max(rect.top, 0);
(...skipping 329 matching lines...) Expand 10 before | Expand all | Expand 10 after
761 // Show help box 747 // Show help box
762 helpBox.showPopup(this.browser, -1, -1, "tooltip", "topleft", "topleft"); 748 helpBox.showPopup(this.browser, -1, -1, "tooltip", "topleft", "topleft");
763 return true; 749 return true;
764 } 750 }
765 } 751 }
766 752
767 // Makes sure event handlers like Aardvark.onKeyPress always have the correct 753 // Makes sure event handlers like Aardvark.onKeyPress always have the correct
768 // this pointer set. 754 // this pointer set.
769 for each (let method in ["onMouseClick", "onMouseScroll", "onKeyPress", "onPageH ide", "onMouseMove", "onAfterPaint", "quit"]) 755 for each (let method in ["onMouseClick", "onMouseScroll", "onKeyPress", "onPageH ide", "onMouseMove", "onAfterPaint", "quit"])
770 Aardvark[method] = Aardvark[method].bind(Aardvark); 756 Aardvark[method] = Aardvark[method].bind(Aardvark);
LEFTRIGHT

Powered by Google App Engine
This is Rietveld