blob: ffba02f6ecc9bcdae6d8b0b7d479063760b1c147 [file] [log] [blame]
/*
* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements. See the NOTICE file distributed with
* this work for additional information regarding copyright ownership.
* The ASF licenses this file to You under the Apache License, Version 2.0
* (the "License"); you may not use this file except in compliance with
* the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
/*
* This is where all the browser dependent functions should be
*/
var IE = (document.all) ? true : false;
function addEvent(obj,type,func,bol) {
if (IE) {
obj.attachEvent(type,func);
} else {
obj.addEventListener(type.replace(/^on/g,""),func,bol);
}
}
function removeEvent(obj,type,func,bol) {
if (IE) {
obj.detachEvent(type,func);
} else {
obj.removeEventListener(type.replace(/^on/g,""),func,bol);
}
}
function setClass(obj,value) {
if (IE) {
obj.className = value;
} else {
obj.setAttribute("class",value,false);
}
}
function getClass(obj) {
return (IE) ? obj.className : obj.getAttribute("class");
}
function getTarget(e,obj) {
if (IE) {
return window.event.srcElement;
} else {
if (e) {
return e.target;
} else {
return obj;
}
}
}
function getContentSource() {
var iframe = document.getElementById('edit');
var editor_body = iframe.contentWindow.document.body;
if (IE) {
return editor_body.createTextRange();
} else {
var source = editor_body.ownerDocument.createRange();
source.selectNodeContents(editor.body);
return source.toString();
}
}
function getSelection(iframe) {
if (IE) {
return iframe.contentWindow.document.selection.createRange();
} else {
return iframe.contentWindow.getSelection();
}
}
function getCommandFormat(block) {
return (IE) ? "<"+block+">" : block;
}
// ------------------------ WARNING: HOTSPOT! ---------------------------
// since it's called for every keystroke, keep it as fast as possible!!!
// ----------------------------------------------------------------------
function getOrigin() {
var iframe = document.getElementById('edit');
var selection = getSelection(iframe);
if (IE) {
var event = iframe.contentWindow.event;
if (selection.type == "Control") {
if (selection.length > 1) {
alert("Error too many obj");
} else {
return selection(0);
}
} else {
if ((selection.parentElement().nodeType != NodeType.TEXT_NODE) && event) {
var nodes = selection.parentElement().childNodes;
if (nodes.length == 1) return nodes[0];
for (var co = 0; co < nodes.length; co++) {
if (!nodes[co].offsetTop && nodes[co].nextSibling) {
if ((nodes[co].nextSibling.offsetTop <= event.y)
&& (nodes[co].nextSibling.offsetTop + nodes[co].nextSibling.offsetHeight >= event.y)
&& (nodes[co].nextSibling.offsetLeft <= event.x)) {
return nodes[co];
}
} else if ((nodes[co].offsetTop <= event.y)
&& (nodes[co].offsetTop + nodes[co].offsetHeight >= event.y)) {
return nodes[co];
}
}
return nodes[nodes.length-1];
}
}
return selection.parentElement();
} else {
if (selection.anchorNode == selection.focusNode) {
if (selection.anchorNode.nodeType != selection.anchorNode.TEXT_NODE) {
var index = (selection.focusOffset == 0) ? 0 : selection.focusOffset - 1;
return selection.anchorNode.childNodes[index];
}
}
return selection.anchorNode;
}
}