diff options
author | Rogan Creswick <creswick@gmail.com> | 2013-01-02 15:31:43 -0800 |
---|---|---|
committer | Rogan Creswick <creswick@gmail.com> | 2013-01-02 15:31:43 -0800 |
commit | 91c8d16838b39c7726f6c0a0fb333f5ba38d2494 (patch) | |
tree | 136df17525e5e62f3ddc5b7a6dc71ffd31e2aa42 /tools/addon-sdk-1.12/examples/annotator/data/selector.js | |
parent | f7b228c479bac8828e521a2826d7f57f150da877 (diff) |
updated addon-sdk to 1.12
Diffstat (limited to 'tools/addon-sdk-1.12/examples/annotator/data/selector.js')
-rw-r--r-- | tools/addon-sdk-1.12/examples/annotator/data/selector.js | 73 |
1 files changed, 73 insertions, 0 deletions
diff --git a/tools/addon-sdk-1.12/examples/annotator/data/selector.js b/tools/addon-sdk-1.12/examples/annotator/data/selector.js new file mode 100644 index 0000000..f42dbfa --- /dev/null +++ b/tools/addon-sdk-1.12/examples/annotator/data/selector.js @@ -0,0 +1,73 @@ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +/* +The selector locates elements that are suitable for annotation and enables +the user to select them. + +On 'mouseenter' events associated with <p> elements: +- if the selector is active and the element is not already annotated +- find the nearest ancestor which has an id attribute: this is supposed to +make identification of this element more accurate +- highlight the element +- bind 'click' for the element to send a message back to the add-on, including +all the information associated with the anchor. +*/ + +var matchedElement = null; +var originalBgColor = null; +var active = false; + +function resetMatchedElement() { + if (matchedElement) { + matchedElement.css('background-color', originalBgColor); + matchedElement.unbind('click.annotator'); + } +} + +self.on('message', function onMessage(activation) { + active = activation; + if (!active) { + resetMatchedElement(); + } +}); + +function getInnerText(element) { + // jQuery.text() returns content of <script> tags, we need to ignore those + var list = []; + element.find("*").andSelf().contents() + .filter(function () { + return this.nodeType == 3 && this.parentNode.tagName != "SCRIPT"; + }) + .each(function () { + list.push(this.nodeValue); + }); + return list.join(""); +} + +$('*').mouseenter(function() { + if (!active || $(this).hasClass('annotated')) { + return; + } + resetMatchedElement(); + ancestor = $(this).closest("[id]"); + matchedElement = $(this).first(); + originalBgColor = matchedElement.css('background-color'); + matchedElement.css('background-color', 'yellow'); + matchedElement.bind('click.annotator', function(event) { + event.stopPropagation(); + event.preventDefault(); + self.port.emit('show', + [ + document.location.toString(), + ancestor.attr("id"), + getInnerText(matchedElement) + ] + ); + }); +}); + +$('*').mouseout(function() { + resetMatchedElement(); +}); |