diff options
Diffstat (limited to 'flakes/etherpad-lite/modules/ep_immae_buttons/static/js/main.js')
-rw-r--r-- | flakes/etherpad-lite/modules/ep_immae_buttons/static/js/main.js | 67 |
1 files changed, 67 insertions, 0 deletions
diff --git a/flakes/etherpad-lite/modules/ep_immae_buttons/static/js/main.js b/flakes/etherpad-lite/modules/ep_immae_buttons/static/js/main.js new file mode 100644 index 0000000..07f7b9c --- /dev/null +++ b/flakes/etherpad-lite/modules/ep_immae_buttons/static/js/main.js | |||
@@ -0,0 +1,67 @@ | |||
1 | exports.postAceInit = function(hook, context){ | ||
2 | $(document).ready(function () { | ||
3 | $('.clearFormatting').click(function(){ | ||
4 | context.ace.callWithAce(function(ace){ | ||
5 | |||
6 | var rep = ace.ace_getRep(); // get the current user selection | ||
7 | var isSelection = (rep.selStart[0] !== rep.selEnd[0] || rep.selStart[1] !== rep.selEnd[1]); | ||
8 | if(!isSelection) return false; // No point proceeding if no selection.. | ||
9 | |||
10 | var attrs = rep.apool.attribToNum; // get the attributes on this document | ||
11 | $.each(attrs, function(k, v){ // for each attribute | ||
12 | var attr = k.split(",")[0]; // get the name of the attribute | ||
13 | if(attr !== "author"){ // if its not an author attribute | ||
14 | ace.ace_setAttributeOnSelection(attr, false); // set the attribute to false | ||
15 | } | ||
16 | }); | ||
17 | },'clearFormatting' , true); | ||
18 | }); | ||
19 | |||
20 | $('.findAndReplace').click(function(){ | ||
21 | var from = prompt("Search for..."); | ||
22 | var to = prompt("Replace with..."); | ||
23 | var HTMLLines = $('iframe[name="ace_outer"]').contents().find('iframe').contents().find("#innerdocbody").children("div"); | ||
24 | $(HTMLLines).each(function(){ // For each line | ||
25 | findAndReplace(from, to, this); | ||
26 | }); | ||
27 | }); | ||
28 | |||
29 | }); | ||
30 | } | ||
31 | |||
32 | function findAndReplace(searchText, replacement, searchNode) { | ||
33 | if (!searchText || typeof replacement === 'undefined') { | ||
34 | // Throw error here if you want... | ||
35 | return; | ||
36 | } | ||
37 | var regex = typeof searchText === 'string' ? | ||
38 | new RegExp(searchText, 'gi') : searchText, | ||
39 | childNodes = (searchNode || document.body).childNodes, | ||
40 | cnLength = childNodes.length, | ||
41 | excludes = ["html","head","style","title","meta","script","object","iframe","link"]; | ||
42 | |||
43 | while (cnLength--) { | ||
44 | var currentNode = childNodes[cnLength]; | ||
45 | if (currentNode.nodeType === 1){ | ||
46 | if(excludes.indexOf(currentNode.nodeName.toLowerCase() === -1)){ | ||
47 | arguments.callee(searchText, replacement, currentNode); | ||
48 | } | ||
49 | } | ||
50 | if (currentNode.nodeType !== 3 || !regex.test(currentNode.data) ) { | ||
51 | continue; | ||
52 | } | ||
53 | var parent = currentNode.parentNode, | ||
54 | frag = (function(){ | ||
55 | var html = currentNode.data.replace(regex, replacement), | ||
56 | wrap = document.createElement('div'), | ||
57 | frag = document.createDocumentFragment(); | ||
58 | wrap.innerHTML = html; | ||
59 | while (wrap.firstChild) { | ||
60 | frag.appendChild(wrap.firstChild); | ||
61 | } | ||
62 | return frag; | ||
63 | })(); | ||
64 | parent.insertBefore(frag, currentNode); | ||
65 | parent.removeChild(currentNode); | ||
66 | } | ||
67 | } | ||