tinymce-editor/copy_this/modules/hdi/hdi-tinymce/tinymce/plugins/searchreplace/plugin.min.js
Marat.Bedoev@heiner-direct.com a9baadbf7d update TinyMCE 4.0.10
2013-11-14 10:10:41 +01:00

1 line
6.2 KiB
JavaScript

!function(){function e(e,t,n,a,r){function i(e,t){if(t=t||0,!e[0])throw"findAndReplaceDOMText cannot handle zero-length matches";var n=e.index;if(t>0){var a=e[t];if(!a)throw"Invalid capture group";n+=e[0].indexOf(a),e[0]=a}return[n,n+e[0].length,[e[0]]]}function d(e){var t;if(3===e.nodeType)return e.data;if(h[e.nodeName]&&!u[e.nodeName])return"";if(t="",(u[e.nodeName]||g[e.nodeName])&&(t+="\n"),e=e.firstChild)do t+=d(e);while(e=e.nextSibling);return t}function o(e,t,n){var a,r,i,d,o=[],l=0,c=e,s=t.shift(),f=0;e:for(;;){if((u[c.nodeName]||g[c.nodeName])&&l++,3===c.nodeType&&(!r&&c.length+l>=s[1]?(r=c,d=s[1]-l):a&&o.push(c),!a&&c.length+l>s[0]&&(a=c,i=s[0]-l),l+=c.length),a&&r){if(c=n({startNode:a,startNodeIndex:i,endNode:r,endNodeIndex:d,innerNodes:o,match:s[2],matchIndex:f}),l-=r.length-d,a=null,r=null,o=[],s=t.shift(),f++,!s)break}else{if((!h[c.nodeName]||u[c.nodeName])&&c.firstChild){c=c.firstChild;continue}if(c.nextSibling){c=c.nextSibling;continue}}for(;;){if(c.nextSibling){c=c.nextSibling;break}if(c.parentNode===e)break e;c=c.parentNode}}}function l(e){var t;if("function"!=typeof e){var n=e.nodeType?e:f.createElement(e);t=function(e,t){var a=n.cloneNode(!1);return a.setAttribute("data-mce-index",t),e&&a.appendChild(f.createTextNode(e)),a}}else t=e;return function(e){var n,a,r,i=e.startNode,d=e.endNode,o=e.matchIndex;if(i===d){var l=i;r=l.parentNode,e.startNodeIndex>0&&(n=f.createTextNode(l.data.substring(0,e.startNodeIndex)),r.insertBefore(n,l));var c=t(e.match[0],o);return r.insertBefore(c,l),e.endNodeIndex<l.length&&(a=f.createTextNode(l.data.substring(e.endNodeIndex)),r.insertBefore(a,l)),l.parentNode.removeChild(l),c}n=f.createTextNode(i.data.substring(0,e.startNodeIndex)),a=f.createTextNode(d.data.substring(e.endNodeIndex));for(var s=t(i.data.substring(e.startNodeIndex),o),u=[],h=0,g=e.innerNodes.length;g>h;++h){var m=e.innerNodes[h],p=t(m.data,o);m.parentNode.replaceChild(p,m),u.push(p)}var x=t(d.data.substring(0,e.endNodeIndex),o);return r=i.parentNode,r.insertBefore(n,i),r.insertBefore(s,i),r.removeChild(i),r=d.parentNode,r.insertBefore(x,d),r.insertBefore(a,d),r.removeChild(d),x}}var c,s,f,u,h,g,m=[],p=0;if(f=t.ownerDocument,u=r.getBlockElements(),h=r.getWhiteSpaceElements(),g=r.getShortEndedElements(),s=d(t)){if(e.global)for(;c=e.exec(s);)m.push(i(c,a));else c=s.match(e),m.push(i(c,a));return m.length&&(p=m.length,o(t,m,l(n))),p}}function t(t){function n(){function e(){r.statusbar.find("#next").disabled(!i(c+1).length),r.statusbar.find("#prev").disabled(!i(c-1).length)}function n(){tinymce.ui.MessageBox.alert("Could not find the specified string.",function(){r.find("#find")[0].focus()})}var a={},r=tinymce.ui.Factory.create({type:"window",layout:"flex",pack:"center",align:"center",onClose:function(){t.focus(),l.done()},onSubmit:function(t){var d,o,s,f;return t.preventDefault(),o=r.find("#case").checked(),f=r.find("#words").checked(),s=r.find("#find").value(),s.length?a.text==s&&a.caseState==o&&a.wholeWord==f?0===i(c+1).length?(n(),void 0):(l.next(),e(),void 0):(d=l.find(s,o,f),d||n(),r.statusbar.items().slice(1).disabled(0===d),e(),a={text:s,caseState:o,wholeWord:f},void 0):(l.done(!1),r.statusbar.items().slice(1).disabled(!0),void 0)},buttons:[{text:"Find",onclick:function(){r.submit()}},{text:"Replace",disabled:!0,onclick:function(){l.replace(r.find("#replace").value())||(r.statusbar.items().slice(1).disabled(!0),c=-1,a={})}},{text:"Replace all",disabled:!0,onclick:function(){l.replace(r.find("#replace").value(),!0,!0),r.statusbar.items().slice(1).disabled(!0),a={}}},{type:"spacer",flex:1},{text:"Prev",name:"prev",disabled:!0,onclick:function(){l.prev(),e()}},{text:"Next",name:"next",disabled:!0,onclick:function(){l.next(),e()}}],title:"Find and replace",items:{type:"form",padding:20,labelGap:30,spacing:10,items:[{type:"textbox",name:"find",size:40,label:"Find",value:t.selection.getNode().src},{type:"textbox",name:"replace",size:40,label:"Replace with"},{type:"checkbox",name:"case",text:"Match case",label:" "},{type:"checkbox",name:"words",text:"Whole words",label:" "}]}}).renderTo().reflow()}function a(n){var a,r;return r=t.dom.create("span",{"class":"mce-match-marker","data-mce-bogus":1}),a=t.getBody(),l.done(!1),e(n,a,r,!1,t.schema)}function r(e){var t=e.parentNode;t.insertBefore(e.firstChild,e),e.parentNode.removeChild(e)}function i(e){var n,a=[];if(n=tinymce.toArray(t.getBody().getElementsByTagName("span")),n.length)for(var r=0;r<n.length;r++){var i=n[r].getAttribute("data-mce-index");null!==i&&i.length&&i===e.toString()&&a.push(n[r])}return a}function d(e){var n=c,a=t.dom;e=e!==!1,e?n++:n--,a.removeClass(i(c),"mce-match-marker-selected");var r=i(n);return r.length?(a.addClass(i(n),"mce-match-marker-selected"),t.selection.scrollIntoView(r[0]),n):-1}function o(e){e.parentNode.removeChild(e)}var l=this,c=-1;l.init=function(e){e.addMenuItem("searchreplace",{text:"Find and replace",shortcut:"Ctrl+F",onclick:n,separator:"before",context:"edit"}),e.addButton("searchreplace",{tooltip:"Find and replace",shortcut:"Ctrl+F",onclick:n}),e.addCommand("SearchReplace",n),e.shortcuts.add("Ctrl+F","",n)},l.find=function(e,t,n){e=e.replace(/[\-\[\]\/\{\}\(\)\*\+\?\.\\\^\$\|]/g,"\\$&"),e=n?"\\b"+e+"\\b":e;var r=a(new RegExp(e,t?"g":"gi"));return r&&(c=-1,c=d(!0)),r},l.next=function(){var e=d(!0);-1!==e&&(c=e)},l.prev=function(){var e=d(!1);-1!==e&&(c=e)},l.replace=function(e,n,a){var d,s,f,u,h,g,m=c;for(n=n!==!1,f=t.getBody(),s=tinymce.toArray(f.getElementsByTagName("span")),d=0;d<s.length;d++){var p=s[d].getAttribute("data-mce-index");if(null!==p&&p.length)if(u=h=parseInt(p,10),a||u===c){for(e.length?(s[d].firstChild.nodeValue=e,r(s[d])):o(s[d]);s[++d];)if(u=s[d].getAttribute("data-mce-index"),null!==p&&p.length){if(u!==h){d--;break}o(s[d])}n&&m--}else h>c&&s[d].setAttribute("data-mce-index",h-1)}return t.undoManager.add(),c=m,n?(g=i(m+1).length>0,l.next()):(g=i(m-1).length>0,l.prev()),!a&&g},l.done=function(e){var n,a,i,d;for(a=tinymce.toArray(t.getBody().getElementsByTagName("span")),n=0;n<a.length;n++){var o=a[n].getAttribute("data-mce-index");null!==o&&o.length&&(o===c.toString()&&(i||(i=a[n].firstChild),d=a[n].firstChild),r(a[n]))}if(i&&d){var l=t.dom.createRng();return l.setStart(i,0),l.setEnd(d,d.data.length),e!==!1&&t.selection.setRng(l),l}}}tinymce.PluginManager.add("searchreplace",t)}();