diff options
Diffstat (limited to 'gstudio/static/gstudio/js/wymeditor')
76 files changed, 8434 insertions, 0 deletions
diff --git a/gstudio/static/gstudio/js/wymeditor/iframe/default/lbl-blockquote.png b/gstudio/static/gstudio/js/wymeditor/iframe/default/lbl-blockquote.png Binary files differnew file mode 100644 index 00000000..65ea2054 --- /dev/null +++ b/gstudio/static/gstudio/js/wymeditor/iframe/default/lbl-blockquote.png diff --git a/gstudio/static/gstudio/js/wymeditor/iframe/default/lbl-h1.png b/gstudio/static/gstudio/js/wymeditor/iframe/default/lbl-h1.png Binary files differnew file mode 100644 index 00000000..dea1da36 --- /dev/null +++ b/gstudio/static/gstudio/js/wymeditor/iframe/default/lbl-h1.png diff --git a/gstudio/static/gstudio/js/wymeditor/iframe/default/lbl-h2.png b/gstudio/static/gstudio/js/wymeditor/iframe/default/lbl-h2.png Binary files differnew file mode 100644 index 00000000..f4b4274d --- /dev/null +++ b/gstudio/static/gstudio/js/wymeditor/iframe/default/lbl-h2.png diff --git a/gstudio/static/gstudio/js/wymeditor/iframe/default/lbl-h3.png b/gstudio/static/gstudio/js/wymeditor/iframe/default/lbl-h3.png Binary files differnew file mode 100644 index 00000000..bd99f769 --- /dev/null +++ b/gstudio/static/gstudio/js/wymeditor/iframe/default/lbl-h3.png diff --git a/gstudio/static/gstudio/js/wymeditor/iframe/default/lbl-h4.png b/gstudio/static/gstudio/js/wymeditor/iframe/default/lbl-h4.png Binary files differnew file mode 100644 index 00000000..e06ab3d1 --- /dev/null +++ b/gstudio/static/gstudio/js/wymeditor/iframe/default/lbl-h4.png diff --git a/gstudio/static/gstudio/js/wymeditor/iframe/default/lbl-h5.png b/gstudio/static/gstudio/js/wymeditor/iframe/default/lbl-h5.png Binary files differnew file mode 100644 index 00000000..360fc600 --- /dev/null +++ b/gstudio/static/gstudio/js/wymeditor/iframe/default/lbl-h5.png diff --git a/gstudio/static/gstudio/js/wymeditor/iframe/default/lbl-h6.png b/gstudio/static/gstudio/js/wymeditor/iframe/default/lbl-h6.png Binary files differnew file mode 100644 index 00000000..73e644a0 --- /dev/null +++ b/gstudio/static/gstudio/js/wymeditor/iframe/default/lbl-h6.png diff --git a/gstudio/static/gstudio/js/wymeditor/iframe/default/lbl-p.png b/gstudio/static/gstudio/js/wymeditor/iframe/default/lbl-p.png Binary files differnew file mode 100644 index 00000000..7f2bf341 --- /dev/null +++ b/gstudio/static/gstudio/js/wymeditor/iframe/default/lbl-p.png diff --git a/gstudio/static/gstudio/js/wymeditor/iframe/default/lbl-pre.png b/gstudio/static/gstudio/js/wymeditor/iframe/default/lbl-pre.png Binary files differnew file mode 100644 index 00000000..e026e47c --- /dev/null +++ b/gstudio/static/gstudio/js/wymeditor/iframe/default/lbl-pre.png diff --git a/gstudio/static/gstudio/js/wymeditor/iframe/default/wymiframe.css b/gstudio/static/gstudio/js/wymeditor/iframe/default/wymiframe.css new file mode 100644 index 00000000..769520ce --- /dev/null +++ b/gstudio/static/gstudio/js/wymeditor/iframe/default/wymiframe.css @@ -0,0 +1,90 @@ +/* + * WYMeditor : what you see is What You Mean web-based editor + * Copyright (c) 2005 - 2009 Jean-Francois Hovinne, http://www.wymeditor.org/ + * Dual licensed under the MIT (MIT-license.txt) + * and GPL (GPL-license.txt) licenses. + * + * For further information visit: + * http://www.wymeditor.org/ + * + * File Name: + * wymeditor.css + * Main editor css file. + * See the documentation for more info. + * + * File Authors: + * Jean-Francois Hovinne (jf.hovinne a-t wymeditor dotorg) + * Daniel Reszka (d.reszka a-t wymeditor dotorg) +*/ + +/* VISUAL FEEDBACK */ + +/* basic */ + body { background: #e1e8f1;} + +/* make HTML blocs visible */ + p, + h1, + h2, + h3, + h4, + h5, + h6, + ul, + ol, + table, + blockquote, + pre { background: #FFFFFF no-repeat 2px 2px; + padding:8px 5px 5px; + margin:10px; } + td { background: #F0F4F8; } + th { background: #ffffcc; } + ul, + ol { border-left:20px solid #B9C4D0; padding:0px 5px; } + caption { background: #E4E4B0; padding: 5px; font-weight: bold; } + table { font-size: 12px; width: 500px; } + td { width: 25%; } + blockquote { margin-left: 30px; } + pre { background-color:transparent; border: 1px solid white; } + +/* Gecko min height fix */ + p { min-height: 1em; } /*min-height is needed under Firefox, because empty parargraphs */ + *+html p { min-height: auto; } /* but we have to remove it under IE7 because it triggers the 'haslayout' mode */ + td { height: 1.6em; } + +/* labels */ + p { background-image: url(lbl-p.png); } + h1 { background-image: url(lbl-h1.png); } + h2 { background-image: url(lbl-h2.png); } + h3 { background-image: url(lbl-h3.png); } + h4 { background-image: url(lbl-h4.png); } + h5 { background-image: url(lbl-h5.png); } + h6 { background-image: url(lbl-h6.png); } + blockquote{ background-image: url(lbl-blockquote.png); } + pre { background-image: url(lbl-pre.png); } + +/* specific HTML elements */ + caption { text-align: left; } + img { margin-right: 5px; + border-style: solid; + border-color: gray; + border-width: 0; } + a img { border-width: 1px; border-color: blue; } + acronym { border: 1px solid gray; } + span { background-color: #eef; } + +/* visual feedback for non-valid nesting of elements*/ + h1 h1, h1 h2, h1 h3, h1 h4, h1 h5, h1 h6, h1 p, h1 pre, h1 address, + h2 h1, h2 h2, h2 h3, h2 h4, h2 h5, h2 h6, h2 p, h2 pre, h2 address, + h3 h1, h3 h2, h3 h3, h3 h4, h3 h5, h3 h6, h3 p, h3 pre, h3 address, + h4 h1, h4 h2, h4 h3, h4 h4, h4 h5, h4 h6, h4 p, h4 pre, h4 address, + h5 h1, h5 h2, h5 h3, h5 h4, h5 h5, h5 h6, h5 p, h5 pre, h5 address, + h6 h1, h6 h2, h6 h3, h6 h4, h6 h4, h6 h6, h6 p, h6 pre, h6 address, + p h1, p h2, p h3, p h4, p h5, p h6, p pre, p address, + pre h1, pre h2, pre h3, pre h4, pre h5, pre h6, pre p, pre pre, pre address, + address h1, address h2, address h3, address h4, address h5, address h6, + address p, address pre, address address + { background-color: #ff9999 !important; + border: 1px solid red !important; + font-size: 12px !important; + font-weight: normal; } diff --git a/gstudio/static/gstudio/js/wymeditor/iframe/default/wymiframe.html b/gstudio/static/gstudio/js/wymeditor/iframe/default/wymiframe.html new file mode 100644 index 00000000..91a690c9 --- /dev/null +++ b/gstudio/static/gstudio/js/wymeditor/iframe/default/wymiframe.html @@ -0,0 +1,26 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> +<!-- + * WYMeditor : what you see is What You Mean web-based editor + * Copyright (c) 2005 - 2009 Jean-Francois Hovinne, http://www.wymeditor.org/ + * Dual licensed under the MIT (MIT-license.txt) + * and GPL (GPL-license.txt) licenses. + * + * For further information visit: + * http://www.wymeditor.org/ + * + * File Name: + * wymiframe.html + * Iframe used by designMode. + * See the documentation for more info. + * + * File Authors: + * Jean-Francois Hovinne (jf.hovinne a-t wymeditor dotorg) +--> +<html> +<head> +<title>WYMeditor iframe</title> +<meta http-equiv="X-UA-Compatible" content="IE=EmulateIE7" /> +<link rel="stylesheet" type="text/css" media="screen" href="wymiframe.css" /> +</head> +<body class="wym_iframe"></body> +</html> diff --git a/gstudio/static/gstudio/js/wymeditor/jquery.wymeditor.js b/gstudio/static/gstudio/js/wymeditor/jquery.wymeditor.js new file mode 100644 index 00000000..0667d858 --- /dev/null +++ b/gstudio/static/gstudio/js/wymeditor/jquery.wymeditor.js @@ -0,0 +1,4688 @@ +/** + * @version 0.5-rc1 + * + * WYMeditor : what you see is What You Mean web-based editor + * Copyright (c) 2005 - 2009 Jean-Francois Hovinne, http://www.wymeditor.org/ + * Dual licensed under the MIT (MIT-license.txt) + * and GPL (GPL-license.txt) licenses. + * + * For further information visit: + * http://www.wymeditor.org/ + * + * File: jquery.wymeditor.js + * + * Main JS file with core classes and functions. + * See the documentation for more info. + * + * About: authors + * + * Jean-Francois Hovinne (jf.hovinne a-t wymeditor dotorg) + * Volker Mische (vmx a-t gmx dotde) + * Scott Lewis (lewiscot a-t gmail dotcom) + * Bermi Ferrer (wymeditor a-t bermi dotorg) + * Daniel Reszka (d.reszka a-t wymeditor dotorg) + * Jonatan Lundin (jonatan.lundin a-t gmail dotcom) + */ + +/* + Namespace: WYMeditor + Global WYMeditor namespace. +*/ +if(!WYMeditor) var WYMeditor = {}; + +//Wrap the Firebug console in WYMeditor.console +(function() { + if ( !window.console || !console.firebug ) { + var names = ["log", "debug", "info", "warn", "error", "assert", "dir", "dirxml", + "group", "groupEnd", "time", "timeEnd", "count", "trace", "profile", "profileEnd"]; + + WYMeditor.console = {}; + for (var i = 0; i < names.length; ++i) + WYMeditor.console[names[i]] = function() {} + + } else WYMeditor.console = window.console; +})(); + +jQuery.extend(WYMeditor, { + +/* + Constants: Global WYMeditor constants. + + VERSION - Defines WYMeditor version. + INSTANCES - An array of loaded WYMeditor.editor instances. + STRINGS - An array of loaded WYMeditor language pairs/values. + SKINS - An array of loaded WYMeditor skins. + NAME - The "name" attribute. + INDEX - A string replaced by the instance index. + WYM_INDEX - A string used to get/set the instance index. + BASE_PATH - A string replaced by WYMeditor's base path. + SKIN_PATH - A string replaced by WYMeditor's skin path. + WYM_PATH - A string replaced by WYMeditor's main JS file path. + SKINS_DEFAULT_PATH - The skins default base path. + SKINS_DEFAULT_CSS - The skins default CSS file. + LANG_DEFAULT_PATH - The language files default path. + IFRAME_BASE_PATH - A string replaced by the designmode iframe's base path. + IFRAME_DEFAULT - The iframe's default base path. + JQUERY_PATH - A string replaced by the computed jQuery path. + DIRECTION - A string replaced by the text direction (rtl or ltr). + LOGO - A string replaced by WYMeditor logo. + TOOLS - A string replaced by the toolbar's HTML. + TOOLS_ITEMS - A string replaced by the toolbar items. + TOOL_NAME - A string replaced by a toolbar item's name. + TOOL_TITLE - A string replaced by a toolbar item's title. + TOOL_CLASS - A string replaced by a toolbar item's class. + CLASSES - A string replaced by the classes panel's HTML. + CLASSES_ITEMS - A string replaced by the classes items. + CLASS_NAME - A string replaced by a class item's name. + CLASS_TITLE - A string replaced by a class item's title. + CONTAINERS - A string replaced by the containers panel's HTML. + CONTAINERS_ITEMS - A string replaced by the containers items. + CONTAINER_NAME - A string replaced by a container item's name. + CONTAINER_TITLE - A string replaced by a container item's title. + CONTAINER_CLASS - A string replaced by a container item's class. + HTML - A string replaced by the HTML view panel's HTML. + IFRAME - A string replaced by the designmode iframe. + STATUS - A string replaced by the status panel's HTML. + DIALOG_TITLE - A string replaced by a dialog's title. + DIALOG_BODY - A string replaced by a dialog's HTML body. + BODY - The BODY element. + STRING - The "string" type. + BODY,DIV,P, + H1,H2,H3,H4,H5,H6, + PRE,BLOCKQUOTE, + A,BR,IMG, + TABLE,TD,TH, + UL,OL,LI - HTML elements string representation. + CLASS,HREF,SRC, + TITLE,ALT - HTML attributes string representation. + DIALOG_LINK - A link dialog type. + DIALOG_IMAGE - An image dialog type. + DIALOG_TABLE - A table dialog type. + DIALOG_PASTE - A 'Paste from Word' dialog type. + BOLD - Command: (un)set selection to <strong>. + ITALIC - Command: (un)set selection to <em>. + CREATE_LINK - Command: open the link dialog or (un)set link. + INSERT_IMAGE - Command: open the image dialog or insert an image. + INSERT_TABLE - Command: open the table dialog. + PASTE - Command: open the paste dialog. + INDENT - Command: nest a list item. + OUTDENT - Command: unnest a list item. + TOGGLE_HTML - Command: display/hide the HTML view. + FORMAT_BLOCK - Command: set a block element to another type. + PREVIEW - Command: open the preview dialog. + UNLINK - Command: unset a link. + INSERT_UNORDEREDLIST- Command: insert an unordered list. + INSERT_ORDEREDLIST - Command: insert an ordered list. + MAIN_CONTAINERS - An array of the main HTML containers used in WYMeditor. + BLOCKS - An array of the HTML block elements. + KEY - Standard key codes. + NODE - Node types. + +*/ + + VERSION : "0.5-rc1", + INSTANCES : [], + STRINGS : [], + SKINS : [], + NAME : "name", + INDEX : "{Wym_Index}", + WYM_INDEX : "wym_index", + BASE_PATH : "{Wym_Base_Path}", + CSS_PATH : "{Wym_Css_Path}", + WYM_PATH : "{Wym_Wym_Path}", + SKINS_DEFAULT_PATH : "skins/", + SKINS_DEFAULT_CSS : "skin.css", + SKINS_DEFAULT_JS : "skin.js", + LANG_DEFAULT_PATH : "lang/", + IFRAME_BASE_PATH : "{Wym_Iframe_Base_Path}", + IFRAME_DEFAULT : "iframe/default/", + JQUERY_PATH : "{Wym_Jquery_Path}", + DIRECTION : "{Wym_Direction}", + LOGO : "{Wym_Logo}", + TOOLS : "{Wym_Tools}", + TOOLS_ITEMS : "{Wym_Tools_Items}", + TOOL_NAME : "{Wym_Tool_Name}", + TOOL_TITLE : "{Wym_Tool_Title}", + TOOL_CLASS : "{Wym_Tool_Class}", + CLASSES : "{Wym_Classes}", + CLASSES_ITEMS : "{Wym_Classes_Items}", + CLASS_NAME : "{Wym_Class_Name}", + CLASS_TITLE : "{Wym_Class_Title}", + CONTAINERS : "{Wym_Containers}", + CONTAINERS_ITEMS : "{Wym_Containers_Items}", + CONTAINER_NAME : "{Wym_Container_Name}", + CONTAINER_TITLE : "{Wym_Containers_Title}", + CONTAINER_CLASS : "{Wym_Container_Class}", + HTML : "{Wym_Html}", + IFRAME : "{Wym_Iframe}", + STATUS : "{Wym_Status}", + DIALOG_TITLE : "{Wym_Dialog_Title}", + DIALOG_BODY : "{Wym_Dialog_Body}", + STRING : "string", + BODY : "body", + DIV : "div", + P : "p", + H1 : "h1", + H2 : "h2", + H3 : "h3", + H4 : "h4", + H5 : "h5", + H6 : "h6", + PRE : "pre", + BLOCKQUOTE : "blockquote", + A : "a", + BR : "br", + IMG : "img", + TABLE : "table", + TD : "td", + TH : "th", + UL : "ul", + OL : "ol", + LI : "li", + CLASS : "class", + HREF : "href", + SRC : "src", + TITLE : "title", + ALT : "alt", + DIALOG_LINK : "Link", + DIALOG_IMAGE : "Image", + DIALOG_TABLE : "Table", + DIALOG_PASTE : "Paste_From_Word", + BOLD : "Bold", + ITALIC : "Italic", + CREATE_LINK : "CreateLink", + INSERT_IMAGE : "InsertImage", + INSERT_TABLE : "InsertTable", + INSERT_HTML : "InsertHTML", + PASTE : "Paste", + INDENT : "Indent", + OUTDENT : "Outdent", + TOGGLE_HTML : "ToggleHtml", + FORMAT_BLOCK : "FormatBlock", + PREVIEW : "Preview", + UNLINK : "Unlink", + INSERT_UNORDEREDLIST: "InsertUnorderedList", + INSERT_ORDEREDLIST : "InsertOrderedList", + + MAIN_CONTAINERS : new Array("p","h1","h2","h3","h4","h5","h6","pre","blockquote"), + + BLOCKS : new Array("address", "blockquote", "div", "dl", + "fieldset", "form", "h1", "h2", "h3", "h4", "h5", "h6", "hr", + "noscript", "ol", "p", "pre", "table", "ul", "dd", "dt", + "li", "tbody", "td", "tfoot", "th", "thead", "tr"), + + KEY : { + BACKSPACE: 8, + ENTER: 13, + END: 35, + HOME: 36, + LEFT: 37, + UP: 38, + RIGHT: 39, + DOWN: 40, + CURSOR: new Array(37, 38, 39, 40), + DELETE: 46 + }, + + NODE : { + ELEMENT: 1, + ATTRIBUTE: 2, + TEXT: 3 + }, + + /* + Class: WYMeditor.editor + WYMeditor editor main class, instanciated for each editor occurrence. + */ + + editor : function(elem, options) { + + /* + Constructor: WYMeditor.editor + + Initializes main values (index, elements, paths, ...) + and call WYMeditor.editor.init which initializes the editor. + + Parameters: + + elem - The HTML element to be replaced by the editor. + options - The hash of options. + + Returns: + + Nothing. + + See Also: + + <WYMeditor.editor.init> + */ + + //store the instance in the INSTANCES array and store the index + this._index = WYMeditor.INSTANCES.push(this) - 1; + //store the element replaced by the editor + this._element = elem; + //store the options + this._options = options; + //store the element's inner value + this._html = jQuery(elem).val(); + + //store the HTML option, if any + if(this._options.html) this._html = this._options.html; + //get or compute the base path (where the main JS file is located) + this._options.basePath = this._options.basePath + || this.computeBasePath(); + //get or set the skin path (where the skin files are located) + this._options.skinPath = this._options.skinPath + || this._options.basePath + WYMeditor.SKINS_DEFAULT_PATH + + this._options.skin + '/'; + //get or compute the main JS file location + this._options.wymPath = this._options.wymPath + || this.computeWymPath(); + //get or set the language files path + this._options.langPath = this._options.langPath + || this._options.basePath + WYMeditor.LANG_DEFAULT_PATH; + //get or set the designmode iframe's base path + this._options.iframeBasePath = this._options.iframeBasePath + || this._options.basePath + WYMeditor.IFRAME_DEFAULT; + //get or compute the jQuery JS file location + this._options.jQueryPath = this._options.jQueryPath + || this.computeJqueryPath(); + + //initialize the editor instance + this.init(); + + } + +}); + + +/********** JQUERY **********/ + +/** + * Replace an HTML element by WYMeditor + * + * @example jQuery(".wymeditor").wymeditor( + * { + * + * } + * ); + * @desc Example description here + * + * @name WYMeditor + * @description WYMeditor is a web-based WYSIWYM XHTML editor + * @param Hash hash A hash of parameters + * @option Integer iExample Description here + * @option String sExample Description here + * + * @type jQuery + * @cat Plugins/WYMeditor + * @author Jean-Francois Hovinne + */ +jQuery.fn.wymeditor = function(options) { + + options = jQuery.extend({ + + html: "", + + basePath: false, + + skinPath: false, + + wymPath: false, + + iframeBasePath: false, + + jQueryPath: false, + + styles: false, + + stylesheet: false, + + skin: "default", + initSkin: true, + loadSkin: true, + + lang: "en", + + direction: "ltr", + + boxHtml: "<div class='wym_box'>" + + "<div class='wym_area_top'>" + + WYMeditor.TOOLS + + "</div>" + + "<div class='wym_area_left'></div>" + + "<div class='wym_area_right'>" + + WYMeditor.CONTAINERS + + WYMeditor.CLASSES + + "</div>" + + "<div class='wym_area_main'>" + + WYMeditor.HTML + + WYMeditor.IFRAME + + WYMeditor.STATUS + + "</div>" + + "<div class='wym_area_bottom'>" + + WYMeditor.LOGO + + "</div>" + + "</div>", + + logoHtml: "<a class='wym_wymeditor_link' " + + "href='http://www.wymeditor.org/'>WYMeditor</a>", + + iframeHtml:"<div class='wym_iframe wym_section'>" + + "<iframe " + + "src='" + + WYMeditor.IFRAME_BASE_PATH + + "wymiframe.html' " + + "onload='this.contentWindow.parent.WYMeditor.INSTANCES[" + + WYMeditor.INDEX + "].initIframe(this)'" + + "></iframe>" + + "</div>", + + editorStyles: [], + + toolsHtml: "<div class='wym_tools wym_section'>" + + "<h2>{Tools}</h2>" + + "<ul>" + + WYMeditor.TOOLS_ITEMS + + "</ul>" + + "</div>", + + toolsItemHtml: "<li class='" + + WYMeditor.TOOL_CLASS + + "'><a href='#' name='" + + WYMeditor.TOOL_NAME + + "' title='" + + WYMeditor.TOOL_TITLE + + "'>" + + WYMeditor.TOOL_TITLE + + "</a></li>", + + toolsItems: [ + {'name': 'Bold', 'title': 'Strong', 'css': 'wym_tools_strong'}, + {'name': 'Italic', 'title': 'Emphasis', 'css': 'wym_tools_emphasis'}, + {'name': 'Superscript', 'title': 'Superscript', + 'css': 'wym_tools_superscript'}, + {'name': 'Subscript', 'title': 'Subscript', + 'css': 'wym_tools_subscript'}, + {'name': 'InsertOrderedList', 'title': 'Ordered_List', + 'css': 'wym_tools_ordered_list'}, + {'name': 'InsertUnorderedList', 'title': 'Unordered_List', + 'css': 'wym_tools_unordered_list'}, + {'name': 'Indent', 'title': 'Indent', 'css': 'wym_tools_indent'}, + {'name': 'Outdent', 'title': 'Outdent', 'css': 'wym_tools_outdent'}, + {'name': 'Undo', 'title': 'Undo', 'css': 'wym_tools_undo'}, + {'name': 'Redo', 'title': 'Redo', 'css': 'wym_tools_redo'}, + {'name': 'CreateLink', 'title': 'Link', 'css': 'wym_tools_link'}, + {'name': 'Unlink', 'title': 'Unlink', 'css': 'wym_tools_unlink'}, + {'name': 'InsertImage', 'title': 'Image', 'css': 'wym_tools_image'}, + {'name': 'InsertTable', 'title': 'Table', 'css': 'wym_tools_table'}, + {'name': 'Paste', 'title': 'Paste_From_Word', + 'css': 'wym_tools_paste'}, + {'name': 'ToggleHtml', 'title': 'HTML', 'css': 'wym_tools_html'}, + {'name': 'Preview', 'title': 'Preview', 'css': 'wym_tools_preview'} + ], + + containersHtml: "<div class='wym_containers wym_section'>" + + "<h2>{Containers}</h2>" + + "<ul>" + + WYMeditor.CONTAINERS_ITEMS + + "</ul>" + + "</div>", + + containersItemHtml:"<li class='" + + WYMeditor.CONTAINER_CLASS + + "'>" + + "<a href='#' name='" + + WYMeditor.CONTAINER_NAME + + "'>" + + WYMeditor.CONTAINER_TITLE + + "</a></li>", + + containersItems: [ + {'name': 'P', 'title': 'Paragraph', 'css': 'wym_containers_p'}, + {'name': 'H1', 'title': 'Heading_1', 'css': 'wym_containers_h1'}, + {'name': 'H2', 'title': 'Heading_2', 'css': 'wym_containers_h2'}, + {'name': 'H3', 'title': 'Heading_3', 'css': 'wym_containers_h3'}, + {'name': 'H4', 'title': 'Heading_4', 'css': 'wym_containers_h4'}, + {'name': 'H5', 'title': 'Heading_5', 'css': 'wym_containers_h5'}, + {'name': 'H6', 'title': 'Heading_6', 'css': 'wym_containers_h6'}, + {'name': 'PRE', 'title': 'Preformatted', 'css': 'wym_containers_pre'}, + {'name': 'BLOCKQUOTE', 'title': 'Blockquote', + 'css': 'wym_containers_blockquote'}, + {'name': 'TH', 'title': 'Table_Header', 'css': 'wym_containers_th'} + ], + + classesHtml: "<div class='wym_classes wym_section'>" + + "<h2>{Classes}</h2><ul>" + + WYMeditor.CLASSES_ITEMS + + "</ul></div>", + + classesItemHtml: "<li class='wym_classes_" + + WYMeditor.CLASS_NAME + + "'><a href='#' name='" + + WYMeditor.CLASS_NAME + + "'>" + + WYMeditor.CLASS_TITLE + + "</a></li>", + + classesItems: [], + + statusHtml: "<div class='wym_status wym_section'>" + + "<h2>{Status}</h2>" + + "</div>", + + htmlHtml: "<div class='wym_html wym_section'>" + + "<h2>{Source_Code}</h2>" + + "<textarea class='wym_html_val'></textarea>" + + "</div>", + + boxSelector: ".wym_box", + toolsSelector: ".wym_tools", + toolsListSelector: " ul", + containersSelector:".wym_containers", + classesSelector: ".wym_classes", + htmlSelector: ".wym_html", + iframeSelector: ".wym_iframe iframe", + iframeBodySelector:".wym_iframe", + statusSelector: ".wym_status", + toolSelector: ".wym_tools a", + containerSelector: ".wym_containers a", + classSelector: ".wym_classes a", + htmlValSelector: ".wym_html_val", + + hrefSelector: ".wym_href", + srcSelector: ".wym_src", + titleSelector: ".wym_title", + altSelector: ".wym_alt", + textSelector: ".wym_text", + + rowsSelector: ".wym_rows", + colsSelector: ".wym_cols", + captionSelector: ".wym_caption", + summarySelector: ".wym_summary", + + submitSelector: ".wym_submit", + cancelSelector: ".wym_cancel", + previewSelector: "", + + dialogTypeSelector: ".wym_dialog_type", + dialogLinkSelector: ".wym_dialog_link", + dialogImageSelector: ".wym_dialog_image", + dialogTableSelector: ".wym_dialog_table", + dialogPasteSelector: ".wym_dialog_paste", + dialogPreviewSelector: ".wym_dialog_preview", + + updateSelector: ".wymupdate", + updateEvent: "click", + + dialogFeatures: "menubar=no,titlebar=no,toolbar=no,resizable=no" + + ",width=560,height=300,top=0,left=0", + dialogFeaturesPreview: "menubar=no,titlebar=no,toolbar=no,resizable=no" + + ",scrollbars=yes,width=560,height=300,top=0,left=0", + + dialogHtml: "<!DOCTYPE html PUBLIC '-//W3C//DTD XHTML 1.0 Strict//EN'" + + " 'http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd'>" + + "<html dir='" + + WYMeditor.DIRECTION + + "'><head>" + + "<link rel='stylesheet' type='text/css' media='screen'" + + " href='" + + WYMeditor.CSS_PATH + + "' />" + + "<title>" + + WYMeditor.DIALOG_TITLE + + "</title>" + + "<script type='text/javascript'" + + " src='" + + WYMeditor.JQUERY_PATH + + "'></script>" + + "<script type='text/javascript'" + + " src='" + + WYMeditor.WYM_PATH + + "'></script>" + + "</head>" + + WYMeditor.DIALOG_BODY + + "</html>", + + dialogLinkHtml: "<body class='wym_dialog wym_dialog_link'" + + " onload='WYMeditor.INIT_DIALOG(" + WYMeditor.INDEX + ")'" + + ">" + + "<form>" + + "<fieldset>" + + "<input type='hidden' class='wym_dialog_type' value='" + + WYMeditor.DIALOG_LINK + + "' />" + + "<legend>{Link}</legend>" + + "<div class='row'>" + + "<label>{URL}</label>" + + "<input type='text' class='wym_href' value='' size='40' />" + + "</div>" + + "<div class='row'>" + + "<label>{Title}</label>" + + "<input type='text' class='wym_title' value='' size='40' />" + + "</div>" + + "<div class='row row-indent'>" + + "<input class='wym_submit' type='button'" + + " value='{Submit}' />" + + "<input class='wym_cancel' type='button'" + + "value='{Cancel}' />" + + "</div>" + + "</fieldset>" + + "</form>" + + "</body>", + + dialogImageHtml: "<body class='wym_dialog wym_dialog_image'" + + " onload='WYMeditor.INIT_DIALOG(" + WYMeditor.INDEX + ")'" + + ">" + + "<form>" + + "<fieldset>" + + "<input type='hidden' class='wym_dialog_type' value='" + + WYMeditor.DIALOG_IMAGE + + "' />" + + "<legend>{Image}</legend>" + + "<div class='row'>" + + "<label>{URL}</label>" + + "<input type='text' class='wym_src' value='' size='40' />" + + "</div>" + + "<div class='row'>" + + "<label>{Alternative_Text}</label>" + + "<input type='text' class='wym_alt' value='' size='40' />" + + "</div>" + + "<div class='row'>" + + "<label>{Title}</label>" + + "<input type='text' class='wym_title' value='' size='40' />" + + "</div>" + + "<div class='row row-indent'>" + + "<input class='wym_submit' type='button'" + + " value='{Submit}' />" + + "<input class='wym_cancel' type='button'" + + "value='{Cancel}' />" + + "</div>" + + "</fieldset>" + + "</form>" + + "</body>", + + dialogTableHtml: "<body class='wym_dialog wym_dialog_table'" + + " onload='WYMeditor.INIT_DIALOG(" + WYMeditor.INDEX + ")'" + + ">" + + "<form>" + + "<fieldset>" + + "<input type='hidden' class='wym_dialog_type' value='" + + WYMeditor.DIALOG_TABLE + + "' />" + + "<legend>{Table}</legend>" + + "<div class='row'>" + + "<label>{Caption}</label>" + + "<input type='text' class='wym_caption' value='' size='40' />" + + "</div>" + + "<div class='row'>" + + "<label>{Summary}</label>" + + "<input type='text' class='wym_summary' value='' size='40' />" + + "</div>" + + "<div class='row'>" + + "<label>{Number_Of_Rows}</label>" + + "<input type='text' class='wym_rows' value='3' size='3' />" + + "</div>" + + "<div class='row'>" + + "<label>{Number_Of_Cols}</label>" + + "<input type='text' class='wym_cols' value='2' size='3' />" + + "</div>" + + "<div class='row row-indent'>" + + "<input class='wym_submit' type='button'" + + " value='{Submit}' />" + + "<input class='wym_cancel' type='button'" + + "value='{Cancel}' />" + + "</div>" + + "</fieldset>" + + "</form>" + + "</body>", + + dialogPasteHtml: "<body class='wym_dialog wym_dialog_paste'" + + " onload='WYMeditor.INIT_DIALOG(" + WYMeditor.INDEX + ")'" + + ">" + + "<form>" + + "<input type='hidden' class='wym_dialog_type' value='" + + WYMeditor.DIALOG_PASTE + + "' />" + + "<fieldset>" + + "<legend>{Paste_From_Word}</legend>" + + "<div class='row'>" + + "<textarea class='wym_text' rows='10' cols='50'></textarea>" + + "</div>" + + "<div class='row'>" + + "<input class='wym_submit' type='button'" + + " value='{Submit}' />" + + "<input class='wym_cancel' type='button'" + + "value='{Cancel}' />" + + "</div>" + + "</fieldset>" + + "</form>" + + "</body>", + + dialogPreviewHtml: "<body class='wym_dialog wym_dialog_preview'" + + " onload='WYMeditor.INIT_DIALOG(" + WYMeditor.INDEX + ")'" + + "></body>", + + dialogStyles: [], + + stringDelimiterLeft: "{", + stringDelimiterRight:"}", + + preInit: null, + preBind: null, + postInit: null, + + preInitDialog: null, + postInitDialog: null + + }, options); + + return this.each(function() { + + new WYMeditor.editor(jQuery(this),options); + }); +}; + +/* @name extend + * @description Returns the WYMeditor instance based on its index + */ +jQuery.extend({ + wymeditors: function(i) { + return (WYMeditor.INSTANCES[i]); + } +}); + + +/********** WYMeditor **********/ + +/* @name Wymeditor + * @description WYMeditor class + */ + +/* @name init + * @description Initializes a WYMeditor instance + */ +WYMeditor.editor.prototype.init = function() { + + //load subclass - browser specific + //unsupported browsers: do nothing + if (jQuery.browser.msie) { + var WymClass = new WYMeditor.WymClassExplorer(this); + } + else if (jQuery.browser.mozilla) { + var WymClass = new WYMeditor.WymClassMozilla(this); + } + else if (jQuery.browser.opera) { + var WymClass = new WYMeditor.WymClassOpera(this); + } + else if (jQuery.browser.safari) { + var WymClass = new WYMeditor.WymClassSafari(this); + } + + if(WymClass) { + + if(jQuery.isFunction(this._options.preInit)) this._options.preInit(this); + + var SaxListener = new WYMeditor.XhtmlSaxListener(); + jQuery.extend(SaxListener, WymClass); + this.parser = new WYMeditor.XhtmlParser(SaxListener); + + if(this._options.styles || this._options.stylesheet){ + this.configureEditorUsingRawCss(); + } + + this.helper = new WYMeditor.XmlHelper(); + + //extend the Wymeditor object + //don't use jQuery.extend since 1.1.4 + //jQuery.extend(this, WymClass); + for (var prop in WymClass) { this[prop] = WymClass[prop]; } + + //load wymbox + this._box = jQuery(this._element).hide().after(this._options.boxHtml).next().addClass('wym_box_' + this._index); + + //store the instance index in wymbox and element replaced by editor instance + //but keep it compatible with jQuery < 1.2.3, see #122 + if( jQuery.isFunction( jQuery.fn.data ) ) { + jQuery.data(this._box.get(0), WYMeditor.WYM_INDEX, this._index); + jQuery.data(this._element.get(0), WYMeditor.WYM_INDEX, this._index); + } + + var h = WYMeditor.Helper; + + //construct the iframe + var iframeHtml = this._options.iframeHtml; + iframeHtml = h.replaceAll(iframeHtml, WYMeditor.INDEX, this._index); + iframeHtml = h.replaceAll(iframeHtml, WYMeditor.IFRAME_BASE_PATH, this._options.iframeBasePath); + + //construct wymbox + var boxHtml = jQuery(this._box).html(); + + boxHtml = h.replaceAll(boxHtml, WYMeditor.LOGO, this._options.logoHtml); + boxHtml = h.replaceAll(boxHtml, WYMeditor.TOOLS, this._options.toolsHtml); + boxHtml = h.replaceAll(boxHtml, WYMeditor.CONTAINERS,this._options.containersHtml); + boxHtml = h.replaceAll(boxHtml, WYMeditor.CLASSES, this._options.classesHtml); + boxHtml = h.replaceAll(boxHtml, WYMeditor.HTML, this._options.htmlHtml); + boxHtml = h.replaceAll(boxHtml, WYMeditor.IFRAME, iframeHtml); + boxHtml = h.replaceAll(boxHtml, WYMeditor.STATUS, this._options.statusHtml); + + //construct tools list + var aTools = eval(this._options.toolsItems); + var sTools = ""; + + for(var i = 0; i < aTools.length; i++) { + var oTool = aTools[i]; + if(oTool.name && oTool.title) + var sTool = this._options.toolsItemHtml; + var sTool = h.replaceAll(sTool, WYMeditor.TOOL_NAME, oTool.name); + sTool = h.replaceAll(sTool, WYMeditor.TOOL_TITLE, this._options.stringDelimiterLeft + + oTool.title + + this._options.stringDelimiterRight); + sTool = h.replaceAll(sTool, WYMeditor.TOOL_CLASS, oTool.css); + sTools += sTool; + } + + boxHtml = h.replaceAll(boxHtml, WYMeditor.TOOLS_ITEMS, sTools); + + //construct classes list + var aClasses = eval(this._options.classesItems); + var sClasses = ""; + + for(var i = 0; i < aClasses.length; i++) { + var oClass = aClasses[i]; + if(oClass.name && oClass.title) + var sClass = this._options.classesItemHtml; + sClass = h.replaceAll(sClass, WYMeditor.CLASS_NAME, oClass.name); + sClass = h.replaceAll(sClass, WYMeditor.CLASS_TITLE, oClass.title); + sClasses += sClass; + } + + boxHtml = h.replaceAll(boxHtml, WYMeditor.CLASSES_ITEMS, sClasses); + + //construct containers list + var aContainers = eval(this._options.containersItems); + var sContainers = ""; + + for(var i = 0; i < aContainers.length; i++) { + var oContainer = aContainers[i]; + if(oContainer.name && oContainer.title) + var sContainer = this._options.containersItemHtml; + sContainer = h.replaceAll(sContainer, WYMeditor.CONTAINER_NAME, oContainer.name); + sContainer = h.replaceAll(sContainer, WYMeditor.CONTAINER_TITLE, + this._options.stringDelimiterLeft + + oContainer.title + + this._options.stringDelimiterRight); + sContainer = h.replaceAll(sContainer, WYMeditor.CONTAINER_CLASS, oContainer.css); + sContainers += sContainer; + } + + boxHtml = h.replaceAll(boxHtml, WYMeditor.CONTAINERS_ITEMS, sContainers); + + //l10n + boxHtml = this.replaceStrings(boxHtml); + + //load html in wymbox + jQuery(this._box).html(boxHtml); + + //hide the html value + jQuery(this._box).find(this._options.htmlSelector).hide(); + + //enable the skin + this.loadSkin(); + + } +}; + +WYMeditor.editor.prototype.bindEvents = function() { + + //copy the instance + var wym = this; + + //handle click event on tools buttons + jQuery(this._box).find(this._options.toolSelector).click(function() { + wym._iframe.contentWindow.focus(); //See #154 + wym.exec(jQuery(this).attr(WYMeditor.NAME)); + return(false); + }); + + //handle click event on containers buttons + jQuery(this._box).find(this._options.containerSelector).click(function() { + wym.container(jQuery(this).attr(WYMeditor.NAME)); + return(false); + }); + + //handle keyup event on html value: set the editor value + //handle focus/blur events to check if the element has focus, see #147 + jQuery(this._box).find(this._options.htmlValSelector) + .keyup(function() { jQuery(wym._doc.body).html(jQuery(this).val());}) + .focus(function() { jQuery(this).toggleClass('hasfocus'); }) + .blur(function() { jQuery(this).toggleClass('hasfocus'); }); + + //handle click event on classes buttons + jQuery(this._box).find(this._options.classSelector).click(function() { + + var aClasses = eval(wym._options.classesItems); + var sName = jQuery(this).attr(WYMeditor.NAME); + + var oClass = WYMeditor.Helper.findByName(aClasses, sName); + + if(oClass) { + var jqexpr = oClass.expr; + wym.toggleClass(sName, jqexpr); + } + wym._iframe.contentWindow.focus(); //See #154 + return(false); + }); + + //handle event on update element + jQuery(this._options.updateSelector) + .bind(this._options.updateEvent, function() { + wym.update(); + }); +}; + +WYMeditor.editor.prototype.ready = function() { + return(this._doc != null); +}; + + +/********** METHODS **********/ + +/* @name box + * @description Returns the WYMeditor container + */ +WYMeditor.editor.prototype.box = function() { + return(this._box); +}; + +/* @name html + * @description Get/Set the html value + */ +WYMeditor.editor.prototype.html = function(html) { + + if(typeof html === 'string') jQuery(this._doc.body).html(html); + else return(jQuery(this._doc.body).html()); +}; + +/* @name xhtml + * @description Cleans up the HTML + */ +WYMeditor.editor.prototype.xhtml = function() { + return this.parser.parse(this.html()); +}; + +/* @name exec + * @description Executes a button command + */ +WYMeditor.editor.prototype.exec = function(cmd) { + + //base function for execCommand + //open a dialog or exec + switch(cmd) { + case WYMeditor.CREATE_LINK: + var container = this.container(); + if(container || this._selected_image) this.dialog(WYMeditor.DIALOG_LINK); + break; + + case WYMeditor.INSERT_IMAGE: + this.dialog(WYMeditor.DIALOG_IMAGE); + break; + + case WYMeditor.INSERT_TABLE: + this.dialog(WYMeditor.DIALOG_TABLE); + break; + + case WYMeditor.PASTE: + this.dialog(WYMeditor.DIALOG_PASTE); + break; + + case WYMeditor.TOGGLE_HTML: + this.update(); + this.toggleHtml(); + break; + + case WYMeditor.PREVIEW: + this.dialog(WYMeditor.PREVIEW, this._options.dialogFeaturesPreview); + break; + + default: + this._exec(cmd); + break; + } +}; + +/* @name container + * @description Get/Set the selected container + */ +WYMeditor.editor.prototype.container = function(sType) { + + if(sType) { + + var container = null; + + if(sType.toLowerCase() == WYMeditor.TH) { + + container = this.container(); + + //find the TD or TH container + switch(container.tagName.toLowerCase()) { + + case WYMeditor.TD: case WYMeditor.TH: + break; + default: + var aTypes = new Array(WYMeditor.TD,WYMeditor.TH); + container = this.findUp(this.container(), aTypes); + break; + } + + //if it exists, switch + if(container!=null) { + + sType = (container.tagName.toLowerCase() == WYMeditor.TD)? WYMeditor.TH: WYMeditor.TD; + this.switchTo(container,sType); + this.update(); + } + } else { + + //set the container type + var aTypes=new Array(WYMeditor.P,WYMeditor.H1,WYMeditor.H2,WYMeditor.H3,WYMeditor.H4,WYMeditor.H5, + WYMeditor.H6,WYMeditor.PRE,WYMeditor.BLOCKQUOTE); + container = this.findUp(this.container(), aTypes); + + if(container) { + + var newNode = null; + + //blockquotes must contain a block level element + if(sType.toLowerCase() == WYMeditor.BLOCKQUOTE) { + + var blockquote = this.findUp(this.container(), WYMeditor.BLOCKQUOTE); + + if(blockquote == null) { + + newNode = this._doc.createElement(sType); + container.parentNode.insertBefore(newNode,container); + newNode.appendChild(container); + this.setFocusToNode(newNode.firstChild); + + } else { + + var nodes = blockquote.childNodes; + var lgt = nodes.length; + var firstNode = null; + + if(lgt > 0) firstNode = nodes.item(0); + for(var x=0; x<lgt; x++) { + blockquote.parentNode.insertBefore(nodes.item(0),blockquote); + } + blockquote.parentNode.removeChild(blockquote); + if(firstNode) this.setFocusToNode(firstNode); + } + } + + else this.switchTo(container,sType); + + this.update(); + } + } + } + else return(this.selected()); +}; + +/* @name toggleClass + * @description Toggles class on selected element, or one of its parents + */ +WYMeditor.editor.prototype.toggleClass = function(sClass, jqexpr) { + + var container = (this._selected_image + ? this._selected_image + : jQuery(this.selected())); + container = jQuery(container).parentsOrSelf(jqexpr); + jQuery(container).toggleClass(sClass); + + if(!jQuery(container).attr(WYMeditor.CLASS)) jQuery(container).removeAttr(this._class); + +}; + +/* @name findUp + * @description Returns the first parent or self container, based on its type + */ +WYMeditor.editor.prototype.findUp = function(node, filter) { + + //filter is a string or an array of strings + + if(node) { + + var tagname = node.tagName.toLowerCase(); + + if(typeof(filter) == WYMeditor.STRING) { + + while(tagname != filter && tagname != WYMeditor.BODY) { + + node = node.parentNode; + tagname = node.tagName.toLowerCase(); + } + + } else { + + var bFound = false; + + while(!bFound && tagname != WYMeditor.BODY) { + for(var i = 0; i < filter.length; i++) { + if(tagname == filter[i]) { + bFound = true; + break; + } + } + if(!bFound) { + node = node.parentNode; + tagname = node.tagName.toLowerCase(); + } + } + } + + if(tagname != WYMeditor.BODY) return(node); + else return(null); + + } else return(null); +}; + +/* @name switchTo + * @description Switch the node's type + */ +WYMeditor.editor.prototype.switchTo = function(node,sType) { + + var newNode = this._doc.createElement(sType); + var html = jQuery(node).html(); + node.parentNode.replaceChild(newNode,node); + jQuery(newNode).html(html); + this.setFocusToNode(newNode); +}; + +WYMeditor.editor.prototype.replaceStrings = function(sVal) { + //check if the language file has already been loaded + //if not, get it via a synchronous ajax call + if(!WYMeditor.STRINGS[this._options.lang]) { + try { + eval(jQuery.ajax({url:this._options.langPath + + this._options.lang + '.js', async:false}).responseText); + } catch(e) { + WYMeditor.console.error("WYMeditor: error while parsing language file."); + return sVal; + } + } + + //replace all the strings in sVal and return it + for (var key in WYMeditor.STRINGS[this._options.lang]) { + sVal = WYMeditor.Helper.replaceAll(sVal, this._options.stringDelimiterLeft + key + + this._options.stringDelimiterRight, + WYMeditor.STRINGS[this._options.lang][key]); + }; + return(sVal); +}; + +WYMeditor.editor.prototype.encloseString = function(sVal) { + + return(this._options.stringDelimiterLeft + + sVal + + this._options.stringDelimiterRight); +}; + +/* @name status + * @description Prints a status message + */ +WYMeditor.editor.prototype.status = function(sMessage) { + + //print status message + jQuery(this._box).find(this._options.statusSelector).html(sMessage); +}; + +/* @name update + * @description Updates the element and textarea values + */ +WYMeditor.editor.prototype.update = function() { + + var html = this.xhtml(); + jQuery(this._element).val(html); + jQuery(this._box).find(this._options.htmlValSelector).not('.hasfocus').val(html); //#147 +}; + +/* @name dialog + * @description Opens a dialog box + */ +WYMeditor.editor.prototype.dialog = function( dialogType, dialogFeatures, bodyHtml ) { + + var features = dialogFeatures || this._wym._options.dialogFeatures; + var wDialog = window.open('', 'dialog', features); + + if(wDialog) { + + var sBodyHtml = ""; + + switch( dialogType ) { + + case(WYMeditor.DIALOG_LINK): + sBodyHtml = this._options.dialogLinkHtml; + break; + case(WYMeditor.DIALOG_IMAGE): + sBodyHtml = this._options.dialogImageHtml; + break; + case(WYMeditor.DIALOG_TABLE): + sBodyHtml = this._options.dialogTableHtml; + break; + case(WYMeditor.DIALOG_PASTE): + sBodyHtml = this._options.dialogPasteHtml; + break; + case(WYMeditor.PREVIEW): + sBodyHtml = this._options.dialogPreviewHtml; + break; + + default: + sBodyHtml = bodyHtml; + } + + var h = WYMeditor.Helper; + + //construct the dialog + var dialogHtml = this._options.dialogHtml; + dialogHtml = h.replaceAll(dialogHtml, WYMeditor.BASE_PATH, this._options.basePath); + dialogHtml = h.replaceAll(dialogHtml, WYMeditor.DIRECTION, this._options.direction); + dialogHtml = h.replaceAll(dialogHtml, WYMeditor.CSS_PATH, this._options.skinPath + WYMeditor.SKINS_DEFAULT_CSS); + dialogHtml = h.replaceAll(dialogHtml, WYMeditor.WYM_PATH, this._options.wymPath); + dialogHtml = h.replaceAll(dialogHtml, WYMeditor.JQUERY_PATH, this._options.jQueryPath); + dialogHtml = h.replaceAll(dialogHtml, WYMeditor.DIALOG_TITLE, this.encloseString( dialogType )); + dialogHtml = h.replaceAll(dialogHtml, WYMeditor.DIALOG_BODY, sBodyHtml); + dialogHtml = h.replaceAll(dialogHtml, WYMeditor.INDEX, this._index); + + dialogHtml = this.replaceStrings(dialogHtml); + + var doc = wDialog.document; + doc.write(dialogHtml); + doc.close(); + } +}; + +/* @name toggleHtml + * @description Shows/Hides the HTML + */ +WYMeditor.editor.prototype.toggleHtml = function() { + jQuery(this._box).find(this._options.htmlSelector).toggle(); +}; + +WYMeditor.editor.prototype.uniqueStamp = function() { + var now = new Date(); + return("wym-" + now.getTime()); +}; + +WYMeditor.editor.prototype.paste = function(sData) { + + var sTmp; + var container = this.selected(); + + //split the data, using double newlines as the separator + var aP = sData.split(this._newLine + this._newLine); + var rExp = new RegExp(this._newLine, "g"); + + //add a P for each item + if(container && container.tagName.toLowerCase() != WYMeditor.BODY) { + for(x = aP.length - 1; x >= 0; x--) { + sTmp = aP[x]; + //simple newlines are replaced by a break + sTmp = sTmp.replace(rExp, "<br />"); + jQuery(container).after("<p>" + sTmp + "</p>"); + } + } else { + for(x = 0; x < aP.length; x++) { + sTmp = aP[x]; + //simple newlines are replaced by a break + sTmp = sTmp.replace(rExp, "<br />"); + jQuery(this._doc.body).append("<p>" + sTmp + "</p>"); + } + + } +}; + +WYMeditor.editor.prototype.insert = function(html) { + // Do we have a selection? + if (this._iframe.contentWindow.getSelection().focusNode != null) { + // Overwrite selection with provided html + this._exec( WYMeditor.INSERT_HTML, html); + } else { + // Fall back to the internal paste function if there's no selection + this.paste(html) + } +}; + +WYMeditor.editor.prototype.wrap = function(left, right) { + // Do we have a selection? + if (this._iframe.contentWindow.getSelection().focusNode != null) { + // Wrap selection with provided html + this._exec( WYMeditor.INSERT_HTML, left + this._iframe.contentWindow.getSelection().toString() + right); + } +}; + +WYMeditor.editor.prototype.unwrap = function() { + // Do we have a selection? + if (this._iframe.contentWindow.getSelection().focusNode != null) { + // Unwrap selection + this._exec( WYMeditor.INSERT_HTML, this._iframe.contentWindow.getSelection().toString() ); + } +}; + +WYMeditor.editor.prototype.setFocusToNode = function(node, toStart) { + var range = this._doc.createRange(), + selection = this._iframe.contentWindow.getSelection(); + toStart = toStart ? 0 : 1; + + range.selectNodeContents(node); + selection.addRange(range); + selection.collapse(node, toStart); + this._iframe.contentWindow.focus(); +}; + +WYMeditor.editor.prototype.addCssRules = function(doc, aCss) { + var styles = doc.styleSheets[0]; + if(styles) { + for(var i = 0; i < aCss.length; i++) { + var oCss = aCss[i]; + if(oCss.name && oCss.css) this.addCssRule(styles, oCss); + } + } +}; + +/********** CONFIGURATION **********/ + +WYMeditor.editor.prototype.computeBasePath = function() { + return jQuery(jQuery.grep(jQuery('script'), function(s){ + return (s.src && s.src.match(/jquery\.wymeditor(\.pack|\.min|\.packed)?\.js(\?.*)?$/ )) + })).attr('src').replace(/jquery\.wymeditor(\.pack|\.min|\.packed)?\.js(\?.*)?$/, ''); +}; + +WYMeditor.editor.prototype.computeWymPath = function() { + return jQuery(jQuery.grep(jQuery('script'), function(s){ + return (s.src && s.src.match(/jquery\.wymeditor(\.pack|\.min|\.packed)?\.js(\?.*)?$/ )) + })).attr('src'); +}; + +WYMeditor.editor.prototype.computeJqueryPath = function() { + return jQuery(jQuery.grep(jQuery('script'), function(s){ + return (s.src && s.src.match(/jquery(-(.*)){0,1}(\.pack|\.min|\.packed)?\.js(\?.*)?$/ )) + })).attr('src'); +}; + +WYMeditor.editor.prototype.computeCssPath = function() { + return jQuery(jQuery.grep(jQuery('link'), function(s){ + return (s.href && s.href.match(/wymeditor\/skins\/(.*)screen\.css(\?.*)?$/ )) + })).attr('href'); +}; + +WYMeditor.editor.prototype.configureEditorUsingRawCss = function() { + + var CssParser = new WYMeditor.WymCssParser(); + if(this._options.stylesheet){ + CssParser.parse(jQuery.ajax({url: this._options.stylesheet,async:false}).responseText); + }else{ + CssParser.parse(this._options.styles, false); + } + + if(this._options.classesItems.length == 0) { + this._options.classesItems = CssParser.css_settings.classesItems; + } + if(this._options.editorStyles.length == 0) { + this._options.editorStyles = CssParser.css_settings.editorStyles; + } + if(this._options.dialogStyles.length == 0) { + this._options.dialogStyles = CssParser.css_settings.dialogStyles; + } +}; + +/********** EVENTS **********/ + +WYMeditor.editor.prototype.listen = function() { + //don't use jQuery.find() on the iframe body + //because of MSIE + jQuery + expando issue (#JQ1143) + //jQuery(this._doc.body).find("*").bind("mouseup", this.mouseup); + + jQuery(this._doc.body).bind("mousedown", this.mousedown); +}; + +WYMeditor.editor.prototype.mousedown = function(evt) { + var wym = WYMeditor.INSTANCES[this.ownerDocument.title]; + wym._selected_image = (evt.target.tagName.toLowerCase() == WYMeditor.IMG) ? evt.target : null; +}; + +/********** SKINS **********/ + +/* + * Function: WYMeditor.loadCss + * Loads a stylesheet in the document. + * + * Parameters: + * href - The CSS path. + */ +WYMeditor.loadCss = function(href) { + + var link = document.createElement('link'); + link.rel = 'stylesheet'; + link.href = href; + + var head = jQuery('head').get(0); + head.appendChild(link); +}; + +/* + * Function: WYMeditor.editor.loadSkin + * Loads the skin CSS and initialization script (if needed). + */ +WYMeditor.editor.prototype.loadSkin = function() { + + //does the user want to automatically load the CSS (default: yes)? + //we also test if it hasn't been already loaded by another instance + //see below for a better (second) test + if(this._options.loadSkin && !WYMeditor.SKINS[this._options.skin]) { + + //check if it hasn't been already loaded + //so we don't load it more than once + //(we check the existing <link> elements) + + var found = false; + var rExp = new RegExp(this._options.skin + + '\/' + WYMeditor.SKINS_DEFAULT_CSS + '$'); + + jQuery('link').each( function() { + if(this.href.match(rExp)) found = true; + }); + + //load it, using the skin path + if(!found) WYMeditor.loadCss( this._options.skinPath + + WYMeditor.SKINS_DEFAULT_CSS ); + } + + //put the classname (ex. wym_skin_default) on wym_box + jQuery(this._box).addClass( "wym_skin_" + this._options.skin ); + + //does the user want to use some JS to initialize the skin (default: yes)? + //also check if it hasn't already been loaded by another instance + if(this._options.initSkin && !WYMeditor.SKINS[this._options.skin]) { + + eval(jQuery.ajax({url:this._options.skinPath + + WYMeditor.SKINS_DEFAULT_JS, async:false}).responseText); + } + + //init the skin, if needed + if(WYMeditor.SKINS[this._options.skin] + && WYMeditor.SKINS[this._options.skin].init) + WYMeditor.SKINS[this._options.skin].init(this); + +}; + + +/********** DIALOGS **********/ + +WYMeditor.INIT_DIALOG = function(index) { + + var wym = window.opener.WYMeditor.INSTANCES[index]; + var doc = window.document; + var selected = wym.selected(); + var dialogType = jQuery(wym._options.dialogTypeSelector).val(); + var sStamp = wym.uniqueStamp(); + + switch(dialogType) { + + case WYMeditor.DIALOG_LINK: + //ensure that we select the link to populate the fields + if(selected && selected.tagName && selected.tagName.toLowerCase != WYMeditor.A) + selected = jQuery(selected).parentsOrSelf(WYMeditor.A); + + //fix MSIE selection if link image has been clicked + if(!selected && wym._selected_image) + selected = jQuery(wym._selected_image).parentsOrSelf(WYMeditor.A); + break; + + } + + //pre-init functions + if(jQuery.isFunction(wym._options.preInitDialog)) + wym._options.preInitDialog(wym,window); + + //add css rules from options + var styles = doc.styleSheets[0]; + var aCss = eval(wym._options.dialogStyles); + + wym.addCssRules(doc, aCss); + + //auto populate fields if selected container (e.g. A) + if(selected) { + jQuery(wym._options.hrefSelector).val(jQuery(selected).attr(WYMeditor.HREF)); + jQuery(wym._options.srcSelector).val(jQuery(selected).attr(WYMeditor.SRC)); + jQuery(wym._options.titleSelector).val(jQuery(selected).attr(WYMeditor.TITLE)); + jQuery(wym._options.altSelector).val(jQuery(selected).attr(WYMeditor.ALT)); + } + + //auto populate image fields if selected image + if(wym._selected_image) { + jQuery(wym._options.dialogImageSelector + " " + wym._options.srcSelector) + .val(jQuery(wym._selected_image).attr(WYMeditor.SRC)); + jQuery(wym._options.dialogImageSelector + " " + wym._options.titleSelector) + .val(jQuery(wym._selected_image).attr(WYMeditor.TITLE)); + jQuery(wym._options.dialogImageSelector + " " + wym._options.altSelector) + .val(jQuery(wym._selected_image).attr(WYMeditor.ALT)); + } + + jQuery(wym._options.dialogLinkSelector + " " + + wym._options.submitSelector).click(function() { + + var sUrl = jQuery(wym._options.hrefSelector).val(); + if(sUrl.length > 0) { + var link; + + if (selected[0] && selected[0].tagName.toLowerCase() == WYMeditor.A) { + link = selected; + } else { + wym._exec(WYMeditor.CREATE_LINK, sStamp); + link = jQuery("a[href=" + sStamp + "]", wym._doc.body); + } + + link.attr(WYMeditor.HREF, sUrl) + .attr(WYMeditor.TITLE, jQuery(wym._options.titleSelector).val()); + + } + window.close(); + }); + + jQuery(wym._options.dialogImageSelector + " " + + wym._options.submitSelector).click(function() { + + var sUrl = jQuery(wym._options.srcSelector).val(); + if(sUrl.length > 0) { + + wym._exec(WYMeditor.INSERT_IMAGE, sStamp); + + jQuery("img[src$=" + sStamp + "]", wym._doc.body) + .attr(WYMeditor.SRC, sUrl) + .attr(WYMeditor.TITLE, jQuery(wym._options.titleSelector).val()) + .attr(WYMeditor.ALT, jQuery(wym._options.altSelector).val()); + } + window.close(); + }); + + jQuery(wym._options.dialogTableSelector + " " + + wym._options.submitSelector).click(function() { + + var iRows = jQuery(wym._options.rowsSelector).val(); + var iCols = jQuery(wym._options.colsSelector).val(); + + if(iRows > 0 && iCols > 0) { + + var table = wym._doc.createElement(WYMeditor.TABLE); + var newRow = null; + var newCol = null; + + var sCaption = jQuery(wym._options.captionSelector).val(); + + //we create the caption + var newCaption = table.createCaption(); + newCaption.innerHTML = sCaption; + + //we create the rows and cells + for(x=0; x<iRows; x++) { + newRow = table.insertRow(x); + for(y=0; y<iCols; y++) {newRow.insertCell(y);} + } + + //set the summary attr + jQuery(table).attr('summary', + jQuery(wym._options.summarySelector).val()); + + //append the table after the selected container + var node = jQuery(wym.findUp(wym.container(), + WYMeditor.MAIN_CONTAINERS)).get(0); + if(!node || !node.parentNode) jQuery(wym._doc.body).append(table); + else jQuery(node).after(table); + } + window.close(); + }); + + jQuery(wym._options.dialogPasteSelector + " " + + wym._options.submitSelector).click(function() { + + var sText = jQuery(wym._options.textSelector).val(); + wym.paste(sText); + window.close(); + }); + + jQuery(wym._options.dialogPreviewSelector + " " + + wym._options.previewSelector) + .html(wym.xhtml()); + + //cancel button + jQuery(wym._options.cancelSelector).mousedown(function() { + window.close(); + }); + + //pre-init functions + if(jQuery.isFunction(wym._options.postInitDialog)) + wym._options.postInitDialog(wym,window); + +}; + +/********** XHTML LEXER/PARSER **********/ + +/* +* @name xml +* @description Use these methods to generate XML and XHTML compliant tags and +* escape tag attributes correctly +* @author Bermi Ferrer - http://bermi.org +* @author David Heinemeier Hansson http://loudthinking.com +*/ +WYMeditor.XmlHelper = function() +{ + this._entitiesDiv = document.createElement('div'); + return this; +}; + + +/* +* @name tag +* @description +* Returns an empty HTML tag of type *name* which by default is XHTML +* compliant. Setting *open* to true will create an open tag compatible +* with HTML 4.0 and below. Add HTML attributes by passing an attributes +* array to *options*. For attributes with no value like (disabled and +* readonly), give it a value of true in the *options* array. +* +* Examples: +* +* this.tag('br') +* # => <br /> +* this.tag ('br', false, true) +* # => <br> +* this.tag ('input', jQuery({type:'text',disabled:true }) ) +* # => <input type="text" disabled="disabled" /> +*/ +WYMeditor.XmlHelper.prototype.tag = function(name, options, open) +{ + options = options || false; + open = open || false; + return '<'+name+(options ? this.tagOptions(options) : '')+(open ? '>' : ' />'); +}; + +/* +* @name contentTag +* @description +* Returns a XML block tag of type *name* surrounding the *content*. Add +* XML attributes by passing an attributes array to *options*. For attributes +* with no value like (disabled and readonly), give it a value of true in +* the *options* array. You can use symbols or strings for the attribute names. +* +* this.contentTag ('p', 'Hello world!' ) +* # => <p>Hello world!</p> +* this.contentTag('div', this.contentTag('p', "Hello world!"), jQuery({class : "strong"})) +* # => <div class="strong"><p>Hello world!</p></div> +* this.contentTag("select", options, jQuery({multiple : true})) +* # => <select multiple="multiple">...options...</select> +*/ +WYMeditor.XmlHelper.prototype.contentTag = function(name, content, options) +{ + options = options || false; + return '<'+name+(options ? this.tagOptions(options) : '')+'>'+content+'</'+name+'>'; +}; + +/* +* @name cdataSection +* @description +* Returns a CDATA section for the given +content+. CDATA sections +* are used to escape blocks of text containing characters which would +* otherwise be recognized as markup. CDATA sections begin with the string +* <tt><![CDATA[</tt> and } with (and may not contain) the string +* <tt>]]></tt>. +*/ +WYMeditor.XmlHelper.prototype.cdataSection = function(content) +{ + return '<![CDATA['+content+']]>'; +}; + + +/* +* @name escapeOnce +* @description +* Returns the escaped +xml+ without affecting existing escaped entities. +* +* this.escapeOnce( "1 > 2 & 3") +* # => "1 > 2 & 3" +*/ +WYMeditor.XmlHelper.prototype.escapeOnce = function(xml) +{ + return this._fixDoubleEscape(this.escapeEntities(xml)); +}; + +/* +* @name _fixDoubleEscape +* @description +* Fix double-escaped entities, such as &amp;, &#123;, etc. +*/ +WYMeditor.XmlHelper.prototype._fixDoubleEscape = function(escaped) +{ + return escaped.replace(/&([a-z]+|(#\d+));/ig, "&$1;"); +}; + +/* +* @name tagOptions +* @description +* Takes an array like the one generated by Tag.parseAttributes +* [["src", "http://www.editam.com/?a=b&c=d&f=g"], ["title", "Editam, <Simplified> CMS"]] +* or an object like {src:"http://www.editam.com/?a=b&c=d&f=g", title:"Editam, <Simplified> CMS"} +* and returns a string properly escaped like +* ' src = "http://www.editam.com/?a=b&c=d&f=g" title = "Editam, <Simplified> CMS"' +* which is valid for strict XHTML +*/ +WYMeditor.XmlHelper.prototype.tagOptions = function(options) +{ + var xml = this; + xml._formated_options = ''; + + for (var key in options) { + var formated_options = ''; + var value = options[key]; + if(typeof value != 'function' && value.length > 0) { + + if(parseInt(key) == key && typeof value == 'object'){ + key = value.shift(); + value = value.pop(); + } + if(key != '' && value != ''){ + xml._formated_options += ' '+key+'="'+xml.escapeOnce(value)+'"'; + } + } + } + return xml._formated_options; +}; + +/* +* @name escapeEntities +* @description +* Escapes XML/HTML entities <, >, & and ". If seccond parameter is set to false it +* will not escape ". If set to true it will also escape ' +*/ +WYMeditor.XmlHelper.prototype.escapeEntities = function(string, escape_quotes) +{ + this._entitiesDiv.innerHTML = string; + this._entitiesDiv.textContent = string; + var result = this._entitiesDiv.innerHTML; + if(typeof escape_quotes == 'undefined'){ + if(escape_quotes != false) result = result.replace('"', '"'); + if(escape_quotes == true) result = result.replace('"', '''); + } + return result; +}; + +/* +* Parses a string conatining tag attributes and values an returns an array formated like +* [["src", "http://www.editam.com"], ["title", "Editam, Simplified CMS"]] +*/ +WYMeditor.XmlHelper.prototype.parseAttributes = function(tag_attributes) +{ + // Use a compounded regex to match single quoted, double quoted and unquoted attribute pairs + var result = []; + var matches = tag_attributes.split(/((=\s*")(")("))|((=\s*\')(\')(\'))|((=\s*[^>\s]*))/g); + if(matches.toString() != tag_attributes){ + for (var k in matches) { + var v = matches[k]; + if(typeof v != 'function' && v.length != 0){ + var re = new RegExp('(\\w+)\\s*'+v); + if(match = tag_attributes.match(re) ){ + var value = v.replace(/^[\s=]+/, ""); + var delimiter = value.charAt(0); + delimiter = delimiter == '"' ? '"' : (delimiter=="'"?"'":''); + if(delimiter != ''){ + value = delimiter == '"' ? value.replace(/^"|"+$/g, '') : value.replace(/^'|'+$/g, ''); + } + tag_attributes = tag_attributes.replace(match[0],''); + result.push([match[1] , value]); + } + } + } + } + return result; +}; + +/** +* XhtmlValidator for validating tag attributes +* +* @author Bermi Ferrer - http://bermi.org +*/ +WYMeditor.XhtmlValidator = { + "_attributes": + { + "core": + { + "except":[ + "base", + "head", + "html", + "meta", + "param", + "script", + "style", + "title" + ], + "attributes":[ + "class", + "id", + "style", + "title", + "accesskey", + "tabindex" + ] + }, + "language": + { + "except":[ + "base", + "br", + "hr", + "iframe", + "param", + "script" + ], + "attributes": + { + "dir":[ + "ltr", + "rtl" + ], + "0":"lang", + "1":"xml:lang" + } + }, + "keyboard": + { + "attributes": + { + "accesskey":/^(\w){1}$/, + "tabindex":/^(\d)+$/ + } + } + }, + "_events": + { + "window": + { + "only":[ + "body" + ], + "attributes":[ + "onload", + "onunload" + ] + }, + "form": + { + "only":[ + "form", + "input", + "textarea", + "select", + "a", + "label", + "button" + ], + "attributes":[ + "onchange", + "onsubmit", + "onreset", + "onselect", + "onblur", + "onfocus" + ] + }, + "keyboard": + { + "except":[ + "base", + "bdo", + "br", + "frame", + "frameset", + "head", + "html", + "iframe", + "meta", + "param", + "script", + "style", + "title" + ], + "attributes":[ + "onkeydown", + "onkeypress", + "onkeyup" + ] + }, + "mouse": + { + "except":[ + "base", + "bdo", + "br", + "head", + "html", + "meta", + "param", + "script", + "style", + "title" + ], + "attributes":[ + "onclick", + "ondblclick", + "onmousedown", + "onmousemove", + "onmouseover", + "onmouseout", + "onmouseup" + ] + } + }, + "_tags": + { + "a": + { + "attributes": + { + "0":"charset", + "1":"coords", + "2":"href", + "3":"hreflang", + "4":"name", + "rel":/^(alternate|designates|stylesheet|start|next|prev|contents|index|glossary|copyright|chapter|section|subsection|appendix|help|bookmark| |shortcut|icon)+$/, + "rev":/^(alternate|designates|stylesheet|start|next|prev|contents|index|glossary|copyright|chapter|section|subsection|appendix|help|bookmark| |shortcut|icon)+$/, + "shape":/^(rect|rectangle|circ|circle|poly|polygon)$/, + "5":"type" + } + }, + "0":"abbr", + "1":"acronym", + "2":"address", + "area": + { + "attributes": + { + "0":"alt", + "1":"coords", + "2":"href", + "nohref":/^(true|false)$/, + "shape":/^(rect|rectangle|circ|circle|poly|polygon)$/ + }, + "required":[ + "alt" + ] + }, + "3":"b", + "base": + { + "attributes":[ + "href" + ], + "required":[ + "href" + ] + }, + "bdo": + { + "attributes": + { + "dir":/^(ltr|rtl)$/ + }, + "required":[ + "dir" + ] + }, + "4":"big", + "blockquote": + { + "attributes":[ + "cite" + ] + }, + "5":"body", + "6":"br", + "button": + { + "attributes": + { + "disabled":/^(disabled)$/, + "type":/^(button|reset|submit)$/, + "0":"value" + }, + "inside":"form" + }, + "7":"caption", + "8":"cite", + "9":"code", + "col": + { + "attributes": + { + "align":/^(right|left|center|justify)$/, + "0":"char", + "1":"charoff", + "span":/^(\d)+$/, + "valign":/^(top|middle|bottom|baseline)$/, + "2":"width" + }, + "inside":"colgroup" + }, + "colgroup": + { + "attributes": + { + "align":/^(right|left|center|justify)$/, + "0":"char", + "1":"charoff", + "span":/^(\d)+$/, + "valign":/^(top|middle|bottom|baseline)$/, + "2":"width" + } + }, + "10":"dd", + "del": + { + "attributes": + { + "0":"cite", + "datetime":/^([0-9]){8}/ + } + }, + "11":"div", + "12":"dfn", + "13":"dl", + "14":"dt", + "15":"em", + "fieldset": + { + "inside":"form" + }, + "form": + { + "attributes": + { + "0":"action", + "1":"accept", + "2":"accept-charset", + "3":"enctype", + "method":/^(get|post)$/ + }, + "required":[ + "action" + ] + }, + "head": + { + "attributes":[ + "profile" + ] + }, + "16":"h1", + "17":"h2", + "18":"h3", + "19":"h4", + "20":"h5", + "21":"h6", + "22":"hr", + "html": + { + "attributes":[ + "xmlns" + ] + }, + "23":"i", + "img": + { + "attributes":[ + "alt", + "src", + "height", + "ismap", + "longdesc", + "usemap", + "width" + ], + "required":[ + "alt", + "src" + ] + }, + "input": + { + "attributes": + { + "0":"accept", + "1":"alt", + "checked":/^(checked)$/, + "disabled":/^(disabled)$/, + "maxlength":/^(\d)+$/, + "2":"name", + "readonly":/^(readonly)$/, + "size":/^(\d)+$/, + "3":"src", + "type":/^(button|checkbox|file|hidden|image|password|radio|reset|submit|text)$/, + "4":"value" + }, + "inside":"form" + }, + "ins": + { + "attributes": + { + "0":"cite", + "datetime":/^([0-9]){8}/ + } + }, + "24":"kbd", + "label": + { + "attributes":[ + "for" + ], + "inside":"form" + }, + "25":"legend", + "26":"li", + "link": + { + "attributes": + { + "0":"charset", + "1":"href", + "2":"hreflang", + "media":/^(all|braille|print|projection|screen|speech|,|;| )+$/i, + //next comment line required by Opera! + /*"rel":/^(alternate|appendix|bookmark|chapter|contents|copyright|glossary|help|home|index|next|prev|section|start|stylesheet|subsection| |shortcut|icon)+$/i,*/ + "rel":/^(alternate|appendix|bookmark|chapter|contents|copyright|glossary|help|home|index|next|prev|section|start|stylesheet|subsection| |shortcut|icon)+$/i, + "rev":/^(alternate|appendix|bookmark|chapter|contents|copyright|glossary|help|home|index|next|prev|section|start|stylesheet|subsection| |shortcut|icon)+$/i, + "3":"type" + }, + "inside":"head" + }, + "map": + { + "attributes":[ + "id", + "name" + ], + "required":[ + "id" + ] + }, + "meta": + { + "attributes": + { + "0":"content", + "http-equiv":/^(content\-type|expires|refresh|set\-cookie)$/i, + "1":"name", + "2":"scheme" + }, + "required":[ + "content" + ] + }, + "27":"noscript", + "object": + { + "attributes":[ + "archive", + "classid", + "codebase", + "codetype", + "data", + "declare", + "height", + "name", + "standby", + "type", + "usemap", + "width" + ] + }, + "28":"ol", + "optgroup": + { + "attributes": + { + "0":"label", + "disabled": /^(disabled)$/ + }, + "required":[ + "label" + ] + }, + "option": + { + "attributes": + { + "0":"label", + "disabled":/^(disabled)$/, + "selected":/^(selected)$/, + "1":"value" + }, + "inside":"select" + }, + "29":"p", + "param": + { + "attributes": + { + "0":"type", + "valuetype":/^(data|ref|object)$/, + "1":"valuetype", + "2":"value" + }, + "required":[ + "name" + ] + }, + "30":"pre", + "q": + { + "attributes":[ + "cite" + ] + }, + "31":"samp", + "script": + { + "attributes": + { + "type":/^(text\/ecmascript|text\/javascript|text\/jscript|text\/vbscript|text\/vbs|text\/xml)$/, + "0":"charset", + "defer":/^(defer)$/, + "1":"src" + }, + "required":[ + "type" + ] + }, + "select": + { + "attributes": + { + "disabled":/^(disabled)$/, + "multiple":/^(multiple)$/, + "0":"name", + "1":"size" + }, + "inside":"form" + }, + "32":"small", + "33":"span", + "34":"strong", + "style": + { + "attributes": + { + "0":"type", + "media":/^(screen|tty|tv|projection|handheld|print|braille|aural|all)$/ + }, + "required":[ + "type" + ] + }, + "35":"sub", + "36":"sup", + "table": + { + "attributes": + { + "0":"border", + "1":"cellpadding", + "2":"cellspacing", + "frame":/^(void|above|below|hsides|lhs|rhs|vsides|box|border)$/, + "rules":/^(none|groups|rows|cols|all)$/, + "3":"summary", + "4":"width" + } + }, + "tbody": + { + "attributes": + { + "align":/^(right|left|center|justify)$/, + "0":"char", + "1":"charoff", + "valign":/^(top|middle|bottom|baseline)$/ + } + }, + "td": + { + "attributes": + { + "0":"abbr", + "align":/^(left|right|center|justify|char)$/, + "1":"axis", + "2":"char", + "3":"charoff", + "colspan":/^(\d)+$/, + "4":"headers", + "rowspan":/^(\d)+$/, + "scope":/^(col|colgroup|row|rowgroup)$/, + "valign":/^(top|middle|bottom|baseline)$/ + } + }, + "textarea": + { + "attributes":[ + "cols", + "rows", + "disabled", + "name", + "readonly" + ], + "required":[ + "cols", + "rows" + ], + "inside":"form" + }, + "tfoot": + { + "attributes": + { + "align":/^(right|left|center|justify)$/, + "0":"char", + "1":"charoff", + "valign":/^(top|middle|bottom)$/, + "2":"baseline" + } + }, + "th": + { + "attributes": + { + "0":"abbr", + "align":/^(left|right|center|justify|char)$/, + "1":"axis", + "2":"char", + "3":"charoff", + "colspan":/^(\d)+$/, + "4":"headers", + "rowspan":/^(\d)+$/, + "scope":/^(col|colgroup|row|rowgroup)$/, + "valign":/^(top|middle|bottom|baseline)$/ + } + }, + "thead": + { + "attributes": + { + "align":/^(right|left|center|justify)$/, + "0":"char", + "1":"charoff", + "valign":/^(top|middle|bottom|baseline)$/ + } + }, + "37":"title", + "tr": + { + "attributes": + { + "align":/^(right|left|center|justify|char)$/, + "0":"char", + "1":"charoff", + "valign":/^(top|middle|bottom|baseline)$/ + } + }, + "38":"tt", + "39":"ul", + "40":"var" + }, + + // Temporary skiped attributes + skiped_attributes : [], + skiped_attribute_values : [], + + getValidTagAttributes: function(tag, attributes) + { + var valid_attributes = {}; + var possible_attributes = this.getPossibleTagAttributes(tag); + for(var attribute in attributes) { + var value = attributes[attribute]; + var h = WYMeditor.Helper; + if(!h.contains(this.skiped_attributes, attribute) && !h.contains(this.skiped_attribute_values, value)){ + if (typeof value != 'function' && h.contains(possible_attributes, attribute)) { + if (this.doesAttributeNeedsValidation(tag, attribute)) { + if(this.validateAttribute(tag, attribute, value)){ + valid_attributes[attribute] = value; + } + }else{ + valid_attributes[attribute] = value; + } + } + } + } + return valid_attributes; + }, + getUniqueAttributesAndEventsForTag : function(tag) + { + var result = []; + + if (this._tags[tag] && this._tags[tag]['attributes']) { + for (k in this._tags[tag]['attributes']) { + result.push(parseInt(k) == k ? this._tags[tag]['attributes'][k] : k); + } + } + return result; + }, + getDefaultAttributesAndEventsForTags : function() + { + var result = []; + for (var key in this._events){ + result.push(this._events[key]); + } + for (var key in this._attributes){ + result.push(this._attributes[key]); + } + return result; + }, + isValidTag : function(tag) + { + if(this._tags[tag]){ + return true; + } + for(var key in this._tags){ + if(this._tags[key] == tag){ + return true; + } + } + return false; + }, + getDefaultAttributesAndEventsForTag : function(tag) + { + var default_attributes = []; + if (this.isValidTag(tag)) { + var default_attributes_and_events = this.getDefaultAttributesAndEventsForTags(); + + for(var key in default_attributes_and_events) { + var defaults = default_attributes_and_events[key]; + if(typeof defaults == 'object'){ + var h = WYMeditor.Helper; + if ((defaults['except'] && h.contains(defaults['except'], tag)) || (defaults['only'] && !h.contains(defaults['only'], tag))) { + continue; + } + + var tag_defaults = defaults['attributes'] ? defaults['attributes'] : defaults['events']; + for(var k in tag_defaults) { + default_attributes.push(typeof tag_defaults[k] != 'string' ? k : tag_defaults[k]); + } + } + } + } + return default_attributes; + }, + doesAttributeNeedsValidation: function(tag, attribute) + { + return this._tags[tag] && ((this._tags[tag]['attributes'] && this._tags[tag]['attributes'][attribute]) || (this._tags[tag]['required'] && + WYMeditor.Helper.contains(this._tags[tag]['required'], attribute))); + }, + validateAttribute : function(tag, attribute, value) + { + if ( this._tags[tag] && + (this._tags[tag]['attributes'] && this._tags[tag]['attributes'][attribute] && value.length > 0 && !value.match(this._tags[tag]['attributes'][attribute])) || // invalid format + (this._tags[tag] && this._tags[tag]['required'] && WYMeditor.Helper.contains(this._tags[tag]['required'], attribute) && value.length == 0) // required attribute + ) { + return false; + } + return typeof this._tags[tag] != 'undefined'; + }, + getPossibleTagAttributes : function(tag) + { + if (!this._possible_tag_attributes) { + this._possible_tag_attributes = {}; + } + if (!this._possible_tag_attributes[tag]) { + this._possible_tag_attributes[tag] = this.getUniqueAttributesAndEventsForTag(tag).concat(this.getDefaultAttributesAndEventsForTag(tag)); + } + return this._possible_tag_attributes[tag]; + } +}; + + +/** +* Compounded regular expression. Any of +* the contained patterns could match and +* when one does, it's label is returned. +* +* Constructor. Starts with no patterns. +* @param boolean case True for case sensitive, false +* for insensitive. +* @access public +* @author Marcus Baker (http://lastcraft.com) +* @author Bermi Ferrer (http://bermi.org) +*/ +WYMeditor.ParallelRegex = function(case_sensitive) +{ + this._case = case_sensitive; + this._patterns = []; + this._labels = []; + this._regex = null; + return this; +}; + + +/** +* Adds a pattern with an optional label. +* @param string pattern Perl style regex, but ( and ) +* lose the usual meaning. +* @param string label Label of regex to be returned +* on a match. +* @access public +*/ +WYMeditor.ParallelRegex.prototype.addPattern = function(pattern, label) +{ + label = label || true; + var count = this._patterns.length; + this._patterns[count] = pattern; + this._labels[count] = label; + this._regex = null; +}; + +/** +* Attempts to match all patterns at once against +* a string. +* @param string subject String to match against. +* +* @return boolean True on success. +* @return string match First matched portion of +* subject. +* @access public +*/ +WYMeditor.ParallelRegex.prototype.match = function(subject) +{ + if (this._patterns.length == 0) { + return [false, '']; + } + var matches = subject.match(this._getCompoundedRegex()); + + if(!matches){ + return [false, '']; + } + var match = matches[0]; + for (var i = 1; i < matches.length; i++) { + if (matches[i]) { + return [this._labels[i-1], match]; + } + } + return [true, matches[0]]; +}; + +/** +* Compounds the patterns into a single +* regular expression separated with the +* "or" operator. Caches the regex. +* Will automatically escape (, ) and / tokens. +* @param array patterns List of patterns in order. +* @access private +*/ +WYMeditor.ParallelRegex.prototype._getCompoundedRegex = function() +{ + if (this._regex == null) { + for (var i = 0, count = this._patterns.length; i < count; i++) { + this._patterns[i] = '(' + this._untokenizeRegex(this._tokenizeRegex(this._patterns[i]).replace(/([\/\(\)])/g,'\\$1')) + ')'; + } + this._regex = new RegExp(this._patterns.join("|") ,this._getPerlMatchingFlags()); + } + return this._regex; +}; + +/** +* Escape lookahead/lookbehind blocks +*/ +WYMeditor.ParallelRegex.prototype._tokenizeRegex = function(regex) +{ + return regex. + replace(/\(\?(i|m|s|x|U)\)/, '~~~~~~Tk1\$1~~~~~~'). + replace(/\(\?(\-[i|m|s|x|U])\)/, '~~~~~~Tk2\$1~~~~~~'). + replace(/\(\?\=(.*)\)/, '~~~~~~Tk3\$1~~~~~~'). + replace(/\(\?\!(.*)\)/, '~~~~~~Tk4\$1~~~~~~'). + replace(/\(\?\<\=(.*)\)/, '~~~~~~Tk5\$1~~~~~~'). + replace(/\(\?\<\!(.*)\)/, '~~~~~~Tk6\$1~~~~~~'). + replace(/\(\?\:(.*)\)/, '~~~~~~Tk7\$1~~~~~~'); +}; + +/** +* Unscape lookahead/lookbehind blocks +*/ +WYMeditor.ParallelRegex.prototype._untokenizeRegex = function(regex) +{ + return regex. + replace(/~~~~~~Tk1(.{1})~~~~~~/, "(?\$1)"). + replace(/~~~~~~Tk2(.{2})~~~~~~/, "(?\$1)"). + replace(/~~~~~~Tk3(.*)~~~~~~/, "(?=\$1)"). + replace(/~~~~~~Tk4(.*)~~~~~~/, "(?!\$1)"). + replace(/~~~~~~Tk5(.*)~~~~~~/, "(?<=\$1)"). + replace(/~~~~~~Tk6(.*)~~~~~~/, "(?<!\$1)"). + replace(/~~~~~~Tk7(.*)~~~~~~/, "(?:\$1)"); +}; + + +/** +* Accessor for perl regex mode flags to use. +* @return string Perl regex flags. +* @access private +*/ +WYMeditor.ParallelRegex.prototype._getPerlMatchingFlags = function() +{ + return (this._case ? "m" : "mi"); +}; + + + +/** +* States for a stack machine. +* +* Constructor. Starts in named state. +* @param string start Starting state name. +* @access public +* @author Marcus Baker (http://lastcraft.com) +* @author Bermi Ferrer (http://bermi.org) +*/ +WYMeditor.StateStack = function(start) +{ + this._stack = [start]; + return this; +}; + +/** +* Accessor for current state. +* @return string State. +* @access public +*/ +WYMeditor.StateStack.prototype.getCurrent = function() +{ + return this._stack[this._stack.length - 1]; +}; + +/** +* Adds a state to the stack and sets it +* to be the current state. +* @param string state New state. +* @access public +*/ +WYMeditor.StateStack.prototype.enter = function(state) +{ + this._stack.push(state); +}; + +/** +* Leaves the current state and reverts +* to the previous one. +* @return boolean False if we drop off +* the bottom of the list. +* @access public +*/ +WYMeditor.StateStack.prototype.leave = function() +{ + if (this._stack.length == 1) { + return false; + } + this._stack.pop(); + return true; +}; + + +// GLOBALS +WYMeditor.LEXER_ENTER = 1; +WYMeditor.LEXER_MATCHED = 2; +WYMeditor.LEXER_UNMATCHED = 3; +WYMeditor.LEXER_EXIT = 4; +WYMeditor.LEXER_SPECIAL = 5; + + +/** +* Accepts text and breaks it into tokens. +* Some optimisation to make the sure the +* content is only scanned by the PHP regex +* parser once. Lexer modes must not start +* with leading underscores. +* +* Sets up the lexer in case insensitive matching +* by default. +* @param Parser parser Handling strategy by reference. +* @param string start Starting handler. +* @param boolean case True for case sensitive. +* @access public +* @author Marcus Baker (http://lastcraft.com) +* @author Bermi Ferrer (http://bermi.org) +*/ +WYMeditor.Lexer = function(parser, start, case_sensitive) +{ + start = start || 'accept'; + this._case = case_sensitive || false; + this._regexes = {}; + this._parser = parser; + this._mode = new WYMeditor.StateStack(start); + this._mode_handlers = {}; + this._mode_handlers[start] = start; + return this; +}; + +/** +* Adds a token search pattern for a particular +* parsing mode. The pattern does not change the +* current mode. +* @param string pattern Perl style regex, but ( and ) +* lose the usual meaning. +* @param string mode Should only apply this +* pattern when dealing with +* this type of input. +* @access public +*/ +WYMeditor.Lexer.prototype.addPattern = function(pattern, mode) +{ + var mode = mode || "accept"; + if (typeof this._regexes[mode] == 'undefined') { + this._regexes[mode] = new WYMeditor.ParallelRegex(this._case); + } + this._regexes[mode].addPattern(pattern); + if (typeof this._mode_handlers[mode] == 'undefined') { + this._mode_handlers[mode] = mode; + } +}; + +/** +* Adds a pattern that will enter a new parsing +* mode. Useful for entering parenthesis, strings, +* tags, etc. +* @param string pattern Perl style regex, but ( and ) +* lose the usual meaning. +* @param string mode Should only apply this +* pattern when dealing with +* this type of input. +* @param string new_mode Change parsing to this new +* nested mode. +* @access public +*/ +WYMeditor.Lexer.prototype.addEntryPattern = function(pattern, mode, new_mode) +{ + if (typeof this._regexes[mode] == 'undefined') { + this._regexes[mode] = new WYMeditor.ParallelRegex(this._case); + } + this._regexes[mode].addPattern(pattern, new_mode); + if (typeof this._mode_handlers[new_mode] == 'undefined') { + this._mode_handlers[new_mode] = new_mode; + } +}; + +/** +* Adds a pattern that will exit the current mode +* and re-enter the previous one. +* @param string pattern Perl style regex, but ( and ) +* lose the usual meaning. +* @param string mode Mode to leave. +* @access public +*/ +WYMeditor.Lexer.prototype.addExitPattern = function(pattern, mode) +{ + if (typeof this._regexes[mode] == 'undefined') { + this._regexes[mode] = new WYMeditor.ParallelRegex(this._case); + } + this._regexes[mode].addPattern(pattern, "__exit"); + if (typeof this._mode_handlers[mode] == 'undefined') { + this._mode_handlers[mode] = mode; + } +}; + +/** +* Adds a pattern that has a special mode. Acts as an entry +* and exit pattern in one go, effectively calling a special +* parser handler for this token only. +* @param string pattern Perl style regex, but ( and ) +* lose the usual meaning. +* @param string mode Should only apply this +* pattern when dealing with +* this type of input. +* @param string special Use this mode for this one token. +* @access public +*/ +WYMeditor.Lexer.prototype.addSpecialPattern = function(pattern, mode, special) +{ + if (typeof this._regexes[mode] == 'undefined') { + this._regexes[mode] = new WYMeditor.ParallelRegex(this._case); + } + this._regexes[mode].addPattern(pattern, '_'+special); + if (typeof this._mode_handlers[special] == 'undefined') { + this._mode_handlers[special] = special; + } +}; + +/** +* Adds a mapping from a mode to another handler. +* @param string mode Mode to be remapped. +* @param string handler New target handler. +* @access public +*/ +WYMeditor.Lexer.prototype.mapHandler = function(mode, handler) +{ + this._mode_handlers[mode] = handler; +}; + +/** +* Splits the page text into tokens. Will fail +* if the handlers report an error or if no +* content is consumed. If successful then each +* unparsed and parsed token invokes a call to the +* held listener. +* @param string raw Raw HTML text. +* @return boolean True on success, else false. +* @access public +*/ +WYMeditor.Lexer.prototype.parse = function(raw) +{ + if (typeof this._parser == 'undefined') { + return false; + } + + var length = raw.length; + var parsed; + while (typeof (parsed = this._reduce(raw)) == 'object') { + var raw = parsed[0]; + var unmatched = parsed[1]; + var matched = parsed[2]; + var mode = parsed[3]; + + if (! this._dispatchTokens(unmatched, matched, mode)) { + return false; + } + + if (raw == '') { + return true; + } + if (raw.length == length) { + return false; + } + length = raw.length; + } + if (! parsed ) { + return false; + } + + return this._invokeParser(raw, WYMeditor.LEXER_UNMATCHED); +}; + +/** +* Sends the matched token and any leading unmatched +* text to the parser changing the lexer to a new +* mode if one is listed. +* @param string unmatched Unmatched leading portion. +* @param string matched Actual token match. +* @param string mode Mode after match. A boolean +* false mode causes no change. +* @return boolean False if there was any error +* from the parser. +* @access private +*/ +WYMeditor.Lexer.prototype._dispatchTokens = function(unmatched, matched, mode) +{ + mode = mode || false; + + if (! this._invokeParser(unmatched, WYMeditor.LEXER_UNMATCHED)) { + return false; + } + + if (typeof mode == 'boolean') { + return this._invokeParser(matched, WYMeditor.LEXER_MATCHED); + } + if (this._isModeEnd(mode)) { + if (! this._invokeParser(matched, WYMeditor.LEXER_EXIT)) { + return false; + } + return this._mode.leave(); + } + if (this._isSpecialMode(mode)) { + this._mode.enter(this._decodeSpecial(mode)); + if (! this._invokeParser(matched, WYMeditor.LEXER_SPECIAL)) { + return false; + } + return this._mode.leave(); + } + this._mode.enter(mode); + + return this._invokeParser(matched, WYMeditor.LEXER_ENTER); +}; + +/** +* Tests to see if the new mode is actually to leave +* the current mode and pop an item from the matching +* mode stack. +* @param string mode Mode to test. +* @return boolean True if this is the exit mode. +* @access private +*/ +WYMeditor.Lexer.prototype._isModeEnd = function(mode) +{ + return (mode === "__exit"); +}; + +/** +* Test to see if the mode is one where this mode +* is entered for this token only and automatically +* leaves immediately afterwoods. +* @param string mode Mode to test. +* @return boolean True if this is the exit mode. +* @access private +*/ +WYMeditor.Lexer.prototype._isSpecialMode = function(mode) +{ + return (mode.substring(0,1) == "_"); +}; + +/** +* Strips the magic underscore marking single token +* modes. +* @param string mode Mode to decode. +* @return string Underlying mode name. +* @access private +*/ +WYMeditor.Lexer.prototype._decodeSpecial = function(mode) +{ + return mode.substring(1); +}; + +/** +* Calls the parser method named after the current +* mode. Empty content will be ignored. The lexer +* has a parser handler for each mode in the lexer. +* @param string content Text parsed. +* @param boolean is_match Token is recognised rather +* than unparsed data. +* @access private +*/ +WYMeditor.Lexer.prototype._invokeParser = function(content, is_match) +{ + + if (content === '') { + return true; + } + var current = this._mode.getCurrent(); + var handler = this._mode_handlers[current]; + var result; + eval('result = this._parser.' + handler + '(content, is_match);'); + return result; +}; + +/** +* Tries to match a chunk of text and if successful +* removes the recognised chunk and any leading +* unparsed data. Empty strings will not be matched. +* @param string raw The subject to parse. This is the +* content that will be eaten. +* @return array/boolean Three item list of unparsed +* content followed by the +* recognised token and finally the +* action the parser is to take. +* True if no match, false if there +* is a parsing error. +* @access private +*/ +WYMeditor.Lexer.prototype._reduce = function(raw) +{ + var matched = this._regexes[this._mode.getCurrent()].match(raw); + var match = matched[1]; + var action = matched[0]; + if (action) { + var unparsed_character_count = raw.indexOf(match); + var unparsed = raw.substr(0, unparsed_character_count); + raw = raw.substring(unparsed_character_count + match.length); + return [raw, unparsed, match, action]; + } + return true; +}; + + + +/** +* This are the rules for breaking the XHTML code into events +* handled by the provided parser. +* +* @author Marcus Baker (http://lastcraft.com) +* @author Bermi Ferrer (http://bermi.org) +*/ +WYMeditor.XhtmlLexer = function(parser) +{ + jQuery.extend(this, new WYMeditor.Lexer(parser, 'Text')); + + this.mapHandler('Text', 'Text'); + + this.addTokens(); + + this.init(); + + return this; +}; + + +WYMeditor.XhtmlLexer.prototype.init = function() +{ +}; + +WYMeditor.XhtmlLexer.prototype.addTokens = function() +{ + this.addCommentTokens('Text'); + this.addScriptTokens('Text'); + this.addCssTokens('Text'); + this.addTagTokens('Text'); +}; + +WYMeditor.XhtmlLexer.prototype.addCommentTokens = function(scope) +{ + this.addEntryPattern("<!--", scope, 'Comment'); + this.addExitPattern("-->", 'Comment'); +}; + +WYMeditor.XhtmlLexer.prototype.addScriptTokens = function(scope) +{ + this.addEntryPattern("<script", scope, 'Script'); + this.addExitPattern("</script>", 'Script'); +}; + +WYMeditor.XhtmlLexer.prototype.addCssTokens = function(scope) +{ + this.addEntryPattern("<style", scope, 'Css'); + this.addExitPattern("</style>", 'Css'); +}; + +WYMeditor.XhtmlLexer.prototype.addTagTokens = function(scope) +{ + this.addSpecialPattern("<\\s*[a-z0-9:\-]+\\s*>", scope, 'OpeningTag'); + this.addEntryPattern("<[a-z0-9:\-]+"+'[\\\/ \\\>]+', scope, 'OpeningTag'); + this.addInTagDeclarationTokens('OpeningTag'); + + this.addSpecialPattern("</\\s*[a-z0-9:\-]+\\s*>", scope, 'ClosingTag'); + +}; + +WYMeditor.XhtmlLexer.prototype.addInTagDeclarationTokens = function(scope) +{ + this.addSpecialPattern('\\s+', scope, 'Ignore'); + + this.addAttributeTokens(scope); + + this.addExitPattern('/>', scope); + this.addExitPattern('>', scope); + +}; + +WYMeditor.XhtmlLexer.prototype.addAttributeTokens = function(scope) +{ + this.addSpecialPattern("\\s*[a-z-_0-9]*:?[a-z-_0-9]+\\s*(?=\=)\\s*", scope, 'TagAttributes'); + + this.addEntryPattern('=\\s*"', scope, 'DoubleQuotedAttribute'); + this.addPattern("\\\\\"", 'DoubleQuotedAttribute'); + this.addExitPattern('"', 'DoubleQuotedAttribute'); + + this.addEntryPattern("=\\s*'", scope, 'SingleQuotedAttribute'); + this.addPattern("\\\\'", 'SingleQuotedAttribute'); + this.addExitPattern("'", 'SingleQuotedAttribute'); + + this.addSpecialPattern('=\\s*[^>\\s]*', scope, 'UnquotedAttribute'); +}; + + + +/** +* XHTML Parser. +* +* This XHTML parser will trigger the events available on on +* current SaxListener +* +* @author Bermi Ferrer (http://bermi.org) +*/ +WYMeditor.XhtmlParser = function(Listener, mode) +{ + var mode = mode || 'Text'; + this._Lexer = new WYMeditor.XhtmlLexer(this); + this._Listener = Listener; + this._mode = mode; + this._matches = []; + this._last_match = ''; + this._current_match = ''; + + return this; +}; + +WYMeditor.XhtmlParser.prototype.parse = function(raw) +{ + this._Lexer.parse(this.beforeParsing(raw)); + return this.afterParsing(this._Listener.getResult()); +}; + +WYMeditor.XhtmlParser.prototype.beforeParsing = function(raw) +{ + if(raw.match(/class="MsoNormal"/) || raw.match(/ns = "urn:schemas-microsoft-com/)){ + // Usefull for cleaning up content pasted from other sources (MSWord) + this._Listener.avoidStylingTagsAndAttributes(); + } + return this._Listener.beforeParsing(raw); +}; + +WYMeditor.XhtmlParser.prototype.afterParsing = function(parsed) +{ + if(this._Listener._avoiding_tags_implicitly){ + this._Listener.allowStylingTagsAndAttributes(); + } + return this._Listener.afterParsing(parsed); +}; + + +WYMeditor.XhtmlParser.prototype.Ignore = function(match, state) +{ + return true; +}; + +WYMeditor.XhtmlParser.prototype.Text = function(text) +{ + this._Listener.addContent(text); + return true; +}; + +WYMeditor.XhtmlParser.prototype.Comment = function(match, status) +{ + return this._addNonTagBlock(match, status, 'addComment'); +}; + +WYMeditor.XhtmlParser.prototype.Script = function(match, status) +{ + return this._addNonTagBlock(match, status, 'addScript'); +}; + +WYMeditor.XhtmlParser.prototype.Css = function(match, status) +{ + return this._addNonTagBlock(match, status, 'addCss'); +}; + +WYMeditor.XhtmlParser.prototype._addNonTagBlock = function(match, state, type) +{ + switch (state){ + case WYMeditor.LEXER_ENTER: + this._non_tag = match; + break; + case WYMeditor.LEXER_UNMATCHED: + this._non_tag += match; + break; + case WYMeditor.LEXER_EXIT: + switch(type) { + case 'addComment': + this._Listener.addComment(this._non_tag+match); + break; + case 'addScript': + this._Listener.addScript(this._non_tag+match); + break; + case 'addCss': + this._Listener.addCss(this._non_tag+match); + break; + } + } + return true; +}; + +WYMeditor.XhtmlParser.prototype.OpeningTag = function(match, state) +{ + switch (state){ + case WYMeditor.LEXER_ENTER: + this._tag = this.normalizeTag(match); + this._tag_attributes = {}; + break; + case WYMeditor.LEXER_SPECIAL: + this._callOpenTagListener(this.normalizeTag(match)); + break; + case WYMeditor.LEXER_EXIT: + this._callOpenTagListener(this._tag, this._tag_attributes); + } + return true; +}; + +WYMeditor.XhtmlParser.prototype.ClosingTag = function(match, state) +{ + this._callCloseTagListener(this.normalizeTag(match)); + return true; +}; + +WYMeditor.XhtmlParser.prototype._callOpenTagListener = function(tag, attributes) +{ + var attributes = attributes || {}; + this.autoCloseUnclosedBeforeNewOpening(tag); + + if(this._Listener.isBlockTag(tag)){ + this._Listener._tag_stack.push(tag); + this._Listener.fixNestingBeforeOpeningBlockTag(tag, attributes); + this._Listener.openBlockTag(tag, attributes); + this._increaseOpenTagCounter(tag); + }else if(this._Listener.isInlineTag(tag)){ + this._Listener.inlineTag(tag, attributes); + }else{ + this._Listener.openUnknownTag(tag, attributes); + this._increaseOpenTagCounter(tag); + } + this._Listener.last_tag = tag; + this._Listener.last_tag_opened = true; + this._Listener.last_tag_attributes = attributes; +}; + +WYMeditor.XhtmlParser.prototype._callCloseTagListener = function(tag) +{ + if(this._decreaseOpenTagCounter(tag)){ + this.autoCloseUnclosedBeforeTagClosing(tag); + + if(this._Listener.isBlockTag(tag)){ + var expected_tag = this._Listener._tag_stack.pop(); + if(expected_tag == false){ + return; + }else if(expected_tag != tag){ + tag = expected_tag; + } + this._Listener.closeBlockTag(tag); + }else{ + this._Listener.closeUnknownTag(tag); + } + }else{ + this._Listener.closeUnopenedTag(tag); + } + this._Listener.last_tag = tag; + this._Listener.last_tag_opened = false; +}; + +WYMeditor.XhtmlParser.prototype._increaseOpenTagCounter = function(tag) +{ + this._Listener._open_tags[tag] = this._Listener._open_tags[tag] || 0; + this._Listener._open_tags[tag]++; +}; + +WYMeditor.XhtmlParser.prototype._decreaseOpenTagCounter = function(tag) +{ + if(this._Listener._open_tags[tag]){ + this._Listener._open_tags[tag]--; + if(this._Listener._open_tags[tag] == 0){ + this._Listener._open_tags[tag] = undefined; + } + return true; + } + return false; +}; + +WYMeditor.XhtmlParser.prototype.autoCloseUnclosedBeforeNewOpening = function(new_tag) +{ + this._autoCloseUnclosed(new_tag, false); +}; + +WYMeditor.XhtmlParser.prototype.autoCloseUnclosedBeforeTagClosing = function(tag) +{ + this._autoCloseUnclosed(tag, true); +}; + +WYMeditor.XhtmlParser.prototype._autoCloseUnclosed = function(new_tag, closing) +{ + var closing = closing || false; + if(this._Listener._open_tags){ + for (var tag in this._Listener._open_tags) { + var counter = this._Listener._open_tags[tag]; + if(counter > 0 && this._Listener.shouldCloseTagAutomatically(tag, new_tag, closing)){ + this._callCloseTagListener(tag, true); + } + } + } +}; + +WYMeditor.XhtmlParser.prototype.getTagReplacements = function() +{ + return this._Listener.getTagReplacements(); +}; + +WYMeditor.XhtmlParser.prototype.normalizeTag = function(tag) +{ + tag = tag.replace(/^([\s<\/>]*)|([\s<\/>]*)$/gm,'').toLowerCase(); + var tags = this._Listener.getTagReplacements(); + if(tags[tag]){ + return tags[tag]; + } + return tag; +}; + +WYMeditor.XhtmlParser.prototype.TagAttributes = function(match, state) +{ + if(WYMeditor.LEXER_SPECIAL == state){ + this._current_attribute = match; + } + return true; +}; + +WYMeditor.XhtmlParser.prototype.DoubleQuotedAttribute = function(match, state) +{ + if(WYMeditor.LEXER_UNMATCHED == state){ + this._tag_attributes[this._current_attribute] = match; + } + return true; +}; + +WYMeditor.XhtmlParser.prototype.SingleQuotedAttribute = function(match, state) +{ + if(WYMeditor.LEXER_UNMATCHED == state){ + this._tag_attributes[this._current_attribute] = match; + } + return true; +}; + +WYMeditor.XhtmlParser.prototype.UnquotedAttribute = function(match, state) +{ + this._tag_attributes[this._current_attribute] = match.replace(/^=/,''); + return true; +}; + + + +/** +* XHTML Sax parser. +* +* @author Bermi Ferrer (http://bermi.org) +*/ +WYMeditor.XhtmlSaxListener = function() +{ + this.output = ''; + this.helper = new WYMeditor.XmlHelper(); + this._open_tags = {}; + this.validator = WYMeditor.XhtmlValidator; + this._tag_stack = []; + this.avoided_tags = []; + + this.entities = { + ' ':' ','¡':'¡','¢':'¢', + '£':'£','¤':'¤','¥':'¥', + '¦':'¦','§':'§','¨':'¨', + '©':'©','ª':'ª','«':'«', + '¬':'¬','­':'­','®':'®', + '¯':'¯','°':'°','±':'±', + '²':'²','³':'³','´':'´', + 'µ':'µ','¶':'¶','·':'·', + '¸':'¸','¹':'¹','º':'º', + '»':'»','¼':'¼','½':'½', + '¾':'¾','¿':'¿','À':'À', + 'Á':'Á','Â':'Â','Ã':'Ã', + 'Ä':'Ä','Å':'Å','Æ':'Æ', + 'Ç':'Ç','È':'È','É':'É', + 'Ê':'Ê','Ë':'Ë','Ì':'Ì', + 'Í':'Í','Î':'Î','Ï':'Ï', + 'Ð':'Ð','Ñ':'Ñ','Ò':'Ò', + 'Ó':'Ó','Ô':'Ô','Õ':'Õ', + 'Ö':'Ö','×':'×','Ø':'Ø', + 'Ù':'Ù','Ú':'Ú','Û':'Û', + 'Ü':'Ü','Ý':'Ý','Þ':'Þ', + 'ß':'ß','à':'à','á':'á', + 'â':'â','ã':'ã','ä':'ä', + 'å':'å','æ':'æ','ç':'ç', + 'è':'è','é':'é','ê':'ê', + 'ë':'ë','ì':'ì','í':'í', + 'î':'î','ï':'ï','ð':'ð', + 'ñ':'ñ','ò':'ò','ó':'ó', + 'ô':'ô','õ':'õ','ö':'ö', + '÷':'÷','ø':'ø','ù':'ù', + 'ú':'ú','û':'û','ü':'ü', + 'ý':'ý','þ':'þ','ÿ':'ÿ', + 'Œ':'Œ','œ':'œ','Š':'Š', + 'š':'š','Ÿ':'Ÿ','ƒ':'ƒ', + 'ˆ':'ˆ','˜':'˜','Α':'Α', + 'Β':'Β','Γ':'Γ','Δ':'Δ', + 'Ε':'Ε','Ζ':'Ζ','Η':'Η', + 'Θ':'Θ','Ι':'Ι','Κ':'Κ', + 'Λ':'Λ','Μ':'Μ','Ν':'Ν', + 'Ξ':'Ξ','Ο':'Ο','Π':'Π', + 'Ρ':'Ρ','Σ':'Σ','Τ':'Τ', + 'Υ':'Υ','Φ':'Φ','Χ':'Χ', + 'Ψ':'Ψ','Ω':'Ω','α':'α', + 'β':'β','γ':'γ','δ':'δ', + 'ε':'ε','ζ':'ζ','η':'η', + 'θ':'θ','ι':'ι','κ':'κ', + 'λ':'λ','μ':'μ','ν':'ν', + 'ξ':'ξ','ο':'ο','π':'π', + 'ρ':'ρ','ς':'ς','σ':'σ', + 'τ':'τ','υ':'υ','φ':'φ', + 'χ':'χ','ψ':'ψ','ω':'ω', + 'ϑ':'ϑ','ϒ':'ϒ','ϖ':'ϖ', + ' ':' ',' ':' ',' ':' ', + '‌':'‌','‍':'‍','‎':'‎', + '‏':'‏','–':'–','—':'—', + '‘':'‘','’':'’','‚':'‚', + '“':'“','”':'”','„':'„', + '†':'†','‡':'‡','•':'•', + '…':'…','‰':'‰','′':'′', + '″':'″','‹':'‹','›':'›', + '‾':'‾','⁄':'⁄','€':'€', + 'ℑ':'ℑ','℘':'℘','ℜ':'ℜ', + '™':'™','ℵ':'ℵ','←':'←', + '↑':'↑','→':'→','↓':'↓', + '↔':'↔','↵':'↵','⇐':'⇐', + '⇑':'⇑','⇒':'⇒','⇓':'⇓', + '⇔':'⇔','∀':'∀','∂':'∂', + '∃':'∃','∅':'∅','∇':'∇', + '∈':'∈','∉':'∉','∋':'∋', + '∏':'∏','∑':'∑','−':'−', + '∗':'∗','√':'√','∝':'∝', + '∞':'∞','∠':'∠','∧':'∧', + '∨':'∨','∩':'∩','∪':'∪', + '∫':'∫','∴':'∴','∼':'∼', + '≅':'≅','≈':'≈','≠':'≠', + '≡':'≡','≤':'≤','≥':'≥', + '⊂':'⊂','⊃':'⊃','⊄':'⊄', + '⊆':'⊆','⊇':'⊇','⊕':'⊕', + '⊗':'⊗','⊥':'⊥','⋅':'⋅', + '⌈':'⌈','⌉':'⌉','⌊':'⌊', + '⌋':'⌋','⟨':'〈','⟩':'〉', + '◊':'◊','♠':'♠','♣':'♣', + '♥':'♥','♦':'♦'}; + + this.block_tags = ["a", "abbr", "acronym", "address", "area", "b", + "base", "bdo", "big", "blockquote", "body", "button", + "caption", "cite", "code", "col", "colgroup", "dd", "del", "div", + "dfn", "dl", "dt", "em", "fieldset", "form", "head", "h1", "h2", + "h3", "h4", "h5", "h6", "html", "i", "ins", + "kbd", "label", "legend", "li", "map", "noscript", + "object", "ol", "optgroup", "option", "p", "param", "pre", "q", + "samp", "script", "select", "small", "span", "strong", "style", + "sub", "sup", "table", "tbody", "td", "textarea", "tfoot", "th", + "thead", "title", "tr", "tt", "ul", "var", "extends"]; + + + this.inline_tags = ["br", "hr", "img", "input"]; + + return this; +}; + +WYMeditor.XhtmlSaxListener.prototype.shouldCloseTagAutomatically = function(tag, now_on_tag, closing) +{ + var closing = closing || false; + if(tag == 'td'){ + if((closing && now_on_tag == 'tr') || (!closing && now_on_tag == 'td')){ + return true; + } + } + if(tag == 'option'){ + if((closing && now_on_tag == 'select') || (!closing && now_on_tag == 'option')){ + return true; + } + } + return false; +}; + +WYMeditor.XhtmlSaxListener.prototype.beforeParsing = function(raw) +{ + this.output = ''; + return raw; +}; + +WYMeditor.XhtmlSaxListener.prototype.afterParsing = function(xhtml) +{ + xhtml = this.replaceNamedEntities(xhtml); + xhtml = this.joinRepeatedEntities(xhtml); + xhtml = this.removeEmptyTags(xhtml); + xhtml = this.removeBrInPre(xhtml); + return xhtml; +}; + +WYMeditor.XhtmlSaxListener.prototype.replaceNamedEntities = function(xhtml) +{ + for (var entity in this.entities) { + xhtml = xhtml.replace(new RegExp(entity, 'g'), this.entities[entity]); + } + return xhtml; +}; + +WYMeditor.XhtmlSaxListener.prototype.joinRepeatedEntities = function(xhtml) +{ + var tags = 'em|strong|sub|sup|acronym|pre|del|address'; + return xhtml.replace(new RegExp('<\/('+tags+')><\\1>' ,''),''). + replace(new RegExp('(\s*<('+tags+')>\s*){2}(.*)(\s*<\/\\2>\s*){2}' ,''),'<\$2>\$3<\$2>'); +}; + +WYMeditor.XhtmlSaxListener.prototype.removeEmptyTags = function(xhtml) +{ + return xhtml.replace(new RegExp('<('+this.block_tags.join("|").replace(/\|td/,'').replace(/\|th/, '')+')>(<br \/>| | |\\s)*<\/\\1>' ,'g'),''); +}; + +WYMeditor.XhtmlSaxListener.prototype.removeBrInPre = function(xhtml) +{ + var matches = xhtml.match(new RegExp('<pre[^>]*>(.*?)<\/pre>','gmi')); + if(matches) { + for(var i=0; i<matches.length; i++) { + xhtml = xhtml.replace(matches[i], matches[i].replace(new RegExp('<br \/>', 'g'), String.fromCharCode(13,10))); + } + } + return xhtml; +}; + +WYMeditor.XhtmlSaxListener.prototype.getResult = function() +{ + return this.output; +}; + +WYMeditor.XhtmlSaxListener.prototype.getTagReplacements = function() +{ + return {'b':'strong', 'i':'em'}; +}; + +WYMeditor.XhtmlSaxListener.prototype.addContent = function(text) +{ + this.output += text; +}; + +WYMeditor.XhtmlSaxListener.prototype.addComment = function(text) +{ + if(this.remove_comments){ + this.output += text; + } +}; + +WYMeditor.XhtmlSaxListener.prototype.addScript = function(text) +{ + if(!this.remove_scripts){ + this.output += text; + } +}; + +WYMeditor.XhtmlSaxListener.prototype.addCss = function(text) +{ + if(!this.remove_embeded_styles){ + this.output += text; + } +}; + +WYMeditor.XhtmlSaxListener.prototype.openBlockTag = function(tag, attributes) +{ + this.output += this.helper.tag(tag, this.validator.getValidTagAttributes(tag, attributes), true); +}; + +WYMeditor.XhtmlSaxListener.prototype.inlineTag = function(tag, attributes) +{ + this.output += this.helper.tag(tag, this.validator.getValidTagAttributes(tag, attributes)); +}; + +WYMeditor.XhtmlSaxListener.prototype.openUnknownTag = function(tag, attributes) +{ + //this.output += this.helper.tag(tag, attributes, true); +}; + +WYMeditor.XhtmlSaxListener.prototype.closeBlockTag = function(tag) +{ + this.output = this.output.replace(/<br \/>$/, '')+this._getClosingTagContent('before', tag)+"</"+tag+">"+this._getClosingTagContent('after', tag); +}; + +WYMeditor.XhtmlSaxListener.prototype.closeUnknownTag = function(tag) +{ + //this.output += "</"+tag+">"; +}; + +WYMeditor.XhtmlSaxListener.prototype.closeUnopenedTag = function(tag) +{ + this.output += "</"+tag+">"; +}; + +WYMeditor.XhtmlSaxListener.prototype.avoidStylingTagsAndAttributes = function() +{ + this.avoided_tags = ['div','span']; + this.validator.skiped_attributes = ['style']; + this.validator.skiped_attribute_values = ['MsoNormal','main1']; // MS Word attributes for class + this._avoiding_tags_implicitly = true; +}; + +WYMeditor.XhtmlSaxListener.prototype.allowStylingTagsAndAttributes = function() +{ + this.avoided_tags = []; + this.validator.skiped_attributes = []; + this.validator.skiped_attribute_values = []; + this._avoiding_tags_implicitly = false; +}; + +WYMeditor.XhtmlSaxListener.prototype.isBlockTag = function(tag) +{ + return !WYMeditor.Helper.contains(this.avoided_tags, tag) && WYMeditor.Helper.contains(this.block_tags, tag); +}; + +WYMeditor.XhtmlSaxListener.prototype.isInlineTag = function(tag) +{ + return !WYMeditor.Helper.contains(this.avoided_tags, tag) && WYMeditor.Helper.contains(this.inline_tags, tag); +}; + +WYMeditor.XhtmlSaxListener.prototype.insertContentAfterClosingTag = function(tag, content) +{ + this._insertContentWhenClosingTag('after', tag, content); +}; + +WYMeditor.XhtmlSaxListener.prototype.insertContentBeforeClosingTag = function(tag, content) +{ + this._insertContentWhenClosingTag('before', tag, content); +}; + +WYMeditor.XhtmlSaxListener.prototype.fixNestingBeforeOpeningBlockTag = function(tag, attributes) +{ + if(tag != 'li' && (tag == 'ul' || tag == 'ol') && this.last_tag && !this.last_tag_opened && this.last_tag == 'li'){ + this.output = this.output.replace(/<\/li>$/, ''); + this.insertContentAfterClosingTag(tag, '</li>'); + } +}; + +WYMeditor.XhtmlSaxListener.prototype._insertContentWhenClosingTag = function(position, tag, content) +{ + if(!this['_insert_'+position+'_closing']){ + this['_insert_'+position+'_closing'] = []; + } + if(!this['_insert_'+position+'_closing'][tag]){ + this['_insert_'+position+'_closing'][tag] = []; + } + this['_insert_'+position+'_closing'][tag].push(content); +}; + +WYMeditor.XhtmlSaxListener.prototype._getClosingTagContent = function(position, tag) +{ + if( this['_insert_'+position+'_closing'] && + this['_insert_'+position+'_closing'][tag] && + this['_insert_'+position+'_closing'][tag].length > 0){ + return this['_insert_'+position+'_closing'][tag].pop(); + } + return ''; +}; + + +/********** CSS PARSER **********/ + + +WYMeditor.WymCssLexer = function(parser, only_wym_blocks) +{ + var only_wym_blocks = (typeof only_wym_blocks == 'undefined' ? true : only_wym_blocks); + + jQuery.extend(this, new WYMeditor.Lexer(parser, (only_wym_blocks?'Ignore':'WymCss'))); + + this.mapHandler('WymCss', 'Ignore'); + + if(only_wym_blocks == true){ + this.addEntryPattern("/\\\x2a[<\\s]*WYMeditor[>\\s]*\\\x2a/", 'Ignore', 'WymCss'); + this.addExitPattern("/\\\x2a[<\/\\s]*WYMeditor[>\\s]*\\\x2a/", 'WymCss'); + } + + this.addSpecialPattern("[\\sa-z1-6]*\\\x2e[a-z-_0-9]+", 'WymCss', 'WymCssStyleDeclaration'); + + this.addEntryPattern("/\\\x2a", 'WymCss', 'WymCssComment'); + this.addExitPattern("\\\x2a/", 'WymCssComment'); + + this.addEntryPattern("\x7b", 'WymCss', 'WymCssStyle'); + this.addExitPattern("\x7d", 'WymCssStyle'); + + this.addEntryPattern("/\\\x2a", 'WymCssStyle', 'WymCssFeedbackStyle'); + this.addExitPattern("\\\x2a/", 'WymCssFeedbackStyle'); + + return this; +}; + +WYMeditor.WymCssParser = function() +{ + this._in_style = false; + this._has_title = false; + this.only_wym_blocks = true; + this.css_settings = {'classesItems':[], 'editorStyles':[], 'dialogStyles':[]}; + return this; +}; + +WYMeditor.WymCssParser.prototype.parse = function(raw, only_wym_blocks) +{ + var only_wym_blocks = (typeof only_wym_blocks == 'undefined' ? this.only_wym_blocks : only_wym_blocks); + this._Lexer = new WYMeditor.WymCssLexer(this, only_wym_blocks); + this._Lexer.parse(raw); +}; + +WYMeditor.WymCssParser.prototype.Ignore = function(match, state) +{ + return true; +}; + +WYMeditor.WymCssParser.prototype.WymCssComment = function(text, status) +{ + if(text.match(/end[a-z0-9\s]*wym[a-z0-9\s]*/mi)){ + return false; + } + if(status == WYMeditor.LEXER_UNMATCHED){ + if(!this._in_style){ + this._has_title = true; + this._current_item = {'title':WYMeditor.Helper.trim(text)}; + }else{ + if(this._current_item[this._current_element]){ + if(!this._current_item[this._current_element].expressions){ + this._current_item[this._current_element].expressions = [text]; + }else{ + this._current_item[this._current_element].expressions.push(text); + } + } + } + this._in_style = true; + } + return true; +}; + +WYMeditor.WymCssParser.prototype.WymCssStyle = function(match, status) +{ + if(status == WYMeditor.LEXER_UNMATCHED){ + match = WYMeditor.Helper.trim(match); + if(match != ''){ + this._current_item[this._current_element].style = match; + } + }else if (status == WYMeditor.LEXER_EXIT){ + this._in_style = false; + this._has_title = false; + this.addStyleSetting(this._current_item); + } + return true; +}; + +WYMeditor.WymCssParser.prototype.WymCssFeedbackStyle = function(match, status) +{ + if(status == WYMeditor.LEXER_UNMATCHED){ + this._current_item[this._current_element].feedback_style = match.replace(/^([\s\/\*]*)|([\s\/\*]*)$/gm,''); + } + return true; +}; + +WYMeditor.WymCssParser.prototype.WymCssStyleDeclaration = function(match) +{ + match = match.replace(/^([\s\.]*)|([\s\.*]*)$/gm, ''); + + var tag = ''; + if(match.indexOf('.') > 0){ + var parts = match.split('.'); + this._current_element = parts[1]; + var tag = parts[0]; + }else{ + this._current_element = match; + } + + if(!this._has_title){ + this._current_item = {'title':(!tag?'':tag.toUpperCase()+': ')+this._current_element}; + this._has_title = true; + } + + if(!this._current_item[this._current_element]){ + this._current_item[this._current_element] = {'name':this._current_element}; + } + if(tag){ + if(!this._current_item[this._current_element].tags){ + this._current_item[this._current_element].tags = [tag]; + }else{ + this._current_item[this._current_element].tags.push(tag); + } + } + return true; +}; + +WYMeditor.WymCssParser.prototype.addStyleSetting = function(style_details) +{ + for (var name in style_details){ + var details = style_details[name]; + if(typeof details == 'object' && name != 'title'){ + + this.css_settings.classesItems.push({ + 'name': WYMeditor.Helper.trim(details.name), + 'title': style_details.title, + 'expr' : WYMeditor.Helper.trim((details.expressions||details.tags).join(', ')) + }); + if(details.feedback_style){ + this.css_settings.editorStyles.push({ + 'name': '.'+ WYMeditor.Helper.trim(details.name), + 'css': details.feedback_style + }); + } + if(details.style){ + this.css_settings.dialogStyles.push({ + 'name': '.'+ WYMeditor.Helper.trim(details.name), + 'css': details.style + }); + } + } + } +}; + +/********** HELPERS **********/ + +// Returns true if it is a text node with whitespaces only +jQuery.fn.isPhantomNode = function() { + if (this[0].nodeType == 3) + return !(/[^\t\n\r ]/.test(this[0].data)); + + return false; +}; + +WYMeditor.isPhantomNode = function(n) { + if (n.nodeType == 3) + return !(/[^\t\n\r ]/.test(n.data)); + + return false; +}; + +WYMeditor.isPhantomString = function(str) { + return !(/[^\t\n\r ]/.test(str)); +}; + +// Returns the Parents or the node itself +// jqexpr = a jQuery expression +jQuery.fn.parentsOrSelf = function(jqexpr) { + var n = this; + + if (n[0].nodeType == 3) + n = n.parents().slice(0,1); + +// if (n.is(jqexpr)) // XXX should work, but doesn't (probably a jQuery bug) + if (n.filter(jqexpr).size() == 1) + return n; + else + return n.parents(jqexpr).slice(0,1); +}; + +// String & array helpers + +WYMeditor.Helper = { + + //replace all instances of 'old' by 'rep' in 'str' string + replaceAll: function(str, old, rep) { + var rExp = new RegExp(old, "g"); + return(str.replace(rExp, rep)); + }, + + //insert 'inserted' at position 'pos' in 'str' string + insertAt: function(str, inserted, pos) { + return(str.substr(0,pos) + inserted + str.substring(pos)); + }, + + //trim 'str' string + trim: function(str) { + return str.replace(/^(\s*)|(\s*)$/gm,''); + }, + + //return true if 'arr' array contains 'elem', or false + contains: function(arr, elem) { + for (var i = 0; i < arr.length; i++) { + if (arr[i] === elem) return true; + } + return false; + }, + + //return 'item' position in 'arr' array, or -1 + indexOf: function(arr, item) { + var ret=-1; + for(var i = 0; i < arr.length; i++) { + if (arr[i] == item) { + ret = i; + break; + } + } + return(ret); + }, + + //return 'item' object in 'arr' array, checking its 'name' property, or null + findByName: function(arr, name) { + for(var i = 0; i < arr.length; i++) { + var item = arr[i]; + if(item.name == name) return(item); + } + return(null); + } +}; + + +/* + * WYMeditor : what you see is What You Mean web-based editor + * Copyright (c) 2005 - 2009 Jean-Francois Hovinne, http://www.wymeditor.org/ + * Dual licensed under the MIT (MIT-license.txt) + * and GPL (GPL-license.txt) licenses. + * + * For further information visit: + * http://www.wymeditor.org/ + * + * File Name: + * jquery.wymeditor.explorer.js + * MSIE specific class and functions. + * See the documentation for more info. + * + * File Authors: + * Jean-Francois Hovinne (jf.hovinne a-t wymeditor dotorg) + * Bermi Ferrer (wymeditor a-t bermi dotorg) + * Frédéric Palluel-Lafleur (fpalluel a-t gmail dotcom) + * Jonatan Lundin (jonatan.lundin a-t gmail dotcom) + */ + +WYMeditor.WymClassExplorer = function(wym) { + + this._wym = wym; + this._class = "className"; + this._newLine = "\r\n"; + +}; + +WYMeditor.WymClassExplorer.prototype.initIframe = function(iframe) { + + //This function is executed twice, though it is called once! + //But MSIE needs that, otherwise designMode won't work. + //Weird. + + this._iframe = iframe; + this._doc = iframe.contentWindow.document; + + //add css rules from options + var styles = this._doc.styleSheets[0]; + var aCss = eval(this._options.editorStyles); + + this.addCssRules(this._doc, aCss); + + this._doc.title = this._wym._index; + + //set the text direction + jQuery('html', this._doc).attr('dir', this._options.direction); + + //init html value + jQuery(this._doc.body).html(this._wym._html); + + //handle events + var wym = this; + + this._doc.body.onfocus = function() + {wym._doc.designMode = "on"; wym._doc = iframe.contentWindow.document;}; + this._doc.onbeforedeactivate = function() {wym.saveCaret();}; + this._doc.onkeyup = function() { + wym.saveCaret(); + wym.keyup(); + }; + this._doc.onclick = function() {wym.saveCaret();}; + + this._doc.body.onbeforepaste = function() { + wym._iframe.contentWindow.event.returnValue = false; + }; + + this._doc.body.onpaste = function() { + wym._iframe.contentWindow.event.returnValue = false; + wym.paste(window.clipboardData.getData("Text")); + }; + + //callback can't be executed twice, so we check + if(this._initialized) { + + //pre-bind functions + if(jQuery.isFunction(this._options.preBind)) this._options.preBind(this); + + //bind external events + this._wym.bindEvents(); + + //post-init functions + if(jQuery.isFunction(this._options.postInit)) this._options.postInit(this); + + //add event listeners to doc elements, e.g. images + this.listen(); + } + + this._initialized = true; + + //init designMode + this._doc.designMode="on"; + try{ + // (bermi's note) noticed when running unit tests on IE6 + // Is this really needed, it trigger an unexisting property on IE6 + this._doc = iframe.contentWindow.document; + }catch(e){} +}; + +WYMeditor.WymClassExplorer.prototype._exec = function(cmd,param) { + + switch(cmd) { + + case WYMeditor.INDENT: case WYMeditor.OUTDENT: + + var container = this.findUp(this.container(), WYMeditor.LI); + if(container) { + var ancestor = container.parentNode.parentNode; + if(container.parentNode.childNodes.length>1 + || ancestor.tagName.toLowerCase() == WYMeditor.OL + || ancestor.tagName.toLowerCase() == WYMeditor.UL) + this._doc.execCommand(cmd); + } + break; + default: + if(param) this._doc.execCommand(cmd,false,param); + else this._doc.execCommand(cmd); + break; + } + +}; + +WYMeditor.WymClassExplorer.prototype.selected = function() { + + var caretPos = this._iframe.contentWindow.document.caretPos; + if(caretPos!=null) { + if(caretPos.parentElement!=undefined) + return(caretPos.parentElement()); + } +}; + +WYMeditor.WymClassExplorer.prototype.saveCaret = function() { + + this._doc.caretPos = this._doc.selection.createRange(); +}; + +WYMeditor.WymClassExplorer.prototype.addCssRule = function(styles, oCss) { + + styles.addRule(oCss.name, oCss.css); +}; + +WYMeditor.WymClassExplorer.prototype.insert = function(html) { + + // Get the current selection + var range = this._doc.selection.createRange(); + + // Check if the current selection is inside the editor + if ( jQuery(range.parentElement()).parents( this._options.iframeBodySelector ).is('*') ) { + try { + // Overwrite selection with provided html + range.pasteHTML(html); + } catch (e) { } + } else { + // Fall back to the internal paste function if there's no selection + this.paste(html); + } +}; + +WYMeditor.WymClassExplorer.prototype.wrap = function(left, right) { + + // Get the current selection + var range = this._doc.selection.createRange(); + + // Check if the current selection is inside the editor + if ( jQuery(range.parentElement()).parents( this._options.iframeBodySelector ).is('*') ) { + try { + // Overwrite selection with provided html + range.pasteHTML(left + range.text + right); + } catch (e) { } + } +}; + +WYMeditor.WymClassExplorer.prototype.unwrap = function() { + + // Get the current selection + var range = this._doc.selection.createRange(); + + // Check if the current selection is inside the editor + if ( jQuery(range.parentElement()).parents( this._options.iframeBodySelector ).is('*') ) { + try { + // Unwrap selection + var text = range.text; + this._exec( 'Cut' ); + range.pasteHTML( text ); + } catch (e) { } + } +}; + +//keyup handler +WYMeditor.WymClassExplorer.prototype.keyup = function() { + this._selected_image = null; +}; + +WYMeditor.WymClassExplorer.prototype.setFocusToNode = function(node, toStart) { + var range = this._doc.selection.createRange(); + toStart = toStart ? true : false; + + range.moveToElementText(node); + range.collapse(toStart); + range.select(); + node.focus(); +}; + +/* + * WYMeditor : what you see is What You Mean web-based editor + * Copyright (c) 2005 - 2009 Jean-Francois Hovinne, http://www.wymeditor.org/ + * Dual licensed under the MIT (MIT-license.txt) + * and GPL (GPL-license.txt) licenses. + * + * For further information visit: + * http://www.wymeditor.org/ + * + * File Name: + * jquery.wymeditor.mozilla.js + * Gecko specific class and functions. + * See the documentation for more info. + * + * File Authors: + * Jean-Francois Hovinne (jf.hovinne a-t wymeditor dotorg) + * Volker Mische (vmx a-t gmx dotde) + * Bermi Ferrer (wymeditor a-t bermi dotorg) + * Frédéric Palluel-Lafleur (fpalluel a-t gmail dotcom) + * Jonatan Lundin (jonatan.lundin a-t gmail dotcom) + */ + +WYMeditor.WymClassMozilla = function(wym) { + + this._wym = wym; + this._class = "class"; + this._newLine = "\n"; +}; + +WYMeditor.WymClassMozilla.prototype.initIframe = function(iframe) { + var wym = this; + + this._iframe = iframe; + this._doc = iframe.contentDocument; + + //add css rules from options + + var styles = this._doc.styleSheets[0]; + var aCss = eval(this._options.editorStyles); + + this.addCssRules(this._doc, aCss); + + this._doc.title = this._wym._index; + + //set the text direction + jQuery('html', this._doc).attr('dir', this._options.direction); + + //init html value + this.html(this._wym._html); + + //init designMode + this.enableDesignMode(); + + //pre-bind functions + if(jQuery.isFunction(this._options.preBind)) this._options.preBind(this); + + //bind external events + this._wym.bindEvents(); + + //bind editor keydown events + jQuery(this._doc).bind("keydown", this.keydown); + + //bind editor keyup events + jQuery(this._doc).bind("keyup", this.keyup); + + //bind editor focus events (used to reset designmode - Gecko bug) + jQuery(this._doc).bind("focus", function () { + // Fix scope + wym.enableDesignMode.call(wym); + }); + + //post-init functions + if(jQuery.isFunction(this._options.postInit)) this._options.postInit(this); + + //add event listeners to doc elements, e.g. images + this.listen(); +}; + +/* @name html + * @description Get/Set the html value + */ +WYMeditor.WymClassMozilla.prototype.html = function(html) { + + if(typeof html === 'string') { + + //disable designMode + try { this._doc.designMode = "off"; } catch(e) { }; + + //replace em by i and strong by bold + //(designMode issue) + html = html.replace(/<em(\b[^>]*)>/gi, "<i$1>") + .replace(/<\/em>/gi, "</i>") + .replace(/<strong(\b[^>]*)>/gi, "<b$1>") + .replace(/<\/strong>/gi, "</b>"); + + //update the html body + jQuery(this._doc.body).html(html); + + //re-init designMode + this.enableDesignMode(); + } + else return(jQuery(this._doc.body).html()); +}; + +WYMeditor.WymClassMozilla.prototype._exec = function(cmd,param) { + + if(!this.selected()) return(false); + + switch(cmd) { + + case WYMeditor.INDENT: case WYMeditor.OUTDENT: + + var focusNode = this.selected(); + var sel = this._iframe.contentWindow.getSelection(); + var anchorNode = sel.anchorNode; + if(anchorNode.nodeName == "#text") anchorNode = anchorNode.parentNode; + + focusNode = this.findUp(focusNode, WYMeditor.BLOCKS); + anchorNode = this.findUp(anchorNode, WYMeditor.BLOCKS); + + if(focusNode && focusNode == anchorNode + && focusNode.tagName.toLowerCase() == WYMeditor.LI) { + + var ancestor = focusNode.parentNode.parentNode; + + if(focusNode.parentNode.childNodes.length>1 + || ancestor.tagName.toLowerCase() == WYMeditor.OL + || ancestor.tagName.toLowerCase() == WYMeditor.UL) + this._doc.execCommand(cmd,'',null); + } + + break; + + default: + + if(param) this._doc.execCommand(cmd,'',param); + else this._doc.execCommand(cmd,'',null); + } + + //set to P if parent = BODY + var container = this.selected(); + if(container.tagName.toLowerCase() == WYMeditor.BODY) + this._exec(WYMeditor.FORMAT_BLOCK, WYMeditor.P); +}; + +/* @name selected + * @description Returns the selected container + */ +WYMeditor.WymClassMozilla.prototype.selected = function() { + + var sel = this._iframe.contentWindow.getSelection(); + var node = sel.focusNode; + if(node) { + if(node.nodeName == "#text") return(node.parentNode); + else return(node); + } else return(null); +}; + +WYMeditor.WymClassMozilla.prototype.addCssRule = function(styles, oCss) { + + styles.insertRule(oCss.name + " {" + oCss.css + "}", + styles.cssRules.length); +}; + + +//keydown handler, mainly used for keyboard shortcuts +WYMeditor.WymClassMozilla.prototype.keydown = function(evt) { + + //'this' is the doc + var wym = WYMeditor.INSTANCES[this.title]; + var container = null; + + if(evt.ctrlKey){ + if(evt.keyCode == 66){ + //CTRL+b => STRONG + wym._exec(WYMeditor.BOLD); + return false; + } + if(evt.keyCode == 73){ + //CTRL+i => EMPHASIS + wym._exec(WYMeditor.ITALIC); + return false; + } + } + + else if(evt.keyCode == 13) { + if(!evt.shiftKey){ + //fix PRE bug #73 + container = wym.selected(); + if(container && container.tagName.toLowerCase() == WYMeditor.PRE) { + evt.preventDefault(); + wym.insert('<p></p>'); + } + } + } +}; + +//keyup handler, mainly used for cleanups +WYMeditor.WymClassMozilla.prototype.keyup = function(evt) { + + //'this' is the doc + var wym = WYMeditor.INSTANCES[this.title]; + + wym._selected_image = null; + var container = null; + + if(evt.keyCode == 13 && !evt.shiftKey) { + + //RETURN key + //cleanup <br><br> between paragraphs + jQuery(wym._doc.body).children(WYMeditor.BR).remove(); + } + + if(evt.keyCode != 8 + && evt.keyCode != 17 + && evt.keyCode != 46 + && evt.keyCode != 224 + && !evt.metaKey + && !evt.ctrlKey) { + + //NOT BACKSPACE, NOT DELETE, NOT CTRL, NOT COMMAND + //text nodes replaced by P + + container = wym.selected(); + var name = container.tagName.toLowerCase(); + + //fix forbidden main containers + if( + name == "strong" || + name == "b" || + name == "em" || + name == "i" || + name == "sub" || + name == "sup" || + name == "a" + + ) name = container.parentNode.tagName.toLowerCase(); + + if(name == WYMeditor.BODY) wym._exec(WYMeditor.FORMAT_BLOCK, WYMeditor.P); + } +}; + +WYMeditor.WymClassMozilla.prototype.enableDesignMode = function() { + if(this._doc.designMode == "off") { + try { + this._doc.designMode = "on"; + this._doc.execCommand("styleWithCSS", '', false); + } catch(e) { } + } +}; + +WYMeditor.WymClassMozilla.prototype.openBlockTag = function(tag, attributes) +{ + var attributes = this.validator.getValidTagAttributes(tag, attributes); + + // Handle Mozilla styled spans + if(tag == 'span' && attributes.style){ + var new_tag = this.getTagForStyle(attributes.style); + if(new_tag){ + this._tag_stack.pop(); + var tag = new_tag; + this._tag_stack.push(new_tag); + attributes.style = ''; + }else{ + return; + } + } + + this.output += this.helper.tag(tag, attributes, true); +}; + +WYMeditor.WymClassMozilla.prototype.getTagForStyle = function(style) { + + if(/bold/.test(style)) return 'strong'; + if(/italic/.test(style)) return 'em'; + if(/sub/.test(style)) return 'sub'; + if(/super/.test(style)) return 'sup'; + return false; +}; + +/* + * WYMeditor : what you see is What You Mean web-based editor + * Copyright (c) 2005 - 2009 Jean-Francois Hovinne, http://www.wymeditor.org/ + * Dual licensed under the MIT (MIT-license.txt) + * and GPL (GPL-license.txt) licenses. + * + * For further information visit: + * http://www.wymeditor.org/ + * + * File Name: + * jquery.wymeditor.opera.js + * Opera specific class and functions. + * See the documentation for more info. + * + * File Authors: + * Jean-Francois Hovinne (jf.hovinne a-t wymeditor dotorg) + */ + +WYMeditor.WymClassOpera = function(wym) { + + this._wym = wym; + this._class = "class"; + this._newLine = "\r\n"; +}; + +WYMeditor.WymClassOpera.prototype.initIframe = function(iframe) { + + this._iframe = iframe; + this._doc = iframe.contentWindow.document; + + //add css rules from options + var styles = this._doc.styleSheets[0]; + var aCss = eval(this._options.editorStyles); + + this.addCssRules(this._doc, aCss); + + this._doc.title = this._wym._index; + + //set the text direction + jQuery('html', this._doc).attr('dir', this._options.direction); + + //init designMode + this._doc.designMode = "on"; + + //init html value + this.html(this._wym._html); + + //pre-bind functions + if(jQuery.isFunction(this._options.preBind)) this._options.preBind(this); + + //bind external events + this._wym.bindEvents(); + + //bind editor keydown events + jQuery(this._doc).bind("keydown", this.keydown); + + //bind editor events + jQuery(this._doc).bind("keyup", this.keyup); + + //post-init functions + if(jQuery.isFunction(this._options.postInit)) this._options.postInit(this); + + //add event listeners to doc elements, e.g. images + this.listen(); +}; + +WYMeditor.WymClassOpera.prototype._exec = function(cmd,param) { + + if(param) this._doc.execCommand(cmd,false,param); + else this._doc.execCommand(cmd); + +}; + +WYMeditor.WymClassOpera.prototype.selected = function() { + + var sel=this._iframe.contentWindow.getSelection(); + var node=sel.focusNode; + if(node) { + if(node.nodeName=="#text")return(node.parentNode); + else return(node); + } else return(null); +}; + +WYMeditor.WymClassOpera.prototype.addCssRule = function(styles, oCss) { + + styles.insertRule(oCss.name + " {" + oCss.css + "}", + styles.cssRules.length); +}; + +//keydown handler +WYMeditor.WymClassOpera.prototype.keydown = function(evt) { + + //'this' is the doc + var wym = WYMeditor.INSTANCES[this.title]; + var sel = wym._iframe.contentWindow.getSelection(); + startNode = sel.getRangeAt(0).startContainer; + + //Get a P instead of no container + if(!jQuery(startNode).parentsOrSelf( + WYMeditor.MAIN_CONTAINERS.join(","))[0] + && !jQuery(startNode).parentsOrSelf('li') + && evt.keyCode != WYMeditor.KEY.ENTER + && evt.keyCode != WYMeditor.KEY.LEFT + && evt.keyCode != WYMeditor.KEY.UP + && evt.keyCode != WYMeditor.KEY.RIGHT + && evt.keyCode != WYMeditor.KEY.DOWN + && evt.keyCode != WYMeditor.KEY.BACKSPACE + && evt.keyCode != WYMeditor.KEY.DELETE) + wym._exec(WYMeditor.FORMAT_BLOCK, WYMeditor.P); + +}; + +//keyup handler +WYMeditor.WymClassOpera.prototype.keyup = function(evt) { + + //'this' is the doc + var wym = WYMeditor.INSTANCES[this.title]; + wym._selected_image = null; +}; +/* + * WYMeditor : what you see is What You Mean web-based editor + * Copyright (c) 2005 - 2009 Jean-Francois Hovinne, http://www.wymeditor.org/ + * Dual licensed under the MIT (MIT-license.txt) + * and GPL (GPL-license.txt) licenses. + * + * For further information visit: + * http://www.wymeditor.org/ + * + * File Name: + * jquery.wymeditor.safari.js + * Safari specific class and functions. + * See the documentation for more info. + * + * File Authors: + * Jean-Francois Hovinne (jf.hovinne a-t wymeditor dotorg) + * Scott Lewis (lewiscot a-t gmail dotcom) + */ + +WYMeditor.WymClassSafari = function(wym) { + + this._wym = wym; + this._class = "class"; + this._newLine = "\n"; +}; + +WYMeditor.WymClassSafari.prototype.initIframe = function(iframe) { + + this._iframe = iframe; + this._doc = iframe.contentDocument; + + //add css rules from options + + var styles = this._doc.styleSheets[0]; + var aCss = eval(this._options.editorStyles); + + this.addCssRules(this._doc, aCss); + + this._doc.title = this._wym._index; + + //set the text direction + jQuery('html', this._doc).attr('dir', this._options.direction); + + //init designMode + this._doc.designMode = "on"; + + //init html value + this.html(this._wym._html); + + //pre-bind functions + if(jQuery.isFunction(this._options.preBind)) this._options.preBind(this); + + //bind external events + this._wym.bindEvents(); + + //bind editor keydown events + jQuery(this._doc).bind("keydown", this.keydown); + + //bind editor keyup events + jQuery(this._doc).bind("keyup", this.keyup); + + //post-init functions + if(jQuery.isFunction(this._options.postInit)) this._options.postInit(this); + + //add event listeners to doc elements, e.g. images + this.listen(); +}; + +WYMeditor.WymClassSafari.prototype._exec = function(cmd,param) { + + if(!this.selected()) return(false); + + switch(cmd) { + + case WYMeditor.INDENT: case WYMeditor.OUTDENT: + + var focusNode = this.selected(); + var sel = this._iframe.contentWindow.getSelection(); + var anchorNode = sel.anchorNode; + if(anchorNode.nodeName == "#text") anchorNode = anchorNode.parentNode; + + focusNode = this.findUp(focusNode, WYMeditor.BLOCKS); + anchorNode = this.findUp(anchorNode, WYMeditor.BLOCKS); + + if(focusNode && focusNode == anchorNode + && focusNode.tagName.toLowerCase() == WYMeditor.LI) { + + var ancestor = focusNode.parentNode.parentNode; + + if(focusNode.parentNode.childNodes.length>1 + || ancestor.tagName.toLowerCase() == WYMeditor.OL + || ancestor.tagName.toLowerCase() == WYMeditor.UL) + this._doc.execCommand(cmd,'',null); + } + + break; + + case WYMeditor.INSERT_ORDEREDLIST: case WYMeditor.INSERT_UNORDEREDLIST: + + this._doc.execCommand(cmd,'',null); + + //Safari creates lists in e.g. paragraphs. + //Find the container, and remove it. + var focusNode = this.selected(); + var container = this.findUp(focusNode, WYMeditor.MAIN_CONTAINERS); + if(container) jQuery(container).replaceWith(jQuery(container).html()); + + break; + + default: + + if(param) this._doc.execCommand(cmd,'',param); + else this._doc.execCommand(cmd,'',null); + } + + //set to P if parent = BODY + var container = this.selected(); + if(container && container.tagName.toLowerCase() == WYMeditor.BODY) + this._exec(WYMeditor.FORMAT_BLOCK, WYMeditor.P); + +}; + +/* @name selected + * @description Returns the selected container + */ +WYMeditor.WymClassSafari.prototype.selected = function() { + + var sel = this._iframe.contentWindow.getSelection(); + var node = sel.focusNode; + if(node) { + if(node.nodeName == "#text") return(node.parentNode); + else return(node); + } else return(null); +}; + +WYMeditor.WymClassSafari.prototype.addCssRule = function(styles, oCss) { + + styles.insertRule(oCss.name + " {" + oCss.css + "}", + styles.cssRules.length); +}; + + +//keydown handler, mainly used for keyboard shortcuts +WYMeditor.WymClassSafari.prototype.keydown = function(evt) { + + //'this' is the doc + var wym = WYMeditor.INSTANCES[this.title]; + + if(evt.ctrlKey){ + if(evt.keyCode == 66){ + //CTRL+b => STRONG + wym._exec(WYMeditor.BOLD); + return false; + } + if(evt.keyCode == 73){ + //CTRL+i => EMPHASIS + wym._exec(WYMeditor.ITALIC); + return false; + } + } +}; + +//keyup handler, mainly used for cleanups +WYMeditor.WymClassSafari.prototype.keyup = function(evt) { + + //'this' is the doc + var wym = WYMeditor.INSTANCES[this.title]; + + wym._selected_image = null; + var container = null; + + if(evt.keyCode == 13 && !evt.shiftKey) { + + //RETURN key + //cleanup <br><br> between paragraphs + jQuery(wym._doc.body).children(WYMeditor.BR).remove(); + + //fix PRE bug #73 + container = wym.selected(); + if(container && container.tagName.toLowerCase() == WYMeditor.PRE) + wym._exec(WYMeditor.FORMAT_BLOCK, WYMeditor.P); //create P after PRE + } + + //fix #112 + if(evt.keyCode == 13 && evt.shiftKey) { + wym._exec('InsertLineBreak'); + } + + if(evt.keyCode != 8 + && evt.keyCode != 17 + && evt.keyCode != 46 + && evt.keyCode != 224 + && !evt.metaKey + && !evt.ctrlKey) { + + //NOT BACKSPACE, NOT DELETE, NOT CTRL, NOT COMMAND + //text nodes replaced by P + + container = wym.selected(); + var name = container.tagName.toLowerCase(); + + //fix forbidden main containers + if( + name == "strong" || + name == "b" || + name == "em" || + name == "i" || + name == "sub" || + name == "sup" || + name == "a" || + name == "span" //fix #110 + + ) name = container.parentNode.tagName.toLowerCase(); + + if(name == WYMeditor.BODY || name == WYMeditor.DIV) wym._exec(WYMeditor.FORMAT_BLOCK, WYMeditor.P); //fix #110 for DIV + } +}; + +WYMeditor.WymClassSafari.prototype.openBlockTag = function(tag, attributes) +{ + var attributes = this.validator.getValidTagAttributes(tag, attributes); + + // Handle Safari styled spans + if(tag == 'span' && attributes.style) { + var new_tag = this.getTagForStyle(attributes.style); + if(new_tag){ + this._tag_stack.pop(); + var tag = new_tag; + this._tag_stack.push(new_tag); + attributes.style = ''; + + //should fix #125 - also removed the xhtml() override + if(typeof attributes['class'] == 'string') + attributes['class'] = attributes['class'].replace(/apple-style-span/gi, ''); + + } else { + return; + } + } + + this.output += this.helper.tag(tag, attributes, true); +}; + +WYMeditor.WymClassSafari.prototype.getTagForStyle = function(style) { + + if(/bold/.test(style)) return 'strong'; + if(/italic/.test(style)) return 'em'; + if(/sub/.test(style)) return 'sub'; + if(/super/.test(style)) return 'sup'; + return false; +}; diff --git a/gstudio/static/gstudio/js/wymeditor/jquery.wymeditor.min.js b/gstudio/static/gstudio/js/wymeditor/jquery.wymeditor.min.js new file mode 100644 index 00000000..a7f9018f --- /dev/null +++ b/gstudio/static/gstudio/js/wymeditor/jquery.wymeditor.min.js @@ -0,0 +1 @@ +if(!WYMeditor){var WYMeditor={}}(function(){if(!window.console||!console.firebug){var b=["log","debug","info","warn","error","assert","dir","dirxml","group","groupEnd","time","timeEnd","count","trace","profile","profileEnd"];WYMeditor.console={};for(var a=0;a<b.length;++a){WYMeditor.console[b[a]]=function(){}}}else{WYMeditor.console=window.console}})();jQuery.extend(WYMeditor,{VERSION:"0.5-rc1",INSTANCES:[],STRINGS:[],SKINS:[],NAME:"name",INDEX:"{Wym_Index}",WYM_INDEX:"wym_index",BASE_PATH:"{Wym_Base_Path}",CSS_PATH:"{Wym_Css_Path}",WYM_PATH:"{Wym_Wym_Path}",SKINS_DEFAULT_PATH:"skins/",SKINS_DEFAULT_CSS:"skin.css",SKINS_DEFAULT_JS:"skin.js",LANG_DEFAULT_PATH:"lang/",IFRAME_BASE_PATH:"{Wym_Iframe_Base_Path}",IFRAME_DEFAULT:"iframe/default/",JQUERY_PATH:"{Wym_Jquery_Path}",DIRECTION:"{Wym_Direction}",LOGO:"{Wym_Logo}",TOOLS:"{Wym_Tools}",TOOLS_ITEMS:"{Wym_Tools_Items}",TOOL_NAME:"{Wym_Tool_Name}",TOOL_TITLE:"{Wym_Tool_Title}",TOOL_CLASS:"{Wym_Tool_Class}",CLASSES:"{Wym_Classes}",CLASSES_ITEMS:"{Wym_Classes_Items}",CLASS_NAME:"{Wym_Class_Name}",CLASS_TITLE:"{Wym_Class_Title}",CONTAINERS:"{Wym_Containers}",CONTAINERS_ITEMS:"{Wym_Containers_Items}",CONTAINER_NAME:"{Wym_Container_Name}",CONTAINER_TITLE:"{Wym_Containers_Title}",CONTAINER_CLASS:"{Wym_Container_Class}",HTML:"{Wym_Html}",IFRAME:"{Wym_Iframe}",STATUS:"{Wym_Status}",DIALOG_TITLE:"{Wym_Dialog_Title}",DIALOG_BODY:"{Wym_Dialog_Body}",STRING:"string",BODY:"body",DIV:"div",P:"p",H1:"h1",H2:"h2",H3:"h3",H4:"h4",H5:"h5",H6:"h6",PRE:"pre",BLOCKQUOTE:"blockquote",A:"a",BR:"br",IMG:"img",TABLE:"table",TD:"td",TH:"th",UL:"ul",OL:"ol",LI:"li",CLASS:"class",HREF:"href",SRC:"src",TITLE:"title",ALT:"alt",DIALOG_LINK:"Link",DIALOG_IMAGE:"Image",DIALOG_TABLE:"Table",DIALOG_PASTE:"Paste_From_Word",BOLD:"Bold",ITALIC:"Italic",CREATE_LINK:"CreateLink",INSERT_IMAGE:"InsertImage",INSERT_TABLE:"InsertTable",INSERT_HTML:"InsertHTML",PASTE:"Paste",INDENT:"Indent",OUTDENT:"Outdent",TOGGLE_HTML:"ToggleHtml",FORMAT_BLOCK:"FormatBlock",PREVIEW:"Preview",UNLINK:"Unlink",INSERT_UNORDEREDLIST:"InsertUnorderedList",INSERT_ORDEREDLIST:"InsertOrderedList",MAIN_CONTAINERS:new Array("p","h1","h2","h3","h4","h5","h6","pre","blockquote"),BLOCKS:new Array("address","blockquote","div","dl","fieldset","form","h1","h2","h3","h4","h5","h6","hr","noscript","ol","p","pre","table","ul","dd","dt","li","tbody","td","tfoot","th","thead","tr"),KEY:{BACKSPACE:8,ENTER:13,END:35,HOME:36,LEFT:37,UP:38,RIGHT:39,DOWN:40,CURSOR:new Array(37,38,39,40),DELETE:46},NODE:{ELEMENT:1,ATTRIBUTE:2,TEXT:3},editor:function(b,a){this._index=WYMeditor.INSTANCES.push(this)-1;this._element=b;this._options=a;this._html=jQuery(b).val();if(this._options.html){this._html=this._options.html}this._options.basePath=this._options.basePath||this.computeBasePath();this._options.skinPath=this._options.skinPath||this._options.basePath+WYMeditor.SKINS_DEFAULT_PATH+this._options.skin+"/";this._options.wymPath=this._options.wymPath||this.computeWymPath();this._options.langPath=this._options.langPath||this._options.basePath+WYMeditor.LANG_DEFAULT_PATH;this._options.iframeBasePath=this._options.iframeBasePath||this._options.basePath+WYMeditor.IFRAME_DEFAULT;this._options.jQueryPath=this._options.jQueryPath||this.computeJqueryPath();this.init()}});jQuery.fn.wymeditor=function(a){a=jQuery.extend({html:"",basePath:false,skinPath:false,wymPath:false,iframeBasePath:false,jQueryPath:false,styles:false,stylesheet:false,skin:"default",initSkin:true,loadSkin:true,lang:"en",direction:"ltr",boxHtml:"<div class='wym_box'><div class='wym_area_top'>"+WYMeditor.TOOLS+"</div><div class='wym_area_left'></div><div class='wym_area_right'>"+WYMeditor.CONTAINERS+WYMeditor.CLASSES+"</div><div class='wym_area_main'>"+WYMeditor.HTML+WYMeditor.IFRAME+WYMeditor.STATUS+"</div><div class='wym_area_bottom'>"+WYMeditor.LOGO+"</div></div>",logoHtml:"<a class='wym_wymeditor_link' href='http://www.wymeditor.org/'>WYMeditor</a>",iframeHtml:"<div class='wym_iframe wym_section'><iframe src='"+WYMeditor.IFRAME_BASE_PATH+"wymiframe.html' onload='this.contentWindow.parent.WYMeditor.INSTANCES["+WYMeditor.INDEX+"].initIframe(this)'></iframe></div>",editorStyles:[],toolsHtml:"<div class='wym_tools wym_section'><h2>{Tools}</h2><ul>"+WYMeditor.TOOLS_ITEMS+"</ul></div>",toolsItemHtml:"<li class='"+WYMeditor.TOOL_CLASS+"'><a href='#' name='"+WYMeditor.TOOL_NAME+"' title='"+WYMeditor.TOOL_TITLE+"'>"+WYMeditor.TOOL_TITLE+"</a></li>",toolsItems:[{name:"Bold",title:"Strong",css:"wym_tools_strong"},{name:"Italic",title:"Emphasis",css:"wym_tools_emphasis"},{name:"Superscript",title:"Superscript",css:"wym_tools_superscript"},{name:"Subscript",title:"Subscript",css:"wym_tools_subscript"},{name:"InsertOrderedList",title:"Ordered_List",css:"wym_tools_ordered_list"},{name:"InsertUnorderedList",title:"Unordered_List",css:"wym_tools_unordered_list"},{name:"Indent",title:"Indent",css:"wym_tools_indent"},{name:"Outdent",title:"Outdent",css:"wym_tools_outdent"},{name:"Undo",title:"Undo",css:"wym_tools_undo"},{name:"Redo",title:"Redo",css:"wym_tools_redo"},{name:"CreateLink",title:"Link",css:"wym_tools_link"},{name:"Unlink",title:"Unlink",css:"wym_tools_unlink"},{name:"InsertImage",title:"Image",css:"wym_tools_image"},{name:"InsertTable",title:"Table",css:"wym_tools_table"},{name:"Paste",title:"Paste_From_Word",css:"wym_tools_paste"},{name:"ToggleHtml",title:"HTML",css:"wym_tools_html"},{name:"Preview",title:"Preview",css:"wym_tools_preview"}],containersHtml:"<div class='wym_containers wym_section'><h2>{Containers}</h2><ul>"+WYMeditor.CONTAINERS_ITEMS+"</ul></div>",containersItemHtml:"<li class='"+WYMeditor.CONTAINER_CLASS+"'><a href='#' name='"+WYMeditor.CONTAINER_NAME+"'>"+WYMeditor.CONTAINER_TITLE+"</a></li>",containersItems:[{name:"P",title:"Paragraph",css:"wym_containers_p"},{name:"H1",title:"Heading_1",css:"wym_containers_h1"},{name:"H2",title:"Heading_2",css:"wym_containers_h2"},{name:"H3",title:"Heading_3",css:"wym_containers_h3"},{name:"H4",title:"Heading_4",css:"wym_containers_h4"},{name:"H5",title:"Heading_5",css:"wym_containers_h5"},{name:"H6",title:"Heading_6",css:"wym_containers_h6"},{name:"PRE",title:"Preformatted",css:"wym_containers_pre"},{name:"BLOCKQUOTE",title:"Blockquote",css:"wym_containers_blockquote"},{name:"TH",title:"Table_Header",css:"wym_containers_th"}],classesHtml:"<div class='wym_classes wym_section'><h2>{Classes}</h2><ul>"+WYMeditor.CLASSES_ITEMS+"</ul></div>",classesItemHtml:"<li class='wym_classes_"+WYMeditor.CLASS_NAME+"'><a href='#' name='"+WYMeditor.CLASS_NAME+"'>"+WYMeditor.CLASS_TITLE+"</a></li>",classesItems:[],statusHtml:"<div class='wym_status wym_section'><h2>{Status}</h2></div>",htmlHtml:"<div class='wym_html wym_section'><h2>{Source_Code}</h2><textarea class='wym_html_val'></textarea></div>",boxSelector:".wym_box",toolsSelector:".wym_tools",toolsListSelector:" ul",containersSelector:".wym_containers",classesSelector:".wym_classes",htmlSelector:".wym_html",iframeSelector:".wym_iframe iframe",iframeBodySelector:".wym_iframe",statusSelector:".wym_status",toolSelector:".wym_tools a",containerSelector:".wym_containers a",classSelector:".wym_classes a",htmlValSelector:".wym_html_val",hrefSelector:".wym_href",srcSelector:".wym_src",titleSelector:".wym_title",altSelector:".wym_alt",textSelector:".wym_text",rowsSelector:".wym_rows",colsSelector:".wym_cols",captionSelector:".wym_caption",summarySelector:".wym_summary",submitSelector:".wym_submit",cancelSelector:".wym_cancel",previewSelector:"",dialogTypeSelector:".wym_dialog_type",dialogLinkSelector:".wym_dialog_link",dialogImageSelector:".wym_dialog_image",dialogTableSelector:".wym_dialog_table",dialogPasteSelector:".wym_dialog_paste",dialogPreviewSelector:".wym_dialog_preview",updateSelector:".wymupdate",updateEvent:"click",dialogFeatures:"menubar=no,titlebar=no,toolbar=no,resizable=no,width=560,height=300,top=0,left=0",dialogFeaturesPreview:"menubar=no,titlebar=no,toolbar=no,resizable=no,scrollbars=yes,width=560,height=300,top=0,left=0",dialogHtml:"<!DOCTYPE html PUBLIC '-//W3C//DTD XHTML 1.0 Strict//EN' 'http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd'><html dir='"+WYMeditor.DIRECTION+"'><head><link rel='stylesheet' type='text/css' media='screen' href='"+WYMeditor.CSS_PATH+"' /><title>"+WYMeditor.DIALOG_TITLE+"</title><script type='text/javascript' src='"+WYMeditor.JQUERY_PATH+"'><\/script><script type='text/javascript' src='"+WYMeditor.WYM_PATH+"'><\/script></head>"+WYMeditor.DIALOG_BODY+"</html>",dialogLinkHtml:"<body class='wym_dialog wym_dialog_link' onload='WYMeditor.INIT_DIALOG("+WYMeditor.INDEX+")'><form><fieldset><input type='hidden' class='wym_dialog_type' value='"+WYMeditor.DIALOG_LINK+"' /><legend>{Link}</legend><div class='row'><label>{URL}</label><input type='text' class='wym_href' value='' size='40' /></div><div class='row'><label>{Title}</label><input type='text' class='wym_title' value='' size='40' /></div><div class='row row-indent'><input class='wym_submit' type='button' value='{Submit}' /><input class='wym_cancel' type='button'value='{Cancel}' /></div></fieldset></form></body>",dialogImageHtml:"<body class='wym_dialog wym_dialog_image' onload='WYMeditor.INIT_DIALOG("+WYMeditor.INDEX+")'><form><fieldset><input type='hidden' class='wym_dialog_type' value='"+WYMeditor.DIALOG_IMAGE+"' /><legend>{Image}</legend><div class='row'><label>{URL}</label><input type='text' class='wym_src' value='' size='40' /></div><div class='row'><label>{Alternative_Text}</label><input type='text' class='wym_alt' value='' size='40' /></div><div class='row'><label>{Title}</label><input type='text' class='wym_title' value='' size='40' /></div><div class='row row-indent'><input class='wym_submit' type='button' value='{Submit}' /><input class='wym_cancel' type='button'value='{Cancel}' /></div></fieldset></form></body>",dialogTableHtml:"<body class='wym_dialog wym_dialog_table' onload='WYMeditor.INIT_DIALOG("+WYMeditor.INDEX+")'><form><fieldset><input type='hidden' class='wym_dialog_type' value='"+WYMeditor.DIALOG_TABLE+"' /><legend>{Table}</legend><div class='row'><label>{Caption}</label><input type='text' class='wym_caption' value='' size='40' /></div><div class='row'><label>{Summary}</label><input type='text' class='wym_summary' value='' size='40' /></div><div class='row'><label>{Number_Of_Rows}</label><input type='text' class='wym_rows' value='3' size='3' /></div><div class='row'><label>{Number_Of_Cols}</label><input type='text' class='wym_cols' value='2' size='3' /></div><div class='row row-indent'><input class='wym_submit' type='button' value='{Submit}' /><input class='wym_cancel' type='button'value='{Cancel}' /></div></fieldset></form></body>",dialogPasteHtml:"<body class='wym_dialog wym_dialog_paste' onload='WYMeditor.INIT_DIALOG("+WYMeditor.INDEX+")'><form><input type='hidden' class='wym_dialog_type' value='"+WYMeditor.DIALOG_PASTE+"' /><fieldset><legend>{Paste_From_Word}</legend><div class='row'><textarea class='wym_text' rows='10' cols='50'></textarea></div><div class='row'><input class='wym_submit' type='button' value='{Submit}' /><input class='wym_cancel' type='button'value='{Cancel}' /></div></fieldset></form></body>",dialogPreviewHtml:"<body class='wym_dialog wym_dialog_preview' onload='WYMeditor.INIT_DIALOG("+WYMeditor.INDEX+")'></body>",dialogStyles:[],stringDelimiterLeft:"{",stringDelimiterRight:"}",preInit:null,preBind:null,postInit:null,preInitDialog:null,postInitDialog:null},a);return this.each(function(){new WYMeditor.editor(jQuery(this),a)})};jQuery.extend({wymeditors:function(a){return(WYMeditor.INSTANCES[a])}});WYMeditor.editor.prototype.init=function(){if(jQuery.browser.msie){var WymClass=new WYMeditor.WymClassExplorer(this)}else{if(jQuery.browser.mozilla){var WymClass=new WYMeditor.WymClassMozilla(this)}else{if(jQuery.browser.opera){var WymClass=new WYMeditor.WymClassOpera(this)}else{if(jQuery.browser.safari){var WymClass=new WYMeditor.WymClassSafari(this)}}}}if(WymClass){if(jQuery.isFunction(this._options.preInit)){this._options.preInit(this)}var SaxListener=new WYMeditor.XhtmlSaxListener();jQuery.extend(SaxListener,WymClass);this.parser=new WYMeditor.XhtmlParser(SaxListener);if(this._options.styles||this._options.stylesheet){this.configureEditorUsingRawCss()}this.helper=new WYMeditor.XmlHelper();for(var prop in WymClass){this[prop]=WymClass[prop]}this._box=jQuery(this._element).hide().after(this._options.boxHtml).next().addClass("wym_box_"+this._index);if(jQuery.isFunction(jQuery.fn.data)){jQuery.data(this._box.get(0),WYMeditor.WYM_INDEX,this._index);jQuery.data(this._element.get(0),WYMeditor.WYM_INDEX,this._index)}var h=WYMeditor.Helper;var iframeHtml=this._options.iframeHtml;iframeHtml=h.replaceAll(iframeHtml,WYMeditor.INDEX,this._index);iframeHtml=h.replaceAll(iframeHtml,WYMeditor.IFRAME_BASE_PATH,this._options.iframeBasePath);var boxHtml=jQuery(this._box).html();boxHtml=h.replaceAll(boxHtml,WYMeditor.LOGO,this._options.logoHtml);boxHtml=h.replaceAll(boxHtml,WYMeditor.TOOLS,this._options.toolsHtml);boxHtml=h.replaceAll(boxHtml,WYMeditor.CONTAINERS,this._options.containersHtml);boxHtml=h.replaceAll(boxHtml,WYMeditor.CLASSES,this._options.classesHtml);boxHtml=h.replaceAll(boxHtml,WYMeditor.HTML,this._options.htmlHtml);boxHtml=h.replaceAll(boxHtml,WYMeditor.IFRAME,iframeHtml);boxHtml=h.replaceAll(boxHtml,WYMeditor.STATUS,this._options.statusHtml);var aTools=eval(this._options.toolsItems);var sTools="";for(var i=0;i<aTools.length;i++){var oTool=aTools[i];if(oTool.name&&oTool.title){var sTool=this._options.toolsItemHtml}var sTool=h.replaceAll(sTool,WYMeditor.TOOL_NAME,oTool.name);sTool=h.replaceAll(sTool,WYMeditor.TOOL_TITLE,this._options.stringDelimiterLeft+oTool.title+this._options.stringDelimiterRight);sTool=h.replaceAll(sTool,WYMeditor.TOOL_CLASS,oTool.css);sTools+=sTool}boxHtml=h.replaceAll(boxHtml,WYMeditor.TOOLS_ITEMS,sTools);var aClasses=eval(this._options.classesItems);var sClasses="";for(var i=0;i<aClasses.length;i++){var oClass=aClasses[i];if(oClass.name&&oClass.title){var sClass=this._options.classesItemHtml}sClass=h.replaceAll(sClass,WYMeditor.CLASS_NAME,oClass.name);sClass=h.replaceAll(sClass,WYMeditor.CLASS_TITLE,oClass.title);sClasses+=sClass}boxHtml=h.replaceAll(boxHtml,WYMeditor.CLASSES_ITEMS,sClasses);var aContainers=eval(this._options.containersItems);var sContainers="";for(var i=0;i<aContainers.length;i++){var oContainer=aContainers[i];if(oContainer.name&&oContainer.title){var sContainer=this._options.containersItemHtml}sContainer=h.replaceAll(sContainer,WYMeditor.CONTAINER_NAME,oContainer.name);sContainer=h.replaceAll(sContainer,WYMeditor.CONTAINER_TITLE,this._options.stringDelimiterLeft+oContainer.title+this._options.stringDelimiterRight);sContainer=h.replaceAll(sContainer,WYMeditor.CONTAINER_CLASS,oContainer.css);sContainers+=sContainer}boxHtml=h.replaceAll(boxHtml,WYMeditor.CONTAINERS_ITEMS,sContainers);boxHtml=this.replaceStrings(boxHtml);jQuery(this._box).html(boxHtml);jQuery(this._box).find(this._options.htmlSelector).hide();this.loadSkin()}};WYMeditor.editor.prototype.bindEvents=function(){var wym=this;jQuery(this._box).find(this._options.toolSelector).click(function(){wym._iframe.contentWindow.focus();wym.exec(jQuery(this).attr(WYMeditor.NAME));return(false)});jQuery(this._box).find(this._options.containerSelector).click(function(){wym.container(jQuery(this).attr(WYMeditor.NAME));return(false)});jQuery(this._box).find(this._options.htmlValSelector).keyup(function(){jQuery(wym._doc.body).html(jQuery(this).val())}).focus(function(){jQuery(this).toggleClass("hasfocus")}).blur(function(){jQuery(this).toggleClass("hasfocus")});jQuery(this._box).find(this._options.classSelector).click(function(){var aClasses=eval(wym._options.classesItems);var sName=jQuery(this).attr(WYMeditor.NAME);var oClass=WYMeditor.Helper.findByName(aClasses,sName);if(oClass){var jqexpr=oClass.expr;wym.toggleClass(sName,jqexpr)}wym._iframe.contentWindow.focus();return(false)});jQuery(this._options.updateSelector).bind(this._options.updateEvent,function(){wym.update()})};WYMeditor.editor.prototype.ready=function(){return(this._doc!=null)};WYMeditor.editor.prototype.box=function(){return(this._box)};WYMeditor.editor.prototype.html=function(a){if(typeof a==="string"){jQuery(this._doc.body).html(a)}else{return(jQuery(this._doc.body).html())}};WYMeditor.editor.prototype.xhtml=function(){return this.parser.parse(this.html())};WYMeditor.editor.prototype.exec=function(b){switch(b){case WYMeditor.CREATE_LINK:var a=this.container();if(a||this._selected_image){this.dialog(WYMeditor.DIALOG_LINK)}break;case WYMeditor.INSERT_IMAGE:this.dialog(WYMeditor.DIALOG_IMAGE);break;case WYMeditor.INSERT_TABLE:this.dialog(WYMeditor.DIALOG_TABLE);break;case WYMeditor.PASTE:this.dialog(WYMeditor.DIALOG_PASTE);break;case WYMeditor.TOGGLE_HTML:this.update();this.toggleHtml();break;case WYMeditor.PREVIEW:this.dialog(WYMeditor.PREVIEW,this._options.dialogFeaturesPreview);break;default:this._exec(b);break}};WYMeditor.editor.prototype.container=function(a){if(a){var d=null;if(a.toLowerCase()==WYMeditor.TH){d=this.container();switch(d.tagName.toLowerCase()){case WYMeditor.TD:case WYMeditor.TH:break;default:var e=new Array(WYMeditor.TD,WYMeditor.TH);d=this.findUp(this.container(),e);break}if(d!=null){a=(d.tagName.toLowerCase()==WYMeditor.TD)?WYMeditor.TH:WYMeditor.TD;this.switchTo(d,a);this.update()}}else{var e=new Array(WYMeditor.P,WYMeditor.H1,WYMeditor.H2,WYMeditor.H3,WYMeditor.H4,WYMeditor.H5,WYMeditor.H6,WYMeditor.PRE,WYMeditor.BLOCKQUOTE);d=this.findUp(this.container(),e);if(d){var i=null;if(a.toLowerCase()==WYMeditor.BLOCKQUOTE){var f=this.findUp(this.container(),WYMeditor.BLOCKQUOTE);if(f==null){i=this._doc.createElement(a);d.parentNode.insertBefore(i,d);i.appendChild(d);this.setFocusToNode(i.firstChild)}else{var c=f.childNodes;var g=c.length;var b=null;if(g>0){b=c.item(0)}for(var h=0;h<g;h++){f.parentNode.insertBefore(c.item(0),f)}f.parentNode.removeChild(f);if(b){this.setFocusToNode(b)}}}else{this.switchTo(d,a)}this.update()}}}else{return(this.selected())}};WYMeditor.editor.prototype.toggleClass=function(c,b){var a=(this._selected_image?this._selected_image:jQuery(this.selected()));a=jQuery(a).parentsOrSelf(b);jQuery(a).toggleClass(c);if(!jQuery(a).attr(WYMeditor.CLASS)){jQuery(a).removeAttr(this._class)}};WYMeditor.editor.prototype.findUp=function(d,c){if(d){var e=d.tagName.toLowerCase();if(typeof(c)==WYMeditor.STRING){while(e!=c&&e!=WYMeditor.BODY){d=d.parentNode;e=d.tagName.toLowerCase()}}else{var b=false;while(!b&&e!=WYMeditor.BODY){for(var a=0;a<c.length;a++){if(e==c[a]){b=true;break}}if(!b){d=d.parentNode;e=d.tagName.toLowerCase()}}}if(e!=WYMeditor.BODY){return(d)}else{return(null)}}else{return(null)}};WYMeditor.editor.prototype.switchTo=function(c,d){var b=this._doc.createElement(d);var a=jQuery(c).html();c.parentNode.replaceChild(b,c);jQuery(b).html(a);this.setFocusToNode(b)};WYMeditor.editor.prototype.replaceStrings=function(sVal){if(!WYMeditor.STRINGS[this._options.lang]){try{eval(jQuery.ajax({url:this._options.langPath+this._options.lang+".js",async:false}).responseText)}catch(e){WYMeditor.console.error("WYMeditor: error while parsing language file.");return sVal}}for(var key in WYMeditor.STRINGS[this._options.lang]){sVal=WYMeditor.Helper.replaceAll(sVal,this._options.stringDelimiterLeft+key+this._options.stringDelimiterRight,WYMeditor.STRINGS[this._options.lang][key])}return(sVal)};WYMeditor.editor.prototype.encloseString=function(a){return(this._options.stringDelimiterLeft+a+this._options.stringDelimiterRight)};WYMeditor.editor.prototype.status=function(a){jQuery(this._box).find(this._options.statusSelector).html(a)};WYMeditor.editor.prototype.update=function(){var a=this.xhtml();jQuery(this._element).val(a);jQuery(this._box).find(this._options.htmlValSelector).not(".hasfocus").val(a)};WYMeditor.editor.prototype.dialog=function(j,c,f){var a=c||this._wym._options.dialogFeatures;var d=window.open("","dialog",a);if(d){var b="";switch(j){case (WYMeditor.DIALOG_LINK):b=this._options.dialogLinkHtml;break;case (WYMeditor.DIALOG_IMAGE):b=this._options.dialogImageHtml;break;case (WYMeditor.DIALOG_TABLE):b=this._options.dialogTableHtml;break;case (WYMeditor.DIALOG_PASTE):b=this._options.dialogPasteHtml;break;case (WYMeditor.PREVIEW):b=this._options.dialogPreviewHtml;break;default:b=f}var e=WYMeditor.Helper;var g=this._options.dialogHtml;g=e.replaceAll(g,WYMeditor.BASE_PATH,this._options.basePath);g=e.replaceAll(g,WYMeditor.DIRECTION,this._options.direction);g=e.replaceAll(g,WYMeditor.CSS_PATH,this._options.skinPath+WYMeditor.SKINS_DEFAULT_CSS);g=e.replaceAll(g,WYMeditor.WYM_PATH,this._options.wymPath);g=e.replaceAll(g,WYMeditor.JQUERY_PATH,this._options.jQueryPath);g=e.replaceAll(g,WYMeditor.DIALOG_TITLE,this.encloseString(j));g=e.replaceAll(g,WYMeditor.DIALOG_BODY,b);g=e.replaceAll(g,WYMeditor.INDEX,this._index);g=this.replaceStrings(g);var i=d.document;i.write(g);i.close()}};WYMeditor.editor.prototype.toggleHtml=function(){jQuery(this._box).find(this._options.htmlSelector).toggle()};WYMeditor.editor.prototype.uniqueStamp=function(){var a=new Date();return("wym-"+a.getTime())};WYMeditor.editor.prototype.paste=function(b){var e;var a=this.selected();var c=b.split(this._newLine+this._newLine);var d=new RegExp(this._newLine,"g");if(a&&a.tagName.toLowerCase()!=WYMeditor.BODY){for(x=c.length-1;x>=0;x--){e=c[x];e=e.replace(d,"<br />");jQuery(a).after("<p>"+e+"</p>")}}else{for(x=0;x<c.length;x++){e=c[x];e=e.replace(d,"<br />");jQuery(this._doc.body).append("<p>"+e+"</p>")}}};WYMeditor.editor.prototype.insert=function(a){if(this._iframe.contentWindow.getSelection().focusNode!=null){this._exec(WYMeditor.INSERT_HTML,a)}else{this.paste(a)}};WYMeditor.editor.prototype.wrap=function(b,a){if(this._iframe.contentWindow.getSelection().focusNode!=null){this._exec(WYMeditor.INSERT_HTML,b+this._iframe.contentWindow.getSelection().toString()+a)}};WYMeditor.editor.prototype.unwrap=function(){if(this._iframe.contentWindow.getSelection().focusNode!=null){this._exec(WYMeditor.INSERT_HTML,this._iframe.contentWindow.getSelection().toString())}};WYMeditor.editor.prototype.setFocusToNode=function(d,b){var a=this._doc.createRange(),c=this._iframe.contentWindow.getSelection();b=b?0:1;a.selectNodeContents(d);c.addRange(a);c.collapse(d,b);this._iframe.contentWindow.focus()};WYMeditor.editor.prototype.addCssRules=function(e,c){var b=e.styleSheets[0];if(b){for(var a=0;a<c.length;a++){var d=c[a];if(d.name&&d.css){this.addCssRule(b,d)}}}};WYMeditor.editor.prototype.computeBasePath=function(){return jQuery(jQuery.grep(jQuery("script"),function(a){return(a.src&&a.src.match(/jquery\.wymeditor(\.pack|\.min|\.packed)?\.js(\?.*)?$/))})).attr("src").replace(/jquery\.wymeditor(\.pack|\.min|\.packed)?\.js(\?.*)?$/,"")};WYMeditor.editor.prototype.computeWymPath=function(){return jQuery(jQuery.grep(jQuery("script"),function(a){return(a.src&&a.src.match(/jquery\.wymeditor(\.pack|\.min|\.packed)?\.js(\?.*)?$/))})).attr("src")};WYMeditor.editor.prototype.computeJqueryPath=function(){return jQuery(jQuery.grep(jQuery("script"),function(a){return(a.src&&a.src.match(/jquery(-(.*)){0,1}(\.pack|\.min|\.packed)?\.js(\?.*)?$/))})).attr("src")};WYMeditor.editor.prototype.computeCssPath=function(){return jQuery(jQuery.grep(jQuery("link"),function(a){return(a.href&&a.href.match(/wymeditor\/skins\/(.*)screen\.css(\?.*)?$/))})).attr("href")};WYMeditor.editor.prototype.configureEditorUsingRawCss=function(){var a=new WYMeditor.WymCssParser();if(this._options.stylesheet){a.parse(jQuery.ajax({url:this._options.stylesheet,async:false}).responseText)}else{a.parse(this._options.styles,false)}if(this._options.classesItems.length==0){this._options.classesItems=a.css_settings.classesItems}if(this._options.editorStyles.length==0){this._options.editorStyles=a.css_settings.editorStyles}if(this._options.dialogStyles.length==0){this._options.dialogStyles=a.css_settings.dialogStyles}};WYMeditor.editor.prototype.listen=function(){jQuery(this._doc.body).bind("mousedown",this.mousedown)};WYMeditor.editor.prototype.mousedown=function(a){var b=WYMeditor.INSTANCES[this.ownerDocument.title];b._selected_image=(a.target.tagName.toLowerCase()==WYMeditor.IMG)?a.target:null};WYMeditor.loadCss=function(a){var c=document.createElement("link");c.rel="stylesheet";c.href=a;var b=jQuery("head").get(0);b.appendChild(c)};WYMeditor.editor.prototype.loadSkin=function(){if(this._options.loadSkin&&!WYMeditor.SKINS[this._options.skin]){var found=false;var rExp=new RegExp(this._options.skin+"/"+WYMeditor.SKINS_DEFAULT_CSS+"$");jQuery("link").each(function(){if(this.href.match(rExp)){found=true}});if(!found){WYMeditor.loadCss(this._options.skinPath+WYMeditor.SKINS_DEFAULT_CSS)}}jQuery(this._box).addClass("wym_skin_"+this._options.skin);if(this._options.initSkin&&!WYMeditor.SKINS[this._options.skin]){eval(jQuery.ajax({url:this._options.skinPath+WYMeditor.SKINS_DEFAULT_JS,async:false}).responseText)}if(WYMeditor.SKINS[this._options.skin]&&WYMeditor.SKINS[this._options.skin].init){WYMeditor.SKINS[this._options.skin].init(this)}};WYMeditor.INIT_DIALOG=function(index){var wym=window.opener.WYMeditor.INSTANCES[index];var doc=window.document;var selected=wym.selected();var dialogType=jQuery(wym._options.dialogTypeSelector).val();var sStamp=wym.uniqueStamp();switch(dialogType){case WYMeditor.DIALOG_LINK:if(selected&&selected.tagName&&selected.tagName.toLowerCase!=WYMeditor.A){selected=jQuery(selected).parentsOrSelf(WYMeditor.A)}if(!selected&&wym._selected_image){selected=jQuery(wym._selected_image).parentsOrSelf(WYMeditor.A)}break}if(jQuery.isFunction(wym._options.preInitDialog)){wym._options.preInitDialog(wym,window)}var styles=doc.styleSheets[0];var aCss=eval(wym._options.dialogStyles);wym.addCssRules(doc,aCss);if(selected){jQuery(wym._options.hrefSelector).val(jQuery(selected).attr(WYMeditor.HREF));jQuery(wym._options.srcSelector).val(jQuery(selected).attr(WYMeditor.SRC));jQuery(wym._options.titleSelector).val(jQuery(selected).attr(WYMeditor.TITLE));jQuery(wym._options.altSelector).val(jQuery(selected).attr(WYMeditor.ALT))}if(wym._selected_image){jQuery(wym._options.dialogImageSelector+" "+wym._options.srcSelector).val(jQuery(wym._selected_image).attr(WYMeditor.SRC));jQuery(wym._options.dialogImageSelector+" "+wym._options.titleSelector).val(jQuery(wym._selected_image).attr(WYMeditor.TITLE));jQuery(wym._options.dialogImageSelector+" "+wym._options.altSelector).val(jQuery(wym._selected_image).attr(WYMeditor.ALT))}jQuery(wym._options.dialogLinkSelector+" "+wym._options.submitSelector).click(function(){var sUrl=jQuery(wym._options.hrefSelector).val();if(sUrl.length>0){var link;if(selected[0]&&selected[0].tagName.toLowerCase()==WYMeditor.A){link=selected}else{wym._exec(WYMeditor.CREATE_LINK,sStamp);link=jQuery("a[href="+sStamp+"]",wym._doc.body)}link.attr(WYMeditor.HREF,sUrl).attr(WYMeditor.TITLE,jQuery(wym._options.titleSelector).val())}window.close()});jQuery(wym._options.dialogImageSelector+" "+wym._options.submitSelector).click(function(){var sUrl=jQuery(wym._options.srcSelector).val();if(sUrl.length>0){wym._exec(WYMeditor.INSERT_IMAGE,sStamp);jQuery("img[src$="+sStamp+"]",wym._doc.body).attr(WYMeditor.SRC,sUrl).attr(WYMeditor.TITLE,jQuery(wym._options.titleSelector).val()).attr(WYMeditor.ALT,jQuery(wym._options.altSelector).val())}window.close()});jQuery(wym._options.dialogTableSelector+" "+wym._options.submitSelector).click(function(){var iRows=jQuery(wym._options.rowsSelector).val();var iCols=jQuery(wym._options.colsSelector).val();if(iRows>0&&iCols>0){var table=wym._doc.createElement(WYMeditor.TABLE);var newRow=null;var newCol=null;var sCaption=jQuery(wym._options.captionSelector).val();var newCaption=table.createCaption();newCaption.innerHTML=sCaption;for(x=0;x<iRows;x++){newRow=table.insertRow(x);for(y=0;y<iCols;y++){newRow.insertCell(y)}}jQuery(table).attr("summary",jQuery(wym._options.summarySelector).val());var node=jQuery(wym.findUp(wym.container(),WYMeditor.MAIN_CONTAINERS)).get(0);if(!node||!node.parentNode){jQuery(wym._doc.body).append(table)}else{jQuery(node).after(table)}}window.close()});jQuery(wym._options.dialogPasteSelector+" "+wym._options.submitSelector).click(function(){var sText=jQuery(wym._options.textSelector).val();wym.paste(sText);window.close()});jQuery(wym._options.dialogPreviewSelector+" "+wym._options.previewSelector).html(wym.xhtml());jQuery(wym._options.cancelSelector).mousedown(function(){window.close()});if(jQuery.isFunction(wym._options.postInitDialog)){wym._options.postInitDialog(wym,window)}};WYMeditor.XmlHelper=function(){this._entitiesDiv=document.createElement("div");return this};WYMeditor.XmlHelper.prototype.tag=function(c,b,a){b=b||false;a=a||false;return"<"+c+(b?this.tagOptions(b):"")+(a?">":" />")};WYMeditor.XmlHelper.prototype.contentTag=function(b,c,a){a=a||false;return"<"+b+(a?this.tagOptions(a):"")+">"+c+"</"+b+">"};WYMeditor.XmlHelper.prototype.cdataSection=function(a){return"<![CDATA["+a+"]]>"};WYMeditor.XmlHelper.prototype.escapeOnce=function(a){return this._fixDoubleEscape(this.escapeEntities(a))};WYMeditor.XmlHelper.prototype._fixDoubleEscape=function(a){return a.replace(/&([a-z]+|(#\d+));/ig,"&$1;")};WYMeditor.XmlHelper.prototype.tagOptions=function(b){var a=this;a._formated_options="";for(var c in b){var d="";var e=b[c];if(typeof e!="function"&&e.length>0){if(parseInt(c)==c&&typeof e=="object"){c=e.shift();e=e.pop()}if(c!=""&&e!=""){a._formated_options+=" "+c+'="'+a.escapeOnce(e)+'"'}}}return a._formated_options};WYMeditor.XmlHelper.prototype.escapeEntities=function(c,b){this._entitiesDiv.innerHTML=c;this._entitiesDiv.textContent=c;var a=this._entitiesDiv.innerHTML;if(typeof b=="undefined"){if(b!=false){a=a.replace('"',""")}if(b==true){a=a.replace('"',"'")}}return a};WYMeditor.XmlHelper.prototype.parseAttributes=function(h){var a=[];var g=h.split(/((=\s*")(")("))|((=\s*\')(\')(\'))|((=\s*[^>\s]*))/g);if(g.toString()!=h){for(var d in g){var c=g[d];if(typeof c!="function"&&c.length!=0){var e=new RegExp("(\\w+)\\s*"+c);if(match=h.match(e)){var f=c.replace(/^[\s=]+/,"");var b=f.charAt(0);b=b=='"'?'"':(b=="'"?"'":"");if(b!=""){f=b=='"'?f.replace(/^"|"+$/g,""):f.replace(/^'|'+$/g,"")}h=h.replace(match[0],"");a.push([match[1],f])}}}}return a};WYMeditor.XhtmlValidator={_attributes:{core:{except:["base","head","html","meta","param","script","style","title"],attributes:["class","id","style","title","accesskey","tabindex"]},language:{except:["base","br","hr","iframe","param","script"],attributes:{dir:["ltr","rtl"],"0":"lang","1":"xml:lang"}},keyboard:{attributes:{accesskey:/^(\w){1}$/,tabindex:/^(\d)+$/}}},_events:{window:{only:["body"],attributes:["onload","onunload"]},form:{only:["form","input","textarea","select","a","label","button"],attributes:["onchange","onsubmit","onreset","onselect","onblur","onfocus"]},keyboard:{except:["base","bdo","br","frame","frameset","head","html","iframe","meta","param","script","style","title"],attributes:["onkeydown","onkeypress","onkeyup"]},mouse:{except:["base","bdo","br","head","html","meta","param","script","style","title"],attributes:["onclick","ondblclick","onmousedown","onmousemove","onmouseover","onmouseout","onmouseup"]}},_tags:{a:{attributes:{"0":"charset","1":"coords","2":"href","3":"hreflang","4":"name",rel:/^(alternate|designates|stylesheet|start|next|prev|contents|index|glossary|copyright|chapter|section|subsection|appendix|help|bookmark| |shortcut|icon)+$/,rev:/^(alternate|designates|stylesheet|start|next|prev|contents|index|glossary|copyright|chapter|section|subsection|appendix|help|bookmark| |shortcut|icon)+$/,shape:/^(rect|rectangle|circ|circle|poly|polygon)$/,"5":"type"}},"0":"abbr","1":"acronym","2":"address",area:{attributes:{"0":"alt","1":"coords","2":"href",nohref:/^(true|false)$/,shape:/^(rect|rectangle|circ|circle|poly|polygon)$/},required:["alt"]},"3":"b",base:{attributes:["href"],required:["href"]},bdo:{attributes:{dir:/^(ltr|rtl)$/},required:["dir"]},"4":"big",blockquote:{attributes:["cite"]},"5":"body","6":"br",button:{attributes:{disabled:/^(disabled)$/,type:/^(button|reset|submit)$/,"0":"value"},inside:"form"},"7":"caption","8":"cite","9":"code",col:{attributes:{align:/^(right|left|center|justify)$/,"0":"char","1":"charoff",span:/^(\d)+$/,valign:/^(top|middle|bottom|baseline)$/,"2":"width"},inside:"colgroup"},colgroup:{attributes:{align:/^(right|left|center|justify)$/,"0":"char","1":"charoff",span:/^(\d)+$/,valign:/^(top|middle|bottom|baseline)$/,"2":"width"}},"10":"dd",del:{attributes:{"0":"cite",datetime:/^([0-9]){8}/}},"11":"div","12":"dfn","13":"dl","14":"dt","15":"em",fieldset:{inside:"form"},form:{attributes:{"0":"action","1":"accept","2":"accept-charset","3":"enctype",method:/^(get|post)$/},required:["action"]},head:{attributes:["profile"]},"16":"h1","17":"h2","18":"h3","19":"h4","20":"h5","21":"h6","22":"hr",html:{attributes:["xmlns"]},"23":"i",img:{attributes:["alt","src","height","ismap","longdesc","usemap","width"],required:["alt","src"]},input:{attributes:{"0":"accept","1":"alt",checked:/^(checked)$/,disabled:/^(disabled)$/,maxlength:/^(\d)+$/,"2":"name",readonly:/^(readonly)$/,size:/^(\d)+$/,"3":"src",type:/^(button|checkbox|file|hidden|image|password|radio|reset|submit|text)$/,"4":"value"},inside:"form"},ins:{attributes:{"0":"cite",datetime:/^([0-9]){8}/}},"24":"kbd",label:{attributes:["for"],inside:"form"},"25":"legend","26":"li",link:{attributes:{"0":"charset","1":"href","2":"hreflang",media:/^(all|braille|print|projection|screen|speech|,|;| )+$/i,rel:/^(alternate|appendix|bookmark|chapter|contents|copyright|glossary|help|home|index|next|prev|section|start|stylesheet|subsection| |shortcut|icon)+$/i,rev:/^(alternate|appendix|bookmark|chapter|contents|copyright|glossary|help|home|index|next|prev|section|start|stylesheet|subsection| |shortcut|icon)+$/i,"3":"type"},inside:"head"},map:{attributes:["id","name"],required:["id"]},meta:{attributes:{"0":"content","http-equiv":/^(content\-type|expires|refresh|set\-cookie)$/i,"1":"name","2":"scheme"},required:["content"]},"27":"noscript",object:{attributes:["archive","classid","codebase","codetype","data","declare","height","name","standby","type","usemap","width"]},"28":"ol",optgroup:{attributes:{"0":"label",disabled:/^(disabled)$/},required:["label"]},option:{attributes:{"0":"label",disabled:/^(disabled)$/,selected:/^(selected)$/,"1":"value"},inside:"select"},"29":"p",param:{attributes:{"0":"type",valuetype:/^(data|ref|object)$/,"1":"valuetype","2":"value"},required:["name"]},"30":"pre",q:{attributes:["cite"]},"31":"samp",script:{attributes:{type:/^(text\/ecmascript|text\/javascript|text\/jscript|text\/vbscript|text\/vbs|text\/xml)$/,"0":"charset",defer:/^(defer)$/,"1":"src"},required:["type"]},select:{attributes:{disabled:/^(disabled)$/,multiple:/^(multiple)$/,"0":"name","1":"size"},inside:"form"},"32":"small","33":"span","34":"strong",style:{attributes:{"0":"type",media:/^(screen|tty|tv|projection|handheld|print|braille|aural|all)$/},required:["type"]},"35":"sub","36":"sup",table:{attributes:{"0":"border","1":"cellpadding","2":"cellspacing",frame:/^(void|above|below|hsides|lhs|rhs|vsides|box|border)$/,rules:/^(none|groups|rows|cols|all)$/,"3":"summary","4":"width"}},tbody:{attributes:{align:/^(right|left|center|justify)$/,"0":"char","1":"charoff",valign:/^(top|middle|bottom|baseline)$/}},td:{attributes:{"0":"abbr",align:/^(left|right|center|justify|char)$/,"1":"axis","2":"char","3":"charoff",colspan:/^(\d)+$/,"4":"headers",rowspan:/^(\d)+$/,scope:/^(col|colgroup|row|rowgroup)$/,valign:/^(top|middle|bottom|baseline)$/}},textarea:{attributes:["cols","rows","disabled","name","readonly"],required:["cols","rows"],inside:"form"},tfoot:{attributes:{align:/^(right|left|center|justify)$/,"0":"char","1":"charoff",valign:/^(top|middle|bottom)$/,"2":"baseline"}},th:{attributes:{"0":"abbr",align:/^(left|right|center|justify|char)$/,"1":"axis","2":"char","3":"charoff",colspan:/^(\d)+$/,"4":"headers",rowspan:/^(\d)+$/,scope:/^(col|colgroup|row|rowgroup)$/,valign:/^(top|middle|bottom|baseline)$/}},thead:{attributes:{align:/^(right|left|center|justify)$/,"0":"char","1":"charoff",valign:/^(top|middle|bottom|baseline)$/}},"37":"title",tr:{attributes:{align:/^(right|left|center|justify|char)$/,"0":"char","1":"charoff",valign:/^(top|middle|bottom|baseline)$/}},"38":"tt","39":"ul","40":"var"},skiped_attributes:[],skiped_attribute_values:[],getValidTagAttributes:function(a,b){var c={};var g=this.getPossibleTagAttributes(a);for(var e in b){var f=b[e];var d=WYMeditor.Helper;if(!d.contains(this.skiped_attributes,e)&&!d.contains(this.skiped_attribute_values,f)){if(typeof f!="function"&&d.contains(g,e)){if(this.doesAttributeNeedsValidation(a,e)){if(this.validateAttribute(a,e,f)){c[e]=f}}else{c[e]=f}}}}return c},getUniqueAttributesAndEventsForTag:function(b){var a=[];if(this._tags[b]&&this._tags[b]["attributes"]){for(k in this._tags[b]["attributes"]){a.push(parseInt(k)==k?this._tags[b]["attributes"][k]:k)}}return a},getDefaultAttributesAndEventsForTags:function(){var a=[];for(var b in this._events){a.push(this._events[b])}for(var b in this._attributes){a.push(this._attributes[b])}return a},isValidTag:function(a){if(this._tags[a]){return true}for(var b in this._tags){if(this._tags[b]==a){return true}}return false},getDefaultAttributesAndEventsForTag:function(a){var i=[];if(this.isValidTag(a)){var g=this.getDefaultAttributesAndEventsForTags();for(var d in g){var f=g[d];if(typeof f=="object"){var e=WYMeditor.Helper;if((f.except&&e.contains(f.except,a))||(f.only&&!e.contains(f.only,a))){continue}var c=f.attributes?f.attributes:f.events;for(var b in c){i.push(typeof c[b]!="string"?b:c[b])}}}}return i},doesAttributeNeedsValidation:function(a,b){return this._tags[a]&&((this._tags[a]["attributes"]&&this._tags[a]["attributes"][b])||(this._tags[a]["required"]&&WYMeditor.Helper.contains(this._tags[a]["required"],b)))},validateAttribute:function(a,b,c){if(this._tags[a]&&(this._tags[a]["attributes"]&&this._tags[a]["attributes"][b]&&c.length>0&&!c.match(this._tags[a]["attributes"][b]))||(this._tags[a]&&this._tags[a]["required"]&&WYMeditor.Helper.contains(this._tags[a]["required"],b)&&c.length==0)){return false}return typeof this._tags[a]!="undefined"},getPossibleTagAttributes:function(a){if(!this._possible_tag_attributes){this._possible_tag_attributes={}}if(!this._possible_tag_attributes[a]){this._possible_tag_attributes[a]=this.getUniqueAttributesAndEventsForTag(a).concat(this.getDefaultAttributesAndEventsForTag(a))}return this._possible_tag_attributes[a]}};WYMeditor.ParallelRegex=function(a){this._case=a;this._patterns=[];this._labels=[];this._regex=null;return this};WYMeditor.ParallelRegex.prototype.addPattern=function(c,a){a=a||true;var b=this._patterns.length;this._patterns[b]=c;this._labels[b]=a;this._regex=null};WYMeditor.ParallelRegex.prototype.match=function(c){if(this._patterns.length==0){return[false,""]}var d=c.match(this._getCompoundedRegex());if(!d){return[false,""]}var a=d[0];for(var b=1;b<d.length;b++){if(d[b]){return[this._labels[b-1],a]}}return[true,d[0]]};WYMeditor.ParallelRegex.prototype._getCompoundedRegex=function(){if(this._regex==null){for(var a=0,b=this._patterns.length;a<b;a++){this._patterns[a]="("+this._untokenizeRegex(this._tokenizeRegex(this._patterns[a]).replace(/([\/\(\)])/g,"\\$1"))+")"}this._regex=new RegExp(this._patterns.join("|"),this._getPerlMatchingFlags())}return this._regex};WYMeditor.ParallelRegex.prototype._tokenizeRegex=function(a){return a.replace(/\(\?(i|m|s|x|U)\)/,"~~~~~~Tk1$1~~~~~~").replace(/\(\?(\-[i|m|s|x|U])\)/,"~~~~~~Tk2$1~~~~~~").replace(/\(\?\=(.*)\)/,"~~~~~~Tk3$1~~~~~~").replace(/\(\?\!(.*)\)/,"~~~~~~Tk4$1~~~~~~").replace(/\(\?\<\=(.*)\)/,"~~~~~~Tk5$1~~~~~~").replace(/\(\?\<\!(.*)\)/,"~~~~~~Tk6$1~~~~~~").replace(/\(\?\:(.*)\)/,"~~~~~~Tk7$1~~~~~~")};WYMeditor.ParallelRegex.prototype._untokenizeRegex=function(a){return a.replace(/~~~~~~Tk1(.{1})~~~~~~/,"(?$1)").replace(/~~~~~~Tk2(.{2})~~~~~~/,"(?$1)").replace(/~~~~~~Tk3(.*)~~~~~~/,"(?=$1)").replace(/~~~~~~Tk4(.*)~~~~~~/,"(?!$1)").replace(/~~~~~~Tk5(.*)~~~~~~/,"(?<=$1)").replace(/~~~~~~Tk6(.*)~~~~~~/,"(?<!$1)").replace(/~~~~~~Tk7(.*)~~~~~~/,"(?:$1)")};WYMeditor.ParallelRegex.prototype._getPerlMatchingFlags=function(){return(this._case?"m":"mi")};WYMeditor.StateStack=function(a){this._stack=[a];return this};WYMeditor.StateStack.prototype.getCurrent=function(){return this._stack[this._stack.length-1]};WYMeditor.StateStack.prototype.enter=function(a){this._stack.push(a)};WYMeditor.StateStack.prototype.leave=function(){if(this._stack.length==1){return false}this._stack.pop();return true};WYMeditor.LEXER_ENTER=1;WYMeditor.LEXER_MATCHED=2;WYMeditor.LEXER_UNMATCHED=3;WYMeditor.LEXER_EXIT=4;WYMeditor.LEXER_SPECIAL=5;WYMeditor.Lexer=function(c,b,a){b=b||"accept";this._case=a||false;this._regexes={};this._parser=c;this._mode=new WYMeditor.StateStack(b);this._mode_handlers={};this._mode_handlers[b]=b;return this};WYMeditor.Lexer.prototype.addPattern=function(a,b){var b=b||"accept";if(typeof this._regexes[b]=="undefined"){this._regexes[b]=new WYMeditor.ParallelRegex(this._case)}this._regexes[b].addPattern(a);if(typeof this._mode_handlers[b]=="undefined"){this._mode_handlers[b]=b}};WYMeditor.Lexer.prototype.addEntryPattern=function(b,c,a){if(typeof this._regexes[c]=="undefined"){this._regexes[c]=new WYMeditor.ParallelRegex(this._case)}this._regexes[c].addPattern(b,a);if(typeof this._mode_handlers[a]=="undefined"){this._mode_handlers[a]=a}};WYMeditor.Lexer.prototype.addExitPattern=function(a,b){if(typeof this._regexes[b]=="undefined"){this._regexes[b]=new WYMeditor.ParallelRegex(this._case)}this._regexes[b].addPattern(a,"__exit");if(typeof this._mode_handlers[b]=="undefined"){this._mode_handlers[b]=b}};WYMeditor.Lexer.prototype.addSpecialPattern=function(b,c,a){if(typeof this._regexes[c]=="undefined"){this._regexes[c]=new WYMeditor.ParallelRegex(this._case)}this._regexes[c].addPattern(b,"_"+a);if(typeof this._mode_handlers[a]=="undefined"){this._mode_handlers[a]=a}};WYMeditor.Lexer.prototype.mapHandler=function(b,a){this._mode_handlers[b]=a};WYMeditor.Lexer.prototype.parse=function(d){if(typeof this._parser=="undefined"){return false}var e=d.length;var c;while(typeof(c=this._reduce(d))=="object"){var d=c[0];var b=c[1];var a=c[2];var f=c[3];if(!this._dispatchTokens(b,a,f)){return false}if(d==""){return true}if(d.length==e){return false}e=d.length}if(!c){return false}return this._invokeParser(d,WYMeditor.LEXER_UNMATCHED)};WYMeditor.Lexer.prototype._dispatchTokens=function(b,a,c){c=c||false;if(!this._invokeParser(b,WYMeditor.LEXER_UNMATCHED)){return false}if(typeof c=="boolean"){return this._invokeParser(a,WYMeditor.LEXER_MATCHED)}if(this._isModeEnd(c)){if(!this._invokeParser(a,WYMeditor.LEXER_EXIT)){return false}return this._mode.leave()}if(this._isSpecialMode(c)){this._mode.enter(this._decodeSpecial(c));if(!this._invokeParser(a,WYMeditor.LEXER_SPECIAL)){return false}return this._mode.leave()}this._mode.enter(c);return this._invokeParser(a,WYMeditor.LEXER_ENTER)};WYMeditor.Lexer.prototype._isModeEnd=function(a){return(a==="__exit")};WYMeditor.Lexer.prototype._isSpecialMode=function(a){return(a.substring(0,1)=="_")};WYMeditor.Lexer.prototype._decodeSpecial=function(a){return a.substring(1)};WYMeditor.Lexer.prototype._invokeParser=function(content,is_match){if(content===""){return true}var current=this._mode.getCurrent();var handler=this._mode_handlers[current];var result;eval("result = this._parser."+handler+"(content, is_match);");return result};WYMeditor.Lexer.prototype._reduce=function(c){var a=this._regexes[this._mode.getCurrent()].match(c);var b=a[1];var e=a[0];if(e){var f=c.indexOf(b);var d=c.substr(0,f);c=c.substring(f+b.length);return[c,d,b,e]}return true};WYMeditor.XhtmlLexer=function(a){jQuery.extend(this,new WYMeditor.Lexer(a,"Text"));this.mapHandler("Text","Text");this.addTokens();this.init();return this};WYMeditor.XhtmlLexer.prototype.init=function(){};WYMeditor.XhtmlLexer.prototype.addTokens=function(){this.addCommentTokens("Text");this.addScriptTokens("Text");this.addCssTokens("Text");this.addTagTokens("Text")};WYMeditor.XhtmlLexer.prototype.addCommentTokens=function(a){this.addEntryPattern("<!--",a,"Comment");this.addExitPattern("-->","Comment")};WYMeditor.XhtmlLexer.prototype.addScriptTokens=function(a){this.addEntryPattern("<script",a,"Script");this.addExitPattern("<\/script>","Script")};WYMeditor.XhtmlLexer.prototype.addCssTokens=function(a){this.addEntryPattern("<style",a,"Css");this.addExitPattern("</style>","Css")};WYMeditor.XhtmlLexer.prototype.addTagTokens=function(a){this.addSpecialPattern("<\\s*[a-z0-9:-]+\\s*>",a,"OpeningTag");this.addEntryPattern("<[a-z0-9:-]+[\\/ \\>]+",a,"OpeningTag");this.addInTagDeclarationTokens("OpeningTag");this.addSpecialPattern("</\\s*[a-z0-9:-]+\\s*>",a,"ClosingTag")};WYMeditor.XhtmlLexer.prototype.addInTagDeclarationTokens=function(a){this.addSpecialPattern("\\s+",a,"Ignore");this.addAttributeTokens(a);this.addExitPattern("/>",a);this.addExitPattern(">",a)};WYMeditor.XhtmlLexer.prototype.addAttributeTokens=function(a){this.addSpecialPattern("\\s*[a-z-_0-9]*:?[a-z-_0-9]+\\s*(?==)\\s*",a,"TagAttributes");this.addEntryPattern('=\\s*"',a,"DoubleQuotedAttribute");this.addPattern('\\\\"',"DoubleQuotedAttribute");this.addExitPattern('"',"DoubleQuotedAttribute");this.addEntryPattern("=\\s*'",a,"SingleQuotedAttribute");this.addPattern("\\\\'","SingleQuotedAttribute");this.addExitPattern("'","SingleQuotedAttribute");this.addSpecialPattern("=\\s*[^>\\s]*",a,"UnquotedAttribute")};WYMeditor.XhtmlParser=function(a,b){var b=b||"Text";this._Lexer=new WYMeditor.XhtmlLexer(this);this._Listener=a;this._mode=b;this._matches=[];this._last_match="";this._current_match="";return this};WYMeditor.XhtmlParser.prototype.parse=function(a){this._Lexer.parse(this.beforeParsing(a));return this.afterParsing(this._Listener.getResult())};WYMeditor.XhtmlParser.prototype.beforeParsing=function(a){if(a.match(/class="MsoNormal"/)||a.match(/ns = "urn:schemas-microsoft-com/)){this._Listener.avoidStylingTagsAndAttributes()}return this._Listener.beforeParsing(a)};WYMeditor.XhtmlParser.prototype.afterParsing=function(a){if(this._Listener._avoiding_tags_implicitly){this._Listener.allowStylingTagsAndAttributes()}return this._Listener.afterParsing(a)};WYMeditor.XhtmlParser.prototype.Ignore=function(a,b){return true};WYMeditor.XhtmlParser.prototype.Text=function(a){this._Listener.addContent(a);return true};WYMeditor.XhtmlParser.prototype.Comment=function(b,a){return this._addNonTagBlock(b,a,"addComment")};WYMeditor.XhtmlParser.prototype.Script=function(b,a){return this._addNonTagBlock(b,a,"addScript")};WYMeditor.XhtmlParser.prototype.Css=function(b,a){return this._addNonTagBlock(b,a,"addCss")};WYMeditor.XhtmlParser.prototype._addNonTagBlock=function(a,c,b){switch(c){case WYMeditor.LEXER_ENTER:this._non_tag=a;break;case WYMeditor.LEXER_UNMATCHED:this._non_tag+=a;break;case WYMeditor.LEXER_EXIT:switch(b){case"addComment":this._Listener.addComment(this._non_tag+a);break;case"addScript":this._Listener.addScript(this._non_tag+a);break;case"addCss":this._Listener.addCss(this._non_tag+a);break}}return true};WYMeditor.XhtmlParser.prototype.OpeningTag=function(a,b){switch(b){case WYMeditor.LEXER_ENTER:this._tag=this.normalizeTag(a);this._tag_attributes={};break;case WYMeditor.LEXER_SPECIAL:this._callOpenTagListener(this.normalizeTag(a));break;case WYMeditor.LEXER_EXIT:this._callOpenTagListener(this._tag,this._tag_attributes)}return true};WYMeditor.XhtmlParser.prototype.ClosingTag=function(a,b){this._callCloseTagListener(this.normalizeTag(a));return true};WYMeditor.XhtmlParser.prototype._callOpenTagListener=function(a,b){var b=b||{};this.autoCloseUnclosedBeforeNewOpening(a);if(this._Listener.isBlockTag(a)){this._Listener._tag_stack.push(a);this._Listener.fixNestingBeforeOpeningBlockTag(a,b);this._Listener.openBlockTag(a,b);this._increaseOpenTagCounter(a)}else{if(this._Listener.isInlineTag(a)){this._Listener.inlineTag(a,b)}else{this._Listener.openUnknownTag(a,b);this._increaseOpenTagCounter(a)}}this._Listener.last_tag=a;this._Listener.last_tag_opened=true;this._Listener.last_tag_attributes=b};WYMeditor.XhtmlParser.prototype._callCloseTagListener=function(a){if(this._decreaseOpenTagCounter(a)){this.autoCloseUnclosedBeforeTagClosing(a);if(this._Listener.isBlockTag(a)){var b=this._Listener._tag_stack.pop();if(b==false){return}else{if(b!=a){a=b}}this._Listener.closeBlockTag(a)}else{this._Listener.closeUnknownTag(a)}}else{this._Listener.closeUnopenedTag(a)}this._Listener.last_tag=a;this._Listener.last_tag_opened=false};WYMeditor.XhtmlParser.prototype._increaseOpenTagCounter=function(a){this._Listener._open_tags[a]=this._Listener._open_tags[a]||0;this._Listener._open_tags[a]++};WYMeditor.XhtmlParser.prototype._decreaseOpenTagCounter=function(a){if(this._Listener._open_tags[a]){this._Listener._open_tags[a]--;if(this._Listener._open_tags[a]==0){this._Listener._open_tags[a]=undefined}return true}return false};WYMeditor.XhtmlParser.prototype.autoCloseUnclosedBeforeNewOpening=function(a){this._autoCloseUnclosed(a,false)};WYMeditor.XhtmlParser.prototype.autoCloseUnclosedBeforeTagClosing=function(a){this._autoCloseUnclosed(a,true)};WYMeditor.XhtmlParser.prototype._autoCloseUnclosed=function(c,d){var d=d||false;if(this._Listener._open_tags){for(var a in this._Listener._open_tags){var b=this._Listener._open_tags[a];if(b>0&&this._Listener.shouldCloseTagAutomatically(a,c,d)){this._callCloseTagListener(a,true)}}}};WYMeditor.XhtmlParser.prototype.getTagReplacements=function(){return this._Listener.getTagReplacements()};WYMeditor.XhtmlParser.prototype.normalizeTag=function(a){a=a.replace(/^([\s<\/>]*)|([\s<\/>]*)$/gm,"").toLowerCase();var b=this._Listener.getTagReplacements();if(b[a]){return b[a]}return a};WYMeditor.XhtmlParser.prototype.TagAttributes=function(a,b){if(WYMeditor.LEXER_SPECIAL==b){this._current_attribute=a}return true};WYMeditor.XhtmlParser.prototype.DoubleQuotedAttribute=function(a,b){if(WYMeditor.LEXER_UNMATCHED==b){this._tag_attributes[this._current_attribute]=a}return true};WYMeditor.XhtmlParser.prototype.SingleQuotedAttribute=function(a,b){if(WYMeditor.LEXER_UNMATCHED==b){this._tag_attributes[this._current_attribute]=a}return true};WYMeditor.XhtmlParser.prototype.UnquotedAttribute=function(a,b){this._tag_attributes[this._current_attribute]=a.replace(/^=/,"");return true};WYMeditor.XhtmlSaxListener=function(){this.output="";this.helper=new WYMeditor.XmlHelper();this._open_tags={};this.validator=WYMeditor.XhtmlValidator;this._tag_stack=[];this.avoided_tags=[];this.entities={" ":" ","¡":"¡","¢":"¢","£":"£","¤":"¤","¥":"¥","¦":"¦","§":"§","¨":"¨","©":"©","ª":"ª","«":"«","¬":"¬","­":"­","®":"®","¯":"¯","°":"°","±":"±","²":"²","³":"³","´":"´","µ":"µ","¶":"¶","·":"·","¸":"¸","¹":"¹","º":"º","»":"»","¼":"¼","½":"½","¾":"¾","¿":"¿","À":"À","Á":"Á","Â":"Â","Ã":"Ã","Ä":"Ä","Å":"Å","Æ":"Æ","Ç":"Ç","È":"È","É":"É","Ê":"Ê","Ë":"Ë","Ì":"Ì","Í":"Í","Î":"Î","Ï":"Ï","Ð":"Ð","Ñ":"Ñ","Ò":"Ò","Ó":"Ó","Ô":"Ô","Õ":"Õ","Ö":"Ö","×":"×","Ø":"Ø","Ù":"Ù","Ú":"Ú","Û":"Û","Ü":"Ü","Ý":"Ý","Þ":"Þ","ß":"ß","à":"à","á":"á","â":"â","ã":"ã","ä":"ä","å":"å","æ":"æ","ç":"ç","è":"è","é":"é","ê":"ê","ë":"ë","ì":"ì","í":"í","î":"î","ï":"ï","ð":"ð","ñ":"ñ","ò":"ò","ó":"ó","ô":"ô","õ":"õ","ö":"ö","÷":"÷","ø":"ø","ù":"ù","ú":"ú","û":"û","ü":"ü","ý":"ý","þ":"þ","ÿ":"ÿ","Œ":"Œ","œ":"œ","Š":"Š","š":"š","Ÿ":"Ÿ","ƒ":"ƒ","ˆ":"ˆ","˜":"˜","Α":"Α","Β":"Β","Γ":"Γ","Δ":"Δ","Ε":"Ε","Ζ":"Ζ","Η":"Η","Θ":"Θ","Ι":"Ι","Κ":"Κ","Λ":"Λ","Μ":"Μ","Ν":"Ν","Ξ":"Ξ","Ο":"Ο","Π":"Π","Ρ":"Ρ","Σ":"Σ","Τ":"Τ","Υ":"Υ","Φ":"Φ","Χ":"Χ","Ψ":"Ψ","Ω":"Ω","α":"α","β":"β","γ":"γ","δ":"δ","ε":"ε","ζ":"ζ","η":"η","θ":"θ","ι":"ι","κ":"κ","λ":"λ","μ":"μ","ν":"ν","ξ":"ξ","ο":"ο","π":"π","ρ":"ρ","ς":"ς","σ":"σ","τ":"τ","υ":"υ","φ":"φ","χ":"χ","ψ":"ψ","ω":"ω","ϑ":"ϑ","ϒ":"ϒ","ϖ":"ϖ"," ":" "," ":" "," ":" ","‌":"‌","‍":"‍","‎":"‎","‏":"‏","–":"–","—":"—","‘":"‘","’":"’","‚":"‚","“":"“","”":"”","„":"„","†":"†","‡":"‡","•":"•","…":"…","‰":"‰","′":"′","″":"″","‹":"‹","›":"›","‾":"‾","⁄":"⁄","€":"€","ℑ":"ℑ","℘":"℘","ℜ":"ℜ","™":"™","ℵ":"ℵ","←":"←","↑":"↑","→":"→","↓":"↓","↔":"↔","↵":"↵","⇐":"⇐","⇑":"⇑","⇒":"⇒","⇓":"⇓","⇔":"⇔","∀":"∀","∂":"∂","∃":"∃","∅":"∅","∇":"∇","∈":"∈","∉":"∉","∋":"∋","∏":"∏","∑":"∑","−":"−","∗":"∗","√":"√","∝":"∝","∞":"∞","∠":"∠","∧":"∧","∨":"∨","∩":"∩","∪":"∪","∫":"∫","∴":"∴","∼":"∼","≅":"≅","≈":"≈","≠":"≠","≡":"≡","≤":"≤","≥":"≥","⊂":"⊂","⊃":"⊃","⊄":"⊄","⊆":"⊆","⊇":"⊇","⊕":"⊕","⊗":"⊗","⊥":"⊥","⋅":"⋅","⌈":"⌈","⌉":"⌉","⌊":"⌊","⌋":"⌋","⟨":"〈","⟩":"〉","◊":"◊","♠":"♠","♣":"♣","♥":"♥","♦":"♦"};this.block_tags=["a","abbr","acronym","address","area","b","base","bdo","big","blockquote","body","button","caption","cite","code","col","colgroup","dd","del","div","dfn","dl","dt","em","fieldset","form","head","h1","h2","h3","h4","h5","h6","html","i","ins","kbd","label","legend","li","map","noscript","object","ol","optgroup","option","p","param","pre","q","samp","script","select","small","span","strong","style","sub","sup","table","tbody","td","textarea","tfoot","th","thead","title","tr","tt","ul","var","extends"];this.inline_tags=["br","hr","img","input"];return this};WYMeditor.XhtmlSaxListener.prototype.shouldCloseTagAutomatically=function(a,c,b){var b=b||false;if(a=="td"){if((b&&c=="tr")||(!b&&c=="td")){return true}}if(a=="option"){if((b&&c=="select")||(!b&&c=="option")){return true}}return false};WYMeditor.XhtmlSaxListener.prototype.beforeParsing=function(a){this.output="";return a};WYMeditor.XhtmlSaxListener.prototype.afterParsing=function(a){a=this.replaceNamedEntities(a);a=this.joinRepeatedEntities(a);a=this.removeEmptyTags(a);a=this.removeBrInPre(a);return a};WYMeditor.XhtmlSaxListener.prototype.replaceNamedEntities=function(b){for(var a in this.entities){b=b.replace(new RegExp(a,"g"),this.entities[a])}return b};WYMeditor.XhtmlSaxListener.prototype.joinRepeatedEntities=function(b){var a="em|strong|sub|sup|acronym|pre|del|address";return b.replace(new RegExp("</("+a+")><\\1>",""),"").replace(new RegExp("(s*<("+a+")>s*){2}(.*)(s*</\\2>s*){2}",""),"<$2>$3<$2>")};WYMeditor.XhtmlSaxListener.prototype.removeEmptyTags=function(a){return a.replace(new RegExp("<("+this.block_tags.join("|").replace(/\|td/,"").replace(/\|th/,"")+")>(<br />| | |\\s)*</\\1>","g"),"")};WYMeditor.XhtmlSaxListener.prototype.removeBrInPre=function(c){var b=c.match(new RegExp("<pre[^>]*>(.*?)</pre>","gmi"));if(b){for(var a=0;a<b.length;a++){c=c.replace(b[a],b[a].replace(new RegExp("<br />","g"),String.fromCharCode(13,10)))}}return c};WYMeditor.XhtmlSaxListener.prototype.getResult=function(){return this.output};WYMeditor.XhtmlSaxListener.prototype.getTagReplacements=function(){return{b:"strong",i:"em"}};WYMeditor.XhtmlSaxListener.prototype.addContent=function(a){this.output+=a};WYMeditor.XhtmlSaxListener.prototype.addComment=function(a){if(this.remove_comments){this.output+=a}};WYMeditor.XhtmlSaxListener.prototype.addScript=function(a){if(!this.remove_scripts){this.output+=a}};WYMeditor.XhtmlSaxListener.prototype.addCss=function(a){if(!this.remove_embeded_styles){this.output+=a}};WYMeditor.XhtmlSaxListener.prototype.openBlockTag=function(a,b){this.output+=this.helper.tag(a,this.validator.getValidTagAttributes(a,b),true)};WYMeditor.XhtmlSaxListener.prototype.inlineTag=function(a,b){this.output+=this.helper.tag(a,this.validator.getValidTagAttributes(a,b))};WYMeditor.XhtmlSaxListener.prototype.openUnknownTag=function(a,b){};WYMeditor.XhtmlSaxListener.prototype.closeBlockTag=function(a){this.output=this.output.replace(/<br \/>$/,"")+this._getClosingTagContent("before",a)+"</"+a+">"+this._getClosingTagContent("after",a)};WYMeditor.XhtmlSaxListener.prototype.closeUnknownTag=function(a){};WYMeditor.XhtmlSaxListener.prototype.closeUnopenedTag=function(a){this.output+="</"+a+">"};WYMeditor.XhtmlSaxListener.prototype.avoidStylingTagsAndAttributes=function(){this.avoided_tags=["div","span"];this.validator.skiped_attributes=["style"];this.validator.skiped_attribute_values=["MsoNormal","main1"];this._avoiding_tags_implicitly=true};WYMeditor.XhtmlSaxListener.prototype.allowStylingTagsAndAttributes=function(){this.avoided_tags=[];this.validator.skiped_attributes=[];this.validator.skiped_attribute_values=[];this._avoiding_tags_implicitly=false};WYMeditor.XhtmlSaxListener.prototype.isBlockTag=function(a){return !WYMeditor.Helper.contains(this.avoided_tags,a)&&WYMeditor.Helper.contains(this.block_tags,a)};WYMeditor.XhtmlSaxListener.prototype.isInlineTag=function(a){return !WYMeditor.Helper.contains(this.avoided_tags,a)&&WYMeditor.Helper.contains(this.inline_tags,a)};WYMeditor.XhtmlSaxListener.prototype.insertContentAfterClosingTag=function(a,b){this._insertContentWhenClosingTag("after",a,b)};WYMeditor.XhtmlSaxListener.prototype.insertContentBeforeClosingTag=function(a,b){this._insertContentWhenClosingTag("before",a,b)};WYMeditor.XhtmlSaxListener.prototype.fixNestingBeforeOpeningBlockTag=function(a,b){if(a!="li"&&(a=="ul"||a=="ol")&&this.last_tag&&!this.last_tag_opened&&this.last_tag=="li"){this.output=this.output.replace(/<\/li>$/,"");this.insertContentAfterClosingTag(a,"</li>")}};WYMeditor.XhtmlSaxListener.prototype._insertContentWhenClosingTag=function(b,a,c){if(!this["_insert_"+b+"_closing"]){this["_insert_"+b+"_closing"]=[]}if(!this["_insert_"+b+"_closing"][a]){this["_insert_"+b+"_closing"][a]=[]}this["_insert_"+b+"_closing"][a].push(c)};WYMeditor.XhtmlSaxListener.prototype._getClosingTagContent=function(b,a){if(this["_insert_"+b+"_closing"]&&this["_insert_"+b+"_closing"][a]&&this["_insert_"+b+"_closing"][a].length>0){return this["_insert_"+b+"_closing"][a].pop()}return""};WYMeditor.WymCssLexer=function(b,a){var a=(typeof a=="undefined"?true:a);jQuery.extend(this,new WYMeditor.Lexer(b,(a?"Ignore":"WymCss")));this.mapHandler("WymCss","Ignore");if(a==true){this.addEntryPattern("/\\\x2a[<\\s]*WYMeditor[>\\s]*\\\x2a/","Ignore","WymCss");this.addExitPattern("/\\\x2a[</\\s]*WYMeditor[>\\s]*\\\x2a/","WymCss")}this.addSpecialPattern("[\\sa-z1-6]*\\\x2e[a-z-_0-9]+","WymCss","WymCssStyleDeclaration");this.addEntryPattern("/\\\x2a","WymCss","WymCssComment");this.addExitPattern("\\\x2a/","WymCssComment");this.addEntryPattern("\x7b","WymCss","WymCssStyle");this.addExitPattern("\x7d","WymCssStyle");this.addEntryPattern("/\\\x2a","WymCssStyle","WymCssFeedbackStyle");this.addExitPattern("\\\x2a/","WymCssFeedbackStyle");return this};WYMeditor.WymCssParser=function(){this._in_style=false;this._has_title=false;this.only_wym_blocks=true;this.css_settings={classesItems:[],editorStyles:[],dialogStyles:[]};return this};WYMeditor.WymCssParser.prototype.parse=function(a,b){var b=(typeof b=="undefined"?this.only_wym_blocks:b);this._Lexer=new WYMeditor.WymCssLexer(this,b);this._Lexer.parse(a)};WYMeditor.WymCssParser.prototype.Ignore=function(a,b){return true};WYMeditor.WymCssParser.prototype.WymCssComment=function(b,a){if(b.match(/end[a-z0-9\s]*wym[a-z0-9\s]*/mi)){return false}if(a==WYMeditor.LEXER_UNMATCHED){if(!this._in_style){this._has_title=true;this._current_item={title:WYMeditor.Helper.trim(b)}}else{if(this._current_item[this._current_element]){if(!this._current_item[this._current_element].expressions){this._current_item[this._current_element].expressions=[b]}else{this._current_item[this._current_element].expressions.push(b)}}}this._in_style=true}return true};WYMeditor.WymCssParser.prototype.WymCssStyle=function(b,a){if(a==WYMeditor.LEXER_UNMATCHED){b=WYMeditor.Helper.trim(b);if(b!=""){this._current_item[this._current_element].style=b}}else{if(a==WYMeditor.LEXER_EXIT){this._in_style=false;this._has_title=false;this.addStyleSetting(this._current_item)}}return true};WYMeditor.WymCssParser.prototype.WymCssFeedbackStyle=function(b,a){if(a==WYMeditor.LEXER_UNMATCHED){this._current_item[this._current_element].feedback_style=b.replace(/^([\s\/\*]*)|([\s\/\*]*)$/gm,"")}return true};WYMeditor.WymCssParser.prototype.WymCssStyleDeclaration=function(b){b=b.replace(/^([\s\.]*)|([\s\.*]*)$/gm,"");var a="";if(b.indexOf(".")>0){var c=b.split(".");this._current_element=c[1];var a=c[0]}else{this._current_element=b}if(!this._has_title){this._current_item={title:(!a?"":a.toUpperCase()+": ")+this._current_element};this._has_title=true}if(!this._current_item[this._current_element]){this._current_item[this._current_element]={name:this._current_element}}if(a){if(!this._current_item[this._current_element].tags){this._current_item[this._current_element].tags=[a]}else{this._current_item[this._current_element].tags.push(a)}}return true};WYMeditor.WymCssParser.prototype.addStyleSetting=function(a){for(var b in a){var c=a[b];if(typeof c=="object"&&b!="title"){this.css_settings.classesItems.push({name:WYMeditor.Helper.trim(c.name),title:a.title,expr:WYMeditor.Helper.trim((c.expressions||c.tags).join(", "))});if(c.feedback_style){this.css_settings.editorStyles.push({name:"."+WYMeditor.Helper.trim(c.name),css:c.feedback_style})}if(c.style){this.css_settings.dialogStyles.push({name:"."+WYMeditor.Helper.trim(c.name),css:c.style})}}}};jQuery.fn.isPhantomNode=function(){if(this[0].nodeType==3){return !(/[^\t\n\r ]/.test(this[0].data))}return false};WYMeditor.isPhantomNode=function(a){if(a.nodeType==3){return !(/[^\t\n\r ]/.test(a.data))}return false};WYMeditor.isPhantomString=function(a){return !(/[^\t\n\r ]/.test(a))};jQuery.fn.parentsOrSelf=function(b){var a=this;if(a[0].nodeType==3){a=a.parents().slice(0,1)}if(a.filter(b).size()==1){return a}else{return a.parents(b).slice(0,1)}};WYMeditor.Helper={replaceAll:function(d,a,c){var b=new RegExp(a,"g");return(d.replace(b,c))},insertAt:function(b,a,c){return(b.substr(0,c)+a+b.substring(c))},trim:function(a){return a.replace(/^(\s*)|(\s*)$/gm,"")},contains:function(a,c){for(var b=0;b<a.length;b++){if(a[b]===c){return true}}return false},indexOf:function(a,d){var b=-1;for(var c=0;c<a.length;c++){if(a[c]==d){b=c;break}}return(b)},findByName:function(a,b){for(var c=0;c<a.length;c++){var d=a[c];if(d.name==b){return(d)}}return(null)}};WYMeditor.WymClassExplorer=function(a){this._wym=a;this._class="className";this._newLine="\r\n"};WYMeditor.WymClassExplorer.prototype.initIframe=function(iframe){this._iframe=iframe;this._doc=iframe.contentWindow.document;var styles=this._doc.styleSheets[0];var aCss=eval(this._options.editorStyles);this.addCssRules(this._doc,aCss);this._doc.title=this._wym._index;jQuery("html",this._doc).attr("dir",this._options.direction);jQuery(this._doc.body).html(this._wym._html);var wym=this;this._doc.body.onfocus=function(){wym._doc.designMode="on";wym._doc=iframe.contentWindow.document};this._doc.onbeforedeactivate=function(){wym.saveCaret()};this._doc.onkeyup=function(){wym.saveCaret();wym.keyup()};this._doc.onclick=function(){wym.saveCaret()};this._doc.body.onbeforepaste=function(){wym._iframe.contentWindow.event.returnValue=false};this._doc.body.onpaste=function(){wym._iframe.contentWindow.event.returnValue=false;wym.paste(window.clipboardData.getData("Text"))};if(this._initialized){if(jQuery.isFunction(this._options.preBind)){this._options.preBind(this)}this._wym.bindEvents();if(jQuery.isFunction(this._options.postInit)){this._options.postInit(this)}this.listen()}this._initialized=true;this._doc.designMode="on";try{this._doc=iframe.contentWindow.document}catch(e){}};WYMeditor.WymClassExplorer.prototype._exec=function(c,d){switch(c){case WYMeditor.INDENT:case WYMeditor.OUTDENT:var a=this.findUp(this.container(),WYMeditor.LI);if(a){var b=a.parentNode.parentNode;if(a.parentNode.childNodes.length>1||b.tagName.toLowerCase()==WYMeditor.OL||b.tagName.toLowerCase()==WYMeditor.UL){this._doc.execCommand(c)}}break;default:if(d){this._doc.execCommand(c,false,d)}else{this._doc.execCommand(c)}break}};WYMeditor.WymClassExplorer.prototype.selected=function(){var a=this._iframe.contentWindow.document.caretPos;if(a!=null){if(a.parentElement!=undefined){return(a.parentElement())}}};WYMeditor.WymClassExplorer.prototype.saveCaret=function(){this._doc.caretPos=this._doc.selection.createRange()};WYMeditor.WymClassExplorer.prototype.addCssRule=function(a,b){a.addRule(b.name,b.css)};WYMeditor.WymClassExplorer.prototype.insert=function(b){var a=this._doc.selection.createRange();if(jQuery(a.parentElement()).parents(this._options.iframeBodySelector).is("*")){try{a.pasteHTML(b)}catch(c){}}else{this.paste(b)}};WYMeditor.WymClassExplorer.prototype.wrap=function(d,b){var a=this._doc.selection.createRange();if(jQuery(a.parentElement()).parents(this._options.iframeBodySelector).is("*")){try{a.pasteHTML(d+a.text+b)}catch(c){}}};WYMeditor.WymClassExplorer.prototype.unwrap=function(){var a=this._doc.selection.createRange();if(jQuery(a.parentElement()).parents(this._options.iframeBodySelector).is("*")){try{var c=a.text;this._exec("Cut");a.pasteHTML(c)}catch(b){}}};WYMeditor.WymClassExplorer.prototype.keyup=function(){this._selected_image=null};WYMeditor.WymClassExplorer.prototype.setFocusToNode=function(c,b){var a=this._doc.selection.createRange();b=b?true:false;a.moveToElementText(c);a.collapse(b);a.select();c.focus()};WYMeditor.WymClassMozilla=function(a){this._wym=a;this._class="class";this._newLine="\n"};WYMeditor.WymClassMozilla.prototype.initIframe=function(iframe){var wym=this;this._iframe=iframe;this._doc=iframe.contentDocument;var styles=this._doc.styleSheets[0];var aCss=eval(this._options.editorStyles);this.addCssRules(this._doc,aCss);this._doc.title=this._wym._index;jQuery("html",this._doc).attr("dir",this._options.direction);this.html(this._wym._html);this.enableDesignMode();if(jQuery.isFunction(this._options.preBind)){this._options.preBind(this)}this._wym.bindEvents();jQuery(this._doc).bind("keydown",this.keydown);jQuery(this._doc).bind("keyup",this.keyup);jQuery(this._doc).bind("focus",function(){wym.enableDesignMode.call(wym)});if(jQuery.isFunction(this._options.postInit)){this._options.postInit(this)}this.listen()};WYMeditor.WymClassMozilla.prototype.html=function(a){if(typeof a==="string"){try{this._doc.designMode="off"}catch(b){}a=a.replace(/<em(\b[^>]*)>/gi,"<i$1>").replace(/<\/em>/gi,"</i>").replace(/<strong(\b[^>]*)>/gi,"<b$1>").replace(/<\/strong>/gi,"</b>");jQuery(this._doc.body).html(a);this.enableDesignMode()}else{return(jQuery(this._doc.body).html())}};WYMeditor.WymClassMozilla.prototype._exec=function(e,g){if(!this.selected()){return(false)}switch(e){case WYMeditor.INDENT:case WYMeditor.OUTDENT:var f=this.selected();var d=this._iframe.contentWindow.getSelection();var b=d.anchorNode;if(b.nodeName=="#text"){b=b.parentNode}f=this.findUp(f,WYMeditor.BLOCKS);b=this.findUp(b,WYMeditor.BLOCKS);if(f&&f==b&&f.tagName.toLowerCase()==WYMeditor.LI){var c=f.parentNode.parentNode;if(f.parentNode.childNodes.length>1||c.tagName.toLowerCase()==WYMeditor.OL||c.tagName.toLowerCase()==WYMeditor.UL){this._doc.execCommand(e,"",null)}}break;default:if(g){this._doc.execCommand(e,"",g)}else{this._doc.execCommand(e,"",null)}}var a=this.selected();if(a.tagName.toLowerCase()==WYMeditor.BODY){this._exec(WYMeditor.FORMAT_BLOCK,WYMeditor.P)}};WYMeditor.WymClassMozilla.prototype.selected=function(){var b=this._iframe.contentWindow.getSelection();var a=b.focusNode;if(a){if(a.nodeName=="#text"){return(a.parentNode)}else{return(a)}}else{return(null)}};WYMeditor.WymClassMozilla.prototype.addCssRule=function(a,b){a.insertRule(b.name+" {"+b.css+"}",a.cssRules.length)};WYMeditor.WymClassMozilla.prototype.keydown=function(b){var c=WYMeditor.INSTANCES[this.title];var a=null;if(b.ctrlKey){if(b.keyCode==66){c._exec(WYMeditor.BOLD);return false}if(b.keyCode==73){c._exec(WYMeditor.ITALIC);return false}}else{if(b.keyCode==13){if(!b.shiftKey){a=c.selected();if(a&&a.tagName.toLowerCase()==WYMeditor.PRE){b.preventDefault();c.insert("<p></p>")}}}}};WYMeditor.WymClassMozilla.prototype.keyup=function(b){var d=WYMeditor.INSTANCES[this.title];d._selected_image=null;var a=null;if(b.keyCode==13&&!b.shiftKey){jQuery(d._doc.body).children(WYMeditor.BR).remove()}if(b.keyCode!=8&&b.keyCode!=17&&b.keyCode!=46&&b.keyCode!=224&&!b.metaKey&&!b.ctrlKey){a=d.selected();var c=a.tagName.toLowerCase();if(c=="strong"||c=="b"||c=="em"||c=="i"||c=="sub"||c=="sup"||c=="a"){c=a.parentNode.tagName.toLowerCase()}if(c==WYMeditor.BODY){d._exec(WYMeditor.FORMAT_BLOCK,WYMeditor.P)}}};WYMeditor.WymClassMozilla.prototype.enableDesignMode=function(){if(this._doc.designMode=="off"){try{this._doc.designMode="on";this._doc.execCommand("styleWithCSS","",false)}catch(a){}}};WYMeditor.WymClassMozilla.prototype.openBlockTag=function(a,c){var c=this.validator.getValidTagAttributes(a,c);if(a=="span"&&c.style){var b=this.getTagForStyle(c.style);if(b){this._tag_stack.pop();var a=b;this._tag_stack.push(b);c.style=""}else{return}}this.output+=this.helper.tag(a,c,true)};WYMeditor.WymClassMozilla.prototype.getTagForStyle=function(a){if(/bold/.test(a)){return"strong"}if(/italic/.test(a)){return"em"}if(/sub/.test(a)){return"sub"}if(/super/.test(a)){return"sup"}return false};WYMeditor.WymClassOpera=function(a){this._wym=a;this._class="class";this._newLine="\r\n"};WYMeditor.WymClassOpera.prototype.initIframe=function(iframe){this._iframe=iframe;this._doc=iframe.contentWindow.document;var styles=this._doc.styleSheets[0];var aCss=eval(this._options.editorStyles);this.addCssRules(this._doc,aCss);this._doc.title=this._wym._index;jQuery("html",this._doc).attr("dir",this._options.direction);this._doc.designMode="on";this.html(this._wym._html);if(jQuery.isFunction(this._options.preBind)){this._options.preBind(this)}this._wym.bindEvents();jQuery(this._doc).bind("keydown",this.keydown);jQuery(this._doc).bind("keyup",this.keyup);if(jQuery.isFunction(this._options.postInit)){this._options.postInit(this)}this.listen()};WYMeditor.WymClassOpera.prototype._exec=function(a,b){if(b){this._doc.execCommand(a,false,b)}else{this._doc.execCommand(a)}};WYMeditor.WymClassOpera.prototype.selected=function(){var b=this._iframe.contentWindow.getSelection();var a=b.focusNode;if(a){if(a.nodeName=="#text"){return(a.parentNode)}else{return(a)}}else{return(null)}};WYMeditor.WymClassOpera.prototype.addCssRule=function(a,b){a.insertRule(b.name+" {"+b.css+"}",a.cssRules.length)};WYMeditor.WymClassOpera.prototype.keydown=function(a){var c=WYMeditor.INSTANCES[this.title];var b=c._iframe.contentWindow.getSelection();startNode=b.getRangeAt(0).startContainer;if(!jQuery(startNode).parentsOrSelf(WYMeditor.MAIN_CONTAINERS.join(","))[0]&&!jQuery(startNode).parentsOrSelf("li")&&a.keyCode!=WYMeditor.KEY.ENTER&&a.keyCode!=WYMeditor.KEY.LEFT&&a.keyCode!=WYMeditor.KEY.UP&&a.keyCode!=WYMeditor.KEY.RIGHT&&a.keyCode!=WYMeditor.KEY.DOWN&&a.keyCode!=WYMeditor.KEY.BACKSPACE&&a.keyCode!=WYMeditor.KEY.DELETE){c._exec(WYMeditor.FORMAT_BLOCK,WYMeditor.P)}};WYMeditor.WymClassOpera.prototype.keyup=function(a){var b=WYMeditor.INSTANCES[this.title];b._selected_image=null};WYMeditor.WymClassSafari=function(a){this._wym=a;this._class="class";this._newLine="\n"};WYMeditor.WymClassSafari.prototype.initIframe=function(iframe){this._iframe=iframe;this._doc=iframe.contentDocument;var styles=this._doc.styleSheets[0];var aCss=eval(this._options.editorStyles);this.addCssRules(this._doc,aCss);this._doc.title=this._wym._index;jQuery("html",this._doc).attr("dir",this._options.direction);this._doc.designMode="on";this.html(this._wym._html);if(jQuery.isFunction(this._options.preBind)){this._options.preBind(this)}this._wym.bindEvents();jQuery(this._doc).bind("keydown",this.keydown);jQuery(this._doc).bind("keyup",this.keyup);if(jQuery.isFunction(this._options.postInit)){this._options.postInit(this)}this.listen()};WYMeditor.WymClassSafari.prototype._exec=function(e,g){if(!this.selected()){return(false)}switch(e){case WYMeditor.INDENT:case WYMeditor.OUTDENT:var f=this.selected();var d=this._iframe.contentWindow.getSelection();var b=d.anchorNode;if(b.nodeName=="#text"){b=b.parentNode}f=this.findUp(f,WYMeditor.BLOCKS);b=this.findUp(b,WYMeditor.BLOCKS);if(f&&f==b&&f.tagName.toLowerCase()==WYMeditor.LI){var c=f.parentNode.parentNode;if(f.parentNode.childNodes.length>1||c.tagName.toLowerCase()==WYMeditor.OL||c.tagName.toLowerCase()==WYMeditor.UL){this._doc.execCommand(e,"",null)}}break;case WYMeditor.INSERT_ORDEREDLIST:case WYMeditor.INSERT_UNORDEREDLIST:this._doc.execCommand(e,"",null);var f=this.selected();var a=this.findUp(f,WYMeditor.MAIN_CONTAINERS);if(a){jQuery(a).replaceWith(jQuery(a).html())}break;default:if(g){this._doc.execCommand(e,"",g)}else{this._doc.execCommand(e,"",null)}}var a=this.selected();if(a&&a.tagName.toLowerCase()==WYMeditor.BODY){this._exec(WYMeditor.FORMAT_BLOCK,WYMeditor.P)}};WYMeditor.WymClassSafari.prototype.selected=function(){var b=this._iframe.contentWindow.getSelection();var a=b.focusNode;if(a){if(a.nodeName=="#text"){return(a.parentNode)}else{return(a)}}else{return(null)}};WYMeditor.WymClassSafari.prototype.addCssRule=function(a,b){a.insertRule(b.name+" {"+b.css+"}",a.cssRules.length)};WYMeditor.WymClassSafari.prototype.keydown=function(a){var b=WYMeditor.INSTANCES[this.title];if(a.ctrlKey){if(a.keyCode==66){b._exec(WYMeditor.BOLD);return false}if(a.keyCode==73){b._exec(WYMeditor.ITALIC);return false}}};WYMeditor.WymClassSafari.prototype.keyup=function(b){var d=WYMeditor.INSTANCES[this.title];d._selected_image=null;var a=null;if(b.keyCode==13&&!b.shiftKey){jQuery(d._doc.body).children(WYMeditor.BR).remove();a=d.selected();if(a&&a.tagName.toLowerCase()==WYMeditor.PRE){d._exec(WYMeditor.FORMAT_BLOCK,WYMeditor.P)}}if(b.keyCode==13&&b.shiftKey){d._exec("InsertLineBreak")}if(b.keyCode!=8&&b.keyCode!=17&&b.keyCode!=46&&b.keyCode!=224&&!b.metaKey&&!b.ctrlKey){a=d.selected();var c=a.tagName.toLowerCase();if(c=="strong"||c=="b"||c=="em"||c=="i"||c=="sub"||c=="sup"||c=="a"||c=="span"){c=a.parentNode.tagName.toLowerCase()}if(c==WYMeditor.BODY||c==WYMeditor.DIV){d._exec(WYMeditor.FORMAT_BLOCK,WYMeditor.P)}}};WYMeditor.WymClassSafari.prototype.openBlockTag=function(a,c){var c=this.validator.getValidTagAttributes(a,c);if(a=="span"&&c.style){var b=this.getTagForStyle(c.style);if(b){this._tag_stack.pop();var a=b;this._tag_stack.push(b);c.style="";if(typeof c["class"]=="string"){c["class"]=c["class"].replace(/apple-style-span/gi,"")}}else{return}}this.output+=this.helper.tag(a,c,true)};WYMeditor.WymClassSafari.prototype.getTagForStyle=function(a){if(/bold/.test(a)){return"strong"}if(/italic/.test(a)){return"em"}if(/sub/.test(a)){return"sub"}if(/super/.test(a)){return"sup"}return false};
\ No newline at end of file diff --git a/gstudio/static/gstudio/js/wymeditor/jquery.wymeditor.pack.js b/gstudio/static/gstudio/js/wymeditor/jquery.wymeditor.pack.js new file mode 100644 index 00000000..17b3268a --- /dev/null +++ b/gstudio/static/gstudio/js/wymeditor/jquery.wymeditor.pack.js @@ -0,0 +1 @@ +eval(function(p,a,c,k,e,d){e=function(c){return(c<a?'':e(parseInt(c/a)))+((c=c%a)>35?String.fromCharCode(c+29):c.toString(36))};if(!''.replace(/^/,String)){while(c--)d[e(c)]=k[c]||e(c);k=[function(e){return d[e]}];e=function(){return'\\w+'};c=1};while(c--)if(k[c])p=p.replace(new RegExp('\\b'+e(c)+'\\b','g'),k[c]);return p}('if(!f)l f={};(j(){if(!2l.4O||!4O.rD){l aj=["rC","rB","rA","rz","9w","ry","3z","rx","rw","rv","ru","rt","58","rs","cK","rr"];f.4O={};1h(l i=0;i<aj.Y;++i)f.4O[aj[i]]=j(){}}V f.4O=2l.4O})();D.53(f,{rq:"0.5-rp",2w:[],7U:[],5h:[],7Z:"F",3N:"{ro}",a2:"rn",dE:"{rm}",9s:"{rl}",9r:"{rk}",eX:"dw/",7E:"3a.1b",dm:"3a.js",eW:"3H/",a1:"{rj}",eV:"1K/3R/",9q:"{ri}",9t:"{rh}",a0:"{rg}",9Z:"{rf}",9R:"{rd}",9T:"{rc}",81:"{rb}",9S:"{ra}",9X:"{r9}",9O:"{r8}",80:"{r7}",9P:"{r6}",9Y:"{r5}",9I:"{r4}",9L:"{r3}",9K:"{r2}",9J:"{r1}",82:"{r0}",9W:"{qZ}",9V:"{qY}",9p:"{qX}",9o:"{qW}",dO:"3Q",3t:"1j",an:"N",P:"p",9F:"h1",9E:"h2",9D:"h3",9C:"h4",9B:"h5",9A:"h6",5q:"41",6b:"2J",A:"a",88:"br",du:"6Q",de:"3j",6d:"4F",5l:"5I",6o:"2I",6p:"ol",6r:"li",dP:"I",9c:"1P",7C:"1U",61:"M",7B:"5b",64:"aa",7R:"a9",7Q:"a7",7P:"a5",8a:"eU",89:"eT",9d:"eM",9b:"eL",dU:"eK",7L:"qV",dT:"eJ",6t:"ai",6s:"ah",dS:"eI",4q:"qU",7O:"af",qT:"ag",ar:"eP",as:"eQ",6n:1f 6c("p","h1","h2","h3","h4","h5","h6","41","2J"),5t:1f 6c("6L","2J","N","dl","2U","1M","h1","h2","h3","h4","h5","h6","hr","8E","ol","p","41","3j","2I","dd","dt","li","8D","4F","8C","5I","8B","6P"),3T:{av:8,aA:13,qS:35,qR:36,az:37,ay:38,ax:39,aw:40,qQ:1f 6c(37,38,39,40),au:46},qP:{qO:1,qN:2,qM:3},1g:j(5C,1Q){c.3f=f.2w.1X(c)-1;c.7T=5C;c.B=1Q;c.4R=D(5C).1H();if(c.B.O)c.4R=c.B.O;c.B.4L=c.B.4L||c.dz();c.B.5i=c.B.5i||c.B.4L+f.eX+c.B.3a+\'/\';c.B.7N=c.B.7N||c.dy();c.B.9x=c.B.9x||c.B.4L+f.eW;c.B.83=c.B.83||c.B.4L+f.eV;c.B.7M=c.B.7M||c.dx();c.56()}});D.fn.5k=j(1Q){1Q=D.53({O:"",4L:J,5i:J,7N:J,83:J,7M:J,1D:J,3p:J,3a:"3R",dn:R,7F:R,3H:"en",4S:"92",1u:"<N I=\'eH\'>"+"<N I=\'qL\'>"+f.9Z+"</N>"+"<N I=\'qK\'></N>"+"<N I=\'qJ\'>"+f.9Y+f.9X+"</N>"+"<N I=\'qI\'>"+f.82+f.9W+f.9V+"</N>"+"<N I=\'qH\'>"+f.a0+"</N>"+"</N>",ec:"<a I=\'qG\' "+"1P=\'91://ex.5k.ew/\'>f</a>",4n:"<N I=\'ae 5o\'>"+"<1K "+"1U=\'"+f.a1+"qF.O\' "+"4K=\'c.1B.qE.f.2w["+f.3N+"].5w(c)\'"+"></1K>"+"</N>",3g:[],eb:"<N I=\'ad 5o\'>"+"<h2>{qD}</h2>"+"<2I>"+f.9R+"</2I>"+"</N>",e5:"<li I=\'"+f.9S+"\'><a 1P=\'#\' F=\'"+f.9T+"\' M=\'"+f.81+"\'>"+f.81+"</a></li>",e6:[{\'F\':\'eU\',\'M\':\'qC\',\'1b\':\'qB\'},{\'F\':\'eT\',\'M\':\'qA\',\'1b\':\'qz\'},{\'F\':\'eS\',\'M\':\'eS\',\'1b\':\'qy\'},{\'F\':\'eR\',\'M\':\'eR\',\'1b\':\'qx\'},{\'F\':\'eQ\',\'M\':\'qw\',\'1b\':\'qv\'},{\'F\':\'eP\',\'M\':\'qu\',\'1b\':\'qt\'},{\'F\':\'ai\',\'M\':\'ai\',\'1b\':\'qs\'},{\'F\':\'ah\',\'M\':\'ah\',\'1b\':\'qr\'},{\'F\':\'eO\',\'M\':\'eO\',\'1b\':\'qq\'},{\'F\':\'eN\',\'M\':\'eN\',\'1b\':\'qp\'},{\'F\':\'eM\',\'M\':\'aa\',\'1b\':\'qo\'},{\'F\':\'ag\',\'M\':\'ag\',\'1b\':\'qn\'},{\'F\':\'eL\',\'M\':\'a9\',\'1b\':\'qm\'},{\'F\':\'eK\',\'M\':\'a7\',\'1b\':\'ql\'},{\'F\':\'eJ\',\'M\':\'a5\',\'1b\':\'qk\'},{\'F\':\'eI\',\'M\':\'82\',\'1b\':\'qj\'},{\'F\':\'af\',\'M\':\'af\',\'1b\':\'qi\'}],ea:"<N I=\'ac 5o\'>"+"<h2>{qh}</h2>"+"<2I>"+f.9I+"</2I>"+"</N>",e2:"<li I=\'"+f.9J+"\'>"+"<a 1P=\'#\' F=\'"+f.9L+"\'>"+f.9K+"</a></li>",e3:[{\'F\':\'P\',\'M\':\'qg\',\'1b\':\'qf\'},{\'F\':\'9F\',\'M\':\'qe\',\'1b\':\'qd\'},{\'F\':\'9E\',\'M\':\'qc\',\'1b\':\'qb\'},{\'F\':\'9D\',\'M\':\'qa\',\'1b\':\'q9\'},{\'F\':\'9C\',\'M\':\'q8\',\'1b\':\'q7\'},{\'F\':\'9B\',\'M\':\'q6\',\'1b\':\'q5\'},{\'F\':\'9A\',\'M\':\'q4\',\'1b\':\'q3\'},{\'F\':\'5q\',\'M\':\'q2\',\'1b\':\'q1\'},{\'F\':\'6b\',\'M\':\'q0\',\'1b\':\'pZ\'},{\'F\':\'5l\',\'M\':\'pY\',\'1b\':\'pX\'}],e9:"<N I=\'ab 5o\'>"+"<h2>{pW}</h2><2I>"+f.9O+"</2I></N>",e4:"<li I=\'pV"+f.80+"\'><a 1P=\'#\' F=\'"+f.80+"\'>"+f.9P+"</a></li>",3W:[],e7:"<N I=\'eF 5o\'>"+"<h2>{pU}</h2>"+"</N>",e8:"<N I=\'eG 5o\'>"+"<h2>{pT}</h2>"+"<4G I=\'eE\'></4G>"+"</N>",pS:".eH",pR:".ad",pQ:" 2I",pP:".ac",pO:".ab",9l:".eG",pN:".ae 1K",6w:".ae",dN:".eF",e0:".ad a",dZ:".ac a",dY:".ab a",9v:".eE",9e:".es",7D:".ep",60:".a8",7A:".eo",d6:".ee",dg:".eh",df:".eg",dc:".ej",d9:".ei",5Z:".6h",d2:".6g",d3:"",dk:".6i",di:".et",63:".er",dh:".ek",d7:".ef",d4:".ed",dX:".pM",dW:"4e",7S:"eD=no,eC=no,eB=no,eA=no"+",4J=ez,7h=ey,3o=0,2k=0",dR:"eD=no,eC=no,eB=no,eA=no"+",pL=pK,4J=ez,7h=ey,3o=0,2k=0",1I:"<!pJ O pI \'-//pH//ev pG 1.0 pF//pE\'"+" \'91://ex.pD.ew/pC/eu/ev/eu-pB.pA\'>"+"<O 3z=\'"+f.9t+"\'><2T>"+"<2u 7w=\'3p\' 1e=\'X/1b\' 8Z=\'7f\'"+" 1P=\'"+f.9s+"\' />"+"<M>"+f.9p+"</M>"+"<2h 1e=\'X/90\'"+" 1U=\'"+f.9q+"\'></2h>"+"<2h 1e=\'X/90\'"+" 1U=\'"+f.9r+"\'></2h>"+"</2T>"+f.9o+"</O>",dK:"<1j I=\'6f et\'"+" 4K=\'f.5g("+f.3N+")\'"+">"+"<1M>"+"<2U>"+"<1y 1e=\'5V\' I=\'6i\' Q=\'"+f.64+"\' />"+"<3k>{aa}</3k>"+"<N I=\'1O\'>"+"<1p>{eq}</1p>"+"<1y 1e=\'X\' I=\'es\' Q=\'\' 2G=\'40\' />"+"</N>"+"<N I=\'1O\'>"+"<1p>{el}</1p>"+"<1y 1e=\'X\' I=\'a8\' Q=\'\' 2G=\'40\' />"+"</N>"+"<N I=\'1O 1O-a6\'>"+"<1y I=\'6h\' 1e=\'2t\'"+" Q=\'{86}\' />"+"<1y I=\'6g\' 1e=\'2t\'"+"Q=\'{85}\' />"+"</N>"+"</2U>"+"</1M>"+"</1j>",dJ:"<1j I=\'6f er\'"+" 4K=\'f.5g("+f.3N+")\'"+">"+"<1M>"+"<2U>"+"<1y 1e=\'5V\' I=\'6i\' Q=\'"+f.7R+"\' />"+"<3k>{a9}</3k>"+"<N I=\'1O\'>"+"<1p>{eq}</1p>"+"<1y 1e=\'X\' I=\'ep\' Q=\'\' 2G=\'40\' />"+"</N>"+"<N I=\'1O\'>"+"<1p>{pz}</1p>"+"<1y 1e=\'X\' I=\'eo\' Q=\'\' 2G=\'40\' />"+"</N>"+"<N I=\'1O\'>"+"<1p>{el}</1p>"+"<1y 1e=\'X\' I=\'a8\' Q=\'\' 2G=\'40\' />"+"</N>"+"<N I=\'1O 1O-a6\'>"+"<1y I=\'6h\' 1e=\'2t\'"+" Q=\'{86}\' />"+"<1y I=\'6g\' 1e=\'2t\'"+"Q=\'{85}\' />"+"</N>"+"</2U>"+"</1M>"+"</1j>",dI:"<1j I=\'6f ek\'"+" 4K=\'f.5g("+f.3N+")\'"+">"+"<1M>"+"<2U>"+"<1y 1e=\'5V\' I=\'6i\' Q=\'"+f.7Q+"\' />"+"<3k>{a7}</3k>"+"<N I=\'1O\'>"+"<1p>{py}</1p>"+"<1y 1e=\'X\' I=\'ej\' Q=\'\' 2G=\'40\' />"+"</N>"+"<N I=\'1O\'>"+"<1p>{px}</1p>"+"<1y 1e=\'X\' I=\'ei\' Q=\'\' 2G=\'40\' />"+"</N>"+"<N I=\'1O\'>"+"<1p>{pw}</1p>"+"<1y 1e=\'X\' I=\'eh\' Q=\'3\' 2G=\'3\' />"+"</N>"+"<N I=\'1O\'>"+"<1p>{pv}</1p>"+"<1y 1e=\'X\' I=\'eg\' Q=\'2\' 2G=\'3\' />"+"</N>"+"<N I=\'1O 1O-a6\'>"+"<1y I=\'6h\' 1e=\'2t\'"+" Q=\'{86}\' />"+"<1y I=\'6g\' 1e=\'2t\'"+"Q=\'{85}\' />"+"</N>"+"</2U>"+"</1M>"+"</1j>",dH:"<1j I=\'6f ef\'"+" 4K=\'f.5g("+f.3N+")\'"+">"+"<1M>"+"<1y 1e=\'5V\' I=\'6i\' Q=\'"+f.7P+"\' />"+"<2U>"+"<3k>{a5}</3k>"+"<N I=\'1O\'>"+"<4G I=\'ee\' 7d=\'10\' 7e=\'50\'></4G>"+"</N>"+"<N I=\'1O\'>"+"<1y I=\'6h\' 1e=\'2t\'"+" Q=\'{86}\' />"+"<1y I=\'6g\' 1e=\'2t\'"+"Q=\'{85}\' />"+"</N>"+"</2U>"+"</1M>"+"</1j>",dG:"<1j I=\'6f ed\'"+" 4K=\'f.5g("+f.3N+")\'"+"></1j>",4A:[],69:"{",68:"}",a4:1a,3y:1a,3w:1a,9f:1a,97:1a},1Q);o c.dq(j(){1f f.1g(D(c),1Q)})};D.53({pu:j(i){o(f.2w[i])}});f.1g.u.56=j(){if(D.84.pt){l 4o=1f f.2D(c)}V if(D.84.ps){l 4o=1f f.2C(c)}V if(D.84.pr){l 4o=1f f.3S(c)}V if(D.84.pq){l 4o=1f f.3d(c)}if(4o){if(D.2A(c.B.a4))c.B.a4(c);l a3=1f f.1l();D.53(a3,4o);c.3Z=1f f.1t(a3);if(c.B.1D||c.B.3p){c.dv()}c.4P=1f f.2W();1h(l 6U in 4o){c[6U]=4o[6U]}c.2p=D(c.7T).e1().5G(c.B.1u).5U().do(\'pp\'+c.3f);if(D.2A(D.fn.4z)){D.4z(c.2p.5W(0),f.a2,c.3f);D.4z(c.7T.5W(0),f.a2,c.3f)}l h=f.1L;l 4n=c.B.4n;4n=h.1k(4n,f.3N,c.3f);4n=h.1k(4n,f.a1,c.B.83);l 1u=D(c.2p).O();1u=h.1k(1u,f.a0,c.B.ec);1u=h.1k(1u,f.9Z,c.B.eb);1u=h.1k(1u,f.9Y,c.B.ea);1u=h.1k(1u,f.9X,c.B.e9);1u=h.1k(1u,f.82,c.B.e8);1u=h.1k(1u,f.9W,4n);1u=h.1k(1u,f.9V,c.B.e7);l 9U=2B(c.B.e6);l 9Q="";1h(l i=0;i<9U.Y;i++){l 5n=9U[i];if(5n.F&&5n.M)l 4m=c.B.e5;l 4m=h.1k(4m,f.9T,5n.F);4m=h.1k(4m,f.81,c.B.69+5n.M+c.B.68);4m=h.1k(4m,f.9S,5n.1b);9Q+=4m}1u=h.1k(1u,f.9R,9Q);l 6e=2B(c.B.3W);l 9N="";1h(l i=0;i<6e.Y;i++){l 4k=6e[i];if(4k.F&&4k.M)l 4j=c.B.e4;4j=h.1k(4j,f.80,4k.F);4j=h.1k(4j,f.9P,4k.M);9N+=4j}1u=h.1k(1u,f.9O,9N);l 9M=2B(c.B.e3);l 9H="";1h(l i=0;i<9M.Y;i++){l 5m=9M[i];if(5m.F&&5m.M)l 4l=c.B.e2;4l=h.1k(4l,f.9L,5m.F);4l=h.1k(4l,f.9K,c.B.69+5m.M+c.B.68);4l=h.1k(4l,f.9J,5m.1b);9H+=4l}1u=h.1k(1u,f.9I,9H);1u=c.9n(1u);D(c.2p).O(1u);D(c.2p).4g(c.B.9l).e1();c.7F()}};f.1g.u.5v=j(){l E=c;D(c.2p).4g(c.B.e0).4e(j(){E.1E.1B.4W();E.dV(D(c).1v(f.7Z));o(J)});D(c.2p).4g(c.B.dZ).4e(j(){E.L(D(c).1v(f.7Z));o(J)});D(c.2p).4g(c.B.9v).2x(j(){D(E.H.1j).O(D(c).1H())}).4W(j(){D(c).6a(\'9u\')}).po(j(){D(c).6a(\'9u\')});D(c.2p).4g(c.B.dY).4e(j(){l 6e=2B(E.B.3W);l 9G=D(c).1v(f.7Z);l 4k=f.1L.aL(6e,9G);if(4k){l 4y=4k.aT;E.6a(9G,4y)}E.1E.1B.4W();o(J)});D(c.B.dX).3x(c.B.dW,j(){E.67()})};f.1g.u.pn=j(){o(c.H!=1a)};f.1g.u.ct=j(){o(c.2p)};f.1g.u.O=j(O){if(1q O===\'3Q\')D(c.H.1j).O(O);V o(D(c.H.1j).O())};f.1g.u.1s=j(){o c.3Z.3X(c.O())};f.1g.u.dV=j(1F){3e(1F){1i f.9d:l L=c.L();if(L||c.2j)c.4M(f.64);1n;1i f.9b:c.4M(f.7R);1n;1i f.dU:c.4M(f.7Q);1n;1i f.dT:c.4M(f.7P);1n;1i f.dS:c.67();c.dC();1n;1i f.7O:c.4M(f.7O,c.B.dR);1n;3R:c.1C(1F);1n}};f.1g.u.L=j(3q){if(3q){l L=1a;if(3q.1o()==f.5l){L=c.L();3e(L.1r.1o()){1i f.6d:1i f.5l:1n;3R:l 7Y=1f 6c(f.6d,f.5l);L=c.2N(c.L(),7Y);1n}if(L!=1a){3q=(L.1r.1o()==f.6d)?f.5l:f.6d;c.9y(L,3q);c.67()}}V{l 7Y=1f 6c(f.P,f.9F,f.9E,f.9D,f.9C,f.9B,f.9A,f.5q,f.6b);L=c.2N(c.L(),7Y);if(L){l 3O=1a;if(3q.1o()==f.6b){l 2J=c.2N(c.L(),f.6b);if(2J==1a){3O=c.H.5Y(3q);L.1z.dQ(3O,L);3O.dr(L);c.5y(3O.pm)}V{l 7X=2J.6q;l 9z=7X.Y;l 7W=1a;if(9z>0)7W=7X.4v(0);1h(l x=0;x<9z;x++){2J.1z.dQ(7X.4v(0),2J)}2J.1z.pl(2J);if(7W)c.5y(7W)}}V c.9y(L,3q);c.67()}}}V o(c.1d())};f.1g.u.6a=j(4j,4y){l L=(c.2j?c.2j:D(c.1d()));L=D(L).4V(4y);D(L).6a(4j);if(!D(L).1v(f.dP))D(L).pk(c.5x)};f.1g.u.2N=j(1c,51){if(1c){l 4i=1c.1r.1o();if(1q(51)==f.dO){77(4i!=51&&4i!=f.3t){1c=1c.1z;4i=1c.1r.1o()}}V{l 7V=J;77(!7V&&4i!=f.3t){1h(l i=0;i<51.Y;i++){if(4i==51[i]){7V=R;1n}}if(!7V){1c=1c.1z;4i=1c.1r.1o()}}}if(4i!=f.3t)o(1c);V o(1a)}V o(1a)};f.1g.u.9y=j(1c,3q){l 3O=c.H.5Y(3q);l O=D(1c).O();1c.1z.pj(3O,1c);D(3O).O(O);c.5y(3O)};f.1g.u.9n=j(4N){if(!f.7U[c.B.3H]){4u{2B(D.9j({9i:c.B.9x+c.B.3H+\'.js\',9h:J}).9g)}4t(e){f.4O.9w("f: 9w 77 ph cX cI.");o 4N}}1h(l 1T in f.7U[c.B.3H]){4N=f.1L.1k(4N,c.B.69+1T+c.B.68,f.7U[c.B.3H][1T])};o(4N)};f.1g.u.dD=j(4N){o(c.B.69+4N+c.B.68)};f.1g.u.2n=j(dM){D(c.2p).4g(c.B.dN).O(dM)};f.1g.u.67=j(){l O=c.1s();D(c.7T).1H(O);D(c.2p).4g(c.B.9v).by(\'.9u\').1H(O);};f.1g.u.4M=j(65,7S,dF){l dL=7S||c.1V.B.7S;l 9m=2l.5X(\'\',\'4M\',dL);if(9m){l 4h="";3e(65){1i(f.64):4h=c.B.dK;1n;1i(f.7R):4h=c.B.dJ;1n;1i(f.7Q):4h=c.B.dI;1n;1i(f.7P):4h=c.B.dH;1n;1i(f.7O):4h=c.B.dG;1n;3R:4h=dF}l h=f.1L;l 1I=c.B.1I;1I=h.1k(1I,f.dE,c.B.4L);1I=h.1k(1I,f.9t,c.B.4S);1I=h.1k(1I,f.9s,c.B.5i+f.7E);1I=h.1k(1I,f.9r,c.B.7N);1I=h.1k(1I,f.9q,c.B.7M);1I=h.1k(1I,f.9p,c.dD(65));1I=h.1k(1I,f.9o,4h);1I=h.1k(1I,f.3N,c.3f);1I=c.9n(1I);l 4f=9m.3A;4f.pg(1I);4f.5e()}};f.1g.u.dC=j(){D(c.2p).4g(c.B.9l).pf()};f.1g.u.dj=j(){l dB=1f pe();o("E-"+dB.pd())};f.1g.u.5B=j(dA){l 3M;l L=c.1d();l aP=dA.8m(c.4s+c.4s);l 4x=1f 2O(c.4s,"g");if(L&&L.1r.1o()!=f.3t){1h(x=aP.Y-1;x>=0;x--){3M=aP[x];3M=3M.S(4x,"<br />");D(L).5G("<p>"+3M+"</p>")}}V{1h(x=0;x<aP.Y;x++){3M=aP[x];3M=3M.S(4x,"<br />");D(c.H.1j).d8("<p>"+3M+"</p>")}}};f.1g.u.8e=j(O){if(c.1E.1B.2z().1x!=1a){c.1C(f.7L,O)}V{c.5B(O)}};f.1g.u.aE=j(2k,2E){if(c.1E.1B.2z().1x!=1a){c.1C(f.7L,2k+c.1E.1B.2z().93()+2E)}};f.1g.u.aD=j(){if(c.1E.1B.2z().1x!=1a){c.1C(f.7L,c.1E.1B.2z().93())}};f.1g.u.5y=j(1c,3U){l 1S=c.H.4Y(),3V=c.1E.1B.2z();3U=3U?0:1;1S.pc(1c);3V.pb(1S);3V.aC(1c,3U);c.1E.1B.4W()};f.1g.u.4T=j(4f,2r){l 1D=4f.4U[0];if(1D){1h(l i=0;i<2r.Y;i++){l 1Y=2r[i];if(1Y.F&&1Y.1b)c.5r(1D,1Y)}}};f.1g.u.dz=j(){o D(D.7G(D(\'2h\'),j(s){o(s.1U&&s.1U.K(/7K\\.5k(\\.7J|\\.7I|\\.7H)?\\.js(\\?.*)?$/))})).1v(\'1U\').S(/7K\\.5k(\\.7J|\\.7I|\\.7H)?\\.js(\\?.*)?$/,\'\')};f.1g.u.dy=j(){o D(D.7G(D(\'2h\'),j(s){o(s.1U&&s.1U.K(/7K\\.5k(\\.7J|\\.7I|\\.7H)?\\.js(\\?.*)?$/))})).1v(\'1U\')};f.1g.u.dx=j(){o D(D.7G(D(\'2h\'),j(s){o(s.1U&&s.1U.K(/7K(-(.*)){0,1}(\\.7J|\\.7I|\\.7H)?\\.js(\\?.*)?$/))})).1v(\'1U\')};f.1g.u.pa=j(){o D(D.7G(D(\'2u\'),j(s){o(s.1P&&s.1P.K(/5k\\/dw\\/(.*)7f\\.1b(\\?.*)?$/))})).1v(\'1P\')};f.1g.u.dv=j(){l 5j=1f f.3D();if(c.B.3p){5j.3X(D.9j({9i:c.B.3p,9h:J}).9g)}V{5j.3X(c.B.1D,J)}if(c.B.3W.Y==0){c.B.3W=5j.4B.3W}if(c.B.3g.Y==0){c.B.3g=5j.4B.3g}if(c.B.4A.Y==0){c.B.4A=5j.4B.4A}};f.1g.u.5u=j(){D(c.H.1j).3x("7z",c.7z)};f.1g.u.7z=j(W){l E=f.2w[c.p9.M];E.2j=(W.ds.1r.1o()==f.du)?W.ds:1a};f.dp=j(1P){l 2u=3A.5Y(\'2u\');2u.7w=\'3p\';2u.1P=1P;l 2T=D(\'2T\').5W(0);2T.dr(2u)};f.1g.u.7F=j(){if(c.B.7F&&!f.5h[c.B.3a]){l 9k=J;l 4x=1f 2O(c.B.3a+\'\\/\'+f.7E+\'$\');D(\'2u\').dq(j(){if(c.1P.K(4x))9k=R});if(!9k)f.dp(c.B.5i+f.7E)}D(c.2p).do("p8"+c.B.3a);if(c.B.dn&&!f.5h[c.B.3a]){2B(D.9j({9i:c.B.5i+f.dm,9h:J}).9g)}if(f.5h[c.B.3a]&&f.5h[c.B.3a].56)f.5h[c.B.3a].56(c)};f.5g=j(5a){l E=2l.p7.f.2w[5a];l 4f=2l.3A;l 1d=E.1d();l 65=D(E.B.dk).1H();l 62=E.dj();3e(65){1i f.64:if(1d&&1d.1r&&1d.1r.1o!=f.A)1d=D(1d).4V(f.A);if(!1d&&E.2j)1d=D(E.2j).4V(f.A);1n}if(D.2A(E.B.9f))E.B.9f(E,2l);l 1D=4f.4U[0];l 2r=2B(E.B.4A);E.4T(4f,2r);if(1d){D(E.B.9e).1H(D(1d).1v(f.9c));D(E.B.7D).1H(D(1d).1v(f.7C));D(E.B.60).1H(D(1d).1v(f.61));D(E.B.7A).1H(D(1d).1v(f.7B))}if(E.2j){D(E.B.63+" "+E.B.7D).1H(D(E.2j).1v(f.7C));D(E.B.63+" "+E.B.60).1H(D(E.2j).1v(f.61));D(E.B.63+" "+E.B.7A).1H(D(E.2j).1v(f.7B))}D(E.B.di+" "+E.B.5Z).4e(j(){l 5f=D(E.B.9e).1H();if(5f.Y>0){l 2u;if(1d[0]&&1d[0].1r.1o()==f.A){2u=1d}V{E.1C(f.9d,62);2u=D("a[1P="+62+"]",E.H.1j)}2u.1v(f.9c,5f).1v(f.61,D(E.B.60).1H())}2l.5e()});D(E.B.63+" "+E.B.5Z).4e(j(){l 5f=D(E.B.7D).1H();if(5f.Y>0){E.1C(f.9b,62);D("6Q[1U$="+62+"]",E.H.1j).1v(f.7C,5f).1v(f.61,D(E.B.60).1H()).1v(f.7B,D(E.B.7A).1H())}2l.5e()});D(E.B.dh+" "+E.B.5Z).4e(j(){l 9a=D(E.B.dg).1H();l 99=D(E.B.df).1H();if(9a>0&&99>0){l 3j=E.H.5Y(f.de);l 98=1a;l p6=1a;l da=D(E.B.dc).1H();l db=3j.p5();db.94=da;1h(x=0;x<9a;x++){98=3j.p4(x);1h(y=0;y<99;y++){98.p3(y)}}D(3j).1v(\'cr\',D(E.B.d9).1H());l 1c=D(E.2N(E.L(),f.6n)).5W(0);if(!1c||!1c.1z)D(E.H.1j).d8(3j);V D(1c).5G(3j)}2l.5e()});D(E.B.d7+" "+E.B.5Z).4e(j(){l d5=D(E.B.d6).1H();E.5B(d5);2l.5e()});D(E.B.d4+" "+E.B.d3).O(E.1s());D(E.B.d2).7z(j(){2l.5e()});if(D.2A(E.B.97))E.B.97(E,2l)};f.2W=j(){c.7y=3A.5Y(\'N\');o c};f.2W.u.C=j(F,1Q,5X){1Q=1Q||J;5X=5X||J;o\'<\'+F+(1Q?c.96(1Q):\'\')+(5X?\'>\':\' />\')};f.2W.u.p2=j(F,2b,1Q){1Q=1Q||J;o\'<\'+F+(1Q?c.96(1Q):\'\')+\'>\'+2b+\'</\'+F+\'>\'};f.2W.u.p1=j(2b){o\'<![p0[\'+2b+\']]>\'};f.2W.u.cZ=j(3L){o c.d1(c.cY(3L))};f.2W.u.d1=j(d0){o d0.S(/&oZ;([a-z]+|(#\\d+));/ig,"&$1;")};f.2W.u.96=j(1Q){l 3L=c;3L.95=\'\';1h(l 1T in 1Q){l oY=\'\';l Q=1Q[1T];if(1q Q!=\'j\'&&Q.Y>0){if(ck(1T)==1T&&1q Q==\'4C\'){1T=Q.oX();Q=Q.4Q()}if(1T!=\'\'&&Q!=\'\'){3L.95+=\' \'+1T+\'="\'+3L.cZ(Q)+\'"\'}}}o 3L.95};f.2W.u.cY=j(3Q,7x){c.7y.94=3Q;c.7y.oW=3Q;l 1N=c.7y.94;if(1q 7x==\'2d\'){if(7x!=J)1N=1N.S(\'"\',\'&oV;\');if(7x==R)1N=1N.S(\'"\',\'&#oU;\')}o 1N};f.2W.u.oT=j(5c){l 1N=[];l 2g=5c.8m(/((=\\s*")(")("))|((=\\s*\\\')(\\\')(\\\'))|((=\\s*[^>\\s]*))/g);if(2g.93()!=5c){1h(l k in 2g){l v=2g[k];if(1q v!=\'j\'&&v.Y!=0){l re=1f 2O(\'(\\\\w+)\\\\s*\'+v);if(K=5c.K(re)){l Q=v.S(/^[\\s=]+/,"");l 5d=Q.oS(0);5d=5d==\'"\'?\'"\':(5d=="\'"?"\'":\'\');if(5d!=\'\'){Q=5d==\'"\'?Q.S(/^"|"+$/g,\'\'):Q.S(/^\'|\'+$/g,\'\')}5c=5c.S(K[0],\'\');1N.1X([K[1],Q])}}}}o 1N};f.bz={"8V":{"oR":{"59":["55","2T","O","7i","1R","2h","1m","M"],"G":["I","id","1m","M","cW","cV"]},"cX":{"59":["55","br","hr","1K","1R","2h"],"G":{"3z":["92","cL"],"0":"3H","1":"3L:3H"}},"cU":{"G":{"cW":/^(\\w){1}$/,"cV":/^(\\d)+$/}}},"8W":{"2l":{"7b":["1j"],"G":["4K","oQ"]},"1M":{"7b":["1M","1y","4G","4X","a","1p","2t"],"G":["oP","oO","oN","oM","oL","aK"]},"cU":{"59":["55","6S","br","cu","oK","2T","O","1K","7i","1R","2h","1m","M"],"G":["oJ","oI","aJ"]},"oH":{"59":["55","6S","br","2T","O","7i","1R","2h","1m","M"],"G":["aI","oG","oF","oE","oD","oC","oB"]}},"1J":{"a":{"G":{"0":"7g","1":"cS","2":"1P","3":"cE","4":"F","7w":/^(7v|cT|3p|2L|5U|7n|7r|5a|7p|7q|7s|7m|7l|7u|7o|7t||7k|7j)+$/,"cD":/^(7v|cT|3p|2L|5U|7n|7r|5a|7p|7q|7s|7m|7l|7u|7o|7t||7k|7j)+$/,"cR":/^(cQ|cP|8F|cO|cN|cM)$/,"5":"1e"}},"0":"6T","1":"8y","2":"6L","bv":{"G":{"0":"5b","1":"cS","2":"1P","oA":/^(R|J)$/,"cR":/^(cQ|cP|8F|cO|cN|cM)$/},"2c":["5b"]},"3":"b","55":{"G":["1P"],"2c":["1P"]},"6S":{"G":{"3z":/^(92|cL)$/},"2c":["3z"]},"4":"bu","2J":{"G":["54"]},"5":"1j","6":"br","2t":{"G":{"2Z":/^(2Z)$/,"1e":/^(2t|cH|cG)$/,"0":"Q"},"3K":"1M"},"7":"bt","8":"54","9":"bs","6R":{"G":{"4d":/^(2E|2k|4c|4b)$/,"0":"2Y","1":"4a","3r":/^(\\d)+$/,"49":/^(3o|48|47|45)$/,"2":"4J"},"3K":"5K"},"5K":{"G":{"4d":/^(2E|2k|4c|4b)$/,"0":"2Y","1":"4a","3r":/^(\\d)+$/,"49":/^(3o|48|47|45)$/,"2":"4J"}},"10":"dd","8x":{"G":{"0":"54","cF":/^([0-9]){8}/}},"11":"N","12":"bq","13":"dl","14":"dt","15":"em","2U":{"3K":"1M"},"1M":{"G":{"0":"5N","1":"5Q","2":"5Q-7g","3":"oz","oy":/^(5W|ox)$/},"2c":["5N"]},"2T":{"G":["cK"]},"16":"h1","17":"h2","18":"h3","19":"h4","20":"h5","21":"h6","22":"hr","O":{"G":["ow"]},"23":"i","6Q":{"G":["5b","1U","7h","ov","ou","cB","4J"],"2c":["5b","1U"]},"1y":{"G":{"0":"5Q","1":"5b","cJ":/^(cJ)$/,"2Z":/^(2Z)$/,"ot":/^(\\d)+$/,"2":"F","8X":/^(8X)$/,"2G":/^(\\d)+$/,"3":"1U","1e":/^(2t|os|cI|5V|bx|oq|op|cH|cG|X)$/,"4":"Q"},"3K":"1M"},"bp":{"G":{"0":"54","cF":/^([0-9]){8}/}},"24":"bo","1p":{"G":["1h"],"3K":"1M"},"25":"3k","26":"li","2u":{"G":{"0":"7g","1":"1P","2":"cE","8Z":/^(8Y|cv|cw|cx|7f|oo|,|;|)+$/i,"7w":/^(7v|7u|7t|7s|7r|7q|7p|7o|cC|5a|5U|7n|7m|2L|3p|7l||7k|7j)+$/i,"cD":/^(7v|7u|7t|7s|7r|7q|7p|7o|cC|5a|5U|7n|7m|2L|3p|7l||7k|7j)+$/i,"3":"1e"},"3K":"2T"},"bn":{"G":["id","F"],"2c":["id"]},"7i":{"G":{"0":"2b","91-bw":/^(2b\\-1e|om|ok|oj\\-oi)$/i,"1":"F","2":"oh"},"2c":["2b"]},"27":"8E","4C":{"G":["og","of","oe","od","4z","oc","7h","F","ob","1e","cB","4J"]},"28":"ol","bm":{"G":{"0":"1p","2Z":/^(2Z)$/},"2c":["1p"]},"6O":{"G":{"0":"1p","2Z":/^(2Z)$/,"1d":/^(1d)$/,"1":"Q"},"3K":"4X"},"29":"p","1R":{"G":{"0":"1e","cA":/^(4z|oa|4C)$/,"1":"cA","2":"Q"},"2c":["F"]},"30":"41","q":{"G":["54"]},"31":"bl","2h":{"G":{"1e":/^(X\\/o9|X\\/90|X\\/o8|X\\/o7|X\\/o6|X\\/3L)$/,"0":"7g","cz":/^(cz)$/,"1":"1U"},"2c":["1e"]},"4X":{"G":{"2Z":/^(2Z)$/,"cy":/^(cy)$/,"0":"F","1":"2G"},"3K":"1M"},"32":"bk","33":"3r","34":"3c","1m":{"G":{"0":"1e","8Z":/^(7f|o5|o4|cx|o3|cw|cv|o2|8Y)$/},"2c":["1e"]},"35":"3b","36":"3P","3j":{"G":{"0":"cs","1":"o1","2":"o0","cu":/^(nZ|nY|nX|nW|nV|nU|nT|ct|cs)$/,"nS":/^(nR|nQ|7d|7e|8Y)$/,"3":"cr","4":"4J"}},"8D":{"G":{"4d":/^(2E|2k|4c|4b)$/,"0":"2Y","1":"4a","49":/^(3o|48|47|45)$/}},"4F":{"G":{"0":"6T","4d":/^(2k|2E|4c|4b|2Y)$/,"1":"cq","2":"2Y","3":"4a","cp":/^(\\d)+$/,"4":"co","cn":/^(\\d)+$/,"1G":/^(6R|5K|1O|cm)$/,"49":/^(3o|48|47|45)$/}},"4G":{"G":["7e","7d","2Z","F","8X"],"2c":["7e","7d"],"3K":"1M"},"8C":{"G":{"4d":/^(2E|2k|4c|4b)$/,"0":"2Y","1":"4a","49":/^(3o|48|47)$/,"2":"45"}},"5I":{"G":{"0":"6T","4d":/^(2k|2E|4c|4b|2Y)$/,"1":"cq","2":"2Y","3":"4a","cp":/^(\\d)+$/,"4":"co","cn":/^(\\d)+$/,"1G":/^(6R|5K|1O|cm)$/,"49":/^(3o|48|47|45)$/}},"8B":{"G":{"4d":/^(2E|2k|4c|4b)$/,"0":"2Y","1":"4a","49":/^(3o|48|47|45)$/}},"37":"M","6P":{"G":{"4d":/^(2E|2k|4c|4b|2Y)$/,"0":"2Y","1":"4a","49":/^(3o|48|47|45)$/}},"38":"bj","39":"2I","40":"l"},6G:[],6F:[],5p:j(C,G){l 7c={};l cl=c.cf(C);1h(l 2i in G){l Q=G[2i];l h=f.1L;if(!h.2F(c.6G,2i)&&!h.2F(c.6F,Q)){if(1q Q!=\'j\'&&h.2F(cl,2i)){if(c.ch(C,2i)){if(c.cg(C,2i,Q)){7c[2i]=Q}}V{7c[2i]=Q}}}}o 7c},ce:j(C){l 1N=[];if(c.1J[C]&&c.1J[C][\'G\']){1h(k in c.1J[C][\'G\']){1N.1X(ck(k)==k?c.1J[C][\'G\'][k]:k)}}o 1N},ci:j(){l 1N=[];1h(l 1T in c.8W){1N.1X(c.8W[1T])}1h(l 1T in c.8V){1N.1X(c.8V[1T])}o 1N},cj:j(C){if(c.1J[C]){o R}1h(l 1T in c.1J){if(c.1J[1T]==C){o R}}o J},cd:j(C){l 8T=[];if(c.cj(C)){l 8U=c.ci();1h(l 1T in 8U){l 3J=8U[1T];if(1q 3J==\'4C\'){l h=f.1L;if((3J[\'59\']&&h.2F(3J[\'59\'],C))||(3J[\'7b\']&&!h.2F(3J[\'7b\'],C))){nP}l 7a=3J[\'G\']?3J[\'G\']:3J[\'nO\'];1h(l k in 7a){8T.1X(1q 7a[k]!=\'3Q\'?k:7a[k])}}}}o 8T},ch:j(C,2i){o c.1J[C]&&((c.1J[C][\'G\']&&c.1J[C][\'G\'][2i])||(c.1J[C][\'2c\']&&f.1L.2F(c.1J[C][\'2c\'],2i)))},cg:j(C,2i,Q){if(c.1J[C]&&(c.1J[C][\'G\']&&c.1J[C][\'G\'][2i]&&Q.Y>0&&!Q.K(c.1J[C][\'G\'][2i]))||(c.1J[C]&&c.1J[C][\'2c\']&&f.1L.2F(c.1J[C][\'2c\'],2i)&&Q.Y==0)){o J}o 1q c.1J[C]!=\'2d\'},cf:j(C){if(!c.5T){c.5T={}}if(!c.5T[C]){c.5T[C]=c.ce(C).nN(c.cd(C))}o c.5T[C]}};f.2X=j(78){c.4I=78;c.44=[];c.8S=[];c.5S=1a;o c};f.2X.u.43=j(3n,1p){1p=1p||R;l 58=c.44.Y;c.44[58]=3n;c.8S[58]=1p;c.5S=1a};f.2X.u.K=j(cc){if(c.44.Y==0){o[J,\'\']}l 2g=cc.K(c.cb());if(!2g){o[J,\'\']}l K=2g[0];1h(l i=1;i<2g.Y;i++){if(2g[i]){o[c.8S[i-1],K]}}o[R,2g[0]]};f.2X.u.cb=j(){if(c.5S==1a){1h(l i=0,58=c.44.Y;i<58;i++){c.44[i]=\'(\'+c.c9(c.ca(c.44[i]).S(/([\\/\\(\\)])/g,\'\\\\$1\'))+\')\'}c.5S=1f 2O(c.44.6u("|"),c.c1())}o c.5S};f.2X.u.ca=j(79){o 79.S(/\\(\\?(i|m|s|x|U)\\)/,\'~~~~~~c8\\$1~~~~~~\').S(/\\(\\?(\\-[i|m|s|x|U])\\)/,\'~~~~~~c7\\$1~~~~~~\').S(/\\(\\?\\=(.*)\\)/,\'~~~~~~c6\\$1~~~~~~\').S(/\\(\\?\\!(.*)\\)/,\'~~~~~~c5\\$1~~~~~~\').S(/\\(\\?\\<\\=(.*)\\)/,\'~~~~~~c4\\$1~~~~~~\').S(/\\(\\?\\<\\!(.*)\\)/,\'~~~~~~c3\\$1~~~~~~\').S(/\\(\\?\\:(.*)\\)/,\'~~~~~~c2\\$1~~~~~~\')};f.2X.u.c9=j(79){o 79.S(/~~~~~~c8(.{1})~~~~~~/,"(?\\$1)").S(/~~~~~~c7(.{2})~~~~~~/,"(?\\$1)").S(/~~~~~~c6(.*)~~~~~~/,"(?=\\$1)").S(/~~~~~~c5(.*)~~~~~~/,"(?!\\$1)").S(/~~~~~~c4(.*)~~~~~~/,"(?<=\\$1)").S(/~~~~~~c3(.*)~~~~~~/,"(?<!\\$1)").S(/~~~~~~c2(.*)~~~~~~/,"(?:\\$1)")};f.2X.u.c1=j(){o(c.4I?"m":"mi")};f.5R=j(2L){c.57=[2L];o c};f.5R.u.8O=j(){o c.57[c.57.Y-1]};f.5R.u.8Q=j(2a){c.57.1X(2a)};f.5R.u.8R=j(){if(c.57.Y==1){o J}c.57.4Q();o R};f.71=1;f.bZ=2;f.3E=3;f.5E=4;f.6Y=5;f.2f=j(3Z,2L,78){2L=2L||\'5Q\';c.4I=78||J;c.2o={};c.8P=3Z;c.42=1f f.5R(2L);c.2K={};c.2K[2L]=2L;o c};f.2f.u.43=j(3n,T){l T=T||"5Q";if(1q c.2o[T]==\'2d\'){c.2o[T]=1f f.2X(c.4I)}c.2o[T].43(3n);if(1q c.2K[T]==\'2d\'){c.2K[T]=T}};f.2f.u.2Q=j(3n,T,5P){if(1q c.2o[T]==\'2d\'){c.2o[T]=1f f.2X(c.4I)}c.2o[T].43(3n,5P);if(1q c.2K[5P]==\'2d\'){c.2K[5P]=5P}};f.2f.u.2H=j(3n,T){if(1q c.2o[T]==\'2d\'){c.2o[T]=1f f.2X(c.4I)}c.2o[T].43(3n,"bX");if(1q c.2K[T]==\'2d\'){c.2K[T]=T}};f.2f.u.4E=j(3n,T,5O){if(1q c.2o[T]==\'2d\'){c.2o[T]=1f f.2X(c.4I)}c.2o[T].43(3n,\'bV\'+5O);if(1q c.2K[5O]==\'2d\'){c.2K[5O]=5O}};f.2f.u.8q=j(T,75){c.2K[T]=75};f.2f.u.3X=j(1w){if(1q c.8P==\'2d\'){o J}l Y=1w.Y;l 3I;77(1q(3I=c.bR(1w))==\'4C\'){l 1w=3I[0];l 76=3I[1];l 3m=3I[2];l T=3I[3];if(!c.c0(76,3m,T)){o J}if(1w==\'\'){o R}if(1w.Y==Y){o J}Y=1w.Y}if(!3I){o J}o c.4H(1w,f.3E)};f.2f.u.c0=j(76,3m,T){T=T||J;if(!c.4H(76,f.3E)){o J}if(1q T==\'nM\'){o c.4H(3m,f.bZ)}if(c.bY(T)){if(!c.4H(3m,f.5E)){o J}o c.42.8R()}if(c.bW(T)){c.42.8Q(c.bU(T));if(!c.4H(3m,f.6Y)){o J}o c.42.8R()}c.42.8Q(T);o c.4H(3m,f.71)};f.2f.u.bY=j(T){o(T==="bX")};f.2f.u.bW=j(T){o(T.6y(0,1)=="bV")};f.2f.u.bU=j(T){o T.6y(1)};f.2f.u.4H=j(2b,bS){if(2b===\'\'){o R}l bT=c.42.8O();l 75=c.2K[bT];l 1N;2B(\'1N = c.8P.\'+75+\'(2b, bS);\');o 1N};f.2f.u.bR=j(1w){l 3m=c.2o[c.42.8O()].K(1w);l K=3m[1];l 5N=3m[0];if(5N){l 8N=1w.8h(K);l bQ=1w.aN(0,8N);1w=1w.6y(8N+K.Y);o[1w,bQ,K,5N]}o R};f.3l=j(3Z){D.53(c,1f f.2f(3Z,\'3h\'));c.8q(\'3h\',\'3h\');c.bP();c.56();o c};f.3l.u.56=j(){};f.3l.u.bP=j(){c.bO(\'3h\');c.bN(\'3h\');c.bM(\'3h\');c.bL(\'3h\')};f.3l.u.bO=j(1G){c.2Q("<!--",1G,\'8M\');c.2H("-->",\'8M\')};f.3l.u.bN=j(1G){c.2Q("<2h",1G,\'8L\');c.2H("</2h>",\'8L\')};f.3l.u.bM=j(1G){c.2Q("<1m",1G,\'8K\');c.2H("</1m>",\'8K\')};f.3l.u.bL=j(1G){c.4E("<\\\\s*[a-5F-9:\\-]+\\\\s*>",1G,\'72\');c.2Q("<[a-5F-9:\\-]+"+\'[\\\\\\/ \\\\\\>]+\',1G,\'72\');c.bK(\'72\');c.4E("</\\\\s*[a-5F-9:\\-]+\\\\s*>",1G,\'bG\')};f.3l.u.bK=j(1G){c.4E(\'\\\\s+\',1G,\'52\');c.bJ(1G);c.2H(\'/>\',1G);c.2H(\'>\',1G)};f.3l.u.bJ=j(1G){c.4E("\\\\s*[a-z-8p-9]*:?[a-z-8p-9]+\\\\s*(?=\\=)\\\\s*",1G,\'bB\');c.2Q(\'=\\\\s*"\',1G,\'6X\');c.43("\\\\\\\\\\"",\'6X\');c.2H(\'"\',\'6X\');c.2Q("=\\\\s*\'",1G,\'6W\');c.43("\\\\\\\\\'",\'6W\');c.2H("\'",\'6W\');c.4E(\'=\\\\s*[^>\\\\s]*\',1G,\'bA\')};f.1t=j(bI,T){l T=T||\'3h\';c.6D=1f f.3l(c);c.Z=bI;c.42=T;c.nL=[];c.nK=\'\';c.nJ=\'\';o c};f.1t.u.3X=j(1w){c.6D.3X(c.6N(1w));o c.6M(c.Z.bb())};f.1t.u.6N=j(1w){if(1w.K(/I="b3"/)||1w.K(/ns = "nI:nH-nG-nF/)){c.Z.b4()}o c.Z.6N(1w)};f.1t.u.6M=j(3I){if(c.Z.8w){c.Z.b2()}o c.Z.6M(3I)};f.1t.u.52=j(K,2a){o R};f.1t.u.3h=j(X){c.Z.ba(X);o R};f.1t.u.8M=j(K,2n){o c.74(K,2n,\'6J\')};f.1t.u.8L=j(K,2n){o c.74(K,2n,\'6I\')};f.1t.u.8K=j(K,2n){o c.74(K,2n,\'6H\')};f.1t.u.74=j(K,2a,1e){3e(2a){1i f.71:c.5M=K;1n;1i f.3E:c.5M+=K;1n;1i f.5E:3e(1e){1i\'6J\':c.Z.6J(c.5M+K);1n;1i\'6I\':c.Z.6I(c.5M+K);1n;1i\'6H\':c.Z.6H(c.5M+K);1n}}o R};f.1t.u.72=j(K,2a){3e(2a){1i f.71:c.bH=c.6Z(K);c.5L={};1n;1i f.6Y:c.8J(c.6Z(K));1n;1i f.5E:c.8J(c.bH,c.5L)}o R};f.1t.u.bG=j(K,2a){c.8G(c.6Z(K));o R};f.1t.u.8J=j(C,G){l G=G||{};c.bE(C);if(c.Z.8v(C)){c.Z.4p.1X(C);c.Z.aY(C,G);c.Z.6k(C,G);c.8I(C)}V if(c.Z.b1(C)){c.Z.b9(C,G)}V{c.Z.b8(C,G);c.8I(C)}c.Z.6E=C;c.Z.8t=R;c.Z.nE=G};f.1t.u.8G=j(C){if(c.bF(C)){c.bD(C);if(c.Z.8v(C)){l 70=c.Z.4p.4Q();if(70==J){o}V if(70!=C){C=70}c.Z.b7(C)}V{c.Z.b6(C)}}V{c.Z.b5(C)}c.Z.6E=C;c.Z.8t=J};f.1t.u.8I=j(C){c.Z.2V[C]=c.Z.2V[C]||0;c.Z.2V[C]++};f.1t.u.bF=j(C){if(c.Z.2V[C]){c.Z.2V[C]--;if(c.Z.2V[C]==0){c.Z.2V[C]=2d}o R}o J};f.1t.u.bE=j(2v){c.8H(2v,J)};f.1t.u.bD=j(C){c.8H(C,R)};f.1t.u.8H=j(2v,2S){l 2S=2S||J;if(c.Z.2V){1h(l C in c.Z.2V){l bC=c.Z.2V[C];if(bC>0&&c.Z.bi(C,2v,2S)){c.8G(C,R)}}}};f.1t.u.6K=j(){o c.Z.6K()};f.1t.u.6Z=j(C){C=C.S(/^([\\s<\\/>]*)|([\\s<\\/>]*)$/gm,\'\').1o();l 3i=c.Z.6K();if(3i[C]){o 3i[C]}o C};f.1t.u.bB=j(K,2a){if(f.6Y==2a){c.6V=K}o R};f.1t.u.6X=j(K,2a){if(f.3E==2a){c.5L[c.6V]=K}o R};f.1t.u.6W=j(K,2a){if(f.3E==2a){c.5L[c.6V]=K}o R};f.1t.u.bA=j(K,2a){c.5L[c.6V]=K.S(/^=/,\'\');o R};f.1l=j(){c.1W=\'\';c.4P=1f f.2W();c.2V={};c.3s=f.bz;c.4p=[];c.5H=[];c.8A={\'&bd;\':\'&#be;\',\'&nD;\':\'&#nC;\',\'&nB;\':\'&#nA;\',\'&nz;\':\'&#ny;\',\'&nx;\':\'&#nw;\',\'&nv;\':\'&#nt;\',\'&nr;\':\'&#nq;\',\'&np;\':\'&#nn;\',\'&nm;\':\'&#nl;\',\'&nk;\':\'&#nj;\',\'&nh;\':\'&#ng;\',\'&nf;\':\'&#nd;\',\'&by;\':\'&#nc;\',\'&nb;\':\'&#na;\',\'&n9;\':\'&#n8;\',\'&n7;\':\'&#n6;\',\'&n5;\':\'&#n4;\',\'&n3;\':\'&#n2;\',\'&n1;\':\'&#n0;\',\'&mZ;\':\'&#mY;\',\'&mX;\':\'&#mW;\',\'&mV;\':\'&#mU;\',\'&mT;\':\'&#mS;\',\'&mR;\':\'&#mQ;\',\'&mP;\':\'&#mO;\',\'&mN;\':\'&#mM;\',\'&mL;\':\'&#mK;\',\'&mJ;\':\'&#mI;\',\'&mH;\':\'&#mG;\',\'&mF;\':\'&#mE;\',\'&mD;\':\'&#mC;\',\'&mB;\':\'&#mA;\',\'&mz;\':\'&#my;\',\'&mx;\':\'&#mw;\',\'&mv;\':\'&#mt;\',\'&ms;\':\'&#mr;\',\'&mq;\':\'&#mp;\',\'&mo;\':\'&#mn;\',\'&mm;\':\'&#ml;\',\'&mk;\':\'&#mj;\',\'&mh;\':\'&#mg;\',\'&mf;\':\'&#me;\',\'&md;\':\'&#mc;\',\'&mb;\':\'&#ma;\',\'&m9;\':\'&#m8;\',\'&m7;\':\'&#m6;\',\'&m5;\':\'&#m4;\',\'&m3;\':\'&#m2;\',\'&m1;\':\'&#m0;\',\'&lZ;\':\'&#lY;\',\'&lX;\':\'&#lW;\',\'&lV;\':\'&#lU;\',\'&lT;\':\'&#lS;\',\'&lR;\':\'&#lQ;\',\'&lP;\':\'&#lO;\',\'&lN;\':\'&#lM;\',\'&lL;\':\'&#lK;\',\'&lJ;\':\'&#lI;\',\'&lH;\':\'&#lG;\',\'&lF;\':\'&#lE;\',\'&lD;\':\'&#lC;\',\'&lB;\':\'&#lA;\',\'&lz;\':\'&#ly;\',\'&lx;\':\'&#lw;\',\'&lv;\':\'W\',\'&lu;\':\'&#lt;\',\'&ls;\':\'&#lr;\',\'&lq;\':\'&#lp;\',\'&lo;\':\'&#ln;\',\'&lm;\':\'&#ll;\',\'&lk;\':\'&#lj;\',\'&lh;\':\'&#lg;\',\'&lf;\':\'&#ld;\',\'&lc;\':\'&#lb;\',\'&la;\':\'&#l9;\',\'&l8;\':\'&#l7;\',\'&l6;\':\'&#l5;\',\'&l4;\':\'&#l3;\',\'&l2;\':\'&#l1;\',\'&l0;\':\'&#kZ;\',\'&kY;\':\'&#kX;\',\'&kW;\':\'&#kV;\',\'&kU;\':\'&#kT;\',\'&kS;\':\'&#kR;\',\'&kQ;\':\'&#kP;\',\'&kO;\':\'&#kN;\',\'&kM;\':\'&#kL;\',\'&kK;\':\'&#kJ;\',\'&kI;\':\'&#kH;\',\'&kG;\':\'&#kF;\',\'&kE;\':\'&#kD;\',\'&kC;\':\'&#kB;\',\'&kA;\':\'&#kz;\',\'&ky;\':\'&#kx;\',\'&kw;\':\'&#kv;\',\'&ku;\':\'&#kt;\',\'&ks;\':\'&#kr;\',\'&kq;\':\'&#kp;\',\'&ko;\':\'&#kn;\',\'&km;\':\'&#kl;\',\'&kk;\':\'&#kj;\',\'&ki;\':\'&#kh;\',\'&8F;\':\'&#kg;\',\'&kf;\':\'&#ke;\',\'&kd;\':\'&#kc;\',\'&kb;\':\'&#ka;\',\'&k9;\':\'&#k8;\',\'&k7;\':\'&#k6;\',\'&k5;\':\'&#k4;\',\'&k3;\':\'&#k2;\',\'&k1;\':\'&#k0;\',\'&jZ;\':\'&#jY;\',\'&jX;\':\'&#jW;\',\'&jV;\':\'&#jU;\',\'&jT;\':\'&#jS;\',\'&jR;\':\'&#jQ;\',\'&jP;\':\'&#jO;\',\'&jN;\':\'&#jM;\',\'&jL;\':\'&#jK;\',\'&jJ;\':\'&#jI;\',\'&jH;\':\'&#jG;\',\'&jF;\':\'&#jE;\',\'&jD;\':\'&#jC;\',\'&jB;\':\'&#jA;\',\'&jz;\':\'&#jy;\',\'&jx;\':\'&#jw;\',\'&jv;\':\'&#ju;\',\'&jt;\':\'&#jr;\',\'&jq;\':\'&#jp;\',\'&jo;\':\'&#jn;\',\'&jm;\':\'&#jl;\',\'&jk;\':\'&#jj;\',\'&ji;\':\'&#jh;\',\'&jg;\':\'&#jf;\',\'&je;\':\'&#jd;\',\'&jc;\':\'&#jb;\',\'&ja;\':\'&#j9;\',\'&j8;\':\'&#j7;\',\'&j6;\':\'&#j5;\',\'μ\':\'&#j4;\',\'ν\':\'&#j3;\',\'&j2;\':\'&#j1;\',\'&j0;\':\'&#iZ;\',\'π\':\'&#iY;\',\'&iX;\':\'&#iW;\',\'&iV;\':\'&#iU;\',\'&iT;\':\'&#iS;\',\'&iR;\':\'&#iQ;\',\'&iP;\':\'&#iO;\',\'&iN;\':\'&#iM;\',\'&iL;\':\'&#iK;\',\'&iJ;\':\'&#iI;\',\'&iH;\':\'&#iG;\',\'&iF;\':\'&#iE;\',\'&iD;\':\'&#iC;\',\'&iB;\':\'&#iA;\',\'&iz;\':\'&#iy;\',\'&ix;\':\'&#iw;\',\'&iv;\':\'&#iu;\',\'⁢\':\'&#ir;\',\'&iq;\':\'&#ip;\',\'&io;\':\'&#im;\',\'&il;\':\'&#ik;\',\'&ij;\':\'&#ii;\',\'&ih;\':\'&#ie;\',\'⁣\':\'&#ib;\',\'&ia;\':\'&#i9;\',\'&i8;\':\'&#i7;\',\'&i6;\':\'&#i5;\',\'&i4;\':\'&#i3;\',\'&i2;\':\'&#i1;\',\'&i0;\':\'&#hZ;\',\'&hY;\':\'&#hX;\',\'&hW;\':\'&#hV;\',\'&hU;\':\'&#hT;\',\'&hS;\':\'&#hR;\',\'&hQ;\':\'&#hP;\',\'&hO;\':\'&#hN;\',\'&hM;\':\'&#hL;\',\'&hK;\':\'&#hJ;\',\'&hI;\':\'&#hH;\',\'&hG;\':\'&#hF;\',\'&hE;\':\'&#hD;\',\'&bx;\':\'&#hC;\',\'&hB;\':\'&#hA;\',\'&hz;\':\'&#hy;\',\'&hx;\':\'&#hw;\',\'&hv;\':\'&#hu;\',\'&ht;\':\'&#hs;\',\'&hq;\':\'&#hp;\',\'&ho;\':\'&#hn;\',\'&hm;\':\'&#hl;\',\'&hk;\':\'&#hj;\',\'&hi;\':\'&#hh;\',\'&hg;\':\'&#hf;\',\'&he;\':\'&#hd;\',\'&hc;\':\'&#hb;\',\'&ha;\':\'&#h9;\',\'&h8;\':\'&#h7;\',\'&h0;\':\'&#gZ;\',\'&gY;\':\'&#gX;\',\'&gW;\':\'&#gV;\',\'&gU;\':\'&#gT;\',\'&gS;\':\'&#gR;\',\'&gQ;\':\'&#gP;\',\'&gO;\':\'&#gN;\',\'∋\':\'&#gM;\',\'&gL;\':\'&#gK;\',\'&gJ;\':\'&#gI;\',\'&gH;\':\'&#gG;\',\'&gF;\':\'&#gE;\',\'&gD;\':\'&#gC;\',\'&6U;\':\'&#gB;\',\'&gA;\':\'&#gz;\',\'&gy;\':\'&#gx;\',\'&gw;\':\'&#gv;\',\'∨\':\'&#gu;\',\'>\':\'&#gs;\',\'&gr;\':\'&#gq;\',\'&gp;\':\'&#go;\',\'&gn;\':\'&#gl;\',\'&gk;\':\'&#gj;\',\'&gh;\':\'&#gg;\',\'&gf;\':\'&#gd;\',\'≠\':\'&#gc;\',\'&bw;\':\'&#gb;\',\'≤\':\'&#ga;\',\'≥\':\'&#g9;\',\'&3b;\':\'&#g8;\',\'&3P;\':\'&#g7;\',\'&g6;\':\'&#g5;\',\'&g4;\':\'&#g3;\',\'&g2;\':\'&#g1;\',\'&g0;\':\'&#fZ;\',\'&fY;\':\'&#fX;\',\'&fW;\':\'&#fV;\',\'&fU;\':\'&#fT;\',\'&fS;\':\'&#fR;\',\'&fQ;\':\'&#fP;\',\'&fO;\':\'&#fN;\',\'&fM;\':\'&#fL;\',\'&3H;\':\'&#fK;\',\'&fJ;\':\'&#fI;\',\'&fH;\':\'&#fG;\',\'&fF;\':\'&#fE;\',\'&fD;\':\'&#fC;\',\'&fB;\':\'&#fA;\',\'&fz;\':\'&#fy;\'};c.8u=["a","6T","8y","6L","bv","b","55","6S","bu","2J","1j","2t","bt","54","bs","6R","5K","dd","8x","N","bq","dl","dt","em","2U","1M","2T","h1","h2","h3","h4","h5","h6","O","i","bp","bo","1p","3k","li","bn","8E","4C","ol","bm","6O","p","1R","41","q","bl","2h","4X","bk","3r","3c","1m","3b","3P","3j","8D","4F","4G","8C","5I","8B","M","6P","bj","2I","l","fx"];c.b0=["br","hr","6Q","1y"];o c};f.1l.u.bi=j(C,5J,2S){l 2S=2S||J;if(C==\'4F\'){if((2S&&5J==\'6P\')||(!2S&&5J==\'4F\')){o R}}if(C==\'6O\'){if((2S&&5J==\'4X\')||(!2S&&5J==\'6O\')){o R}}o J};f.1l.u.6N=j(1w){c.1W=\'\';o 1w};f.1l.u.6M=j(1s){1s=c.bh(1s);1s=c.bg(1s);1s=c.bf(1s);1s=c.bc(1s);o 1s};f.1l.u.bh=j(1s){1h(l 8z in c.8A){1s=1s.S(1f 2O(8z,\'g\'),c.8A[8z])}o 1s};f.1l.u.bg=j(1s){l 3i=\'em|3c|3b|3P|8y|41|8x|6L\';o 1s.S(1f 2O(\'<\\/(\'+3i+\')><\\\\1>\',\'\'),\'\').S(1f 2O(\'(\\s*<(\'+3i+\')>\\s*){2}(.*)(\\s*<\\/\\\\2>\\s*){2}\',\'\'),\'<\\$2>\\$3<\\$2>\')};f.1l.u.bf=j(1s){o 1s.S(1f 2O(\'<(\'+c.8u.6u("|").S(/\\|4F/,\'\').S(/\\|5I/,\'\')+\')>(<br \\/>|&#be;|&bd;|\\\\s)*<\\/\\\\1>\',\'g\'),\'\')};f.1l.u.bc=j(1s){l 2g=1s.K(1f 2O(\'<41[^>]*>(.*?)<\\/41>\',\'fw\'));if(2g){1h(l i=0;i<2g.Y;i++){1s=1s.S(2g[i],2g[i].S(1f 2O(\'<br \\/>\',\'g\'),fv.fu(13,10)))}}o 1s};f.1l.u.bb=j(){o c.1W};f.1l.u.6K=j(){o{\'b\':\'3c\',\'i\':\'em\'}};f.1l.u.ba=j(X){c.1W+=X};f.1l.u.6J=j(X){if(c.ft){c.1W+=X}};f.1l.u.6I=j(X){if(!c.fs){c.1W+=X}};f.1l.u.6H=j(X){if(!c.fr){c.1W+=X}};f.1l.u.6k=j(C,G){c.1W+=c.4P.C(C,c.3s.5p(C,G),R)};f.1l.u.b9=j(C,G){c.1W+=c.4P.C(C,c.3s.5p(C,G))};f.1l.u.b8=j(C,G){};f.1l.u.b7=j(C){c.1W=c.1W.S(/<br \\/>$/,\'\')+c.8r(\'aZ\',C)+"</"+C+">"+c.8r(\'5G\',C)};f.1l.u.b6=j(C){};f.1l.u.b5=j(C){c.1W+="</"+C+">"};f.1l.u.b4=j(){c.5H=[\'N\',\'3r\'];c.3s.6G=[\'1m\'];c.3s.6F=[\'b3\',\'fq\'];c.8w=R};f.1l.u.b2=j(){c.5H=[];c.3s.6G=[];c.3s.6F=[];c.8w=J};f.1l.u.8v=j(C){o!f.1L.2F(c.5H,C)&&f.1L.2F(c.8u,C)};f.1l.u.b1=j(C){o!f.1L.2F(c.5H,C)&&f.1L.2F(c.b0,C)};f.1l.u.aX=j(C,2b){c.8s(\'5G\',C,2b)};f.1l.u.fp=j(C,2b){c.8s(\'aZ\',C,2b)};f.1l.u.aY=j(C,G){if(C!=\'li\'&&(C==\'2I\'||C==\'ol\')&&c.6E&&!c.8t&&c.6E==\'li\'){c.1W=c.1W.S(/<\\/li>$/,\'\');c.aX(C,\'</li>\')}};f.1l.u.8s=j(2R,C,2b){if(!c[\'3G\'+2R+\'3F\']){c[\'3G\'+2R+\'3F\']=[]}if(!c[\'3G\'+2R+\'3F\'][C]){c[\'3G\'+2R+\'3F\'][C]=[]}c[\'3G\'+2R+\'3F\'][C].1X(2b)};f.1l.u.8r=j(2R,C){if(c[\'3G\'+2R+\'3F\']&&c[\'3G\'+2R+\'3F\'][C]&&c[\'3G\'+2R+\'3F\'][C].Y>0){o c[\'3G\'+2R+\'3F\'][C].4Q()}o\'\'};f.aW=j(3Z,2s){l 2s=(1q 2s==\'2d\'?R:2s);D.53(c,1f f.2f(3Z,(2s?\'52\':\'4D\')));c.8q(\'4D\',\'52\');if(2s==R){c.2Q("/\\\\\\3Y[<\\\\s]*f[>\\\\s]*\\\\\\3Y/",\'52\',\'4D\');c.2H("/\\\\\\3Y[<\\/\\\\s]*f[>\\\\s]*\\\\\\3Y/",\'4D\')}c.4E("[\\\\fo-fm-6]*\\\\\\fl[a-z-8p-9]+",\'4D\',\'aV\');c.2Q("/\\\\\\3Y",\'4D\',\'8o\');c.2H("\\\\\\3Y/",\'8o\');c.2Q("\\fk",\'4D\',\'6C\');c.2H("\\fj",\'6C\');c.2Q("/\\\\\\3Y",\'6C\',\'8n\');c.2H("\\\\\\3Y/",\'8n\');o c};f.3D=j(){c.6B=J;c.5D=J;c.2s=R;c.4B={\'3W\':[],\'3g\':[],\'4A\':[]};o c};f.3D.u.3X=j(1w,2s){l 2s=(1q 2s==\'2d\'?c.2s:2s);c.6D=1f f.aW(c,2s);c.6D.3X(1w)};f.3D.u.52=j(K,2a){o R};f.3D.u.8o=j(X,2n){if(X.K(/fi[a-5F-9\\s]*E[a-5F-9\\s]*/mi)){o J}if(2n==f.3E){if(!c.6B){c.5D=R;c.2m={\'M\':f.1L.4w(X)}}V{if(c.2m[c.2e]){if(!c.2m[c.2e].6z){c.2m[c.2e].6z=[X]}V{c.2m[c.2e].6z.1X(X)}}}c.6B=R}o R};f.3D.u.6C=j(K,2n){if(2n==f.3E){K=f.1L.4w(K);if(K!=\'\'){c.2m[c.2e].1m=K}}V if(2n==f.5E){c.6B=J;c.5D=J;c.aU(c.2m)}o R};f.3D.u.8n=j(K,2n){if(2n==f.3E){c.2m[c.2e].8k=K.S(/^([\\s\\/\\*]*)|([\\s\\/\\*]*)$/gm,\'\')}o R};f.3D.u.aV=j(K){K=K.S(/^([\\s\\.]*)|([\\s\\.*]*)$/gm,\'\');l C=\'\';if(K.8h(\'.\')>0){l 8l=K.8m(\'.\');c.2e=8l[1];l C=8l[0]}V{c.2e=K}if(!c.5D){c.2m={\'M\':(!C?\'\':C.fh()+\': \')+c.2e};c.5D=R}if(!c.2m[c.2e]){c.2m[c.2e]={\'F\':c.2e}}if(C){if(!c.2m[c.2e].3i){c.2m[c.2e].3i=[C]}V{c.2m[c.2e].3i.1X(C)}}o R};f.3D.u.aU=j(6A){1h(l F in 6A){l 2P=6A[F];if(1q 2P==\'4C\'&&F!=\'M\'){c.4B.3W.1X({\'F\':f.1L.4w(2P.F),\'M\':6A.M,\'aT\':f.1L.4w((2P.6z||2P.3i).6u(\', \'))});if(2P.8k){c.4B.3g.1X({\'F\':\'.\'+f.1L.4w(2P.F),\'1b\':2P.8k})}if(2P.1m){c.4B.4A.1X({\'F\':\'.\'+f.1L.4w(2P.F),\'1b\':2P.1m})}}}};D.fn.aS=j(){if(c[0].8j==3)o!(/[^\\t\\n\\r ]/.2M(c[0].4z));o J};f.aS=j(n){if(n.8j==3)o!(/[^\\t\\n\\r ]/.2M(n.4z));o J};f.fg=j(3C){o!(/[^\\t\\n\\r ]/.2M(3C))};D.fn.4V=j(4y){l n=c;if(n[0].8j==3)n=n.5z().aR(0,1);if(n.51(4y).2G()==1)o n;V o n.5z(4y).aR(0,1)};f.1L={1k:j(3C,aQ,aO){l 4x=1f 2O(aQ,"g");o(3C.S(4x,aO))},ff:j(3C,aM,8i){o(3C.aN(0,8i)+aM+3C.6y(8i))},4w:j(3C){o 3C.S(/^(\\s*)|(\\s*)$/gm,\'\')},2F:j(3B,5C){1h(l i=0;i<3B.Y;i++){if(3B[i]===5C)o R}o J},8h:j(3B,4v){l 8g=-1;1h(l i=0;i<3B.Y;i++){if(3B[i]==4v){8g=i;1n}}o(8g)},aL:j(3B,F){1h(l i=0;i<3B.Y;i++){l 4v=3B[i];if(4v.F==F)o(4v)}o(1a)}};f.2D=j(E){c.1V=E;c.5x="fe";c.4s="\\r\\n"};f.2D.u.5w=j(1K){c.1E=1K;c.H=1K.1B.3A;l 1D=c.H.4U[0];l 2r=2B(c.B.3g);c.4T(c.H,2r);c.H.M=c.1V.3f;D(\'O\',c.H).1v(\'3z\',c.B.4S);D(c.H.1j).O(c.1V.4R);l E=c;c.H.1j.aK=j(){E.H.4r="on";E.H=1K.1B.3A};c.H.fd=j(){E.6x()};c.H.aJ=j(){E.6x();E.2x()};c.H.aI=j(){E.6x()};c.H.1j.fc=j(){E.1E.1B.aH.aG=J};c.H.1j.fb=j(){E.1E.1B.aH.aG=J;E.5B(2l.fa.f9("3h"))};if(c.aF){if(D.2A(c.B.3y))c.B.3y(c);c.1V.5v();if(D.2A(c.B.3w))c.B.3w(c);c.5u()}c.aF=R;c.H.4r="on";4u{c.H=1K.1B.3A}4t(e){}};f.2D.u.1C=j(1F,1R){3e(1F){1i f.6t:1i f.6s:l L=c.2N(c.L(),f.6r);if(L){l 3v=L.1z.1z;if(L.1z.6q.Y>1||3v.1r.1o()==f.6p||3v.1r.1o()==f.6o)c.H.2q(1F)}1n;3R:if(1R)c.H.2q(1F,J,1R);V c.H.2q(1F);1n}};f.2D.u.1d=j(){l 4Z=c.1E.1B.3A.4Z;if(4Z!=1a){if(4Z.5A!=2d)o(4Z.5A())}};f.2D.u.6x=j(){c.H.4Z=c.H.3V.4Y()};f.2D.u.5r=j(1D,1Y){1D.f8(1Y.F,1Y.1b)};f.2D.u.8e=j(O){l 1S=c.H.3V.4Y();if(D(1S.5A()).5z(c.B.6w).is(\'*\')){4u{1S.8f(O)}4t(e){}}V{c.5B(O)}};f.2D.u.aE=j(2k,2E){l 1S=c.H.3V.4Y();if(D(1S.5A()).5z(c.B.6w).is(\'*\')){4u{1S.8f(2k+1S.X+2E)}4t(e){}}};f.2D.u.aD=j(){l 1S=c.H.3V.4Y();if(D(1S.5A()).5z(c.B.6w).is(\'*\')){4u{l X=1S.X;c.1C(\'f7\');1S.8f(X)}4t(e){}}};f.2D.u.2x=j(){c.2j=1a};f.2D.u.5y=j(1c,3U){l 1S=c.H.3V.4Y();3U=3U?R:J;1S.f6(1c);1S.aC(3U);1S.4X();1c.4W()};f.2C=j(E){c.1V=E;c.5x="I";c.4s="\\n"};f.2C.u.5w=j(1K){l E=c;c.1E=1K;c.H=1K.at;l 1D=c.H.4U[0];l 2r=2B(c.B.3g);c.4T(c.H,2r);c.H.M=c.1V.3f;D(\'O\',c.H).1v(\'3z\',c.B.4S);c.O(c.1V.4R);c.6v();if(D.2A(c.B.3y))c.B.3y(c);c.1V.5v();D(c.H).3x("3u",c.3u);D(c.H).3x("2x",c.2x);D(c.H).3x("4W",j(){E.6v.f5(E)});if(D.2A(c.B.3w))c.B.3w(c);c.5u()};f.2C.u.O=j(O){if(1q O===\'3Q\'){4u{c.H.4r="aB"}4t(e){};O=O.S(/<em(\\b[^>]*)>/gi,"<i$1>").S(/<\\/em>/gi,"</i>").S(/<3c(\\b[^>]*)>/gi,"<b$1>").S(/<\\/3c>/gi,"</b>");D(c.H.1j).O(O);c.6v()}V o(D(c.H.1j).O())};f.2C.u.1C=j(1F,1R){if(!c.1d())o(J);3e(1F){1i f.6t:1i f.6s:l 1x=c.1d();l 2y=c.1E.1B.2z();l 1Z=2y.1Z;if(1Z.5s=="#X")1Z=1Z.1z;1x=c.2N(1x,f.5t);1Z=c.2N(1Z,f.5t);if(1x&&1x==1Z&&1x.1r.1o()==f.6r){l 3v=1x.1z.1z;if(1x.1z.6q.Y>1||3v.1r.1o()==f.6p||3v.1r.1o()==f.6o)c.H.2q(1F,\'\',1a)}1n;3R:if(1R)c.H.2q(1F,\'\',1R);V c.H.2q(1F,\'\',1a)}l L=c.1d();if(L.1r.1o()==f.3t)c.1C(f.4q,f.P)};f.2C.u.1d=j(){l 2y=c.1E.1B.2z();l 1c=2y.1x;if(1c){if(1c.5s=="#X")o(1c.1z);V o(1c)}V o(1a)};f.2C.u.5r=j(1D,1Y){1D.8c(1Y.F+" {"+1Y.1b+"}",1D.8b.Y)};f.2C.u.3u=j(W){l E=f.2w[c.M];l L=1a;if(W.6l){if(W.1A==66){E.1C(f.8a);o J}if(W.1A==73){E.1C(f.89);o J}}V if(W.1A==13){if(!W.6m){L=E.1d();if(L&&L.1r.1o()==f.5q){W.f4();E.8e(\'<p></p>\')}}}};f.2C.u.2x=j(W){l E=f.2w[c.M];E.2j=1a;l L=1a;if(W.1A==13&&!W.6m){D(E.H.1j).aq(f.88).ap()}if(W.1A!=8&&W.1A!=17&&W.1A!=46&&W.1A!=87&&!W.ao&&!W.6l){L=E.1d();l F=L.1r.1o();if(F=="3c"||F=="b"||F=="em"||F=="i"||F=="3b"||F=="3P"||F=="a")F=L.1z.1r.1o();if(F==f.3t)E.1C(f.4q,f.P)}};f.2C.u.6v=j(){if(c.H.4r=="aB"){4u{c.H.4r="on";c.H.2q("f3",\'\',J)}4t(e){}}};f.2C.u.6k=j(C,G){l G=c.3s.5p(C,G);if(C==\'3r\'&&G.1m){l 2v=c.6j(G.1m);if(2v){c.4p.4Q();l C=2v;c.4p.1X(2v);G.1m=\'\'}V{o}}c.1W+=c.4P.C(C,G,R)};f.2C.u.6j=j(1m){if(/am/.2M(1m))o\'3c\';if(/al/.2M(1m))o\'em\';if(/3b/.2M(1m))o\'3b\';if(/ak/.2M(1m))o\'3P\';o J};f.3S=j(E){c.1V=E;c.5x="I";c.4s="\\r\\n"};f.3S.u.5w=j(1K){c.1E=1K;c.H=1K.1B.3A;l 1D=c.H.4U[0];l 2r=2B(c.B.3g);c.4T(c.H,2r);c.H.M=c.1V.3f;D(\'O\',c.H).1v(\'3z\',c.B.4S);c.H.4r="on";c.O(c.1V.4R);if(D.2A(c.B.3y))c.B.3y(c);c.1V.5v();D(c.H).3x("3u",c.3u);D(c.H).3x("2x",c.2x);if(D.2A(c.B.3w))c.B.3w(c);c.5u()};f.3S.u.1C=j(1F,1R){if(1R)c.H.2q(1F,J,1R);V c.H.2q(1F)};f.3S.u.1d=j(){l 2y=c.1E.1B.2z();l 1c=2y.1x;if(1c){if(1c.5s=="#X")o(1c.1z);V o(1c)}V o(1a)};f.3S.u.5r=j(1D,1Y){1D.8c(1Y.F+" {"+1Y.1b+"}",1D.8b.Y)};f.3S.u.3u=j(W){l E=f.2w[c.M];l 2y=E.1E.1B.2z();8d=2y.f2(0).f1;if(!D(8d).4V(f.6n.6u(","))[0]&&!D(8d).4V(\'li\')&&W.1A!=f.3T.aA&&W.1A!=f.3T.az&&W.1A!=f.3T.ay&&W.1A!=f.3T.ax&&W.1A!=f.3T.aw&&W.1A!=f.3T.av&&W.1A!=f.3T.au)E.1C(f.4q,f.P)};f.3S.u.2x=j(W){l E=f.2w[c.M];E.2j=1a};f.3d=j(E){c.1V=E;c.5x="I";c.4s="\\n"};f.3d.u.5w=j(1K){c.1E=1K;c.H=1K.at;l 1D=c.H.4U[0];l 2r=2B(c.B.3g);c.4T(c.H,2r);c.H.M=c.1V.3f;D(\'O\',c.H).1v(\'3z\',c.B.4S);c.H.4r="on";c.O(c.1V.4R);if(D.2A(c.B.3y))c.B.3y(c);c.1V.5v();D(c.H).3x("3u",c.3u);D(c.H).3x("2x",c.2x);if(D.2A(c.B.3w))c.B.3w(c);c.5u()};f.3d.u.1C=j(1F,1R){if(!c.1d())o(J);3e(1F){1i f.6t:1i f.6s:l 1x=c.1d();l 2y=c.1E.1B.2z();l 1Z=2y.1Z;if(1Z.5s=="#X")1Z=1Z.1z;1x=c.2N(1x,f.5t);1Z=c.2N(1Z,f.5t);if(1x&&1x==1Z&&1x.1r.1o()==f.6r){l 3v=1x.1z.1z;if(1x.1z.6q.Y>1||3v.1r.1o()==f.6p||3v.1r.1o()==f.6o)c.H.2q(1F,\'\',1a)}1n;1i f.as:1i f.ar:c.H.2q(1F,\'\',1a);l 1x=c.1d();l L=c.2N(1x,f.6n);if(L)D(L).f0(D(L).O());1n;3R:if(1R)c.H.2q(1F,\'\',1R);V c.H.2q(1F,\'\',1a)}l L=c.1d();if(L&&L.1r.1o()==f.3t)c.1C(f.4q,f.P)};f.3d.u.1d=j(){l 2y=c.1E.1B.2z();l 1c=2y.1x;if(1c){if(1c.5s=="#X")o(1c.1z);V o(1c)}V o(1a)};f.3d.u.5r=j(1D,1Y){1D.8c(1Y.F+" {"+1Y.1b+"}",1D.8b.Y)};f.3d.u.3u=j(W){l E=f.2w[c.M];if(W.6l){if(W.1A==66){E.1C(f.8a);o J}if(W.1A==73){E.1C(f.89);o J}}};f.3d.u.2x=j(W){l E=f.2w[c.M];E.2j=1a;l L=1a;if(W.1A==13&&!W.6m){D(E.H.1j).aq(f.88).ap();L=E.1d();if(L&&L.1r.1o()==f.5q)E.1C(f.4q,f.P);}if(W.1A==13&&W.6m){E.1C(\'eZ\')}if(W.1A!=8&&W.1A!=17&&W.1A!=46&&W.1A!=87&&!W.ao&&!W.6l){L=E.1d();l F=L.1r.1o();if(F=="3c"||F=="b"||F=="em"||F=="i"||F=="3b"||F=="3P"||F=="a"||F=="3r")F=L.1z.1r.1o();if(F==f.3t||F==f.an)E.1C(f.4q,f.P);}};f.3d.u.6k=j(C,G){l G=c.3s.5p(C,G);if(C==\'3r\'&&G.1m){l 2v=c.6j(G.1m);if(2v){c.4p.4Q();l C=2v;c.4p.1X(2v);G.1m=\'\';if(1q G[\'I\']==\'3Q\')G[\'I\']=G[\'I\'].S(/eY-1m-3r/gi,\'\')}V{o}}c.1W+=c.4P.C(C,G,R)};f.3d.u.6j=j(1m){if(/am/.2M(1m))o\'3c\';if(/al/.2M(1m))o\'em\';if(/3b/.2M(1m))o\'3b\';if(/ak/.2M(1m))o\'3P\';o J};',62,1714,'||||||||||||this|||WYMeditor||||function||var|||return||||||prototype|||||||_options|tag|jQuery|wym|name|attributes|_doc|class|false|match|container|title|div|html||value|true|replace|mode||else|evt|text|length|_Listener|||||||||||null|css|node|selected|type|new|editor|for|case|body|replaceAll|XhtmlSaxListener|style|break|toLowerCase|label|typeof|tagName|xhtml|XhtmlParser|boxHtml|attr|raw|focusNode|input|parentNode|keyCode|contentWindow|_exec|styles|_iframe|cmd|scope|val|dialogHtml|_tags|iframe|Helper|form|result|row|href|options|param|range|key|src|_wym|output|push|oCss|anchorNode|||||||||||state|content|required|undefined|_current_element|Lexer|matches|script|attribute|_selected_image|left|window|_current_item|status|_regexes|_box|execCommand|aCss|only_wym_blocks|button|link|new_tag|INSTANCES|keyup|sel|getSelection|isFunction|eval|WymClassMozilla|WymClassExplorer|right|contains|size|addExitPattern|ul|blockquote|_mode_handlers|start|test|findUp|RegExp|details|addEntryPattern|position|closing|head|fieldset|_open_tags|XmlHelper|ParallelRegex|char|disabled|||||||||||skin|sub|strong|WymClassSafari|switch|_index|editorStyles|Text|tags|table|legend|XhtmlLexer|matched|pattern|top|stylesheet|sType|span|validator|BODY|keydown|ancestor|postInit|bind|preBind|dir|document|arr|str|WymCssParser|LEXER_UNMATCHED|_closing|_insert_|lang|parsed|defaults|inside|xml|sTmp|INDEX|newNode|sup|string|default|WymClassOpera|KEY|toStart|selection|classesItems|parse|x2a|parser||pre|_mode|addPattern|_patterns|baseline||bottom|middle|valign|charoff|justify|center|align|click|doc|find|sBodyHtml|tagname|sClass|oClass|sContainer|sTool|iframeHtml|WymClass|_tag_stack|FORMAT_BLOCK|designMode|_newLine|catch|try|item|trim|rExp|jqexpr|data|dialogStyles|css_settings|object|WymCss|addSpecialPattern|td|textarea|_invokeParser|_case|width|onload|basePath|dialog|sVal|console|helper|pop|_html|direction|addCssRules|styleSheets|parentsOrSelf|focus|select|createRange|caretPos||filter|Ignore|extend|cite|base|init|_stack|count|except|index|alt|tag_attributes|delimiter|close|sUrl|INIT_DIALOG|SKINS|skinPath|CssParser|wymeditor|TH|oContainer|oTool|wym_section|getValidTagAttributes|PRE|addCssRule|nodeName|BLOCKS|listen|bindEvents|initIframe|_class|setFocusToNode|parents|parentElement|paste|elem|_has_title|LEXER_EXIT|z0|after|avoided_tags|th|now_on_tag|colgroup|_tag_attributes|_non_tag|action|special|new_mode|accept|StateStack|_regex|_possible_tag_attributes|next|hidden|get|open|createElement|submitSelector|titleSelector|TITLE|sStamp|dialogImageSelector|DIALOG_LINK|dialogType||update|stringDelimiterRight|stringDelimiterLeft|toggleClass|BLOCKQUOTE|Array|TD|aClasses|wym_dialog|wym_cancel|wym_submit|wym_dialog_type|getTagForStyle|openBlockTag|ctrlKey|shiftKey|MAIN_CONTAINERS|UL|OL|childNodes|LI|OUTDENT|INDENT|join|enableDesignMode|iframeBodySelector|saveCaret|substring|expressions|style_details|_in_style|WymCssStyle|_Lexer|last_tag|skiped_attribute_values|skiped_attributes|addCss|addScript|addComment|getTagReplacements|address|afterParsing|beforeParsing|option|tr|img|col|bdo|abbr|prop|_current_attribute|SingleQuotedAttribute|DoubleQuotedAttribute|LEXER_SPECIAL|normalizeTag|expected_tag|LEXER_ENTER|OpeningTag||_addNonTagBlock|handler|unmatched|while|case_sensitive|regex|tag_defaults|only|valid_attributes|rows|cols|screen|charset|height|meta|icon|shortcut|subsection|section|prev|help|glossary|copyright|contents|chapter|bookmark|appendix|alternate|rel|escape_quotes|_entitiesDiv|mousedown|altSelector|ALT|SRC|srcSelector|SKINS_DEFAULT_CSS|loadSkin|grep|packed|min|pack|jquery|INSERT_HTML|jQueryPath|wymPath|PREVIEW|DIALOG_PASTE|DIALOG_TABLE|DIALOG_IMAGE|dialogFeatures|_element|STRINGS|bFound|firstNode|nodes|aTypes|NAME|CLASS_NAME|TOOL_TITLE|HTML|iframeBasePath|browser|Cancel|Submit|224|BR|ITALIC|BOLD|cssRules|insertRule|startNode|insert|pasteHTML|ret|indexOf|pos|nodeType|feedback_style|parts|split|WymCssFeedbackStyle|WymCssComment|_0|mapHandler|_getClosingTagContent|_insertContentWhenClosingTag|last_tag_opened|block_tags|isBlockTag|_avoiding_tags_implicitly|del|acronym|entity|entities|thead|tfoot|tbody|noscript|circ|_callCloseTagListener|_autoCloseUnclosed|_increaseOpenTagCounter|_callOpenTagListener|Css|Script|Comment|unparsed_character_count|getCurrent|_parser|enter|leave|_labels|default_attributes|default_attributes_and_events|_attributes|_events|readonly|all|media|javascript|http|ltr|toString|innerHTML|_formated_options|tagOptions|postInitDialog|newRow|iCols|iRows|INSERT_IMAGE|HREF|CREATE_LINK|hrefSelector|preInitDialog|responseText|async|url|ajax|found|htmlSelector|wDialog|replaceStrings|DIALOG_BODY|DIALOG_TITLE|JQUERY_PATH|WYM_PATH|CSS_PATH|DIRECTION|hasfocus|htmlValSelector|error|langPath|switchTo|lgt|H6|H5|H4|H3|H2|H1|sName|sContainers|CONTAINERS_ITEMS|CONTAINER_CLASS|CONTAINER_TITLE|CONTAINER_NAME|aContainers|sClasses|CLASSES_ITEMS|CLASS_TITLE|sTools|TOOLS_ITEMS|TOOL_CLASS|TOOL_NAME|aTools|STATUS|IFRAME|CLASSES|CONTAINERS|TOOLS|LOGO|IFRAME_BASE_PATH|WYM_INDEX|SaxListener|preInit|Paste_From_Word|indent|Table|wym_title|Image|Link|wym_classes|wym_containers|wym_tools|wym_iframe|Preview|Unlink|Outdent|Indent|names|super|italic|bold|DIV|metaKey|remove|children|INSERT_UNORDEREDLIST|INSERT_ORDEREDLIST|contentDocument|DELETE|BACKSPACE|DOWN|RIGHT|UP|LEFT|ENTER|off|collapse|unwrap|wrap|_initialized|returnValue|event|onclick|onkeyup|onfocus|findByName|inserted|substr|rep||old|slice|isPhantomNode|expr|addStyleSetting|WymCssStyleDeclaration|WymCssLexer|insertContentAfterClosingTag|fixNestingBeforeOpeningBlockTag|before|inline_tags|isInlineTag|allowStylingTagsAndAttributes|MsoNormal|avoidStylingTagsAndAttributes|closeUnopenedTag|closeUnknownTag|closeBlockTag|openUnknownTag|inlineTag|addContent|getResult|removeBrInPre|nbsp|160|removeEmptyTags|joinRepeatedEntities|replaceNamedEntities|shouldCloseTagAutomatically|tt|small|samp|optgroup|map|kbd|ins|dfn||code|caption|big|area|equiv|image|not|XhtmlValidator|UnquotedAttribute|TagAttributes|counter|autoCloseUnclosedBeforeTagClosing|autoCloseUnclosedBeforeNewOpening|_decreaseOpenTagCounter|ClosingTag|_tag|Listener|addAttributeTokens|addInTagDeclarationTokens|addTagTokens|addCssTokens|addScriptTokens|addCommentTokens|addTokens|unparsed|_reduce|is_match|current|_decodeSpecial|_|_isSpecialMode|__exit|_isModeEnd|LEXER_MATCHED|_dispatchTokens|_getPerlMatchingFlags|Tk7|Tk6|Tk5|Tk4|Tk3|Tk2|Tk1|_untokenizeRegex|_tokenizeRegex|_getCompoundedRegex|subject|getDefaultAttributesAndEventsForTag|getUniqueAttributesAndEventsForTag|getPossibleTagAttributes|validateAttribute|doesAttributeNeedsValidation|getDefaultAttributesAndEventsForTags|isValidTag|parseInt|possible_attributes|rowgroup|rowspan|headers|colspan|axis|summary|border|box|frame|braille|print|projection|multiple|defer|valuetype|usemap|home|rev|hreflang|datetime|submit|reset|file|checked|profile|rtl|polygon|poly|circle|rectangle|rect|shape|coords|designates|keyboard|tabindex|accesskey|language|escapeEntities|escapeOnce|escaped|_fixDoubleEscape|cancelSelector|previewSelector|dialogPreviewSelector|sText|textSelector|dialogPasteSelector|append|summarySelector|sCaption|newCaption|captionSelector||TABLE|colsSelector|rowsSelector|dialogTableSelector|dialogLinkSelector|uniqueStamp|dialogTypeSelector||SKINS_DEFAULT_JS|initSkin|addClass|loadCss|each|appendChild|target||IMG|configureEditorUsingRawCss|skins|computeJqueryPath|computeWymPath|computeBasePath|sData|now|toggleHtml|encloseString|BASE_PATH|bodyHtml|dialogPreviewHtml|dialogPasteHtml|dialogTableHtml|dialogImageHtml|dialogLinkHtml|features|sMessage|statusSelector|STRING|CLASS|insertBefore|dialogFeaturesPreview|TOGGLE_HTML|PASTE|INSERT_TABLE|exec|updateEvent|updateSelector|classSelector|containerSelector|toolSelector|hide|containersItemHtml|containersItems|classesItemHtml|toolsItemHtml|toolsItems|statusHtml|htmlHtml|classesHtml|containersHtml|toolsHtml|logoHtml|wym_dialog_preview|wym_text|wym_dialog_paste|wym_cols|wym_rows|wym_summary|wym_caption|wym_dialog_table|Title|||wym_alt|wym_src|URL|wym_dialog_image|wym_href|wym_dialog_link|xhtml1|DTD|org|www|300|560|resizable|toolbar|titlebar|menubar|wym_html_val|wym_status|wym_html|wym_box|ToggleHtml|Paste|InsertTable|InsertImage|CreateLink|Redo|Undo|InsertUnorderedList|InsertOrderedList|Subscript|Superscript|Italic|Bold|IFRAME_DEFAULT|LANG_DEFAULT_PATH|SKINS_DEFAULT_PATH|apple|InsertLineBreak|replaceWith|startContainer|getRangeAt|styleWithCSS|preventDefault|call|moveToElementText|Cut|addRule|getData|clipboardData|onpaste|onbeforepaste|onbeforedeactivate|className|insertAt|isPhantomString|toUpperCase|end|x7d|x7b|x2e|z1||sa|insertContentBeforeClosingTag|main1|remove_embeded_styles|remove_scripts|remove_comments|fromCharCode|String|gmi|extends|9830|diams|9829|hearts|9827|clubs|9824|spades|9674|loz|9002|rang|9001|8971|rfloor|8970|lfloor|8969|rceil|8968|lceil|8901|sdot|8869|perp|8855|otimes|8853|oplus|8839|supe|8838|sube|8836|nsub|8835|8834|8805|8804|8801|8800|8776||asymp|8773|cong||8764|sim|8756||there4|8747|int|8746|cup|8745|cap|8744|8743|and|8736|ang|8734|infin|8733|8730|radic|8727|lowast|8722|minus|8721|sum|8719|prod|8715|8713|notin|8712|isin|8711|nabla|8709|empty|8707|exist|8706|part|8704|forall|||||||8660|hArr|8659|dArr|8658|rArr|8657|uArr|8656|lArr|8629|crarr|8596|harr|8595|darr|8594|rarr|8593|uarr||8592|larr|8501|alefsym|8482|trade|8476|real|8472|weierp|8465|8364|euro|8260|frasl|8254|oline|8250|rsaquo|8249|lsaquo|8243|Prime|8242|prime|8240|permil|8230|hellip|8226|bull|8225|Dagger|8224|dagger|8222|bdquo|8221|rdquo|8220|ldquo|8218|sbquo|8217|rsquo|8216|lsquo||8212|||mdash|8211|ndash|8207|rlm|8206||lrm|8205|zwj|8204||zwnj|8201|thinsp|8195|emsp|8194|ensp|982|piv|978|upsih|977|thetasym|969|omega|968|psi|967|chi|966|phi|965|upsilon|964|tau|963|sigma|962|sigmaf|961|rho|960|959|omicron|958|xi|957|956|955|lambda|954|kappa|953|iota|952|theta|951|eta|950|zeta|949|epsilon|948|delta|947|gamma|946|beta|945|alpha|937||Omega|936|Psi|935|Chi|934|Phi|933|Upsilon|932|Tau|931|Sigma|929|Rho|928|Pi|927|Omicron|926|Xi|925|Nu|924|Mu|923|Lambda|922|Kappa|921|Iota|920|Theta|919|Eta|918|Zeta|917|Epsilon|916|Delta|915|Gamma|914|Beta|913|Alpha|732|tilde|710|402|fnof|376|Yuml|353|scaron|352|Scaron|339|oelig|338|OElig|255|yuml|254|thorn|253|yacute|252|uuml|251|ucirc|250|uacute|249|ugrave|248|oslash|247|divide|246|ouml|245|otilde|244|ocirc|243|oacute|242|ograve|241|ntilde|240|eth|239|iuml|238|icirc|237|iacute|236|igrave|235|euml|234|ecirc|233|eacute|232||egrave|231|ccedil||230|aelig|229|aring|228|auml|227|atilde|226|acirc|225|aacute|agrave|223|szlig|222|THORN|221|Yacute|220|Uuml|219|Ucirc|218|Uacute|217|Ugrave|216|Oslash|215|times|214|Ouml|213|Otilde|212|Ocirc|211|Oacute|210|Ograve|209|Ntilde|208|ETH|207|Iuml|206|Icirc|205|Iacute|204|Igrave|203|Euml|202|Ecirc|201|Eacute|200|Egrave||199|Ccedil|198|AElig|197|Aring|196|Auml|195|Atilde|194||Acirc|193|Aacute|192|Agrave|191|iquest|190|frac34|189|frac12|188|frac14|187|raquo|186|ordm|185|sup1|184|cedil|183|middot|182|para|181|micro|180|acute|179|sup3|178|sup2|177|plusmn|176|deg|175|macr|174|reg|173|shy|172|171||laquo|170|ordf||169|copy|168|uml|167||sect|166|brvbar||165||yen|164|curren|163|pound|162|cent|161|iexcl|last_tag_attributes|com|microsoft|schemas|urn|_current_match|_last_match|_matches|boolean|concat|events|continue|groups|none|rules|vsides|rhs|lhs|hsides|below|above|void|cellspacing|cellpadding|aural|handheld|tv|tty|vbs|vbscript|jscript|ecmascript|ref|standby|declare|codetype|codebase|classid|archive|scheme|cookie|set|refresh||expires||speech|radio|password||checkbox|maxlength|longdesc|ismap|xmlns|post|method|enctype|nohref|onmouseup|onmouseout|onmouseover|onmousemove|onmousedown|ondblclick|mouse|onkeypress|onkeydown|frameset|onblur|onselect|onreset|onsubmit|onchange|onunload|core|charAt|parseAttributes|039|quot|textContent|shift|formated_options|amp|CDATA|cdataSection|contentTag|insertCell|insertRow|createCaption|newCol|opener|wym_skin_|ownerDocument|computeCssPath|addRange|selectNodeContents|getTime|Date|toggle|write|parsing||replaceChild|removeAttr|removeChild|firstChild|ready|blur|wym_box_|safari|opera|mozilla|msie|wymeditors|Number_Of_Cols|Number_Of_Rows|Summary|Caption|Alternative_Text|dtd|strict|TR|w3|EN|Strict|XHTML|W3C|PUBLIC|DOCTYPE|yes|scrollbars|wymupdate|iframeSelector|classesSelector|containersSelector|toolsListSelector|toolsSelector|boxSelector|Source_Code|Status|wym_classes_|Classes|wym_containers_th|Table_Header|wym_containers_blockquote|Blockquote|wym_containers_pre|Preformatted|wym_containers_h6|Heading_6|wym_containers_h5|Heading_5|wym_containers_h4|Heading_4|wym_containers_h3|Heading_3|wym_containers_h2|Heading_2|wym_containers_h1|Heading_1|wym_containers_p|Paragraph|Containers|wym_tools_preview|wym_tools_html|wym_tools_paste|wym_tools_table|wym_tools_image|wym_tools_unlink|wym_tools_link|wym_tools_redo|wym_tools_undo|wym_tools_outdent|wym_tools_indent|wym_tools_unordered_list|Unordered_List|wym_tools_ordered_list|Ordered_List|wym_tools_subscript|wym_tools_superscript|wym_tools_emphasis|Emphasis|wym_tools_strong|Strong|Tools|parent|wymiframe|wym_wymeditor_link|wym_area_bottom|wym_area_main|wym_area_right|wym_area_left|wym_area_top|TEXT|ATTRIBUTE|ELEMENT|NODE|CURSOR|HOME|END|UNLINK|FormatBlock|InsertHTML|Wym_Dialog_Body|Wym_Dialog_Title|Wym_Status|Wym_Iframe|Wym_Html|Wym_Container_Class|Wym_Containers_Title|Wym_Container_Name|Wym_Containers_Items|Wym_Containers|Wym_Class_Title|Wym_Class_Name|Wym_Classes_Items|Wym_Classes|Wym_Tool_Class|Wym_Tool_Title|Wym_Tool_Name|Wym_Tools_Items||Wym_Tools|Wym_Logo|Wym_Direction|Wym_Jquery_Path|Wym_Iframe_Base_Path|Wym_Wym_Path|Wym_Css_Path|Wym_Base_Path|wym_index|Wym_Index|rc1|VERSION|profileEnd|trace|timeEnd|time|groupEnd|group|dirxml|assert|warn|info|debug|log|firebug'.split('|'),0,{})) diff --git a/gstudio/static/gstudio/js/wymeditor/lang/bg.js b/gstudio/static/gstudio/js/wymeditor/lang/bg.js new file mode 100644 index 00000000..576bca57 --- /dev/null +++ b/gstudio/static/gstudio/js/wymeditor/lang/bg.js @@ -0,0 +1,45 @@ +WYMeditor.STRINGS['bg'] = { + Strong: 'Получер', + Emphasis: 'Курсив', + Superscript: 'Горен индекс', + Subscript: 'Долен индекс', + Ordered_List: 'Подреден списък', + Unordered_List: 'Неподреден списък', + Indent: 'Блок навътре', + Outdent: 'Блок навън', + Undo: 'Стъпка назад', + Redo: 'Стъпка напред', + Link: 'Създай хипервръзка', + Unlink: 'Премахни хипервръзката', + Image: 'Изображение', + Table: 'Таблица', + HTML: 'HTML', + Paragraph: 'Абзац', + Heading_1: 'Заглавие 1', + Heading_2: 'Заглавие 2', + Heading_3: 'Заглавие 3', + Heading_4: 'Заглавие 4', + Heading_5: 'Заглавие 5', + Heading_6: 'Заглавие 6', + Preformatted: 'Преформатиран', + Blockquote: 'Цитат', + Table_Header: 'Заглавие на таблицата', + URL: 'URL', + Title: 'Заглавие', + Alternative_Text: 'Алтернативен текст', + Caption: 'Етикет', + Summary: 'Общо', + Number_Of_Rows: 'Брой редове', + Number_Of_Cols: 'Брой колони', + Submit: 'Изпрати', + Cancel: 'Отмени', + Choose: 'Затвори', + Preview: 'Предварителен преглед', + Paste_From_Word: 'Вмъкни от MS WORD', + Tools: 'Инструменти', + Containers: 'Контейнери', + Classes: 'Класове', + Status: 'Статус', + Source_Code: 'Източник, код' +}; + diff --git a/gstudio/static/gstudio/js/wymeditor/lang/ca.js b/gstudio/static/gstudio/js/wymeditor/lang/ca.js new file mode 100644 index 00000000..c342406f --- /dev/null +++ b/gstudio/static/gstudio/js/wymeditor/lang/ca.js @@ -0,0 +1,45 @@ +WYMeditor.STRINGS['ca'] = { + Strong: 'Ressaltar', + Emphasis: 'Emfatitzar', + Superscript: 'Superindex', + Subscript: 'Subindex', + Ordered_List: 'Llistat ordenat', + Unordered_List: 'Llistat sense ordenar', + Indent: 'Indentat', + Outdent: 'Sense indentar', + Undo: 'Desfer', + Redo: 'Refer', + Link: 'Enllaçar', + Unlink: 'Eliminar enllaç', + Image: 'Imatge', + Table: 'Taula', + HTML: 'HTML', + Paragraph: 'Paràgraf', + Heading_1: 'Capçalera 1', + Heading_2: 'Capçalera 2', + Heading_3: 'Capçalera 3', + Heading_4: 'Capçalera 4', + Heading_5: 'Capçalera 5', + Heading_6: 'Capçalera 6', + Preformatted: 'Pre-formatejat', + Blockquote: 'Cita', + Table_Header: 'Capçalera de la taula', + URL: 'URL', + Title: 'Títol', + Alternative_Text: 'Text alternatiu', + Caption: 'Llegenda', + Summary: 'Summary', + Number_Of_Rows: 'Nombre de files', + Number_Of_Cols: 'Nombre de columnes', + Submit: 'Enviar', + Cancel: 'Cancel·lar', + Choose: 'Triar', + Preview: 'Vista prèvia', + Paste_From_Word: 'Pegar des de Word', + Tools: 'Eines', + Containers: 'Contenidors', + Classes: 'Classes', + Status: 'Estat', + Source_Code: 'Codi font' +}; + diff --git a/gstudio/static/gstudio/js/wymeditor/lang/cs.js b/gstudio/static/gstudio/js/wymeditor/lang/cs.js new file mode 100644 index 00000000..3939d71a --- /dev/null +++ b/gstudio/static/gstudio/js/wymeditor/lang/cs.js @@ -0,0 +1,45 @@ +WYMeditor.STRINGS['cs'] = { + Strong: 'Tučné', + Emphasis: 'Kurzíva', + Superscript: 'Horní index', + Subscript: 'Dolní index', + Ordered_List: 'Číslovaný seznam', + Unordered_List: 'Nečíslovaný seznam', + Indent: 'Zvětšit odsazení', + Outdent: 'Zmenšit odsazení', + Undo: 'Zpět', + Redo: 'Znovu', + Link: 'Vytvořit odkaz', + Unlink: 'Zrušit odkaz', + Image: 'Obrázek', + Table: 'Tabulka', + HTML: 'HTML', + Paragraph: 'Odstavec', + Heading_1: 'Nadpis 1. úrovně', + Heading_2: 'Nadpis 2. úrovně', + Heading_3: 'Nadpis 3. úrovně', + Heading_4: 'Nadpis 4. úrovně', + Heading_5: 'Nadpis 5. úrovně', + Heading_6: 'Nadpis 6. úrovně', + Preformatted: 'Předformátovaný text', + Blockquote: 'Citace', + Table_Header: 'Hlavičková buňka tabulky', + URL: 'Adresa', + Title: 'Text po najetí myší', + Alternative_Text: 'Text pro případ nezobrazení obrázku', + Caption: 'Titulek tabulky', + Summary: 'Shrnutí obsahu', + Number_Of_Rows: 'Počet řádek', + Number_Of_Cols: 'Počet sloupců', + Submit: 'Vytvořit', + Cancel: 'Zrušit', + Choose: 'Vybrat', + Preview: 'Náhled', + Paste_From_Word: 'Vložit z Wordu', + Tools: 'Nástroje', + Containers: 'Typy obsahu', + Classes: 'Třídy', + Status: 'Stav', + Source_Code: 'Zdrojový kód' +}; + diff --git a/gstudio/static/gstudio/js/wymeditor/lang/cy.js b/gstudio/static/gstudio/js/wymeditor/lang/cy.js new file mode 100644 index 00000000..7d15b791 --- /dev/null +++ b/gstudio/static/gstudio/js/wymeditor/lang/cy.js @@ -0,0 +1,45 @@ +WYMeditor.STRINGS['cy'] = {
+ Strong: 'Bras',
+ Emphasis: 'Italig',
+ Superscript: 'Uwchsgript',
+ Subscript: 'Is-sgript',
+ Ordered_List: 'Rhestr mewn Trefn',
+ Unordered_List: 'Pwyntiau Bwled',
+ Indent: 'Mewnoli',
+ Outdent: 'Alloli',
+ Undo: 'Dadwneud',
+ Redo: 'Ailwneud',
+ Link: 'Cysylltu',
+ Unlink: 'Datgysylltu',
+ Image: 'Delwedd',
+ Table: 'Tabl',
+ HTML: 'HTML',
+ Paragraph: 'Paragraff',
+ Heading_1: 'Pennawd 1',
+ Heading_2: 'Pennawd 2',
+ Heading_3: 'Pennawd 3',
+ Heading_4: 'Pennawd 4',
+ Heading_5: 'Pennawd 5',
+ Heading_6: 'Pennawd 6',
+ Preformatted: 'Rhagfformat',
+ Blockquote: 'Bloc Dyfyniad',
+ Table_Header: 'Pennyn Tabl',
+ URL: 'URL',
+ Title: 'Teitl',
+ Alternative_Text: 'Testun Amgen',
+ Caption: 'Pennawd',
+ Summary: 'Crynodeb',
+ Number_Of_Rows: 'Nifer y rhesi',
+ Number_Of_Cols: 'Nifer y colofnau',
+ Submit: 'Anfon',
+ Cancel: 'Diddymu',
+ Choose: 'Dewis',
+ Preview: 'Rhagolwg',
+ Paste_From_Word: 'Gludo o Word',
+ Tools: 'Offer',
+ Containers: 'Cynhwysyddion',
+ Classes: 'Dosbarthiadau',
+ Status: 'Statws',
+ Source_Code: 'Cod ffynhonnell'
+};
+
diff --git a/gstudio/static/gstudio/js/wymeditor/lang/de.js b/gstudio/static/gstudio/js/wymeditor/lang/de.js new file mode 100644 index 00000000..a1e01e11 --- /dev/null +++ b/gstudio/static/gstudio/js/wymeditor/lang/de.js @@ -0,0 +1,45 @@ +WYMeditor.STRINGS['de'] = { + Strong: 'Fett', + Emphasis: 'Kursiv', + Superscript: 'Text hochstellen', + Subscript: 'Text tiefstellen', + Ordered_List: 'Geordnete Liste einfügen', + Unordered_List: 'Ungeordnete Liste einfügen', + Indent: 'Einzug erhöhen', + Outdent: 'Einzug vermindern', + Undo: 'Befehle rückgängig machen', + Redo: 'Befehle wiederherstellen', + Link: 'Hyperlink einfügen', + Unlink: 'Hyperlink entfernen', + Image: 'Bild einfügen', + Table: 'Tabelle einfügen', + HTML: 'HTML anzeigen/verstecken', + Paragraph: 'Absatz', + Heading_1: 'Überschrift 1', + Heading_2: 'Überschrift 2', + Heading_3: 'Überschrift 3', + Heading_4: 'Überschrift 4', + Heading_5: 'Überschrift 5', + Heading_6: 'Überschrift 6', + Preformatted: 'Vorformatiert', + Blockquote: 'Zitat', + Table_Header: 'Tabellenüberschrift', + URL: 'URL', + Title: 'Titel', + Alternative_Text: 'Alternativer Text', + Caption: 'Tabellenüberschrift', + Summary: 'Summary', + Number_Of_Rows: 'Anzahl Zeilen', + Number_Of_Cols: 'Anzahl Spalten', + Submit: 'Absenden', + Cancel: 'Abbrechen', + Choose: 'Auswählen', + Preview: 'Vorschau', + Paste_From_Word: 'Aus Word einfügen', + Tools: 'Werkzeuge', + Containers: 'Inhaltstyp', + Classes: 'Klassen', + Status: 'Status', + Source_Code: 'Quellcode' +}; + diff --git a/gstudio/static/gstudio/js/wymeditor/lang/en.js b/gstudio/static/gstudio/js/wymeditor/lang/en.js new file mode 100644 index 00000000..1e351e55 --- /dev/null +++ b/gstudio/static/gstudio/js/wymeditor/lang/en.js @@ -0,0 +1,45 @@ +WYMeditor.STRINGS['en'] = { + Strong: 'Strong', + Emphasis: 'Emphasis', + Superscript: 'Superscript', + Subscript: 'Subscript', + Ordered_List: 'Ordered List', + Unordered_List: 'Unordered List', + Indent: 'Indent', + Outdent: 'Outdent', + Undo: 'Undo', + Redo: 'Redo', + Link: 'Link', + Unlink: 'Unlink', + Image: 'Image', + Table: 'Table', + HTML: 'HTML', + Paragraph: 'Paragraph', + Heading_1: 'Heading 1', + Heading_2: 'Heading 2', + Heading_3: 'Heading 3', + Heading_4: 'Heading 4', + Heading_5: 'Heading 5', + Heading_6: 'Heading 6', + Preformatted: 'Preformatted', + Blockquote: 'Blockquote', + Table_Header: 'Table Header', + URL: 'URL', + Title: 'Title', + Alternative_Text: 'Alternative text', + Caption: 'Caption', + Summary: 'Summary', + Number_Of_Rows: 'Number of rows', + Number_Of_Cols: 'Number of cols', + Submit: 'Submit', + Cancel: 'Cancel', + Choose: 'Choose', + Preview: 'Preview', + Paste_From_Word: 'Paste from Word', + Tools: 'Tools', + Containers: 'Containers', + Classes: 'Classes', + Status: 'Status', + Source_Code: 'Source code' +}; + diff --git a/gstudio/static/gstudio/js/wymeditor/lang/es.js b/gstudio/static/gstudio/js/wymeditor/lang/es.js new file mode 100644 index 00000000..cdb03c10 --- /dev/null +++ b/gstudio/static/gstudio/js/wymeditor/lang/es.js @@ -0,0 +1,45 @@ +WYMeditor.STRINGS['es'] = { + Strong: 'Resaltar', + Emphasis: 'Enfatizar', + Superscript: 'Superindice', + Subscript: 'Subindice', + Ordered_List: 'Lista ordenada', + Unordered_List: 'Lista sin ordenar', + Indent: 'Indentado', + Outdent: 'Sin indentar', + Undo: 'Deshacer', + Redo: 'Rehacer', + Link: 'Enlazar', + Unlink: 'Eliminar enlace', + Image: 'Imagen', + Table: 'Tabla', + HTML: 'HTML', + Paragraph: 'Párrafo', + Heading_1: 'Cabecera 1', + Heading_2: 'Cabecera 2', + Heading_3: 'Cabecera 3', + Heading_4: 'Cabecera 4', + Heading_5: 'Cabecera 5', + Heading_6: 'Cabecera 6', + Preformatted: 'Preformateado', + Blockquote: 'Cita', + Table_Header: 'Cabecera de la tabla', + URL: 'URL', + Title: 'Título', + Alternative_Text: 'Texto alternativo', + Caption: 'Leyenda', + Summary: 'Summary', + Number_Of_Rows: 'Número de filas', + Number_Of_Cols: 'Número de columnas', + Submit: 'Enviar', + Cancel: 'Cancelar', + Choose: 'Seleccionar', + Preview: 'Vista previa', + Paste_From_Word: 'Pegar desde Word', + Tools: 'Herramientas', + Containers: 'Contenedores', + Classes: 'Clases', + Status: 'Estado', + Source_Code: 'Código fuente' +}; + diff --git a/gstudio/static/gstudio/js/wymeditor/lang/fa.js b/gstudio/static/gstudio/js/wymeditor/lang/fa.js new file mode 100644 index 00000000..9d70fcb1 --- /dev/null +++ b/gstudio/static/gstudio/js/wymeditor/lang/fa.js @@ -0,0 +1,46 @@ +//Translation To Persian: Ghassem Tofighi (http://ght.ir) +WYMeditor.STRINGS['fa'] = { + Strong: 'پررنگ',//Strong + Emphasis: 'ایتالیک',//Emphasis + Superscript: 'بالانويس ',//Superscript + Subscript: 'زيرنويس',//Subscript + Ordered_List: 'لیست مرتب',//Ordered List + Unordered_List: 'لیست نامرتب',//Unordered List + Indent: 'افزودن دندانه',//Indent + Outdent: 'کاهش دندانه',//Outdent + Undo: 'واگردانی',//Undo + Redo: 'تکرار',//Redo + Link: 'ساختن پیوند',//Link + Unlink: 'برداشتن پیوند',//Unlink + Image: 'تصویر',//Image + Table: 'جدول',//Table + HTML: 'HTML',//HTML + Paragraph: 'پاراگراف',//Paragraph + Heading_1: 'سرتیتر ۱',//Heading 1 + Heading_2: 'سرتیتر ۲',//Heading 2 + Heading_3: 'سرتیتر ۳',//Heading 3 + Heading_4: 'سرتیتر ۴',//Heading 4 + Heading_5: 'سرتیتر ۵',//Heading 5 + Heading_6: 'سرتیتر ۶',//Heading 6 + Preformatted: 'قالب آماده',//Preformatted + Blockquote: 'نقل قول',//Blockquote + Table_Header: 'سرجدول',//Table Header + URL: 'آدرس اینترنتی',//URL + Title: 'عنوان',//Title + Alternative_Text: 'متن جایگزین',//Alternative text + Caption: 'عنوان',//Caption + Summary: 'Summary', + Number_Of_Rows: 'تعداد سطرها',//Number of rows + Number_Of_Cols: 'تعداد ستونها',//Number of cols + Submit: 'فرستادن',//Submit + Cancel: 'لغو',//Cancel + Choose: 'انتخاب',//Choose + Preview: 'پیشنمایش',//Preview + Paste_From_Word: 'انتقال از ورد',//Paste from Word + Tools: 'ابزار',//Tools + Containers: 'قالبها',//Containers + Classes: 'کلاسها',//Classes + Status: 'وضعیت',//Status + Source_Code: 'کد مبدأ'//Source code +}; + diff --git a/gstudio/static/gstudio/js/wymeditor/lang/fi.js b/gstudio/static/gstudio/js/wymeditor/lang/fi.js new file mode 100644 index 00000000..fe1eab4e --- /dev/null +++ b/gstudio/static/gstudio/js/wymeditor/lang/fi.js @@ -0,0 +1,44 @@ +WYMeditor.STRINGS['fi'] = { + Strong: 'Lihavoitu', + Emphasis: 'Korostus', + Superscript: 'Yläindeksi', + Subscript: 'Alaindeksi', + Ordered_List: 'Numeroitu lista', + Unordered_List: 'Luettelomerkit', + Indent: 'Suurenna sisennystä', + Outdent: 'Pienennä sisennystä', + Undo: 'Kumoa', + Redo: 'Toista', + Link: 'Linkitä', + Unlink: 'Poista linkitys', + Image: 'Kuva', + Table: 'Taulukko', + HTML: 'HTML', + Paragraph: 'Kappale', + Heading_1: 'Otsikko 1', + Heading_2: 'Otsikko 2', + Heading_3: 'Otsikko 3', + Heading_4: 'Otsikko 4', + Heading_5: 'Otsikko 5', + Heading_6: 'Otsikko 6', + Preformatted: 'Esimuotoilu', + Blockquote: 'Sitaatti', + Table_Header: 'Taulukon otsikko', + URL: 'URL', + Title: 'Otsikko', + Alternative_Text: 'Vaihtoehtoinen teksti', + Caption: 'Kuvateksti', + Summary: 'Yhteenveto', + Number_Of_Rows: 'Rivien määrä', + Number_Of_Cols: 'Palstojen määrä', + Submit: 'Lähetä', + Cancel: 'Peruuta', + Choose: 'Valitse', + Preview: 'Esikatsele', + Paste_From_Word: 'Tuo Wordista', + Tools: 'Työkalut', + Containers: 'Muotoilut', + Classes: 'Luokat', + Status: 'Tila', + Source_Code: 'Lähdekoodi' +}; diff --git a/gstudio/static/gstudio/js/wymeditor/lang/fr.js b/gstudio/static/gstudio/js/wymeditor/lang/fr.js new file mode 100644 index 00000000..9b6deb95 --- /dev/null +++ b/gstudio/static/gstudio/js/wymeditor/lang/fr.js @@ -0,0 +1,45 @@ +WYMeditor.STRINGS['fr'] = { + Strong: 'Mise en évidence', + Emphasis: 'Emphase', + Superscript: 'Exposant', + Subscript: 'Indice', + Ordered_List: 'Liste Ordonnée', + Unordered_List: 'Liste Non-Ordonnée', + Indent: 'Imbriqué', + Outdent: 'Non-imbriqué', + Undo: 'Annuler', + Redo: 'Rétablir', + Link: 'Lien', + Unlink: 'Supprimer le Lien', + Image: 'Image', + Table: 'Tableau', + HTML: 'HTML', + Paragraph: 'Paragraphe', + Heading_1: 'Titre 1', + Heading_2: 'Titre 2', + Heading_3: 'Titre 3', + Heading_4: 'Titre 4', + Heading_5: 'Titre 5', + Heading_6: 'Titre 6', + Preformatted: 'Pré-formatté', + Blockquote: 'Citation', + Table_Header: 'Cellule de titre', + URL: 'URL', + Title: 'Titre', + Alternative_Text: 'Texte alternatif', + Caption: 'Légende', + Summary: 'Résumé', + Number_Of_Rows: 'Nombre de lignes', + Number_Of_Cols: 'Nombre de colonnes', + Submit: 'Envoyer', + Cancel: 'Annuler', + Choose: 'Choisir', + Preview: 'Prévisualisation', + Paste_From_Word: 'Copier depuis Word', + Tools: 'Outils', + Containers: 'Type de texte', + Classes: 'Type de contenu', + Status: 'Infos', + Source_Code: 'Code source' +}; + diff --git a/gstudio/static/gstudio/js/wymeditor/lang/gl.js b/gstudio/static/gstudio/js/wymeditor/lang/gl.js new file mode 100644 index 00000000..d4786b8b --- /dev/null +++ b/gstudio/static/gstudio/js/wymeditor/lang/gl.js @@ -0,0 +1,45 @@ +WYMeditor.STRINGS['gl'] = { + Strong: 'Moita énfase', + Emphasis: 'Énfase', + Superscript: 'Superíndice', + Subscript: 'Subíndice', + Ordered_List: 'Lista ordenada', + Unordered_List: 'Lista sen ordenar', + Indent: 'Aniñar', + Outdent: 'Desaniñar', + Undo: 'Desfacer', + Redo: 'Refacer', + Link: 'Ligazón', + Unlink: 'Desligar', + Image: 'Imaxe', + Table: 'Táboa', + HTML: 'HTML', + Paragraph: 'Parágrafo', + Heading_1: 'Título 1', + Heading_2: 'Título 2', + Heading_3: 'Título 3', + Heading_4: 'Título 4', + Heading_5: 'Título 5', + Heading_6: 'Título 6', + Preformatted: 'Preformatado', + Blockquote: 'Cita en parágrafo', + Table_Header: 'Cabeceira da táboa', + URL: 'URL', + Title: 'Título', + Alternative_Text: 'Texto alternativo', + Caption: 'Título', + Summary: 'Resumo', + Number_Of_Rows: 'Número de filas', + Number_Of_Cols: 'Número de columnas', + Submit: 'Enviar', + Cancel: 'Cancelar', + Choose: 'Escoller', + Preview: 'Previsualizar', + Paste_From_Word: 'Colar dende Word', + Tools: 'Ferramentas', + Containers: 'Contenedores', + Classes: 'Clases', + Status: 'Estado', + Source_Code: 'Código fonte' +}; + diff --git a/gstudio/static/gstudio/js/wymeditor/lang/he.js b/gstudio/static/gstudio/js/wymeditor/lang/he.js new file mode 100644 index 00000000..97c9675f --- /dev/null +++ b/gstudio/static/gstudio/js/wymeditor/lang/he.js @@ -0,0 +1,45 @@ +WYMeditor.STRINGS['he'] = { + Strong: 'חזק', + Emphasis: 'מובלט', + Superscript: 'כתב עילי', + Subscript: 'כתב תחתי', + Ordered_List: 'רשימה ממוספרת', + Unordered_List: 'רשימה לא ממוספרת', + Indent: 'הזחה פנימה', + Outdent: 'הזחה החוצה', + Undo: 'בטל פעולה', + Redo: 'בצע מחדש פעולה', + Link: 'קישור', + Unlink: 'בטל קישור', + Image: 'תמונה', + Table: 'טבלה', + HTML: 'קוד HTML', + Paragraph: 'פסקה', + Heading_1: 'כותרת 1 ; תג <h1>', + Heading_2: 'כותרת 2 ; תג <h2>', + Heading_3: 'כותרת 3 ; תג <h3>', + Heading_4: 'כותרת 4 ; תג <h4>', + Heading_5: 'כותרת 5 ; תג <h5>', + Heading_6: 'כותרת 6 ; תג <h6>', + Preformatted: 'משמר רווחים', + Blockquote: 'ציטוט', + Table_Header: 'כותרת טבלה', + URL: 'קישור (URL)', + Title: 'כותרת', + Alternative_Text: 'טקסט חלופי', + Caption: 'כותרת', + Summary: 'סיכום', + Number_Of_Rows: 'מספר שורות', + Number_Of_Cols: 'מספר טורים', + Submit: 'שלח', + Cancel: 'בטל', + Choose: 'בחר', + Preview: 'תצוגה מקדימה', + Paste_From_Word: 'העתק מ-Word', + Tools: 'כלים', + Containers: 'מיכלים', + Classes: 'מחלקות', + Status: 'מצב', + Source_Code: 'קוד מקור' +}; + diff --git a/gstudio/static/gstudio/js/wymeditor/lang/hr.js b/gstudio/static/gstudio/js/wymeditor/lang/hr.js new file mode 100644 index 00000000..193e31a9 --- /dev/null +++ b/gstudio/static/gstudio/js/wymeditor/lang/hr.js @@ -0,0 +1,45 @@ +WYMeditor.STRINGS['hr'] = { + Strong: 'Podebljano', + Emphasis: 'Naglašeno', + Superscript: 'Iznad', + Subscript: 'Ispod', + Ordered_List: 'Pobrojana lista', + Unordered_List: 'Nepobrojana lista', + Indent: 'Uvuci', + Outdent: 'Izvuci', + Undo: 'Poništi promjenu', + Redo: 'Ponovno promjeni', + Link: 'Hiperveza', + Unlink: 'Ukloni hipervezu', + Image: 'Slika', + Table: 'Tablica', + HTML: 'HTML', + Paragraph: 'Paragraf', + Heading_1: 'Naslov 1', + Heading_2: 'Naslov 2', + Heading_3: 'Naslov 3', + Heading_4: 'Naslov 4', + Heading_5: 'Naslov 5', + Heading_6: 'Naslov 6', + Preformatted: 'Unaprijed formatirano', + Blockquote: 'Citat', + Table_Header: 'Zaglavlje tablice', + URL: 'URL', + Title: 'Naslov', + Alternative_Text: 'Alternativni tekst', + Caption: 'Zaglavlje', + Summary: 'Sažetak', + Number_Of_Rows: 'Broj redova', + Number_Of_Cols: 'Broj kolona', + Submit: 'Snimi', + Cancel: 'Odustani', + Choose: 'Izaberi', + Preview: 'Pregled', + Paste_From_Word: 'Zalijepi iz Word-a', + Tools: 'Alati', + Containers: 'Kontejneri', + Classes: 'Klase', + Status: 'Status', + Source_Code: 'Izvorni kod' +}; + diff --git a/gstudio/static/gstudio/js/wymeditor/lang/hu.js b/gstudio/static/gstudio/js/wymeditor/lang/hu.js new file mode 100644 index 00000000..a8cdbc61 --- /dev/null +++ b/gstudio/static/gstudio/js/wymeditor/lang/hu.js @@ -0,0 +1,45 @@ +WYMeditor.STRINGS['hu'] = { + Strong: 'Félkövér', + Emphasis: 'Kiemelt', + Superscript: 'Felső index', + Subscript: 'Alsó index', + Ordered_List: 'Rendezett lista', + Unordered_List: 'Rendezetlen lista', + Indent: 'Bekezdés', + Outdent: 'Bekezdés törlése', + Undo: 'Visszavon', + Redo: 'Visszaállít', + Link: 'Link', + Unlink: 'Link törlése', + Image: 'Kép', + Table: 'Tábla', + HTML: 'HTML', + Paragraph: 'Bekezdés', + Heading_1: 'Címsor 1', + Heading_2: 'Címsor 2', + Heading_3: 'Címsor 3', + Heading_4: 'Címsor 4', + Heading_5: 'Címsor 5', + Heading_6: 'Címsor 6', + Preformatted: 'Előformázott', + Blockquote: 'Idézet', + Table_Header: 'Tábla Fejléc', + URL: 'Webcím', + Title: 'Megnevezés', + Alternative_Text: 'Alternatív szöveg', + Caption: 'Fejléc', + Summary: 'Summary', + Number_Of_Rows: 'Sorok száma', + Number_Of_Cols: 'Oszlopok száma', + Submit: 'Elküld', + Cancel: 'Mégsem', + Choose: 'Választ', + Preview: 'Előnézet', + Paste_From_Word: 'Másolás Word-ból', + Tools: 'Eszközök', + Containers: 'Tartalmak', + Classes: 'Osztályok', + Status: 'Állapot', + Source_Code: 'Forráskód' +}; + diff --git a/gstudio/static/gstudio/js/wymeditor/lang/it.js b/gstudio/static/gstudio/js/wymeditor/lang/it.js new file mode 100644 index 00000000..ca632a90 --- /dev/null +++ b/gstudio/static/gstudio/js/wymeditor/lang/it.js @@ -0,0 +1,45 @@ +WYMeditor.STRINGS['it'] = { + Strong: 'Grassetto', + Emphasis: 'Corsetto', + Superscript: 'Apice', + Subscript: 'Pedice', + Ordered_List: 'Lista Ordinata', + Unordered_List: 'Lista Puntata', + Indent: 'Indenta', + Outdent: 'Caccia', + Undo: 'Indietro', + Redo: 'Avanti', + Link: 'Inserisci Link', + Unlink: 'Togli Link', + Image: 'Inserisci Immagine', + Table: 'Inserisci Tabella', + HTML: 'HTML', + Paragraph: 'Paragrafo', + Heading_1: 'Heading 1', + Heading_2: 'Heading 2', + Heading_3: 'Heading 3', + Heading_4: 'Heading 4', + Heading_5: 'Heading 5', + Heading_6: 'Heading 6', + Preformatted: 'Preformattato', + Blockquote: 'Blockquote', + Table_Header: 'Header Tabella', + URL: 'Indirizzo', + Title: 'Titolo', + Alternative_Text: 'Testo Alternativo', + Caption: 'Caption', + Summary: 'Summary', + Number_Of_Rows: 'Numero di Righe', + Number_Of_Cols: 'Numero di Colonne', + Submit: 'Invia', + Cancel: 'Cancella', + Choose: 'Scegli', + Preview: 'Anteprima', + Paste_From_Word: 'Incolla', + Tools: 'Tools', + Containers: 'Contenitori', + Classes: 'Classi', + Status: 'Stato', + Source_Code: 'Codice Sorgente' +}; + diff --git a/gstudio/static/gstudio/js/wymeditor/lang/nb.js b/gstudio/static/gstudio/js/wymeditor/lang/nb.js new file mode 100644 index 00000000..7573b78a --- /dev/null +++ b/gstudio/static/gstudio/js/wymeditor/lang/nb.js @@ -0,0 +1,45 @@ +WYMeditor.STRINGS['nb'] = { + Strong: 'Fet', + Emphasis: 'Uthevet', + Superscript: 'Opphøyet', + Subscript: 'Nedsenket', + Ordered_List: 'Nummerert liste', + Unordered_List: 'Punktliste', + Indent: 'Rykk inn', + Outdent: 'Rykk ut', + Undo: 'Angre', + Redo: 'Gjenta', + Link: 'Lenke', + Unlink: 'Ta bort lenken', + Image: 'Bilde', + Table: 'Tabell', + HTML: 'HTML', + Paragraph: 'Avsnitt', + Heading_1: 'Overskrift 1', + Heading_2: 'Overskrift 2', + Heading_3: 'Overskrift 3', + Heading_4: 'Overskrift 4', + Heading_5: 'Overskrift 5', + Heading_6: 'Overskrift 6', + Preformatted: 'Preformatert', + Blockquote: 'Sitat', + Table_Header: 'Tabelloverskrift', + URL: 'URL', + Title: 'Tittel', + Alternative_Text: 'Alternativ tekst', + Caption: 'Overskrift', + Summary: 'Sammendrag', + Number_Of_Rows: 'Antall rader', + Number_Of_Cols: 'Antall kolonner', + Submit: 'Ok', + Cancel: 'Avbryt', + Choose: 'Velg', + Preview: 'Forhåndsvis', + Paste_From_Word: 'Lim inn fra Word', + Tools: 'Verktøy', + Containers: 'Formatering', + Classes: 'Klasser', + Status: 'Status', + Source_Code: 'Kildekode' +}; + diff --git a/gstudio/static/gstudio/js/wymeditor/lang/nl.js b/gstudio/static/gstudio/js/wymeditor/lang/nl.js new file mode 100644 index 00000000..cdfa21cc --- /dev/null +++ b/gstudio/static/gstudio/js/wymeditor/lang/nl.js @@ -0,0 +1,45 @@ +WYMeditor.STRINGS['nl'] = { + Strong: 'Sterk benadrukken', + Emphasis: 'Benadrukken', + Superscript: 'Bovenschrift', + Subscript: 'Onderschrift', + Ordered_List: 'Geordende lijst', + Unordered_List: 'Ongeordende lijst', + Indent: 'Inspringen', + Outdent: 'Terugspringen', + Undo: 'Ongedaan maken', + Redo: 'Opnieuw uitvoeren', + Link: 'Linken', + Unlink: 'Ontlinken', + Image: 'Afbeelding', + Table: 'Tabel', + HTML: 'HTML', + Paragraph: 'Paragraaf', + Heading_1: 'Kop 1', + Heading_2: 'Kop 2', + Heading_3: 'Kop 3', + Heading_4: 'Kop 4', + Heading_5: 'Kop 5', + Heading_6: 'Kop 6', + Preformatted: 'Voorgeformatteerd', + Blockquote: 'Citaat', + Table_Header: 'Tabel-kop', + URL: 'URL', + Title: 'Titel', + Alternative_Text: 'Alternatieve tekst', + Caption: 'Bijschrift', + Summary: 'Summary', + Number_Of_Rows: 'Aantal rijen', + Number_Of_Cols: 'Aantal kolommen', + Submit: 'Versturen', + Cancel: 'Annuleren', + Choose: 'Kiezen', + Preview: 'Voorbeeld bekijken', + Paste_From_Word: 'Plakken uit Word', + Tools: 'Hulpmiddelen', + Containers: 'Teksttypes', + Classes: 'Klassen', + Status: 'Status', + Source_Code: 'Broncode' +}; + diff --git a/gstudio/static/gstudio/js/wymeditor/lang/nn.js b/gstudio/static/gstudio/js/wymeditor/lang/nn.js new file mode 100644 index 00000000..51cec2bd --- /dev/null +++ b/gstudio/static/gstudio/js/wymeditor/lang/nn.js @@ -0,0 +1,45 @@ +WYMeditor.STRINGS['nn'] = { + Strong: 'Feit', + Emphasis: 'Utheva', + Superscript: 'Opphøgd', + Subscript: 'Nedsenka', + Ordered_List: 'Nummerert liste', + Unordered_List: 'Punktliste', + Indent: 'Rykk inn', + Outdent: 'Rykk ut', + Undo: 'Angre', + Redo: 'Gjentaka', + Link: 'Lenkje', + Unlink: 'Ta bort lenkja', + Image: 'Bilete', + Table: 'Tabell', + HTML: 'HTML', + Paragraph: 'Avsnitt', + Heading_1: 'Overskrift 1', + Heading_2: 'Overskrift 2', + Heading_3: 'Overskrift 3', + Heading_4: 'Overskrift 4', + Heading_5: 'Overskrift 5', + Heading_6: 'Overskrift 6', + Preformatted: 'Preformatert', + Blockquote: 'Sitat', + Table_Header: 'Tabelloverskrift', + URL: 'URL', + Title: 'Tittel', + Alternative_Text: 'Alternativ tekst', + Caption: 'Overskrift', + Summary: 'Samandrag', + Number_Of_Rows: 'Tal på rader', + Number_Of_Cols: 'Tal på kolonnar', + Submit: 'Ok', + Cancel: 'Avbryt', + Choose: 'Vel', + Preview: 'Førehandsvis', + Paste_From_Word: 'Lim inn frå Word', + Tools: 'Verkty', + Containers: 'Formatering', + Classes: 'Klassar', + Status: 'Status', + Source_Code: 'Kjeldekode' +}; + diff --git a/gstudio/static/gstudio/js/wymeditor/lang/pl.js b/gstudio/static/gstudio/js/wymeditor/lang/pl.js new file mode 100644 index 00000000..d6c0471a --- /dev/null +++ b/gstudio/static/gstudio/js/wymeditor/lang/pl.js @@ -0,0 +1,45 @@ +WYMeditor.STRINGS['pl'] = { + Strong: 'Nacisk', + Emphasis: 'Emfaza', + Superscript: 'Indeks górny', + Subscript: 'Indeks dolny', + Ordered_List: 'Lista numerowana', + Unordered_List: 'Lista wypunktowana', + Indent: 'Zwiększ wcięcie', + Outdent: 'Zmniejsz wcięcie', + Undo: 'Cofnij', + Redo: 'Ponów', + Link: 'Wstaw link', + Unlink: 'Usuń link', + Image: 'Obraz', + Table: 'Tabela', + HTML: 'Źródło HTML', + Paragraph: 'Akapit', + Heading_1: 'Nagłówek 1', + Heading_2: 'Nagłówek 2', + Heading_3: 'Nagłówek 3', + Heading_4: 'Nagłówek 4', + Heading_5: 'Nagłówek 5', + Heading_6: 'Nagłówek 6', + Preformatted: 'Preformatowany', + Blockquote: 'Cytat blokowy', + Table_Header: 'Nagłówek tabeli', + URL: 'URL', + Title: 'Tytuł', + Alternative_Text: 'Tekst alternatywny', + Caption: 'Tytuł tabeli', + Summary: 'Summary', + Number_Of_Rows: 'Liczba wierszy', + Number_Of_Cols: 'Liczba kolumn', + Submit: 'Wyślij', + Cancel: 'Anuluj', + Choose: 'Wybierz', + Preview: 'Podgląd', + Paste_From_Word: 'Wklej z Worda', + Tools: 'Narzędzia', + Containers: 'Format', + Classes: 'Styl', + Status: 'Status', + Source_Code: 'Kod źródłowy' +}; + diff --git a/gstudio/static/gstudio/js/wymeditor/lang/pt-br.js b/gstudio/static/gstudio/js/wymeditor/lang/pt-br.js new file mode 100644 index 00000000..2ec18fee --- /dev/null +++ b/gstudio/static/gstudio/js/wymeditor/lang/pt-br.js @@ -0,0 +1,45 @@ +WYMeditor.STRINGS['pt-br'] = { + Strong: 'Resaltar', + Emphasis: 'Enfatizar', + Superscript: 'Sobre escrito', + Subscript: 'Sub escrito ', + Ordered_List: 'Lista ordenada', + Unordered_List: 'Lista desordenada', + Indent: 'Indentado', + Outdent: 'Desidentar', + Undo: 'Desfazer', + Redo: 'Refazer', + Link: 'Link', + Unlink: 'Remover Link', + Image: 'Imagem', + Table: 'Tabela', + HTML: 'HTML', + Paragraph: 'Parágrafo', + Heading_1: 'Título 1', + Heading_2: 'Título 2', + Heading_3: 'Título 3', + Heading_4: 'Título 4', + Heading_5: 'Título 5', + Heading_6: 'Título 6', + Preformatted: 'Preformatado', + Blockquote: 'Citação', + Table_Header: 'Título de tabela', + URL: 'URL', + Title: 'Título', + Alternative_Text: 'Texto alternativo', + Caption: 'Legenda', + Summary: 'Summary', + Number_Of_Rows: 'Número de linhas', + Number_Of_Cols: 'Número de colunas', + Submit: 'Enviar', + Cancel: 'Cancelar', + Choose: 'Selecionar', + Preview: 'Previsualizar', + Paste_From_Word: 'Copiar do Word', + Tools: 'Ferramentas', + Containers: 'Conteneiners', + Classes: 'Classes', + Status: 'Estado', + Source_Code: 'Código fonte' +}; + diff --git a/gstudio/static/gstudio/js/wymeditor/lang/pt.js b/gstudio/static/gstudio/js/wymeditor/lang/pt.js new file mode 100644 index 00000000..a3d1a176 --- /dev/null +++ b/gstudio/static/gstudio/js/wymeditor/lang/pt.js @@ -0,0 +1,45 @@ +WYMeditor.STRINGS['pt'] = { + Strong: 'Negrito', + Emphasis: 'Itálico', + Superscript: 'Sobrescrito', + Subscript: 'Subsescrito', + Ordered_List: 'Lista Numerada', + Unordered_List: 'Lista Marcada', + Indent: 'Aumentar Indentaçã', + Outdent: 'Diminuir Indentaçã', + Undo: 'Desfazer', + Redo: 'Restaurar', + Link: 'Link', + Unlink: 'Tirar link', + Image: 'Imagem', + Table: 'Tabela', + HTML: 'HTML', + Paragraph: 'Parágrafo', + Heading_1: 'Título 1', + Heading_2: 'Título 2', + Heading_3: 'Título 3', + Heading_4: 'Título 4', + Heading_5: 'Título 5', + Heading_6: 'Título 6', + Preformatted: 'Pré-formatado', + Blockquote: 'Citação', + Table_Header: 'Cabeçalho Tabela', + URL: 'URL', + Title: 'Título', + Alternative_Text: 'Texto Alterativo', + Caption: 'Título Tabela', + Summary: 'Summary', + Number_Of_Rows: 'Número de Linhas', + Number_Of_Cols: 'Número de Colunas', + Submit: 'Enviar', + Cancel: 'Cancelar', + Choose: 'Escolha', + Preview: 'Prever', + Paste_From_Word: 'Colar do Word', + Tools: 'Ferramentas', + Containers: 'Containers', + Classes: 'Classes', + Status: 'Status', + Source_Code: 'Código Fonte' +}; + diff --git a/gstudio/static/gstudio/js/wymeditor/lang/ru.js b/gstudio/static/gstudio/js/wymeditor/lang/ru.js new file mode 100644 index 00000000..7895f8d9 --- /dev/null +++ b/gstudio/static/gstudio/js/wymeditor/lang/ru.js @@ -0,0 +1,45 @@ +WYMeditor.STRINGS['ru'] = { + Strong: 'Жирный', + Emphasis: 'Наклонный', + Superscript: 'Надстрочный', + Subscript: 'Подстрочный', + Ordered_List: 'Нумерованый список', + Unordered_List: 'Ненумерованый список', + Indent: 'Увеличить отступ', + Outdent: 'Уменьшить отступ', + Undo: 'Отменить', + Redo: 'Повторить', + Link: 'Ссылка', + Unlink: 'Удалить ссылку', + Image: 'Изображение', + Table: 'Таблица', + HTML: 'Править HTML', + Paragraph: 'Параграф', + Heading_1: 'Заголовок 1', + Heading_2: 'Заголовок 2', + Heading_3: 'Заголовок 3', + Heading_4: 'Заголовок 4', + Heading_5: 'Заголовок 5', + Heading_6: 'Заголовок 6', + Preformatted: 'Preformatted', + Blockquote: 'Цитата', + Table_Header: 'Заголовок таблицы', + URL: 'URL', + Title: 'Заголовок', + Alternative_Text: 'Альтернативный текст', + Caption: 'Надпись', + Summary: 'Summary', + Number_Of_Rows: 'Кол-во строк', + Number_Of_Cols: 'Кол-во столбцов', + Submit: 'Отправить', + Cancel: 'Отмена', + Choose: 'Выбор', + Preview: 'Просмотр', + Paste_From_Word: 'Вставить из Word', + Tools: 'Инструменты', + Containers: 'Контейнеры', + Classes: 'Классы', + Status: 'Статус', + Source_Code: 'Исходный код' +}; + diff --git a/gstudio/static/gstudio/js/wymeditor/lang/sv.js b/gstudio/static/gstudio/js/wymeditor/lang/sv.js new file mode 100644 index 00000000..bc5485c7 --- /dev/null +++ b/gstudio/static/gstudio/js/wymeditor/lang/sv.js @@ -0,0 +1,45 @@ +WYMeditor.STRINGS['sv'] = { + Strong: 'Viktigt', + Emphasis: 'Betoning', + Superscript: 'Upphöjt', + Subscript: 'Nedsänkt', + Ordered_List: 'Nummerlista', + Unordered_List: 'Punktlista', + Indent: 'Indrag', + Outdent: 'Utdrag', + Undo: 'Ångra', + Redo: 'Gör om', + Link: 'Länk', + Unlink: 'Ta bort länk', + Image: 'Bild', + Table: 'Tabell', + HTML: 'HTML', + Paragraph: 'Paragraf', + Heading_1: 'Rubrik 1', + Heading_2: 'Rubrik 2', + Heading_3: 'Rubrik 3', + Heading_4: 'Rubrik 4', + Heading_5: 'Rubrik 5', + Heading_6: 'Rubrik 6', + Preformatted: 'Förformaterad', + Blockquote: 'Blockcitat', + Table_Header: 'Tabellrubrik', + URL: 'URL', + Title: 'Titel', + Alternative_Text: 'Alternativ text', + Caption: 'Överskrift', + Summary: 'Summary', + Number_Of_Rows: 'Antal rader', + Number_Of_Cols: 'Antal kolumner', + Submit: 'Skicka', + Cancel: 'Avbryt', + Choose: 'Välj', + Preview: 'Förhandsgranska', + Paste_From_Word: 'Klistra in från Word', + Tools: 'Verktyg', + Containers: 'Formatering', + Classes: 'Klasser', + Status: 'Status', + Source_Code: 'Källkod' +}; + diff --git a/gstudio/static/gstudio/js/wymeditor/lang/tr.js b/gstudio/static/gstudio/js/wymeditor/lang/tr.js new file mode 100644 index 00000000..d26f0ff6 --- /dev/null +++ b/gstudio/static/gstudio/js/wymeditor/lang/tr.js @@ -0,0 +1,45 @@ +WYMeditor.STRINGS['tr'] = { + Strong: 'Kalın', + Emphasis: 'Vurgu', + Superscript: 'Superscript', + Subscript: 'Subscript', + Ordered_List: 'Sıralı List', + Unordered_List: 'Sırasız List', + Indent: 'İçerlek', + Outdent: 'Çıkıntılı', + Undo: 'Geri Al', + Redo: 'Yinele', + Link: 'Bağlantı', + Unlink: 'Bağlantıyı Kaldır', + Image: 'İmaj', + Table: 'Tablo', + HTML: 'HTML', + Paragraph: 'Parağraf', + Heading_1: 'Başlık 1', + Heading_2: 'Başlık 2', + Heading_3: 'Başlık 3', + Heading_4: 'Başlık 4', + Heading_5: 'Başlık 5', + Heading_6: 'Başlık 6', + Preformatted: 'Önceden Formatlı', + Blockquote: 'Alıntı', + Table_Header: 'Tablo Başlığı', + URL: 'URL', + Title: 'Başlık', + Alternative_Text: 'Alternatif Metin', + Caption: 'Etiket', + Summary: 'Summary', + Number_Of_Rows: 'Satır sayısı', + Number_Of_Cols: 'Sütun sayısı', + Submit: 'Gönder', + Cancel: 'İptal', + Choose: 'Seç', + Preview: 'Önizleme', + Paste_From_Word: 'Wordden yapıştır', + Tools: 'Araçlar', + Containers: 'Kapsayıcılar', + Classes: 'Sınıflar', + Status: 'Durum', + Source_Code: 'Kaynak Kodu' +}; + diff --git a/gstudio/static/gstudio/js/wymeditor/lang/zh_cn.js b/gstudio/static/gstudio/js/wymeditor/lang/zh_cn.js new file mode 100644 index 00000000..72f5aaf5 --- /dev/null +++ b/gstudio/static/gstudio/js/wymeditor/lang/zh_cn.js @@ -0,0 +1,47 @@ +WYMeditor.STRINGS['zh_cn'] = { + Strong: '加粗', + Emphasis: '斜体', + Superscript: '上标', + Subscript: '下标', + Ordered_List: '有序列表', + Unordered_List: '无序列表', + Indent: '增加缩进', + Outdent: '减少缩进', + Undo: '撤消', + Redo: '重做', + Link: '链接', + Unlink: '取消链接', + Image: '图片', + Table: '表格', + HTML: 'HTML源代码', + Paragraph: '段落', + Heading_1: '标题 1', + Heading_2: '标题 2', + Heading_3: '标题 3', + Heading_4: '标题 4', + Heading_5: '标题 5', + Heading_6: '标题 6', + Preformatted: '原始文本', + Blockquote: '引语', + Table_Header: '表头', + URL: '地址', + Title: '提示文字', + Alternative_Text: '失效文字', + Caption: '标题', + Summary: 'Summary', + Number_Of_Rows: '行数', + Number_Of_Cols: '列数', + Submit: '提交', + Cancel: '放弃', + Choose: '选择', + Preview: '预览', + Paste_From_Word: '从Word粘贴纯文本', + Tools: '工具', + Containers: '容器', + Classes: '预定义样式', + Status: '状态', + Source_Code: '源代码', + Attachment: '附件', + NewParagraph: '新段落' +}; + diff --git a/gstudio/static/gstudio/js/wymeditor/plugins/embed/jquery.wymeditor.embed.js b/gstudio/static/gstudio/js/wymeditor/plugins/embed/jquery.wymeditor.embed.js new file mode 100644 index 00000000..e553c3e5 --- /dev/null +++ b/gstudio/static/gstudio/js/wymeditor/plugins/embed/jquery.wymeditor.embed.js @@ -0,0 +1,52 @@ +/* + * WYMeditor : what you see is What You Mean web-based editor + * Copyright (c) 2005 - 2009 Jean-Francois Hovinne, http://www.wymeditor.org/ + * Dual licensed under the MIT (MIT-license.txt) + * and GPL (GPL-license.txt) licenses. + * + * For further information visit: + * http://www.wymeditor.org/ + * + * File Name: + * jquery.wymeditor.embed.js + * Experimental embed plugin + * + * File Authors: + * Jonatan Lundin (jonatan.lundin a-t gmail dotcom) + */ + +/* + * ISSUES: + * - The closing object tag seems to be stripped out... + */ +(function() { + if (WYMeditor && WYMeditor.XhtmlValidator['_tags']['param']['attributes']) { + + WYMeditor.XhtmlValidator['_tags']["embed"] = { + "attributes":[ + "allowscriptaccess", + "allowfullscreen", + "height", + "src", + "type", + "width" + ] + }; + + WYMeditor.XhtmlValidator['_tags']['param']['attributes'] = { + '0':'name', + '1':'type', + 'valuetype':/^(data|ref|object)$/, + '2':'valuetype', + '3':'value' + }; + + var XhtmlSaxListener = WYMeditor.XhtmlSaxListener; + WYMeditor.XhtmlSaxListener = function () { + var listener = XhtmlSaxListener.call(this); + listener.block_tags.push('embed'); + return listener; + }; + WYMeditor.XhtmlSaxListener.prototype = XhtmlSaxListener.prototype; + } +})(); diff --git a/gstudio/static/gstudio/js/wymeditor/plugins/fullscreen/icon_fullscreen.gif b/gstudio/static/gstudio/js/wymeditor/plugins/fullscreen/icon_fullscreen.gif Binary files differnew file mode 100644 index 00000000..d2a8b0ab --- /dev/null +++ b/gstudio/static/gstudio/js/wymeditor/plugins/fullscreen/icon_fullscreen.gif diff --git a/gstudio/static/gstudio/js/wymeditor/plugins/fullscreen/jquery.wymeditor.fullscreen.js b/gstudio/static/gstudio/js/wymeditor/plugins/fullscreen/jquery.wymeditor.fullscreen.js new file mode 100644 index 00000000..275c8169 --- /dev/null +++ b/gstudio/static/gstudio/js/wymeditor/plugins/fullscreen/jquery.wymeditor.fullscreen.js @@ -0,0 +1,127 @@ +/* + * WYMeditor : what you see is What You Mean web-based editor + * Copyright (c) 2005 - 2009 Jean-Francois Hovinne, http://www.wymeditor.org/ + * Dual licensed under the MIT (MIT-license.txt) + * and GPL (GPL-license.txt) licenses. + * + * For further information visit: + * http://www.wymeditor.org/ + * + * File Name: + * jquery.wymeditor.fullscreen.js + * Fullscreen plugin for WYMeditor + * + * File Authors: + * Luis Santos (luis.santos a-t openquest dotpt) + * Jonatan Lundin (jonatan.lundin a-t gmail dotcom) + * Gerd Riesselmann (gerd a-t gyro-php dot org) : Fixed issue with new skin layout + */ + +//Extend WYMeditor +WYMeditor.editor.prototype.fullscreen = function() { + var wym = this, + $box = jQuery(this._box), + $iframe = jQuery(this._iframe), + $overlay = null, + $window = jQuery(window), + + editorMargin = 15; // Margin from window (without padding) + + + //construct the button's html + var html = "<li class='wym_tools_fullscreen'>" + + "<a name='Fullscreen' href='#'" + + " style='background-image:" + + " url(" + wym._options.basePath +"plugins/fullscreen/icon_fullscreen.gif)'>" + + "Fullscreen" + + "</a></li>"; + + //add the button to the tools box + $box.find(wym._options.toolsSelector + wym._options.toolsListSelector) + .append(html); + + function resize () { + // Calculate margins + var uiHeight = $box.outerHeight(true) + - $iframe.outerHeight(true), + editorPadding = $box.outerWidth() - $box.width(), + + // Calculate heights + screenHeight = $window.height(), + iframeHeight = (screenHeight + - uiHeight + - (editorMargin * 2)) + 'px', + + // Calculate witdths + screenWidth = $window.width(), + boxWidth = (screenWidth + - editorPadding + - (editorMargin * 2)) + 'px'; + + $box.css('width', boxWidth); + $iframe.css('height', iframeHeight); + $overlay.css({ + 'height': screenHeight + 'px', + 'width': screenWidth + 'px' + }); + }; + + //handle click event + $box.find('li.wym_tools_fullscreen a').click(function() { + if ($box.css('position') != 'fixed') { + // Store previous inline styles + $box.data('wym-inline-css', $box.attr('style')); + $iframe.data('wym-inline-css', $iframe.attr('style')); + + // Create overlay + $overlay = jQuery('<div id="wym-fullscreen-overlay"></div>') + .appendTo('body').css({ + 'position': 'fixed', + 'background-color': 'rgb(0, 0, 0)', + 'opacity': '0.75', + 'z-index': '98', + 'top': '0px', + 'left': '0px' + }); + + // Possition the editor + $box.css({ + 'position': 'fixed', + 'z-index': '99', + 'top': editorMargin + 'px', + 'left': editorMargin + 'px' + }); + + // Bind event listeners + $window.bind('resize', resize); + $box.find('li.wym_tools_html a').bind('click', resize); + + // Force resize + resize(); + } else { + // Unbind event listeners + $window.unbind('resize', resize); + $box.find('li.wym_tools_html a').unbind('click', resize); + + // Remove inline styles + $box.css({ + 'position': 'static', + 'z-index': '', + 'width': '', + 'top': '', + 'left': '' + }); + $iframe.css('height', ''); + + // Remove overlay + $overlay.remove(); + $overlay = null; + + // Retore previous inline styles + $box.attr('style', $box.data('wym-inline-css')); + $iframe.attr('style', $iframe.data('wym-inline-css')); + } + + return false; + }); +}; diff --git a/gstudio/static/gstudio/js/wymeditor/plugins/hovertools/jquery.wymeditor.hovertools.js b/gstudio/static/gstudio/js/wymeditor/plugins/hovertools/jquery.wymeditor.hovertools.js new file mode 100644 index 00000000..2c71ba53 --- /dev/null +++ b/gstudio/static/gstudio/js/wymeditor/plugins/hovertools/jquery.wymeditor.hovertools.js @@ -0,0 +1,57 @@ +/* + * WYMeditor : what you see is What You Mean web-based editor + * Copyright (c) 2005 - 2009 Jean-Francois Hovinne, http://www.wymeditor.org/ + * Dual licensed under the MIT (MIT-license.txt) + * and GPL (GPL-license.txt) licenses. + * + * For further information visit: + * http://www.wymeditor.org/ + * + * File Name: + * jquery.wymeditor.hovertools.js + * hovertools plugin for WYMeditor + * + * File Authors: + * Jean-Francois Hovinne (jf.hovinne a-t wymeditor dotorg) + */ + +//Extend WYMeditor +WYMeditor.editor.prototype.hovertools = function() { + + var wym = this; + + //bind events on buttons + jQuery(this._box).find(this._options.toolSelector).hover( + function() { + wym.status(jQuery(this).html()); + }, + function() { + wym.status(' '); + } + ); + + //classes: add/remove a style attr to matching elems + //while mouseover/mouseout + jQuery(this._box).find(this._options.classSelector).hover( + function() { + var aClasses = eval(wym._options.classesItems); + var sName = jQuery(this).attr(WYMeditor.NAME); + var oClass = WYMeditor.Helper.findByName(aClasses, sName); + + if(oClass){ + jqexpr = oClass.expr; + //don't use jQuery.find() on the iframe body + //because of MSIE + jQuery + expando issue (#JQ1143) + if(!jQuery.browser.msie) + jQuery(wym._doc).find(jqexpr).css('background-color','#cfc'); + } + }, + function() { + //don't use jQuery.find() on the iframe body + //because of MSIE + jQuery + expando issue (#JQ1143) + if(!jQuery.browser.msie) + jQuery(wym._doc).find('*').removeAttr('style'); + } + ); + +}; diff --git a/gstudio/static/gstudio/js/wymeditor/plugins/resizable/jquery.wymeditor.resizable.js b/gstudio/static/gstudio/js/wymeditor/plugins/resizable/jquery.wymeditor.resizable.js new file mode 100644 index 00000000..1ba2d2eb --- /dev/null +++ b/gstudio/static/gstudio/js/wymeditor/plugins/resizable/jquery.wymeditor.resizable.js @@ -0,0 +1,91 @@ +/* + * WYMeditor : what you see is What You Mean web-based editor + * Copyright (c) 2005 - 2009 Jean-Francois Hovinne, http://www.wymeditor.org/ + * Dual licensed under the MIT (MIT-license.txt) + * and GPL (GPL-license.txt) licenses. + * + * For further information visit: + * http://www.wymeditor.org/ + * + * File Name: + * jquery.wymeditor.resizable.js + * resize plugin for WYMeditor + * + * File Authors: + * Peter Eschler (peschler _at_ gmail.com) + * Jean-Francois Hovinne - http://www.hovinne.com/ + * + * Version: + * 0.4 + * + * Changelog: + * + * 0.4 + * - Removed UI and UI.resizable scripts loading - see #167 (jfh). + * + * 0.3 + * - Added 'iframeOriginalSize' and removed 'ui.instance' calls (jfh). + * + * 0.2 + * - Added full support for all jQueryUI resizable plugin options. + * - Refactored and documented code. + * 0.1 + * - Initial release. + */ + +/** + * The resizable plugin makes the wymeditor box vertically resizable. + * It it based on the ui.resizable.js plugin of the jQuery UI library. + * + * The WYMeditor resizable plugin supports all parameters of the jQueryUI + * resizable plugin. The parameters are passed like this: + * + * wym.resizable({ handles: "s,e", + * maxHeight: 600 }); + * + * DEPENDENCIES: jQuery UI, jQuery UI resizable + * + * @param options options for the plugin + */ +WYMeditor.editor.prototype.resizable = function(options) { + + var wym = this; + var iframe = jQuery(wym._box).find('iframe'); + var iframeOriginalSize = {}; + + // Define some default options + var default_options = { + start: function(e, ui) { + iframeOriginalSize = { + width: jQuery(iframe).width(), + height: jQuery(iframe).height() + } + }, + + // resize is called by the jQuery resizable plugin whenever the + // client area was resized. + resize: function(e, ui) { + var diff = ui.size.height - ui.originalSize.height; + jQuery(iframe).height( iframeOriginalSize.height + diff ); + + // If the plugin has horizontal resizing disabled we need to + // adjust the "width" attribute of the area css, because the + // resizing will set a fixed width (which breaks liquid layout + // of the wymeditor area). + if( !ui.options.handles['w'] && !ui.options.handles['e'] ) { + ui.size.width = "inherit"; + } + }, + handles: "s,e,se", + minHeight: 250, + maxHeight: 600 + }; + + // Merge given options with default options. Given options override + // default ones. + var final_options = jQuery.extend(default_options, options); + + if(jQuery.isFunction( jQuery.fn.resizable )) jQuery(wym._box).resizable(final_options); + else WYMeditor.console.error('Oops, jQuery UI.resizable unavailable.'); + +}; diff --git a/gstudio/static/gstudio/js/wymeditor/plugins/resizable/readme.txt b/gstudio/static/gstudio/js/wymeditor/plugins/resizable/readme.txt new file mode 100644 index 00000000..2a0444ec --- /dev/null +++ b/gstudio/static/gstudio/js/wymeditor/plugins/resizable/readme.txt @@ -0,0 +1,124 @@ + + +resizable plugin for WYMeditor +############################## + +The ``resizable`` plugin for WYMeditor_ enables vertical resizing of the +editor area. The plugin is based on the jQuery UI library. + +Requirements +============ +The following packages are required for using the WYMeditor ``resizable`` +plugin: + +* jQuery (tested with jQuery ``jquery-1.2.4a.js`` from ``jquery.ui`` package) +* WYMeditor SVN trunk (Revision: 482) +* jQuery-UI (tested with ``jquery.ui-1.5b2``) + +It should be possible to use this plugin with ``WYMeditor-0.4`` but I have not +tried. + +Download +======== +You can download the WYMeditor ``resizable`` plugin here: + +* wymeditor-resizable-plugin-0.2.tgz_ +* wymeditor-resizable-plugin-0.1.tgz_ + +See the Changelog_ for more infos about the releases. + +.. _wymeditor-resizable-plugin-0.2.tgz: http://pyjax.net/download/wymeditor-resizable-plugin-0.2.tgz +.. _wymeditor-resizable-plugin-0.1.tgz: http://pyjax.net/download/wymeditor-resizable-plugin-0.1.tgz + +Installation +============ +Just extract the downloaded archive into your WYMeditor's ``plugin`` +directory. + +Usage +===== +For general instructions on WYMeditor plugins please refer to the `WYMeditor +plugin page`_. + +To use the ``resizable`` plugin simply include the plugin's JavaScript file in +your code. You **do not** need to include the jQuery UI files - this is done +automatically by the plugin (see `Internals`_):: + + <script type="text/javascript" + src="/js/wymeditor/plugins/resizable/jquery.wymeditor.resizable.js"> + </script> + +Make sure to adjust the ``src`` attribute to your needs, then initialize the +plugin in WYMeditor's ``postInit`` function:: + + wymeditor({postInit: function(wym) { + wym.hovertools(); // other plugins... + wym.resizable({handles: "s,e", + maxHeight: 600}); + } + }) + +The ``resizable`` plugin takes exactly one parameter, which is an object literal +containing the options of the plugin. The WYMeditor ``resizable`` plugin +supports all options of the jQuery UI ``resizable`` plugin. These are the +default values used by the plugin:: + + handles: "s,e,se", + minHeight: 250, + maxHeight: 600 + +See the `jQuery UI resizable plugin docs`_ for a list of all options. + +That's it! You are now able to resize the WYMeditor vertically, horizontally or +both, depending on your options. + +.. _jQuery UI resizable plugin docs: http://docs.jquery.com/UI/Resizables + +Internals +========= +The plugin takes care of loading the necessary jQuery UI files (``base`` and +``resizable``) from the same path the jQuery library was loaded. Here's how +it's done:: + + // Get the jQuery path from the editor, stripping away the jQuery file. + // see http://www.oreilly.com/catalog/regex/chapter/ch04.html + // The match result array contains the path and the filename. + var jQueryPath = wym.computeJqueryPath().match(/^(.*)\/(.*)$/)[1]; + + // Make an array of the external JavaScript files required by the plugin. + var jQueryPlugins = [jQueryPath + '/ui.base.js', + jQueryPath + '/ui.resizable.js']; + + // First get the jQuery UI base file + $.getScript(jQueryPlugins[0]); + + // Get the jQuery UI resizeable plugin and then init the wymeditor resizable + // plugin. It is import to do the initialisation after loading the + // necessary jQuery UI files has finished, otherwise the "resizable" method + // would not be available. + $.getScript(jQueryPlugins[1], function() { + jQuery(wym._box).resizable(final_options); + }); + +An alternative approach would be to use an AJAX queue when getting the script +files to ensure that all jQuery files are loaded before the initialisation code +of the plugin is executed. There is an `jQuery AJAX queue plugin`_ which does +that. + +.. _jQuery AJAX queue plugin: http://plugins.jquery.com/project/ajaxqueue + +Changelog +========= + +0.2 +--- +- Added full support for all jQuery UI resizable plugin options. +- Refactored and documented code. +- Now contains a packed version (775 bytes). + +0.1 +--- +- Initial release. + +.. _WYMeditor: http://www.wymeditor.org/ +.. _WYMeditor plugin page: http://trac.wymeditor.org/trac/wiki/0.4/Plugins diff --git a/gstudio/static/gstudio/js/wymeditor/plugins/tidy/README b/gstudio/static/gstudio/js/wymeditor/plugins/tidy/README new file mode 100644 index 00000000..acc7ffd4 --- /dev/null +++ b/gstudio/static/gstudio/js/wymeditor/plugins/tidy/README @@ -0,0 +1,19 @@ +WYMeditor : what you see is What You Mean web-based editor +Copyright (c) 2005 - 2009 Jean-Francois Hovinne, http://www.wymeditor.org/ +Dual licensed under the MIT (MIT-license.txt) +and GPL (GPL-license.txt) licenses. + +For further information visit: + http://www.wymeditor.org/ + +File Name: + README - HTML Tidy plugin for WYMeditor + +File Authors: + Jean-François Hovinne (jf.hovinne a-t wymeditor dotorg) + +Credits: + 'HTML Tidy' by Dave Ragget - http://tidy.sourceforge.net/ + Icon 'wand' by Mark James - http://famfamfam.com/ + +WYMeditor documentation is available online at http://www.wymeditor.org/ diff --git a/gstudio/static/gstudio/js/wymeditor/plugins/tidy/jquery.wymeditor.tidy.js b/gstudio/static/gstudio/js/wymeditor/plugins/tidy/jquery.wymeditor.tidy.js new file mode 100644 index 00000000..bf30c4cb --- /dev/null +++ b/gstudio/static/gstudio/js/wymeditor/plugins/tidy/jquery.wymeditor.tidy.js @@ -0,0 +1,82 @@ +/* + * WYMeditor : what you see is What You Mean web-based editor + * Copyright (c) 2005 - 2009 Jean-Francois Hovinne, http://www.wymeditor.org/ + * Dual licensed under the MIT (MIT-license.txt) + * and GPL (GPL-license.txt) licenses. + * + * For further information visit: + * http://www.wymeditor.org/ + * + * File Name: + * jquery.wymeditor.tidy.js + * HTML Tidy plugin for WYMeditor + * + * File Authors: + * Jean-Francois Hovinne (jf.hovinne a-t wymeditor dotorg) + */ + +//Extend WYMeditor +WYMeditor.editor.prototype.tidy = function(options) { + var tidy = new WymTidy(options, this); + return(tidy); +}; + +//WymTidy constructor +function WymTidy(options, wym) { + + options = jQuery.extend({ + + sUrl: wym._options.basePath + "plugins/tidy/tidy.php", + sButtonHtml: "<li class='wym_tools_tidy'>" + + "<a name='CleanUp' href='#'" + + " style='background-image:" + + " url(" + wym._options.basePath + "plugins/tidy/wand.png)'>" + + "Clean up HTML" + + "</a></li>", + + sButtonSelector: "li.wym_tools_tidy a" + + }, options); + + this._options = options; + this._wym = wym; + +}; + +//WymTidy initialization +WymTidy.prototype.init = function() { + + var tidy = this; + + jQuery(this._wym._box).find( + this._wym._options.toolsSelector + this._wym._options.toolsListSelector) + .append(this._options.sButtonHtml); + + //handle click event + jQuery(this._wym._box).find(this._options.sButtonSelector).click(function() { + tidy.cleanup(); + return(false); + }); + +}; + +//WymTidy cleanup +WymTidy.prototype.cleanup = function() { + + var wym = this._wym; + var html = "<html><body>" + wym.xhtml() + "</body></html>"; + + jQuery.post(this._options.sUrl, { html: html}, function(data) { + + if(data.length > 0 && data != '0') { + if(data.indexOf("<?php") == 0) { + wym.status("Ooops... Is PHP installed?"); + } else { + wym.html(data); + wym.status("HTML has been cleaned up."); + } + } else { + wym.status("An error occurred."); + } + }); +}; diff --git a/gstudio/static/gstudio/js/wymeditor/plugins/tidy/tidy.php b/gstudio/static/gstudio/js/wymeditor/plugins/tidy/tidy.php new file mode 100644 index 00000000..23b9bec2 --- /dev/null +++ b/gstudio/static/gstudio/js/wymeditor/plugins/tidy/tidy.php @@ -0,0 +1,36 @@ +<?php + +if (get_magic_quotes_gpc()) $html = stripslashes($_REQUEST['html']); +else $html = $_REQUEST['html']; + +if(strlen($html) > 0) { + + // Specify configuration + $config = array( + 'bare' => true, + 'clean' => true, + 'doctype' => 'strict', + 'drop-empty-paras' => true, + 'drop-font-tags' => true, + 'drop-proprietary-attributes' => true, + 'enclose-block-text' => true, + 'indent' => false, + 'join-classes' => true, + 'join-styles' => true, + 'logical-emphasis' => true, + 'output-xhtml' => true, + 'show-body-only' => true, + 'wrap' => 0); + + // Tidy + $tidy = new tidy; + $tidy->parseString($html, $config, 'utf8'); + $tidy->cleanRepair(); + + // Output + echo $tidy; +} else { + +echo ('0'); +} +?> diff --git a/gstudio/static/gstudio/js/wymeditor/plugins/tidy/wand.png b/gstudio/static/gstudio/js/wymeditor/plugins/tidy/wand.png Binary files differnew file mode 100644 index 00000000..bb55eeab --- /dev/null +++ b/gstudio/static/gstudio/js/wymeditor/plugins/tidy/wand.png diff --git a/gstudio/static/gstudio/js/wymeditor/skins/compact/icons.png b/gstudio/static/gstudio/js/wymeditor/skins/compact/icons.png Binary files differnew file mode 100644 index 00000000..c6eb463f --- /dev/null +++ b/gstudio/static/gstudio/js/wymeditor/skins/compact/icons.png diff --git a/gstudio/static/gstudio/js/wymeditor/skins/compact/skin.css b/gstudio/static/gstudio/js/wymeditor/skins/compact/skin.css new file mode 100644 index 00000000..4a6a0c6c --- /dev/null +++ b/gstudio/static/gstudio/js/wymeditor/skins/compact/skin.css @@ -0,0 +1,134 @@ +/* + * WYMeditor : what you see is What You Mean web-based editor + * Copyright (c) 2005 - 2009 Jean-Francois Hovinne, http://www.wymeditor.org/ + * Dual licensed under the MIT (MIT-license.txt) + * and GPL (GPL-license.txt) licenses. + * + * For further information visit: + * http://www.wymeditor.org/ + * + * File Name: + * screen.css + * main stylesheet for the WYMeditor skin + * See the documentation for more info. + * + * File Authors: + * Daniel Reszka (d.reszka a-t wymeditor dotorg) + * Jean-Francois Hovinne (jf.hovinne a-t wymeditor dotorg) +*/ + +/*TRYING TO RESET STYLES THAT MAY INTERFERE WITH WYMEDITOR*/ + .wym_skin_compact p, .wym_skin_compact h2, .wym_skin_compact h3, + .wym_skin_compact ul, .wym_skin_compact li { background: transparent url(); margin: 0; padding: 0; border-width:0; list-style: none; } + + +/*HIDDEN BY DEFAULT*/ + .wym_skin_compact .wym_area_left { display: none; } + .wym_skin_compact .wym_area_right { display: none; } + + +/*TYPO*/ + .wym_skin_compact { font-size: 10px; font-family: Verdana, Arial, sans-serif; } + .wym_skin_compact h2 { font-size: 110%; /* = 11px */} + .wym_skin_compact h3 { font-size: 100%; /* = 10px */} + .wym_skin_compact li { font-size: 100%; /* = 10px */} + + +/*WYM_BOX*/ + .wym_skin_compact { border: 1px solid gray; padding: 5px} + + /*auto-clear the wym_box*/ + .wym_skin_compact:after { content: "."; display: block; height: 0; clear: both; visibility: hidden; } + * html .wym_skin_compact { height: 1%;} + + +/*WYM_HTML*/ + .wym_skin_compact .wym_html { width: 98%;} + .wym_skin_compact .wym_html textarea { font-size: 120%; width: 100%; height: 200px; border: 1px solid gray; background: white; } + + +/*WYM_IFRAME*/ + .wym_skin_compact .wym_iframe { width: 98%;} + .wym_skin_compact .wym_iframe iframe { width: 100%; height: 200px; border: 1px solid gray; background: white } + + +/*AREAS*/ + .wym_skin_compact .wym_area_left { width: 100px; float: left;} + .wym_skin_compact .wym_area_right { width: 150px; float: right;} + .wym_skin_compact .wym_area_bottom { height: 1%; clear: both;} + * html .wym_skin_compact .wym_area_main { height: 1%;} + * html .wym_skin_compact .wym_area_top { height: 1%;} + *+html .wym_skin_compact .wym_area_top { height: 1%;} + +/*SECTIONS SYSTEM*/ + + /*common defaults for all sections*/ + .wym_skin_compact .wym_section { margin-bottom: 5px; } + .wym_skin_compact .wym_section h2, + .wym_skin_compact .wym_section h3 { padding: 1px 3px; margin: 0; } + .wym_skin_compact .wym_section a { padding: 0 3px; display: block; text-decoration: none; color: black; } + .wym_skin_compact .wym_section a:hover { background-color: yellow; } + /*hide section titles by default*/ + .wym_skin_compact .wym_section h2 { display: none; } + /*disable any margin-collapse*/ + .wym_skin_compact .wym_section { padding-top: 1px; padding-bottom: 1px; } + /*auto-clear sections*/ + .wym_skin_compact .wym_section ul:after { content: "."; display: block; height: 0; clear: both; visibility: hidden; } + * html .wym_skin_compact .wym_section ul { height: 1%;} + + /*option: add this class to a section to make it render as a panel*/ + .wym_skin_compact .wym_panel { } + .wym_skin_compact .wym_panel h2 { display: block; } + + /*option: add this class to a section to make it render as a dropdown menu*/ + .wym_skin_compact .wym_dropdown h2 { display: block; } + .wym_skin_compact .wym_dropdown ul { display: none; position: absolute; background: white; } + .wym_skin_compact .wym_dropdown:hover ul, + .wym_skin_compact .wym_dropdown.hover ul { display: block; } + + /*option: add this class to a section to make its elements render buttons (icons are only available for the wym_tools section for now)*/ + .wym_skin_compact .wym_buttons li { float:left;} + .wym_skin_compact .wym_buttons a { width: 20px; height: 20px; overflow: hidden; padding: 2px } + /*image replacements*/ + .wym_skin_compact .wym_buttons li a { background: url(icons.png) no-repeat; text-indent: -9999px;} + .wym_skin_compact .wym_buttons li.wym_tools_strong a { background-position: 0 -382px;} + .wym_skin_compact .wym_buttons li.wym_tools_emphasis a { background-position: 0 -22px;} + .wym_skin_compact .wym_buttons li.wym_tools_superscript a { background-position: 0 -430px;} + .wym_skin_compact .wym_buttons li.wym_tools_subscript a { background-position: 0 -454px;} + .wym_skin_compact .wym_buttons li.wym_tools_ordered_list a { background-position: 0 -48px;} + .wym_skin_compact .wym_buttons li.wym_tools_unordered_list a{ background-position: 0 -72px;} + .wym_skin_compact .wym_buttons li.wym_tools_indent a { background-position: 0 -574px;} + .wym_skin_compact .wym_buttons li.wym_tools_outdent a { background-position: 0 -598px;} + .wym_skin_compact .wym_buttons li.wym_tools_undo a { background-position: 0 -502px;} + .wym_skin_compact .wym_buttons li.wym_tools_redo a { background-position: 0 -526px;} + .wym_skin_compact .wym_buttons li.wym_tools_link a { background-position: 0 -96px;} + .wym_skin_compact .wym_buttons li.wym_tools_unlink a { background-position: 0 -168px;} + .wym_skin_compact .wym_buttons li.wym_tools_image a { background-position: 0 -121px;} + .wym_skin_compact .wym_buttons li.wym_tools_table a { background-position: 0 -144px;} + .wym_skin_compact .wym_buttons li.wym_tools_paste a { background-position: 0 -552px;} + .wym_skin_compact .wym_buttons li.wym_tools_html a { background-position: 0 -193px;} + .wym_skin_compact .wym_buttons li.wym_tools_preview a { background-position: 0 -408px;} + +/*DECORATION*/ + .wym_skin_compact .wym_section h2 { background: #f0f0f0; border: solid gray; border-width: 0 0 1px;} + .wym_skin_compact .wym_section h2 span { color: gray;} + .wym_skin_compact .wym_panel { padding: 0; border: solid gray; border-width: 1px; background: white;} + .wym_skin_compact .wym_panel ul { margin: 2px 0 5px; } + .wym_skin_compact .wym_dropdown { padding: 0; border: solid gray; border-width: 1px 1px 0 1px; } + .wym_skin_compact .wym_dropdown ul { border: solid gray; border-width: 0 1px 1px 1px; margin-left: -1px; padding: 5px 10px 5px 3px;} + +/*DIALOGS*/ + .wym_dialog div.row { margin-bottom: 5px;} + .wym_dialog div.row input { margin-right: 5px;} + .wym_dialog div.row label { float: left; width: 150px; display: block; text-align: right; margin-right: 10px; } + .wym_dialog div.row-indent { padding-left: 160px; } + /*autoclearing*/ + .wym_dialog div.row:after { content: "."; display: block; height: 0; clear: both; visibility: hidden; } + .wym_dialog div.row { display: inline-block; } + /* Hides from IE-mac \*/ + * html .wym_dialog div.row { height: 1%; } + .wym_dialog div.row { display: block; } + /* End hide from IE-mac */ + +/*WYMEDITOR_LINK*/ + a.wym_wymeditor_link { text-indent: -9999px; float: right; display: block; width: 50px; height: 15px; background: url(../wymeditor_icon.png); overflow: hidden; text-decoration: none; } diff --git a/gstudio/static/gstudio/js/wymeditor/skins/compact/skin.js b/gstudio/static/gstudio/js/wymeditor/skins/compact/skin.js new file mode 100644 index 00000000..cfb7cc15 --- /dev/null +++ b/gstudio/static/gstudio/js/wymeditor/skins/compact/skin.js @@ -0,0 +1,35 @@ +WYMeditor.SKINS['compact'] = { + + init: function(wym) { + + //move the containers panel to the top area + jQuery(wym._options.containersSelector + ', ' + + wym._options.classesSelector, wym._box) + .appendTo( jQuery("div.wym_area_top", wym._box) ) + .addClass("wym_dropdown") + .css({"margin-right": "10px", "width": "120px", "float": "left"}); + + //render following sections as buttons + jQuery(wym._options.toolsSelector, wym._box) + .addClass("wym_buttons") + .css({"margin-right": "10px", "float": "left"}); + + //make hover work under IE < 7 + jQuery(".wym_section", wym._box).hover(function(){ + jQuery(this).addClass("hover"); + },function(){ + jQuery(this).removeClass("hover"); + }); + + var postInit = wym._options.postInit; + wym._options.postInit = function(wym) { + + if(postInit) postInit.call(wym, wym); + var rule = { + name: 'body', + css: 'background-color: #f0f0f0;' + }; + wym.addCssRule( wym._doc.styleSheets[0], rule); + }; + } +}; diff --git a/gstudio/static/gstudio/js/wymeditor/skins/default/icons.png b/gstudio/static/gstudio/js/wymeditor/skins/default/icons.png Binary files differnew file mode 100644 index 00000000..c6eb463f --- /dev/null +++ b/gstudio/static/gstudio/js/wymeditor/skins/default/icons.png diff --git a/gstudio/static/gstudio/js/wymeditor/skins/default/skin.css b/gstudio/static/gstudio/js/wymeditor/skins/default/skin.css new file mode 100644 index 00000000..eb4680fc --- /dev/null +++ b/gstudio/static/gstudio/js/wymeditor/skins/default/skin.css @@ -0,0 +1,133 @@ +/* + * WYMeditor : what you see is What You Mean web-based editor + * Copyright (c) 2005 - 2009 Jean-Francois Hovinne, http://www.wymeditor.org/ + * Dual licensed under the MIT (MIT-license.txt) + * and GPL (GPL-license.txt) licenses. + * + * For further information visit: + * http://www.wymeditor.org/ + * + * File Name: + * skin.css + * main stylesheet for the default WYMeditor skin + * See the documentation for more info. + * + * File Authors: + * Daniel Reszka (d.reszka a-t wymeditor dotorg) +*/ + +/*TRYING TO RESET STYLES THAT MAY INTERFERE WITH WYMEDITOR*/ + .wym_skin_default p, .wym_skin_default h2, .wym_skin_default h3, + .wym_skin_default ul, .wym_skin_default li { background: transparent url(); margin: 0; padding: 0; border-width:0; list-style: none; } + + +/*HIDDEN BY DEFAULT*/ + .wym_skin_default .wym_area_left { display: none; } + .wym_skin_default .wym_area_right { display: block; } + + +/*TYPO*/ + .wym_skin_default { font-size: 62.5%; font-family: Verdana, Arial, sans-serif; } + .wym_skin_default h2 { font-size: 110%; /* = 11px */} + .wym_skin_default h3 { font-size: 100%; /* = 10px */} + .wym_skin_default li { font-size: 100%; /* = 10px */} + + +/*WYM_BOX*/ + .wym_skin_default { border: 1px solid gray; background: #f2f2f2; padding: 5px} + + /*auto-clear the wym_box*/ + .wym_skin_default:after { content: "."; display: block; height: 0; clear: both; visibility: hidden; } + * html .wym_skin_default { height: 1%;} + + +/*WYM_HTML*/ + .wym_skin_default .wym_html { width: 98%;} + .wym_skin_default .wym_html textarea { width: 100%; height: 200px; border: 1px solid gray; background: white; } + + +/*WYM_IFRAME*/ + .wym_skin_default .wym_iframe { width: 98%;} + .wym_skin_default .wym_iframe iframe { width: 100%; height: 200px; border: 1px solid gray; background: white } + + +/*AREAS*/ + .wym_skin_default .wym_area_left { width: 150px; float: left;} + .wym_skin_default .wym_area_right { width: 150px; float: right;} + .wym_skin_default .wym_area_bottom { height: 1%; clear: both;} + * html .wym_skin_default .wym_area_main { height: 1%;} + * html .wym_skin_default .wym_area_top { height: 1%;} + *+html .wym_skin_default .wym_area_top { height: 1%;} + +/*SECTIONS SYSTEM*/ + + /*common defaults for all sections*/ + .wym_skin_default .wym_section { margin-bottom: 5px; } + .wym_skin_default .wym_section h2, + .wym_skin_default .wym_section h3 { padding: 1px 3px; margin: 0; } + .wym_skin_default .wym_section a { padding: 0 3px; display: block; text-decoration: none; color: black; } + .wym_skin_default .wym_section a:hover { background-color: yellow; } + /*hide section titles by default*/ + .wym_skin_default .wym_section h2 { display: none; } + /*disable any margin-collapse*/ + .wym_skin_default .wym_section { padding-top: 1px; padding-bottom: 1px; } + /*auto-clear sections*/ + .wym_skin_default .wym_section ul:after { content: "."; display: block; height: 0; clear: both; visibility: hidden; } + * html .wym_skin_default .wym_section ul { height: 1%;} + + /*option: add this class to a section to make it render as a panel*/ + .wym_skin_default .wym_panel { } + .wym_skin_default .wym_panel h2 { display: block; } + + /*option: add this class to a section to make it render as a dropdown menu*/ + .wym_skin_default .wym_dropdown h2 { display: block; } + .wym_skin_default .wym_dropdown ul { display: none; position: absolute; background: white; } + .wym_skin_default .wym_dropdown:hover ul, + .wym_skin_default .wym_dropdown.hover ul { display: block; } + + /*option: add this class to a section to make its elements render buttons (icons are only available for the wym_tools section for now)*/ + .wym_skin_default .wym_buttons li { float:left;} + .wym_skin_default .wym_buttons a { width: 20px; height: 20px; overflow: hidden; padding: 2px } + /*image replacements*/ + .wym_skin_default .wym_buttons li a { background: url(icons.png) no-repeat; text-indent: -9999px;} + .wym_skin_default .wym_buttons li.wym_tools_strong a { background-position: 0 -382px;} + .wym_skin_default .wym_buttons li.wym_tools_emphasis a { background-position: 0 -22px;} + .wym_skin_default .wym_buttons li.wym_tools_superscript a { background-position: 0 -430px;} + .wym_skin_default .wym_buttons li.wym_tools_subscript a { background-position: 0 -454px;} + .wym_skin_default .wym_buttons li.wym_tools_ordered_list a { background-position: 0 -48px;} + .wym_skin_default .wym_buttons li.wym_tools_unordered_list a{ background-position: 0 -72px;} + .wym_skin_default .wym_buttons li.wym_tools_indent a { background-position: 0 -574px;} + .wym_skin_default .wym_buttons li.wym_tools_outdent a { background-position: 0 -598px;} + .wym_skin_default .wym_buttons li.wym_tools_undo a { background-position: 0 -502px;} + .wym_skin_default .wym_buttons li.wym_tools_redo a { background-position: 0 -526px;} + .wym_skin_default .wym_buttons li.wym_tools_link a { background-position: 0 -96px;} + .wym_skin_default .wym_buttons li.wym_tools_unlink a { background-position: 0 -168px;} + .wym_skin_default .wym_buttons li.wym_tools_image a { background-position: 0 -121px;} + .wym_skin_default .wym_buttons li.wym_tools_table a { background-position: 0 -144px;} + .wym_skin_default .wym_buttons li.wym_tools_paste a { background-position: 0 -552px;} + .wym_skin_default .wym_buttons li.wym_tools_html a { background-position: 0 -193px;} + .wym_skin_default .wym_buttons li.wym_tools_preview a { background-position: 0 -408px;} + +/*DECORATION*/ + .wym_skin_default .wym_section h2 { background: #ddd; border: solid gray; border-width: 0 0 1px;} + .wym_skin_default .wym_section h2 span { color: gray;} + .wym_skin_default .wym_panel { padding: 0; border: solid gray; border-width: 1px; background: white;} + .wym_skin_default .wym_panel ul { margin: 2px 0 5px; } + .wym_skin_default .wym_dropdown { padding: 0; border: solid gray; border-width: 1px 1px 0 1px; } + .wym_skin_default .wym_dropdown ul { border: solid gray; border-width: 0 1px 1px 1px; margin-left: -1px; padding: 5px 10px 5px 3px;} + +/*DIALOGS*/ + .wym_dialog div.row { margin-bottom: 5px;} + .wym_dialog div.row input { margin-right: 5px;} + .wym_dialog div.row label { float: left; width: 150px; display: block; text-align: right; margin-right: 10px; } + .wym_dialog div.row-indent { padding-left: 160px; } + /*autoclearing*/ + .wym_dialog div.row:after { content: "."; display: block; height: 0; clear: both; visibility: hidden; } + .wym_dialog div.row { display: inline-block; } + /* Hides from IE-mac \*/ + * html .wym_dialog div.row { height: 1%; } + .wym_dialog div.row { display: block; } + /* End hide from IE-mac */ + +/*WYMEDITOR_LINK*/ + a.wym_wymeditor_link { text-indent: -9999px; float: right; display: block; width: 50px; height: 15px; background: url(../wymeditor_icon.png); overflow: hidden; text-decoration: none; } diff --git a/gstudio/static/gstudio/js/wymeditor/skins/default/skin.js b/gstudio/static/gstudio/js/wymeditor/skins/default/skin.js new file mode 100644 index 00000000..3d204e0d --- /dev/null +++ b/gstudio/static/gstudio/js/wymeditor/skins/default/skin.js @@ -0,0 +1,40 @@ +WYMeditor.SKINS['default'] = { + + init: function(wym) { + + //render following sections as panels + jQuery(wym._box).find(wym._options.classesSelector) + .addClass("wym_panel"); + + //render following sections as buttons + jQuery(wym._box).find(wym._options.toolsSelector) + .addClass("wym_buttons"); + + //render following sections as dropdown menus + jQuery(wym._box).find(wym._options.containersSelector) + .addClass("wym_dropdown") + .find(WYMeditor.H2) + .append("<span> ></span>"); + + // auto add some margin to the main area sides if left area + // or right area are not empty (if they contain sections) + jQuery(wym._box).find("div.wym_area_right ul") + .parents("div.wym_area_right").show() + .parents(wym._options.boxSelector) + .find("div.wym_area_main") + .css({"margin-right": "155px"}); + + jQuery(wym._box).find("div.wym_area_left ul") + .parents("div.wym_area_left").show() + .parents(wym._options.boxSelector) + .find("div.wym_area_main") + .css({"margin-left": "155px"}); + + //make hover work under IE < 7 + jQuery(wym._box).find(".wym_section").hover(function(){ + jQuery(this).addClass("hover"); + },function(){ + jQuery(this).removeClass("hover"); + }); + } +}; diff --git a/gstudio/static/gstudio/js/wymeditor/skins/django/icons.png b/gstudio/static/gstudio/js/wymeditor/skins/django/icons.png Binary files differnew file mode 100644 index 00000000..0e049640 --- /dev/null +++ b/gstudio/static/gstudio/js/wymeditor/skins/django/icons.png diff --git a/gstudio/static/gstudio/js/wymeditor/skins/django/skin.css b/gstudio/static/gstudio/js/wymeditor/skins/django/skin.css new file mode 100644 index 00000000..6ae3772d --- /dev/null +++ b/gstudio/static/gstudio/js/wymeditor/skins/django/skin.css @@ -0,0 +1,136 @@ +/* + * WYMeditor : what you see is What You Mean web-based editor + * Copyright (c) 2008 Jean-Francois Hovinne, http://www.wymeditor.org/ + * Dual licensed under the MIT (MIT-license.txt) + * and GPL (GPL-license.txt) licenses. + * + * For further information visit: + * http://www.wymeditor.org/ + * + * File Name: + * skin.css + * main stylesheet for the django WYMeditor skin + * See the documentation for more info. + * + * File Authors: + * Daniel Reszka (d.reszka a-t wymeditor dotorg) + * Jannis Leidel (jannis@leidel.info) +*/ + +/*TRYING TO RESET STYLES THAT MAY INTERFERE WITH WYMEDITOR*/ + .wym_skin_django p, .wym_skin_django h2, .wym_skin_django h3, + .wym_skin_django ul, .wym_skin_django li { background: transparent url(); margin: 0; padding: 0; border-width:0; list-style: none; } + + +/*HIDDEN BY DEFAULT*/ + .wym_skin_django .wym_area_left { display: none; } + .wym_skin_django .wym_area_right { display: block; } + + +/*TYPO*/ + .wym_skin_django { font-size: 62,5%; font-family: "Lucida Grande", "DejaVu Sans", "Bitstream Vera Sans", Verdana, Arial, sans-serif } + .wym_skin_django h2 { font-size: 110%; /* = 11px */} + .wym_skin_django h3 { font-size: 100%; /* = 10px */} + .wym_skin_django li { font-size: 100%; /* = 10px */} + + +/*WYM_BOX*/ + .wym_skin_django { border: 0px; background: none; padding: 10px} + + /*auto-clear the wym_box*/ + .wym_skin_django:after { content: "."; display: block; height: 0; clear: both; visibility: hidden; } + * html .wym_skin_django { height: 1%;} + + +/*WYM_HTML*/ + .wym_skin_django .wym_html { width: 98%;} + .wym_skin_django .wym_html textarea { width: 100%; height: 235px; border: 1px solid #ccc; background: white; } + + +/*WYM_IFRAME*/ + .wym_skin_django .wym_iframe { width: 98%;} + .wym_skin_django .wym_iframe iframe { width: 100%; height: 235px; border: 1px solid #ccc; background: white } + + +/*AREAS*/ + .wym_skin_django .wym_area_left { width: 150px; float: left;} + .wym_skin_django .wym_area_right { width: 150px; float: right;} + .wym_skin_django .wym_area_bottom { clear: both; display: none;} + * html .wym_skin_django .wym_area_main { height: 1%;} + * html .wym_skin_django .wym_area_top { height: 1%;} + *+html .wym_skin_django .wym_area_top { height: 1%;} + +/*SECTIONS SYSTEM*/ + + /*common defaults for all sections*/ + .wym_skin_django .wym_section { margin-bottom: 5px; } + .wym_skin_django .wym_section h2, + .wym_skin_django .wym_section h3 { padding: 1px 3px; margin: 0; color:#333; } + .wym_skin_django .wym_section a { padding: 0 3px; display: block; text-decoration: none; color: black; } + .wym_skin_django .wym_section a:hover { background-color: #eaeaea; } + /*hide section titles by default*/ + .wym_skin_django .wym_section h2 { display: none; } + /*disable any margin-collapse*/ + .wym_skin_django .wym_section { padding-top: 1px; padding-bottom: 1px; } + /*auto-clear sections*/ + .wym_skin_django .wym_section ul:after { content: "."; display: block; height: 0; clear: both; visibility: hidden; } + * html .wym_skin_django .wym_section ul { height: 1%;} + + /*option: add this class to a section to make it render as a panel*/ + .wym_skin_django .wym_panel { } + .wym_skin_django .wym_panel h2 { display: block; } + + /*option: add this class to a section to make it render as a dropdown menu*/ + .wym_skin_django .wym_dropdown h2 { display: block; } + .wym_skin_django .wym_dropdown ul { display: none; position: absolute; background: white; } + .wym_skin_django .wym_dropdown:hover ul, + .wym_skin_django .wym_dropdown.hover ul { display: block; } + + .wym_skin_django .wym_tools ul { padding-left: 0px !important; margin-left: 0px; } + + /*option: add this class to a section to make its elements render buttons (icons are only available for the wym_tools section for now)*/ + .wym_skin_django .wym_buttons li { float:left;} + .wym_skin_django .wym_buttons a { width: 20px; height: 20px; overflow: hidden; padding: 2px } + /*image replacements*/ + .wym_skin_django .wym_buttons li a { background: url(icons.png) no-repeat; text-indent: -9999px;} + .wym_skin_django .wym_buttons li.wym_tools_strong a { background-position: 0 -382px;} + .wym_skin_django .wym_buttons li.wym_tools_emphasis a { background-position: 0 -22px;} + .wym_skin_django .wym_buttons li.wym_tools_superscript a { background-position: 0 -430px;} + .wym_skin_django .wym_buttons li.wym_tools_subscript a { background-position: 0 -454px;} + .wym_skin_django .wym_buttons li.wym_tools_ordered_list a { background-position: 0 -48px;} + .wym_skin_django .wym_buttons li.wym_tools_unordered_list a{ background-position: 0 -72px;} + .wym_skin_django .wym_buttons li.wym_tools_indent a { background-position: 0 -574px;} + .wym_skin_django .wym_buttons li.wym_tools_outdent a { background-position: 0 -598px;} + .wym_skin_django .wym_buttons li.wym_tools_undo a { background-position: 0 -502px;} + .wym_skin_django .wym_buttons li.wym_tools_redo a { background-position: 0 -526px;} + .wym_skin_django .wym_buttons li.wym_tools_link a { background-position: 0 -96px;} + .wym_skin_django .wym_buttons li.wym_tools_unlink a { background-position: 0 -168px;} + .wym_skin_django .wym_buttons li.wym_tools_image a { background-position: 0 -121px;} + .wym_skin_django .wym_buttons li.wym_tools_table a { background-position: 0 -144px;} + .wym_skin_django .wym_buttons li.wym_tools_paste a { background-position: 0 -552px;} + .wym_skin_django .wym_buttons li.wym_tools_html a { background-position: 0 -193px;} + .wym_skin_django .wym_buttons li.wym_tools_preview a { background-position: 0 -408px;} + +/*DECORATION*/ + .wym_skin_django .wym_section h2 { background: #fff;} + .wym_skin_django .wym_section h2 span { color: gray;} + .wym_skin_django .wym_panel { padding: 0; background: white;} + .wym_skin_django .wym_panel ul { margin: 2px 0 5px; } + .wym_skin_django .wym_dropdown { padding: 0; border: solid gray; border-width: 1px 1px 0 1px; } + .wym_skin_django .wym_dropdown ul { border: solid gray; border-width: 0 1px 1px 1px; margin-left: -1px; padding: 5px 10px 5px 3px;} + +/*DIALOGS*/ + .wym_dialog div.row { margin-bottom: 5px;} + .wym_dialog div.row input { margin-right: 5px;} + .wym_dialog div.row label { float: left; width: 150px; display: block; text-align: right; margin-right: 10px; } + .wym_dialog div.row-indent { padding-left: 160px; } + /*autoclearing*/ + .wym_dialog div.row:after { content: "."; display: block; height: 0; clear: both; visibility: hidden; } + .wym_dialog div.row { display: inline-block; } + /* Hides from IE-mac \*/ + * html .wym_dialog div.row { height: 1%; } + .wym_dialog div.row { display: block; } + /* End hide from IE-mac */ + +/*WYMEDITOR_LINK*/ + a.wym_wymeditor_link { text-indent: -9999px; float: right; display: block; width: 50px; height: 15px; background: url(../wymeditor_icon.png); overflow: hidden; text-decoration: none; } diff --git a/gstudio/static/gstudio/js/wymeditor/skins/django/skin.js b/gstudio/static/gstudio/js/wymeditor/skins/django/skin.js new file mode 100644 index 00000000..47597e63 --- /dev/null +++ b/gstudio/static/gstudio/js/wymeditor/skins/django/skin.js @@ -0,0 +1,42 @@ +WYMeditor.SKINS['django'] = { + + init: function(wym) { + + //render following sections as panels + jQuery(wym._box).find(wym._options.classesSelector) + .addClass("wym_panel"); + + //render following sections as buttons + jQuery(wym._box).find(wym._options.toolsSelector) + .addClass("wym_buttons"); + + //render following sections as dropdown menus + jQuery(wym._box).find(wym._options.containersSelector) + .addClass("wym_panel") + .find(WYMeditor.H2); + + //replace the status markup in h2 + wym.status(' '); + + // auto add some margin to the main area sides if left area + // or right area are not empty (if they contain sections) + jQuery(wym._box).find("div.wym_area_right ul") + .parents("div.wym_area_right").show() + .parents(wym._options.boxSelector) + .find("div.wym_area_main") + .css({"margin-right": "155px"}); + + jQuery(wym._box).find("div.wym_area_left ul") + .parents("div.wym_area_left").show() + .parents(wym._options.boxSelector) + .find("div.wym_area_main") + .css({"margin-left": "155px"}); + + //make hover work under IE < 7 + jQuery(wym._box).find(".wym_section").hover(function(){ + jQuery(this).addClass("hover"); + },function(){ + jQuery(this).removeClass("hover"); + }); + } +}; diff --git a/gstudio/static/gstudio/js/wymeditor/skins/minimal/images/bg.header.gif b/gstudio/static/gstudio/js/wymeditor/skins/minimal/images/bg.header.gif Binary files differnew file mode 100644 index 00000000..b2d2907b --- /dev/null +++ b/gstudio/static/gstudio/js/wymeditor/skins/minimal/images/bg.header.gif diff --git a/gstudio/static/gstudio/js/wymeditor/skins/minimal/images/bg.selector.silver.gif b/gstudio/static/gstudio/js/wymeditor/skins/minimal/images/bg.selector.silver.gif Binary files differnew file mode 100644 index 00000000..e65976bd --- /dev/null +++ b/gstudio/static/gstudio/js/wymeditor/skins/minimal/images/bg.selector.silver.gif diff --git a/gstudio/static/gstudio/js/wymeditor/skins/minimal/images/bg.wymeditor.png b/gstudio/static/gstudio/js/wymeditor/skins/minimal/images/bg.wymeditor.png Binary files differnew file mode 100644 index 00000000..1e84813f --- /dev/null +++ b/gstudio/static/gstudio/js/wymeditor/skins/minimal/images/bg.wymeditor.png diff --git a/gstudio/static/gstudio/js/wymeditor/skins/minimal/images/icons.silver.gif b/gstudio/static/gstudio/js/wymeditor/skins/minimal/images/icons.silver.gif Binary files differnew file mode 100644 index 00000000..8c6a4fbf --- /dev/null +++ b/gstudio/static/gstudio/js/wymeditor/skins/minimal/images/icons.silver.gif diff --git a/gstudio/static/gstudio/js/wymeditor/skins/minimal/skin.css b/gstudio/static/gstudio/js/wymeditor/skins/minimal/skin.css new file mode 100644 index 00000000..cea8d842 --- /dev/null +++ b/gstudio/static/gstudio/js/wymeditor/skins/minimal/skin.css @@ -0,0 +1,131 @@ +/* + * WYMeditor : what you see is What You Mean web-based editor + * Copyright (c) 2005 - 2009 Jean-Francois Hovinne, http://www.wymeditor.org/ + * Dual licensed under the MIT (MIT-license.txt) + * and GPL (GPL-license.txt) licenses. + * + * For further information visit: + * http://www.wymeditor.org/ + * + * File Name: + * skin.css + * main stylesheet for the minimal WYMeditor skin + * See the documentation for more info. + * + * File Authors: + * Jean-Francois Hovinne + * Scott Lewis (see Silver skin) +*/ + +/* Set iframe */ +.wym_skin_minimal div.wym_iframe iframe { + width: 90%; + height: 200px; +} + +/* Hide h2 by default */ +.wym_skin_minimal h2 { + display: none; +} + +/* Show specific h2 */ +.wym_skin_minimal div.wym_tools h2, +.wym_skin_minimal div.wym_containers h2, +.wym_skin_minimal div.wym_classes h2 { + display: block; +} + +.wym_skin_minimal div.wym_section ul { + margin: 0; +} + +.wym_skin_minimal div.wym_section ul li { + float: left; + list-style-type: none; + margin-right: 5px; +} + +.wym_skin_minimal div.wym_area_top, +.wym_skin_minimal div.wym_area_right, +.wym_skin_minimal div.wym_containers, +.wym_skin_minimal div.wym_classes { + float: left; +} + +.wym_skin_minimal div.wym_area_main { + clear: both; +} + +.wym_skin_minimal div.wym_html { + width: 90%; +} + +.wym_skin_minimal textarea.wym_html_val { + width: 100%; + height: 100px; +} + +/* DROPDOWNS (see Silver skin) */ +.wym_skin_minimal div.wym_dropdown { + cursor: pointer; + margin: 0px 4px 10px 0px; + padding: 0px; + z-index: 1001; + display: block; +} + +.wym_skin_minimal div.wym_dropdown ul { + display: none; + width: 124px; + padding: 0px; + margin: 0px; + list-style-type: none; + list-style-image: none; + z-index: 1002; + position: absolute; + border-top: 1px solid #AAA; +} + +.wym_skin_minimal div.wym_dropdown ul li { + width: 146px; + height: 20px; + padding: 0px; + margin: 0px; + border: 1px solid #777; + border-top: none; + background: #EEE; + list-style-image: none; +} + +.wym_skin_minimal div.wym_dropdown h2 { + width: 138px; + height: 16px; + color: #000; + background-image: url(images/bg.selector.silver.gif); + background-position: 0px -18px; + background-repeat: no-repeat; + border: none; + font-family: "Trebuchet MS", Verdana, Arial, Helvetica, Sanserif; + font-size: 12px; + font-weight: bold; + padding: 2px 0px 0px 10px; + margin: 0px; +} + +.wym_skin_minimal div.wym_dropdown a { + text-decoration: none; + font-family: "Trebuchet MS", Verdana, Arial, Helvetica, Sanserif; + font-size: 12px; + padding: 5px 0px 0px 10px; + display: block; + width: 136px; + height: 15px; + color: #000; + text-align: left; + margin-left: 0px; +} + +.wym_skin_minimal div.wym_dropdown a:hover { + background: #BBB; + border-bottom: none; +} diff --git a/gstudio/static/gstudio/js/wymeditor/skins/minimal/skin.js b/gstudio/static/gstudio/js/wymeditor/skins/minimal/skin.js new file mode 100644 index 00000000..af29ed42 --- /dev/null +++ b/gstudio/static/gstudio/js/wymeditor/skins/minimal/skin.js @@ -0,0 +1,30 @@ +jQuery.fn.selectify = function() { + return this.each(function() { + jQuery(this).hover( + function() { + jQuery("h2", this).css("background-position", "0px -18px"); + jQuery("ul", this).fadeIn("fast"); + }, + function() { + jQuery("h2", this).css("background-position", ""); + jQuery("ul", this).fadeOut("fast"); + } + ); + }); +}; + +WYMeditor.SKINS['minimal'] = { + //placeholder for the skin JS, if needed + + //init the skin + //wym is the WYMeditor.editor instance + init: function(wym) { + + //render following sections as dropdown menus + jQuery(wym._box).find(wym._options.toolsSelector + ', ' + wym._options.containersSelector + ', ' + wym._options.classesSelector) + .addClass("wym_dropdown") + .selectify(); + + + } +}; diff --git a/gstudio/static/gstudio/js/wymeditor/skins/silver/COPYING b/gstudio/static/gstudio/js/wymeditor/skins/silver/COPYING new file mode 100644 index 00000000..94a9ed02 --- /dev/null +++ b/gstudio/static/gstudio/js/wymeditor/skins/silver/COPYING @@ -0,0 +1,674 @@ + GNU GENERAL PUBLIC LICENSE + Version 3, 29 June 2007 + + Copyright (C) 2007 Free Software Foundation, Inc. <http://fsf.org/> + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + + Preamble + + The GNU General Public License is a free, copyleft license for +software and other kinds of works. + + The licenses for most software and other practical works are designed +to take away your freedom to share and change the works. By contrast, +the GNU General Public License is intended to guarantee your freedom to +share and change all versions of a program--to make sure it remains free +software for all its users. We, the Free Software Foundation, use the +GNU General Public License for most of our software; it applies also to +any other work released this way by its authors. You can apply it to +your programs, too. + + When we speak of free software, we are referring to freedom, not +price. Our General Public Licenses are designed to make sure that you +have the freedom to distribute copies of free software (and charge for +them if you wish), that you receive source code or can get it if you +want it, that you can change the software or use pieces of it in new +free programs, and that you know you can do these things. + + To protect your rights, we need to prevent others from denying you +these rights or asking you to surrender the rights. Therefore, you have +certain responsibilities if you distribute copies of the software, or if +you modify it: responsibilities to respect the freedom of others. + + For example, if you distribute copies of such a program, whether +gratis or for a fee, you must pass on to the recipients the same +freedoms that you received. You must make sure that they, too, receive +or can get the source code. And you must show them these terms so they +know their rights. + + Developers that use the GNU GPL protect your rights with two steps: +(1) assert copyright on the software, and (2) offer you this License +giving you legal permission to copy, distribute and/or modify it. + + For the developers' and authors' protection, the GPL clearly explains +that there is no warranty for this free software. For both users' and +authors' sake, the GPL requires that modified versions be marked as +changed, so that their problems will not be attributed erroneously to +authors of previous versions. + + Some devices are designed to deny users access to install or run +modified versions of the software inside them, although the manufacturer +can do so. This is fundamentally incompatible with the aim of +protecting users' freedom to change the software. The systematic +pattern of such abuse occurs in the area of products for individuals to +use, which is precisely where it is most unacceptable. Therefore, we +have designed this version of the GPL to prohibit the practice for those +products. If such problems arise substantially in other domains, we +stand ready to extend this provision to those domains in future versions +of the GPL, as needed to protect the freedom of users. + + Finally, every program is threatened constantly by software patents. +States should not allow patents to restrict development and use of +software on general-purpose computers, but in those that do, we wish to +avoid the special danger that patents applied to a free program could +make it effectively proprietary. To prevent this, the GPL assures that +patents cannot be used to render the program non-free. + + The precise terms and conditions for copying, distribution and +modification follow. + + TERMS AND CONDITIONS + + 0. Definitions. + + "This License" refers to version 3 of the GNU General Public License. + + "Copyright" also means copyright-like laws that apply to other kinds of +works, such as semiconductor masks. + + "The Program" refers to any copyrightable work licensed under this +License. Each licensee is addressed as "you". "Licensees" and +"recipients" may be individuals or organizations. + + To "modify" a work means to copy from or adapt all or part of the work +in a fashion requiring copyright permission, other than the making of an +exact copy. The resulting work is called a "modified version" of the +earlier work or a work "based on" the earlier work. + + A "covered work" means either the unmodified Program or a work based +on the Program. + + To "propagate" a work means to do anything with it that, without +permission, would make you directly or secondarily liable for +infringement under applicable copyright law, except executing it on a +computer or modifying a private copy. Propagation includes copying, +distribution (with or without modification), making available to the +public, and in some countries other activities as well. + + To "convey" a work means any kind of propagation that enables other +parties to make or receive copies. Mere interaction with a user through +a computer network, with no transfer of a copy, is not conveying. + + An interactive user interface displays "Appropriate Legal Notices" +to the extent that it includes a convenient and prominently visible +feature that (1) displays an appropriate copyright notice, and (2) +tells the user that there is no warranty for the work (except to the +extent that warranties are provided), that licensees may convey the +work under this License, and how to view a copy of this License. If +the interface presents a list of user commands or options, such as a +menu, a prominent item in the list meets this criterion. + + 1. Source Code. + + The "source code" for a work means the preferred form of the work +for making modifications to it. "Object code" means any non-source +form of a work. + + A "Standard Interface" means an interface that either is an official +standard defined by a recognized standards body, or, in the case of +interfaces specified for a particular programming language, one that +is widely used among developers working in that language. + + The "System Libraries" of an executable work include anything, other +than the work as a whole, that (a) is included in the normal form of +packaging a Major Component, but which is not part of that Major +Component, and (b) serves only to enable use of the work with that +Major Component, or to implement a Standard Interface for which an +implementation is available to the public in source code form. A +"Major Component", in this context, means a major essential component +(kernel, window system, and so on) of the specific operating system +(if any) on which the executable work runs, or a compiler used to +produce the work, or an object code interpreter used to run it. + + The "Corresponding Source" for a work in object code form means all +the source code needed to generate, install, and (for an executable +work) run the object code and to modify the work, including scripts to +control those activities. However, it does not include the work's +System Libraries, or general-purpose tools or generally available free +programs which are used unmodified in performing those activities but +which are not part of the work. For example, Corresponding Source +includes interface definition files associated with source files for +the work, and the source code for shared libraries and dynamically +linked subprograms that the work is specifically designed to require, +such as by intimate data communication or control flow between those +subprograms and other parts of the work. + + The Corresponding Source need not include anything that users +can regenerate automatically from other parts of the Corresponding +Source. + + The Corresponding Source for a work in source code form is that +same work. + + 2. Basic Permissions. + + All rights granted under this License are granted for the term of +copyright on the Program, and are irrevocable provided the stated +conditions are met. This License explicitly affirms your unlimited +permission to run the unmodified Program. The output from running a +covered work is covered by this License only if the output, given its +content, constitutes a covered work. This License acknowledges your +rights of fair use or other equivalent, as provided by copyright law. + + You may make, run and propagate covered works that you do not +convey, without conditions so long as your license otherwise remains +in force. You may convey covered works to others for the sole purpose +of having them make modifications exclusively for you, or provide you +with facilities for running those works, provided that you comply with +the terms of this License in conveying all material for which you do +not control copyright. Those thus making or running the covered works +for you must do so exclusively on your behalf, under your direction +and control, on terms that prohibit them from making any copies of +your copyrighted material outside their relationship with you. + + Conveying under any other circumstances is permitted solely under +the conditions stated below. Sublicensing is not allowed; section 10 +makes it unnecessary. + + 3. Protecting Users' Legal Rights From Anti-Circumvention Law. + + No covered work shall be deemed part of an effective technological +measure under any applicable law fulfilling obligations under article +11 of the WIPO copyright treaty adopted on 20 December 1996, or +similar laws prohibiting or restricting circumvention of such +measures. + + When you convey a covered work, you waive any legal power to forbid +circumvention of technological measures to the extent such circumvention +is effected by exercising rights under this License with respect to +the covered work, and you disclaim any intention to limit operation or +modification of the work as a means of enforcing, against the work's +users, your or third parties' legal rights to forbid circumvention of +technological measures. + + 4. Conveying Verbatim Copies. + + You may convey verbatim copies of the Program's source code as you +receive it, in any medium, provided that you conspicuously and +appropriately publish on each copy an appropriate copyright notice; +keep intact all notices stating that this License and any +non-permissive terms added in accord with section 7 apply to the code; +keep intact all notices of the absence of any warranty; and give all +recipients a copy of this License along with the Program. + + You may charge any price or no price for each copy that you convey, +and you may offer support or warranty protection for a fee. + + 5. Conveying Modified Source Versions. + + You may convey a work based on the Program, or the modifications to +produce it from the Program, in the form of source code under the +terms of section 4, provided that you also meet all of these conditions: + + a) The work must carry prominent notices stating that you modified + it, and giving a relevant date. + + b) The work must carry prominent notices stating that it is + released under this License and any conditions added under section + 7. This requirement modifies the requirement in section 4 to + "keep intact all notices". + + c) You must license the entire work, as a whole, under this + License to anyone who comes into possession of a copy. This + License will therefore apply, along with any applicable section 7 + additional terms, to the whole of the work, and all its parts, + regardless of how they are packaged. This License gives no + permission to license the work in any other way, but it does not + invalidate such permission if you have separately received it. + + d) If the work has interactive user interfaces, each must display + Appropriate Legal Notices; however, if the Program has interactive + interfaces that do not display Appropriate Legal Notices, your + work need not make them do so. + + A compilation of a covered work with other separate and independent +works, which are not by their nature extensions of the covered work, +and which are not combined with it such as to form a larger program, +in or on a volume of a storage or distribution medium, is called an +"aggregate" if the compilation and its resulting copyright are not +used to limit the access or legal rights of the compilation's users +beyond what the individual works permit. Inclusion of a covered work +in an aggregate does not cause this License to apply to the other +parts of the aggregate. + + 6. Conveying Non-Source Forms. + + You may convey a covered work in object code form under the terms +of sections 4 and 5, provided that you also convey the +machine-readable Corresponding Source under the terms of this License, +in one of these ways: + + a) Convey the object code in, or embodied in, a physical product + (including a physical distribution medium), accompanied by the + Corresponding Source fixed on a durable physical medium + customarily used for software interchange. + + b) Convey the object code in, or embodied in, a physical product + (including a physical distribution medium), accompanied by a + written offer, valid for at least three years and valid for as + long as you offer spare parts or customer support for that product + model, to give anyone who possesses the object code either (1) a + copy of the Corresponding Source for all the software in the + product that is covered by this License, on a durable physical + medium customarily used for software interchange, for a price no + more than your reasonable cost of physically performing this + conveying of source, or (2) access to copy the + Corresponding Source from a network server at no charge. + + c) Convey individual copies of the object code with a copy of the + written offer to provide the Corresponding Source. This + alternative is allowed only occasionally and noncommercially, and + only if you received the object code with such an offer, in accord + with subsection 6b. + + d) Convey the object code by offering access from a designated + place (gratis or for a charge), and offer equivalent access to the + Corresponding Source in the same way through the same place at no + further charge. You need not require recipients to copy the + Corresponding Source along with the object code. If the place to + copy the object code is a network server, the Corresponding Source + may be on a different server (operated by you or a third party) + that supports equivalent copying facilities, provided you maintain + clear directions next to the object code saying where to find the + Corresponding Source. Regardless of what server hosts the + Corresponding Source, you remain obligated to ensure that it is + available for as long as needed to satisfy these requirements. + + e) Convey the object code using peer-to-peer transmission, provided + you inform other peers where the object code and Corresponding + Source of the work are being offered to the general public at no + charge under subsection 6d. + + A separable portion of the object code, whose source code is excluded +from the Corresponding Source as a System Library, need not be +included in conveying the object code work. + + A "User Product" is either (1) a "consumer product", which means any +tangible personal property which is normally used for personal, family, +or household purposes, or (2) anything designed or sold for incorporation +into a dwelling. In determining whether a product is a consumer product, +doubtful cases shall be resolved in favor of coverage. For a particular +product received by a particular user, "normally used" refers to a +typical or common use of that class of product, regardless of the status +of the particular user or of the way in which the particular user +actually uses, or expects or is expected to use, the product. A product +is a consumer product regardless of whether the product has substantial +commercial, industrial or non-consumer uses, unless such uses represent +the only significant mode of use of the product. + + "Installation Information" for a User Product means any methods, +procedures, authorization keys, or other information required to install +and execute modified versions of a covered work in that User Product from +a modified version of its Corresponding Source. The information must +suffice to ensure that the continued functioning of the modified object +code is in no case prevented or interfered with solely because +modification has been made. + + If you convey an object code work under this section in, or with, or +specifically for use in, a User Product, and the conveying occurs as +part of a transaction in which the right of possession and use of the +User Product is transferred to the recipient in perpetuity or for a +fixed term (regardless of how the transaction is characterized), the +Corresponding Source conveyed under this section must be accompanied +by the Installation Information. But this requirement does not apply +if neither you nor any third party retains the ability to install +modified object code on the User Product (for example, the work has +been installed in ROM). + + The requirement to provide Installation Information does not include a +requirement to continue to provide support service, warranty, or updates +for a work that has been modified or installed by the recipient, or for +the User Product in which it has been modified or installed. Access to a +network may be denied when the modification itself materially and +adversely affects the operation of the network or violates the rules and +protocols for communication across the network. + + Corresponding Source conveyed, and Installation Information provided, +in accord with this section must be in a format that is publicly +documented (and with an implementation available to the public in +source code form), and must require no special password or key for +unpacking, reading or copying. + + 7. Additional Terms. + + "Additional permissions" are terms that supplement the terms of this +License by making exceptions from one or more of its conditions. +Additional permissions that are applicable to the entire Program shall +be treated as though they were included in this License, to the extent +that they are valid under applicable law. If additional permissions +apply only to part of the Program, that part may be used separately +under those permissions, but the entire Program remains governed by +this License without regard to the additional permissions. + + When you convey a copy of a covered work, you may at your option +remove any additional permissions from that copy, or from any part of +it. (Additional permissions may be written to require their own +removal in certain cases when you modify the work.) You may place +additional permissions on material, added by you to a covered work, +for which you have or can give appropriate copyright permission. + + Notwithstanding any other provision of this License, for material you +add to a covered work, you may (if authorized by the copyright holders of +that material) supplement the terms of this License with terms: + + a) Disclaiming warranty or limiting liability differently from the + terms of sections 15 and 16 of this License; or + + b) Requiring preservation of specified reasonable legal notices or + author attributions in that material or in the Appropriate Legal + Notices displayed by works containing it; or + + c) Prohibiting misrepresentation of the origin of that material, or + requiring that modified versions of such material be marked in + reasonable ways as different from the original version; or + + d) Limiting the use for publicity purposes of names of licensors or + authors of the material; or + + e) Declining to grant rights under trademark law for use of some + trade names, trademarks, or service marks; or + + f) Requiring indemnification of licensors and authors of that + material by anyone who conveys the material (or modified versions of + it) with contractual assumptions of liability to the recipient, for + any liability that these contractual assumptions directly impose on + those licensors and authors. + + All other non-permissive additional terms are considered "further +restrictions" within the meaning of section 10. If the Program as you +received it, or any part of it, contains a notice stating that it is +governed by this License along with a term that is a further +restriction, you may remove that term. If a license document contains +a further restriction but permits relicensing or conveying under this +License, you may add to a covered work material governed by the terms +of that license document, provided that the further restriction does +not survive such relicensing or conveying. + + If you add terms to a covered work in accord with this section, you +must place, in the relevant source files, a statement of the +additional terms that apply to those files, or a notice indicating +where to find the applicable terms. + + Additional terms, permissive or non-permissive, may be stated in the +form of a separately written license, or stated as exceptions; +the above requirements apply either way. + + 8. Termination. + + You may not propagate or modify a covered work except as expressly +provided under this License. Any attempt otherwise to propagate or +modify it is void, and will automatically terminate your rights under +this License (including any patent licenses granted under the third +paragraph of section 11). + + However, if you cease all violation of this License, then your +license from a particular copyright holder is reinstated (a) +provisionally, unless and until the copyright holder explicitly and +finally terminates your license, and (b) permanently, if the copyright +holder fails to notify you of the violation by some reasonable means +prior to 60 days after the cessation. + + Moreover, your license from a particular copyright holder is +reinstated permanently if the copyright holder notifies you of the +violation by some reasonable means, this is the first time you have +received notice of violation of this License (for any work) from that +copyright holder, and you cure the violation prior to 30 days after +your receipt of the notice. + + Termination of your rights under this section does not terminate the +licenses of parties who have received copies or rights from you under +this License. If your rights have been terminated and not permanently +reinstated, you do not qualify to receive new licenses for the same +material under section 10. + + 9. Acceptance Not Required for Having Copies. + + You are not required to accept this License in order to receive or +run a copy of the Program. Ancillary propagation of a covered work +occurring solely as a consequence of using peer-to-peer transmission +to receive a copy likewise does not require acceptance. However, +nothing other than this License grants you permission to propagate or +modify any covered work. These actions infringe copyright if you do +not accept this License. Therefore, by modifying or propagating a +covered work, you indicate your acceptance of this License to do so. + + 10. Automatic Licensing of Downstream Recipients. + + Each time you convey a covered work, the recipient automatically +receives a license from the original licensors, to run, modify and +propagate that work, subject to this License. You are not responsible +for enforcing compliance by third parties with this License. + + An "entity transaction" is a transaction transferring control of an +organization, or substantially all assets of one, or subdividing an +organization, or merging organizations. If propagation of a covered +work results from an entity transaction, each party to that +transaction who receives a copy of the work also receives whatever +licenses to the work the party's predecessor in interest had or could +give under the previous paragraph, plus a right to possession of the +Corresponding Source of the work from the predecessor in interest, if +the predecessor has it or can get it with reasonable efforts. + + You may not impose any further restrictions on the exercise of the +rights granted or affirmed under this License. For example, you may +not impose a license fee, royalty, or other charge for exercise of +rights granted under this License, and you may not initiate litigation +(including a cross-claim or counterclaim in a lawsuit) alleging that +any patent claim is infringed by making, using, selling, offering for +sale, or importing the Program or any portion of it. + + 11. Patents. + + A "contributor" is a copyright holder who authorizes use under this +License of the Program or a work on which the Program is based. The +work thus licensed is called the contributor's "contributor version". + + A contributor's "essential patent claims" are all patent claims +owned or controlled by the contributor, whether already acquired or +hereafter acquired, that would be infringed by some manner, permitted +by this License, of making, using, or selling its contributor version, +but do not include claims that would be infringed only as a +consequence of further modification of the contributor version. For +purposes of this definition, "control" includes the right to grant +patent sublicenses in a manner consistent with the requirements of +this License. + + Each contributor grants you a non-exclusive, worldwide, royalty-free +patent license under the contributor's essential patent claims, to +make, use, sell, offer for sale, import and otherwise run, modify and +propagate the contents of its contributor version. + + In the following three paragraphs, a "patent license" is any express +agreement or commitment, however denominated, not to enforce a patent +(such as an express permission to practice a patent or covenant not to +sue for patent infringement). To "grant" such a patent license to a +party means to make such an agreement or commitment not to enforce a +patent against the party. + + If you convey a covered work, knowingly relying on a patent license, +and the Corresponding Source of the work is not available for anyone +to copy, free of charge and under the terms of this License, through a +publicly available network server or other readily accessible means, +then you must either (1) cause the Corresponding Source to be so +available, or (2) arrange to deprive yourself of the benefit of the +patent license for this particular work, or (3) arrange, in a manner +consistent with the requirements of this License, to extend the patent +license to downstream recipients. "Knowingly relying" means you have +actual knowledge that, but for the patent license, your conveying the +covered work in a country, or your recipient's use of the covered work +in a country, would infringe one or more identifiable patents in that +country that you have reason to believe are valid. + + If, pursuant to or in connection with a single transaction or +arrangement, you convey, or propagate by procuring conveyance of, a +covered work, and grant a patent license to some of the parties +receiving the covered work authorizing them to use, propagate, modify +or convey a specific copy of the covered work, then the patent license +you grant is automatically extended to all recipients of the covered +work and works based on it. + + A patent license is "discriminatory" if it does not include within +the scope of its coverage, prohibits the exercise of, or is +conditioned on the non-exercise of one or more of the rights that are +specifically granted under this License. You may not convey a covered +work if you are a party to an arrangement with a third party that is +in the business of distributing software, under which you make payment +to the third party based on the extent of your activity of conveying +the work, and under which the third party grants, to any of the +parties who would receive the covered work from you, a discriminatory +patent license (a) in connection with copies of the covered work +conveyed by you (or copies made from those copies), or (b) primarily +for and in connection with specific products or compilations that +contain the covered work, unless you entered into that arrangement, +or that patent license was granted, prior to 28 March 2007. + + Nothing in this License shall be construed as excluding or limiting +any implied license or other defenses to infringement that may +otherwise be available to you under applicable patent law. + + 12. No Surrender of Others' Freedom. + + If conditions are imposed on you (whether by court order, agreement or +otherwise) that contradict the conditions of this License, they do not +excuse you from the conditions of this License. If you cannot convey a +covered work so as to satisfy simultaneously your obligations under this +License and any other pertinent obligations, then as a consequence you may +not convey it at all. For example, if you agree to terms that obligate you +to collect a royalty for further conveying from those to whom you convey +the Program, the only way you could satisfy both those terms and this +License would be to refrain entirely from conveying the Program. + + 13. Use with the GNU Affero General Public License. + + Notwithstanding any other provision of this License, you have +permission to link or combine any covered work with a work licensed +under version 3 of the GNU Affero General Public License into a single +combined work, and to convey the resulting work. The terms of this +License will continue to apply to the part which is the covered work, +but the special requirements of the GNU Affero General Public License, +section 13, concerning interaction through a network will apply to the +combination as such. + + 14. Revised Versions of this License. + + The Free Software Foundation may publish revised and/or new versions of +the GNU General Public License from time to time. Such new versions will +be similar in spirit to the present version, but may differ in detail to +address new problems or concerns. + + Each version is given a distinguishing version number. If the +Program specifies that a certain numbered version of the GNU General +Public License "or any later version" applies to it, you have the +option of following the terms and conditions either of that numbered +version or of any later version published by the Free Software +Foundation. If the Program does not specify a version number of the +GNU General Public License, you may choose any version ever published +by the Free Software Foundation. + + If the Program specifies that a proxy can decide which future +versions of the GNU General Public License can be used, that proxy's +public statement of acceptance of a version permanently authorizes you +to choose that version for the Program. + + Later license versions may give you additional or different +permissions. However, no additional obligations are imposed on any +author or copyright holder as a result of your choosing to follow a +later version. + + 15. Disclaimer of Warranty. + + THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY +APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT +HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY +OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, +THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM +IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF +ALL NECESSARY SERVICING, REPAIR OR CORRECTION. + + 16. Limitation of Liability. + + IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING +WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS +THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY +GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE +USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF +DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD +PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), +EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF +SUCH DAMAGES. + + 17. Interpretation of Sections 15 and 16. + + If the disclaimer of warranty and limitation of liability provided +above cannot be given local legal effect according to their terms, +reviewing courts shall apply local law that most closely approximates +an absolute waiver of all civil liability in connection with the +Program, unless a warranty or assumption of liability accompanies a +copy of the Program in return for a fee. + + END OF TERMS AND CONDITIONS + + How to Apply These Terms to Your New Programs + + If you develop a new program, and you want it to be of the greatest +possible use to the public, the best way to achieve this is to make it +free software which everyone can redistribute and change under these terms. + + To do so, attach the following notices to the program. It is safest +to attach them to the start of each source file to most effectively +state the exclusion of warranty; and each file should have at least +the "copyright" line and a pointer to where the full notice is found. + + <one line to give the program's name and a brief idea of what it does.> + Copyright (C) <year> <name of author> + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + This program 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 General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see <http://www.gnu.org/licenses/>. + +Also add information on how to contact you by electronic and paper mail. + + If the program does terminal interaction, make it output a short +notice like this when it starts in an interactive mode: + + <program> Copyright (C) <year> <name of author> + This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'. + This is free software, and you are welcome to redistribute it + under certain conditions; type `show c' for details. + +The hypothetical commands `show w' and `show c' should show the appropriate +parts of the General Public License. Of course, your program's commands +might be different; for a GUI interface, you would use an "about box". + + You should also get your employer (if you work as a programmer) or school, +if any, to sign a "copyright disclaimer" for the program, if necessary. +For more information on this, and how to apply and follow the GNU GPL, see +<http://www.gnu.org/licenses/>. + + The GNU General Public License does not permit incorporating your program +into proprietary programs. If your program is a subroutine library, you +may consider it more useful to permit linking proprietary applications with +the library. If this is what you want to do, use the GNU Lesser General +Public License instead of this License. But first, please read +<http://www.gnu.org/philosophy/why-not-lgpl.html>. diff --git a/gstudio/static/gstudio/js/wymeditor/skins/silver/README b/gstudio/static/gstudio/js/wymeditor/skins/silver/README new file mode 100644 index 00000000..130dc46e --- /dev/null +++ b/gstudio/static/gstudio/js/wymeditor/skins/silver/README @@ -0,0 +1,27 @@ +/** +* @version Alpha 0.1 2008-05-10 23:28:43 $ +* @package Silver skin for WYMeditor +* @copyright Copyright (C) 2008 Scott Edwin Lewis. All rights reserved. +* @license GNU/GPL, see COPYING +* Silver skin for WYMeditor is free software and is licensed under the +* GNU General Public License. See COPYING for copyright notices and details. +*/ + +Adds custom buttons and color palette to the WYMeditor XHTML Editor. + +INSTALLATION: + +1. Copy the entire /silver/ directory to /wymeditor/skins/ +2. Initialize the WYMeditor 'skin' option as below: + +<script type="text/javascript"> +jQuery(function() { + + jQuery('.wymeditor').wymeditor({ + skin: 'silver' + }); + +}); +</script> + +That's it. You're done. diff --git a/gstudio/static/gstudio/js/wymeditor/skins/silver/images/bg.header.gif b/gstudio/static/gstudio/js/wymeditor/skins/silver/images/bg.header.gif Binary files differnew file mode 100644 index 00000000..b2d2907b --- /dev/null +++ b/gstudio/static/gstudio/js/wymeditor/skins/silver/images/bg.header.gif diff --git a/gstudio/static/gstudio/js/wymeditor/skins/silver/images/bg.selector.silver.gif b/gstudio/static/gstudio/js/wymeditor/skins/silver/images/bg.selector.silver.gif Binary files differnew file mode 100644 index 00000000..e65976bd --- /dev/null +++ b/gstudio/static/gstudio/js/wymeditor/skins/silver/images/bg.selector.silver.gif diff --git a/gstudio/static/gstudio/js/wymeditor/skins/silver/images/bg.wymeditor.png b/gstudio/static/gstudio/js/wymeditor/skins/silver/images/bg.wymeditor.png Binary files differnew file mode 100644 index 00000000..1e84813f --- /dev/null +++ b/gstudio/static/gstudio/js/wymeditor/skins/silver/images/bg.wymeditor.png diff --git a/gstudio/static/gstudio/js/wymeditor/skins/silver/images/icons.silver.gif b/gstudio/static/gstudio/js/wymeditor/skins/silver/images/icons.silver.gif Binary files differnew file mode 100644 index 00000000..8c6a4fbf --- /dev/null +++ b/gstudio/static/gstudio/js/wymeditor/skins/silver/images/icons.silver.gif diff --git a/gstudio/static/gstudio/js/wymeditor/skins/silver/skin.css b/gstudio/static/gstudio/js/wymeditor/skins/silver/skin.css new file mode 100644 index 00000000..8284d81b --- /dev/null +++ b/gstudio/static/gstudio/js/wymeditor/skins/silver/skin.css @@ -0,0 +1,297 @@ +/* + * WYMeditor : what you see is What You Mean web-based editor + * Copyright (c) 2005 - 2009 Jean-Francois Hovinne, http://www.wymeditor.org/ + * Dual licensed under the MIT (MIT-license.txt) + * and GPL (GPL-license.txt) licenses. + * + * For further information visit: + * http://www.wymeditor.org/ + * + * File Name: + * screen.css + * main stylesheet for the default WYMeditor skin + * See the documentation for more info. + * + * File Authors: + * Daniel Reszka (d.reszka a-t wymeditor dotorg) + * Scott Edwin Lewis +*/ + +/*TRYING TO RESET STYLES THAT MAY INTERFERE WITH WYMEDITOR*/ + .wym_skin_silver p, .wym_skin_silver h2, .wym_skin_silver h3, + .wym_skin_silver ul, .wym_skin_silver li { background: transparent url(); margin: 0; padding: 0; border-width:0; list-style: none; } + + +/*HIDDEN BY DEFAULT*/ + .wym_skin_silver .wym_area_left { display: none; } + .wym_skin_silver .wym_area_right { display: block; } + + +/*TYPO*/ + .wym_skin_silver { font-size: 62.5%; font-family: Verdana, Arial, sans-serif; } + .wym_skin_silver h2 { font-size: 110%; /* = 11px */} + .wym_skin_silver h3 { font-size: 100%; /* = 10px */} + .wym_skin_silver li { font-size: 100%; /* = 10px */} + + +/*WYM_BOX*/ + .wym_skin_silver { border: 1px solid gray; background: #f2f2f2; padding: 0px; margin: 0px;} + + /*auto-clear the wym_box*/ + .wym_skin_silver:after { content: "."; display: block; height: 0; clear: both; visibility: hidden; } + * html .wym_skin_silver { height: 1%;} + + +/*WYM_HTML*/ + .wym_skin_silver .wym_html { width: 98%;} + .wym_skin_silver .wym_html textarea { width: 100%; height: 200px; border: 1px solid gray; background: white; } + + +/*WYM_IFRAME*/ + .wym_skin_silver .wym_iframe { width: 98%;} + .wym_skin_silver .wym_iframe iframe { width: 100%; height: 200px; border: 1px solid gray; background: white } + + +/*AREAS*/ + .wym_skin_silver .wym_area_left { width: 150px; float: left;} + .wym_skin_silver .wym_area_right { width: 150px; float: right;} + .wym_skin_silver .wym_area_bottom { height: 1%; clear: both;} + * html .wym_skin_silver .wym_area_main { height: 1%;} + * html .wym_skin_silver .wym_area_top { height: 1%;} + *+html .wym_skin_silver .wym_area_top { height: 1%;} + +/*SECTIONS SYSTEM*/ + + /*common defaults for all sections*/ + .wym_skin_silver .wym_section { margin-bottom: 5px; } + .wym_skin_silver .wym_section h2, + .wym_skin_silver .wym_section h3 { padding: 1px 3px; margin: 0; cursor: pointer; } + .wym_skin_silver .wym_section a { padding: 5px 0px 0px 10px; display: block; text-decoration: none; color: black; } + .wym_skin_silver .wym_section a:hover { /*background-color: #DDD;*/} + /*hide section titles by default*/ + .wym_skin_silver .wym_section h2 { display: none; } + /*disable any margin-collapse*/ + .wym_skin_silver .wym_section { padding-top: 1px; padding-bottom: 1px; } + /*auto-clear sections*/ + .wym_skin_silver .wym_section ul:after { content: "."; display: block; height: 0; clear: both; visibility: hidden; padding: 0px; } + * html .wym_skin_silver .wym_section ul { height: 1%;} + .wym_skin_silver .wym_section li {} + + /*option: add this class to a section to make it render as a panel*/ + .wym_skin_silver .wym_panel { } + .wym_skin_silver .wym_panel h2 { display: block; font-size: 11px; } + + /*option: add this class to a section to make it render as a dropdown menu*/ + .wym_skin_silver .wym_dropdown h2 { display: block; font-size: 11px;} + .wym_skin_silver .wym_dropdown ul { position: absolute; background: white; padding: 0px;} + .wym_skin_silver .wym_dropdown:hover ul, + .wym_skin_silver .wym_dropdown.hover ul { cursor: pointer;} + .wym_skin_silver .wym_dropdown ul li a {/*border-bottom: 1px solid #AAA;*/} + + /*option: add this class to a section to make its elements render buttons (icons are only available for the wym_tools section for now)*/ + .wym_skin_silver .wym_buttons li { float:left;} + .wym_skin_silver .wym_buttons a { width: 20px; height: 20px; overflow: hidden; padding: 2px; text-decoration: none !important; border: 1px solid #666; } + .wym_skin_silver .wym_buttons a:hover { text-decoration: none !important; border: 1px solid #000;} + /*image replacements*/ + .wym_skin_silver .wym_buttons li a { background: url(images/icons.silver.gif) no-repeat; text-indent: -9999px;} + .wym_skin_silver .wym_buttons li.wym_tools_strong a { background-position: 0 -384px;} + .wym_skin_silver .wym_buttons li.wym_tools_emphasis a { background-position: 0 -24px;} + .wym_skin_silver .wym_buttons li.wym_tools_superscript a { background-position: 0 -432px;} + .wym_skin_silver .wym_buttons li.wym_tools_subscript a { background-position: 0 -456px;} + .wym_skin_silver .wym_buttons li.wym_tools_ordered_list a { background-position: 0 -48px;} + .wym_skin_silver .wym_buttons li.wym_tools_unordered_list a{ background-position: 0 -72px;} + .wym_skin_silver .wym_buttons li.wym_tools_indent a { background-position: 0 -600px;} + .wym_skin_silver .wym_buttons li.wym_tools_outdent a { background-position: 0 -624px;} + .wym_skin_silver .wym_buttons li.wym_tools_undo a { background-position: 0 -504px;} + .wym_skin_silver .wym_buttons li.wym_tools_redo a { background-position: 0 -528px;} + .wym_skin_silver .wym_buttons li.wym_tools_link a { background-position: 0 -96px;} + .wym_skin_silver .wym_buttons li.wym_tools_unlink a { background-position: 0 -168px;} + .wym_skin_silver .wym_buttons li.wym_tools_image a { background-position: 0 -120px;} + .wym_skin_silver .wym_buttons li.wym_tools_table a { background-position: 0 -144px;} + .wym_skin_silver .wym_buttons li.wym_tools_paste a { background-position: 0 -552px;} + .wym_skin_silver .wym_buttons li.wym_tools_html a { background-position: 0 -192px;} + .wym_skin_silver .wym_buttons li.wym_tools_preview a { background-position: 0 -408px;} + .wym_skin_silver .wym_buttons li.wym_tools_gadget a { background-position: 0 -576px;} + + .wym_skin_silver .wym_buttons li.wym_tools_strong a:hover { background-position: -24px -384px;} + .wym_skin_silver .wym_buttons li.wym_tools_emphasis a:hover { background-position: -24px -24px;} + .wym_skin_silver .wym_buttons li.wym_tools_superscript a:hover { background-position: -24px -432px;} + .wym_skin_silver .wym_buttons li.wym_tools_subscript a:hover { background-position: -24px -456px;} + .wym_skin_silver .wym_buttons li.wym_tools_ordered_list a:hover { background-position: -24px -48px;} + .wym_skin_silver .wym_buttons li.wym_tools_unordered_list a:hover{ background-position: -24px -72px;} + .wym_skin_silver .wym_buttons li.wym_tools_indent a:hover { background-position: -24px -600px;} + .wym_skin_silver .wym_buttons li.wym_tools_outdent a:hover { background-position: -24px -624px;} + .wym_skin_silver .wym_buttons li.wym_tools_undo a:hover { background-position: -24px -504px;} + .wym_skin_silver .wym_buttons li.wym_tools_redo a:hover { background-position: -24px -528px;} + .wym_skin_silver .wym_buttons li.wym_tools_link a:hover { background-position: -24px -96px;} + .wym_skin_silver .wym_buttons li.wym_tools_unlink a:hover { background-position: -24px -168px;} + .wym_skin_silver .wym_buttons li.wym_tools_image a:hover { background-position: -24px -120px;} + .wym_skin_silver .wym_buttons li.wym_tools_table a:hover { background-position: -24px -144px;} + .wym_skin_silver .wym_buttons li.wym_tools_paste a:hover { background-position: -24px -552px;} + .wym_skin_silver .wym_buttons li.wym_tools_html a:hover { background-position: -24px -192px;} + .wym_skin_silver .wym_buttons li.wym_tools_preview a:hover { background-position: -24px -408px;} + .wym_skin_silver .wym_buttons li.wym_tools_gadget a:hover { background-position: -24px -576px;} + +/*DECORATION*/ + .wym_skin_silver .wym_section h2 { background: #ddd; border: none;} + .wym_skin_silver .wym_section h2 span { color: gray;} + .wym_skin_silver .wym_panel { padding: 0; border: solid gray; border-width: 0px;} + .wym_skin_silver .wym_panel ul { margin: 2px 0 5px; } + .wym_skin_silver .wym_dropdown { padding: 0; border: none; } + .wym_skin_silver .wym_dropdown ul { border: none; margin-left: -1px; padding: 0px;} + +/*DIALOGS*/ + .wym_dialog div.row { margin-bottom: 5px;} + .wym_dialog div.row input { margin-right: 5px;} + .wym_dialog div.row label { float: left; width: 150px; display: block; text-align: right; margin-right: 10px; } + .wym_dialog div.row-indent { padding-left: 160px; } + /*autoclearing*/ + .wym_dialog div.row:after { content: "."; display: block; height: 0; clear: both; visibility: hidden; } + .wym_dialog div.row { display: inline-block; } + /* Hides from IE-mac \*/ + * html .wym_dialog div.row { height: 1%; } + .wym_dialog div.row { display: block; } + /* End hide from IE-mac */ + +/*WYMEDITOR_LINK*/ + a.wym_wymeditor_link + { + text-indent: -9999px; + float: right; + display: block; + width: 50px; + height: 15px; + background: url(../wymeditor_icon.png); + background-position: 1px 1px; + background-repeat: no-repeat; + overflow: hidden; + text-decoration: none; + padding: 1px !important; + border: 1px solid #333 !important; + background-color: #FFF !important; + } + +.wym_box +{ + padding: 0px !important; + margin: 0px; +} +.wym_inner +{ + border-left: 1px solid #FFF; + border-top: 1px solid #FFF; + border-right: 1px solid #FFF; + border-bottom: 1px solid #FFF; + padding: 5px; + background-color: #B8C1C4; + height: auto; +} + +.clear {clear: both;} + +div.wym_dropdown +{ + cursor: pointer; + width: 138px !important; + margin: 0px 4px 10px 0px !important; + padding: 0px; + z-index: 1001; + display: block; + border: 1px solid red; +} + +div.wym_dropdown ul +{ + display: none; + width: 124px; + padding: 0px !important; + margin: 0px !important; + list-style-type: none; + list-style-image: none; + z-index: 1002; + position: absolute; + border-top: 1px solid #AAA; +} + +div.wym_dropdown ul li +{ + width: 146px; + height: 20px; + padding: 0px !important; + margin: 0px; + border: 1px solid #777; + border-top: none; + background: #DDD; + list-style-image: none; +} + +div.wym_dropdown h2 +{ + width: 138px; + height: 16px; + color: #000 !important; + background-image: url(images/bg.selector.silver.gif) !important; + background-position: 0px -18px; + background-repeat: no-repeat; + border: none; + font-family: "Trebuchet MS", Verdana, Arial, Helvetica, Sanserif; + font-size: 12px !important; + font-weight: bold !important; + padding: 2px 0px 0px 10px !important; + margin: 0px !important; +} + +.wym_skin_silver .wym_panel h2 +{ + width: 138px; + height: 16px; + color: #000 !important; + background-image: url(images/bg.header.gif) !important; + background-position: 0px 0px; + background-repeat: no-repeat; + border: none; + font-family: "Trebuchet MS", Verdana, Arial, Helvetica, Sanserif; + font-size: 12px !important; + font-weight: bold !important; + padding: 2px 0px 0px 10px !important; + margin: 0px !important; +} + +.wym_skin_silver .wym_panel ul +{ + margin-top: 0px !important; +} + +.wym_skin_silver .wym_panel ul li +{ + width: 146px; + height: 20px; + padding: 0px !important; + margin: 0px; + border: 1px solid #777; + border-top: none; + background: #DDD; + list-style-image: none; +} + +.wym_skin_silver .wym_panel a, +div.wym_dropdown a +{ + text-decoration: none; + font-family: "Trebuchet MS", Verdana, Arial, Helvetica, Sanserif; + font-size: 12px; + padding: 5px 0px 0px 10px !important; + display: block; + width: 136px; + height: 15px; + color: #000; + text-align: left !important; + margin-left: 0px !important; +} + +div.wym_dropdown a:hover, +.wym_skin_silver .wym_panel a:hover +{ + background: #BBB; + border-bottom: none !important; +} diff --git a/gstudio/static/gstudio/js/wymeditor/skins/silver/skin.js b/gstudio/static/gstudio/js/wymeditor/skins/silver/skin.js new file mode 100644 index 00000000..948ed91c --- /dev/null +++ b/gstudio/static/gstudio/js/wymeditor/skins/silver/skin.js @@ -0,0 +1,61 @@ +/* This file is part of the Silver skin for WYMeditor by Scott Edwin Lewis */ + +jQuery.fn.selectify = function() { + return this.each(function() { + jQuery(this).hover( + function() { + jQuery("h2", this).css("background-position", "0px -18px"); + jQuery("ul", this).fadeIn("fast"); + }, + function() { + jQuery("h2", this).css("background-position", ""); + jQuery("ul", this).fadeOut("fast"); + } + ); + }); +}; + +WYMeditor.SKINS['silver'] = { + + init: function(wym) { + + //add some elements to improve the rendering + jQuery(wym._box) + .append('<div class="clear"></div>') + .wrapInner('<div class="wym_inner"></div>'); + + //render following sections as panels + jQuery(wym._box).find(wym._options.classesSelector) + .addClass("wym_panel"); + + //render following sections as buttons + jQuery(wym._box).find(wym._options.toolsSelector) + .addClass("wym_buttons"); + + //render following sections as dropdown menus + jQuery(wym._box).find(wym._options.containersSelector) + .addClass("wym_dropdown") + .selectify(); + + // auto add some margin to the main area sides if left area + // or right area are not empty (if they contain sections) + jQuery(wym._box).find("div.wym_area_right ul") + .parents("div.wym_area_right").show() + .parents(wym._options.boxSelector) + .find("div.wym_area_main") + .css({"margin-right": "155px"}); + + jQuery(wym._box).find("div.wym_area_left ul") + .parents("div.wym_area_left").show() + .parents(wym._options.boxSelector) + .find("div.wym_area_main") + .css({"margin-left": "155px"}); + + //make hover work under IE < 7 + jQuery(wym._box).find(".wym_section").hover(function(){ + jQuery(this).addClass("hover"); + },function(){ + jQuery(this).removeClass("hover"); + }); + } +}; diff --git a/gstudio/static/gstudio/js/wymeditor/skins/twopanels/icons.png b/gstudio/static/gstudio/js/wymeditor/skins/twopanels/icons.png Binary files differnew file mode 100644 index 00000000..c6eb463f --- /dev/null +++ b/gstudio/static/gstudio/js/wymeditor/skins/twopanels/icons.png diff --git a/gstudio/static/gstudio/js/wymeditor/skins/twopanels/skin.css b/gstudio/static/gstudio/js/wymeditor/skins/twopanels/skin.css new file mode 100644 index 00000000..7e6b8fda --- /dev/null +++ b/gstudio/static/gstudio/js/wymeditor/skins/twopanels/skin.css @@ -0,0 +1,134 @@ +/* + * WYMeditor : what you see is What You Mean web-based editor + * Copyright (c) 2005 - 2009 Jean-Francois Hovinne, http://www.wymeditor.org/ + * Dual licensed under the MIT (MIT-license.txt) + * and GPL (GPL-license.txt) licenses. + * + * For further information visit: + * http://www.wymeditor.org/ + * + * File Name: + * screen.css + * main stylesheet for the WYMeditor skin + * See the documentation for more info. + * + * File Authors: + * Daniel Reszka (d.reszka a-t wymeditor dotorg) + * Jean-Francois Hovinne +*/ + +/*TRYING TO RESET STYLES THAT MAY INTERFERE WITH WYMEDITOR*/ + .wym_skin_twopanels p, .wym_skin_twopanels h2, .wym_skin_twopanels h3, + .wym_skin_twopanels ul, .wym_skin_twopanels li { background: transparent url(); margin: 0; padding: 0; border-width:0; list-style: none; } + + +/*HIDDEN BY DEFAULT*/ + .wym_skin_twopanels .wym_area_left { display: block; } + .wym_skin_twopanels .wym_area_right { display: block; } + + +/*TYPO*/ + .wym_skin_twopanels { font-size: 62.5%; font-family: Verdana, Arial, sans-serif; } + .wym_skin_twopanels h2 { font-size: 110%; /* = 11px */} + .wym_skin_twopanels h3 { font-size: 100%; /* = 10px */} + .wym_skin_twopanels li { font-size: 100%; /* = 10px */} + + +/*WYM_BOX*/ + .wym_skin_twopanels { border: 1px solid gray; background: #f2f2f2; padding: 5px} + + /*auto-clear the wym_box*/ + .wym_skin_twopanels:after { content: "."; display: block; height: 0; clear: both; visibility: hidden; } + * html .wym_skin_twopanels { height: 1%;} + + +/*WYM_HTML*/ + .wym_skin_twopanels .wym_html { width: 98%;} + .wym_skin_twopanels .wym_html textarea { width: 100%; height: 200px; border: 1px solid gray; background: white; } + + +/*WYM_IFRAME*/ + .wym_skin_twopanels .wym_iframe { width: 98%;} + .wym_skin_twopanels .wym_iframe iframe { width: 100%; height: 200px; border: 1px solid gray; background: white } + + +/*AREAS*/ + .wym_skin_twopanels .wym_area_left { width: 100px; float: left;} + .wym_skin_twopanels .wym_area_right { width: 150px; float: right;} + .wym_skin_twopanels .wym_area_bottom { height: 1%; clear: both;} + * html .wym_skin_twopanels .wym_area_main { height: 1%;} + * html .wym_skin_twopanels .wym_area_top { height: 1%;} + *+html .wym_skin_twopanels .wym_area_top { height: 1%;} + +/*SECTIONS SYSTEM*/ + + /*common defaults for all sections*/ + .wym_skin_twopanels .wym_section { margin-bottom: 5px; } + .wym_skin_twopanels .wym_section h2, + .wym_skin_twopanels .wym_section h3 { padding: 1px 3px; margin: 0; } + .wym_skin_twopanels .wym_section a { padding: 0 3px; display: block; text-decoration: none; color: black; } + .wym_skin_twopanels .wym_section a:hover { background-color: yellow; } + /*hide section titles by default*/ + .wym_skin_twopanels .wym_section h2 { display: none; } + /*disable any margin-collapse*/ + .wym_skin_twopanels .wym_section { padding-top: 1px; padding-bottom: 1px; } + /*auto-clear sections*/ + .wym_skin_twopanels .wym_section ul:after { content: "."; display: block; height: 0; clear: both; visibility: hidden; } + * html .wym_skin_twopanels .wym_section ul { height: 1%;} + + /*option: add this class to a section to make it render as a panel*/ + .wym_skin_twopanels .wym_panel { } + .wym_skin_twopanels .wym_panel h2 { display: block; } + + /*option: add this class to a section to make it render as a dropdown menu*/ + .wym_skin_twopanels .wym_dropdown h2 { display: block; } + .wym_skin_twopanels .wym_dropdown ul { display: none; position: absolute; background: white; } + .wym_skin_twopanels .wym_dropdown:hover ul, + .wym_skin_twopanels .wym_dropdown.hover ul { display: block; } + + /*option: add this class to a section to make its elements render buttons (icons are only available for the wym_tools section for now)*/ + .wym_skin_twopanels .wym_buttons li { float:left;} + .wym_skin_twopanels .wym_buttons a { width: 20px; height: 20px; overflow: hidden; padding: 2px } + /*image replacements*/ + .wym_skin_twopanels .wym_buttons li a { background: url(icons.png) no-repeat; text-indent: -9999px;} + .wym_skin_twopanels .wym_buttons li.wym_tools_strong a { background-position: 0 -382px;} + .wym_skin_twopanels .wym_buttons li.wym_tools_emphasis a { background-position: 0 -22px;} + .wym_skin_twopanels .wym_buttons li.wym_tools_superscript a { background-position: 0 -430px;} + .wym_skin_twopanels .wym_buttons li.wym_tools_subscript a { background-position: 0 -454px;} + .wym_skin_twopanels .wym_buttons li.wym_tools_ordered_list a { background-position: 0 -48px;} + .wym_skin_twopanels .wym_buttons li.wym_tools_unordered_list a{ background-position: 0 -72px;} + .wym_skin_twopanels .wym_buttons li.wym_tools_indent a { background-position: 0 -574px;} + .wym_skin_twopanels .wym_buttons li.wym_tools_outdent a { background-position: 0 -598px;} + .wym_skin_twopanels .wym_buttons li.wym_tools_undo a { background-position: 0 -502px;} + .wym_skin_twopanels .wym_buttons li.wym_tools_redo a { background-position: 0 -526px;} + .wym_skin_twopanels .wym_buttons li.wym_tools_link a { background-position: 0 -96px;} + .wym_skin_twopanels .wym_buttons li.wym_tools_unlink a { background-position: 0 -168px;} + .wym_skin_twopanels .wym_buttons li.wym_tools_image a { background-position: 0 -121px;} + .wym_skin_twopanels .wym_buttons li.wym_tools_table a { background-position: 0 -144px;} + .wym_skin_twopanels .wym_buttons li.wym_tools_paste a { background-position: 0 -552px;} + .wym_skin_twopanels .wym_buttons li.wym_tools_html a { background-position: 0 -193px;} + .wym_skin_twopanels .wym_buttons li.wym_tools_preview a { background-position: 0 -408px;} + +/*DECORATION*/ + .wym_skin_twopanels .wym_section h2 { background: #ddd; border: solid gray; border-width: 0 0 1px;} + .wym_skin_twopanels .wym_section h2 span { color: gray;} + .wym_skin_twopanels .wym_panel { padding: 0; border: solid gray; border-width: 1px; background: white;} + .wym_skin_twopanels .wym_panel ul { margin: 2px 0 5px; } + .wym_skin_twopanels .wym_dropdown { padding: 0; border: solid gray; border-width: 1px 1px 0 1px; } + .wym_skin_twopanels .wym_dropdown ul { border: solid gray; border-width: 0 1px 1px 1px; margin-left: -1px; padding: 5px 10px 5px 3px;} + +/*DIALOGS*/ + .wym_dialog div.row { margin-bottom: 5px;} + .wym_dialog div.row input { margin-right: 5px;} + .wym_dialog div.row label { float: left; width: 150px; display: block; text-align: right; margin-right: 10px; } + .wym_dialog div.row-indent { padding-left: 160px; } + /*autoclearing*/ + .wym_dialog div.row:after { content: "."; display: block; height: 0; clear: both; visibility: hidden; } + .wym_dialog div.row { display: inline-block; } + /* Hides from IE-mac \*/ + * html .wym_dialog div.row { height: 1%; } + .wym_dialog div.row { display: block; } + /* End hide from IE-mac */ + +/*WYMEDITOR_LINK*/ + a.wym_wymeditor_link { text-indent: -9999px; float: right; display: block; width: 50px; height: 15px; background: url(../wymeditor_icon.png); overflow: hidden; text-decoration: none; } diff --git a/gstudio/static/gstudio/js/wymeditor/skins/twopanels/skin.js b/gstudio/static/gstudio/js/wymeditor/skins/twopanels/skin.js new file mode 100644 index 00000000..e82efc54 --- /dev/null +++ b/gstudio/static/gstudio/js/wymeditor/skins/twopanels/skin.js @@ -0,0 +1,39 @@ +WYMeditor.SKINS['twopanels'] = { + + init: function(wym) { + + //move the containers panel to the left area + jQuery(wym._box).find(wym._options.containersSelector) + .appendTo("div.wym_area_left"); + + //render following sections as panels + jQuery(wym._box).find(wym._options.classesSelector + ', ' + + wym._options.containersSelector) + .addClass("wym_panel"); + + //render following sections as buttons + jQuery(wym._box).find(wym._options.toolsSelector) + .addClass("wym_buttons"); + + // auto add some margin to the main area sides if left area + // or right area are not empty (if they contain sections) + jQuery(wym._box).find("div.wym_area_right ul") + .parents("div.wym_area_right").show() + .parents(wym._options.boxSelector) + .find("div.wym_area_main") + .css({"margin-right": "155px"}); + + jQuery(wym._box).find("div.wym_area_left ul") + .parents("div.wym_area_left").show() + .parents(wym._options.boxSelector) + .find("div.wym_area_main") + .css({"margin-left": "115px"}); + + //make hover work under IE < 7 + jQuery(wym._box).find(".wym_section").hover(function(){ + jQuery(this).addClass("hover"); + },function(){ + jQuery(this).removeClass("hover"); + }); + } +}; diff --git a/gstudio/static/gstudio/js/wymeditor/skins/wymeditor_icon.png b/gstudio/static/gstudio/js/wymeditor/skins/wymeditor_icon.png Binary files differnew file mode 100644 index 00000000..d4fc155f --- /dev/null +++ b/gstudio/static/gstudio/js/wymeditor/skins/wymeditor_icon.png |