cms是开源的框架

源代码在线查看: edit.js

软件大小: 19376 K
上传用户: jjingle
关键词: cms 开源
下载地址: 免注册下载 普通下载 VIP

相关代码

				/*
				 * File   : $Source: /usr/local/cvs/opencms/modules/org.opencms.editors/resources/system/workplace/editors/xmlcontent/edit.js,v $
				 * Date   : $Date: 2006/04/28 15:20:52 $
				 * Version: $Revision: 1.7 $
				 *
				 * This library is part of OpenCms -
				 * the Open Source Content Mananagement System
				 *
				 * Copyright (c) 2005 Alkacon Software GmbH (http://www.alkacon.com)
				 *
				 * This library is free software; you can redistribute it and/or
				 * modify it under the terms of the GNU Lesser General Public
				 * License as published by the Free Software Foundation; either
				 * version 2.1 of the License, or (at your option) any later version.
				 *
				 * This library is distributed in the hope that it will be useful,
				 * but WITHOUT ANY WARRANTY; without even the implied warranty of
				 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
				 * Lesser General Public License for more details.
				 *
				 * For further information about Alkacon Software GmbH, please see the
				 * company website: http://www.alkacon.com
				 *
				 * For further information about OpenCms, please see the
				 * project website: http://www.opencms.org
				 *
				 * You should have received a copy of the GNU Lesser General Public
				 * License along with this library; if not, write to the Free Software
				 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
				 */
				
				//------------------------------------------------------//
				// Script for xml content editor
				//------------------------------------------------------//
				
				// stores the opened window object
				var treewin = null;
				// stores id prefix of opened element operation buttons
				var oldEditorButtons = null;
				// helper for the timeout on button row
				var buttonTimer = null;
				// mouse up & resize event closes open element operation buttons
				document.onmouseup = hideElementButtons;
				window.onresize = hideElementButtons;
				
				// function action on button click
				function buttonAction(para) {
					var _form = document.EDITOR;
					_form.target = "_self";
					submit(_form);
				
					switch (para) {
					case 1:
						// exit editor without saving
						_form.action.value = actionExit;
						_form.target = "_top";
						_form.submit();
						break;
					case 2:
						// save and exit editor
						_form.action.value = actionSaveExit;
						_form.submit();
						break;
					case 3:
						// save content
						_form.action.value = actionSave;
						_form.submit();
						break;
					case 4:
						// change element (change locale)
						_form.action.value = actionChangeElement;
						_form.submit();
						break;
					case 5:
						// add optional element
						_form.action.value = actionAddElement;
						_form.submit();
						break;
					case 6:
						// remove optional element
						_form.action.value = actionRemoveElement;
						_form.submit();
						break;
					case 7:
						// preview
						_form.action.value = actionPreview;
						_form.target = "PREVIEW";
						openWindow = window.open("about:blank", "PREVIEW", "width=950,height=700,left=10,top=10,resizable=yes,scrollbars=yes,location=yes,menubar=yes,toolbar=yes,dependent=yes");
						_form.submit();
						break;
					case 8:
						// check elements before performing customized action
						_form.action.value = actionCheck;
						_form.submit();
						break;
					case 9:
						// save and perform customized action
						_form.action.value = actionSaveAction;
						_form.target = "_top";
						_form.submit();
						break;
					case 10:
						// move element down
						_form.action.value = actionMoveElementDown;
						_form.submit();
						break;
					case 11:
						// move element up
						_form.action.value = actionMoveElementUp;
						_form.submit();
						break;
					default:
						alert("No action defined for this button!");
						break;
					}
				}
				
				function submit(form) {
					try {
						// submit html editing areas if present
						submitHtml(form);
					} catch (e) {}
				}
				
				function opensmallwin(url, name, w, h) {
					encodedurl = encodeURI(url);
					smallwindow = window.open(encodedurl, name, 'toolbar=no,location=no,directories=no,status=no,menubar=0,scrollbars=yes,resizable=yes,top=150,left=660,width='+w+',height='+h);
					if(smallwindow != null) {
						if (smallwindow.opener == null) {
							smallwindow.opener = self;
						}
					}
					return smallwindow;
				}
				
				// add an optional element to the currently edited content
				function addElement(elemName, insertAfter) {
					setLastPosition();
					var _form = document.EDITOR;
					_form.elementname.value = elemName;
					_form.elementindex.value = insertAfter;
					buttonAction(5);
				}
				
				// move an element in currently edited content
				function moveElement(elemName, index, direction) {
					setLastPosition();
					var _form = document.EDITOR;
					_form.elementname.value = elemName;
					_form.elementindex.value = index;
					if (direction == "down") {
						buttonAction(10);
					} else {
						buttonAction(11);
					}
				
				}
				
				// remove an optional element from currently edited content
				function removeElement(elemName, index) {
					setLastPosition();
					var _form = document.EDITOR;
					_form.elementname.value = elemName;
					_form.elementindex.value = index;
					buttonAction(6);
				}
				
				// sets the last scroll position to return to
				function setLastPosition() {
					try {
						if (browser.isIE) {
							top.edit.buttonbar.lastPosY = document.body.scrollTop;
						} else {
							top.edit.buttonbar.lastPosY = window.pageYOffset;
						}
					} catch (e) {
						// ignore
					}
				}
				
				// checks and adjusts the language selector in case an error is found in the edited content
				function checkElementLanguage(newValue) {
					try {
						var langBox = parent.buttonbar.document.forms["buttons"].elements["elementlanguage"];
						if (langBox.value != newValue) {
							langBox.value = newValue;
						}
					} catch (e) {
						// ignore
					}
				}
				
				// submits the checked form for customized action button and considers delayed string insertion
				function submitSaveAction() {
					if (! initialized) {
						setTimeout('submitSaveAction()', 20);
						return;
					}
					if (stringsPresent == true) {
						if (stringsInserted == true) {
							buttonAction(9);
						} else {
							setTimeout('submitSaveAction()', 20);
						}
					} else {
						buttonAction(9);
					}
				}
				
				// checks if the preview button is shown in the form for download or image galleries
				function checkPreview(fieldId) {
					try {
						var theUri = document.getElementById(fieldId).value;
						theUri = theUri.replace(/ /, "");
						if ((theUri != "") && (theUri.charAt(0) == "/" || theUri.indexOf("http://") == 0)) {
							document.getElementById("preview" + fieldId).className = "show";
						} else {
							document.getElementById("preview" + fieldId).className = "hide";
						}
					} catch (e) {
						document.getElementById("preview" + fieldId).className = "hide";
					}
				}
				
				// scrolls the input form to the position where last element was added or removed
				function scrollForm() {
					var posY = 0;
					try {
						posY = top.edit.buttonbar.lastPosY;
					} catch (e) {}
					window.scrollTo(0, posY);
				}
				
				// closes the popup window, this method is called by the onunload event
				function closeTreeWin() {
					if (treewin != null) {
						// close the file selector window
						window.treewin.close();
						treewin = null;
						treeForm = null;
						treeField = null;
						treeDoc = null;
					}
				}
				
				// shows the element operation buttons
				function showElementButtons(elementName, elementIndex, showRemove, showUp, showDown, showAdd) {
					var elemId = elementName + "." + elementIndex;
					if (oldEditorButtons != null && oldEditorButtons != elemId) {
						// close eventually open element buttons
						document.getElementById("xmlElementButtons").style.visibility = "hidden";
					}
					// get button element
					var elem = document.getElementById("xmlElementButtons");
				
					// create the button row HTML
					var buttons = "";
				
					// remove element button
					if (showRemove) {
						buttons += button("javascript:removeElement('" + elementName + "', " + elementIndex + ")", null, "deletecontent", LANG_BT_DELETE, buttonStyle);
					} else {
						buttons += button(null, null, "deletecontent_in", LANG_BT_DELETE, buttonStyle);
					}
				
					// move up element button
					if (showUp) {
						buttons += button("javascript:moveElement('" + elementName + "', " + elementIndex + ", 'down')", null, "move_up", LANG_BT_MOVE_UP, buttonStyle);
					} else {
						buttons += button(null, null, "move_up_in", LANG_BT_MOVE_UP, buttonStyle);
					}
				
					// move down element button
					if (showDown) {
						buttons += button("javascript:moveElement('" + elementName + "', " + elementIndex + ", 'up')", null, "move_down", LANG_BT_MOVE_DOWN, buttonStyle);
					} else {
						buttons += button(null, null, "move_down_in", LANG_BT_MOVE_DOWN, buttonStyle);
					}
				
					// add element button
					if (showAdd) {
						buttons += button("javascript:addElement('" + elementName + "', " + elementIndex + ")", null, "new", LANG_BT_ADD, buttonStyle);
					} else {
						buttons += button(null, null, "new_in", LANG_BT_ADD, buttonStyle);
					}
				
					buttons += "";
				
					// set the created HTML
					elem.innerHTML = buttons;
					// get the icon
					var icon = document.getElementById("btimg." + elemId);
					showEditorElement(elem, icon, 10, 20, true);
					oldEditorButtons = elemId;
				}
				
				// hides the element operation buttons
				function hideElementButtons() {
					if (oldEditorButtons != null) {
						document.getElementById("xmlElementButtons").style.visibility = "hidden";
						oldEditorButtons = null;
						return false;
					}
					return true;
				}
				
				// checks presence of element buttons and hides row after a timeout
				function checkElementButtons(resetTimer) {
					if (resetTimer) {
						// reset the timer because cursor is over buttons
						if (buttonTimer != null) {
							clearTimeout(buttonTimer);
						}
					} else {
						// set timeout for button row (mouseout)
						buttonTimer = setTimeout("hideElementButtons()", 1500);
					}
				}
				
				// shows the specified element belonging to the given icon (for help & element buttons
				function showEditorElement(elem, icon, xOffset, yOffset, alignToLeft) {
				
				    if (elem.style.visibility != "visible" && icon) {
					    var x = findPosX(icon) + xOffset;
					    var y = findPosY(icon) + yOffset;
					    var textHeight = elem.scrollHeight;
					    var textWidth = elem.scrollWidth;
					    var scrollSize = 20;
					    var scrollTop = 0;
					    var scrollLeft = 0;
					    var clientHeight = 0;
					    var clientWidth = 0;
					    if (document.documentElement && (document.documentElement.scrollTop || document.documentElement.clientHeight)) {
					        scrollTop = document.documentElement.scrollTop;
					        scrollLeft = document.documentElement.scrollLeft;
					        clientHeight = document.documentElement.clientHeight;
					        clientWidth = document.documentElement.clientWidth;
					    } else if (document.body) {
					        scrollTop = document.body.scrollTop;
					        scrollLeft = document.body.scrollLeft;
					        clientHeight = document.body.clientHeight;
					        clientWidth = document.body.clientWidth;
					    }
					    if ((y + textHeight) > (clientHeight + scrollTop)) {
					        y = y - textHeight;
					    }
					    if (y < scrollTop) {
					        y = (clientHeight + scrollTop) - (textHeight + scrollSize);
					    }
					    if (y < scrollTop) {
					        y = scrollTop;
					    }
					    if ((x + textWidth) > (clientWidth + scrollLeft) || alignToLeft) {
					        x = x - textWidth;
					    }
					    if (x < scrollLeft) {
					        x = (clientWidth + scrollLeft) - (textWidth + scrollSize);
					    }
					    if (x < scrollLeft) {
					        x = scrollLeft;
					    }
					
					    if (alignToLeft) {
					    	x += xOffset;
					    }
					
					    elem.style.left = x + "px";
					    elem.style.top =  y + "px";
					    elem.style.visibility = "visible";
					    return y;
				    }
				}
				
				// finds the x position of an element
				function findPosX(obj) {
				    var curleft = 0;
				    if (obj && obj.offsetParent) {
				        while (obj.offsetParent) {
				            curleft += obj.offsetLeft - obj.scrollLeft;
				            obj = obj.offsetParent;
				        }
				    } else if (obj && obj.x) {
				        curleft += obj.x;
				    }
				    return curleft;
				}
				
				// finds the y position of an element
				function findPosY(obj) {
				    var curtop = 0;
				    if (obj && obj.offsetParent) {
				        while (obj.offsetParent) {
				            curtop += obj.offsetTop - obj.scrollTop;
				            obj = obj.offsetParent;
				        }
				    } else if (obj && obj.y) {
				        curtop += obj.y;
				    }
				    return curtop;
				}
				
				// formats a button in one of 3 styles (type 0..2)
				function button(href, target, image, label, type) {
				
					if (image != null && image.indexOf('.') == -1) {
				        // append default suffix for images
				        image += ".png";
				    }
				
					var result = "";
					switch (type) {
						case 1:
						// image and text
						if (href != null) {
							result += "							result += href;
							result += "\" class=\"button\"";
							if (target != null) {
								result += " target=\"";
								result += target;
								result += "\"";
							}
							result += ">";
						}
						result += "						if (href != null) {
							result += " class=\"norm\" onmouseover=\"className='over'\" onmouseout=\"className='norm'\" onmousedown=\"className='push'\" onmouseup=\"className='over'\"";
						} else {
							result += " class=\"disabled\"";
						}
						result += ">						result += "style=\"background-image: url('";
						result += skinUri;
						result += "buttons/";
						result += image;
						result += "');\">";
						result += label;
						result += "";
						if (href != null) {
							result += "";
						}
						break;
				
						case 2:
						// text only
						if (href != null) {
							result += "							result += href;
							result += "\" class=\"button\"";
							if (target != null) {
								result += " target=\"";
								result += target;
								result += "\"";
							}
							result += ">";
						}
						result += "						if (href != null) {
							result += " class=\"norm\" onmouseover=\"className='over'\" onmouseout=\"className='norm'\" onmousedown=\"className='push'\" onmouseup=\"className='over'\"";
						} else {
							result += " class=\"disabled\"";
						}
						result += ">";
						result += label;
						result += "";
						if (href != null) {
							result += "";
						}
						break;
				
						default:
						// only image
						if (href != null) {
							result += "							result += href;
							result += "\" class=\"button\"";
							if (target != null) {
								result += " target=\"";
								result += target;
								result += "\"";
							}
							result += " title=\"";
							result += label;
							result += "\">";
						}
						result += "						if (href != null) {
							result += " class=\"norm\" onmouseover=\"className='over'\" onmouseout=\"className='norm'\" onmousedown=\"className='push'\" onmouseup=\"className='over'\"";
						} else {
							result += " class=\"disabled\"";
						}
						result += ">						result += skinUri;
						result += "buttons/";
						result += image;
						result += "\">";
						result += "";
						break;
					}
					result += "\n";
					return result;
				}			

相关资源