-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathxedit.js.min
18 lines (17 loc) · 4.25 KB
/
xedit.js.min
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
function intuitUIClass(){if(document.documentElement.tagName=="window")
return"xul";return"html";}
makeUIElement={};makeUIElement.xul={button:function(buttonX){var button=document.createElement("toolbarbutton");button.makesElement=buttonX.getAttribute("element");if(buttonX.getAttribute("image"))
button.setAttribute("image",buttonX.getAttribute("image"));else
button.setAttribute("label",buttonX.getAttribute("name"));return button;},spacer:function(){return document.createElement("toolbarspacer");},toolbar:function(){var toolbar=document.createElement("toolbar");var toolbox=document.createElement("toolbox");toolbox.appendChild(toolbar);var edit=document.getElementById("edit");edit.parentNode.insertBefore(toolbox,edit);return toolbar;}};makeUIElement.html={button:function(buttonX){if(buttonX.getAttribute("image")){var img=document.createElement("img");img.setAttribute("src",buttonX.getAttribute("image"));img.setAttribute("style","height:30px");return img;}
var button=document.createElement("button");button.appendChild(document.createTextNode(buttonX.getAttribute("name")));return button;},spacer:function(){var span=document.createElement("span");span.appendChild(document.createTextNode(" "));span.setAttribute("style","margin:20px");return span;},toolbar:function(){var toolbar=document.createElement("div");toolbar.setAttribute("id","toptoolbar");var edit=document.getElementById("edit");edit.parentNode.insertBefore(toolbar,edit);return toolbar;}};setButtonAction={surround:function(buttonX,button){button.makesElement=buttonX.getAttribute("element");button.addEventListener("click",function(){makeSelection(this.makesElement)},true);},replace:function(buttonX,button){button.makesElement=buttonX.getAttribute("element");button.addEventListener("click",function(){replaceHeadNode(this.makesElement)},true);},javascript:function(buttonX,button){var js=buttonX.getAttribute("function");button.addEventListener("click",function(){eval(js)},true);}};function makeSelection(element){var s=window.getSelection();if(s.isCollapsed)return;if(s.focusNode!=s.anchorNode){alert("Cannae do it");return}
var r=s.getRangeAt(0);r.surroundContents(document.createElement(element));document.getElementById('edit').focus();}
function paragraphLevelElement(p){return p.nodeType==1&&document.defaultView.getComputedStyle(p,"").display=="block";}
function replaceHeadNode(element){var s=window.getSelection();var p=s.getRangeAt(0).startContainer;while(p&&!paragraphLevelElement(p)){p=p.parentNode}
var children=p.childNodes;var repl=document.createElement(element);while(children.length>0)repl.appendChild(children[0]);p.parentNode.insertBefore(repl,p);p.parentNode.removeChild(p);}
function getDoc(url){var myXMLHTTPRequest=new XMLHttpRequest();myXMLHTTPRequest.open("GET",url,false);myXMLHTTPRequest.overrideMimeType('text/xml');myXMLHTTPRequest.send(null);return myXMLHTTPRequest.responseXML;}
var config;function addButtons(){var uiclass=intuitUIClass();var buttonbox=makeUIElement[uiclass]["toolbar"]();var xul=(document.documentElement.tagName.search(/window/i)!=-1);var buttons=(config.getElementsByTagName("buttons"))[0].childNodes;for(var i=0;i<buttons.length;i++){var buttonConfig=buttons.item(i);if(buttonConfig.tagName=="button"){var button=makeUIElement[uiclass]["button"](buttonConfig);var action=buttonConfig.getAttribute("action")||"surround";if(!setButtonAction[action]){alert("Unknown action '"+action+"' for button '"+buttonConfig.getAttribute("name")+"'");return;}
setButtonAction[action](buttonConfig,button);buttonbox.appendChild(button);}else if(buttonConfig.tagName=="spacer"){buttonbox.appendChild(makeUIElement[uiclass]["spacer"]());}}}
function appendCSS(){var styles=config.getElementsByTagName("stylesheet");var head=(document.getElementsByTagName("head"))[0];var link=document.createElement("link");for(var sNo=0;sNo<styles.length;sNo++){var s=styles[sNo];link.setAttribute("href",s.getAttribute("href"));link.setAttribute("type","text/css");link.setAttribute("rel","stylesheet");head.appendChild(link);}}
function startXEdit(configurl){config=getDoc(configurl).documentElement;appendCSS();addButtons();}
function loadDoc(docurl){var doc=getDoc(docurl).documentElement;var editfield=document.getElementById("edit");while(editfield.childNodes.length>0)editfield.removeChild(editfield.firstChild)
editfield.appendChild(doc);}