HTML editing fixes, upgrade to TinyMCE v3.0.6
133 files deleted
52 files modified
32 files renamed
75 files added
| | |
| | | CHANGELOG RoundCube Webmail |
| | | --------------------------- |
| | | |
| | | 2008/04/15 (estadtherr) |
| | | ---------- |
| | | - HTML editing is now working with PHP5 updates and TinyMCE v3.0.6 |
| | | |
| | | 2008/04/15 (alec) |
| | | ---------- |
| | | - Fix remove signature when replying (#1333167) |
| | |
| | | } |
| | | else |
| | | { |
| | | var eid = tinyMCE.getEditorId('_message'); |
| | | // editor is a TinyMCE_Control object |
| | | var editor = tinyMCE.getInstanceById(eid); |
| | | var editor = tinyMCE.get('compose-body'); |
| | | // if this is null, we should exit |
| | | if (editor == null) { |
| | | if (editor == null) |
| | | { |
| | | return false; |
| | | } |
| | | var msgDoc = editor.getDoc(); |
| | | var msgBody = msgDoc.body; |
| | | } |
| | | |
| | | if (this.env.signatures && this.env.signatures[id]) |
| | | { |
| | | // Append the signature as a span within the body |
| | | var sigElem = msgDoc.getElementById("_rc_sig"); |
| | | var sigElem = editor.dom.get("_rc_sig"); |
| | | if (!sigElem) |
| | | { |
| | | sigElem = msgDoc.createElement("span"); |
| | | sigElem = editor.getDoc().createElement("span"); |
| | | sigElem.setAttribute("id", "_rc_sig"); |
| | | msgBody.appendChild(sigElem); |
| | | editor.getBody().appendChild(sigElem); |
| | | } |
| | | if (this.env.signatures[id]['is_html']) |
| | | { |
| | |
| | | }; |
| | | |
| | | |
| | | this.toggle_editor = function(checkbox, textElementName) |
| | | this.toggle_editor = function(checkbox, textAreaId) |
| | | { |
| | | var ischecked = checkbox.checked; |
| | | if (ischecked) |
| | | { |
| | | tinyMCE.execCommand('mceAddControl', true, textElementName); |
| | | tinyMCE.execCommand('mceAddControl', true, textAreaId); |
| | | } |
| | | else |
| | | { |
| | | tinyMCE.execCommand('mceRemoveControl', true, textElementName); |
| | | tinyMCE.execCommand('mceRemoveControl', true, textAreaId); |
| | | } |
| | | }; |
| | | |
| | |
| | | |
| | | function rcmail_editor_init(skin_path) |
| | | { |
| | | tinyMCE.init({ mode : 'specific_textareas', |
| | | tinyMCE.init({ mode : "textareas", |
| | | editor_selector : "mce_editor", |
| | | accessibility_focus : false, |
| | | apply_source_formatting : true, |
| | | theme : 'advanced', |
| | | plugins : 'emotions,media,nonbreaking,table,searchreplace,spellchecker,visualchars', |
| | | theme_advanced_buttons1 : 'bold,italic,underline,separator,justifyleft,justifycenter,justifyright,justifyfull,separator,bullist,numlist,outdent,indent,separator,emotions,charmap,code,forecolor,backcolor,fontselect,fontsizeselect, separator,undo,redo,image,media', |
| | | theme_advanced_buttons2 : '', |
| | | theme_advanced_buttons3 : '', |
| | | theme_advanced_toolbar_location : 'top', |
| | | theme_advanced_toolbar_align : 'left', |
| | | extended_valid_elements : 'font[face|size|color|style],span[id|class|align|style]', |
| | | content_css : skin_path + '/editor_content.css', |
| | | editor_css : skin_path + '/editor_ui.css', |
| | | external_image_list_url : 'program/js/editor_images.js' |
| | | theme : "advanced", |
| | | plugins : "emotions,media,nonbreaking,table,searchreplace,spellchecker,visualchars", |
| | | theme_advanced_buttons1 : "bold,italic,underline,separator,justifyleft,justifycenter,justifyright,justifyfull,separator,bullist,numlist,outdent,indent,separator,link,unlink,emotions,charmap,code,forecolor,backcolor,fontselect,fontsizeselect, separator,undo,redo,image,media,spellchecker", |
| | | theme_advanced_buttons2 : "", |
| | | theme_advanced_buttons3 : "", |
| | | theme_advanced_toolbar_location : "top", |
| | | theme_advanced_toolbar_align : "left", |
| | | extended_valid_elements : "font[face|size|color|style],span[id|class|align|style]", |
| | | content_css : skin_path + "/editor_content.css", |
| | | external_image_list_url : "editor_images.js" |
| | | }); |
| | | } |
| | | |
| | |
| | | var existingPlainText = composeElement.value; |
| | | var htmlText = "<pre>" + existingPlainText + "</pre>"; |
| | | composeElement.value = htmlText; |
| | | tinyMCE.execCommand('mceAddControl', true, '_message'); |
| | | tinyMCE.execCommand('mceAddControl', true, 'compose-body'); |
| | | htmlFlag.value = "1"; |
| | | } |
| | | else |
| | | { |
| | | rcmail.set_busy(true, 'converting'); |
| | | var thisMCE = tinyMCE.getInstanceById('_message'); |
| | | var existingHtml = tinyMCE.getContent(); |
| | | var thisMCE = tinyMCE.get('compose-body'); |
| | | var existingHtml = thisMCE.getContent(); |
| | | rcmail_html2plain(existingHtml); |
| | | tinyMCE.execCommand('mceRemoveControl', true, '_message'); |
| | | tinyMCE.execCommand('mceRemoveControl', true, 'compose-body'); |
| | | htmlFlag.value = "0"; |
| | | } |
| | | } |
| | |
| | | // UK lang variables
|
| | |
|
| | | tinyMCE.addToLang('',{
|
| | | bold_desc : 'Bold (Ctrl+B)',
|
| | | italic_desc : 'Italic (Ctrl+I)',
|
| | | underline_desc : 'Underline (Ctrl+U)',
|
| | | striketrough_desc : 'Strikethrough',
|
| | | justifyleft_desc : 'Align left',
|
| | | justifycenter_desc : 'Align center',
|
| | | justifyright_desc : 'Align right',
|
| | | justifyfull_desc : 'Align full',
|
| | | bullist_desc : 'Unordered list',
|
| | | numlist_desc : 'Ordered list',
|
| | | outdent_desc : 'Outdent',
|
| | | indent_desc : 'Indent',
|
| | | undo_desc : 'Undo (Ctrl+Z)',
|
| | | redo_desc : 'Redo (Ctrl+Y)',
|
| | | link_desc : 'Insert/edit link',
|
| | | unlink_desc : 'Unlink',
|
| | | image_desc : 'Insert/edit image',
|
| | | cleanup_desc : 'Cleanup messy code',
|
| | | focus_alert : 'A editor instance must be focused before using this command.',
|
| | | edit_confirm : 'Do you want to use the WYSIWYG mode for this textarea?',
|
| | | insert_link_title : 'Insert/edit link',
|
| | | insert : 'Insert',
|
| | | update : 'Update',
|
| | | cancel : 'Cancel',
|
| | | insert_link_url : 'Link URL',
|
| | | insert_link_target : 'Target',
|
| | | insert_link_target_same : 'Open link in the same window',
|
| | | insert_link_target_blank : 'Open link in a new window',
|
| | | insert_image_title : 'Insert/edit image',
|
| | | insert_image_src : 'Image URL',
|
| | | insert_image_alt : 'Image description',
|
| | | help_desc : 'Help',
|
| | | bold_img : "bold.gif",
|
| | | italic_img : "italic.gif",
|
| | | underline_img : "underline.gif",
|
| | | clipboard_msg : 'Copy/Cut/Paste is not available in Mozilla and Firefox.\nDo you want more information about this issue?',
|
| | | popup_blocked : 'Sorry, but we have noticed that your popup-blocker has disabled a window that provides application functionality. You will need to disable popup blocking on this site in order to fully utilize this tool.'
|
| | | });
|
| | | tinyMCE.addI18n({en:{
|
| | | common:{
|
| | | edit_confirm:"Do you want to use the WYSIWYG mode for this textarea?",
|
| | | apply:"Apply",
|
| | | insert:"Insert",
|
| | | update:"Update",
|
| | | cancel:"Cancel",
|
| | | close:"Close",
|
| | | browse:"Browse",
|
| | | class_name:"Class",
|
| | | not_set:"-- Not set --",
|
| | | clipboard_msg:"Copy/Cut/Paste is not available in Mozilla and Firefox.\nDo you want more information about this issue?",
|
| | | clipboard_no_support:"Currently not supported by your browser, use keyboard shortcuts instead.",
|
| | | popup_blocked:"Sorry, but we have noticed that your popup-blocker has disabled a window that provides application functionality. You will need to disable popup blocking on this site in order to fully utilize this tool.",
|
| | | invalid_data:"Error: Invalid values entered, these are marked in red.",
|
| | | more_colors:"More colors"
|
| | | },
|
| | | contextmenu:{
|
| | | align:"Alignment",
|
| | | left:"Left",
|
| | | center:"Center",
|
| | | right:"Right",
|
| | | full:"Full"
|
| | | },
|
| | | insertdatetime:{
|
| | | date_fmt:"%Y-%m-%d",
|
| | | time_fmt:"%H:%M:%S",
|
| | | insertdate_desc:"Insert date",
|
| | | inserttime_desc:"Insert time",
|
| | | months_long:"January,February,March,April,May,June,July,August,September,October,November,December",
|
| | | months_short:"Jan,Feb,Mar,Apr,May,Jun,Jul,Aug,Sep,Oct,Nov,Dec",
|
| | | day_long:"Sunday,Monday,Tuesday,Wednesday,Thursday,Friday,Saturday,Sunday",
|
| | | day_short:"Sun,Mon,Tue,Wed,Thu,Fri,Sat,Sun"
|
| | | },
|
| | | print:{
|
| | | print_desc:"Print"
|
| | | },
|
| | | preview:{
|
| | | preview_desc:"Preview"
|
| | | },
|
| | | directionality:{
|
| | | ltr_desc:"Direction left to right",
|
| | | rtl_desc:"Direction right to left"
|
| | | },
|
| | | layer:{
|
| | | insertlayer_desc:"Insert new layer",
|
| | | forward_desc:"Move forward",
|
| | | backward_desc:"Move backward",
|
| | | absolute_desc:"Toggle absolute positioning",
|
| | | content:"New layer..."
|
| | | },
|
| | | save:{
|
| | | save_desc:"Save",
|
| | | cancel_desc:"Cancel all changes"
|
| | | },
|
| | | nonbreaking:{
|
| | | nonbreaking_desc:"Insert non-breaking space character"
|
| | | },
|
| | | iespell:{
|
| | | iespell_desc:"Run spell checking",
|
| | | download:"ieSpell not detected. Do you want to install it now?"
|
| | | },
|
| | | advhr:{
|
| | | advhr_desc:"Horizontale rule"
|
| | | },
|
| | | emotions:{
|
| | | emotions_desc:"Emotions"
|
| | | },
|
| | | searchreplace:{
|
| | | search_desc:"Find",
|
| | | replace_desc:"Find/Replace"
|
| | | },
|
| | | advimage:{
|
| | | image_desc:"Insert/edit image"
|
| | | },
|
| | | advlink:{
|
| | | link_desc:"Insert/edit link"
|
| | | },
|
| | | xhtmlxtras:{
|
| | | cite_desc:"Citation",
|
| | | abbr_desc:"Abbreviation",
|
| | | acronym_desc:"Acronym",
|
| | | del_desc:"Deletion",
|
| | | ins_desc:"Insertion",
|
| | | attribs_desc:"Insert/Edit Attributes"
|
| | | },
|
| | | style:{
|
| | | desc:"Edit CSS Style"
|
| | | },
|
| | | paste:{
|
| | | paste_text_desc:"Paste as Plain Text",
|
| | | paste_word_desc:"Paste from Word",
|
| | | selectall_desc:"Select All"
|
| | | },
|
| | | paste_dlg:{
|
| | | text_title:"Use CTRL+V on your keyboard to paste the text into the window.",
|
| | | text_linebreaks:"Keep linebreaks",
|
| | | word_title:"Use CTRL+V on your keyboard to paste the text into the window."
|
| | | },
|
| | | table:{
|
| | | desc:"Inserts a new table",
|
| | | row_before_desc:"Insert row before",
|
| | | row_after_desc:"Insert row after",
|
| | | delete_row_desc:"Delete row",
|
| | | col_before_desc:"Insert column before",
|
| | | col_after_desc:"Insert column after",
|
| | | delete_col_desc:"Remove column",
|
| | | split_cells_desc:"Split merged table cells",
|
| | | merge_cells_desc:"Merge table cells",
|
| | | row_desc:"Table row properties",
|
| | | cell_desc:"Table cell properties",
|
| | | props_desc:"Table properties",
|
| | | paste_row_before_desc:"Paste table row before",
|
| | | paste_row_after_desc:"Paste table row after",
|
| | | cut_row_desc:"Cut table row",
|
| | | copy_row_desc:"Copy table row",
|
| | | del:"Delete table",
|
| | | row:"Row",
|
| | | col:"Column",
|
| | | cell:"Cell"
|
| | | },
|
| | | autosave:{
|
| | | unload_msg:"The changes you made will be lost if you navigate away from this page."
|
| | | },
|
| | | fullscreen:{
|
| | | desc:"Toggle fullscreen mode"
|
| | | },
|
| | | media:{
|
| | | desc:"Insert / edit embedded media",
|
| | | edit:"Edit embedded media"
|
| | | },
|
| | | fullpage:{
|
| | | desc:"Document properties"
|
| | | },
|
| | | template:{
|
| | | desc:"Insert predefined template content"
|
| | | },
|
| | | visualchars:{
|
| | | desc:"Visual control characters on/off."
|
| | | },
|
| | | spellchecker:{
|
| | | desc:"Toggle spellchecker",
|
| | | menu:"Spellchecker settings",
|
| | | ignore_word:"Ignore word",
|
| | | ignore_words:"Ignore all",
|
| | | langs:"Languages",
|
| | | wait:"Please wait...",
|
| | | sug:"Suggestions",
|
| | | no_sug:"No suggestions",
|
| | | no_mpell:"No misspellings found."
|
| | | },
|
| | | pagebreak:{
|
| | | desc:"Insert page break."
|
| | | }}}); |
| | |
| | | GNU LESSER GENERAL PUBLIC LICENSE |
| | | Version 2.1, February 1999 |
| | | |
| | | Copyright (C) 1991, 1999 Free Software Foundation, Inc. |
| | | 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA |
| | | Everyone is permitted to copy and distribute verbatim copies |
| | | of this license document, but changing it is not allowed. |
| | | |
| | | [This is the first released version of the Lesser GPL. It also counts |
| | | as the successor of the GNU Library Public License, version 2, hence |
| | | the version number 2.1.] |
| | | |
| | | Preamble |
| | | |
| | | The licenses for most software are designed to take away your |
| | | freedom to share and change it. By contrast, the GNU General Public |
| | | Licenses are intended to guarantee your freedom to share and change |
| | | free software--to make sure the software is free for all its users. |
| | | |
| | | This license, the Lesser General Public License, applies to some |
| | | specially designated software packages--typically libraries--of the |
| | | Free Software Foundation and other authors who decide to use it. You |
| | | can use it too, but we suggest you first think carefully about whether |
| | | this license or the ordinary General Public License is the better |
| | | strategy to use in any particular case, based on the explanations below. |
| | | |
| | | When we speak of free software, we are referring to freedom of use, |
| | | 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 this service if you wish); that you receive source code or can get |
| | | it if you want it; that you can change the software and use pieces of |
| | | it in new free programs; and that you are informed that you can do |
| | | these things. |
| | | |
| | | To protect your rights, we need to make restrictions that forbid |
| | | distributors to deny you these rights or to ask you to surrender these |
| | | rights. These restrictions translate to certain responsibilities for |
| | | you if you distribute copies of the library or if you modify it. |
| | | |
| | | For example, if you distribute copies of the library, whether gratis |
| | | or for a fee, you must give the recipients all the rights that we gave |
| | | you. You must make sure that they, too, receive or can get the source |
| | | code. If you link other code with the library, you must provide |
| | | complete object files to the recipients, so that they can relink them |
| | | with the library after making changes to the library and recompiling |
| | | it. And you must show them these terms so they know their rights. |
| | | |
| | | We protect your rights with a two-step method: (1) we copyright the |
| | | library, and (2) we offer you this license, which gives you legal |
| | | permission to copy, distribute and/or modify the library. |
| | | |
| | | To protect each distributor, we want to make it very clear that |
| | | there is no warranty for the free library. Also, if the library is |
| | | modified by someone else and passed on, the recipients should know |
| | | that what they have is not the original version, so that the original |
| | | author's reputation will not be affected by problems that might be |
| | | introduced by others. |
| | | |
| | | Finally, software patents pose a constant threat to the existence of |
| | | any free program. We wish to make sure that a company cannot |
| | | effectively restrict the users of a free program by obtaining a |
| | | restrictive license from a patent holder. Therefore, we insist that |
| | | any patent license obtained for a version of the library must be |
| | | consistent with the full freedom of use specified in this license. |
| | | |
| | | Most GNU software, including some libraries, is covered by the |
| | | ordinary GNU General Public License. This license, the GNU Lesser |
| | | General Public License, applies to certain designated libraries, and |
| | | is quite different from the ordinary General Public License. We use |
| | | this license for certain libraries in order to permit linking those |
| | | libraries into non-free programs. |
| | | |
| | | When a program is linked with a library, whether statically or using |
| | | a shared library, the combination of the two is legally speaking a |
| | | combined work, a derivative of the original library. The ordinary |
| | | General Public License therefore permits such linking only if the |
| | | entire combination fits its criteria of freedom. The Lesser General |
| | | Public License permits more lax criteria for linking other code with |
| | | the library. |
| | | |
| | | We call this license the "Lesser" General Public License because it |
| | | does Less to protect the user's freedom than the ordinary General |
| | | Public License. It also provides other free software developers Less |
| | | of an advantage over competing non-free programs. These disadvantages |
| | | are the reason we use the ordinary General Public License for many |
| | | libraries. However, the Lesser license provides advantages in certain |
| | | special circumstances. |
| | | |
| | | For example, on rare occasions, there may be a special need to |
| | | encourage the widest possible use of a certain library, so that it becomes |
| | | a de-facto standard. To achieve this, non-free programs must be |
| | | allowed to use the library. A more frequent case is that a free |
| | | library does the same job as widely used non-free libraries. In this |
| | | case, there is little to gain by limiting the free library to free |
| | | software only, so we use the Lesser General Public License. |
| | | |
| | | In other cases, permission to use a particular library in non-free |
| | | programs enables a greater number of people to use a large body of |
| | | free software. For example, permission to use the GNU C Library in |
| | | non-free programs enables many more people to use the whole GNU |
| | | operating system, as well as its variant, the GNU/Linux operating |
| | | system. |
| | | |
| | | Although the Lesser General Public License is Less protective of the |
| | | users' freedom, it does ensure that the user of a program that is |
| | | linked with the Library has the freedom and the wherewithal to run |
| | | that program using a modified version of the Library. |
| | | |
| | | The precise terms and conditions for copying, distribution and |
| | | modification follow. Pay close attention to the difference between a |
| | | "work based on the library" and a "work that uses the library". The |
| | | former contains code derived from the library, whereas the latter must |
| | | be combined with the library in order to run. |
| | | |
| | | GNU LESSER GENERAL PUBLIC LICENSE |
| | | TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION |
| | | |
| | | 0. This License Agreement applies to any software library or other |
| | | program which contains a notice placed by the copyright holder or |
| | | other authorized party saying it may be distributed under the terms of |
| | | this Lesser General Public License (also called "this License"). |
| | | Each licensee is addressed as "you". |
| | | |
| | | A "library" means a collection of software functions and/or data |
| | | prepared so as to be conveniently linked with application programs |
| | | (which use some of those functions and data) to form executables. |
| | | |
| | | The "Library", below, refers to any such software library or work |
| | | which has been distributed under these terms. A "work based on the |
| | | Library" means either the Library or any derivative work under |
| | | copyright law: that is to say, a work containing the Library or a |
| | | portion of it, either verbatim or with modifications and/or translated |
| | | straightforwardly into another language. (Hereinafter, translation is |
| | | included without limitation in the term "modification".) |
| | | |
| | | "Source code" for a work means the preferred form of the work for |
| | | making modifications to it. For a library, complete source code means |
| | | all the source code for all modules it contains, plus any associated |
| | | interface definition files, plus the scripts used to control compilation |
| | | and installation of the library. |
| | | |
| | | Activities other than copying, distribution and modification are not |
| | | covered by this License; they are outside its scope. The act of |
| | | running a program using the Library is not restricted, and output from |
| | | such a program is covered only if its contents constitute a work based |
| | | on the Library (independent of the use of the Library in a tool for |
| | | writing it). Whether that is true depends on what the Library does |
| | | and what the program that uses the Library does. |
| | | |
| | | 1. You may copy and distribute verbatim copies of the Library's |
| | | complete source code as you receive it, in any medium, provided that |
| | | you conspicuously and appropriately publish on each copy an |
| | | appropriate copyright notice and disclaimer of warranty; keep intact |
| | | all the notices that refer to this License and to the absence of any |
| | | warranty; and distribute a copy of this License along with the |
| | | Library. |
| | | |
| | | You may charge a fee for the physical act of transferring a copy, |
| | | and you may at your option offer warranty protection in exchange for a |
| | | fee. |
| | | |
| | | 2. You may modify your copy or copies of the Library or any portion |
| | | of it, thus forming a work based on the Library, and copy and |
| | | distribute such modifications or work under the terms of Section 1 |
| | | above, provided that you also meet all of these conditions: |
| | | |
| | | a) The modified work must itself be a software library. |
| | | |
| | | b) You must cause the files modified to carry prominent notices |
| | | stating that you changed the files and the date of any change. |
| | | |
| | | c) You must cause the whole of the work to be licensed at no |
| | | charge to all third parties under the terms of this License. |
| | | |
| | | d) If a facility in the modified Library refers to a function or a |
| | | table of data to be supplied by an application program that uses |
| | | the facility, other than as an argument passed when the facility |
| | | is invoked, then you must make a good faith effort to ensure that, |
| | | in the event an application does not supply such function or |
| | | table, the facility still operates, and performs whatever part of |
| | | its purpose remains meaningful. |
| | | |
| | | (For example, a function in a library to compute square roots has |
| | | a purpose that is entirely well-defined independent of the |
| | | application. Therefore, Subsection 2d requires that any |
| | | application-supplied function or table used by this function must |
| | | be optional: if the application does not supply it, the square |
| | | root function must still compute square roots.) |
| | | |
| | | These requirements apply to the modified work as a whole. If |
| | | identifiable sections of that work are not derived from the Library, |
| | | and can be reasonably considered independent and separate works in |
| | | themselves, then this License, and its terms, do not apply to those |
| | | sections when you distribute them as separate works. But when you |
| | | distribute the same sections as part of a whole which is a work based |
| | | on the Library, the distribution of the whole must be on the terms of |
| | | this License, whose permissions for other licensees extend to the |
| | | entire whole, and thus to each and every part regardless of who wrote |
| | | it. |
| | | |
| | | Thus, it is not the intent of this section to claim rights or contest |
| | | your rights to work written entirely by you; rather, the intent is to |
| | | exercise the right to control the distribution of derivative or |
| | | collective works based on the Library. |
| | | |
| | | In addition, mere aggregation of another work not based on the Library |
| | | with the Library (or with a work based on the Library) on a volume of |
| | | a storage or distribution medium does not bring the other work under |
| | | the scope of this License. |
| | | |
| | | 3. You may opt to apply the terms of the ordinary GNU General Public |
| | | License instead of this License to a given copy of the Library. To do |
| | | this, you must alter all the notices that refer to this License, so |
| | | that they refer to the ordinary GNU General Public License, version 2, |
| | | instead of to this License. (If a newer version than version 2 of the |
| | | ordinary GNU General Public License has appeared, then you can specify |
| | | that version instead if you wish.) Do not make any other change in |
| | | these notices. |
| | | |
| | | Once this change is made in a given copy, it is irreversible for |
| | | that copy, so the ordinary GNU General Public License applies to all |
| | | subsequent copies and derivative works made from that copy. |
| | | |
| | | This option is useful when you wish to copy part of the code of |
| | | the Library into a program that is not a library. |
| | | |
| | | 4. You may copy and distribute the Library (or a portion or |
| | | derivative of it, under Section 2) in object code or executable form |
| | | under the terms of Sections 1 and 2 above provided that you accompany |
| | | it with the complete corresponding machine-readable source code, which |
| | | must be distributed under the terms of Sections 1 and 2 above on a |
| | | medium customarily used for software interchange. |
| | | |
| | | If distribution of object code is made by offering access to copy |
| | | from a designated place, then offering equivalent access to copy the |
| | | source code from the same place satisfies the requirement to |
| | | distribute the source code, even though third parties are not |
| | | compelled to copy the source along with the object code. |
| | | |
| | | 5. A program that contains no derivative of any portion of the |
| | | Library, but is designed to work with the Library by being compiled or |
| | | linked with it, is called a "work that uses the Library". Such a |
| | | work, in isolation, is not a derivative work of the Library, and |
| | | therefore falls outside the scope of this License. |
| | | |
| | | However, linking a "work that uses the Library" with the Library |
| | | creates an executable that is a derivative of the Library (because it |
| | | contains portions of the Library), rather than a "work that uses the |
| | | library". The executable is therefore covered by this License. |
| | | Section 6 states terms for distribution of such executables. |
| | | |
| | | When a "work that uses the Library" uses material from a header file |
| | | that is part of the Library, the object code for the work may be a |
| | | derivative work of the Library even though the source code is not. |
| | | Whether this is true is especially significant if the work can be |
| | | linked without the Library, or if the work is itself a library. The |
| | | threshold for this to be true is not precisely defined by law. |
| | | |
| | | If such an object file uses only numerical parameters, data |
| | | structure layouts and accessors, and small macros and small inline |
| | | functions (ten lines or less in length), then the use of the object |
| | | file is unrestricted, regardless of whether it is legally a derivative |
| | | work. (Executables containing this object code plus portions of the |
| | | Library will still fall under Section 6.) |
| | | |
| | | Otherwise, if the work is a derivative of the Library, you may |
| | | distribute the object code for the work under the terms of Section 6. |
| | | Any executables containing that work also fall under Section 6, |
| | | whether or not they are linked directly with the Library itself. |
| | | |
| | | 6. As an exception to the Sections above, you may also combine or |
| | | link a "work that uses the Library" with the Library to produce a |
| | | work containing portions of the Library, and distribute that work |
| | | under terms of your choice, provided that the terms permit |
| | | modification of the work for the customer's own use and reverse |
| | | engineering for debugging such modifications. |
| | | |
| | | You must give prominent notice with each copy of the work that the |
| | | Library is used in it and that the Library and its use are covered by |
| | | this License. You must supply a copy of this License. If the work |
| | | during execution displays copyright notices, you must include the |
| | | copyright notice for the Library among them, as well as a reference |
| | | directing the user to the copy of this License. Also, you must do one |
| | | of these things: |
| | | |
| | | a) Accompany the work with the complete corresponding |
| | | machine-readable source code for the Library including whatever |
| | | changes were used in the work (which must be distributed under |
| | | Sections 1 and 2 above); and, if the work is an executable linked |
| | | with the Library, with the complete machine-readable "work that |
| | | uses the Library", as object code and/or source code, so that the |
| | | user can modify the Library and then relink to produce a modified |
| | | executable containing the modified Library. (It is understood |
| | | that the user who changes the contents of definitions files in the |
| | | Library will not necessarily be able to recompile the application |
| | | to use the modified definitions.) |
| | | |
| | | b) Use a suitable shared library mechanism for linking with the |
| | | Library. A suitable mechanism is one that (1) uses at run time a |
| | | copy of the library already present on the user's computer system, |
| | | rather than copying library functions into the executable, and (2) |
| | | will operate properly with a modified version of the library, if |
| | | the user installs one, as long as the modified version is |
| | | interface-compatible with the version that the work was made with. |
| | | |
| | | c) Accompany the work with a written offer, valid for at |
| | | least three years, to give the same user the materials |
| | | specified in Subsection 6a, above, for a charge no more |
| | | than the cost of performing this distribution. |
| | | |
| | | d) If distribution of the work is made by offering access to copy |
| | | from a designated place, offer equivalent access to copy the above |
| | | specified materials from the same place. |
| | | |
| | | e) Verify that the user has already received a copy of these |
| | | materials or that you have already sent this user a copy. |
| | | |
| | | For an executable, the required form of the "work that uses the |
| | | Library" must include any data and utility programs needed for |
| | | reproducing the executable from it. However, as a special exception, |
| | | the materials to be distributed need not include anything that is |
| | | normally distributed (in either source or binary form) with the major |
| | | components (compiler, kernel, and so on) of the operating system on |
| | | which the executable runs, unless that component itself accompanies |
| | | the executable. |
| | | |
| | | It may happen that this requirement contradicts the license |
| | | restrictions of other proprietary libraries that do not normally |
| | | accompany the operating system. Such a contradiction means you cannot |
| | | use both them and the Library together in an executable that you |
| | | distribute. |
| | | |
| | | 7. You may place library facilities that are a work based on the |
| | | Library side-by-side in a single library together with other library |
| | | facilities not covered by this License, and distribute such a combined |
| | | library, provided that the separate distribution of the work based on |
| | | the Library and of the other library facilities is otherwise |
| | | permitted, and provided that you do these two things: |
| | | |
| | | a) Accompany the combined library with a copy of the same work |
| | | based on the Library, uncombined with any other library |
| | | facilities. This must be distributed under the terms of the |
| | | Sections above. |
| | | |
| | | b) Give prominent notice with the combined library of the fact |
| | | that part of it is a work based on the Library, and explaining |
| | | where to find the accompanying uncombined form of the same work. |
| | | |
| | | 8. You may not copy, modify, sublicense, link with, or distribute |
| | | the Library except as expressly provided under this License. Any |
| | | attempt otherwise to copy, modify, sublicense, link with, or |
| | | distribute the Library is void, and will automatically terminate your |
| | | rights under this License. However, parties who have received copies, |
| | | or rights, from you under this License will not have their licenses |
| | | terminated so long as such parties remain in full compliance. |
| | | |
| | | 9. You are not required to accept this License, since you have not |
| | | signed it. However, nothing else grants you permission to modify or |
| | | distribute the Library or its derivative works. These actions are |
| | | prohibited by law if you do not accept this License. Therefore, by |
| | | modifying or distributing the Library (or any work based on the |
| | | Library), you indicate your acceptance of this License to do so, and |
| | | all its terms and conditions for copying, distributing or modifying |
| | | the Library or works based on it. |
| | | |
| | | 10. Each time you redistribute the Library (or any work based on the |
| | | Library), the recipient automatically receives a license from the |
| | | original licensor to copy, distribute, link with or modify the Library |
| | | subject to these terms and conditions. You may not impose any further |
| | | restrictions on the recipients' exercise of the rights granted herein. |
| | | You are not responsible for enforcing compliance by third parties with |
| | | this License. |
| | | |
| | | 11. If, as a consequence of a court judgment or allegation of patent |
| | | infringement or for any other reason (not limited to patent issues), |
| | | 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 |
| | | distribute so as to satisfy simultaneously your obligations under this |
| | | License and any other pertinent obligations, then as a consequence you |
| | | may not distribute the Library at all. For example, if a patent |
| | | license would not permit royalty-free redistribution of the Library by |
| | | all those who receive copies directly or indirectly through you, then |
| | | the only way you could satisfy both it and this License would be to |
| | | refrain entirely from distribution of the Library. |
| | | |
| | | If any portion of this section is held invalid or unenforceable under any |
| | | particular circumstance, the balance of the section is intended to apply, |
| | | and the section as a whole is intended to apply in other circumstances. |
| | | |
| | | It is not the purpose of this section to induce you to infringe any |
| | | patents or other property right claims or to contest validity of any |
| | | such claims; this section has the sole purpose of protecting the |
| | | integrity of the free software distribution system which is |
| | | implemented by public license practices. Many people have made |
| | | generous contributions to the wide range of software distributed |
| | | through that system in reliance on consistent application of that |
| | | system; it is up to the author/donor to decide if he or she is willing |
| | | to distribute software through any other system and a licensee cannot |
| | | impose that choice. |
| | | |
| | | This section is intended to make thoroughly clear what is believed to |
| | | be a consequence of the rest of this License. |
| | | |
| | | 12. If the distribution and/or use of the Library is restricted in |
| | | certain countries either by patents or by copyrighted interfaces, the |
| | | original copyright holder who places the Library under this License may add |
| | | an explicit geographical distribution limitation excluding those countries, |
| | | so that distribution is permitted only in or among countries not thus |
| | | excluded. In such case, this License incorporates the limitation as if |
| | | written in the body of this License. |
| | | |
| | | 13. The Free Software Foundation may publish revised and/or new |
| | | versions of the Lesser 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 Library |
| | | specifies a version number of this License which applies to it and |
| | | "any later version", you have the option of following the terms and |
| | | conditions either of that version or of any later version published by |
| | | the Free Software Foundation. If the Library does not specify a |
| | | license version number, you may choose any version ever published by |
| | | the Free Software Foundation. |
| | | |
| | | 14. If you wish to incorporate parts of the Library into other free |
| | | programs whose distribution conditions are incompatible with these, |
| | | write to the author to ask for permission. For software which is |
| | | copyrighted by the Free Software Foundation, write to the Free |
| | | Software Foundation; we sometimes make exceptions for this. Our |
| | | decision will be guided by the two goals of preserving the free status |
| | | of all derivatives of our free software and of promoting the sharing |
| | | and reuse of software generally. |
| | | |
| | | NO WARRANTY |
| | | |
| | | 15. BECAUSE THE LIBRARY IS LICENSED FREE OF CHARGE, THERE IS NO |
| | | WARRANTY FOR THE LIBRARY, TO THE EXTENT PERMITTED BY APPLICABLE LAW. |
| | | EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR |
| | | OTHER PARTIES PROVIDE THE LIBRARY "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 |
| | | LIBRARY IS WITH YOU. SHOULD THE LIBRARY PROVE DEFECTIVE, YOU ASSUME |
| | | THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION. |
| | | |
| | | 16. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN |
| | | WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY |
| | | AND/OR REDISTRIBUTE THE LIBRARY 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 |
| | | LIBRARY (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 LIBRARY TO OPERATE WITH ANY OTHER SOFTWARE), EVEN IF |
| | | SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH |
| | | DAMAGES. |
| | | |
| | | END OF TERMS AND CONDITIONS |
| | | |
| | | How to Apply These Terms to Your New Libraries |
| | | |
| | | If you develop a new library, and you want it to be of the greatest |
| | | possible use to the public, we recommend making it free software that |
| | | everyone can redistribute and change. You can do so by permitting |
| | | redistribution under these terms (or, alternatively, under the terms of the |
| | | ordinary General Public License). |
| | | |
| | | To apply these terms, attach the following notices to the library. It is |
| | | safest to attach them to the start of each source file to most effectively |
| | | convey 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 library's name and a brief idea of what it does.> |
| | | Copyright (C) <year> <name of author> |
| | | |
| | | This library is free software; you can redistribute it and/or |
| | | modify it under the terms of the GNU Lesser General Public |
| | | License as published by the Free Software Foundation; either |
| | | version 2.1 of the License, or (at your option) any later version. |
| | | |
| | | This library is distributed in the hope that it will be useful, |
| | | but WITHOUT ANY WARRANTY; without even the implied warranty of |
| | | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU |
| | | Lesser General Public License for more details. |
| | | |
| | | You should have received a copy of the GNU Lesser General Public |
| | | License along with this library; if not, write to the Free Software |
| | | Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA |
| | | |
| | | Also add information on how to contact you by electronic and paper mail. |
| | | |
| | | You should also get your employer (if you work as a programmer) or your |
| | | school, if any, to sign a "copyright disclaimer" for the library, if |
| | | necessary. Here is a sample; alter the names: |
| | | |
| | | Yoyodyne, Inc., hereby disclaims all copyright interest in the |
| | | library `Frob' (a library for tweaking knobs) written by James Random Hacker. |
| | | |
| | | <signature of Ty Coon>, 1 April 1990 |
| | | Ty Coon, President of Vice |
| | | |
| | | That's all there is to it! |
| | | |
| | | |
| | | GNU LESSER GENERAL PUBLIC LICENSE
|
| | | Version 2.1, February 1999
|
| | |
|
| | | Copyright (C) 1991, 1999 Free Software Foundation, Inc.
|
| | | 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
|
| | | Everyone is permitted to copy and distribute verbatim copies
|
| | | of this license document, but changing it is not allowed.
|
| | |
|
| | | [This is the first released version of the Lesser GPL. It also counts
|
| | | as the successor of the GNU Library Public License, version 2, hence
|
| | | the version number 2.1.]
|
| | |
|
| | | Preamble
|
| | |
|
| | | The licenses for most software are designed to take away your
|
| | | freedom to share and change it. By contrast, the GNU General Public
|
| | | Licenses are intended to guarantee your freedom to share and change
|
| | | free software--to make sure the software is free for all its users.
|
| | |
|
| | | This license, the Lesser General Public License, applies to some
|
| | | specially designated software packages--typically libraries--of the
|
| | | Free Software Foundation and other authors who decide to use it. You
|
| | | can use it too, but we suggest you first think carefully about whether
|
| | | this license or the ordinary General Public License is the better
|
| | | strategy to use in any particular case, based on the explanations below.
|
| | |
|
| | | When we speak of free software, we are referring to freedom of use,
|
| | | 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 this service if you wish); that you receive source code or can get
|
| | | it if you want it; that you can change the software and use pieces of
|
| | | it in new free programs; and that you are informed that you can do
|
| | | these things.
|
| | |
|
| | | To protect your rights, we need to make restrictions that forbid
|
| | | distributors to deny you these rights or to ask you to surrender these
|
| | | rights. These restrictions translate to certain responsibilities for
|
| | | you if you distribute copies of the library or if you modify it.
|
| | |
|
| | | For example, if you distribute copies of the library, whether gratis
|
| | | or for a fee, you must give the recipients all the rights that we gave
|
| | | you. You must make sure that they, too, receive or can get the source
|
| | | code. If you link other code with the library, you must provide
|
| | | complete object files to the recipients, so that they can relink them
|
| | | with the library after making changes to the library and recompiling
|
| | | it. And you must show them these terms so they know their rights.
|
| | |
|
| | | We protect your rights with a two-step method: (1) we copyright the
|
| | | library, and (2) we offer you this license, which gives you legal
|
| | | permission to copy, distribute and/or modify the library.
|
| | |
|
| | | To protect each distributor, we want to make it very clear that
|
| | | there is no warranty for the free library. Also, if the library is
|
| | | modified by someone else and passed on, the recipients should know
|
| | | that what they have is not the original version, so that the original
|
| | | author's reputation will not be affected by problems that might be
|
| | | introduced by others.
|
| | |
|
| | | Finally, software patents pose a constant threat to the existence of
|
| | | any free program. We wish to make sure that a company cannot
|
| | | effectively restrict the users of a free program by obtaining a
|
| | | restrictive license from a patent holder. Therefore, we insist that
|
| | | any patent license obtained for a version of the library must be
|
| | | consistent with the full freedom of use specified in this license.
|
| | |
|
| | | Most GNU software, including some libraries, is covered by the
|
| | | ordinary GNU General Public License. This license, the GNU Lesser
|
| | | General Public License, applies to certain designated libraries, and
|
| | | is quite different from the ordinary General Public License. We use
|
| | | this license for certain libraries in order to permit linking those
|
| | | libraries into non-free programs.
|
| | |
|
| | | When a program is linked with a library, whether statically or using
|
| | | a shared library, the combination of the two is legally speaking a
|
| | | combined work, a derivative of the original library. The ordinary
|
| | | General Public License therefore permits such linking only if the
|
| | | entire combination fits its criteria of freedom. The Lesser General
|
| | | Public License permits more lax criteria for linking other code with
|
| | | the library.
|
| | |
|
| | | We call this license the "Lesser" General Public License because it
|
| | | does Less to protect the user's freedom than the ordinary General
|
| | | Public License. It also provides other free software developers Less
|
| | | of an advantage over competing non-free programs. These disadvantages
|
| | | are the reason we use the ordinary General Public License for many
|
| | | libraries. However, the Lesser license provides advantages in certain
|
| | | special circumstances.
|
| | |
|
| | | For example, on rare occasions, there may be a special need to
|
| | | encourage the widest possible use of a certain library, so that it becomes
|
| | | a de-facto standard. To achieve this, non-free programs must be
|
| | | allowed to use the library. A more frequent case is that a free
|
| | | library does the same job as widely used non-free libraries. In this
|
| | | case, there is little to gain by limiting the free library to free
|
| | | software only, so we use the Lesser General Public License.
|
| | |
|
| | | In other cases, permission to use a particular library in non-free
|
| | | programs enables a greater number of people to use a large body of
|
| | | free software. For example, permission to use the GNU C Library in
|
| | | non-free programs enables many more people to use the whole GNU
|
| | | operating system, as well as its variant, the GNU/Linux operating
|
| | | system.
|
| | |
|
| | | Although the Lesser General Public License is Less protective of the
|
| | | users' freedom, it does ensure that the user of a program that is
|
| | | linked with the Library has the freedom and the wherewithal to run
|
| | | that program using a modified version of the Library.
|
| | |
|
| | | The precise terms and conditions for copying, distribution and
|
| | | modification follow. Pay close attention to the difference between a
|
| | | "work based on the library" and a "work that uses the library". The
|
| | | former contains code derived from the library, whereas the latter must
|
| | | be combined with the library in order to run.
|
| | |
|
| | | GNU LESSER GENERAL PUBLIC LICENSE
|
| | | TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
|
| | |
|
| | | 0. This License Agreement applies to any software library or other
|
| | | program which contains a notice placed by the copyright holder or
|
| | | other authorized party saying it may be distributed under the terms of
|
| | | this Lesser General Public License (also called "this License").
|
| | | Each licensee is addressed as "you".
|
| | |
|
| | | A "library" means a collection of software functions and/or data
|
| | | prepared so as to be conveniently linked with application programs
|
| | | (which use some of those functions and data) to form executables.
|
| | |
|
| | | The "Library", below, refers to any such software library or work
|
| | | which has been distributed under these terms. A "work based on the
|
| | | Library" means either the Library or any derivative work under
|
| | | copyright law: that is to say, a work containing the Library or a
|
| | | portion of it, either verbatim or with modifications and/or translated
|
| | | straightforwardly into another language. (Hereinafter, translation is
|
| | | included without limitation in the term "modification".)
|
| | |
|
| | | "Source code" for a work means the preferred form of the work for
|
| | | making modifications to it. For a library, complete source code means
|
| | | all the source code for all modules it contains, plus any associated
|
| | | interface definition files, plus the scripts used to control compilation
|
| | | and installation of the library.
|
| | |
|
| | | Activities other than copying, distribution and modification are not
|
| | | covered by this License; they are outside its scope. The act of
|
| | | running a program using the Library is not restricted, and output from
|
| | | such a program is covered only if its contents constitute a work based
|
| | | on the Library (independent of the use of the Library in a tool for
|
| | | writing it). Whether that is true depends on what the Library does
|
| | | and what the program that uses the Library does.
|
| | | |
| | | 1. You may copy and distribute verbatim copies of the Library's
|
| | | complete source code as you receive it, in any medium, provided that
|
| | | you conspicuously and appropriately publish on each copy an
|
| | | appropriate copyright notice and disclaimer of warranty; keep intact
|
| | | all the notices that refer to this License and to the absence of any
|
| | | warranty; and distribute a copy of this License along with the
|
| | | Library.
|
| | |
|
| | | You may charge a fee for the physical act of transferring a copy,
|
| | | and you may at your option offer warranty protection in exchange for a
|
| | | fee.
|
| | |
|
| | | 2. You may modify your copy or copies of the Library or any portion
|
| | | of it, thus forming a work based on the Library, and copy and
|
| | | distribute such modifications or work under the terms of Section 1
|
| | | above, provided that you also meet all of these conditions:
|
| | |
|
| | | a) The modified work must itself be a software library.
|
| | |
|
| | | b) You must cause the files modified to carry prominent notices
|
| | | stating that you changed the files and the date of any change.
|
| | |
|
| | | c) You must cause the whole of the work to be licensed at no
|
| | | charge to all third parties under the terms of this License.
|
| | |
|
| | | d) If a facility in the modified Library refers to a function or a
|
| | | table of data to be supplied by an application program that uses
|
| | | the facility, other than as an argument passed when the facility
|
| | | is invoked, then you must make a good faith effort to ensure that,
|
| | | in the event an application does not supply such function or
|
| | | table, the facility still operates, and performs whatever part of
|
| | | its purpose remains meaningful.
|
| | |
|
| | | (For example, a function in a library to compute square roots has
|
| | | a purpose that is entirely well-defined independent of the
|
| | | application. Therefore, Subsection 2d requires that any
|
| | | application-supplied function or table used by this function must
|
| | | be optional: if the application does not supply it, the square
|
| | | root function must still compute square roots.)
|
| | |
|
| | | These requirements apply to the modified work as a whole. If
|
| | | identifiable sections of that work are not derived from the Library,
|
| | | and can be reasonably considered independent and separate works in
|
| | | themselves, then this License, and its terms, do not apply to those
|
| | | sections when you distribute them as separate works. But when you
|
| | | distribute the same sections as part of a whole which is a work based
|
| | | on the Library, the distribution of the whole must be on the terms of
|
| | | this License, whose permissions for other licensees extend to the
|
| | | entire whole, and thus to each and every part regardless of who wrote
|
| | | it.
|
| | |
|
| | | Thus, it is not the intent of this section to claim rights or contest
|
| | | your rights to work written entirely by you; rather, the intent is to
|
| | | exercise the right to control the distribution of derivative or
|
| | | collective works based on the Library.
|
| | |
|
| | | In addition, mere aggregation of another work not based on the Library
|
| | | with the Library (or with a work based on the Library) on a volume of
|
| | | a storage or distribution medium does not bring the other work under
|
| | | the scope of this License.
|
| | |
|
| | | 3. You may opt to apply the terms of the ordinary GNU General Public
|
| | | License instead of this License to a given copy of the Library. To do
|
| | | this, you must alter all the notices that refer to this License, so
|
| | | that they refer to the ordinary GNU General Public License, version 2,
|
| | | instead of to this License. (If a newer version than version 2 of the
|
| | | ordinary GNU General Public License has appeared, then you can specify
|
| | | that version instead if you wish.) Do not make any other change in
|
| | | these notices.
|
| | |
|
| | | Once this change is made in a given copy, it is irreversible for
|
| | | that copy, so the ordinary GNU General Public License applies to all
|
| | | subsequent copies and derivative works made from that copy.
|
| | |
|
| | | This option is useful when you wish to copy part of the code of
|
| | | the Library into a program that is not a library.
|
| | |
|
| | | 4. You may copy and distribute the Library (or a portion or
|
| | | derivative of it, under Section 2) in object code or executable form
|
| | | under the terms of Sections 1 and 2 above provided that you accompany
|
| | | it with the complete corresponding machine-readable source code, which
|
| | | must be distributed under the terms of Sections 1 and 2 above on a
|
| | | medium customarily used for software interchange.
|
| | |
|
| | | If distribution of object code is made by offering access to copy
|
| | | from a designated place, then offering equivalent access to copy the
|
| | | source code from the same place satisfies the requirement to
|
| | | distribute the source code, even though third parties are not
|
| | | compelled to copy the source along with the object code.
|
| | |
|
| | | 5. A program that contains no derivative of any portion of the
|
| | | Library, but is designed to work with the Library by being compiled or
|
| | | linked with it, is called a "work that uses the Library". Such a
|
| | | work, in isolation, is not a derivative work of the Library, and
|
| | | therefore falls outside the scope of this License.
|
| | |
|
| | | However, linking a "work that uses the Library" with the Library
|
| | | creates an executable that is a derivative of the Library (because it
|
| | | contains portions of the Library), rather than a "work that uses the
|
| | | library". The executable is therefore covered by this License.
|
| | | Section 6 states terms for distribution of such executables.
|
| | |
|
| | | When a "work that uses the Library" uses material from a header file
|
| | | that is part of the Library, the object code for the work may be a
|
| | | derivative work of the Library even though the source code is not.
|
| | | Whether this is true is especially significant if the work can be
|
| | | linked without the Library, or if the work is itself a library. The
|
| | | threshold for this to be true is not precisely defined by law.
|
| | |
|
| | | If such an object file uses only numerical parameters, data
|
| | | structure layouts and accessors, and small macros and small inline
|
| | | functions (ten lines or less in length), then the use of the object
|
| | | file is unrestricted, regardless of whether it is legally a derivative
|
| | | work. (Executables containing this object code plus portions of the
|
| | | Library will still fall under Section 6.)
|
| | |
|
| | | Otherwise, if the work is a derivative of the Library, you may
|
| | | distribute the object code for the work under the terms of Section 6.
|
| | | Any executables containing that work also fall under Section 6,
|
| | | whether or not they are linked directly with the Library itself.
|
| | |
|
| | | 6. As an exception to the Sections above, you may also combine or
|
| | | link a "work that uses the Library" with the Library to produce a
|
| | | work containing portions of the Library, and distribute that work
|
| | | under terms of your choice, provided that the terms permit
|
| | | modification of the work for the customer's own use and reverse
|
| | | engineering for debugging such modifications.
|
| | |
|
| | | You must give prominent notice with each copy of the work that the
|
| | | Library is used in it and that the Library and its use are covered by
|
| | | this License. You must supply a copy of this License. If the work
|
| | | during execution displays copyright notices, you must include the
|
| | | copyright notice for the Library among them, as well as a reference
|
| | | directing the user to the copy of this License. Also, you must do one
|
| | | of these things:
|
| | |
|
| | | a) Accompany the work with the complete corresponding
|
| | | machine-readable source code for the Library including whatever
|
| | | changes were used in the work (which must be distributed under
|
| | | Sections 1 and 2 above); and, if the work is an executable linked
|
| | | with the Library, with the complete machine-readable "work that
|
| | | uses the Library", as object code and/or source code, so that the
|
| | | user can modify the Library and then relink to produce a modified
|
| | | executable containing the modified Library. (It is understood
|
| | | that the user who changes the contents of definitions files in the
|
| | | Library will not necessarily be able to recompile the application
|
| | | to use the modified definitions.)
|
| | |
|
| | | b) Use a suitable shared library mechanism for linking with the
|
| | | Library. A suitable mechanism is one that (1) uses at run time a
|
| | | copy of the library already present on the user's computer system,
|
| | | rather than copying library functions into the executable, and (2)
|
| | | will operate properly with a modified version of the library, if
|
| | | the user installs one, as long as the modified version is
|
| | | interface-compatible with the version that the work was made with.
|
| | |
|
| | | c) Accompany the work with a written offer, valid for at
|
| | | least three years, to give the same user the materials
|
| | | specified in Subsection 6a, above, for a charge no more
|
| | | than the cost of performing this distribution.
|
| | |
|
| | | d) If distribution of the work is made by offering access to copy
|
| | | from a designated place, offer equivalent access to copy the above
|
| | | specified materials from the same place.
|
| | |
|
| | | e) Verify that the user has already received a copy of these
|
| | | materials or that you have already sent this user a copy.
|
| | |
|
| | | For an executable, the required form of the "work that uses the
|
| | | Library" must include any data and utility programs needed for
|
| | | reproducing the executable from it. However, as a special exception,
|
| | | the materials to be distributed need not include anything that is
|
| | | normally distributed (in either source or binary form) with the major
|
| | | components (compiler, kernel, and so on) of the operating system on
|
| | | which the executable runs, unless that component itself accompanies
|
| | | the executable.
|
| | |
|
| | | It may happen that this requirement contradicts the license
|
| | | restrictions of other proprietary libraries that do not normally
|
| | | accompany the operating system. Such a contradiction means you cannot
|
| | | use both them and the Library together in an executable that you
|
| | | distribute.
|
| | |
|
| | | 7. You may place library facilities that are a work based on the
|
| | | Library side-by-side in a single library together with other library
|
| | | facilities not covered by this License, and distribute such a combined
|
| | | library, provided that the separate distribution of the work based on
|
| | | the Library and of the other library facilities is otherwise
|
| | | permitted, and provided that you do these two things:
|
| | |
|
| | | a) Accompany the combined library with a copy of the same work
|
| | | based on the Library, uncombined with any other library
|
| | | facilities. This must be distributed under the terms of the
|
| | | Sections above.
|
| | |
|
| | | b) Give prominent notice with the combined library of the fact
|
| | | that part of it is a work based on the Library, and explaining
|
| | | where to find the accompanying uncombined form of the same work.
|
| | |
|
| | | 8. You may not copy, modify, sublicense, link with, or distribute
|
| | | the Library except as expressly provided under this License. Any
|
| | | attempt otherwise to copy, modify, sublicense, link with, or
|
| | | distribute the Library is void, and will automatically terminate your
|
| | | rights under this License. However, parties who have received copies,
|
| | | or rights, from you under this License will not have their licenses
|
| | | terminated so long as such parties remain in full compliance.
|
| | |
|
| | | 9. You are not required to accept this License, since you have not
|
| | | signed it. However, nothing else grants you permission to modify or
|
| | | distribute the Library or its derivative works. These actions are
|
| | | prohibited by law if you do not accept this License. Therefore, by
|
| | | modifying or distributing the Library (or any work based on the
|
| | | Library), you indicate your acceptance of this License to do so, and
|
| | | all its terms and conditions for copying, distributing or modifying
|
| | | the Library or works based on it.
|
| | |
|
| | | 10. Each time you redistribute the Library (or any work based on the
|
| | | Library), the recipient automatically receives a license from the
|
| | | original licensor to copy, distribute, link with or modify the Library
|
| | | subject to these terms and conditions. You may not impose any further
|
| | | restrictions on the recipients' exercise of the rights granted herein.
|
| | | You are not responsible for enforcing compliance by third parties with
|
| | | this License.
|
| | |
|
| | | 11. If, as a consequence of a court judgment or allegation of patent
|
| | | infringement or for any other reason (not limited to patent issues),
|
| | | 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
|
| | | distribute so as to satisfy simultaneously your obligations under this
|
| | | License and any other pertinent obligations, then as a consequence you
|
| | | may not distribute the Library at all. For example, if a patent
|
| | | license would not permit royalty-free redistribution of the Library by
|
| | | all those who receive copies directly or indirectly through you, then
|
| | | the only way you could satisfy both it and this License would be to
|
| | | refrain entirely from distribution of the Library.
|
| | |
|
| | | If any portion of this section is held invalid or unenforceable under any
|
| | | particular circumstance, the balance of the section is intended to apply,
|
| | | and the section as a whole is intended to apply in other circumstances.
|
| | |
|
| | | It is not the purpose of this section to induce you to infringe any
|
| | | patents or other property right claims or to contest validity of any
|
| | | such claims; this section has the sole purpose of protecting the
|
| | | integrity of the free software distribution system which is
|
| | | implemented by public license practices. Many people have made
|
| | | generous contributions to the wide range of software distributed
|
| | | through that system in reliance on consistent application of that
|
| | | system; it is up to the author/donor to decide if he or she is willing
|
| | | to distribute software through any other system and a licensee cannot
|
| | | impose that choice.
|
| | |
|
| | | This section is intended to make thoroughly clear what is believed to
|
| | | be a consequence of the rest of this License.
|
| | |
|
| | | 12. If the distribution and/or use of the Library is restricted in
|
| | | certain countries either by patents or by copyrighted interfaces, the
|
| | | original copyright holder who places the Library under this License may add
|
| | | an explicit geographical distribution limitation excluding those countries,
|
| | | so that distribution is permitted only in or among countries not thus
|
| | | excluded. In such case, this License incorporates the limitation as if
|
| | | written in the body of this License.
|
| | |
|
| | | 13. The Free Software Foundation may publish revised and/or new
|
| | | versions of the Lesser 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 Library
|
| | | specifies a version number of this License which applies to it and
|
| | | "any later version", you have the option of following the terms and
|
| | | conditions either of that version or of any later version published by
|
| | | the Free Software Foundation. If the Library does not specify a
|
| | | license version number, you may choose any version ever published by
|
| | | the Free Software Foundation.
|
| | |
|
| | | 14. If you wish to incorporate parts of the Library into other free
|
| | | programs whose distribution conditions are incompatible with these,
|
| | | write to the author to ask for permission. For software which is
|
| | | copyrighted by the Free Software Foundation, write to the Free
|
| | | Software Foundation; we sometimes make exceptions for this. Our
|
| | | decision will be guided by the two goals of preserving the free status
|
| | | of all derivatives of our free software and of promoting the sharing
|
| | | and reuse of software generally.
|
| | |
|
| | | NO WARRANTY
|
| | |
|
| | | 15. BECAUSE THE LIBRARY IS LICENSED FREE OF CHARGE, THERE IS NO
|
| | | WARRANTY FOR THE LIBRARY, TO THE EXTENT PERMITTED BY APPLICABLE LAW.
|
| | | EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR
|
| | | OTHER PARTIES PROVIDE THE LIBRARY "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
|
| | | LIBRARY IS WITH YOU. SHOULD THE LIBRARY PROVE DEFECTIVE, YOU ASSUME
|
| | | THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
|
| | |
|
| | | 16. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN
|
| | | WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY
|
| | | AND/OR REDISTRIBUTE THE LIBRARY 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
|
| | | LIBRARY (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 LIBRARY TO OPERATE WITH ANY OTHER SOFTWARE), EVEN IF
|
| | | SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH
|
| | | DAMAGES.
|
| | |
|
| | | END OF TERMS AND CONDITIONS
|
| | |
|
| | | How to Apply These Terms to Your New Libraries
|
| | |
|
| | | If you develop a new library, and you want it to be of the greatest
|
| | | possible use to the public, we recommend making it free software that
|
| | | everyone can redistribute and change. You can do so by permitting
|
| | | redistribution under these terms (or, alternatively, under the terms of the
|
| | | ordinary General Public License).
|
| | |
|
| | | To apply these terms, attach the following notices to the library. It is
|
| | | safest to attach them to the start of each source file to most effectively
|
| | | convey 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 library's name and a brief idea of what it does.>
|
| | | Copyright (C) <year> <name of author>
|
| | |
|
| | | This library is free software; you can redistribute it and/or
|
| | | modify it under the terms of the GNU Lesser General Public
|
| | | License as published by the Free Software Foundation; either
|
| | | version 2.1 of the License, or (at your option) any later version.
|
| | |
|
| | | This library is distributed in the hope that it will be useful,
|
| | | but WITHOUT ANY WARRANTY; without even the implied warranty of
|
| | | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
| | | Lesser General Public License for more details.
|
| | |
|
| | | You should have received a copy of the GNU Lesser General Public
|
| | | License along with this library; if not, write to the Free Software
|
| | | Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
|
| | |
|
| | | Also add information on how to contact you by electronic and paper mail.
|
| | |
|
| | | You should also get your employer (if you work as a programmer) or your
|
| | | school, if any, to sign a "copyright disclaimer" for the library, if
|
| | | necessary. Here is a sample; alter the names:
|
| | |
|
| | | Yoyodyne, Inc., hereby disclaims all copyright interest in the
|
| | | library `Frob' (a library for tweaking knobs) written by James Random Hacker.
|
| | |
|
| | | <signature of Ty Coon>, 1 April 1990
|
| | | Ty Coon, President of Vice
|
| | |
|
| | | That's all there is to it!
|
| | |
|
| | |
|
New file |
| | |
| | | (function(){var DOM=tinymce.DOM,Event=tinymce.dom.Event,each=tinymce.each,is=tinymce.is;tinymce.create('tinymce.plugins.Compat2x',{getInfo:function(){return{longname:'Compat2x',author:'Moxiecode Systems AB',authorurl:'http://tinymce.moxiecode.com',infourl:'http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/compat2x',version:tinyMCE.majorVersion+"."+tinyMCE.minorVersion};}});(function(){tinymce.extend(tinyMCE,{addToLang:function(p,l){each(l,function(v,k){tinyMCE.i18n[(tinyMCE.settings.language||'en')+'.'+(p?p+'_':'')+k]=v;});},getInstanceById:function(n){return this.get(n);}});})();(function(){var EditorManager=tinymce.EditorManager;tinyMCE.instances={};tinyMCE.plugins={};tinymce.PluginManager.onAdd.add(function(pm,n,p){tinyMCE.plugins[n]=p;});tinyMCE.majorVersion=tinymce.majorVersion;tinyMCE.minorVersion=tinymce.minorVersion;tinyMCE.releaseDate=tinymce.releaseDate;tinyMCE.baseURL=tinymce.baseURL;tinyMCE.isIE=tinyMCE.isMSIE=tinymce.isIE||tinymce.isOpera;tinyMCE.isMSIE5=tinymce.isIE;tinyMCE.isMSIE5_0=tinymce.isIE;tinyMCE.isMSIE7=tinymce.isIE;tinyMCE.isGecko=tinymce.isGecko;tinyMCE.isSafari=tinymce.isWebKit;tinyMCE.isOpera=tinymce.isOpera;tinyMCE.isMac=false;tinyMCE.isNS7=false;tinyMCE.isNS71=false;tinyMCE.compat=true;TinyMCE_Engine=tinyMCE;tinymce.extend(tinyMCE,{getParam:function(n,dv){return this.activeEditor.getParam(n,dv);},addEvent:function(e,na,f,sc){tinymce.dom.Event.add(e,na,f,sc||this);},getControlHTML:function(n){return EditorManager.activeEditor.controlManager.createControl(n);},loadCSS:function(u){tinymce.DOM.loadCSS(u);},importCSS:function(doc,u){if(doc==document)this.loadCSS(u);else new tinymce.dom.DOMUtils(doc).loadCSS(u);},log:function(){console.debug.apply(console,arguments);},getLang:function(n,dv){var v=EditorManager.activeEditor.getLang(n.replace(/^lang_/g,''),dv);if(/^[0-9\-.]+$/g.test(v))return parseInt(v);return v;},isInstance:function(o){return o!=null&&typeof(o)=="object"&&o.execCommand;},triggerNodeChange:function(){EditorManager.activeEditor.nodeChanged();},regexpReplace:function(in_str,reg_exp,replace_str,opts){var re;if(in_str==null)return in_str;if(typeof(opts)=="undefined")opts='g';re=new RegExp(reg_exp,opts);return in_str.replace(re,replace_str);},trim:function(s){return tinymce.trim(s);},xmlEncode:function(s){return tinymce.DOM.encode(s);},explode:function(s,d){var o=[];tinymce.each(s.split(d),function(v){if(v!='')o.push(v);});return o;},switchClass:function(id,cls){var b;if(/^mceButton/.test(cls)){b=EditorManager.activeEditor.controlManager.get(id);if(!b)return;switch(cls){case"mceButtonNormal":b.setDisabled(false);b.setActive(false);return;case"mceButtonDisabled":b.setDisabled(true);return;case"mceButtonSelected":b.setActive(true);b.setDisabled(false);return;}}},addCSSClass:function(e,n,b){return tinymce.DOM.addClass(e,n,b);},hasCSSClass:function(e,n){return tinymce.DOM.hasClass(e,n);},removeCSSClass:function(e,n){return tinymce.DOM.removeClass(e,n);},getCSSClasses:function(){var cl=EditorManager.activeEditor.dom.getClasses(),o=[];each(cl,function(c){o.push(c['class']);});return o;},setWindowArg:function(n,v){EditorManager.activeEditor.windowManager.params[n]=v;},getWindowArg:function(n,dv){var wm=EditorManager.activeEditor.windowManager,v;v=wm.getParam(n);if(v==='')return'';return v||wm.getFeature(n)||dv;},getParentNode:function(n,f){return this._getDOM().getParent(n,f);},selectElements:function(n,na,f){var i,a=[],nl,x;for(x=0,na=na.split(',');x<na.length;x++)for(i=0,nl=n.getElementsByTagName(na[x]);i<nl.length;i++)(!f||f(nl[i]))&&a.push(nl[i]);return a;},getNodeTree:function(n,na,t,nn){return this.selectNodes(n,function(n){return(!t||n.nodeType==t)&&(!nn||n.nodeName==nn);},na?na:[]);},getAttrib:function(e,n,dv){return this._getDOM().getAttrib(e,n,dv);},setAttrib:function(e,n,v){return this._getDOM().setAttrib(e,n,v);},getElementsByAttributeValue:function(n,e,a,v){var i,nl=n.getElementsByTagName(e),o=[];for(i=0;i<nl.length;i++){if(tinyMCE.getAttrib(nl[i],a).indexOf(v)!=-1)o[o.length]=nl[i];}return o;},selectNodes:function(n,f,a){var i;if(!a)a=[];if(f(n))a[a.length]=n;if(n.hasChildNodes()){for(i=0;i<n.childNodes.length;i++)tinyMCE.selectNodes(n.childNodes[i],f,a);}return a;},getContent:function(){return EditorManager.activeEditor.getContent();},getParentElement:function(n,na,f){if(na)na=new RegExp('^('+na.toUpperCase().replace(/,/g,'|')+')$','g');return this._getDOM().getParent(n,function(n){return n.nodeType==1&&(!na||na.test(n.nodeName))&&(!f||f(n));},this.activeEditor.getBody());},importPluginLanguagePack:function(n){tinymce.PluginManager.requireLangPack(n);},getButtonHTML:function(cn,lang,img,c,u,v){var ed=EditorManager.activeEditor;img=img.replace(/\{\$pluginurl\}/g,tinyMCE.pluginURL);img=img.replace(/\{\$themeurl\}/g,tinyMCE.themeURL);lang=lang.replace(/^lang_/g,'');return ed.controlManager.createButton(cn,{title:lang,command:c,ui:u,value:v,scope:this,'class':'compat',image:img});},addSelectAccessibility:function(e,s,w){if(!s._isAccessible){s.onkeydown=tinyMCE.accessibleEventHandler;s.onblur=tinyMCE.accessibleEventHandler;s._isAccessible=true;s._win=w;}return false;},accessibleEventHandler:function(e){var elm,win=this._win;e=tinymce.isIE?win.event:e;elm=tinymce.isIE?e.srcElement:e.target;if(e.type=="blur"){if(elm.oldonchange){elm.onchange=elm.oldonchange;elm.oldonchange=null;}return true;}if(elm.nodeName=="SELECT"&&!elm.oldonchange){elm.oldonchange=elm.onchange;elm.onchange=null;}if(e.keyCode==13||e.keyCode==32){elm.onchange=elm.oldonchange;elm.onchange();elm.oldonchange=null;tinyMCE.cancelEvent(e);return false;}return true;},cancelEvent:function(e){return tinymce.dom.Event.cancel(e);},handleVisualAid:function(e){EditorManager.activeEditor.addVisual(e);},getAbsPosition:function(n,r){return tinymce.DOM.getPos(n,r);},cleanupEventStr:function(s){s=""+s;s=s.replace('function anonymous()\n{\n','');s=s.replace('\n}','');s=s.replace(/^return true;/gi,'');return s;},getVisualAidClass:function(s){return s;},parseStyle:function(s){return this._getDOM().parseStyle(s);},serializeStyle:function(s){return this._getDOM().serializeStyle(s);},openWindow:function(tpl,args){var ed=EditorManager.activeEditor,o={},n;for(n in tpl)o[n]=tpl[n];tpl=o;args=args||{};tpl.url=new tinymce.util.URI(tinymce.ThemeManager.themeURLs[ed.settings.theme]).toAbsolute(tpl.file);tpl.inline=tpl.inline||args.inline;ed.windowManager.open(tpl,args);},closeWindow:function(win){EditorManager.activeEditor.windowManager.close(win);},getOuterHTML:function(e){return tinymce.DOM.getOuterHTML(e);},setOuterHTML:function(e,h,d){return tinymce.DOM.setOuterHTML(e,h,d);},hasPlugin:function(n){return tinymce.PluginManager.get(n)!=null;},_setEventsEnabled:function(){},addPlugin:function(pn,f){var t=this;function PluginWrapper(ed){tinyMCE.selectedInstance=ed;ed.onInit.add(function(){t.settings=ed.settings;t.settings['base_href']=tinyMCE.documentBasePath;tinyMCE.settings=t.settings;tinyMCE.documentBasePath=ed.documentBasePath;if(f.initInstance)f.initInstance(ed);ed.contentDocument=ed.getDoc();ed.contentWindow=ed.getWin();ed.undoRedo=ed.undoManager;ed.startContent=ed.getContent({format:'raw'});tinyMCE.instances[ed.id]=ed;tinyMCE.loadedFiles=[];});ed.onActivate.add(function(){tinyMCE.settings=ed.settings;tinyMCE.selectedInstance=ed;});if(f.handleNodeChange){ed.onNodeChange.add(function(ed,cm,n){f.handleNodeChange(ed.id,n,0,0,false,!ed.selection.isCollapsed());});}if(f.onChange){ed.onChange.add(function(ed,n){return f.onChange(ed);});}if(f.cleanup){ed.onGetContent.add(function(){});}this.getInfo=function(){return f.getInfo();};this.createControl=function(n){tinyMCE.pluginURL=tinymce.baseURL+'/plugins/'+pn;tinyMCE.themeURL=tinymce.baseURL+'/themes/'+tinyMCE.activeEditor.settings.theme;if(f.getControlHTML)return f.getControlHTML(n);return null;};this.execCommand=function(cmd,ui,val){if(f.execCommand)return f.execCommand(ed.id,ed.getBody(),cmd,ui,val);return false;};};tinymce.PluginManager.add(pn,PluginWrapper);},_getDOM:function(){return tinyMCE.activeEditor?tinyMCE.activeEditor.dom:tinymce.DOM;},convertRelativeToAbsoluteURL:function(b,u){return new tinymce.util.URI(b).toAbsolute(u);},convertAbsoluteURLToRelativeURL:function(b,u){return new tinymce.util.URI(b).toRelative(u);}});tinymce.extend(tinymce.Editor.prototype,{getFocusElement:function(){return this.selection.getNode();},getData:function(n){if(!this.data)this.data=[];if(!this.data[n])this.data[n]=[];return this.data[n];},hasPlugin:function(n){return this.plugins[n]!=null;},getContainerWin:function(){return window;},getHTML:function(raw){return this.getContent({format:raw?'raw':'html'});},setHTML:function(h){this.setContent(h);},getSel:function(){return this.selection.getSel();},getRng:function(){return this.selection.getRng();},isHidden:function(){var s;if(!tinymce.isGecko)return false;s=this.getSel();return(!s||!s.rangeCount||s.rangeCount==0);},translate:function(s){var c=this.settings.language,o;o=tinymce.EditorManager.i18n[c+'.'+s]||s.replace(/{\#([^}]+)\}/g,function(a,b){return tinymce.EditorManager.i18n[c+'.'+b]||'{#'+b+'}';});o=o.replace(/{\$lang_([^}]+)\}/g,function(a,b){return tinymce.EditorManager.i18n[c+'.'+b]||'{$lang_'+b+'}';});return o;},repaint:function(){this.execCommand('mceRepaint');}});tinymce.extend(tinymce.dom.Selection.prototype,{getSelectedText:function(){return this.getContent({format:'text'});},getSelectedHTML:function(){return this.getContent({format:'html'});},getFocusElement:function(){return this.getNode();},selectNode:function(node,collapse,select_text_node,to_start){var t=this;t.select(node,select_text_node||0);if(!is(collapse))collapse=true;if(collapse){if(!is(to_start))to_start=true;t.collapse(to_start);}}});}).call(this);tinymce.PluginManager.add('compat2x',tinymce.plugins.Compat2x);})(); |
New file |
| | |
| | | /**
|
| | | * $Id: editor_plugin_src.js 264 2007-04-26 20:53:09Z spocke $
|
| | | *
|
| | | * @author Moxiecode
|
| | | * @copyright Copyright © 2004-2008, Moxiecode Systems AB, All rights reserved.
|
| | | */
|
| | |
|
| | | (function() {
|
| | | var DOM = tinymce.DOM, Event = tinymce.dom.Event, each = tinymce.each, is = tinymce.is;
|
| | |
|
| | | tinymce.create('tinymce.plugins.Compat2x', {
|
| | | getInfo : function() {
|
| | | return {
|
| | | longname : 'Compat2x',
|
| | | author : 'Moxiecode Systems AB',
|
| | | authorurl : 'http://tinymce.moxiecode.com',
|
| | | infourl : 'http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/compat2x',
|
| | | version : tinyMCE.majorVersion + "." + tinyMCE.minorVersion
|
| | | };
|
| | | }
|
| | | });
|
| | |
|
| | | (function() {
|
| | | // Extend tinyMCE/EditorManager
|
| | | tinymce.extend(tinyMCE, {
|
| | | addToLang : function(p, l) {
|
| | | each(l, function(v, k) {
|
| | | tinyMCE.i18n[(tinyMCE.settings.language || 'en') + '.' + (p ? p + '_' : '') + k] = v;
|
| | | });
|
| | | },
|
| | |
|
| | | getInstanceById : function(n) {
|
| | | return this.get(n);
|
| | | }
|
| | | });
|
| | | })();
|
| | |
|
| | | (function() {
|
| | | var EditorManager = tinymce.EditorManager;
|
| | |
|
| | | tinyMCE.instances = {};
|
| | | tinyMCE.plugins = {};
|
| | | tinymce.PluginManager.onAdd.add(function(pm, n, p) {
|
| | | tinyMCE.plugins[n] = p;
|
| | | });
|
| | |
|
| | | tinyMCE.majorVersion = tinymce.majorVersion;
|
| | | tinyMCE.minorVersion = tinymce.minorVersion;
|
| | | tinyMCE.releaseDate = tinymce.releaseDate;
|
| | | tinyMCE.baseURL = tinymce.baseURL;
|
| | | tinyMCE.isIE = tinyMCE.isMSIE = tinymce.isIE || tinymce.isOpera;
|
| | | tinyMCE.isMSIE5 = tinymce.isIE;
|
| | | tinyMCE.isMSIE5_0 = tinymce.isIE;
|
| | | tinyMCE.isMSIE7 = tinymce.isIE;
|
| | | tinyMCE.isGecko = tinymce.isGecko;
|
| | | tinyMCE.isSafari = tinymce.isWebKit;
|
| | | tinyMCE.isOpera = tinymce.isOpera;
|
| | | tinyMCE.isMac = false;
|
| | | tinyMCE.isNS7 = false;
|
| | | tinyMCE.isNS71 = false;
|
| | | tinyMCE.compat = true;
|
| | |
|
| | | // Extend tinyMCE class
|
| | | TinyMCE_Engine = tinyMCE;
|
| | | tinymce.extend(tinyMCE, {
|
| | | getParam : function(n, dv) {
|
| | | return this.activeEditor.getParam(n, dv);
|
| | | },
|
| | |
|
| | | addEvent : function(e, na, f, sc) {
|
| | | tinymce.dom.Event.add(e, na, f, sc || this);
|
| | | },
|
| | |
|
| | | getControlHTML : function(n) {
|
| | | return EditorManager.activeEditor.controlManager.createControl(n);
|
| | | },
|
| | |
|
| | | loadCSS : function(u) {
|
| | | tinymce.DOM.loadCSS(u);
|
| | | },
|
| | |
|
| | | importCSS : function(doc, u) {
|
| | | if (doc == document)
|
| | | this.loadCSS(u);
|
| | | else
|
| | | new tinymce.dom.DOMUtils(doc).loadCSS(u);
|
| | | },
|
| | |
|
| | | log : function() {
|
| | | console.debug.apply(console, arguments);
|
| | | },
|
| | |
|
| | | getLang : function(n, dv) {
|
| | | var v = EditorManager.activeEditor.getLang(n.replace(/^lang_/g, ''), dv);
|
| | |
|
| | | // Is number
|
| | | if (/^[0-9\-.]+$/g.test(v))
|
| | | return parseInt(v);
|
| | |
|
| | | return v;
|
| | | },
|
| | |
|
| | | isInstance : function(o) {
|
| | | return o != null && typeof(o) == "object" && o.execCommand;
|
| | | },
|
| | |
|
| | | triggerNodeChange : function() {
|
| | | EditorManager.activeEditor.nodeChanged();
|
| | | },
|
| | |
|
| | | regexpReplace : function(in_str, reg_exp, replace_str, opts) {
|
| | | var re;
|
| | |
|
| | | if (in_str == null)
|
| | | return in_str;
|
| | |
|
| | | if (typeof(opts) == "undefined")
|
| | | opts = 'g';
|
| | |
|
| | | re = new RegExp(reg_exp, opts);
|
| | |
|
| | | return in_str.replace(re, replace_str);
|
| | | },
|
| | |
|
| | | trim : function(s) {
|
| | | return tinymce.trim(s);
|
| | | },
|
| | |
|
| | | xmlEncode : function(s) {
|
| | | return tinymce.DOM.encode(s);
|
| | | },
|
| | |
|
| | | explode : function(s, d) {
|
| | | var o = [];
|
| | |
|
| | | tinymce.each(s.split(d), function(v) {
|
| | | if (v != '')
|
| | | o.push(v);
|
| | | });
|
| | |
|
| | | return o;
|
| | | },
|
| | |
|
| | | switchClass : function(id, cls) {
|
| | | var b;
|
| | |
|
| | | if (/^mceButton/.test(cls)) {
|
| | | b = EditorManager.activeEditor.controlManager.get(id);
|
| | |
|
| | | if (!b)
|
| | | return;
|
| | |
|
| | | switch (cls) {
|
| | | case "mceButtonNormal":
|
| | | b.setDisabled(false);
|
| | | b.setActive(false);
|
| | | return;
|
| | |
|
| | | case "mceButtonDisabled":
|
| | | b.setDisabled(true);
|
| | | return;
|
| | |
|
| | | case "mceButtonSelected":
|
| | | b.setActive(true);
|
| | | b.setDisabled(false);
|
| | | return;
|
| | | }
|
| | | }
|
| | | },
|
| | |
|
| | | addCSSClass : function(e, n, b) {
|
| | | return tinymce.DOM.addClass(e, n, b);
|
| | | },
|
| | |
|
| | | hasCSSClass : function(e, n) {
|
| | | return tinymce.DOM.hasClass(e, n);
|
| | | },
|
| | |
|
| | | removeCSSClass : function(e, n) {
|
| | | return tinymce.DOM.removeClass(e, n);
|
| | | },
|
| | |
|
| | | getCSSClasses : function() {
|
| | | var cl = EditorManager.activeEditor.dom.getClasses(), o = [];
|
| | |
|
| | | each(cl, function(c) {
|
| | | o.push(c['class']);
|
| | | });
|
| | |
|
| | | return o;
|
| | | },
|
| | |
|
| | | setWindowArg : function(n, v) {
|
| | | EditorManager.activeEditor.windowManager.params[n] = v;
|
| | | },
|
| | |
|
| | | getWindowArg : function(n, dv) {
|
| | | var wm = EditorManager.activeEditor.windowManager, v;
|
| | |
|
| | | v = wm.getParam(n);
|
| | | if (v === '')
|
| | | return '';
|
| | |
|
| | | return v || wm.getFeature(n) || dv;
|
| | | },
|
| | |
|
| | | getParentNode : function(n, f) {
|
| | | return this._getDOM().getParent(n, f);
|
| | | },
|
| | |
|
| | | selectElements : function(n, na, f) {
|
| | | var i, a = [], nl, x;
|
| | |
|
| | | for (x=0, na = na.split(','); x<na.length; x++)
|
| | | for (i=0, nl = n.getElementsByTagName(na[x]); i<nl.length; i++)
|
| | | (!f || f(nl[i])) && a.push(nl[i]);
|
| | |
|
| | | return a;
|
| | | },
|
| | |
|
| | | getNodeTree : function(n, na, t, nn) {
|
| | | return this.selectNodes(n, function(n) {
|
| | | return (!t || n.nodeType == t) && (!nn || n.nodeName == nn);
|
| | | }, na ? na : []);
|
| | | },
|
| | |
|
| | | getAttrib : function(e, n, dv) {
|
| | | return this._getDOM().getAttrib(e, n, dv);
|
| | | },
|
| | |
|
| | | setAttrib : function(e, n, v) {
|
| | | return this._getDOM().setAttrib(e, n, v);
|
| | | },
|
| | |
|
| | | getElementsByAttributeValue : function(n, e, a, v) {
|
| | | var i, nl = n.getElementsByTagName(e), o = [];
|
| | |
|
| | | for (i=0; i<nl.length; i++) {
|
| | | if (tinyMCE.getAttrib(nl[i], a).indexOf(v) != -1)
|
| | | o[o.length] = nl[i];
|
| | | }
|
| | |
|
| | | return o;
|
| | | },
|
| | |
|
| | | selectNodes : function(n, f, a) {
|
| | | var i;
|
| | |
|
| | | if (!a)
|
| | | a = [];
|
| | |
|
| | | if (f(n))
|
| | | a[a.length] = n;
|
| | |
|
| | | if (n.hasChildNodes()) {
|
| | | for (i=0; i<n.childNodes.length; i++)
|
| | | tinyMCE.selectNodes(n.childNodes[i], f, a);
|
| | | }
|
| | |
|
| | | return a;
|
| | | },
|
| | |
|
| | | getContent : function() {
|
| | | return EditorManager.activeEditor.getContent();
|
| | | },
|
| | |
|
| | | getParentElement : function(n, na, f) {
|
| | | if (na)
|
| | | na = new RegExp('^(' + na.toUpperCase().replace(/,/g, '|') + ')$', 'g');
|
| | |
|
| | | return this._getDOM().getParent(n, function(n) {
|
| | | return n.nodeType == 1 && (!na || na.test(n.nodeName)) && (!f || f(n));
|
| | | }, this.activeEditor.getBody());
|
| | | },
|
| | |
|
| | | importPluginLanguagePack : function(n) {
|
| | | tinymce.PluginManager.requireLangPack(n);
|
| | | },
|
| | |
|
| | | getButtonHTML : function(cn, lang, img, c, u, v) {
|
| | | var ed = EditorManager.activeEditor;
|
| | |
|
| | | img = img.replace(/\{\$pluginurl\}/g, tinyMCE.pluginURL);
|
| | | img = img.replace(/\{\$themeurl\}/g, tinyMCE.themeURL);
|
| | | lang = lang.replace(/^lang_/g, '');
|
| | |
|
| | | return ed.controlManager.createButton(cn, {
|
| | | title : lang,
|
| | | command : c,
|
| | | ui : u,
|
| | | value : v,
|
| | | scope : this,
|
| | | 'class' : 'compat',
|
| | | image : img
|
| | | });
|
| | | },
|
| | |
|
| | | addSelectAccessibility : function(e, s, w) {
|
| | | // Add event handlers |
| | | if (!s._isAccessible) {
|
| | | s.onkeydown = tinyMCE.accessibleEventHandler;
|
| | | s.onblur = tinyMCE.accessibleEventHandler;
|
| | | s._isAccessible = true;
|
| | | s._win = w;
|
| | | }
|
| | |
|
| | | return false;
|
| | | },
|
| | |
|
| | | accessibleEventHandler : function(e) {
|
| | | var elm, win = this._win;
|
| | |
|
| | | e = tinymce.isIE ? win.event : e;
|
| | | elm = tinymce.isIE ? e.srcElement : e.target;
|
| | |
|
| | | // Unpiggyback onchange on blur
|
| | | if (e.type == "blur") {
|
| | | if (elm.oldonchange) {
|
| | | elm.onchange = elm.oldonchange;
|
| | | elm.oldonchange = null;
|
| | | }
|
| | |
|
| | | return true;
|
| | | }
|
| | |
|
| | | // Piggyback onchange
|
| | | if (elm.nodeName == "SELECT" && !elm.oldonchange) {
|
| | | elm.oldonchange = elm.onchange;
|
| | | elm.onchange = null;
|
| | | }
|
| | |
|
| | | // Execute onchange and remove piggyback
|
| | | if (e.keyCode == 13 || e.keyCode == 32) {
|
| | | elm.onchange = elm.oldonchange;
|
| | | elm.onchange();
|
| | | elm.oldonchange = null;
|
| | |
|
| | | tinyMCE.cancelEvent(e);
|
| | | return false;
|
| | | }
|
| | |
|
| | | return true;
|
| | | },
|
| | |
|
| | | cancelEvent : function(e) {
|
| | | return tinymce.dom.Event.cancel(e);
|
| | | },
|
| | |
|
| | | handleVisualAid : function(e) {
|
| | | EditorManager.activeEditor.addVisual(e);
|
| | | },
|
| | |
|
| | | getAbsPosition : function(n, r) {
|
| | | return tinymce.DOM.getPos(n, r);
|
| | | },
|
| | |
|
| | | cleanupEventStr : function(s) {
|
| | | s = "" + s;
|
| | | s = s.replace('function anonymous()\n{\n', '');
|
| | | s = s.replace('\n}', '');
|
| | | s = s.replace(/^return true;/gi, ''); // Remove event blocker
|
| | |
|
| | | return s;
|
| | | },
|
| | |
|
| | | getVisualAidClass : function(s) {
|
| | | // TODO: Implement
|
| | | return s;
|
| | | },
|
| | |
|
| | | parseStyle : function(s) {
|
| | | return this._getDOM().parseStyle(s);
|
| | | },
|
| | |
|
| | | serializeStyle : function(s) {
|
| | | return this._getDOM().serializeStyle(s);
|
| | | },
|
| | |
|
| | | openWindow : function(tpl, args) {
|
| | | var ed = EditorManager.activeEditor, o = {}, n;
|
| | |
|
| | | // Convert name/value array to object
|
| | | for (n in tpl)
|
| | | o[n] = tpl[n];
|
| | |
|
| | | tpl = o;
|
| | |
|
| | | args = args || {};
|
| | | tpl.url = new tinymce.util.URI(tinymce.ThemeManager.themeURLs[ed.settings.theme]).toAbsolute(tpl.file);
|
| | | tpl.inline = tpl.inline || args.inline;
|
| | |
|
| | | ed.windowManager.open(tpl, args);
|
| | | },
|
| | |
|
| | | closeWindow : function(win) {
|
| | | EditorManager.activeEditor.windowManager.close(win);
|
| | | },
|
| | |
|
| | | getOuterHTML : function(e) {
|
| | | return tinymce.DOM.getOuterHTML(e);
|
| | | },
|
| | |
|
| | | setOuterHTML : function(e, h, d) {
|
| | | return tinymce.DOM.setOuterHTML(e, h, d);
|
| | | },
|
| | |
|
| | | hasPlugin : function(n) {
|
| | | return tinymce.PluginManager.get(n) != null;
|
| | | },
|
| | |
|
| | | _setEventsEnabled : function() {
|
| | | // Ignore it!!
|
| | | },
|
| | |
|
| | | addPlugin : function(pn, f) {
|
| | | var t = this;
|
| | |
|
| | | function PluginWrapper(ed) {
|
| | | tinyMCE.selectedInstance = ed;
|
| | |
|
| | | ed.onInit.add(function() {
|
| | | t.settings = ed.settings;
|
| | | t.settings['base_href'] = tinyMCE.documentBasePath;
|
| | | tinyMCE.settings = t.settings;
|
| | | tinyMCE.documentBasePath = ed.documentBasePath;
|
| | | //ed.formElement = DOM.get(ed.id);
|
| | |
|
| | | if (f.initInstance)
|
| | | f.initInstance(ed);
|
| | |
|
| | | ed.contentDocument = ed.getDoc();
|
| | | ed.contentWindow = ed.getWin();
|
| | | ed.undoRedo = ed.undoManager;
|
| | | ed.startContent = ed.getContent({format : 'raw'});
|
| | |
|
| | | tinyMCE.instances[ed.id] = ed;
|
| | | tinyMCE.loadedFiles = [];
|
| | | });
|
| | |
|
| | | ed.onActivate.add(function() {
|
| | | tinyMCE.settings = ed.settings;
|
| | | tinyMCE.selectedInstance = ed;
|
| | | });
|
| | |
|
| | | /* if (f.removeInstance) {
|
| | | ed.onDestroy.add(function() {
|
| | | return f.removeInstance(ed.id);
|
| | | });
|
| | | }*/
|
| | |
|
| | | if (f.handleNodeChange) {
|
| | | ed.onNodeChange.add(function(ed, cm, n) {
|
| | | f.handleNodeChange(ed.id, n, 0, 0, false, !ed.selection.isCollapsed());
|
| | | });
|
| | | }
|
| | |
|
| | | if (f.onChange) {
|
| | | ed.onChange.add(function(ed, n) {
|
| | | return f.onChange(ed);
|
| | | });
|
| | | }
|
| | |
|
| | | if (f.cleanup) {
|
| | | ed.onGetContent.add(function() {
|
| | | //f.cleanup(type, content, inst);
|
| | | });
|
| | | }
|
| | |
|
| | | this.getInfo = function() {
|
| | | return f.getInfo();
|
| | | };
|
| | |
|
| | | this.createControl = function(n) {
|
| | | tinyMCE.pluginURL = tinymce.baseURL + '/plugins/' + pn;
|
| | | tinyMCE.themeURL = tinymce.baseURL + '/themes/' + tinyMCE.activeEditor.settings.theme;
|
| | |
|
| | | if (f.getControlHTML)
|
| | | return f.getControlHTML(n);
|
| | |
|
| | | return null;
|
| | | };
|
| | |
|
| | | this.execCommand = function(cmd, ui, val) {
|
| | | if (f.execCommand)
|
| | | return f.execCommand(ed.id, ed.getBody(), cmd, ui, val);
|
| | |
|
| | | return false;
|
| | | };
|
| | | };
|
| | |
|
| | | tinymce.PluginManager.add(pn, PluginWrapper);
|
| | | },
|
| | |
|
| | | _getDOM : function() {
|
| | | return tinyMCE.activeEditor ? tinyMCE.activeEditor.dom : tinymce.DOM;
|
| | | },
|
| | |
|
| | | convertRelativeToAbsoluteURL : function(b, u) {
|
| | | return new tinymce.util.URI(b).toAbsolute(u);
|
| | | },
|
| | |
|
| | | convertAbsoluteURLToRelativeURL : function(b, u) {
|
| | | return new tinymce.util.URI(b).toRelative(u);
|
| | | }
|
| | | });
|
| | |
|
| | | // Extend Editor class
|
| | | tinymce.extend(tinymce.Editor.prototype, {
|
| | | getFocusElement : function() {
|
| | | return this.selection.getNode();
|
| | | },
|
| | |
|
| | | getData : function(n) {
|
| | | if (!this.data)
|
| | | this.data = [];
|
| | |
|
| | | if (!this.data[n])
|
| | | this.data[n] = [];
|
| | |
|
| | | return this.data[n];
|
| | | },
|
| | |
|
| | | hasPlugin : function(n) {
|
| | | return this.plugins[n] != null;
|
| | | },
|
| | |
|
| | | getContainerWin : function() {
|
| | | return window;
|
| | | },
|
| | |
|
| | | getHTML : function(raw) {
|
| | | return this.getContent({ format : raw ? 'raw' : 'html'});
|
| | | },
|
| | |
|
| | | setHTML : function(h) {
|
| | | this.setContent(h);
|
| | | },
|
| | |
|
| | | getSel : function() {
|
| | | return this.selection.getSel();
|
| | | },
|
| | |
|
| | | getRng : function() {
|
| | | return this.selection.getRng();
|
| | | },
|
| | |
|
| | | isHidden : function() {
|
| | | var s;
|
| | |
|
| | | if (!tinymce.isGecko)
|
| | | return false;
|
| | |
|
| | | s = this.getSel();
|
| | |
|
| | | // Weird, wheres that cursor selection?
|
| | | return (!s || !s.rangeCount || s.rangeCount == 0);
|
| | | },
|
| | |
|
| | | translate : function(s) {
|
| | | var c = this.settings.language, o;
|
| | |
|
| | | o = tinymce.EditorManager.i18n[c + '.' + s] || s.replace(/{\#([^}]+)\}/g, function(a, b) {
|
| | | return tinymce.EditorManager.i18n[c + '.' + b] || '{#' + b + '}';
|
| | | });
|
| | |
|
| | | o = o.replace(/{\$lang_([^}]+)\}/g, function(a, b) {
|
| | | return tinymce.EditorManager.i18n[c + '.' + b] || '{$lang_' + b + '}';
|
| | | });
|
| | |
|
| | | return o;
|
| | | },
|
| | |
|
| | | repaint : function() {
|
| | | this.execCommand('mceRepaint');
|
| | | }
|
| | | });
|
| | |
|
| | | // Extend selection
|
| | | tinymce.extend(tinymce.dom.Selection.prototype, {
|
| | | getSelectedText : function() {
|
| | | return this.getContent({format : 'text'});
|
| | | },
|
| | |
|
| | | getSelectedHTML : function() {
|
| | | return this.getContent({format : 'html'});
|
| | | },
|
| | |
|
| | | getFocusElement : function() {
|
| | | return this.getNode();
|
| | | },
|
| | |
|
| | | selectNode : function(node, collapse, select_text_node, to_start) {
|
| | | var t = this;
|
| | |
|
| | | t.select(node, select_text_node || 0);
|
| | |
|
| | | if (!is(collapse))
|
| | | collapse = true;
|
| | |
|
| | | if (collapse) {
|
| | | if (!is(to_start))
|
| | | to_start = true;
|
| | |
|
| | | t.collapse(to_start);
|
| | | }
|
| | | }
|
| | | });
|
| | | }).call(this);
|
| | |
|
| | | // Register plugin
|
| | | tinymce.PluginManager.add('compat2x', tinymce.plugins.Compat2x);
|
| | | })();
|
| | |
|
New file |
| | |
| | | (function(){var Event=tinymce.dom.Event,each=tinymce.each,DOM=tinymce.DOM;tinymce.create('tinymce.plugins.ContextMenu',{init:function(ed){var t=this;t.editor=ed;t.onContextMenu=new tinymce.util.Dispatcher(this);ed.onContextMenu.add(function(ed,e){if(!e.ctrlKey){t._getMenu(ed).showMenu(e.clientX,e.clientY);Event.add(document,'click',hide);Event.cancel(e);}});function hide(){if(t._menu){t._menu.removeAll();t._menu.destroy();Event.remove(document,'click',hide);}};ed.onMouseDown.add(hide);ed.onKeyDown.add(hide);},getInfo:function(){return{longname:'Contextmenu',author:'Moxiecode Systems AB',authorurl:'http://tinymce.moxiecode.com',infourl:'http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/contextmenu',version:tinymce.majorVersion+"."+tinymce.minorVersion};},_getMenu:function(ed){var t=this,m=t._menu,se=ed.selection,col=se.isCollapsed(),el=se.getNode()||ed.getBody(),am,p1,p2;if(m){m.removeAll();m.destroy();}p1=DOM.getPos(ed.getContentAreaContainer());p2=DOM.getPos(ed.getContainer());m=ed.controlManager.createDropMenu('contextmenu',{offset_x:p1.x,offset_y:p1.y,constrain:1});t._menu=m;m.add({title:'advanced.cut_desc',icon:'cut',cmd:'Cut'}).setDisabled(col);m.add({title:'advanced.copy_desc',icon:'copy',cmd:'Copy'}).setDisabled(col);m.add({title:'advanced.paste_desc',icon:'paste',cmd:'Paste'});if((el.nodeName=='A'&&!ed.dom.getAttrib(el,'name'))||!col){m.addSeparator();m.add({title:'advanced.link_desc',icon:'link',cmd:ed.plugins.advlink?'mceAdvLink':'mceLink',ui:true});m.add({title:'advanced.unlink_desc',icon:'unlink',cmd:'UnLink'});}m.addSeparator();m.add({title:'advanced.image_desc',icon:'image',cmd:ed.plugins.advimage?'mceAdvImage':'mceImage',ui:true});m.addSeparator();am=m.addMenu({title:'contextmenu.align'});am.add({title:'contextmenu.left',icon:'justifyleft',cmd:'JustifyLeft'});am.add({title:'contextmenu.center',icon:'justifycenter',cmd:'JustifyCenter'});am.add({title:'contextmenu.right',icon:'justifyright',cmd:'JustifyRight'});am.add({title:'contextmenu.full',icon:'justifyfull',cmd:'JustifyFull'});t.onContextMenu.dispatch(t,m,el,col);return m;}});tinymce.PluginManager.add('contextmenu',tinymce.plugins.ContextMenu);})(); |
New file |
| | |
| | | /**
|
| | | * $Id: editor_plugin_src.js 755 2008-03-29 19:14:42Z spocke $
|
| | | *
|
| | | * @author Moxiecode
|
| | | * @copyright Copyright © 2004-2008, Moxiecode Systems AB, All rights reserved.
|
| | | */
|
| | |
|
| | | (function() {
|
| | | var Event = tinymce.dom.Event, each = tinymce.each, DOM = tinymce.DOM;
|
| | |
|
| | | tinymce.create('tinymce.plugins.ContextMenu', {
|
| | | init : function(ed) {
|
| | | var t = this;
|
| | |
|
| | | t.editor = ed;
|
| | | t.onContextMenu = new tinymce.util.Dispatcher(this);
|
| | |
|
| | | ed.onContextMenu.add(function(ed, e) {
|
| | | if (!e.ctrlKey) {
|
| | | t._getMenu(ed).showMenu(e.clientX, e.clientY);
|
| | | Event.add(document, 'click', hide);
|
| | | Event.cancel(e);
|
| | | }
|
| | | });
|
| | |
|
| | | function hide() {
|
| | | if (t._menu) {
|
| | | t._menu.removeAll();
|
| | | t._menu.destroy();
|
| | | Event.remove(document, 'click', hide);
|
| | | }
|
| | | };
|
| | |
|
| | | ed.onMouseDown.add(hide);
|
| | | ed.onKeyDown.add(hide);
|
| | | },
|
| | |
|
| | | getInfo : function() {
|
| | | return {
|
| | | longname : 'Contextmenu',
|
| | | author : 'Moxiecode Systems AB',
|
| | | authorurl : 'http://tinymce.moxiecode.com',
|
| | | infourl : 'http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/contextmenu',
|
| | | version : tinymce.majorVersion + "." + tinymce.minorVersion
|
| | | };
|
| | | },
|
| | |
|
| | | _getMenu : function(ed) {
|
| | | var t = this, m = t._menu, se = ed.selection, col = se.isCollapsed(), el = se.getNode() || ed.getBody(), am, p1, p2;
|
| | |
|
| | | if (m) {
|
| | | m.removeAll();
|
| | | m.destroy();
|
| | | }
|
| | |
|
| | | p1 = DOM.getPos(ed.getContentAreaContainer());
|
| | | p2 = DOM.getPos(ed.getContainer());
|
| | |
|
| | | m = ed.controlManager.createDropMenu('contextmenu', {
|
| | | offset_x : p1.x,
|
| | | offset_y : p1.y,
|
| | | /* vp_offset_x : p2.x,
|
| | | vp_offset_y : p2.y,*/
|
| | | constrain : 1
|
| | | });
|
| | |
|
| | | t._menu = m;
|
| | |
|
| | | m.add({title : 'advanced.cut_desc', icon : 'cut', cmd : 'Cut'}).setDisabled(col);
|
| | | m.add({title : 'advanced.copy_desc', icon : 'copy', cmd : 'Copy'}).setDisabled(col);
|
| | | m.add({title : 'advanced.paste_desc', icon : 'paste', cmd : 'Paste'});
|
| | |
|
| | | if ((el.nodeName == 'A' && !ed.dom.getAttrib(el, 'name')) || !col) {
|
| | | m.addSeparator();
|
| | | m.add({title : 'advanced.link_desc', icon : 'link', cmd : ed.plugins.advlink ? 'mceAdvLink' : 'mceLink', ui : true});
|
| | | m.add({title : 'advanced.unlink_desc', icon : 'unlink', cmd : 'UnLink'});
|
| | | }
|
| | |
|
| | | m.addSeparator();
|
| | | m.add({title : 'advanced.image_desc', icon : 'image', cmd : ed.plugins.advimage ? 'mceAdvImage' : 'mceImage', ui : true});
|
| | |
|
| | | m.addSeparator();
|
| | | am = m.addMenu({title : 'contextmenu.align'});
|
| | | am.add({title : 'contextmenu.left', icon : 'justifyleft', cmd : 'JustifyLeft'});
|
| | | am.add({title : 'contextmenu.center', icon : 'justifycenter', cmd : 'JustifyCenter'});
|
| | | am.add({title : 'contextmenu.right', icon : 'justifyright', cmd : 'JustifyRight'});
|
| | | am.add({title : 'contextmenu.full', icon : 'justifyfull', cmd : 'JustifyFull'});
|
| | |
|
| | | t.onContextMenu.dispatch(t, m, el, col);
|
| | |
|
| | | return m;
|
| | | }
|
| | | });
|
| | |
|
| | | // Register plugin
|
| | | tinymce.PluginManager.add('contextmenu', tinymce.plugins.ContextMenu);
|
| | | })(); |
New file |
| | |
| | | (function(){tinymce.create('tinymce.plugins.Directionality',{init:function(ed,url){var t=this;t.editor=ed;ed.addCommand('mceDirectionLTR',function(){var e=ed.dom.getParent(ed.selection.getNode(),ed.dom.isBlock);if(e){if(ed.dom.getAttrib(e,"dir")!="ltr")ed.dom.setAttrib(e,"dir","ltr");else ed.dom.setAttrib(e,"dir","");}ed.nodeChanged();});ed.addCommand('mceDirectionRTL',function(){var e=ed.dom.getParent(ed.selection.getNode(),ed.dom.isBlock);if(e){if(ed.dom.getAttrib(e,"dir")!="rtl")ed.dom.setAttrib(e,"dir","rtl");else ed.dom.setAttrib(e,"dir","");}ed.nodeChanged();});ed.addButton('ltr',{title:'directionality.ltr_desc',cmd:'mceDirectionLTR'});ed.addButton('rtl',{title:'directionality.rtl_desc',cmd:'mceDirectionRTL'});ed.onNodeChange.add(t._nodeChange,t);},getInfo:function(){return{longname:'Directionality',author:'Moxiecode Systems AB',authorurl:'http://tinymce.moxiecode.com',infourl:'http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/directionality',version:tinymce.majorVersion+"."+tinymce.minorVersion};},_nodeChange:function(ed,cm,n){var dom=ed.dom,dir;n=dom.getParent(n,dom.isBlock);if(!n){cm.setDisabled('ltr',1);cm.setDisabled('rtl',1);return;}dir=dom.getAttrib(n,'dir');cm.setActive('ltr',dir=="ltr");cm.setDisabled('ltr',0);cm.setActive('rtl',dir=="rtl");cm.setDisabled('rtl',0);}});tinymce.PluginManager.add('directionality',tinymce.plugins.Directionality);})(); |
New file |
| | |
| | | /**
|
| | | * $Id: editor_plugin_src.js 520 2008-01-07 16:30:32Z spocke $
|
| | | *
|
| | | * @author Moxiecode
|
| | | * @copyright Copyright © 2004-2008, Moxiecode Systems AB, All rights reserved.
|
| | | */
|
| | |
|
| | | (function() {
|
| | | tinymce.create('tinymce.plugins.Directionality', {
|
| | | init : function(ed, url) {
|
| | | var t = this;
|
| | |
|
| | | t.editor = ed;
|
| | |
|
| | | ed.addCommand('mceDirectionLTR', function() {
|
| | | var e = ed.dom.getParent(ed.selection.getNode(), ed.dom.isBlock);
|
| | |
|
| | | if (e) {
|
| | | if (ed.dom.getAttrib(e, "dir") != "ltr")
|
| | | ed.dom.setAttrib(e, "dir", "ltr");
|
| | | else
|
| | | ed.dom.setAttrib(e, "dir", "");
|
| | | }
|
| | |
|
| | | ed.nodeChanged();
|
| | | });
|
| | |
|
| | | ed.addCommand('mceDirectionRTL', function() {
|
| | | var e = ed.dom.getParent(ed.selection.getNode(), ed.dom.isBlock);
|
| | |
|
| | | if (e) {
|
| | | if (ed.dom.getAttrib(e, "dir") != "rtl")
|
| | | ed.dom.setAttrib(e, "dir", "rtl");
|
| | | else
|
| | | ed.dom.setAttrib(e, "dir", "");
|
| | | }
|
| | |
|
| | | ed.nodeChanged();
|
| | | });
|
| | |
|
| | | ed.addButton('ltr', {title : 'directionality.ltr_desc', cmd : 'mceDirectionLTR'});
|
| | | ed.addButton('rtl', {title : 'directionality.rtl_desc', cmd : 'mceDirectionRTL'});
|
| | |
|
| | | ed.onNodeChange.add(t._nodeChange, t);
|
| | | },
|
| | |
|
| | | getInfo : function() {
|
| | | return {
|
| | | longname : 'Directionality',
|
| | | author : 'Moxiecode Systems AB',
|
| | | authorurl : 'http://tinymce.moxiecode.com',
|
| | | infourl : 'http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/directionality',
|
| | | version : tinymce.majorVersion + "." + tinymce.minorVersion
|
| | | };
|
| | | },
|
| | |
|
| | | // Private methods
|
| | |
|
| | | _nodeChange : function(ed, cm, n) {
|
| | | var dom = ed.dom, dir;
|
| | |
|
| | | n = dom.getParent(n, dom.isBlock);
|
| | | if (!n) {
|
| | | cm.setDisabled('ltr', 1);
|
| | | cm.setDisabled('rtl', 1);
|
| | | return;
|
| | | }
|
| | |
|
| | | dir = dom.getAttrib(n, 'dir');
|
| | | cm.setActive('ltr', dir == "ltr");
|
| | | cm.setDisabled('ltr', 0);
|
| | | cm.setActive('rtl', dir == "rtl");
|
| | | cm.setDisabled('rtl', 0);
|
| | | }
|
| | | });
|
| | |
|
| | | // Register plugin
|
| | | tinymce.PluginManager.add('directionality', tinymce.plugins.Directionality);
|
| | | })(); |
| | |
| | | tinyMCE.importPluginLanguagePack('emotions');var TinyMCE_EmotionsPlugin={getInfo:function(){return{longname:'Emotions',author:'Moxiecode Systems AB',authorurl:'http://tinymce.moxiecode.com',infourl:'http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/emotions',version:tinyMCE.majorVersion+"."+tinyMCE.minorVersion}},getControlHTML:function(cn){switch(cn){case"emotions":return tinyMCE.getButtonHTML(cn,'lang_emotions_desc','{$pluginurl}/images/emotions.gif','mceEmotion')}return""},execCommand:function(editor_id,element,command,user_interface,value){switch(command){case"mceEmotion":var template=new Array();template['file']='../../plugins/emotions/emotions.htm';template['width']=250;template['height']=160;template['width']+=tinyMCE.getLang('lang_emotions_delta_width',0);template['height']+=tinyMCE.getLang('lang_emotions_delta_height',0);tinyMCE.openWindow(template,{editor_id:editor_id,inline:"yes"});return true}return false}};tinyMCE.addPlugin('emotions',TinyMCE_EmotionsPlugin); |
| | | (function(){tinymce.create('tinymce.plugins.EmotionsPlugin',{init:function(ed,url){ed.addCommand('mceEmotion',function(){ed.windowManager.open({file:url+'/emotions.htm',width:250+parseInt(ed.getLang('emotions.delta_width',0)),height:160+parseInt(ed.getLang('emotions.delta_height',0)),inline:1},{plugin_url:url});});ed.addButton('emotions',{title:'emotions.emotions_desc',cmd:'mceEmotion'});},getInfo:function(){return{longname:'Emotions',author:'Moxiecode Systems AB',authorurl:'http://tinymce.moxiecode.com',infourl:'http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/emotions',version:tinymce.majorVersion+"."+tinymce.minorVersion};}});tinymce.PluginManager.add('emotions',tinymce.plugins.EmotionsPlugin);})(); |
| | |
| | | /**
|
| | | * $Id: editor_plugin_src.js 201 2007-02-12 15:56:56Z spocke $
|
| | | * $Id: editor_plugin_src.js 520 2008-01-07 16:30:32Z spocke $
|
| | | *
|
| | | * @author Moxiecode
|
| | | * @copyright Copyright © 2004-2007, Moxiecode Systems AB, All rights reserved.
|
| | | * @copyright Copyright © 2004-2008, Moxiecode Systems AB, All rights reserved.
|
| | | */
|
| | |
|
| | | /* Import plugin specific language pack */
|
| | | tinyMCE.importPluginLanguagePack('emotions');
|
| | | (function() {
|
| | | tinymce.create('tinymce.plugins.EmotionsPlugin', {
|
| | | init : function(ed, url) {
|
| | | // Register commands
|
| | | ed.addCommand('mceEmotion', function() {
|
| | | ed.windowManager.open({
|
| | | file : url + '/emotions.htm',
|
| | | width : 250 + parseInt(ed.getLang('emotions.delta_width', 0)),
|
| | | height : 160 + parseInt(ed.getLang('emotions.delta_height', 0)),
|
| | | inline : 1
|
| | | }, {
|
| | | plugin_url : url
|
| | | });
|
| | | });
|
| | |
|
| | | // Plucin static class
|
| | | var TinyMCE_EmotionsPlugin = {
|
| | | getInfo : function() {
|
| | | return {
|
| | | longname : 'Emotions',
|
| | | author : 'Moxiecode Systems AB',
|
| | | authorurl : 'http://tinymce.moxiecode.com',
|
| | | infourl : 'http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/emotions',
|
| | | version : tinyMCE.majorVersion + "." + tinyMCE.minorVersion
|
| | | };
|
| | | },
|
| | | // Register buttons
|
| | | ed.addButton('emotions', {title : 'emotions.emotions_desc', cmd : 'mceEmotion'});
|
| | | },
|
| | |
|
| | | /**
|
| | | * Returns the HTML contents of the emotions control.
|
| | | */
|
| | | getControlHTML : function(cn) {
|
| | | switch (cn) {
|
| | | case "emotions":
|
| | | return tinyMCE.getButtonHTML(cn, 'lang_emotions_desc', '{$pluginurl}/images/emotions.gif', 'mceEmotion');
|
| | | getInfo : function() {
|
| | | return {
|
| | | longname : 'Emotions',
|
| | | author : 'Moxiecode Systems AB',
|
| | | authorurl : 'http://tinymce.moxiecode.com',
|
| | | infourl : 'http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/emotions',
|
| | | version : tinymce.majorVersion + "." + tinymce.minorVersion
|
| | | };
|
| | | }
|
| | | });
|
| | |
|
| | | return "";
|
| | | },
|
| | |
|
| | | /**
|
| | | * Executes the mceEmotion command.
|
| | | */
|
| | | execCommand : function(editor_id, element, command, user_interface, value) {
|
| | | // Handle commands
|
| | | switch (command) {
|
| | | case "mceEmotion":
|
| | | var template = new Array();
|
| | |
|
| | | template['file'] = '../../plugins/emotions/emotions.htm'; // Relative to theme
|
| | | template['width'] = 250;
|
| | | template['height'] = 160;
|
| | |
|
| | | // Language specific width and height addons
|
| | | template['width'] += tinyMCE.getLang('lang_emotions_delta_width', 0);
|
| | | template['height'] += tinyMCE.getLang('lang_emotions_delta_height', 0);
|
| | |
|
| | | tinyMCE.openWindow(template, {editor_id : editor_id, inline : "yes"});
|
| | |
|
| | | return true;
|
| | | }
|
| | |
|
| | | // Pass to next handler in chain
|
| | | return false;
|
| | | }
|
| | | };
|
| | |
|
| | | // Register plugin
|
| | | tinyMCE.addPlugin('emotions', TinyMCE_EmotionsPlugin);
|
| | | // Register plugin
|
| | | tinymce.PluginManager.add('emotions', tinymce.plugins.EmotionsPlugin);
|
| | | })(); |
| | |
| | | <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
|
| | | <html xmlns="http://www.w3.org/1999/xhtml">
|
| | | <head>
|
| | | <title>{$lang_emotions_title}</title>
|
| | | <script language="javascript" type="text/javascript" src="../../tiny_mce_popup.js"></script>
|
| | | <script language="javascript" type="text/javascript" src="jscripts/functions.js"></script>
|
| | | <title>{#emotions_dlg.title}</title>
|
| | | <script type="text/javascript" src="../../tiny_mce_popup.js"></script>
|
| | | <script type="text/javascript" src="js/emotions.js"></script>
|
| | | <base target="_self" />
|
| | | </head>
|
| | | <body onload="tinyMCEPopup.executeOnLoad('init();');" style="display: none">
|
| | | <body style="display: none">
|
| | | <div align="center">
|
| | | <div class="title">{$lang_emotions_title}:<br /><br /></div>
|
| | | <div class="title">{#emotions_dlg.title}:<br /><br /></div>
|
| | |
|
| | | <table border="0" cellspacing="0" cellpadding="4">
|
| | | <tr>
|
| | | <td><a href="javascript:insertEmotion('smiley-cool.gif','lang_emotions_cool');"><img src="images/smiley-cool.gif" width="18" height="18" border="0" alt="{$lang_emotions_cool}" title="{$lang_emotions_cool}" /></a></td>
|
| | | <td><a href="javascript:insertEmotion('smiley-cry.gif','lang_emotions_cry');"><img src="images/smiley-cry.gif" width="18" height="18" border="0" alt="{$lang_emotions_cry}" title="{$lang_emotions_cry}" /></a></td>
|
| | | <td><a href="javascript:insertEmotion('smiley-embarassed.gif','lang_emotions_embarassed');"><img src="images/smiley-embarassed.gif" width="18" height="18" border="0" alt="{$lang_emotions_embarassed}" title="{$lang_emotions_embarassed}" /></a></td>
|
| | | <td><a href="javascript:insertEmotion('smiley-foot-in-mouth.gif','lang_emotions_foot_in_mouth');"><img src="images/smiley-foot-in-mouth.gif" width="18" height="18" border="0" alt="{$lang_emotions_foot_in_mouth}" title="{$lang_emotions_foot_in_mouth}" /></a></td>
|
| | | <td><a href="javascript:EmotionsDialog.insert('smiley-cool.gif','emotions_dlg.cool');"><img src="img/smiley-cool.gif" width="18" height="18" border="0" alt="{#emotions_dlg.cool}" title="{#emotions_dlg.cool}" /></a></td>
|
| | | <td><a href="javascript:EmotionsDialog.insert('smiley-cry.gif','emotions_dlg.cry');"><img src="img/smiley-cry.gif" width="18" height="18" border="0" alt="{#emotions_dlg.cry}" title="{#emotions_dlg.cry}" /></a></td>
|
| | | <td><a href="javascript:EmotionsDialog.insert('smiley-embarassed.gif','emotions_dlg.embarassed');"><img src="img/smiley-embarassed.gif" width="18" height="18" border="0" alt="{#emotions_dlg.embarassed}" title="{#emotions_dlg.embarassed}" /></a></td>
|
| | | <td><a href="javascript:EmotionsDialog.insert('smiley-foot-in-mouth.gif','emotions_dlg.foot_in_mouth');"><img src="img/smiley-foot-in-mouth.gif" width="18" height="18" border="0" alt="{#emotions_dlg.foot_in_mouth}" title="{#emotions_dlg.foot_in_mouth}" /></a></td>
|
| | | </tr>
|
| | | <tr>
|
| | | <td><a href="javascript:insertEmotion('smiley-frown.gif','lang_emotions_frown');"><img src="images/smiley-frown.gif" width="18" height="18" border="0" alt="{$lang_emotions_frown}" title="{$lang_emotions_frown}" /></a></td>
|
| | | <td><a href="javascript:insertEmotion('smiley-innocent.gif','lang_emotions_innocent');"><img src="images/smiley-innocent.gif" width="18" height="18" border="0" alt="{$lang_emotions_innocent}" title="{$lang_emotions_innocent}" /></a></td>
|
| | | <td><a href="javascript:insertEmotion('smiley-kiss.gif','lang_emotions_kiss');"><img src="images/smiley-kiss.gif" width="18" height="18" border="0" alt="{$lang_emotions_kiss}" title="{$lang_emotions_kiss}" /></a></td>
|
| | | <td><a href="javascript:insertEmotion('smiley-laughing.gif','lang_emotions_laughing');"><img src="images/smiley-laughing.gif" width="18" height="18" border="0" alt="{$lang_emotions_laughing}" title="{$lang_emotions_laughing}" /></a></td>
|
| | | <td><a href="javascript:EmotionsDialog.insert('smiley-frown.gif','emotions_dlg.frown');"><img src="img/smiley-frown.gif" width="18" height="18" border="0" alt="{#emotions_dlg.frown}" title="{#emotions_dlg.frown}" /></a></td>
|
| | | <td><a href="javascript:EmotionsDialog.insert('smiley-innocent.gif','emotions_dlg.innocent');"><img src="img/smiley-innocent.gif" width="18" height="18" border="0" alt="{#emotions_dlg.innocent}" title="{#emotions_dlg.innocent}" /></a></td>
|
| | | <td><a href="javascript:EmotionsDialog.insert('smiley-kiss.gif','emotions_dlg.kiss');"><img src="img/smiley-kiss.gif" width="18" height="18" border="0" alt="{#emotions_dlg.kiss}" title="{#emotions_dlg.kiss}" /></a></td>
|
| | | <td><a href="javascript:EmotionsDialog.insert('smiley-laughing.gif','emotions_dlg.laughing');"><img src="img/smiley-laughing.gif" width="18" height="18" border="0" alt="{#emotions_dlg.laughing}" title="{#emotions_dlg.laughing}" /></a></td>
|
| | | </tr>
|
| | | <tr>
|
| | | <td><a href="javascript:insertEmotion('smiley-money-mouth.gif','lang_emotions_money_mouth');"><img src="images/smiley-money-mouth.gif" width="18" height="18" border="0" alt="{$lang_emotions_money_mouth}" title="{$lang_emotions_money_mouth}" /></a></td>
|
| | | <td><a href="javascript:insertEmotion('smiley-sealed.gif','lang_emotions_sealed');"><img src="images/smiley-sealed.gif" width="18" height="18" border="0" alt="{$lang_emotions_sealed}" title="{$lang_emotions_sealed}" /></a></td>
|
| | | <td><a href="javascript:insertEmotion('smiley-smile.gif','lang_emotions_smile');"><img src="images/smiley-smile.gif" width="18" height="18" border="0" alt="{$lang_emotions_smile}" title="{$lang_emotions_smile}" /></a></td>
|
| | | <td><a href="javascript:insertEmotion('smiley-surprised.gif','lang_emotions_surprised');"><img src="images/smiley-surprised.gif" width="18" height="18" border="0" alt="{$lang_emotions_surprised}" title="{$lang_emotions_surprised}" /></a></td>
|
| | | <td><a href="javascript:EmotionsDialog.insert('smiley-money-mouth.gif','emotions_dlg.money_mouth');"><img src="img/smiley-money-mouth.gif" width="18" height="18" border="0" alt="{#emotions_dlg.money_mouth}" title="{#emotions_dlg.money_mouth}" /></a></td>
|
| | | <td><a href="javascript:EmotionsDialog.insert('smiley-sealed.gif','emotions_dlg.sealed');"><img src="img/smiley-sealed.gif" width="18" height="18" border="0" alt="{#emotions_dlg.sealed}" title="{#emotions_dlg.sealed}" /></a></td>
|
| | | <td><a href="javascript:EmotionsDialog.insert('smiley-smile.gif','emotions_dlg.smile');"><img src="img/smiley-smile.gif" width="18" height="18" border="0" alt="{#emotions_dlg.smile}" title="{#emotions_dlg.smile}" /></a></td>
|
| | | <td><a href="javascript:EmotionsDialog.insert('smiley-surprised.gif','emotions_dlg.surprised');"><img src="img/smiley-surprised.gif" width="18" height="18" border="0" alt="{#emotions_dlg.surprised}" title="{#emotions_dlg.surprised}" /></a></td>
|
| | | </tr>
|
| | | <tr>
|
| | | <td><a href="javascript:insertEmotion('smiley-tongue-out.gif','lang_emotions_tongue_out');"><img src="images/smiley-tongue-out.gif" width="18" height="18" border="0" alt="{$lang_emotions_tongue-out}" title="{$lang_emotions_tongue_out}" /></a></td>
|
| | | <td><a href="javascript:insertEmotion('smiley-undecided.gif','lang_emotions_undecided');"><img src="images/smiley-undecided.gif" width="18" height="18" border="0" alt="{$lang_emotions_undecided}" title="{$lang_emotions_undecided}" /></a></td>
|
| | | <td><a href="javascript:insertEmotion('smiley-wink.gif','lang_emotions_wink');"><img src="images/smiley-wink.gif" width="18" height="18" border="0" alt="{$lang_emotions_wink}" title="{$lang_emotions_wink}" /></a></td>
|
| | | <td><a href="javascript:insertEmotion('smiley-yell.gif','lang_emotions_yell');"><img src="images/smiley-yell.gif" width="18" height="18" border="0" alt="{$lang_emotions_yell}" title="{$lang_emotions_yell}" /></a></td>
|
| | | <td><a href="javascript:EmotionsDialog.insert('smiley-tongue-out.gif','emotions_dlg.tongue_out');"><img src="img/smiley-tongue-out.gif" width="18" height="18" border="0" alt="{#emotions_dlg.tongue-out}" title="{#emotions_dlg.tongue_out}" /></a></td>
|
| | | <td><a href="javascript:EmotionsDialog.insert('smiley-undecided.gif','emotions_dlg.undecided');"><img src="img/smiley-undecided.gif" width="18" height="18" border="0" alt="{#emotions_dlg.undecided}" title="{#emotions_dlg.undecided}" /></a></td>
|
| | | <td><a href="javascript:EmotionsDialog.insert('smiley-wink.gif','emotions_dlg.wink');"><img src="img/smiley-wink.gif" width="18" height="18" border="0" alt="{#emotions_dlg.wink}" title="{#emotions_dlg.wink}" /></a></td>
|
| | | <td><a href="javascript:EmotionsDialog.insert('smiley-yell.gif','emotions_dlg.yell');"><img src="img/smiley-yell.gif" width="18" height="18" border="0" alt="{#emotions_dlg.yell}" title="{#emotions_dlg.yell}" /></a></td>
|
| | | </tr>
|
| | | </table>
|
| | | </div>
|
New file |
| | |
| | | tinyMCEPopup.requireLangPack();
|
| | |
|
| | | var EmotionsDialog = {
|
| | | init : function(ed) {
|
| | | tinyMCEPopup.resizeToInnerSize();
|
| | | },
|
| | |
|
| | | insert : function(file, title) {
|
| | | var ed = tinyMCEPopup.editor, dom = ed.dom;
|
| | |
|
| | | tinyMCEPopup.execCommand('mceInsertContent', false, dom.createHTML('img', {
|
| | | src : tinyMCEPopup.getWindowArg('plugin_url') + '/img/' + file,
|
| | | alt : ed.getLang(title),
|
| | | title : ed.getLang(title),
|
| | | border : 0
|
| | | }));
|
| | |
|
| | | tinyMCEPopup.close();
|
| | | }
|
| | | };
|
| | |
|
| | | tinyMCEPopup.onInit.add(EmotionsDialog.init, EmotionsDialog);
|
New file |
| | |
| | | tinyMCE.addI18n('en.emotions_dlg',{
|
| | | title:"Insert emotion",
|
| | | desc:"Emotions",
|
| | | cool:"Cool",
|
| | | cry:"Cry",
|
| | | embarassed:"Embarassed",
|
| | | foot_in_mouth:"Foot in mouth",
|
| | | frown:"Frown",
|
| | | innocent:"Innocent",
|
| | | kiss:"Kiss",
|
| | | laughing:"Laughing",
|
| | | money_mouth:"Money mouth",
|
| | | sealed:"Sealed",
|
| | | smile:"Smile",
|
| | | surprised:"Surprised",
|
| | | tongue_out:"Tongue out",
|
| | | undecided:"Undecided",
|
| | | wink:"Wink",
|
| | | yell:"Yell"
|
| | | }); |
| | |
| | | .mceItemFlash, .mceItemShockWave, .mceItemQuickTime, .mceItemWindowsMedia, .mceItemRealMedia { |
| | | border: 1px dotted #cc0000; |
| | | background-position: center; |
| | | background-repeat: no-repeat; |
| | | background-color: #ffffcc; |
| | | } |
| | | |
| | | .mceItemShockWave { |
| | | background-image: url('../images/shockwave.gif'); |
| | | } |
| | | |
| | | .mceItemFlash { |
| | | background-image: url('../images/flash.gif'); |
| | | } |
| | | |
| | | .mceItemQuickTime { |
| | | background-image: url('../images/quicktime.gif'); |
| | | } |
| | | |
| | | .mceItemWindowsMedia { |
| | | background-image: url('../images/windowsmedia.gif'); |
| | | } |
| | | |
| | | .mceItemRealMedia { |
| | | background-image: url('../images/realmedia.gif'); |
| | | } |
| | | .mceItemFlash, .mceItemShockWave, .mceItemQuickTime, .mceItemWindowsMedia, .mceItemRealMedia {border:1px dotted #cc0000; background-position:center; background-repeat:no-repeat; background-color:#ffffcc;}
|
| | | .mceItemShockWave {background-image: url(../img/shockwave.gif);}
|
| | | .mceItemFlash {background-image:url(../img/flash.gif);}
|
| | | .mceItemQuickTime {background-image:url(../img/quicktime.gif);}
|
| | | .mceItemWindowsMedia {background-image:url(../img/windowsmedia.gif);}
|
| | | .mceItemRealMedia {background-image:url(../img/realmedia.gif);}
|
| | |
| | | #id, #name, #hspace, #vspace, #class_name, #align { |
| | | width: 100px; |
| | | } |
| | | |
| | | #hspace, #vspace { |
| | | width: 50px; |
| | | } |
| | | |
| | | #flash_quality, #flash_align, #flash_scale, #flash_salign, #flash_wmode { |
| | | width: 100px; |
| | | } |
| | | |
| | | #flash_base, #flash_flashvars { |
| | | width: 240px; |
| | | } |
| | | |
| | | #width, #height { |
| | | width: 40px; |
| | | } |
| | | |
| | | #src, #media_type { |
| | | width: 250px; |
| | | } |
| | | |
| | | #class { |
| | | width: 120px; |
| | | } |
| | | |
| | | #prev { |
| | | margin: 0; |
| | | border: 1px solid black; |
| | | width: 99%; |
| | | height: 230px; |
| | | overflow: auto; |
| | | } |
| | | |
| | | .panel_wrapper div.current { |
| | | height: 390px; |
| | | overflow: auto; |
| | | } |
| | | |
| | | #flash_options, #shockwave_options, #qt_options, #wmp_options, #rmp_options { |
| | | display: none; |
| | | } |
| | | |
| | | .mceAddSelectValue { |
| | | background-color: #DDDDDD; |
| | | } |
| | | |
| | | #qt_starttime, #qt_endtime, #qt_fov, #qt_href, #qt_moveid, #qt_moviename, #qt_node, #qt_pan, #qt_qtsrc, #qt_qtsrcchokespeed, #qt_target, #qt_tilt, #qt_urlsubstituten, #qt_volume { |
| | | width: 70px; |
| | | } |
| | | |
| | | #wmp_balance, #wmp_baseurl, #wmp_captioningid, #wmp_currentmarker, #wmp_currentposition, #wmp_defaultframe, #wmp_playcount, #wmp_rate, #wmp_uimode, #wmp_volume { |
| | | width: 70px; |
| | | } |
| | | |
| | | #rmp_console, #rmp_numloop, #rmp_controls, #rmp_scriptcallbacks { |
| | | width: 70px; |
| | | } |
| | | |
| | | #shockwave_swvolume, #shockwave_swframe, #shockwave_swurl, #shockwave_swstretchvalign, #shockwave_swstretchhalign, #shockwave_swstretchstyle { |
| | | width: 90px; |
| | | } |
| | | |
| | | #qt_qtsrc { |
| | | width: 200px; |
| | | } |
| | | #id, #name, #hspace, #vspace, #class_name, #align {
|
| | | width: 100px;
|
| | | }
|
| | |
|
| | | #hspace, #vspace {
|
| | | width: 50px;
|
| | | }
|
| | |
|
| | | #flash_quality, #flash_align, #flash_scale, #flash_salign, #flash_wmode {
|
| | | width: 100px;
|
| | | }
|
| | |
|
| | | #flash_base, #flash_flashvars {
|
| | | width: 240px;
|
| | | }
|
| | |
|
| | | #width, #height {
|
| | | width: 40px;
|
| | | }
|
| | |
|
| | | #src, #media_type {
|
| | | width: 250px;
|
| | | }
|
| | |
|
| | | #class {
|
| | | width: 120px;
|
| | | }
|
| | |
|
| | | #prev {
|
| | | margin: 0;
|
| | | border: 1px solid black;
|
| | | width: 99%;
|
| | | height: 230px;
|
| | | overflow: auto;
|
| | | }
|
| | |
|
| | | .panel_wrapper div.current {
|
| | | height: 390px;
|
| | | overflow: auto;
|
| | | }
|
| | |
|
| | | #flash_options, #shockwave_options, #qt_options, #wmp_options, #rmp_options {
|
| | | display: none;
|
| | | }
|
| | |
|
| | | .mceAddSelectValue {
|
| | | background-color: #DDDDDD;
|
| | | }
|
| | |
|
| | | #qt_starttime, #qt_endtime, #qt_fov, #qt_href, #qt_moveid, #qt_moviename, #qt_node, #qt_pan, #qt_qtsrc, #qt_qtsrcchokespeed, #qt_target, #qt_tilt, #qt_urlsubstituten, #qt_volume {
|
| | | width: 70px;
|
| | | }
|
| | |
|
| | | #wmp_balance, #wmp_baseurl, #wmp_captioningid, #wmp_currentmarker, #wmp_currentposition, #wmp_defaultframe, #wmp_playcount, #wmp_rate, #wmp_uimode, #wmp_volume {
|
| | | width: 70px;
|
| | | }
|
| | |
|
| | | #rmp_console, #rmp_numloop, #rmp_controls, #rmp_scriptcallbacks {
|
| | | width: 70px;
|
| | | }
|
| | |
|
| | | #shockwave_swvolume, #shockwave_swframe, #shockwave_swurl, #shockwave_swstretchvalign, #shockwave_swstretchhalign, #shockwave_swstretchstyle {
|
| | | width: 90px;
|
| | | }
|
| | |
|
| | | #qt_qtsrc {
|
| | | width: 200px;
|
| | | }
|
| | |
| | | tinyMCE.importPluginLanguagePack('media');var TinyMCE_MediaPlugin={getInfo:function(){return{longname:'Media',author:'Moxiecode Systems AB',authorurl:'http://tinymce.moxiecode.com',infourl:'http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/media',version:tinyMCE.majorVersion+"."+tinyMCE.minorVersion}},initInstance:function(inst){if(inst.hasPlugin('flash')&&!tinyMCE.flashWarn){alert('Flash plugin is deprecated and should not be used together with the media plugin.');tinyMCE.flashWarn=true}if(!tinyMCE.settings['media_skip_plugin_css'])tinyMCE.importCSS(inst.getDoc(),tinyMCE.baseURL+"/plugins/media/css/content.css")},getControlHTML:function(cn){switch(cn){case"media":return tinyMCE.getButtonHTML(cn,'lang_media_desc','{$pluginurl}/images/media.gif','mceMedia')}return""},execCommand:function(editor_id,element,command,user_interface,value){switch(command){case"mceMedia":tinyMCE.openWindow({file:'../../plugins/media/media.htm',width:430+tinyMCE.getLang('lang_media_delta_width',0),height:470+tinyMCE.getLang('lang_media_delta_height',0)},{editor_id:editor_id,inline:"yes"});return true}return false},cleanup:function(type,content,inst){var nl,img,i,ne,d,s,ci;switch(type){case"insert_to_editor":img=tinyMCE.getParam("theme_href")+'/images/spacer.gif';content=content.replace(/<script[^>]*>\s*write(Flash|ShockWave|WindowsMedia|QuickTime|RealMedia)\(\{([^\)]*)\}\);\s*<\/script>/gi,'<img class="mceItem$1" title="$2" src="'+img+'" />');content=content.replace(/<object([^>]*)>/gi,'<div class="mceItemObject" $1>');content=content.replace(/<embed([^>]*)>/gi,'<div class="mceItemObjectEmbed" $1>');content=content.replace(/<\/(object|embed)([^>]*)>/gi,'</div>');content=content.replace(/<param([^>]*)>/gi,'<div $1 class="mceItemParam"></div>');content=content.replace(new RegExp('\\/ class="mceItemParam"><\\/div>','gi'),'class="mceItemParam"></div>');break;case"insert_to_editor_dom":d=inst.getDoc();nl=content.getElementsByTagName("img");for(i=0;i<nl.length;i++){if(/mceItem(Flash|ShockWave|WindowsMedia|QuickTime|RealMedia)/.test(nl[i].className)){nl[i].width=nl[i].title.replace(/.*width:[^0-9]?([0-9]+)%?.*/g,'$1');nl[i].height=nl[i].title.replace(/.*height:[^0-9]?([0-9]+)%?.*/g,'$1');}}nl=tinyMCE.selectElements(content,'DIV',function(n){return tinyMCE.hasCSSClass(n,'mceItemObject')});for(i=0;i<nl.length;i++){ci=tinyMCE.getAttrib(nl[i],"classid").toLowerCase().replace(/\s+/g,'');switch(ci){case'clsid:d27cdb6e-ae6d-11cf-96b8-444553540000':nl[i].parentNode.replaceChild(TinyMCE_MediaPlugin._createImg('mceItemFlash',d,nl[i]),nl[i]);break;case'clsid:166b1bca-3f9c-11cf-8075-444553540000':nl[i].parentNode.replaceChild(TinyMCE_MediaPlugin._createImg('mceItemShockWave',d,nl[i]),nl[i]);break;case'clsid:6bf52a52-394a-11d3-b153-00c04f79faa6':case'clsid:22d6f312-b0f6-11d0-94ab-0080c74c7e95':case'clsid:05589fa1-c356-11ce-bf01-00aa0055595a':nl[i].parentNode.replaceChild(TinyMCE_MediaPlugin._createImg('mceItemWindowsMedia',d,nl[i]),nl[i]);break;case'clsid:02bf25d5-8c17-4b23-bc80-d3488abddc6b':nl[i].parentNode.replaceChild(TinyMCE_MediaPlugin._createImg('mceItemQuickTime',d,nl[i]),nl[i]);break;case'clsid:cfcdaa03-8be4-11cf-b84b-0020afbbccfa':nl[i].parentNode.replaceChild(TinyMCE_MediaPlugin._createImg('mceItemRealMedia',d,nl[i]),nl[i]);break}}nl=tinyMCE.selectNodes(content,function(n){return n.className=='mceItemObjectEmbed'});for(i=0;i<nl.length;i++){switch(tinyMCE.getAttrib(nl[i],'type')){case'application/x-shockwave-flash':TinyMCE_MediaPlugin._createImgFromEmbed(nl[i],d,'mceItemFlash');break;case'application/x-director':TinyMCE_MediaPlugin._createImgFromEmbed(nl[i],d,'mceItemShockWave');break;case'application/x-mplayer2':TinyMCE_MediaPlugin._createImgFromEmbed(nl[i],d,'mceItemWindowsMedia');break;case'video/quicktime':TinyMCE_MediaPlugin._createImgFromEmbed(nl[i],d,'mceItemQuickTime');break;case'audio/x-pn-realaudio-plugin':TinyMCE_MediaPlugin._createImgFromEmbed(nl[i],d,'mceItemRealMedia');break}}break;case"get_from_editor":var startPos=-1,endPos,attribs,chunkBefore,chunkAfter,embedHTML,at,pl,cb,mt,ex;while((startPos=content.indexOf('<img',startPos+1))!=-1){endPos=content.indexOf('/>',startPos);attribs=TinyMCE_MediaPlugin._parseAttributes(content.substring(startPos+4,endPos));if(!/mceItem(Flash|ShockWave|WindowsMedia|QuickTime|RealMedia)/.test(attribs['class']))continue;endPos+=2;at=attribs['title'];if(at){at=at.replace(/&(#39|apos);/g,"'");at=at.replace(/&#quot;/g,'"');try{pl=eval('x={'+at+'};')}catch(ex){pl={}}}if(!tinyMCE.getParam('media_use_script',false)){switch(attribs['class']){case'mceItemFlash':ci='d27cdb6e-ae6d-11cf-96b8-444553540000';cb='http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,40,0';mt='application/x-shockwave-flash';break;case'mceItemShockWave':ci='166B1BCA-3F9C-11CF-8075-444553540000';cb='http://download.macromedia.com/pub/shockwave/cabs/director/sw.cab#version=8,5,1,0';mt='application/x-director';break;case'mceItemWindowsMedia':ci=tinyMCE.getParam('media_wmp6_compatible')?'05589FA1-C356-11CE-BF01-00AA0055595A':'6BF52A52-394A-11D3-B153-00C04F79FAA6';cb='http://activex.microsoft.com/activex/controls/mplayer/en/nsmp2inf.cab#Version=5,1,52,701';mt='application/x-mplayer2';break;case'mceItemQuickTime':ci='02BF25D5-8C17-4B23-BC80-D3488ABDDC6B';cb='http://www.apple.com/qtactivex/qtplugin.cab#version=6,0,2,0';mt='video/quicktime';break;case'mceItemRealMedia':ci='CFCDAA03-8BE4-11cf-B84B-0020AFBBCCFA';cb='http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,40,0';mt='audio/x-pn-realaudio-plugin';break}pl.src=tinyMCE.convertURL(pl.src,null,true);embedHTML=TinyMCE_MediaPlugin._getEmbed(ci,cb,mt,pl,attribs)}else{switch(attribs['class']){case'mceItemFlash':s='writeFlash';break;case'mceItemShockWave':s='writeShockWave';break;case'mceItemWindowsMedia':s='writeWindowsMedia';break;case'mceItemQuickTime':s='writeQuickTime';break;case'mceItemRealMedia':s='writeRealMedia';break}if(attribs.width)at=at.replace(/width:[^0-9]?[0-9]+%?[^0-9]?/g,"width:'"+attribs.width+"'");if(attribs.height)at=at.replace(/height:[^0-9]?[0-9]+%?[^0-9]?/g,"height:'"+attribs.height+"'");pl.src=tinyMCE.convertURL(pl.src,null,true);at=at.replace(new RegExp("src:'[^']*'","g"),"src:'"+pl.src+"'");embedHTML='<script type="text/javascript">'+s+'({'+at+'});</script>'}chunkBefore=content.substring(0,startPos);chunkAfter=content.substring(endPos);content=chunkBefore+embedHTML+chunkAfter}break}return content},handleNodeChange:function(editor_id,node,undo_index,undo_levels,visual_aid,any_selection){if(node==null)return;do{if(node.nodeName=="IMG"&&/mceItem(Flash|ShockWave|WindowsMedia|QuickTime|RealMedia)/.test(tinyMCE.getAttrib(node,'class'))){tinyMCE.switchClass(editor_id+'_media','mceButtonSelected');return true}}while((node=node.parentNode));tinyMCE.switchClass(editor_id+'_media','mceButtonNormal');return true},_createImgFromEmbed:function(n,d,cl){var ne,at,i,ti='',an;ne=d.createElement('img');ne.src=tinyMCE.getParam("theme_href")+'/images/spacer.gif';ne.width=tinyMCE.getAttrib(n,'width');ne.height=tinyMCE.getAttrib(n,'height');ne.className=cl;at=n.attributes;for(i=0;i<at.length;i++){if(at[i].specified&&at[i].nodeValue){an=at[i].nodeName.toLowerCase();if(an=='src')continue;if(an=='mce_src')an='src';if(an.indexOf('mce_')==-1&&!new RegExp('^(class|type)$').test(an))ti+=an.toLowerCase()+':\''+at[i].nodeValue+"',"}}ti=ti.length>0?ti.substring(0,ti.length-1):ti;ne.title=ti;n.parentNode.replaceChild(ne,n)},_createImg:function(cl,d,n){var i,nl,ti="",an,av,al=new Array();ne=d.createElement('img');ne.src=tinyMCE.getParam("theme_href")+'/images/spacer.gif';ne.width=tinyMCE.getAttrib(n,'width');ne.height=tinyMCE.getAttrib(n,'height');ne.className=cl;al.id=tinyMCE.getAttrib(n,'id');al.name=tinyMCE.getAttrib(n,'name');al.width=tinyMCE.getAttrib(n,'width');al.height=tinyMCE.getAttrib(n,'height');al.bgcolor=tinyMCE.getAttrib(n,'bgcolor');al.align=tinyMCE.getAttrib(n,'align');al.class_name=tinyMCE.getAttrib(n,'mce_class');nl=n.getElementsByTagName('div');for(i=0;i<nl.length;i++){av=tinyMCE.getAttrib(nl[i],'value');av=av.replace(new RegExp('\\\\','g'),'\\\\');av=av.replace(new RegExp('"','g'),'\\"');av=av.replace(new RegExp("'",'g'),"\\'");an=tinyMCE.getAttrib(nl[i],'name');al[an]=av}if(al.movie){al.src=al.movie;al.movie=null}for(an in al){if(al[an]!=null&&typeof(al[an])!="function"&&al[an]!='')ti+=an.toLowerCase()+':\''+al[an]+"',"}ti=ti.length>0?ti.substring(0,ti.length-1):ti;ne.title=ti;return ne},_getEmbed:function(cls,cb,mt,p,at){var h='',n;p.width=at.width?at.width:p.width;p.height=at.height?at.height:p.height;h+='<object classid="clsid:'+cls+'" codebase="'+cb+'"';h+=typeof(p.id)!="undefined"?' id="'+p.id+'"':'';h+=typeof(p.name)!="undefined"?' name="'+p.name+'"':'';h+=typeof(p.width)!="undefined"?' width="'+p.width+'"':'';h+=typeof(p.height)!="undefined"?' height="'+p.height+'"':'';h+=typeof(p.align)!="undefined"?' align="'+p.align+'"':'';h+='>';for(n in p){if(typeof(p[n])!="undefined"&&typeof(p[n])!="function"){h+='<param name="'+n+'" value="'+p[n]+'" />';if(n=='src'&&p[n].indexOf('://')!=-1&&mt=='application/x-mplayer2')h+='<param name="url" value="'+p[n]+'" />'}}h+='<embed type="'+mt+'"';for(n in p){if(typeof(p[n])=="function")continue;if(!(n=='url'&&mt=='application/x-mplayer2'))h+=' '+n+'="'+p[n]+'"'}h+='></embed></object>';return h},_parseAttributes:function(attribute_string){var attributeName="",endChr='"';var attributeValue="";var withInName;var withInValue;var attributes=new Array();var whiteSpaceRegExp=new RegExp('^[ \n\r\t]+','g');if(attribute_string==null||attribute_string.length<2)return null;withInName=withInValue=false;for(var i=0;i<attribute_string.length;i++){var chr=attribute_string.charAt(i);if((chr=='"'||chr=="'")&&!withInValue){withInValue=true;endChr=chr}else if(chr==endChr&&withInValue){withInValue=false;var pos=attributeName.lastIndexOf(' ');if(pos!=-1)attributeName=attributeName.substring(pos+1);attributes[attributeName.toLowerCase()]=attributeValue.substring(1);attributeName="";attributeValue=""}else if(!whiteSpaceRegExp.test(chr)&&!withInName&&!withInValue)withInName=true;if(chr=='='&&withInName)withInName=false;if(withInName)attributeName+=chr;if(withInValue)attributeValue+=chr}return attributes}};tinyMCE.addPlugin("media",TinyMCE_MediaPlugin); |
| | | (function(){var each=tinymce.each;tinymce.create('tinymce.plugins.MediaPlugin',{init:function(ed,url){var t=this;t.editor=ed;t.url=url;function isMediaElm(n){return/^(mceItemFlash|mceItemShockWave|mceItemWindowsMedia|mceItemQuickTime|mceItemRealMedia)$/.test(n.className);};ed.addCommand('mceMedia',function(){ed.windowManager.open({file:url+'/media.htm',width:430+parseInt(ed.getLang('media.delta_width',0)),height:470+parseInt(ed.getLang('media.delta_height',0)),inline:1},{plugin_url:url});});ed.addButton('media',{title:'media.desc',cmd:'mceMedia'});ed.onNodeChange.add(function(ed,cm,n){cm.setActive('media',n.nodeName=='IMG'&&isMediaElm(n));});ed.onInit.add(function(){var lo={mceItemFlash:'flash',mceItemShockWave:'shockwave',mceItemWindowsMedia:'windowsmedia',mceItemQuickTime:'quicktime',mceItemRealMedia:'realmedia'};if(ed.settings.content_css!==false)ed.dom.loadCSS(url+"/css/content.css");if(ed.theme.onResolveName){ed.theme.onResolveName.add(function(th,o){if(o.name=='img'){each(lo,function(v,k){if(ed.dom.hasClass(o.node,k)){o.name=v;o.title=ed.dom.getAttrib(o.node,'title');return false;}});}});}if(ed&&ed.plugins.contextmenu){ed.plugins.contextmenu.onContextMenu.add(function(th,m,e){if(e.nodeName=='IMG'&&/mceItem(Flash|ShockWave|WindowsMedia|QuickTime|RealMedia)/.test(e.className)){m.add({title:'media.edit',icon:'media',cmd:'mceMedia'});}});}});ed.onBeforeSetContent.add(function(ed,o){var h=o.content;h=h.replace(/<script[^>]*>\s*write(Flash|ShockWave|WindowsMedia|QuickTime|RealMedia)\(\{([^\)]*)\}\);\s*<\/script>/gi,function(a,b,c){var o=t._parse(c);return'<img class="mceItem'+b+'" title="'+ed.dom.encode(c)+'" src="'+url+'/img/trans.gif" width="'+o.width+'" height="'+o.height+'" />'});h=h.replace(/<object([^>]*)>/gi,'<span class="mceItemObject" $1>');h=h.replace(/<embed([^>]*)>/gi,'<span class="mceItemEmbed" $1>');h=h.replace(/<\/(object|embed)([^>]*)>/gi,'</span>');h=h.replace(/<param([^>]*)>/gi,function(a,b){return'<span '+b.replace(/value=/gi,'_value=')+' class="mceItemParam"></span>'});h=h.replace(/\/ class=\"mceItemParam\"><\/span>/gi,'class="mceItemParam"></span>');o.content=h;});ed.onSetContent.add(function(){t._spansToImgs(ed.getBody());});ed.onPreProcess.add(function(ed,o){var dom=ed.dom;if(o.set){t._spansToImgs(o.node);each(dom.select('IMG',o.node),function(n){var p;if(isMediaElm(n)){p=t._parse(n.title);dom.setAttrib(n,'width',dom.getAttrib(n,'width',p.width||100));dom.setAttrib(n,'height',dom.getAttrib(n,'height',p.height||100));}});}if(o.get){each(dom.select('IMG',o.node),function(n){var ci,cb,mt;if(ed.getParam('media_use_script')){if(isMediaElm(n))n.className=n.className.replace(/mceItem/g,'mceTemp');return;}switch(n.className){case'mceItemFlash':ci='d27cdb6e-ae6d-11cf-96b8-444553540000';cb='http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,40,0';mt='application/x-shockwave-flash';break;case'mceItemShockWave':ci='166b1bca-3f9c-11cf-8075-444553540000';cb='http://download.macromedia.com/pub/shockwave/cabs/director/sw.cab#version=8,5,1,0';mt='application/x-director';break;case'mceItemWindowsMedia':ci=ed.getParam('media_wmp6_compatible')?'05589fa1-c356-11ce-bf01-00aa0055595a':'6bf52a52-394a-11d3-b153-00c04f79faa6';cb='http://activex.microsoft.com/activex/controls/mplayer/en/nsmp2inf.cab#Version=5,1,52,701';mt='application/x-mplayer2';break;case'mceItemQuickTime':ci='02bf25d5-8c17-4b23-bc80-d3488abddc6b';cb='http://www.apple.com/qtactivex/qtplugin.cab#version=6,0,2,0';mt='video/quicktime';break;case'mceItemRealMedia':ci='cfcdaa03-8be4-11cf-b84b-0020afbbccfa';cb='http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,40,0';mt='audio/x-pn-realaudio-plugin';break;}if(ci){dom.replace(t._buildObj({classid:ci,codebase:cb,type:mt},n),n);}});}});ed.onPostProcess.add(function(ed,o){o.content=o.content.replace(/_value=/g,'value=');});if(ed.getParam('media_use_script')){function getAttr(s,n){n=new RegExp(n+'=\"([^\"]+)\"','g').exec(s);return n?ed.dom.decode(n[1]):'';};ed.onPostProcess.add(function(ed,o){o.content=o.content.replace(/<img[^>]+>/g,function(im){var cl=getAttr(im,'class');if(/^(mceTempFlash|mceTempShockWave|mceTempWindowsMedia|mceTempQuickTime|mceTempRealMedia)$/.test(cl)){at=t._parse(getAttr(im,'title'));at.width=getAttr(im,'width');at.height=getAttr(im,'height');im='<script type="text/javascript">write'+cl.substring(7)+'({'+t._serialize(at)+'});</script>';}return im;});});}},getInfo:function(){return{longname:'Media',author:'Moxiecode Systems AB',authorurl:'http://tinymce.moxiecode.com',infourl:'http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/media',version:tinymce.majorVersion+"."+tinymce.minorVersion};},_buildObj:function(o,n){var ob,ed=this.editor,dom=ed.dom,p=this._parse(n.title);p.width=o.width=dom.getAttrib(n,'width')||100;p.height=o.height=dom.getAttrib(n,'height')||100;ob=dom.create('span',{mce_name:'object',classid:"clsid:"+o.classid,codebase:o.codebase,width:o.width,height:o.height});if(p.src)p.src=ed.convertURL(p.src,'src',n);each(p,function(v,k){if(!/^(width|height|codebase|classid)$/.test(k)){if(o.type=='application/x-mplayer2'&&k=='src')k='url';dom.add(ob,'span',{mce_name:'param',name:k,'_value':v});}});dom.add(ob,'span',tinymce.extend({mce_name:'embed',type:o.type},p));return ob;},_spansToImgs:function(p){var t=this,dom=t.editor.dom,im,ci;each(dom.select('span',p),function(n){if(dom.getAttrib(n,'class')=='mceItemObject'){ci=dom.getAttrib(n,"classid").toLowerCase().replace(/\s+/g,'');switch(ci){case'clsid:d27cdb6e-ae6d-11cf-96b8-444553540000':dom.replace(t._createImg('mceItemFlash',n),n);break;case'clsid:166b1bca-3f9c-11cf-8075-444553540000':dom.replace(t._createImg('mceItemShockWave',n),n);break;case'clsid:6bf52a52-394a-11d3-b153-00c04f79faa6':case'clsid:22d6f312-b0f6-11d0-94ab-0080c74c7e95':case'clsid:05589fa1-c356-11ce-bf01-00aa0055595a':dom.replace(t._createImg('mceItemWindowsMedia',n),n);break;case'clsid:02bf25d5-8c17-4b23-bc80-d3488abddc6b':dom.replace(t._createImg('mceItemQuickTime',n),n);break;case'clsid:cfcdaa03-8be4-11cf-b84b-0020afbbccfa':dom.replace(t._createImg('mceItemRealMedia',n),n);break;default:dom.replace(t._createImg('mceItemFlash',n),n);}return;}if(dom.getAttrib(n,'class')=='mceItemEmbed'){switch(dom.getAttrib(n,'type')){case'application/x-shockwave-flash':dom.replace(t._createImg('mceItemFlash',n),n);break;case'application/x-director':dom.replace(t._createImg('mceItemShockWave',n),n);break;case'application/x-mplayer2':dom.replace(t._createImg('mceItemWindowsMedia',n),n);break;case'video/quicktime':dom.replace(t._createImg('mceItemQuickTime',n),n);break;case'audio/x-pn-realaudio-plugin':dom.replace(t._createImg('mceItemRealMedia',n),n);break;default:dom.replace(t._createImg('mceItemFlash',n),n);}}});},_createImg:function(cl,n){var im,dom=this.editor.dom,pa={},ti='';im=dom.create('img',{src:this.url+'/img/trans.gif',width:dom.getAttrib(n,'width')||100,height:dom.getAttrib(n,'height')||100,'class':cl});each(['id','name','width','height','bgcolor','align','flashvars','src','wmode'],function(na){var v=dom.getAttrib(n,na);if(v)pa[na]=v;});each(dom.select('span',n),function(n){if(dom.hasClass(n,'mceItemParam'))pa[dom.getAttrib(n,'name')]=dom.getAttrib(n,'_value');});if(pa.movie){pa.src=pa.movie;delete pa.movie;}delete pa.width;delete pa.height;im.title=this._serialize(pa);return im;},_parse:function(s){return tinymce.util.JSON.parse('{'+s+'}');},_serialize:function(o){return tinymce.util.JSON.serialize(o).replace(/[{}]/g,'');}});tinymce.PluginManager.add('media',tinymce.plugins.MediaPlugin);})(); |
| | |
| | | /** |
| | | * $Id: editor_plugin_src.js 296 2007-08-21 10:36:35Z spocke $ |
| | | * |
| | | * @author Moxiecode |
| | | * @copyright Copyright © 2004-2007, Moxiecode Systems AB, All rights reserved. |
| | | */ |
| | | |
| | | /* Import plugin specific language pack */ |
| | | tinyMCE.importPluginLanguagePack('media'); |
| | | |
| | | var TinyMCE_MediaPlugin = { |
| | | getInfo : function() { |
| | | return { |
| | | longname : 'Media', |
| | | author : 'Moxiecode Systems AB', |
| | | authorurl : 'http://tinymce.moxiecode.com', |
| | | infourl : 'http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/media', |
| | | version : tinyMCE.majorVersion + "." + tinyMCE.minorVersion |
| | | }; |
| | | }, |
| | | |
| | | initInstance : function(inst) { |
| | | // Warn if user has flash plugin and media plugin at the same time |
| | | if (inst.hasPlugin('flash') && !tinyMCE.flashWarn) { |
| | | alert('Flash plugin is deprecated and should not be used together with the media plugin.'); |
| | | tinyMCE.flashWarn = true; |
| | | } |
| | | |
| | | if (!tinyMCE.settings['media_skip_plugin_css']) |
| | | tinyMCE.importCSS(inst.getDoc(), tinyMCE.baseURL + "/plugins/media/css/content.css"); |
| | | }, |
| | | |
| | | getControlHTML : function(cn) { |
| | | switch (cn) { |
| | | case "media": |
| | | return tinyMCE.getButtonHTML(cn, 'lang_media_desc', '{$pluginurl}/images/media.gif', 'mceMedia'); |
| | | } |
| | | |
| | | return ""; |
| | | }, |
| | | |
| | | execCommand : function(editor_id, element, command, user_interface, value) { |
| | | // Handle commands |
| | | switch (command) { |
| | | case "mceMedia": |
| | | tinyMCE.openWindow({ |
| | | file : '../../plugins/media/media.htm', |
| | | width : 430 + tinyMCE.getLang('lang_media_delta_width', 0), |
| | | height : 470 + tinyMCE.getLang('lang_media_delta_height', 0) |
| | | }, { |
| | | editor_id : editor_id, |
| | | inline : "yes" |
| | | }); |
| | | |
| | | return true; |
| | | } |
| | | |
| | | // Pass to next handler in chain |
| | | return false; |
| | | }, |
| | | |
| | | cleanup : function(type, content, inst) { |
| | | var nl, img, i, ne, d, s, ci; |
| | | |
| | | switch (type) { |
| | | case "insert_to_editor": |
| | | img = tinyMCE.getParam("theme_href") + '/images/spacer.gif'; |
| | | content = content.replace(/<script[^>]*>\s*write(Flash|ShockWave|WindowsMedia|QuickTime|RealMedia)\(\{([^\)]*)\}\);\s*<\/script>/gi, '<img class="mceItem$1" title="$2" src="' + img + '" />'); |
| | | content = content.replace(/<object([^>]*)>/gi, '<div class="mceItemObject" $1>'); |
| | | content = content.replace(/<embed([^>]*)>/gi, '<div class="mceItemObjectEmbed" $1>'); |
| | | content = content.replace(/<\/(object|embed)([^>]*)>/gi, '</div>'); |
| | | content = content.replace(/<param([^>]*)>/gi, '<div $1 class="mceItemParam"></div>'); |
| | | content = content.replace(new RegExp('\\/ class="mceItemParam"><\\/div>', 'gi'), 'class="mceItemParam"></div>'); |
| | | break; |
| | | |
| | | case "insert_to_editor_dom": |
| | | d = inst.getDoc(); |
| | | nl = content.getElementsByTagName("img"); |
| | | for (i=0; i<nl.length; i++) { |
| | | if (/mceItem(Flash|ShockWave|WindowsMedia|QuickTime|RealMedia)/.test(nl[i].className)) { |
| | | nl[i].width = nl[i].title.replace(/.*width:[^0-9]?([0-9]+)%?.*/g, '$1'); |
| | | nl[i].height = nl[i].title.replace(/.*height:[^0-9]?([0-9]+)%?.*/g, '$1'); |
| | | //nl[i].align = nl[i].title.replace(/.*align:([a-z]+).*/gi, '$1'); |
| | | } |
| | | } |
| | | |
| | | nl = tinyMCE.selectElements(content, 'DIV', function (n) {return tinyMCE.hasCSSClass(n, 'mceItemObject');}); |
| | | for (i=0; i<nl.length; i++) { |
| | | ci = tinyMCE.getAttrib(nl[i], "classid").toLowerCase().replace(/\s+/g, ''); |
| | | |
| | | switch (ci) { |
| | | case 'clsid:d27cdb6e-ae6d-11cf-96b8-444553540000': |
| | | nl[i].parentNode.replaceChild(TinyMCE_MediaPlugin._createImg('mceItemFlash', d, nl[i]), nl[i]); |
| | | break; |
| | | |
| | | case 'clsid:166b1bca-3f9c-11cf-8075-444553540000': |
| | | nl[i].parentNode.replaceChild(TinyMCE_MediaPlugin._createImg('mceItemShockWave', d, nl[i]), nl[i]); |
| | | break; |
| | | |
| | | case 'clsid:6bf52a52-394a-11d3-b153-00c04f79faa6': |
| | | case 'clsid:22d6f312-b0f6-11d0-94ab-0080c74c7e95': |
| | | case 'clsid:05589fa1-c356-11ce-bf01-00aa0055595a': |
| | | nl[i].parentNode.replaceChild(TinyMCE_MediaPlugin._createImg('mceItemWindowsMedia', d, nl[i]), nl[i]); |
| | | break; |
| | | |
| | | case 'clsid:02bf25d5-8c17-4b23-bc80-d3488abddc6b': |
| | | nl[i].parentNode.replaceChild(TinyMCE_MediaPlugin._createImg('mceItemQuickTime', d, nl[i]), nl[i]); |
| | | break; |
| | | |
| | | case 'clsid:cfcdaa03-8be4-11cf-b84b-0020afbbccfa': |
| | | nl[i].parentNode.replaceChild(TinyMCE_MediaPlugin._createImg('mceItemRealMedia', d, nl[i]), nl[i]); |
| | | break; |
| | | } |
| | | } |
| | | |
| | | // Handle embed (if any) |
| | | nl = tinyMCE.selectNodes(content, function (n) {return n.className == 'mceItemObjectEmbed';}); |
| | | for (i=0; i<nl.length; i++) { |
| | | switch (tinyMCE.getAttrib(nl[i], 'type')) { |
| | | case 'application/x-shockwave-flash': |
| | | TinyMCE_MediaPlugin._createImgFromEmbed(nl[i], d, 'mceItemFlash'); |
| | | break; |
| | | |
| | | case 'application/x-director': |
| | | TinyMCE_MediaPlugin._createImgFromEmbed(nl[i], d, 'mceItemShockWave'); |
| | | break; |
| | | |
| | | case 'application/x-mplayer2': |
| | | TinyMCE_MediaPlugin._createImgFromEmbed(nl[i], d, 'mceItemWindowsMedia'); |
| | | break; |
| | | |
| | | case 'video/quicktime': |
| | | TinyMCE_MediaPlugin._createImgFromEmbed(nl[i], d, 'mceItemQuickTime'); |
| | | break; |
| | | |
| | | case 'audio/x-pn-realaudio-plugin': |
| | | TinyMCE_MediaPlugin._createImgFromEmbed(nl[i], d, 'mceItemRealMedia'); |
| | | break; |
| | | } |
| | | } |
| | | break; |
| | | |
| | | case "get_from_editor": |
| | | var startPos = -1, endPos, attribs, chunkBefore, chunkAfter, embedHTML, at, pl, cb, mt, ex; |
| | | |
| | | while ((startPos = content.indexOf('<img', startPos+1)) != -1) { |
| | | endPos = content.indexOf('/>', startPos); |
| | | attribs = TinyMCE_MediaPlugin._parseAttributes(content.substring(startPos + 4, endPos)); |
| | | |
| | | // Is not flash, skip it |
| | | if (!/mceItem(Flash|ShockWave|WindowsMedia|QuickTime|RealMedia)/.test(attribs['class'])) |
| | | continue; |
| | | |
| | | endPos += 2; |
| | | |
| | | // Parse attributes |
| | | at = attribs['title']; |
| | | if (at) { |
| | | at = at.replace(/&(#39|apos);/g, "'"); |
| | | at = at.replace(/&#quot;/g, '"'); |
| | | |
| | | try { |
| | | pl = eval('x={' + at + '};'); |
| | | } catch (ex) { |
| | | pl = {}; |
| | | } |
| | | } |
| | | |
| | | // Use object/embed |
| | | if (!tinyMCE.getParam('media_use_script', false)) { |
| | | switch (attribs['class']) { |
| | | case 'mceItemFlash': |
| | | ci = 'd27cdb6e-ae6d-11cf-96b8-444553540000'; |
| | | cb = 'http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,40,0'; |
| | | mt = 'application/x-shockwave-flash'; |
| | | break; |
| | | |
| | | case 'mceItemShockWave': |
| | | ci = '166B1BCA-3F9C-11CF-8075-444553540000'; |
| | | cb = 'http://download.macromedia.com/pub/shockwave/cabs/director/sw.cab#version=8,5,1,0'; |
| | | mt = 'application/x-director'; |
| | | break; |
| | | |
| | | case 'mceItemWindowsMedia': |
| | | ci = tinyMCE.getParam('media_wmp6_compatible') ? '05589FA1-C356-11CE-BF01-00AA0055595A' : '6BF52A52-394A-11D3-B153-00C04F79FAA6'; |
| | | cb = 'http://activex.microsoft.com/activex/controls/mplayer/en/nsmp2inf.cab#Version=5,1,52,701'; |
| | | mt = 'application/x-mplayer2'; |
| | | break; |
| | | |
| | | case 'mceItemQuickTime': |
| | | ci = '02BF25D5-8C17-4B23-BC80-D3488ABDDC6B'; |
| | | cb = 'http://www.apple.com/qtactivex/qtplugin.cab#version=6,0,2,0'; |
| | | mt = 'video/quicktime'; |
| | | break; |
| | | |
| | | case 'mceItemRealMedia': |
| | | ci = 'CFCDAA03-8BE4-11cf-B84B-0020AFBBCCFA'; |
| | | cb = 'http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,40,0'; |
| | | mt = 'audio/x-pn-realaudio-plugin'; |
| | | break; |
| | | } |
| | | |
| | | // Convert the URL |
| | | pl.src = tinyMCE.convertURL(pl.src, null, true); |
| | | |
| | | embedHTML = TinyMCE_MediaPlugin._getEmbed(ci, cb, mt, pl, attribs); |
| | | } else { |
| | | // Use script version |
| | | switch (attribs['class']) { |
| | | case 'mceItemFlash': |
| | | s = 'writeFlash'; |
| | | break; |
| | | |
| | | case 'mceItemShockWave': |
| | | s = 'writeShockWave'; |
| | | break; |
| | | |
| | | case 'mceItemWindowsMedia': |
| | | s = 'writeWindowsMedia'; |
| | | break; |
| | | |
| | | case 'mceItemQuickTime': |
| | | s = 'writeQuickTime'; |
| | | break; |
| | | |
| | | case 'mceItemRealMedia': |
| | | s = 'writeRealMedia'; |
| | | break; |
| | | } |
| | | |
| | | if (attribs.width) |
| | | at = at.replace(/width:[^0-9]?[0-9]+%?[^0-9]?/g, "width:'" + attribs.width + "'"); |
| | | |
| | | if (attribs.height) |
| | | at = at.replace(/height:[^0-9]?[0-9]+%?[^0-9]?/g, "height:'" + attribs.height + "'"); |
| | | |
| | | // Force absolute URL |
| | | pl.src = tinyMCE.convertURL(pl.src, null, true); |
| | | at = at.replace(new RegExp("src:'[^']*'", "g"), "src:'" + pl.src + "'"); |
| | | |
| | | embedHTML = '<script type="text/javascript">' + s + '({' + at + '});</script>'; |
| | | } |
| | | |
| | | // Insert embed/object chunk |
| | | chunkBefore = content.substring(0, startPos); |
| | | chunkAfter = content.substring(endPos); |
| | | content = chunkBefore + embedHTML + chunkAfter; |
| | | } |
| | | break; |
| | | } |
| | | |
| | | return content; |
| | | }, |
| | | |
| | | handleNodeChange : function(editor_id, node, undo_index, undo_levels, visual_aid, any_selection) { |
| | | if (node == null) |
| | | return; |
| | | |
| | | do { |
| | | if (node.nodeName == "IMG" && /mceItem(Flash|ShockWave|WindowsMedia|QuickTime|RealMedia)/.test(tinyMCE.getAttrib(node, 'class'))) { |
| | | tinyMCE.switchClass(editor_id + '_media', 'mceButtonSelected'); |
| | | return true; |
| | | } |
| | | } while ((node = node.parentNode)); |
| | | |
| | | tinyMCE.switchClass(editor_id + '_media', 'mceButtonNormal'); |
| | | |
| | | return true; |
| | | }, |
| | | |
| | | _createImgFromEmbed : function(n, d, cl) { |
| | | var ne, at, i, ti = '', an; |
| | | |
| | | ne = d.createElement('img'); |
| | | ne.src = tinyMCE.getParam("theme_href") + '/images/spacer.gif'; |
| | | ne.width = tinyMCE.getAttrib(n, 'width'); |
| | | ne.height = tinyMCE.getAttrib(n, 'height'); |
| | | ne.className = cl; |
| | | |
| | | at = n.attributes; |
| | | for (i=0; i<at.length; i++) { |
| | | if (at[i].specified && at[i].nodeValue) { |
| | | an = at[i].nodeName.toLowerCase(); |
| | | |
| | | if (an == 'src') |
| | | continue; |
| | | |
| | | if (an == 'mce_src') |
| | | an = 'src'; |
| | | |
| | | if (an.indexOf('mce_') == -1 && !new RegExp('^(class|type)$').test(an)) |
| | | ti += an.toLowerCase() + ':\'' + at[i].nodeValue + "',"; |
| | | } |
| | | } |
| | | |
| | | ti = ti.length > 0 ? ti.substring(0, ti.length - 1) : ti; |
| | | ne.title = ti; |
| | | |
| | | n.parentNode.replaceChild(ne, n); |
| | | }, |
| | | |
| | | _createImg : function(cl, d, n) { |
| | | var i, nl, ti = "", an, av, al = new Array(); |
| | | |
| | | ne = d.createElement('img'); |
| | | ne.src = tinyMCE.getParam("theme_href") + '/images/spacer.gif'; |
| | | ne.width = tinyMCE.getAttrib(n, 'width'); |
| | | ne.height = tinyMCE.getAttrib(n, 'height'); |
| | | ne.className = cl; |
| | | |
| | | al.id = tinyMCE.getAttrib(n, 'id'); |
| | | al.name = tinyMCE.getAttrib(n, 'name'); |
| | | al.width = tinyMCE.getAttrib(n, 'width'); |
| | | al.height = tinyMCE.getAttrib(n, 'height'); |
| | | al.bgcolor = tinyMCE.getAttrib(n, 'bgcolor'); |
| | | al.align = tinyMCE.getAttrib(n, 'align'); |
| | | al.class_name = tinyMCE.getAttrib(n, 'mce_class'); |
| | | |
| | | nl = n.getElementsByTagName('div'); |
| | | for (i=0; i<nl.length; i++) { |
| | | av = tinyMCE.getAttrib(nl[i], 'value'); |
| | | av = av.replace(new RegExp('\\\\', 'g'), '\\\\'); |
| | | av = av.replace(new RegExp('"', 'g'), '\\"'); |
| | | av = av.replace(new RegExp("'", 'g'), "\\'"); |
| | | an = tinyMCE.getAttrib(nl[i], 'name'); |
| | | al[an] = av; |
| | | } |
| | | |
| | | if (al.movie) { |
| | | al.src = al.movie; |
| | | al.movie = null; |
| | | } |
| | | |
| | | for (an in al) { |
| | | if (al[an] != null && typeof(al[an]) != "function" && al[an] != '') |
| | | ti += an.toLowerCase() + ':\'' + al[an] + "',"; |
| | | } |
| | | |
| | | ti = ti.length > 0 ? ti.substring(0, ti.length - 1) : ti; |
| | | ne.title = ti; |
| | | |
| | | return ne; |
| | | }, |
| | | |
| | | _getEmbed : function(cls, cb, mt, p, at) { |
| | | var h = '', n; |
| | | |
| | | p.width = at.width ? at.width : p.width; |
| | | p.height = at.height ? at.height : p.height; |
| | | |
| | | h += '<object classid="clsid:' + cls + '" codebase="' + cb + '"'; |
| | | h += typeof(p.id) != "undefined" ? ' id="' + p.id + '"' : ''; |
| | | h += typeof(p.name) != "undefined" ? ' name="' + p.name + '"' : ''; |
| | | h += typeof(p.width) != "undefined" ? ' width="' + p.width + '"' : ''; |
| | | h += typeof(p.height) != "undefined" ? ' height="' + p.height + '"' : ''; |
| | | h += typeof(p.align) != "undefined" ? ' align="' + p.align + '"' : ''; |
| | | h += '>'; |
| | | |
| | | for (n in p) { |
| | | if (typeof(p[n]) != "undefined" && typeof(p[n]) != "function") { |
| | | h += '<param name="' + n + '" value="' + p[n] + '" />'; |
| | | |
| | | // Add extra url parameter if it's an absolute URL on WMP |
| | | if (n == 'src' && p[n].indexOf('://') != -1 && mt == 'application/x-mplayer2') |
| | | h += '<param name="url" value="' + p[n] + '" />'; |
| | | } |
| | | } |
| | | |
| | | h += '<embed type="' + mt + '"'; |
| | | |
| | | for (n in p) { |
| | | if (typeof(p[n]) == "function") |
| | | continue; |
| | | |
| | | // Skip url parameter for embed tag on WMP |
| | | if (!(n == 'url' && mt == 'application/x-mplayer2')) |
| | | h += ' ' + n + '="' + p[n] + '"'; |
| | | } |
| | | |
| | | h += '></embed></object>'; |
| | | |
| | | return h; |
| | | }, |
| | | |
| | | _parseAttributes : function(attribute_string) { |
| | | var attributeName = "", endChr = '"'; |
| | | var attributeValue = ""; |
| | | var withInName; |
| | | var withInValue; |
| | | var attributes = new Array(); |
| | | var whiteSpaceRegExp = new RegExp('^[ \n\r\t]+', 'g'); |
| | | |
| | | if (attribute_string == null || attribute_string.length < 2) |
| | | return null; |
| | | |
| | | withInName = withInValue = false; |
| | | |
| | | for (var i=0; i<attribute_string.length; i++) { |
| | | var chr = attribute_string.charAt(i); |
| | | |
| | | if ((chr == '"' || chr == "'") && !withInValue) { |
| | | withInValue = true; |
| | | endChr = chr; |
| | | } else if (chr == endChr && withInValue) { |
| | | withInValue = false; |
| | | |
| | | var pos = attributeName.lastIndexOf(' '); |
| | | if (pos != -1) |
| | | attributeName = attributeName.substring(pos+1); |
| | | |
| | | attributes[attributeName.toLowerCase()] = attributeValue.substring(1); |
| | | |
| | | attributeName = ""; |
| | | attributeValue = ""; |
| | | } else if (!whiteSpaceRegExp.test(chr) && !withInName && !withInValue) |
| | | withInName = true; |
| | | |
| | | if (chr == '=' && withInName) |
| | | withInName = false; |
| | | |
| | | if (withInName) |
| | | attributeName += chr; |
| | | |
| | | if (withInValue) |
| | | attributeValue += chr; |
| | | } |
| | | |
| | | return attributes; |
| | | } |
| | | }; |
| | | |
| | | tinyMCE.addPlugin("media", TinyMCE_MediaPlugin); |
| | | /**
|
| | | * $Id: editor_plugin_src.js 763 2008-04-03 13:25:45Z spocke $
|
| | | *
|
| | | * @author Moxiecode
|
| | | * @copyright Copyright © 2004-2008, Moxiecode Systems AB, All rights reserved.
|
| | | */
|
| | |
|
| | | (function() {
|
| | | var each = tinymce.each;
|
| | |
|
| | | tinymce.create('tinymce.plugins.MediaPlugin', {
|
| | | init : function(ed, url) {
|
| | | var t = this;
|
| | | |
| | | t.editor = ed;
|
| | | t.url = url;
|
| | |
|
| | | function isMediaElm(n) {
|
| | | return /^(mceItemFlash|mceItemShockWave|mceItemWindowsMedia|mceItemQuickTime|mceItemRealMedia)$/.test(n.className);
|
| | | };
|
| | |
|
| | | // Register commands
|
| | | ed.addCommand('mceMedia', function() {
|
| | | ed.windowManager.open({
|
| | | file : url + '/media.htm',
|
| | | width : 430 + parseInt(ed.getLang('media.delta_width', 0)),
|
| | | height : 470 + parseInt(ed.getLang('media.delta_height', 0)),
|
| | | inline : 1
|
| | | }, {
|
| | | plugin_url : url
|
| | | });
|
| | | });
|
| | |
|
| | | // Register buttons
|
| | | ed.addButton('media', {title : 'media.desc', cmd : 'mceMedia'});
|
| | |
|
| | | ed.onNodeChange.add(function(ed, cm, n) {
|
| | | cm.setActive('media', n.nodeName == 'IMG' && isMediaElm(n));
|
| | | });
|
| | |
|
| | | ed.onInit.add(function() {
|
| | | var lo = {
|
| | | mceItemFlash : 'flash',
|
| | | mceItemShockWave : 'shockwave',
|
| | | mceItemWindowsMedia : 'windowsmedia',
|
| | | mceItemQuickTime : 'quicktime',
|
| | | mceItemRealMedia : 'realmedia'
|
| | | };
|
| | |
|
| | | if (ed.settings.content_css !== false)
|
| | | ed.dom.loadCSS(url + "/css/content.css");
|
| | |
|
| | | if (ed.theme.onResolveName) {
|
| | | ed.theme.onResolveName.add(function(th, o) {
|
| | | if (o.name == 'img') {
|
| | | each(lo, function(v, k) {
|
| | | if (ed.dom.hasClass(o.node, k)) {
|
| | | o.name = v;
|
| | | o.title = ed.dom.getAttrib(o.node, 'title');
|
| | | return false;
|
| | | }
|
| | | });
|
| | | }
|
| | | });
|
| | | }
|
| | |
|
| | | if (ed && ed.plugins.contextmenu) {
|
| | | ed.plugins.contextmenu.onContextMenu.add(function(th, m, e) {
|
| | | if (e.nodeName == 'IMG' && /mceItem(Flash|ShockWave|WindowsMedia|QuickTime|RealMedia)/.test(e.className)) {
|
| | | m.add({title : 'media.edit', icon : 'media', cmd : 'mceMedia'});
|
| | | }
|
| | | });
|
| | | }
|
| | | });
|
| | |
|
| | | ed.onBeforeSetContent.add(function(ed, o) {
|
| | | var h = o.content;
|
| | |
|
| | | h = h.replace(/<script[^>]*>\s*write(Flash|ShockWave|WindowsMedia|QuickTime|RealMedia)\(\{([^\)]*)\}\);\s*<\/script>/gi, function(a, b, c) {
|
| | | var o = t._parse(c);
|
| | |
|
| | | return '<img class="mceItem' + b + '" title="' + ed.dom.encode(c) + '" src="' + url + '/img/trans.gif" width="' + o.width + '" height="' + o.height + '" />'
|
| | | });
|
| | |
|
| | | h = h.replace(/<object([^>]*)>/gi, '<span class="mceItemObject" $1>');
|
| | | h = h.replace(/<embed([^>]*)>/gi, '<span class="mceItemEmbed" $1>');
|
| | | h = h.replace(/<\/(object|embed)([^>]*)>/gi, '</span>');
|
| | | h = h.replace(/<param([^>]*)>/gi, function(a, b) {return '<span ' + b.replace(/value=/gi, '_value=') + ' class="mceItemParam"></span>'});
|
| | | h = h.replace(/\/ class=\"mceItemParam\"><\/span>/gi, 'class="mceItemParam"></span>');
|
| | |
|
| | | o.content = h;
|
| | | });
|
| | |
|
| | | ed.onSetContent.add(function() {
|
| | | t._spansToImgs(ed.getBody());
|
| | | });
|
| | |
|
| | | ed.onPreProcess.add(function(ed, o) {
|
| | | var dom = ed.dom;
|
| | |
|
| | | if (o.set) {
|
| | | t._spansToImgs(o.node);
|
| | |
|
| | | each(dom.select('IMG', o.node), function(n) {
|
| | | var p;
|
| | |
|
| | | if (isMediaElm(n)) {
|
| | | p = t._parse(n.title);
|
| | | dom.setAttrib(n, 'width', dom.getAttrib(n, 'width', p.width || 100));
|
| | | dom.setAttrib(n, 'height', dom.getAttrib(n, 'height', p.height || 100));
|
| | | }
|
| | | });
|
| | | }
|
| | |
|
| | | if (o.get) {
|
| | | each(dom.select('IMG', o.node), function(n) {
|
| | | var ci, cb, mt;
|
| | |
|
| | | if (ed.getParam('media_use_script')) {
|
| | | if (isMediaElm(n))
|
| | | n.className = n.className.replace(/mceItem/g, 'mceTemp');
|
| | |
|
| | | return;
|
| | | }
|
| | |
|
| | | switch (n.className) {
|
| | | case 'mceItemFlash':
|
| | | ci = 'd27cdb6e-ae6d-11cf-96b8-444553540000';
|
| | | cb = 'http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,40,0';
|
| | | mt = 'application/x-shockwave-flash';
|
| | | break;
|
| | |
|
| | | case 'mceItemShockWave':
|
| | | ci = '166b1bca-3f9c-11cf-8075-444553540000';
|
| | | cb = 'http://download.macromedia.com/pub/shockwave/cabs/director/sw.cab#version=8,5,1,0';
|
| | | mt = 'application/x-director';
|
| | | break;
|
| | |
|
| | | case 'mceItemWindowsMedia':
|
| | | ci = ed.getParam('media_wmp6_compatible') ? '05589fa1-c356-11ce-bf01-00aa0055595a' : '6bf52a52-394a-11d3-b153-00c04f79faa6';
|
| | | cb = 'http://activex.microsoft.com/activex/controls/mplayer/en/nsmp2inf.cab#Version=5,1,52,701';
|
| | | mt = 'application/x-mplayer2';
|
| | | break;
|
| | |
|
| | | case 'mceItemQuickTime':
|
| | | ci = '02bf25d5-8c17-4b23-bc80-d3488abddc6b';
|
| | | cb = 'http://www.apple.com/qtactivex/qtplugin.cab#version=6,0,2,0';
|
| | | mt = 'video/quicktime';
|
| | | break;
|
| | |
|
| | | case 'mceItemRealMedia':
|
| | | ci = 'cfcdaa03-8be4-11cf-b84b-0020afbbccfa';
|
| | | cb = 'http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,40,0';
|
| | | mt = 'audio/x-pn-realaudio-plugin';
|
| | | break;
|
| | | }
|
| | |
|
| | | if (ci) {
|
| | | dom.replace(t._buildObj({
|
| | | classid : ci,
|
| | | codebase : cb,
|
| | | type : mt
|
| | | }, n), n);
|
| | | }
|
| | | });
|
| | | }
|
| | | });
|
| | |
|
| | | ed.onPostProcess.add(function(ed, o) {
|
| | | o.content = o.content.replace(/_value=/g, 'value=');
|
| | | });
|
| | |
|
| | | if (ed.getParam('media_use_script')) {
|
| | | function getAttr(s, n) {
|
| | | n = new RegExp(n + '=\"([^\"]+)\"', 'g').exec(s);
|
| | |
|
| | | return n ? ed.dom.decode(n[1]) : '';
|
| | | };
|
| | |
|
| | | ed.onPostProcess.add(function(ed, o) {
|
| | | o.content = o.content.replace(/<img[^>]+>/g, function(im) {
|
| | | var cl = getAttr(im, 'class');
|
| | |
|
| | | if (/^(mceTempFlash|mceTempShockWave|mceTempWindowsMedia|mceTempQuickTime|mceTempRealMedia)$/.test(cl)) {
|
| | | at = t._parse(getAttr(im, 'title'));
|
| | | at.width = getAttr(im, 'width');
|
| | | at.height = getAttr(im, 'height');
|
| | | im = '<script type="text/javascript">write' + cl.substring(7) + '({' + t._serialize(at) + '});</script>';
|
| | | }
|
| | |
|
| | | return im;
|
| | | });
|
| | | });
|
| | | }
|
| | | },
|
| | |
|
| | | getInfo : function() {
|
| | | return {
|
| | | longname : 'Media',
|
| | | author : 'Moxiecode Systems AB',
|
| | | authorurl : 'http://tinymce.moxiecode.com',
|
| | | infourl : 'http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/media',
|
| | | version : tinymce.majorVersion + "." + tinymce.minorVersion
|
| | | };
|
| | | },
|
| | |
|
| | | // Private methods
|
| | |
|
| | | _buildObj : function(o, n) {
|
| | | var ob, ed = this.editor, dom = ed.dom, p = this._parse(n.title);
|
| | |
|
| | | p.width = o.width = dom.getAttrib(n, 'width') || 100;
|
| | | p.height = o.height = dom.getAttrib(n, 'height') || 100;
|
| | |
|
| | | ob = dom.create('span', {
|
| | | mce_name : 'object',
|
| | | classid : "clsid:" + o.classid,
|
| | | codebase : o.codebase,
|
| | | width : o.width,
|
| | | height : o.height
|
| | | });
|
| | |
|
| | | if (p.src)
|
| | | p.src = ed.convertURL(p.src, 'src', n);
|
| | |
|
| | | each (p, function(v, k) {
|
| | | if (!/^(width|height|codebase|classid)$/.test(k)) {
|
| | | // Use url instead of src in IE for Windows media
|
| | | if (o.type == 'application/x-mplayer2' && k == 'src')
|
| | | k = 'url';
|
| | |
|
| | | dom.add(ob, 'span', {mce_name : 'param', name : k, '_value' : v});
|
| | | }
|
| | | });
|
| | |
|
| | | dom.add(ob, 'span', tinymce.extend({mce_name : 'embed', type : o.type}, p));
|
| | |
|
| | | return ob;
|
| | | },
|
| | |
|
| | | _spansToImgs : function(p) {
|
| | | var t = this, dom = t.editor.dom, im, ci;
|
| | |
|
| | | each(dom.select('span', p), function(n) {
|
| | | // Convert object into image
|
| | | if (dom.getAttrib(n, 'class') == 'mceItemObject') {
|
| | | ci = dom.getAttrib(n, "classid").toLowerCase().replace(/\s+/g, '');
|
| | |
|
| | | switch (ci) {
|
| | | case 'clsid:d27cdb6e-ae6d-11cf-96b8-444553540000':
|
| | | dom.replace(t._createImg('mceItemFlash', n), n);
|
| | | break;
|
| | |
|
| | | case 'clsid:166b1bca-3f9c-11cf-8075-444553540000':
|
| | | dom.replace(t._createImg('mceItemShockWave', n), n);
|
| | | break;
|
| | |
|
| | | case 'clsid:6bf52a52-394a-11d3-b153-00c04f79faa6':
|
| | | case 'clsid:22d6f312-b0f6-11d0-94ab-0080c74c7e95':
|
| | | case 'clsid:05589fa1-c356-11ce-bf01-00aa0055595a':
|
| | | dom.replace(t._createImg('mceItemWindowsMedia', n), n);
|
| | | break;
|
| | |
|
| | | case 'clsid:02bf25d5-8c17-4b23-bc80-d3488abddc6b':
|
| | | dom.replace(t._createImg('mceItemQuickTime', n), n);
|
| | | break;
|
| | |
|
| | | case 'clsid:cfcdaa03-8be4-11cf-b84b-0020afbbccfa':
|
| | | dom.replace(t._createImg('mceItemRealMedia', n), n);
|
| | | break;
|
| | |
|
| | | default:
|
| | | dom.replace(t._createImg('mceItemFlash', n), n);
|
| | | }
|
| | | |
| | | return;
|
| | | }
|
| | |
|
| | | // Convert embed into image
|
| | | if (dom.getAttrib(n, 'class') == 'mceItemEmbed') {
|
| | | switch (dom.getAttrib(n, 'type')) {
|
| | | case 'application/x-shockwave-flash':
|
| | | dom.replace(t._createImg('mceItemFlash', n), n);
|
| | | break;
|
| | |
|
| | | case 'application/x-director':
|
| | | dom.replace(t._createImg('mceItemShockWave', n), n);
|
| | | break;
|
| | |
|
| | | case 'application/x-mplayer2':
|
| | | dom.replace(t._createImg('mceItemWindowsMedia', n), n);
|
| | | break;
|
| | |
|
| | | case 'video/quicktime':
|
| | | dom.replace(t._createImg('mceItemQuickTime', n), n);
|
| | | break;
|
| | |
|
| | | case 'audio/x-pn-realaudio-plugin':
|
| | | dom.replace(t._createImg('mceItemRealMedia', n), n);
|
| | | break;
|
| | |
|
| | | default:
|
| | | dom.replace(t._createImg('mceItemFlash', n), n);
|
| | | }
|
| | | } |
| | | });
|
| | | },
|
| | |
|
| | | _createImg : function(cl, n) {
|
| | | var im, dom = this.editor.dom, pa = {}, ti = '';
|
| | |
|
| | | // Create image
|
| | | im = dom.create('img', {
|
| | | src : this.url + '/img/trans.gif',
|
| | | width : dom.getAttrib(n, 'width') || 100,
|
| | | height : dom.getAttrib(n, 'height') || 100,
|
| | | 'class' : cl
|
| | | });
|
| | |
|
| | | // Setup base parameters
|
| | | each(['id', 'name', 'width', 'height', 'bgcolor', 'align', 'flashvars', 'src', 'wmode'], function(na) {
|
| | | var v = dom.getAttrib(n, na);
|
| | |
|
| | | if (v)
|
| | | pa[na] = v;
|
| | | });
|
| | |
|
| | | // Add optional parameters
|
| | | each(dom.select('span', n), function(n) {
|
| | | if (dom.hasClass(n, 'mceItemParam'))
|
| | | pa[dom.getAttrib(n, 'name')] = dom.getAttrib(n, '_value');
|
| | | });
|
| | |
|
| | | // Use src not movie
|
| | | if (pa.movie) {
|
| | | pa.src = pa.movie;
|
| | | delete pa.movie;
|
| | | }
|
| | |
|
| | | delete pa.width;
|
| | | delete pa.height;
|
| | |
|
| | | im.title = this._serialize(pa);
|
| | |
|
| | | return im;
|
| | | },
|
| | |
|
| | | _parse : function(s) {
|
| | | return tinymce.util.JSON.parse('{' + s + '}');
|
| | | },
|
| | |
|
| | | _serialize : function(o) {
|
| | | return tinymce.util.JSON.serialize(o).replace(/[{}]/g, '');
|
| | | }
|
| | | });
|
| | |
|
| | | // Register plugin
|
| | | tinymce.PluginManager.add('media', tinymce.plugins.MediaPlugin);
|
| | | })(); |
File was renamed from program/js/tiny_mce/plugins/media/jscripts/embed.js |
| | |
| | | /** |
| | | * This script contains embed functions for common plugins. This scripts are complety free to use for any purpose. |
| | | */ |
| | | |
| | | function writeFlash(p) { |
| | | writeEmbed( |
| | | 'D27CDB6E-AE6D-11cf-96B8-444553540000', |
| | | 'http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,40,0', |
| | | 'application/x-shockwave-flash', |
| | | p |
| | | ); |
| | | } |
| | | |
| | | function writeShockWave(p) { |
| | | writeEmbed( |
| | | '166B1BCA-3F9C-11CF-8075-444553540000', |
| | | 'http://download.macromedia.com/pub/shockwave/cabs/director/sw.cab#version=8,5,1,0', |
| | | 'application/x-director', |
| | | p |
| | | ); |
| | | } |
| | | |
| | | function writeQuickTime(p) { |
| | | writeEmbed( |
| | | '02BF25D5-8C17-4B23-BC80-D3488ABDDC6B', |
| | | 'http://www.apple.com/qtactivex/qtplugin.cab#version=6,0,2,0', |
| | | 'video/quicktime', |
| | | p |
| | | ); |
| | | } |
| | | |
| | | function writeRealMedia(p) { |
| | | writeEmbed( |
| | | 'CFCDAA03-8BE4-11cf-B84B-0020AFBBCCFA', |
| | | 'http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,40,0', |
| | | 'audio/x-pn-realaudio-plugin', |
| | | p |
| | | ); |
| | | } |
| | | |
| | | function writeWindowsMedia(p) { |
| | | p.url = p.src; |
| | | writeEmbed( |
| | | '6BF52A52-394A-11D3-B153-00C04F79FAA6', |
| | | 'http://activex.microsoft.com/activex/controls/mplayer/en/nsmp2inf.cab#Version=5,1,52,701', |
| | | 'application/x-mplayer2', |
| | | p |
| | | ); |
| | | } |
| | | |
| | | function writeEmbed(cls, cb, mt, p) { |
| | | var h = '', n; |
| | | |
| | | h += '<object classid="clsid:' + cls + '" codebase="' + cb + '"'; |
| | | h += typeof(p.id) != "undefined" ? 'id="' + p.id + '"' : ''; |
| | | h += typeof(p.name) != "undefined" ? 'name="' + p.name + '"' : ''; |
| | | h += typeof(p.width) != "undefined" ? 'width="' + p.width + '"' : ''; |
| | | h += typeof(p.height) != "undefined" ? 'height="' + p.height + '"' : ''; |
| | | h += typeof(p.align) != "undefined" ? 'align="' + p.align + '"' : ''; |
| | | h += '>'; |
| | | |
| | | for (n in p) |
| | | h += '<param name="' + n + '" value="' + p[n] + '">'; |
| | | |
| | | h += '<embed type="' + mt + '"'; |
| | | |
| | | for (n in p) |
| | | h += n + '="' + p[n] + '" '; |
| | | |
| | | h += '></embed></object>'; |
| | | |
| | | document.write(h); |
| | | } |
| | | /**
|
| | | * This script contains embed functions for common plugins. This scripts are complety free to use for any purpose.
|
| | | */
|
| | |
|
| | | function writeFlash(p) {
|
| | | writeEmbed(
|
| | | 'D27CDB6E-AE6D-11cf-96B8-444553540000',
|
| | | 'http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,40,0',
|
| | | 'application/x-shockwave-flash',
|
| | | p
|
| | | );
|
| | | }
|
| | |
|
| | | function writeShockWave(p) {
|
| | | writeEmbed(
|
| | | '166B1BCA-3F9C-11CF-8075-444553540000',
|
| | | 'http://download.macromedia.com/pub/shockwave/cabs/director/sw.cab#version=8,5,1,0',
|
| | | 'application/x-director',
|
| | | p
|
| | | );
|
| | | }
|
| | |
|
| | | function writeQuickTime(p) {
|
| | | writeEmbed(
|
| | | '02BF25D5-8C17-4B23-BC80-D3488ABDDC6B',
|
| | | 'http://www.apple.com/qtactivex/qtplugin.cab#version=6,0,2,0',
|
| | | 'video/quicktime',
|
| | | p
|
| | | );
|
| | | }
|
| | |
|
| | | function writeRealMedia(p) {
|
| | | writeEmbed(
|
| | | 'CFCDAA03-8BE4-11cf-B84B-0020AFBBCCFA',
|
| | | 'http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,40,0',
|
| | | 'audio/x-pn-realaudio-plugin',
|
| | | p
|
| | | );
|
| | | }
|
| | |
|
| | | function writeWindowsMedia(p) {
|
| | | p.url = p.src;
|
| | | writeEmbed(
|
| | | '6BF52A52-394A-11D3-B153-00C04F79FAA6',
|
| | | 'http://activex.microsoft.com/activex/controls/mplayer/en/nsmp2inf.cab#Version=5,1,52,701',
|
| | | 'application/x-mplayer2',
|
| | | p
|
| | | );
|
| | | }
|
| | |
|
| | | function writeEmbed(cls, cb, mt, p) {
|
| | | var h = '', n;
|
| | |
|
| | | h += '<object classid="clsid:' + cls + '" codebase="' + cb + '"';
|
| | | h += typeof(p.id) != "undefined" ? 'id="' + p.id + '"' : '';
|
| | | h += typeof(p.name) != "undefined" ? 'name="' + p.name + '"' : '';
|
| | | h += typeof(p.width) != "undefined" ? 'width="' + p.width + '"' : '';
|
| | | h += typeof(p.height) != "undefined" ? 'height="' + p.height + '"' : '';
|
| | | h += typeof(p.align) != "undefined" ? 'align="' + p.align + '"' : '';
|
| | | h += '>';
|
| | |
|
| | | for (n in p)
|
| | | h += '<param name="' + n + '" value="' + p[n] + '">';
|
| | |
|
| | | h += '<embed type="' + mt + '"';
|
| | |
|
| | | for (n in p)
|
| | | h += n + '="' + p[n] + '" ';
|
| | |
|
| | | h += '></embed></object>';
|
| | |
|
| | | document.write(h);
|
| | | }
|
File was renamed from program/js/tiny_mce/plugins/media/jscripts/media.js |
| | |
| | | var oldWidth, oldHeight; |
| | | var url = tinyMCE.getParam("media_external_list_url"); |
| | | if (url != null) { |
| | | // Fix relative |
| | | if (url.charAt(0) != '/' && url.indexOf('://') == -1) |
| | | url = tinyMCE.documentBasePath + "/" + url; |
| | | |
| | | document.write('<sc'+'ript language="javascript" type="text/javascript" src="' + url + '"></sc'+'ript>'); |
| | | } |
| | | |
| | | function init() { |
| | | var pl = "", f, val; |
| | | var type = "flash", fe, i; |
| | | |
| | | tinyMCEPopup.resizeToInnerSize(); |
| | | f = document.forms[0] |
| | | |
| | | fe = tinyMCE.selectedInstance.getFocusElement(); |
| | | if (/mceItem(Flash|ShockWave|WindowsMedia|QuickTime|RealMedia)/.test(tinyMCE.getAttrib(fe, 'class'))) { |
| | | pl = "x={" + fe.title + "};"; |
| | | |
| | | switch (tinyMCE.getAttrib(fe, 'class')) { |
| | | case 'mceItemFlash': |
| | | type = 'flash'; |
| | | break; |
| | | |
| | | case 'mceItemShockWave': |
| | | type = 'shockwave'; |
| | | break; |
| | | |
| | | case 'mceItemWindowsMedia': |
| | | type = 'wmp'; |
| | | break; |
| | | |
| | | case 'mceItemQuickTime': |
| | | type = 'qt'; |
| | | break; |
| | | |
| | | case 'mceItemRealMedia': |
| | | type = 'rmp'; |
| | | break; |
| | | } |
| | | |
| | | document.forms[0].insert.value = tinyMCE.getLang('lang_update', 'Insert', true); |
| | | } |
| | | |
| | | document.getElementById('filebrowsercontainer').innerHTML = getBrowserHTML('filebrowser','src','media','media'); |
| | | document.getElementById('qtsrcfilebrowsercontainer').innerHTML = getBrowserHTML('qtsrcfilebrowser','qt_qtsrc','media','media'); |
| | | document.getElementById('bgcolor_pickcontainer').innerHTML = getColorPickerHTML('bgcolor_pick','bgcolor'); |
| | | |
| | | var html = getMediaListHTML('filebrowser','src','media','media'); |
| | | if (html == "") |
| | | document.getElementById("linklistrow").style.display = 'none'; |
| | | else |
| | | document.getElementById("linklistcontainer").innerHTML = html; |
| | | |
| | | // Resize some elements |
| | | if (isVisible('filebrowsercontainer')) |
| | | document.getElementById('src').style.width = '230px'; |
| | | |
| | | // Setup form |
| | | if (pl != "") { |
| | | pl = eval(pl); |
| | | |
| | | switch (type) { |
| | | case "flash": |
| | | setBool(pl, 'flash', 'play'); |
| | | setBool(pl, 'flash', 'loop'); |
| | | setBool(pl, 'flash', 'menu'); |
| | | setBool(pl, 'flash', 'swliveconnect'); |
| | | setStr(pl, 'flash', 'quality'); |
| | | setStr(pl, 'flash', 'scale'); |
| | | setStr(pl, 'flash', 'salign'); |
| | | setStr(pl, 'flash', 'wmode'); |
| | | setStr(pl, 'flash', 'base'); |
| | | setStr(pl, 'flash', 'flashvars'); |
| | | break; |
| | | |
| | | case "qt": |
| | | setBool(pl, 'qt', 'loop'); |
| | | setBool(pl, 'qt', 'autoplay'); |
| | | setBool(pl, 'qt', 'cache'); |
| | | setBool(pl, 'qt', 'controller'); |
| | | setBool(pl, 'qt', 'correction'); |
| | | setBool(pl, 'qt', 'enablejavascript'); |
| | | setBool(pl, 'qt', 'kioskmode'); |
| | | setBool(pl, 'qt', 'autohref'); |
| | | setBool(pl, 'qt', 'playeveryframe'); |
| | | setBool(pl, 'qt', 'tarsetcache'); |
| | | setStr(pl, 'qt', 'scale'); |
| | | setStr(pl, 'qt', 'starttime'); |
| | | setStr(pl, 'qt', 'endtime'); |
| | | setStr(pl, 'qt', 'tarset'); |
| | | setStr(pl, 'qt', 'qtsrcchokespeed'); |
| | | setStr(pl, 'qt', 'volume'); |
| | | setStr(pl, 'qt', 'qtsrc'); |
| | | break; |
| | | |
| | | case "shockwave": |
| | | setBool(pl, 'shockwave', 'sound'); |
| | | setBool(pl, 'shockwave', 'progress'); |
| | | setBool(pl, 'shockwave', 'autostart'); |
| | | setBool(pl, 'shockwave', 'swliveconnect'); |
| | | setStr(pl, 'shockwave', 'swvolume'); |
| | | setStr(pl, 'shockwave', 'swstretchstyle'); |
| | | setStr(pl, 'shockwave', 'swstretchhalign'); |
| | | setStr(pl, 'shockwave', 'swstretchvalign'); |
| | | break; |
| | | |
| | | case "wmp": |
| | | setBool(pl, 'wmp', 'autostart'); |
| | | setBool(pl, 'wmp', 'enabled'); |
| | | setBool(pl, 'wmp', 'enablecontextmenu'); |
| | | setBool(pl, 'wmp', 'fullscreen'); |
| | | setBool(pl, 'wmp', 'invokeurls'); |
| | | setBool(pl, 'wmp', 'mute'); |
| | | setBool(pl, 'wmp', 'stretchtofit'); |
| | | setBool(pl, 'wmp', 'windowlessvideo'); |
| | | setStr(pl, 'wmp', 'balance'); |
| | | setStr(pl, 'wmp', 'baseurl'); |
| | | setStr(pl, 'wmp', 'captioningid'); |
| | | setStr(pl, 'wmp', 'currentmarker'); |
| | | setStr(pl, 'wmp', 'currentposition'); |
| | | setStr(pl, 'wmp', 'defaultframe'); |
| | | setStr(pl, 'wmp', 'playcount'); |
| | | setStr(pl, 'wmp', 'rate'); |
| | | setStr(pl, 'wmp', 'uimode'); |
| | | setStr(pl, 'wmp', 'volume'); |
| | | break; |
| | | |
| | | case "rmp": |
| | | setBool(pl, 'rmp', 'autostart'); |
| | | setBool(pl, 'rmp', 'loop'); |
| | | setBool(pl, 'rmp', 'autogotourl'); |
| | | setBool(pl, 'rmp', 'center'); |
| | | setBool(pl, 'rmp', 'imagestatus'); |
| | | setBool(pl, 'rmp', 'maintainaspect'); |
| | | setBool(pl, 'rmp', 'nojava'); |
| | | setBool(pl, 'rmp', 'prefetch'); |
| | | setBool(pl, 'rmp', 'shuffle'); |
| | | setStr(pl, 'rmp', 'console'); |
| | | setStr(pl, 'rmp', 'controls'); |
| | | setStr(pl, 'rmp', 'numloop'); |
| | | setStr(pl, 'rmp', 'scriptcallbacks'); |
| | | break; |
| | | } |
| | | |
| | | setStr(pl, null, 'src'); |
| | | setStr(pl, null, 'id'); |
| | | setStr(pl, null, 'name'); |
| | | setStr(pl, null, 'vspace'); |
| | | setStr(pl, null, 'hspace'); |
| | | setStr(pl, null, 'bgcolor'); |
| | | setStr(pl, null, 'align'); |
| | | setStr(pl, null, 'width'); |
| | | setStr(pl, null, 'height'); |
| | | |
| | | if ((val = tinyMCE.getAttrib(fe, "width")) != "") |
| | | pl.width = f.width.value = val; |
| | | |
| | | if ((val = tinyMCE.getAttrib(fe, "height")) != "") |
| | | pl.height = f.height.value = val; |
| | | |
| | | oldWidth = pl.width ? parseInt(pl.width) : 0; |
| | | oldHeight = pl.height ? parseInt(pl.height) : 0; |
| | | } else |
| | | oldWidth = oldHeight = 0; |
| | | |
| | | selectByValue(f, 'media_type', type); |
| | | changedType(type); |
| | | updateColor('bgcolor_pick', 'bgcolor'); |
| | | |
| | | TinyMCE_EditableSelects.init(); |
| | | generatePreview(); |
| | | } |
| | | |
| | | function insertMedia() { |
| | | var fe, f = document.forms[0], h; |
| | | |
| | | if (!AutoValidator.validate(f)) { |
| | | alert(tinyMCE.getLang('lang_invalid_data')); |
| | | return false; |
| | | } |
| | | |
| | | f.width.value = f.width.value == "" ? 100 : f.width.value; |
| | | f.height.value = f.height.value == "" ? 100 : f.height.value; |
| | | |
| | | fe = tinyMCE.selectedInstance.getFocusElement(); |
| | | if (fe != null && /mceItem(Flash|ShockWave|WindowsMedia|QuickTime|RealMedia)/.test(tinyMCE.getAttrib(fe, 'class'))) { |
| | | switch (f.media_type.options[f.media_type.selectedIndex].value) { |
| | | case "flash": |
| | | fe.className = "mceItemFlash"; |
| | | break; |
| | | |
| | | case "shockwave": |
| | | fe.className = "mceItemShockWave"; |
| | | break; |
| | | |
| | | case "qt": |
| | | fe.className = "mceItemQuickTime"; |
| | | break; |
| | | |
| | | case "wmp": |
| | | fe.className = "mceItemWindowsMedia"; |
| | | break; |
| | | |
| | | case "rmp": |
| | | fe.className = "mceItemRealMedia"; |
| | | break; |
| | | } |
| | | |
| | | if (fe.width != f.width.value || fe.height != f.height.height) |
| | | tinyMCE.selectedInstance.repaint(); |
| | | |
| | | fe.title = serializeParameters(); |
| | | fe.width = f.width.value; |
| | | fe.height = f.height.value; |
| | | fe.style.width = f.width.value + (f.width.value.indexOf('%') == -1 ? 'px' : ''); |
| | | fe.style.height = f.height.value + (f.height.value.indexOf('%') == -1 ? 'px' : ''); |
| | | fe.align = f.align.options[f.align.selectedIndex].value; |
| | | } else { |
| | | h = '<img src="' + tinyMCE.getParam("theme_href") + '/images/spacer.gif"' ; |
| | | |
| | | switch (f.media_type.options[f.media_type.selectedIndex].value) { |
| | | case "flash": |
| | | h += ' class="mceItemFlash"'; |
| | | break; |
| | | |
| | | case "shockwave": |
| | | h += ' class="mceItemShockWave"'; |
| | | break; |
| | | |
| | | case "qt": |
| | | h += ' class="mceItemQuickTime"'; |
| | | break; |
| | | |
| | | case "wmp": |
| | | h += ' class="mceItemWindowsMedia"'; |
| | | break; |
| | | |
| | | case "rmp": |
| | | h += ' class="mceItemRealMedia"'; |
| | | break; |
| | | } |
| | | |
| | | h += ' title="' + serializeParameters() + '"'; |
| | | h += ' width="' + f.width.value + '"'; |
| | | h += ' height="' + f.height.value + '"'; |
| | | h += ' align="' + f.align.options[f.align.selectedIndex].value + '"'; |
| | | |
| | | h += ' />'; |
| | | |
| | | tinyMCE.selectedInstance.execCommand('mceInsertContent', false, h); |
| | | } |
| | | |
| | | tinyMCEPopup.close(); |
| | | } |
| | | |
| | | function getMediaListHTML() { |
| | | if (typeof(tinyMCEMediaList) != "undefined" && tinyMCEMediaList.length > 0) { |
| | | var html = ""; |
| | | |
| | | html += '<select id="linklist" name="linklist" style="width: 250px" onfocus="tinyMCE.addSelectAccessibility(event, this, window);" onchange="this.form.src.value=this.options[this.selectedIndex].value;">'; |
| | | html += '<option value="">---</option>'; |
| | | |
| | | for (var i=0; i<tinyMCEMediaList.length; i++) |
| | | html += '<option value="' + tinyMCEMediaList[i][1] + '">' + tinyMCEMediaList[i][0] + '</option>'; |
| | | |
| | | html += '</select>'; |
| | | |
| | | return html; |
| | | } |
| | | |
| | | return ""; |
| | | } |
| | | |
| | | function getType(v) { |
| | | var fo, i, c, el, x, f = document.forms[0]; |
| | | |
| | | fo = tinyMCE.getParam("media_types", "flash=swf;shockwave=dcr;qt=mov,qt,mpg,mp3,mp4,mpeg;shockwave=dcr;wmp=avi,wmv,wm,asf,asx,wmx,wvx;rmp=rm,ra,ram").split(';'); |
| | | |
| | | // YouTube |
| | | if (v.indexOf('http://www.youtube.com/watch?v=') == 0 || v.indexOf('http://youtube.com/watch?v=') == 0) { |
| | | f.width.value = '425'; |
| | | f.height.value = '350'; |
| | | |
| | | v = v.replace('http://youtube.com/watch?v=', ''); |
| | | v = v.replace('http://www.youtube.com/watch?v=', ''); |
| | | |
| | | f.src.value = 'http://www.youtube.com/v/' + v; |
| | | return 'flash'; |
| | | } |
| | | |
| | | // Google video |
| | | if (v.indexOf('http://video.google.com/videoplay?docid=') == 0) { |
| | | f.width.value = '425'; |
| | | f.height.value = '326'; |
| | | f.src.value = 'http://video.google.com/googleplayer.swf?docId=' + v.substring('http://video.google.com/videoplay?docid='.length) + '&hl=en'; |
| | | return 'flash'; |
| | | } |
| | | |
| | | for (i=0; i<fo.length; i++) { |
| | | c = fo[i].split('='); |
| | | |
| | | el = c[1].split(','); |
| | | for (x=0; x<el.length; x++) |
| | | if (v.indexOf('.' + el[x]) != -1) |
| | | return c[0]; |
| | | } |
| | | |
| | | return null; |
| | | } |
| | | |
| | | function switchType(v) { |
| | | var t = getType(v), d = document, f = d.forms[0]; |
| | | |
| | | if (!t) |
| | | return; |
| | | |
| | | selectByValue(d.forms[0], 'media_type', t); |
| | | changedType(t); |
| | | |
| | | // Update qtsrc also |
| | | if (t == 'qt' && f.src.value.toLowerCase().indexOf('rtsp://') != -1) { |
| | | alert(tinyMCE.getLang("lang_media_qt_stream_warn")); |
| | | |
| | | if (f.qt_qtsrc.value == '') |
| | | f.qt_qtsrc.value = f.src.value; |
| | | } |
| | | } |
| | | |
| | | function changedType(t) { |
| | | var d = document; |
| | | |
| | | d.getElementById('flash_options').style.display = 'none'; |
| | | d.getElementById('qt_options').style.display = 'none'; |
| | | d.getElementById('shockwave_options').style.display = 'none'; |
| | | d.getElementById('wmp_options').style.display = 'none'; |
| | | d.getElementById('rmp_options').style.display = 'none'; |
| | | d.getElementById(t + '_options').style.display = 'block'; |
| | | } |
| | | |
| | | function serializeParameters() { |
| | | var d = document, f = d.forms[0], s = ''; |
| | | |
| | | switch (f.media_type.options[f.media_type.selectedIndex].value) { |
| | | case "flash": |
| | | s += getBool('flash', 'play', true); |
| | | s += getBool('flash', 'loop', true); |
| | | s += getBool('flash', 'menu', true); |
| | | s += getBool('flash', 'swliveconnect', false); |
| | | s += getStr('flash', 'quality'); |
| | | s += getStr('flash', 'scale'); |
| | | s += getStr('flash', 'salign'); |
| | | s += getStr('flash', 'wmode'); |
| | | s += getStr('flash', 'base'); |
| | | s += getStr('flash', 'flashvars'); |
| | | break; |
| | | |
| | | case "qt": |
| | | s += getBool('qt', 'loop', false); |
| | | s += getBool('qt', 'autoplay', true); |
| | | s += getBool('qt', 'cache', false); |
| | | s += getBool('qt', 'controller', true); |
| | | s += getBool('qt', 'correction', false, 'none', 'full'); |
| | | s += getBool('qt', 'enablejavascript', false); |
| | | s += getBool('qt', 'kioskmode', false); |
| | | s += getBool('qt', 'autohref', false); |
| | | s += getBool('qt', 'playeveryframe', false); |
| | | s += getBool('qt', 'targetcache', false); |
| | | s += getStr('qt', 'scale'); |
| | | s += getStr('qt', 'starttime'); |
| | | s += getStr('qt', 'endtime'); |
| | | s += getStr('qt', 'target'); |
| | | s += getStr('qt', 'qtsrcchokespeed'); |
| | | s += getStr('qt', 'volume'); |
| | | s += getStr('qt', 'qtsrc'); |
| | | break; |
| | | |
| | | case "shockwave": |
| | | s += getBool('shockwave', 'sound'); |
| | | s += getBool('shockwave', 'progress'); |
| | | s += getBool('shockwave', 'autostart'); |
| | | s += getBool('shockwave', 'swliveconnect'); |
| | | s += getStr('shockwave', 'swvolume'); |
| | | s += getStr('shockwave', 'swstretchstyle'); |
| | | s += getStr('shockwave', 'swstretchhalign'); |
| | | s += getStr('shockwave', 'swstretchvalign'); |
| | | break; |
| | | |
| | | case "wmp": |
| | | s += getBool('wmp', 'autostart', true); |
| | | s += getBool('wmp', 'enabled', false); |
| | | s += getBool('wmp', 'enablecontextmenu', true); |
| | | s += getBool('wmp', 'fullscreen', false); |
| | | s += getBool('wmp', 'invokeurls', true); |
| | | s += getBool('wmp', 'mute', false); |
| | | s += getBool('wmp', 'stretchtofit', false); |
| | | s += getBool('wmp', 'windowlessvideo', false); |
| | | s += getStr('wmp', 'balance'); |
| | | s += getStr('wmp', 'baseurl'); |
| | | s += getStr('wmp', 'captioningid'); |
| | | s += getStr('wmp', 'currentmarker'); |
| | | s += getStr('wmp', 'currentposition'); |
| | | s += getStr('wmp', 'defaultframe'); |
| | | s += getStr('wmp', 'playcount'); |
| | | s += getStr('wmp', 'rate'); |
| | | s += getStr('wmp', 'uimode'); |
| | | s += getStr('wmp', 'volume'); |
| | | break; |
| | | |
| | | case "rmp": |
| | | s += getBool('rmp', 'autostart', false); |
| | | s += getBool('rmp', 'loop', false); |
| | | s += getBool('rmp', 'autogotourl', true); |
| | | s += getBool('rmp', 'center', false); |
| | | s += getBool('rmp', 'imagestatus', true); |
| | | s += getBool('rmp', 'maintainaspect', false); |
| | | s += getBool('rmp', 'nojava', false); |
| | | s += getBool('rmp', 'prefetch', false); |
| | | s += getBool('rmp', 'shuffle', false); |
| | | s += getStr('rmp', 'console'); |
| | | s += getStr('rmp', 'controls'); |
| | | s += getStr('rmp', 'numloop'); |
| | | s += getStr('rmp', 'scriptcallbacks'); |
| | | break; |
| | | } |
| | | |
| | | s += getStr(null, 'id'); |
| | | s += getStr(null, 'name'); |
| | | s += getStr(null, 'src'); |
| | | s += getStr(null, 'align'); |
| | | s += getStr(null, 'bgcolor'); |
| | | s += getInt(null, 'vspace'); |
| | | s += getInt(null, 'hspace'); |
| | | s += getStr(null, 'width'); |
| | | s += getStr(null, 'height'); |
| | | |
| | | s = s.length > 0 ? s.substring(0, s.length - 1) : s; |
| | | |
| | | return s; |
| | | } |
| | | |
| | | function setBool(pl, p, n) { |
| | | if (typeof(pl[n]) == "undefined") |
| | | return; |
| | | |
| | | document.forms[0].elements[p + "_" + n].checked = pl[n]; |
| | | } |
| | | |
| | | function setStr(pl, p, n) { |
| | | var f = document.forms[0], e = f.elements[(p != null ? p + "_" : '') + n]; |
| | | |
| | | if (typeof(pl[n]) == "undefined") |
| | | return; |
| | | |
| | | if (e.type == "text") |
| | | e.value = pl[n]; |
| | | else |
| | | selectByValue(f, (p != null ? p + "_" : '') + n, pl[n]); |
| | | } |
| | | |
| | | function getBool(p, n, d, tv, fv) { |
| | | var v = document.forms[0].elements[p + "_" + n].checked; |
| | | |
| | | tv = typeof(tv) == 'undefined' ? 'true' : "'" + jsEncode(tv) + "'"; |
| | | fv = typeof(fv) == 'undefined' ? 'false' : "'" + jsEncode(fv) + "'"; |
| | | |
| | | return (v == d) ? '' : n + (v ? ':' + tv + ',' : ':' + fv + ','); |
| | | } |
| | | |
| | | function getStr(p, n, d) { |
| | | var e = document.forms[0].elements[(p != null ? p + "_" : "") + n]; |
| | | var v = e.type == "text" ? e.value : e.options[e.selectedIndex].value; |
| | | |
| | | return ((n == d || v == '') ? '' : n + ":'" + jsEncode(v) + "',"); |
| | | } |
| | | |
| | | function getInt(p, n, d) { |
| | | var e = document.forms[0].elements[(p != null ? p + "_" : "") + n]; |
| | | var v = e.type == "text" ? e.value : e.options[e.selectedIndex].value; |
| | | |
| | | return ((n == d || v == '') ? '' : n + ":" + v.replace(/[^0-9]+/g, '') + ","); |
| | | } |
| | | |
| | | function jsEncode(s) { |
| | | s = s.replace(new RegExp('\\\\', 'g'), '\\\\'); |
| | | s = s.replace(new RegExp('"', 'g'), '\\"'); |
| | | s = s.replace(new RegExp("'", 'g'), "\\'"); |
| | | |
| | | return s; |
| | | } |
| | | |
| | | function generatePreview(c) { |
| | | var f = document.forms[0], p = document.getElementById('prev'), h = '', cls, pl, n, type, codebase, wp, hp, nw, nh; |
| | | |
| | | p.innerHTML = '<!-- x --->'; |
| | | |
| | | nw = parseInt(f.width.value); |
| | | nh = parseInt(f.height.value); |
| | | |
| | | if (f.width.value != "" && f.height.value != "") { |
| | | if (f.constrain.checked) { |
| | | if (c == 'width' && oldWidth != 0) { |
| | | wp = nw / oldWidth; |
| | | nh = Math.round(wp * nh); |
| | | f.height.value = nh; |
| | | } else if (c == 'height' && oldHeight != 0) { |
| | | hp = nh / oldHeight; |
| | | nw = Math.round(hp * nw); |
| | | f.width.value = nw; |
| | | } |
| | | } |
| | | } |
| | | |
| | | if (f.width.value != "") |
| | | oldWidth = nw; |
| | | |
| | | if (f.height.value != "") |
| | | oldHeight = nh; |
| | | |
| | | // After constrain |
| | | pl = serializeParameters(); |
| | | |
| | | switch (f.media_type.options[f.media_type.selectedIndex].value) { |
| | | case "flash": |
| | | cls = 'clsid:D27CDB6E-AE6D-11cf-96B8-444553540000'; |
| | | codebase = 'http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,40,0'; |
| | | type = 'application/x-shockwave-flash'; |
| | | break; |
| | | |
| | | case "shockwave": |
| | | cls = 'clsid:166B1BCA-3F9C-11CF-8075-444553540000'; |
| | | codebase = 'http://download.macromedia.com/pub/shockwave/cabs/director/sw.cab#version=8,5,1,0'; |
| | | type = 'application/x-director'; |
| | | break; |
| | | |
| | | case "qt": |
| | | cls = 'clsid:02BF25D5-8C17-4B23-BC80-D3488ABDDC6B'; |
| | | codebase = 'http://www.apple.com/qtactivex/qtplugin.cab#version=6,0,2,0'; |
| | | type = 'video/quicktime'; |
| | | break; |
| | | |
| | | case "wmp": |
| | | cls = tinyMCE.getParam('media_wmp6_compatible') ? 'clsid:05589FA1-C356-11CE-BF01-00AA0055595A' : 'clsid:6BF52A52-394A-11D3-B153-00C04F79FAA6'; |
| | | codebase = 'http://activex.microsoft.com/activex/controls/mplayer/en/nsmp2inf.cab#Version=5,1,52,701'; |
| | | type = 'application/x-mplayer2'; |
| | | break; |
| | | |
| | | case "rmp": |
| | | cls = 'clsid:CFCDAA03-8BE4-11cf-B84B-0020AFBBCCFA'; |
| | | codebase = 'http://activex.microsoft.com/activex/controls/mplayer/en/nsmp2inf.cab#Version=5,1,52,701'; |
| | | type = 'audio/x-pn-realaudio-plugin'; |
| | | break; |
| | | } |
| | | |
| | | if (pl == '') { |
| | | p.innerHTML = ''; |
| | | return; |
| | | } |
| | | |
| | | pl = eval('x={' + pl + '};'); |
| | | |
| | | if (!pl.src) { |
| | | p.innerHTML = ''; |
| | | return; |
| | | } |
| | | |
| | | pl.src = tinyMCE.convertRelativeToAbsoluteURL(tinyMCE.settings['base_href'], pl.src); |
| | | pl.width = !pl.width ? 100 : pl.width; |
| | | pl.height = !pl.height ? 100 : pl.height; |
| | | pl.id = !pl.id ? 'obj' : pl.id; |
| | | pl.name = !pl.name ? 'eobj' : pl.name; |
| | | pl.align = !pl.align ? '' : pl.align; |
| | | |
| | | h += '<object classid="clsid:' + cls + '" codebase="' + codebase + '" width="' + pl.width + '" height="' + pl.height + '" id="' + pl.id + '" name="' + pl.name + '" align="' + pl.align + '">'; |
| | | |
| | | for (n in pl) { |
| | | h += '<param name="' + n + '" value="' + pl[n] + '">'; |
| | | |
| | | // Add extra url parameter if it's an absolute URL |
| | | if (n == 'src' && pl[n].indexOf('://') != -1) |
| | | h += '<param name="url" value="' + pl[n] + '" />'; |
| | | } |
| | | |
| | | h += '<embed type="' + type + '" '; |
| | | |
| | | for (n in pl) |
| | | h += n + '="' + pl[n] + '" '; |
| | | |
| | | h += '></embed></object>'; |
| | | |
| | | p.innerHTML = "<!-- x --->" + h; |
| | | } |
| | | tinyMCEPopup.requireLangPack();
|
| | |
|
| | | var oldWidth, oldHeight, ed, url;
|
| | |
|
| | | if (url = tinyMCEPopup.getParam("media_external_list_url"))
|
| | | document.write('<script language="javascript" type="text/javascript" src="' + tinyMCEPopup.editor.documentBaseURI.toAbsolute(url) + '"></script>');
|
| | |
|
| | | function init() {
|
| | | var pl = "", f, val;
|
| | | var type = "flash", fe, i;
|
| | |
|
| | | ed = tinyMCEPopup.editor;
|
| | |
|
| | | tinyMCEPopup.resizeToInnerSize();
|
| | | f = document.forms[0]
|
| | |
|
| | | fe = ed.selection.getNode();
|
| | | if (/mceItem(Flash|ShockWave|WindowsMedia|QuickTime|RealMedia)/.test(ed.dom.getAttrib(fe, 'class'))) {
|
| | | pl = fe.title;
|
| | |
|
| | | switch (ed.dom.getAttrib(fe, 'class')) {
|
| | | case 'mceItemFlash':
|
| | | type = 'flash';
|
| | | break;
|
| | |
|
| | | case 'mceItemFlashVideo':
|
| | | type = 'flv';
|
| | | break;
|
| | |
|
| | | case 'mceItemShockWave':
|
| | | type = 'shockwave';
|
| | | break;
|
| | |
|
| | | case 'mceItemWindowsMedia':
|
| | | type = 'wmp';
|
| | | break;
|
| | |
|
| | | case 'mceItemQuickTime':
|
| | | type = 'qt';
|
| | | break;
|
| | |
|
| | | case 'mceItemRealMedia':
|
| | | type = 'rmp';
|
| | | break;
|
| | | }
|
| | |
|
| | | document.forms[0].insert.value = ed.getLang('update', 'Insert', true); |
| | | }
|
| | |
|
| | | document.getElementById('filebrowsercontainer').innerHTML = getBrowserHTML('filebrowser','src','media','media');
|
| | | document.getElementById('qtsrcfilebrowsercontainer').innerHTML = getBrowserHTML('qtsrcfilebrowser','qt_qtsrc','media','media');
|
| | | document.getElementById('bgcolor_pickcontainer').innerHTML = getColorPickerHTML('bgcolor_pick','bgcolor');
|
| | |
|
| | | var html = getMediaListHTML('medialist','src','media','media');
|
| | | if (html == "")
|
| | | document.getElementById("linklistrow").style.display = 'none';
|
| | | else
|
| | | document.getElementById("linklistcontainer").innerHTML = html;
|
| | |
|
| | | // Resize some elements
|
| | | if (isVisible('filebrowser'))
|
| | | document.getElementById('src').style.width = '230px';
|
| | |
|
| | | // Setup form
|
| | | if (pl != "") {
|
| | | pl = tinyMCEPopup.editor.plugins.media._parse(pl);
|
| | |
|
| | | switch (type) {
|
| | | case "flash":
|
| | | setBool(pl, 'flash', 'play');
|
| | | setBool(pl, 'flash', 'loop');
|
| | | setBool(pl, 'flash', 'menu');
|
| | | setBool(pl, 'flash', 'swliveconnect');
|
| | | setStr(pl, 'flash', 'quality');
|
| | | setStr(pl, 'flash', 'scale');
|
| | | setStr(pl, 'flash', 'salign');
|
| | | setStr(pl, 'flash', 'wmode');
|
| | | setStr(pl, 'flash', 'base');
|
| | | setStr(pl, 'flash', 'flashvars');
|
| | | break;
|
| | |
|
| | | case "qt":
|
| | | setBool(pl, 'qt', 'loop');
|
| | | setBool(pl, 'qt', 'autoplay');
|
| | | setBool(pl, 'qt', 'cache');
|
| | | setBool(pl, 'qt', 'controller');
|
| | | setBool(pl, 'qt', 'correction');
|
| | | setBool(pl, 'qt', 'enablejavascript');
|
| | | setBool(pl, 'qt', 'kioskmode');
|
| | | setBool(pl, 'qt', 'autohref');
|
| | | setBool(pl, 'qt', 'playeveryframe');
|
| | | setBool(pl, 'qt', 'tarsetcache');
|
| | | setStr(pl, 'qt', 'scale');
|
| | | setStr(pl, 'qt', 'starttime');
|
| | | setStr(pl, 'qt', 'endtime');
|
| | | setStr(pl, 'qt', 'tarset');
|
| | | setStr(pl, 'qt', 'qtsrcchokespeed');
|
| | | setStr(pl, 'qt', 'volume');
|
| | | setStr(pl, 'qt', 'qtsrc');
|
| | | break;
|
| | |
|
| | | case "shockwave":
|
| | | setBool(pl, 'shockwave', 'sound');
|
| | | setBool(pl, 'shockwave', 'progress');
|
| | | setBool(pl, 'shockwave', 'autostart');
|
| | | setBool(pl, 'shockwave', 'swliveconnect');
|
| | | setStr(pl, 'shockwave', 'swvolume');
|
| | | setStr(pl, 'shockwave', 'swstretchstyle');
|
| | | setStr(pl, 'shockwave', 'swstretchhalign');
|
| | | setStr(pl, 'shockwave', 'swstretchvalign');
|
| | | break;
|
| | |
|
| | | case "wmp":
|
| | | setBool(pl, 'wmp', 'autostart');
|
| | | setBool(pl, 'wmp', 'enabled');
|
| | | setBool(pl, 'wmp', 'enablecontextmenu');
|
| | | setBool(pl, 'wmp', 'fullscreen');
|
| | | setBool(pl, 'wmp', 'invokeurls');
|
| | | setBool(pl, 'wmp', 'mute');
|
| | | setBool(pl, 'wmp', 'stretchtofit');
|
| | | setBool(pl, 'wmp', 'windowlessvideo');
|
| | | setStr(pl, 'wmp', 'balance');
|
| | | setStr(pl, 'wmp', 'baseurl');
|
| | | setStr(pl, 'wmp', 'captioningid');
|
| | | setStr(pl, 'wmp', 'currentmarker');
|
| | | setStr(pl, 'wmp', 'currentposition');
|
| | | setStr(pl, 'wmp', 'defaultframe');
|
| | | setStr(pl, 'wmp', 'playcount');
|
| | | setStr(pl, 'wmp', 'rate');
|
| | | setStr(pl, 'wmp', 'uimode');
|
| | | setStr(pl, 'wmp', 'volume');
|
| | | break;
|
| | |
|
| | | case "rmp":
|
| | | setBool(pl, 'rmp', 'autostart');
|
| | | setBool(pl, 'rmp', 'loop');
|
| | | setBool(pl, 'rmp', 'autogotourl');
|
| | | setBool(pl, 'rmp', 'center');
|
| | | setBool(pl, 'rmp', 'imagestatus');
|
| | | setBool(pl, 'rmp', 'maintainaspect');
|
| | | setBool(pl, 'rmp', 'nojava');
|
| | | setBool(pl, 'rmp', 'prefetch');
|
| | | setBool(pl, 'rmp', 'shuffle');
|
| | | setStr(pl, 'rmp', 'console');
|
| | | setStr(pl, 'rmp', 'controls');
|
| | | setStr(pl, 'rmp', 'numloop');
|
| | | setStr(pl, 'rmp', 'scriptcallbacks');
|
| | | break;
|
| | | }
|
| | |
|
| | | setStr(pl, null, 'src');
|
| | | setStr(pl, null, 'id');
|
| | | setStr(pl, null, 'name');
|
| | | setStr(pl, null, 'vspace');
|
| | | setStr(pl, null, 'hspace');
|
| | | setStr(pl, null, 'bgcolor');
|
| | | setStr(pl, null, 'align');
|
| | | setStr(pl, null, 'width');
|
| | | setStr(pl, null, 'height');
|
| | |
|
| | | if ((val = ed.dom.getAttrib(fe, "width")) != "")
|
| | | pl.width = f.width.value = val;
|
| | |
|
| | | if ((val = ed.dom.getAttrib(fe, "height")) != "")
|
| | | pl.height = f.height.value = val;
|
| | |
|
| | | oldWidth = pl.width ? parseInt(pl.width) : 0;
|
| | | oldHeight = pl.height ? parseInt(pl.height) : 0;
|
| | | } else
|
| | | oldWidth = oldHeight = 0;
|
| | |
|
| | | selectByValue(f, 'media_type', type);
|
| | | changedType(type);
|
| | | updateColor('bgcolor_pick', 'bgcolor');
|
| | |
|
| | | TinyMCE_EditableSelects.init();
|
| | | generatePreview();
|
| | | }
|
| | |
|
| | | function insertMedia() {
|
| | | var fe, f = document.forms[0], h;
|
| | |
|
| | | tinyMCEPopup.restoreSelection();
|
| | |
|
| | | if (!AutoValidator.validate(f)) {
|
| | | alert(ed.getLang('invalid_data'));
|
| | | return false;
|
| | | }
|
| | |
|
| | | f.width.value = f.width.value == "" ? 100 : f.width.value;
|
| | | f.height.value = f.height.value == "" ? 100 : f.height.value;
|
| | |
|
| | | fe = ed.selection.getNode();
|
| | | if (fe != null && /mceItem(Flash|ShockWave|WindowsMedia|QuickTime|RealMedia)/.test(ed.dom.getAttrib(fe, 'class'))) {
|
| | | switch (f.media_type.options[f.media_type.selectedIndex].value) {
|
| | | case "flash":
|
| | | fe.className = "mceItemFlash";
|
| | | break;
|
| | |
|
| | | case "flv":
|
| | | fe.className = "mceItemFlashVideo";
|
| | | break;
|
| | |
|
| | | case "shockwave":
|
| | | fe.className = "mceItemShockWave";
|
| | | break;
|
| | |
|
| | | case "qt":
|
| | | fe.className = "mceItemQuickTime";
|
| | | break;
|
| | |
|
| | | case "wmp":
|
| | | fe.className = "mceItemWindowsMedia";
|
| | | break;
|
| | |
|
| | | case "rmp":
|
| | | fe.className = "mceItemRealMedia";
|
| | | break;
|
| | | }
|
| | |
|
| | | if (fe.width != f.width.value || fe.height != f.height.height)
|
| | | ed.execCommand('mceRepaint');
|
| | |
|
| | | fe.title = serializeParameters();
|
| | | fe.width = f.width.value;
|
| | | fe.height = f.height.value;
|
| | | fe.style.width = f.width.value + (f.width.value.indexOf('%') == -1 ? 'px' : '');
|
| | | fe.style.height = f.height.value + (f.height.value.indexOf('%') == -1 ? 'px' : '');
|
| | | fe.align = f.align.options[f.align.selectedIndex].value;
|
| | | } else {
|
| | | h = '<img src="' + tinyMCEPopup.getWindowArg("plugin_url") + '/img/trans.gif"' ;
|
| | |
|
| | | switch (f.media_type.options[f.media_type.selectedIndex].value) {
|
| | | case "flash":
|
| | | h += ' class="mceItemFlash"';
|
| | | break;
|
| | |
|
| | | case "flv":
|
| | | h += ' class="mceItemFlashVideo"';
|
| | | break;
|
| | |
|
| | | case "shockwave":
|
| | | h += ' class="mceItemShockWave"';
|
| | | break;
|
| | |
|
| | | case "qt":
|
| | | h += ' class="mceItemQuickTime"';
|
| | | break;
|
| | |
|
| | | case "wmp":
|
| | | h += ' class="mceItemWindowsMedia"';
|
| | | break;
|
| | |
|
| | | case "rmp":
|
| | | h += ' class="mceItemRealMedia"';
|
| | | break;
|
| | | }
|
| | |
|
| | | h += ' title="' + serializeParameters() + '"';
|
| | | h += ' width="' + f.width.value + '"';
|
| | | h += ' height="' + f.height.value + '"';
|
| | | h += ' align="' + f.align.options[f.align.selectedIndex].value + '"';
|
| | |
|
| | | h += ' />';
|
| | |
|
| | | ed.execCommand('mceInsertContent', false, h);
|
| | | }
|
| | |
|
| | | tinyMCEPopup.close();
|
| | | }
|
| | |
|
| | | function updatePreview() {
|
| | | var f = document.forms[0], type;
|
| | |
|
| | | f.width.value = f.width.value || '320';
|
| | | f.height.value = f.height.value || '240';
|
| | |
|
| | | type = getType(f.src.value);
|
| | | selectByValue(f, 'media_type', type);
|
| | | changedType(type);
|
| | | generatePreview();
|
| | | }
|
| | |
|
| | | function getMediaListHTML() {
|
| | | if (typeof(tinyMCEMediaList) != "undefined" && tinyMCEMediaList.length > 0) {
|
| | | var html = "";
|
| | |
|
| | | html += '<select id="linklist" name="linklist" style="width: 250px" onchange="this.form.src.value=this.options[this.selectedIndex].value;updatePreview();">';
|
| | | html += '<option value="">---</option>';
|
| | |
|
| | | for (var i=0; i<tinyMCEMediaList.length; i++)
|
| | | html += '<option value="' + tinyMCEMediaList[i][1] + '">' + tinyMCEMediaList[i][0] + '</option>';
|
| | |
|
| | | html += '</select>';
|
| | |
|
| | | return html;
|
| | | }
|
| | |
|
| | | return "";
|
| | | }
|
| | |
|
| | | function getType(v) {
|
| | | var fo, i, c, el, x, f = document.forms[0];
|
| | |
|
| | | fo = ed.getParam("media_types", "flash=swf;flv=flv;shockwave=dcr;qt=mov,qt,mpg,mp3,mp4,mpeg;shockwave=dcr;wmp=avi,wmv,wm,asf,asx,wmx,wvx;rmp=rm,ra,ram").split(';');
|
| | |
|
| | | // YouTube
|
| | | if (v.match(/watch\?v=(.+)(.*)/)) {
|
| | | f.width.value = '425';
|
| | | f.height.value = '350';
|
| | | f.src.value = 'http://www.youtube.com/v/' + v.match(/v=(.*)(.*)/)[0].split('=')[1];
|
| | | return 'flash';
|
| | | }
|
| | |
|
| | | // Google video
|
| | | if (v.indexOf('http://video.google.com/videoplay?docid=') == 0) {
|
| | | f.width.value = '425';
|
| | | f.height.value = '326';
|
| | | f.src.value = 'http://video.google.com/googleplayer.swf?docId=' + v.substring('http://video.google.com/videoplay?docid='.length) + '&hl=en';
|
| | | return 'flash';
|
| | | }
|
| | |
|
| | | for (i=0; i<fo.length; i++) {
|
| | | c = fo[i].split('=');
|
| | |
|
| | | el = c[1].split(',');
|
| | | for (x=0; x<el.length; x++)
|
| | | if (v.indexOf('.' + el[x]) != -1)
|
| | | return c[0];
|
| | | }
|
| | |
|
| | | return null;
|
| | | }
|
| | |
|
| | | function switchType(v) {
|
| | | var t = getType(v), d = document, f = d.forms[0];
|
| | |
|
| | | if (!t)
|
| | | return;
|
| | |
|
| | | selectByValue(d.forms[0], 'media_type', t);
|
| | | changedType(t);
|
| | |
|
| | | // Update qtsrc also
|
| | | if (t == 'qt' && f.src.value.toLowerCase().indexOf('rtsp://') != -1) {
|
| | | alert(ed.getLang("media_qt_stream_warn"));
|
| | |
|
| | | if (f.qt_qtsrc.value == '')
|
| | | f.qt_qtsrc.value = f.src.value;
|
| | | }
|
| | | }
|
| | |
|
| | | function changedType(t) {
|
| | | var d = document;
|
| | |
|
| | | d.getElementById('flash_options').style.display = 'none';
|
| | | d.getElementById('flv_options').style.display = 'none';
|
| | | d.getElementById('qt_options').style.display = 'none';
|
| | | d.getElementById('shockwave_options').style.display = 'none';
|
| | | d.getElementById('wmp_options').style.display = 'none';
|
| | | d.getElementById('rmp_options').style.display = 'none';
|
| | | d.getElementById(t + '_options').style.display = 'block';
|
| | | }
|
| | |
|
| | | function serializeParameters() {
|
| | | var d = document, f = d.forms[0], s = '';
|
| | |
|
| | | switch (f.media_type.options[f.media_type.selectedIndex].value) {
|
| | | case "flash":
|
| | | s += getBool('flash', 'play', true);
|
| | | s += getBool('flash', 'loop', true);
|
| | | s += getBool('flash', 'menu', true);
|
| | | s += getBool('flash', 'swliveconnect', false);
|
| | | s += getStr('flash', 'quality');
|
| | | s += getStr('flash', 'scale');
|
| | | s += getStr('flash', 'salign');
|
| | | s += getStr('flash', 'wmode');
|
| | | s += getStr('flash', 'base');
|
| | | s += getStr('flash', 'flashvars');
|
| | | break;
|
| | |
|
| | | case "qt":
|
| | | s += getBool('qt', 'loop', false);
|
| | | s += getBool('qt', 'autoplay', true);
|
| | | s += getBool('qt', 'cache', false);
|
| | | s += getBool('qt', 'controller', true);
|
| | | s += getBool('qt', 'correction', false, 'none', 'full');
|
| | | s += getBool('qt', 'enablejavascript', false);
|
| | | s += getBool('qt', 'kioskmode', false);
|
| | | s += getBool('qt', 'autohref', false);
|
| | | s += getBool('qt', 'playeveryframe', false);
|
| | | s += getBool('qt', 'targetcache', false);
|
| | | s += getStr('qt', 'scale');
|
| | | s += getStr('qt', 'starttime');
|
| | | s += getStr('qt', 'endtime');
|
| | | s += getStr('qt', 'target');
|
| | | s += getStr('qt', 'qtsrcchokespeed');
|
| | | s += getStr('qt', 'volume');
|
| | | s += getStr('qt', 'qtsrc');
|
| | | break;
|
| | |
|
| | | case "shockwave":
|
| | | s += getBool('shockwave', 'sound');
|
| | | s += getBool('shockwave', 'progress');
|
| | | s += getBool('shockwave', 'autostart');
|
| | | s += getBool('shockwave', 'swliveconnect');
|
| | | s += getStr('shockwave', 'swvolume');
|
| | | s += getStr('shockwave', 'swstretchstyle');
|
| | | s += getStr('shockwave', 'swstretchhalign');
|
| | | s += getStr('shockwave', 'swstretchvalign');
|
| | | break;
|
| | |
|
| | | case "wmp":
|
| | | s += getBool('wmp', 'autostart', true);
|
| | | s += getBool('wmp', 'enabled', false);
|
| | | s += getBool('wmp', 'enablecontextmenu', true);
|
| | | s += getBool('wmp', 'fullscreen', false);
|
| | | s += getBool('wmp', 'invokeurls', true);
|
| | | s += getBool('wmp', 'mute', false);
|
| | | s += getBool('wmp', 'stretchtofit', false);
|
| | | s += getBool('wmp', 'windowlessvideo', false);
|
| | | s += getStr('wmp', 'balance');
|
| | | s += getStr('wmp', 'baseurl');
|
| | | s += getStr('wmp', 'captioningid');
|
| | | s += getStr('wmp', 'currentmarker');
|
| | | s += getStr('wmp', 'currentposition');
|
| | | s += getStr('wmp', 'defaultframe');
|
| | | s += getStr('wmp', 'playcount');
|
| | | s += getStr('wmp', 'rate');
|
| | | s += getStr('wmp', 'uimode');
|
| | | s += getStr('wmp', 'volume');
|
| | | break;
|
| | |
|
| | | case "rmp":
|
| | | s += getBool('rmp', 'autostart', false);
|
| | | s += getBool('rmp', 'loop', false);
|
| | | s += getBool('rmp', 'autogotourl', true);
|
| | | s += getBool('rmp', 'center', false);
|
| | | s += getBool('rmp', 'imagestatus', true);
|
| | | s += getBool('rmp', 'maintainaspect', false);
|
| | | s += getBool('rmp', 'nojava', false);
|
| | | s += getBool('rmp', 'prefetch', false);
|
| | | s += getBool('rmp', 'shuffle', false);
|
| | | s += getStr('rmp', 'console');
|
| | | s += getStr('rmp', 'controls');
|
| | | s += getStr('rmp', 'numloop');
|
| | | s += getStr('rmp', 'scriptcallbacks');
|
| | | break;
|
| | | }
|
| | |
|
| | | s += getStr(null, 'id');
|
| | | s += getStr(null, 'name');
|
| | | s += getStr(null, 'src');
|
| | | s += getStr(null, 'align');
|
| | | s += getStr(null, 'bgcolor');
|
| | | s += getInt(null, 'vspace');
|
| | | s += getInt(null, 'hspace');
|
| | | s += getStr(null, 'width');
|
| | | s += getStr(null, 'height');
|
| | |
|
| | | s = s.length > 0 ? s.substring(0, s.length - 1) : s;
|
| | |
|
| | | return s;
|
| | | }
|
| | |
|
| | | function setBool(pl, p, n) {
|
| | | if (typeof(pl[n]) == "undefined")
|
| | | return;
|
| | |
|
| | | document.forms[0].elements[p + "_" + n].checked = pl[n];
|
| | | }
|
| | |
|
| | | function setStr(pl, p, n) {
|
| | | var f = document.forms[0], e = f.elements[(p != null ? p + "_" : '') + n];
|
| | |
|
| | | if (typeof(pl[n]) == "undefined")
|
| | | return;
|
| | |
|
| | | if (e.type == "text")
|
| | | e.value = pl[n];
|
| | | else
|
| | | selectByValue(f, (p != null ? p + "_" : '') + n, pl[n]);
|
| | | }
|
| | |
|
| | | function getBool(p, n, d, tv, fv) {
|
| | | var v = document.forms[0].elements[p + "_" + n].checked;
|
| | |
|
| | | tv = typeof(tv) == 'undefined' ? 'true' : "'" + jsEncode(tv) + "'";
|
| | | fv = typeof(fv) == 'undefined' ? 'false' : "'" + jsEncode(fv) + "'";
|
| | |
|
| | | return (v == d) ? '' : n + (v ? ':' + tv + ',' : ':' + fv + ',');
|
| | | }
|
| | |
|
| | | function getStr(p, n, d) {
|
| | | var e = document.forms[0].elements[(p != null ? p + "_" : "") + n];
|
| | | var v = e.type == "text" ? e.value : e.options[e.selectedIndex].value;
|
| | |
|
| | | if (n == 'src')
|
| | | v = tinyMCEPopup.editor.convertURL(v, 'src', null);
|
| | |
|
| | | return ((n == d || v == '') ? '' : n + ":'" + jsEncode(v) + "',");
|
| | | }
|
| | |
|
| | | function getInt(p, n, d) {
|
| | | var e = document.forms[0].elements[(p != null ? p + "_" : "") + n];
|
| | | var v = e.type == "text" ? e.value : e.options[e.selectedIndex].value;
|
| | |
|
| | | return ((n == d || v == '') ? '' : n + ":" + v.replace(/[^0-9]+/g, '') + ",");
|
| | | }
|
| | |
|
| | | function jsEncode(s) {
|
| | | s = s.replace(new RegExp('\\\\', 'g'), '\\\\');
|
| | | s = s.replace(new RegExp('"', 'g'), '\\"');
|
| | | s = s.replace(new RegExp("'", 'g'), "\\'");
|
| | |
|
| | | return s;
|
| | | }
|
| | |
|
| | | function generatePreview(c) {
|
| | | var f = document.forms[0], p = document.getElementById('prev'), h = '', cls, pl, n, type, codebase, wp, hp, nw, nh;
|
| | |
|
| | | p.innerHTML = '<!-- x --->';
|
| | |
|
| | | nw = parseInt(f.width.value);
|
| | | nh = parseInt(f.height.value);
|
| | |
|
| | | if (f.width.value != "" && f.height.value != "") {
|
| | | if (f.constrain.checked) {
|
| | | if (c == 'width' && oldWidth != 0) {
|
| | | wp = nw / oldWidth;
|
| | | nh = Math.round(wp * nh);
|
| | | f.height.value = nh;
|
| | | } else if (c == 'height' && oldHeight != 0) {
|
| | | hp = nh / oldHeight;
|
| | | nw = Math.round(hp * nw);
|
| | | f.width.value = nw;
|
| | | }
|
| | | }
|
| | | }
|
| | |
|
| | | if (f.width.value != "")
|
| | | oldWidth = nw;
|
| | |
|
| | | if (f.height.value != "")
|
| | | oldHeight = nh;
|
| | |
|
| | | // After constrain
|
| | | pl = serializeParameters();
|
| | |
|
| | | switch (f.media_type.options[f.media_type.selectedIndex].value) {
|
| | | case "flash":
|
| | | cls = 'clsid:D27CDB6E-AE6D-11cf-96B8-444553540000';
|
| | | codebase = 'http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,40,0';
|
| | | type = 'application/x-shockwave-flash';
|
| | | break;
|
| | |
|
| | | case "shockwave":
|
| | | cls = 'clsid:166B1BCA-3F9C-11CF-8075-444553540000';
|
| | | codebase = 'http://download.macromedia.com/pub/shockwave/cabs/director/sw.cab#version=8,5,1,0';
|
| | | type = 'application/x-director';
|
| | | break;
|
| | |
|
| | | case "qt":
|
| | | cls = 'clsid:02BF25D5-8C17-4B23-BC80-D3488ABDDC6B';
|
| | | codebase = 'http://www.apple.com/qtactivex/qtplugin.cab#version=6,0,2,0';
|
| | | type = 'video/quicktime';
|
| | | break;
|
| | |
|
| | | case "wmp":
|
| | | cls = ed.getParam('media_wmp6_compatible') ? 'clsid:05589FA1-C356-11CE-BF01-00AA0055595A' : 'clsid:6BF52A52-394A-11D3-B153-00C04F79FAA6';
|
| | | codebase = 'http://activex.microsoft.com/activex/controls/mplayer/en/nsmp2inf.cab#Version=5,1,52,701';
|
| | | type = 'application/x-mplayer2';
|
| | | break;
|
| | |
|
| | | case "rmp":
|
| | | cls = 'clsid:CFCDAA03-8BE4-11cf-B84B-0020AFBBCCFA';
|
| | | codebase = 'http://activex.microsoft.com/activex/controls/mplayer/en/nsmp2inf.cab#Version=5,1,52,701';
|
| | | type = 'audio/x-pn-realaudio-plugin';
|
| | | break;
|
| | | }
|
| | |
|
| | | if (pl == '') {
|
| | | p.innerHTML = '';
|
| | | return;
|
| | | }
|
| | |
|
| | | pl = tinyMCEPopup.editor.plugins.media._parse(pl);
|
| | |
|
| | | if (!pl.src) {
|
| | | p.innerHTML = '';
|
| | | return;
|
| | | }
|
| | |
|
| | | pl.src = tinyMCEPopup.editor.documentBaseURI.toAbsolute(pl.src);
|
| | | pl.width = !pl.width ? 100 : pl.width;
|
| | | pl.height = !pl.height ? 100 : pl.height;
|
| | | pl.id = !pl.id ? 'obj' : pl.id;
|
| | | pl.name = !pl.name ? 'eobj' : pl.name;
|
| | | pl.align = !pl.align ? '' : pl.align;
|
| | |
|
| | | h += '<object classid="clsid:' + cls + '" codebase="' + codebase + '" width="' + pl.width + '" height="' + pl.height + '" id="' + pl.id + '" name="' + pl.name + '" align="' + pl.align + '">';
|
| | |
|
| | | for (n in pl) {
|
| | | h += '<param name="' + n + '" value="' + pl[n] + '">';
|
| | |
|
| | | // Add extra url parameter if it's an absolute URL
|
| | | if (n == 'src' && pl[n].indexOf('://') != -1)
|
| | | h += '<param name="url" value="' + pl[n] + '" />';
|
| | | }
|
| | |
|
| | | h += '<embed type="' + type + '" ';
|
| | |
|
| | | for (n in pl)
|
| | | h += n + '="' + pl[n] + '" ';
|
| | |
|
| | | h += '></embed></object>';
|
| | |
|
| | | p.innerHTML = "<!-- x --->" + h;
|
| | | }
|
| | |
|
| | | tinyMCEPopup.onInit.add(init);
|
New file |
| | |
| | | tinyMCE.addI18n('en.media_dlg',{
|
| | | title:"Insert / edit embedded media",
|
| | | general:"General",
|
| | | advanced:"Advanced",
|
| | | file:"File/URL",
|
| | | list:"List",
|
| | | size:"Dimensions",
|
| | | preview:"Preview",
|
| | | constrain_proportions:"Constrain proportions",
|
| | | type:"Type",
|
| | | id:"Id",
|
| | | name:"Name",
|
| | | class_name:"Class",
|
| | | vspace:"V-Space",
|
| | | hspace:"H-Space",
|
| | | play:"Auto play",
|
| | | loop:"Loop",
|
| | | menu:"Show menu",
|
| | | quality:"Quality",
|
| | | scale:"Scale",
|
| | | align:"Align",
|
| | | salign:"SAlign",
|
| | | wmode:"WMode",
|
| | | bgcolor:"Background",
|
| | | base:"Base",
|
| | | flashvars:"Flashvars",
|
| | | liveconnect:"SWLiveConnect",
|
| | | autohref:"AutoHREF",
|
| | | cache:"Cache",
|
| | | hidden:"Hidden",
|
| | | controller:"Controller",
|
| | | kioskmode:"Kiosk mode",
|
| | | playeveryframe:"Play every frame",
|
| | | targetcache:"Target cache",
|
| | | correction:"No correction",
|
| | | enablejavascript:"Enable JavaScript",
|
| | | starttime:"Start time",
|
| | | endtime:"End time",
|
| | | href:"Href",
|
| | | qtsrcchokespeed:"Choke speed",
|
| | | target:"Target",
|
| | | volume:"Volume",
|
| | | autostart:"Auto start",
|
| | | enabled:"Enabled",
|
| | | fullscreen:"Fullscreen",
|
| | | invokeurls:"Invoke URLs",
|
| | | mute:"Mute",
|
| | | stretchtofit:"Stretch to fit",
|
| | | windowlessvideo:"Windowless video",
|
| | | balance:"Balance",
|
| | | baseurl:"Base URL",
|
| | | captioningid:"Captioning id",
|
| | | currentmarker:"Current marker",
|
| | | currentposition:"Current position",
|
| | | defaultframe:"Default frame",
|
| | | playcount:"Play count",
|
| | | rate:"Rate",
|
| | | uimode:"UI Mode",
|
| | | flash_options:"Flash options",
|
| | | qt_options:"Quicktime options",
|
| | | wmp_options:"Windows media player options",
|
| | | rmp_options:"Real media player options",
|
| | | shockwave_options:"Shockwave options",
|
| | | autogotourl:"Auto goto URL",
|
| | | center:"Center",
|
| | | imagestatus:"Image status",
|
| | | maintainaspect:"Maintain aspect",
|
| | | nojava:"No java",
|
| | | prefetch:"Prefetch",
|
| | | shuffle:"Shuffle",
|
| | | console:"Console",
|
| | | numloop:"Num loops",
|
| | | controls:"Controls",
|
| | | scriptcallbacks:"Script callbacks",
|
| | | swstretchstyle:"Stretch style",
|
| | | swstretchhalign:"Stretch H-Align",
|
| | | swstretchvalign:"Stretch V-Align",
|
| | | sound:"Sound",
|
| | | progress:"Progress",
|
| | | qtsrc:"QT Src",
|
| | | qt_stream_warn:"Streamed rtsp resources should be added to the QT Src field under the advanced tab.\nYou should also add a non streamed version to the Src field..",
|
| | | align_top:"Top",
|
| | | align_right:"Right",
|
| | | align_bottom:"Bottom",
|
| | | align_left:"Left",
|
| | | align_center:"Center",
|
| | | align_top_left:"Top left",
|
| | | align_top_right:"Top right",
|
| | | align_bottom_left:"Bottom left",
|
| | | align_bottom_right:"Bottom right",
|
| | | flv_options:"Flash video options",
|
| | | flv_scalemode:"Scale mode",
|
| | | flv_buffer:"Buffer",
|
| | | flv_startimage:"Start image",
|
| | | flv_starttime:"Start time",
|
| | | flv_defaultvolume:"Default volumne",
|
| | | flv_hiddengui:"Hidden GUI",
|
| | | flv_autostart:"Auto start",
|
| | | flv_loop:"Loop",
|
| | | flv_showscalemodes:"Show scale modes",
|
| | | flv_smoothvideo:"Smooth video",
|
| | | flv_jscallback:"JS Callback"
|
| | | }); |
| | |
| | | <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
|
| | | <html xmlns="http://www.w3.org/1999/xhtml">
|
| | | <head>
|
| | | <title>{$lang_media_title}</title>
|
| | | <script language="javascript" type="text/javascript" src="../../tiny_mce_popup.js"></script>
|
| | | <script language="javascript" type="text/javascript" src="jscripts/media.js"></script>
|
| | | <script language="javascript" type="text/javascript" src="../../utils/mctabs.js"></script>
|
| | | <script language="javascript" type="text/javascript" src="../../utils/validate.js"></script>
|
| | | <script language="javascript" type="text/javascript" src="../../utils/form_utils.js"></script>
|
| | | <script language="javascript" type="text/javascript" src="../../utils/editable_selects.js"></script>
|
| | | <title>{#media_dlg.title}</title>
|
| | | <script type="text/javascript" src="../../tiny_mce_popup.js"></script>
|
| | | <script type="text/javascript" src="js/media.js"></script>
|
| | | <script type="text/javascript" src="../../utils/mctabs.js"></script>
|
| | | <script type="text/javascript" src="../../utils/validate.js"></script>
|
| | | <script type="text/javascript" src="../../utils/form_utils.js"></script>
|
| | | <script type="text/javascript" src="../../utils/editable_selects.js"></script>
|
| | | <link href="css/media.css" rel="stylesheet" type="text/css" />
|
| | | <base target="_self" />
|
| | | </head>
|
| | | <body onload="tinyMCEPopup.executeOnLoad('init();');" style="display: none">
|
| | | <body style="display: none">
|
| | | <form onsubmit="insertMedia();return false;" action="#">
|
| | | <div class="tabs">
|
| | | <ul>
|
| | | <li id="general_tab" class="current"><span><a href="javascript:mcTabs.displayTab('general_tab','general_panel');generatePreview();" onmousedown="return false;">{$lang_media_general}</a></span></li>
|
| | | <li id="advanced_tab"><span><a href="javascript:mcTabs.displayTab('advanced_tab','advanced_panel');" onmousedown="return false;">{$lang_media_advanced}</a></span></li>
|
| | | <li id="general_tab" class="current"><span><a href="javascript:mcTabs.displayTab('general_tab','general_panel');generatePreview();" onmousedown="return false;">{#media_dlg.general}</a></span></li>
|
| | | <li id="advanced_tab"><span><a href="javascript:mcTabs.displayTab('advanced_tab','advanced_panel');" onmousedown="return false;">{#media_dlg.advanced}</a></span></li>
|
| | | </ul>
|
| | | </div>
|
| | |
|
| | | <div class="panel_wrapper">
|
| | | <div id="general_panel" class="panel current">
|
| | | <fieldset>
|
| | | <legend>{$lang_media_general}</legend>
|
| | | <legend>{#media_dlg.general}</legend>
|
| | |
|
| | | <table border="0" cellpadding="4" cellspacing="0">
|
| | | <tr>
|
| | | <td><label for="media_type">{$lang_media_type}</label></td>
|
| | | <td><label for="media_type">{#media_dlg.type}</label></td>
|
| | | <td>
|
| | | <select id="media_type" name="media_type" onchange="changedType(this.value);generatePreview();">
|
| | | <option value="flash">Flash</option>
|
| | | <!-- <option value="flv">Flash video (FLV)</option> -->
|
| | | <option value="qt">Quicktime</option>
|
| | | <option value="shockwave">Shockwave</option>
|
| | | <option value="wmp">Windows Media</option>
|
| | |
| | | </td>
|
| | | </tr>
|
| | | <tr>
|
| | | <td><label for="src">{$lang_media_file}</label></td>
|
| | | <td><label for="src">{#media_dlg.file}</label></td>
|
| | | <td>
|
| | | <table border="0" cellspacing="0" cellpadding="0">
|
| | | <tr>
|
| | | <td><input id="src" name="src" type="text" value="" onchange="switchType(this.value);generatePreview();" /></td>
|
| | | <td><input id="src" name="src" type="text" value="" class="mceFocus" onchange="switchType(this.value);generatePreview();" /></td>
|
| | | <td id="filebrowsercontainer"> </td>
|
| | | </tr>
|
| | | </table>
|
| | | </td>
|
| | | </tr>
|
| | | <tr id="linklistrow">
|
| | | <td><label for="linklist">{$lang_media_list}</label></td>
|
| | | <td><label for="linklist">{#media_dlg.list}</label></td>
|
| | | <td id="linklistcontainer"> </td>
|
| | | </tr>
|
| | | <tr>
|
| | | <td><label for="width">{$lang_media_size}</label></td>
|
| | | <td><label for="width">{#media_dlg.size}</label></td>
|
| | | <td>
|
| | | <table border="0" cellpadding="0" cellspacing="0">
|
| | | <tr>
|
| | | <td><input type="text" id="width" name="width" value="" class="size" onchange="generatePreview('width');" /> x <input type="text" id="height" name="height" value="" class="size" onchange="generatePreview('height');" /></td>
|
| | | <td> <input id="constrain" type="checkbox" name="constrain" class="checkbox" /></td>
|
| | | <td><label id="constrainlabel" for="constrain">{$lang_media_constrain_proportions}</label></td>
|
| | | </tr>
|
| | | </table>
|
| | | <table border="0" cellpadding="0" cellspacing="0">
|
| | | <tr>
|
| | | <td><input type="text" id="width" name="width" value="" class="size" onchange="generatePreview('width');" /> x <input type="text" id="height" name="height" value="" class="size" onchange="generatePreview('height');" /></td>
|
| | | <td> <input id="constrain" type="checkbox" name="constrain" class="checkbox" /></td>
|
| | | <td><label id="constrainlabel" for="constrain">{#media_dlg.constrain_proportions}</label></td>
|
| | | </tr>
|
| | | </table>
|
| | | </td>
|
| | | </tr>
|
| | | </table>
|
| | | </fieldset>
|
| | |
|
| | | <fieldset>
|
| | | <legend>{$lang_media_preview}</legend>
|
| | | <legend>{#media_dlg.preview}</legend>
|
| | | <div id="prev"></div>
|
| | | </fieldset>
|
| | | </div>
|
| | |
|
| | | <div id="advanced_panel" class="panel">
|
| | | <fieldset>
|
| | | <legend>{$lang_media_advanced}</legend>
|
| | | <legend>{#media_dlg.advanced}</legend>
|
| | |
|
| | | <table border="0" cellpadding="4" cellspacing="0" width="100%">
|
| | | <tr>
|
| | | <td><label for="id">{$lang_media_id}</label></td>
|
| | | <td><label for="id">{#media_dlg.id}</label></td>
|
| | | <td><input type="text" id="id" name="id" onchange="generatePreview();" /></td>
|
| | | <td><label for="name">{$lang_media_name}</label></td>
|
| | | <td><label for="name">{#media_dlg.name}</label></td>
|
| | | <td><input type="text" id="name" name="name" onchange="generatePreview();" /></td>
|
| | | </tr>
|
| | |
|
| | | <tr>
|
| | | <td><label for="align">{$lang_media_align}</label></td>
|
| | | <td><label for="align">{#media_dlg.align}</label></td>
|
| | | <td>
|
| | | <select id="align" name="align" onchange="generatePreview();">
|
| | | <option value="">{$lang_not_set}</option> |
| | | <option value="top">{$lang_media_align_top}</option>
|
| | | <option value="right">{$lang_media_align_right}</option>
|
| | | <option value="bottom">{$lang_media_align_bottom}</option>
|
| | | <option value="left">{$lang_media_align_left}</option>
|
| | | <option value="">{#not_set}</option> |
| | | <option value="top">{#media_dlg.align_top}</option>
|
| | | <option value="right">{#media_dlg.align_right}</option>
|
| | | <option value="bottom">{#media_dlg.align_bottom}</option>
|
| | | <option value="left">{#media_dlg.align_left}</option>
|
| | | </select>
|
| | | </td>
|
| | |
|
| | | <td><label for="bgcolor">{$lang_media_bgcolor}</label></td>
|
| | | <td><label for="bgcolor">{#media_dlg.bgcolor}</label></td>
|
| | | <td>
|
| | | <table border="0" cellpadding="0" cellspacing="0">
|
| | | <tr>
|
| | |
| | | </tr>
|
| | |
|
| | | <tr>
|
| | | <td><label for="vspace">{$lang_media_vspace}</label></td>
|
| | | <td><label for="vspace">{#media_dlg.vspace}</label></td>
|
| | | <td><input type="text" id="vspace" name="vspace" class="number" onchange="generatePreview();" /></td>
|
| | | <td><label for="hspace">{$lang_media_hspace}</label></td>
|
| | | <td><label for="hspace">{#media_dlg.hspace}</label></td>
|
| | | <td><input type="text" id="hspace" name="hspace" class="number" onchange="generatePreview();" /></td>
|
| | | </tr>
|
| | | </table>
|
| | | </fieldset>
|
| | |
|
| | | <fieldset id="flash_options">
|
| | | <legend>{$lang_media_flash_options}</legend>
|
| | | <legend>{#media_dlg.flash_options}</legend>
|
| | |
|
| | | <table border="0" cellpadding="4" cellspacing="0">
|
| | | <tr>
|
| | | <td><label for="flash_quality">{$lang_media_quality}</label></td>
|
| | | <td><label for="flash_quality">{#media_dlg.quality}</label></td>
|
| | | <td>
|
| | | <select id="flash_quality" name="flash_quality" onchange="generatePreview();">
|
| | | <option value="">{$lang_not_set}</option> |
| | | <option value="">{#not_set}</option> |
| | | <option value="high">high</option>
|
| | | <option value="low">low</option>
|
| | | <option value="autolow">autolow</option>
|
| | |
| | | </select>
|
| | | </td>
|
| | |
|
| | | <td><label for="flash_scale">{$lang_media_scale}</label></td>
|
| | | <td><label for="flash_scale">{#media_dlg.scale}</label></td>
|
| | | <td>
|
| | | <select id="flash_scale" name="flash_scale" onchange="generatePreview();">
|
| | | <option value="">{$lang_not_set}</option> |
| | | <option value="">{#not_set}</option> |
| | | <option value="showall">showall</option>
|
| | | <option value="noborder">noborder</option>
|
| | | <option value="exactfit">exactfit</option>
|
| | | <option value="noscale">noscale</option>
|
| | | </select>
|
| | | </td>
|
| | | </tr>
|
| | |
|
| | | <tr>
|
| | | <td><label for="flash_wmode">{$lang_media_wmode}</label></td>
|
| | | <td><label for="flash_wmode">{#media_dlg.wmode}</label></td>
|
| | | <td>
|
| | | <select id="flash_wmode" name="flash_wmode" onchange="generatePreview();">
|
| | | <option value="">{$lang_not_set}</option> |
| | | <option value="">{#not_set}</option> |
| | | <option value="window">window</option>
|
| | | <option value="opaque">opaque</option>
|
| | | <option value="transparent">transparent</option>
|
| | | </select>
|
| | | </td>
|
| | |
|
| | | <td><label for="flash_salign">{$lang_media_salign}</label></td>
|
| | | <td><label for="flash_salign">{#media_dlg.salign}</label></td>
|
| | | <td>
|
| | | <select id="flash_salign" name="flash_salign" onchange="generatePreview();">
|
| | | <option value="">{$lang_not_set}</option> |
| | | <option value="l">{$lang_media_align_left}</option>
|
| | | <option value="t">{$lang_media_align_top}</option>
|
| | | <option value="r">{$lang_media_align_right}</option>
|
| | | <option value="b">{$lang_media_align_bottom}</option>
|
| | | <option value="tl">{$lang_media_align_top_left}</option>
|
| | | <option value="tr">{$lang_media_align_top_right}</option>
|
| | | <option value="bl">{$lang_media_align_bottom_left}</option>
|
| | | <option value="br">{$lang_media_align_bottom_right}</option>
|
| | | <option value="">{#not_set}</option> |
| | | <option value="l">{#media_dlg.align_left}</option>
|
| | | <option value="t">{#media_dlg.align_top}</option>
|
| | | <option value="r">{#media_dlg.align_right}</option>
|
| | | <option value="b">{#media_dlg.align_bottom}</option>
|
| | | <option value="tl">{#media_dlg.align_top_left}</option>
|
| | | <option value="tr">{#media_dlg.align_top_right}</option>
|
| | | <option value="bl">{#media_dlg.align_bottom_left}</option>
|
| | | <option value="br">{#media_dlg.align_bottom_right}</option>
|
| | | </select>
|
| | | </td>
|
| | | </tr>
|
| | |
| | | <table border="0" cellpadding="0" cellspacing="0">
|
| | | <tr>
|
| | | <td><input type="checkbox" class="checkbox" id="flash_play" name="flash_play" checked="checked" onchange="generatePreview();" /></td>
|
| | | <td><label for="flash_play">{$lang_media_play}</label></td>
|
| | | <td><label for="flash_play">{#media_dlg.play}</label></td>
|
| | | </tr>
|
| | | </table>
|
| | | </td>
|
| | |
| | | <table border="0" cellpadding="0" cellspacing="0">
|
| | | <tr>
|
| | | <td><input type="checkbox" class="checkbox" id="flash_loop" name="flash_loop" checked="checked" onchange="generatePreview();" /></td>
|
| | | <td><label for="flash_loop">{$lang_media_loop}</label></td>
|
| | | <td><label for="flash_loop">{#media_dlg.loop}</label></td>
|
| | | </tr>
|
| | | </table>
|
| | | </td>
|
| | |
| | | <table border="0" cellpadding="0" cellspacing="0">
|
| | | <tr>
|
| | | <td><input type="checkbox" class="checkbox" id="flash_menu" name="flash_menu" checked="checked" onchange="generatePreview();" /></td>
|
| | | <td><label for="flash_menu">{$lang_media_menu}</label></td>
|
| | | <td><label for="flash_menu">{#media_dlg.menu}</label></td>
|
| | | </tr>
|
| | | </table>
|
| | | </td>
|
| | |
| | | <table border="0" cellpadding="0" cellspacing="0">
|
| | | <tr>
|
| | | <td><input type="checkbox" class="checkbox" id="flash_swliveconnect" name="flash_swliveconnect" onchange="generatePreview();" /></td>
|
| | | <td><label for="flash_swliveconnect">{$lang_media_liveconnect}</label></td>
|
| | | <td><label for="flash_swliveconnect">{#media_dlg.liveconnect}</label></td>
|
| | | </tr>
|
| | | </table>
|
| | | </td>
|
| | |
| | |
|
| | | <table>
|
| | | <tr>
|
| | | <td><label for="flash_base">{$lang_media_base}</label></td>
|
| | | <td><label for="flash_base">{#media_dlg.base}</label></td>
|
| | | <td><input type="text" id="flash_base" name="flash_base" onchange="generatePreview();" /></td>
|
| | | </tr>
|
| | |
|
| | | <tr>
|
| | | <td><label for="flash_flashvars">{$lang_media_flashvars}</label></td>
|
| | | <td><label for="flash_flashvars">{#media_dlg.flashvars}</label></td>
|
| | | <td><input type="text" id="flash_flashvars" name="flash_flashvars" onchange="generatePreview();" /></td>
|
| | | </tr>
|
| | | </table>
|
| | | </fieldset>
|
| | |
|
| | | <fieldset id="flv_options">
|
| | | <legend>{#media_dlg.flv_options}</legend>
|
| | |
|
| | | <table border="0" cellpadding="4" cellspacing="0">
|
| | | <tr>
|
| | | <td><label for="flv_scalemode">{#media_dlg.flv_scalemode}</label></td>
|
| | | <td>
|
| | | <select id="flv_scalemode" name="flv_scalemode" onchange="generatePreview();">
|
| | | <option value="">{#not_set}</option> |
| | | <option value="none">none</option>
|
| | | <option value="double">double</option>
|
| | | <option value="full">full</option>
|
| | | </select>
|
| | | </td>
|
| | |
|
| | | <td><label for="flv_buffer">{#media_dlg.flv_buffer}</label></td>
|
| | | <td><input type="text" id="flv_buffer" name="flv_buffer" onchange="generatePreview();" /></td>
|
| | | </tr>
|
| | |
|
| | | <tr>
|
| | | <td><label for="flv_startimage">{#media_dlg.flv_startimage}</label></td>
|
| | | <td><input type="text" id="flv_startimage" name="flv_startimage" onchange="generatePreview();" /></td>
|
| | |
|
| | | <td><label for="flv_starttime">{#media_dlg.flv_starttime}</label></td>
|
| | | <td><input type="text" id="flv_starttime" name="flv_starttime" onchange="generatePreview();" /></td>
|
| | | </tr>
|
| | |
|
| | | <tr>
|
| | | <td><label for="flv_defaultvolume">{#media_dlg.flv_defaultvolume}</label></td>
|
| | | <td><input type="text" id="flv_defaultvolume" name="flv_defaultvolume" onchange="generatePreview();" /></td>
|
| | |
|
| | | <td><label for="flv_starttime">{#media_dlg.flv_starttime}</label></td>
|
| | | <td><input type="text" id="flv_starttime" name="flv_starttime" onchange="generatePreview();" /></td>
|
| | | </tr>
|
| | |
|
| | | <tr>
|
| | | <td colspan="2">
|
| | | <table border="0" cellpadding="0" cellspacing="0">
|
| | | <tr>
|
| | | <td><input type="checkbox" class="checkbox" id="flv_hiddengui" name="flv_hiddengui" checked="checked" onchange="generatePreview();" /></td>
|
| | | <td><label for="flv_hiddengui">{#media_dlg.flv_hiddengui}</label></td>
|
| | | </tr>
|
| | | </table>
|
| | | </td>
|
| | |
|
| | | <td colspan="2">
|
| | | <table border="0" cellpadding="0" cellspacing="0">
|
| | | <tr>
|
| | | <td><input type="checkbox" class="checkbox" id="flv_autostart" name="flv_autostart" checked="checked" onchange="generatePreview();" /></td>
|
| | | <td><label for="flv_autostart">{#media_dlg.flv_autostart}</label></td>
|
| | | </tr>
|
| | | </table>
|
| | | </td>
|
| | | </tr>
|
| | |
|
| | | <tr>
|
| | | <td colspan="2">
|
| | | <table border="0" cellpadding="0" cellspacing="0">
|
| | | <tr>
|
| | | <td><input type="checkbox" class="checkbox" id="flv_loop" name="flv_loop" checked="checked" onchange="generatePreview();" /></td>
|
| | | <td><label for="flv_loop">{#media_dlg.flv_loop}</label></td>
|
| | | </tr>
|
| | | </table>
|
| | | </td>
|
| | |
|
| | | <td colspan="2">
|
| | | <table border="0" cellpadding="0" cellspacing="0">
|
| | | <tr>
|
| | | <td><input type="checkbox" class="checkbox" id="flv_showscalemodes" name="flv_showscalemodes" onchange="generatePreview();" /></td>
|
| | | <td><label for="flv_showscalemodes">{#media_dlg.flv_showscalemodes}</label></td>
|
| | | </tr>
|
| | | </table>
|
| | | </td>
|
| | | </tr>
|
| | |
|
| | | <tr>
|
| | | <td colspan="2">
|
| | | <table border="0" cellpadding="0" cellspacing="0">
|
| | | <tr>
|
| | | <td><input type="checkbox" class="checkbox" id="flv_smoothvideo" name="flash_flv_flv_smoothvideosmoothvideo" checked="checked" onchange="generatePreview();" /></td>
|
| | | <td><label for="flv_smoothvideo">{#media_dlg.flv_smoothvideo}</label></td>
|
| | | </tr>
|
| | | </table>
|
| | | </td>
|
| | |
|
| | | <td colspan="2">
|
| | | <table border="0" cellpadding="0" cellspacing="0">
|
| | | <tr>
|
| | | <td><input type="checkbox" class="checkbox" id="flv_jscallback" name="flv_jscallback" onchange="generatePreview();" /></td>
|
| | | <td><label for="flv_jscallback">{#media_dlg.flv_jscallback}</label></td>
|
| | | </tr>
|
| | | </table>
|
| | | </td>
|
| | | </tr>
|
| | | </table>
|
| | | </fieldset>
|
| | |
|
| | | <fieldset id="qt_options">
|
| | | <legend>{$lang_media_qt_options}</legend>
|
| | | <legend>{#media_dlg.qt_options}</legend>
|
| | |
|
| | | <table border="0" cellpadding="4" cellspacing="0">
|
| | | <tr>
|
| | |
| | | <table border="0" cellpadding="0" cellspacing="0">
|
| | | <tr>
|
| | | <td><input type="checkbox" class="checkbox" id="qt_loop" name="qt_loop" onchange="generatePreview();" /></td>
|
| | | <td><label for="qt_loop">{$lang_media_loop}</label></td>
|
| | | <td><label for="qt_loop">{#media_dlg.loop}</label></td>
|
| | | </tr>
|
| | | </table>
|
| | | </td>
|
| | |
| | | <table border="0" cellpadding="0" cellspacing="0">
|
| | | <tr>
|
| | | <td><input type="checkbox" class="checkbox" id="qt_autoplay" name="qt_autoplay" checked="checked" onchange="generatePreview();" /></td>
|
| | | <td><label for="qt_autoplay">{$lang_media_play}</label></td>
|
| | | <td><label for="qt_autoplay">{#media_dlg.play}</label></td>
|
| | | </tr>
|
| | | </table>
|
| | | </td>
|
| | |
| | | <table border="0" cellpadding="0" cellspacing="0">
|
| | | <tr>
|
| | | <td><input type="checkbox" class="checkbox" id="qt_cache" name="qt_cache" onchange="generatePreview();" /></td>
|
| | | <td><label for="qt_cache">{$lang_media_cache}</label></td>
|
| | | <td><label for="qt_cache">{#media_dlg.cache}</label></td>
|
| | | </tr>
|
| | | </table>
|
| | | </td>
|
| | |
| | | <table border="0" cellpadding="0" cellspacing="0">
|
| | | <tr>
|
| | | <td><input type="checkbox" class="checkbox" id="qt_controller" name="qt_controller" checked="checked" onchange="generatePreview();" /></td>
|
| | | <td><label for="qt_controller">{$lang_media_controller}</label></td>
|
| | | <td><label for="qt_controller">{#media_dlg.controller}</label></td>
|
| | | </tr>
|
| | | </table>
|
| | | </td>
|
| | |
| | | <table border="0" cellpadding="0" cellspacing="0">
|
| | | <tr>
|
| | | <td><input type="checkbox" class="checkbox" id="qt_correction" name="qt_correction" onchange="generatePreview();" /></td>
|
| | | <td><label for="qt_correction">{$lang_media_correction}</label></td>
|
| | | <td><label for="qt_correction">{#media_dlg.correction}</label></td>
|
| | | </tr>
|
| | | </table>
|
| | | </td>
|
| | |
| | | <table border="0" cellpadding="0" cellspacing="0">
|
| | | <tr>
|
| | | <td><input type="checkbox" class="checkbox" id="qt_enablejavascript" name="qt_enablejavascript" onchange="generatePreview();" /></td>
|
| | | <td><label for="qt_enablejavascript">{$lang_media_enablejavascript}</label></td>
|
| | | <td><label for="qt_enablejavascript">{#media_dlg.enablejavascript}</label></td>
|
| | | </tr>
|
| | | </table>
|
| | | </td>
|
| | |
| | | <table border="0" cellpadding="0" cellspacing="0">
|
| | | <tr>
|
| | | <td><input type="checkbox" class="checkbox" id="qt_kioskmode" name="qt_kioskmode" onchange="generatePreview();" /></td>
|
| | | <td><label for="qt_kioskmode">{$lang_media_kioskmode}</label></td>
|
| | | <td><label for="qt_kioskmode">{#media_dlg.kioskmode}</label></td>
|
| | | </tr>
|
| | | </table>
|
| | | </td>
|
| | |
| | | <table border="0" cellpadding="0" cellspacing="0">
|
| | | <tr>
|
| | | <td><input type="checkbox" class="checkbox" id="qt_autohref" name="qt_autohref" onchange="generatePreview();" /></td>
|
| | | <td><label for="qt_autohref">{$lang_media_autohref}</label></td>
|
| | | <td><label for="qt_autohref">{#media_dlg.autohref}</label></td>
|
| | | </tr>
|
| | | </table>
|
| | | </td>
|
| | |
| | | <table border="0" cellpadding="0" cellspacing="0">
|
| | | <tr>
|
| | | <td><input type="checkbox" class="checkbox" id="qt_playeveryframe" name="qt_playeveryframe" onchange="generatePreview();" /></td>
|
| | | <td><label for="qt_playeveryframe">{$lang_media_playeveryframe}</label></td>
|
| | | <td><label for="qt_playeveryframe">{#media_dlg.playeveryframe}</label></td>
|
| | | </tr>
|
| | | </table>
|
| | | </td>
|
| | |
| | | <table border="0" cellpadding="0" cellspacing="0">
|
| | | <tr>
|
| | | <td><input type="checkbox" class="checkbox" id="qt_targetcache" name="qt_targetcache" onchange="generatePreview();" /></td>
|
| | | <td><label for="qt_targetcache">{$lang_media_targetcache}</label></td>
|
| | | <td><label for="qt_targetcache">{#media_dlg.targetcache}</label></td>
|
| | | </tr>
|
| | | </table>
|
| | | </td>
|
| | | </tr>
|
| | |
|
| | | <tr>
|
| | | <td><label for="qt_scale">{$lang_media_scale}</label></td>
|
| | | <td><label for="qt_scale">{#media_dlg.scale}</label></td>
|
| | | <td><select id="qt_scale" name="qt_scale" class="mceEditableSelect" onchange="generatePreview();">
|
| | | <option value="">{$lang_not_set}</option> |
| | | <option value="">{#not_set}</option> |
| | | <option value="tofit">tofit</option>
|
| | | <option value="aspect">aspect</option>
|
| | | </select>
|
| | |
| | | </tr>
|
| | |
|
| | | <tr>
|
| | | <td><label for="qt_starttime">{$lang_media_starttime}</label></td>
|
| | | <td><label for="qt_starttime">{#media_dlg.starttime}</label></td>
|
| | | <td><input type="text" id="qt_starttime" name="qt_starttime" onchange="generatePreview();" /></td>
|
| | |
|
| | | <td><label for="qt_endtime">{$lang_media_endtime}</label></td>
|
| | | <td><label for="qt_endtime">{#media_dlg.endtime}</label></td>
|
| | | <td><input type="text" id="qt_endtime" name="qt_endtime" onchange="generatePreview();" /></td>
|
| | | </tr>
|
| | |
|
| | | <tr>
|
| | | <td><label for="qt_target">{$lang_media_target}</label></td>
|
| | | <td><label for="qt_target">{#media_dlg.target}</label></td>
|
| | | <td><input type="text" id="qt_target" name="qt_target" onchange="generatePreview();" /></td>
|
| | |
|
| | | <td><label for="qt_href">{$lang_media_href}</label></td>
|
| | | <td><label for="qt_href">{#media_dlg.href}</label></td>
|
| | | <td><input type="text" id="qt_href" name="qt_href" onchange="generatePreview();" /></td>
|
| | | </tr>
|
| | |
|
| | | <tr>
|
| | | <td><label for="qt_qtsrcchokespeed">{$lang_media_qtsrcchokespeed}</label></td>
|
| | | <td><label for="qt_qtsrcchokespeed">{#media_dlg.qtsrcchokespeed}</label></td>
|
| | | <td><input type="text" id="qt_qtsrcchokespeed" name="qt_qtsrcchokespeed" onchange="generatePreview();" /></td>
|
| | |
|
| | | <td><label for="qt_volume">{$lang_media_volume}</label></td>
|
| | | <td><label for="qt_volume">{#media_dlg.volume}</label></td>
|
| | | <td><input type="text" id="qt_volume" name="qt_volume" onchange="generatePreview();" /></td>
|
| | | </tr>
|
| | |
|
| | | <tr>
|
| | | <td><label for="qt_qtsrc">{$lang_media_qtsrc}</label></td>
|
| | | <td><label for="qt_qtsrc">{#media_dlg.qtsrc}</label></td>
|
| | | <td colspan="4">
|
| | | <table border="0" cellspacing="0" cellpadding="0">
|
| | | <tr>
|
| | |
| | | </fieldset>
|
| | |
|
| | | <fieldset id="wmp_options">
|
| | | <legend>{$lang_media_wmp_options}</legend>
|
| | | <legend>{#media_dlg.wmp_options}</legend>
|
| | |
|
| | | <table border="0" cellpadding="4" cellspacing="0">
|
| | | <tr>
|
| | |
| | | <table border="0" cellpadding="0" cellspacing="0">
|
| | | <tr>
|
| | | <td><input type="checkbox" class="checkbox" id="wmp_autostart" name="wmp_autostart" checked="checked" onchange="generatePreview();" /></td>
|
| | | <td><label for="wmp_autostart">{$lang_media_autostart}</label></td>
|
| | | <td><label for="wmp_autostart">{#media_dlg.autostart}</label></td>
|
| | | </tr>
|
| | | </table>
|
| | | </td>
|
| | |
| | | <table border="0" cellpadding="0" cellspacing="0">
|
| | | <tr>
|
| | | <td><input type="checkbox" class="checkbox" id="wmp_enabled" name="wmp_enabled" onchange="generatePreview();" /></td>
|
| | | <td><label for="wmp_enabled">{$lang_media_enabled}</label></td>
|
| | | <td><label for="wmp_enabled">{#media_dlg.enabled}</label></td>
|
| | | </tr>
|
| | | </table>
|
| | | </td>
|
| | |
| | | <table border="0" cellpadding="0" cellspacing="0">
|
| | | <tr>
|
| | | <td><input type="checkbox" class="checkbox" id="wmp_enablecontextmenu" name="wmp_enablecontextmenu" checked="checked" onchange="generatePreview();" /></td>
|
| | | <td><label for="wmp_enablecontextmenu">{$lang_media_menu}</label></td>
|
| | | <td><label for="wmp_enablecontextmenu">{#media_dlg.menu}</label></td>
|
| | | </tr>
|
| | | </table>
|
| | | </td>
|
| | |
| | | <table border="0" cellpadding="0" cellspacing="0">
|
| | | <tr>
|
| | | <td><input type="checkbox" class="checkbox" id="wmp_fullscreen" name="wmp_fullscreen" onchange="generatePreview();" /></td>
|
| | | <td><label for="wmp_fullscreen">{$lang_media_fullscreen}</label></td>
|
| | | <td><label for="wmp_fullscreen">{#media_dlg.fullscreen}</label></td>
|
| | | </tr>
|
| | | </table>
|
| | | </td>
|
| | |
| | | <table border="0" cellpadding="0" cellspacing="0">
|
| | | <tr>
|
| | | <td><input type="checkbox" class="checkbox" id="wmp_invokeurls" name="wmp_invokeurls" checked="checked" onchange="generatePreview();" /></td>
|
| | | <td><label for="wmp_invokeurls">{$lang_media_invokeurls}</label></td>
|
| | | <td><label for="wmp_invokeurls">{#media_dlg.invokeurls}</label></td>
|
| | | </tr>
|
| | | </table>
|
| | | </td>
|
| | |
| | | <table border="0" cellpadding="0" cellspacing="0">
|
| | | <tr>
|
| | | <td><input type="checkbox" class="checkbox" id="wmp_mute" name="wmp_mute" onchange="generatePreview();" /></td>
|
| | | <td><label for="wmp_mute">{$lang_media_mute}</label></td>
|
| | | <td><label for="wmp_mute">{#media_dlg.mute}</label></td>
|
| | | </tr>
|
| | | </table>
|
| | | </td>
|
| | |
| | | <table border="0" cellpadding="0" cellspacing="0">
|
| | | <tr>
|
| | | <td><input type="checkbox" class="checkbox" id="wmp_stretchtofit" name="wmp_stretchtofit" onchange="generatePreview();" /></td>
|
| | | <td><label for="wmp_stretchtofit">{$lang_media_stretchtofit}</label></td>
|
| | | <td><label for="wmp_stretchtofit">{#media_dlg.stretchtofit}</label></td>
|
| | | </tr>
|
| | | </table>
|
| | | </td>
|
| | |
| | | <table border="0" cellpadding="0" cellspacing="0">
|
| | | <tr>
|
| | | <td><input type="checkbox" class="checkbox" id="wmp_windowlessvideo" name="wmp_windowlessvideo" onchange="generatePreview();" /></td>
|
| | | <td><label for="wmp_windowlessvideo">{$lang_media_windowlessvideo}</label></td>
|
| | | <td><label for="wmp_windowlessvideo">{#media_dlg.windowlessvideo}</label></td>
|
| | | </tr>
|
| | | </table>
|
| | | </td>
|
| | | </tr>
|
| | |
|
| | | <tr>
|
| | | <td><label for="wmp_balance">{$lang_media_balance}</label></td>
|
| | | <td><label for="wmp_balance">{#media_dlg.balance}</label></td>
|
| | | <td><input type="text" id="wmp_balance" name="wmp_balance" onchange="generatePreview();" /></td>
|
| | |
|
| | | <td><label for="wmp_baseurl">{$lang_media_baseurl}</label></td>
|
| | | <td><label for="wmp_baseurl">{#media_dlg.baseurl}</label></td>
|
| | | <td><input type="text" id="wmp_baseurl" name="wmp_baseurl" onchange="generatePreview();" /></td>
|
| | | </tr>
|
| | |
|
| | | <tr>
|
| | | <td><label for="wmp_captioningid">{$lang_media_captioningid}</label></td>
|
| | | <td><label for="wmp_captioningid">{#media_dlg.captioningid}</label></td>
|
| | | <td><input type="text" id="wmp_captioningid" name="wmp_captioningid" onchange="generatePreview();" /></td>
|
| | |
|
| | | <td><label for="wmp_currentmarker">{$lang_media_currentmarker}</label></td>
|
| | | <td><label for="wmp_currentmarker">{#media_dlg.currentmarker}</label></td>
|
| | | <td><input type="text" id="wmp_currentmarker" name="wmp_currentmarker" onchange="generatePreview();" /></td>
|
| | | </tr>
|
| | |
|
| | | <tr>
|
| | | <td><label for="wmp_currentposition">{$lang_media_currentposition}</label></td>
|
| | | <td><label for="wmp_currentposition">{#media_dlg.currentposition}</label></td>
|
| | | <td><input type="text" id="wmp_currentposition" name="wmp_currentposition" onchange="generatePreview();" /></td>
|
| | |
|
| | | <td><label for="wmp_defaultframe">{$lang_media_defaultframe}</label></td>
|
| | | <td><label for="wmp_defaultframe">{#media_dlg.defaultframe}</label></td>
|
| | | <td><input type="text" id="wmp_defaultframe" name="wmp_defaultframe" onchange="generatePreview();" /></td>
|
| | | </tr>
|
| | |
|
| | | <tr>
|
| | | <td><label for="wmp_playcount">{$lang_media_playcount}</label></td>
|
| | | <td><label for="wmp_playcount">{#media_dlg.playcount}</label></td>
|
| | | <td><input type="text" id="wmp_playcount" name="wmp_playcount" onchange="generatePreview();" /></td>
|
| | |
|
| | | <td><label for="wmp_rate">{$lang_media_rate}</label></td>
|
| | | <td><label for="wmp_rate">{#media_dlg.rate}</label></td>
|
| | | <td><input type="text" id="wmp_rate" name="wmp_rate" onchange="generatePreview();" /></td>
|
| | | </tr>
|
| | |
|
| | | <tr>
|
| | | <td><label for="wmp_uimode">{$lang_media_uimode}</label></td>
|
| | | <td><label for="wmp_uimode">{#media_dlg.uimode}</label></td>
|
| | | <td><input type="text" id="wmp_uimode" name="wmp_uimode" onchange="generatePreview();" /></td>
|
| | |
|
| | | <td><label for="wmp_volume">{$lang_media_volume}</label></td>
|
| | | <td><label for="wmp_volume">{#media_dlg.volume}</label></td>
|
| | | <td><input type="text" id="wmp_volume" name="wmp_volume" onchange="generatePreview();" /></td>
|
| | | </tr>
|
| | |
|
| | |
| | | </fieldset>
|
| | |
|
| | | <fieldset id="rmp_options">
|
| | | <legend>{$lang_media_rmp_options}</legend>
|
| | | <legend>{#media_dlg.rmp_options}</legend>
|
| | |
|
| | | <table border="0" cellpadding="4" cellspacing="0">
|
| | | <tr>
|
| | |
| | | <table border="0" cellpadding="0" cellspacing="0">
|
| | | <tr>
|
| | | <td><input type="checkbox" class="checkbox" id="rmp_autostart" name="rmp_autostart" onchange="generatePreview();" /></td>
|
| | | <td><label for="rmp_autostart">{$lang_media_autostart}</label></td>
|
| | | <td><label for="rmp_autostart">{#media_dlg.autostart}</label></td>
|
| | | </tr>
|
| | | </table>
|
| | | </td>
|
| | |
| | | <table border="0" cellpadding="0" cellspacing="0">
|
| | | <tr>
|
| | | <td><input type="checkbox" class="checkbox" id="rmp_loop" name="rmp_loop" onchange="generatePreview();" /></td>
|
| | | <td><label for="rmp_loop">{$lang_media_loop}</label></td>
|
| | | <td><label for="rmp_loop">{#media_dlg.loop}</label></td>
|
| | | </tr>
|
| | | </table>
|
| | | </td>
|
| | |
| | | <table border="0" cellpadding="0" cellspacing="0">
|
| | | <tr>
|
| | | <td><input type="checkbox" class="checkbox" id="rmp_autogotourl" name="rmp_autogotourl" checked="checked" onchange="generatePreview();" /></td>
|
| | | <td><label for="rmp_autogotourl">{$lang_media_autogotourl}</label></td>
|
| | | <td><label for="rmp_autogotourl">{#media_dlg.autogotourl}</label></td>
|
| | | </tr>
|
| | | </table>
|
| | | </td>
|
| | |
| | | <table border="0" cellpadding="0" cellspacing="0">
|
| | | <tr>
|
| | | <td><input type="checkbox" class="checkbox" id="rmp_center" name="rmp_center" onchange="generatePreview();" /></td>
|
| | | <td><label for="rmp_center">{$lang_media_center}</label></td>
|
| | | <td><label for="rmp_center">{#media_dlg.center}</label></td>
|
| | | </tr>
|
| | | </table>
|
| | | </td>
|
| | |
| | | <table border="0" cellpadding="0" cellspacing="0">
|
| | | <tr>
|
| | | <td><input type="checkbox" class="checkbox" id="rmp_imagestatus" name="rmp_imagestatus" checked="checked" onchange="generatePreview();" /></td>
|
| | | <td><label for="rmp_imagestatus">{$lang_media_imagestatus}</label></td>
|
| | | <td><label for="rmp_imagestatus">{#media_dlg.imagestatus}</label></td>
|
| | | </tr>
|
| | | </table>
|
| | | </td>
|
| | |
| | | <table border="0" cellpadding="0" cellspacing="0">
|
| | | <tr>
|
| | | <td><input type="checkbox" class="checkbox" id="rmp_maintainaspect" name="rmp_maintainaspect" onchange="generatePreview();" /></td>
|
| | | <td><label for="rmp_maintainaspect">{$lang_media_maintainaspect}</label></td>
|
| | | <td><label for="rmp_maintainaspect">{#media_dlg.maintainaspect}</label></td>
|
| | | </tr>
|
| | | </table>
|
| | | </td>
|
| | |
| | | <table border="0" cellpadding="0" cellspacing="0">
|
| | | <tr>
|
| | | <td><input type="checkbox" class="checkbox" id="rmp_nojava" name="rmp_nojava" onchange="generatePreview();" /></td>
|
| | | <td><label for="rmp_nojava">{$lang_media_nojava}</label></td>
|
| | | <td><label for="rmp_nojava">{#media_dlg.nojava}</label></td>
|
| | | </tr>
|
| | | </table>
|
| | | </td>
|
| | |
| | | <table border="0" cellpadding="0" cellspacing="0">
|
| | | <tr>
|
| | | <td><input type="checkbox" class="checkbox" id="rmp_prefetch" name="rmp_prefetch" onchange="generatePreview();" /></td>
|
| | | <td><label for="rmp_prefetch">{$lang_media_prefetch}</label></td>
|
| | | <td><label for="rmp_prefetch">{#media_dlg.prefetch}</label></td>
|
| | | </tr>
|
| | | </table>
|
| | | </td>
|
| | |
| | | <table border="0" cellpadding="0" cellspacing="0">
|
| | | <tr>
|
| | | <td><input type="checkbox" class="checkbox" id="rmp_shuffle" name="rmp_shuffle" onchange="generatePreview();" /></td>
|
| | | <td><label for="rmp_shuffle">{$lang_media_shuffle}</label></td>
|
| | | <td><label for="rmp_shuffle">{#media_dlg.shuffle}</label></td>
|
| | | </tr>
|
| | | </table>
|
| | | </td>
|
| | |
| | | </tr>
|
| | |
|
| | | <tr>
|
| | | <td><label for="rmp_console">{$lang_media_console}</label></td>
|
| | | <td><label for="rmp_console">{#media_dlg.console}</label></td>
|
| | | <td><input type="text" id="rmp_console" name="rmp_console" onchange="generatePreview();" /></td>
|
| | |
|
| | | <td><label for="rmp_controls">{$lang_media_controls}</label></td>
|
| | | <td><label for="rmp_controls">{#media_dlg.controls}</label></td>
|
| | | <td><input type="text" id="rmp_controls" name="rmp_controls" onchange="generatePreview();" /></td>
|
| | | </tr>
|
| | |
|
| | | <tr>
|
| | | <td><label for="rmp_numloop">{$lang_media_numloop}</label></td>
|
| | | <td><label for="rmp_numloop">{#media_dlg.numloop}</label></td>
|
| | | <td><input type="text" id="rmp_numloop" name="rmp_numloop" onchange="generatePreview();" /></td>
|
| | |
|
| | | <td><label for="rmp_scriptcallbacks">{$lang_media_scriptcallbacks}</label></td>
|
| | | <td><label for="rmp_scriptcallbacks">{#media_dlg.scriptcallbacks}</label></td>
|
| | | <td><input type="text" id="rmp_scriptcallbacks" name="rmp_scriptcallbacks" onchange="generatePreview();" /></td>
|
| | | </tr>
|
| | | </table>
|
| | | </fieldset>
|
| | |
|
| | | <fieldset id="shockwave_options">
|
| | | <legend>{$lang_media_shockwave_options}</legend>
|
| | | <legend>{#media_dlg.shockwave_options}</legend>
|
| | |
|
| | | <table border="0" cellpadding="4" cellspacing="0">
|
| | | <tr>
|
| | | <td><label for="shockwave_swstretchstyle">{$lang_media_swstretchstyle}</label></td>
|
| | | <td><label for="shockwave_swstretchstyle">{#media_dlg.swstretchstyle}</label></td>
|
| | | <td>
|
| | | <select id="shockwave_swstretchstyle" name="shockwave_swstretchstyle" onchange="generatePreview();">
|
| | | <option value="none">{$lang_not_set}</option>
|
| | | <option value="none">{#not_set}</option>
|
| | | <option value="meet">Meet</option>
|
| | | <option value="fill">Fill</option>
|
| | | <option value="stage">Stage</option>
|
| | | </select>
|
| | | </td>
|
| | |
|
| | | <td><label for="shockwave_swvolume">{$lang_media_volume}</label></td>
|
| | | <td><label for="shockwave_swvolume">{#media_dlg.volume}</label></td>
|
| | | <td><input type="text" id="shockwave_swvolume" name="shockwave_swvolume" onchange="generatePreview();" /></td>
|
| | | </tr>
|
| | |
|
| | | <tr>
|
| | | <td><label for="shockwave_swstretchhalign">{$lang_media_swstretchhalign}</label></td>
|
| | | <td><label for="shockwave_swstretchhalign">{#media_dlg.swstretchhalign}</label></td>
|
| | | <td>
|
| | | <select id="shockwave_swstretchhalign" name="shockwave_swstretchhalign" onchange="generatePreview();">
|
| | | <option value="none">{$lang_not_set}</option>
|
| | | <option value="left">{$lang_media_align_left}</option>
|
| | | <option value="center">{$lang_media_align_center}</option>
|
| | | <option value="right">{$lang_media_align_right}</option>
|
| | | <option value="none">{#not_set}</option>
|
| | | <option value="left">{#media_dlg.align_left}</option>
|
| | | <option value="center">{#media_dlg.align_center}</option>
|
| | | <option value="right">{#media_dlg.align_right}</option>
|
| | | </select>
|
| | | </td>
|
| | |
|
| | | <td><label for="shockwave_swstretchvalign">{$lang_media_swstretchvalign}</label></td>
|
| | | <td><label for="shockwave_swstretchvalign">{#media_dlg.swstretchvalign}</label></td>
|
| | | <td>
|
| | | <select id="shockwave_swstretchvalign" name="shockwave_swstretchvalign" onchange="generatePreview();">
|
| | | <option value="none">{$lang_not_set}</option>
|
| | | <option value="none">{#not_set}</option>
|
| | | <option value="meet">Meet</option>
|
| | | <option value="fill">Fill</option>
|
| | | <option value="stage">Stage</option>
|
| | |
| | | <table border="0" cellpadding="0" cellspacing="0">
|
| | | <tr>
|
| | | <td><input type="checkbox" class="checkbox" id="shockwave_autostart" name="shockwave_autostart" onchange="generatePreview();" checked="checked" /></td>
|
| | | <td><label for="shockwave_autostart">{$lang_media_autostart}</label></td>
|
| | | <td><label for="shockwave_autostart">{#media_dlg.autostart}</label></td>
|
| | | </tr>
|
| | | </table>
|
| | | </td>
|
| | |
| | | <table border="0" cellpadding="0" cellspacing="0">
|
| | | <tr>
|
| | | <td><input type="checkbox" class="checkbox" id="shockwave_sound" name="shockwave_sound" onchange="generatePreview();" checked="checked" /></td>
|
| | | <td><label for="shockwave_sound">{$lang_media_sound}</label></td>
|
| | | <td><label for="shockwave_sound">{#media_dlg.sound}</label></td>
|
| | | </tr>
|
| | | </table>
|
| | | </td>
|
| | |
| | | <table border="0" cellpadding="0" cellspacing="0">
|
| | | <tr>
|
| | | <td><input type="checkbox" class="checkbox" id="shockwave_swliveconnect" name="shockwave_swliveconnect" onchange="generatePreview();" /></td>
|
| | | <td><label for="shockwave_swliveconnect">{$lang_media_liveconnect}</label></td>
|
| | | <td><label for="shockwave_swliveconnect">{#media_dlg.liveconnect}</label></td>
|
| | | </tr>
|
| | | </table>
|
| | | </td>
|
| | |
| | | <table border="0" cellpadding="0" cellspacing="0">
|
| | | <tr>
|
| | | <td><input type="checkbox" class="checkbox" id="shockwave_progress" name="shockwave_progress" onchange="generatePreview();" checked="checked" /></td>
|
| | | <td><label for="shockwave_progress">{$lang_media_progress}</label></td>
|
| | | <td><label for="shockwave_progress">{#media_dlg.progress}</label></td>
|
| | | </tr>
|
| | | </table>
|
| | | </td>
|
| | |
| | |
|
| | | <div class="mceActionPanel">
|
| | | <div style="float: left">
|
| | | <input type="button" id="insert" name="insert" value="{$lang_insert}" onclick="insertMedia();" />
|
| | | <input type="submit" id="insert" name="insert" value="{#insert}" />
|
| | | </div>
|
| | |
|
| | | <div style="float: right">
|
| | | <input type="button" id="cancel" name="cancel" value="{$lang_cancel}" onclick="tinyMCEPopup.close();" />
|
| | | <input type="button" id="cancel" name="cancel" value="{#cancel}" onclick="tinyMCEPopup.close();" />
|
| | | </div>
|
| | | </div>
|
| | | </form>
|
| | |
| | | tinyMCE.importPluginLanguagePack('nonbreaking');var TinyMCE_NonBreakingPlugin={getInfo:function(){return{longname:'Nonbreaking space',author:'Moxiecode Systems AB',authorurl:'http://tinymce.moxiecode.com',infourl:'http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/nonbreaking',version:tinyMCE.majorVersion+"."+tinyMCE.minorVersion}},getControlHTML:function(cn){switch(cn){case"nonbreaking":return tinyMCE.getButtonHTML(cn,'lang_nonbreaking_desc','{$pluginurl}/images/nonbreaking.gif','mceNonBreaking',false)}return""},execCommand:function(editor_id,element,command,user_interface,value){var inst=tinyMCE.getInstanceById(editor_id),h;switch(command){case"mceNonBreaking":h=(inst.visualChars&&inst.visualChars.state)?'<span class="mceItemHiddenVisualChar">·</span>':' ';tinyMCE.execInstanceCommand(editor_id,'mceInsertContent',false,h);return true}return false},handleEvent:function(e){var inst,h;if(!tinyMCE.isOpera&&e.type=='keydown'&&e.keyCode==9&&tinyMCE.getParam('nonbreaking_force_tab',false)){inst=tinyMCE.selectedInstance;h=(inst.visualChars&&inst.visualChars.state)?'<span class="mceItemHiddenVisualChar">···</span>':' ';tinyMCE.execInstanceCommand(inst.editorId,'mceInsertContent',false,h);tinyMCE.cancelEvent(e);return false}return true}};tinyMCE.addPlugin("nonbreaking",TinyMCE_NonBreakingPlugin); |
| | | (function(){tinymce.create('tinymce.plugins.Nonbreaking',{init:function(ed,url){var t=this;t.editor=ed;ed.addCommand('mceNonBreaking',function(){ed.execCommand('mceInsertContent',false,(ed.plugins.visualchars&&ed.plugins.visualchars.state)?'<span class="mceItemHidden mceVisualNbsp">·</span>':' ');});ed.addButton('nonbreaking',{title:'nonbreaking.nonbreaking_desc',cmd:'mceNonBreaking'});if(ed.getParam('nonbreaking_force_tab')){ed.onKeyDown.add(function(ed,e){if(tinymce.isIE&&e.keyCode==9){ed.execCommand('mceNonBreaking');ed.execCommand('mceNonBreaking');ed.execCommand('mceNonBreaking');tinymce.dom.Event.cancel(e);}});}},getInfo:function(){return{longname:'Nonbreaking space',author:'Moxiecode Systems AB',authorurl:'http://tinymce.moxiecode.com',infourl:'http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/nonbreaking',version:tinymce.majorVersion+"."+tinymce.minorVersion};}});tinymce.PluginManager.add('nonbreaking',tinymce.plugins.Nonbreaking);})(); |
| | |
| | | /**
|
| | | * $Id: editor_plugin_src.js 42 2006-08-08 14:32:24Z spocke $
|
| | | * $Id: editor_plugin_src.js 201 2007-02-12 15:56:56Z spocke $
|
| | | *
|
| | | * @author Moxiecode
|
| | | * @copyright Copyright © 2004-2007, Moxiecode Systems AB, All rights reserved.
|
| | | * @copyright Copyright © 2004-2008, Moxiecode Systems AB, All rights reserved.
|
| | | */
|
| | |
|
| | | /* Import plugin specific language pack */
|
| | | tinyMCE.importPluginLanguagePack('nonbreaking');
|
| | | (function() {
|
| | | tinymce.create('tinymce.plugins.Nonbreaking', {
|
| | | init : function(ed, url) {
|
| | | var t = this;
|
| | |
|
| | | var TinyMCE_NonBreakingPlugin = {
|
| | | getInfo : function() {
|
| | | return {
|
| | | longname : 'Nonbreaking space',
|
| | | author : 'Moxiecode Systems AB',
|
| | | authorurl : 'http://tinymce.moxiecode.com',
|
| | | infourl : 'http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/nonbreaking',
|
| | | version : tinyMCE.majorVersion + "." + tinyMCE.minorVersion
|
| | | };
|
| | | },
|
| | | t.editor = ed;
|
| | |
|
| | | getControlHTML : function(cn) {
|
| | | switch (cn) {
|
| | | case "nonbreaking":
|
| | | return tinyMCE.getButtonHTML(cn, 'lang_nonbreaking_desc', '{$pluginurl}/images/nonbreaking.gif', 'mceNonBreaking', false);
|
| | | // Register commands
|
| | | ed.addCommand('mceNonBreaking', function() {
|
| | | ed.execCommand('mceInsertContent', false, (ed.plugins.visualchars && ed.plugins.visualchars.state) ? '<span class="mceItemHidden mceVisualNbsp">·</span>' : ' ');
|
| | | });
|
| | |
|
| | | // Register buttons
|
| | | ed.addButton('nonbreaking', {title : 'nonbreaking.nonbreaking_desc', cmd : 'mceNonBreaking'});
|
| | |
|
| | | if (ed.getParam('nonbreaking_force_tab')) {
|
| | | ed.onKeyDown.add(function(ed, e) {
|
| | | if (tinymce.isIE && e.keyCode == 9) {
|
| | | ed.execCommand('mceNonBreaking');
|
| | | ed.execCommand('mceNonBreaking');
|
| | | ed.execCommand('mceNonBreaking');
|
| | | tinymce.dom.Event.cancel(e);
|
| | | }
|
| | | });
|
| | | }
|
| | | },
|
| | |
|
| | | getInfo : function() {
|
| | | return {
|
| | | longname : 'Nonbreaking space',
|
| | | author : 'Moxiecode Systems AB',
|
| | | authorurl : 'http://tinymce.moxiecode.com',
|
| | | infourl : 'http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/nonbreaking',
|
| | | version : tinymce.majorVersion + "." + tinymce.minorVersion
|
| | | };
|
| | | }
|
| | |
|
| | | return "";
|
| | | },
|
| | | // Private methods
|
| | | });
|
| | |
|
| | |
|
| | | execCommand : function(editor_id, element, command, user_interface, value) {
|
| | | var inst = tinyMCE.getInstanceById(editor_id), h;
|
| | |
|
| | | switch (command) {
|
| | | case "mceNonBreaking":
|
| | | h = (inst.visualChars && inst.visualChars.state) ? '<span class="mceItemHiddenVisualChar">·</span>' : ' ';
|
| | | tinyMCE.execInstanceCommand(editor_id, 'mceInsertContent', false, h);
|
| | | return true;
|
| | | }
|
| | |
|
| | | return false;
|
| | | },
|
| | |
|
| | | handleEvent : function(e) {
|
| | | var inst, h;
|
| | |
|
| | | if (!tinyMCE.isOpera && e.type == 'keydown' && e.keyCode == 9 && tinyMCE.getParam('nonbreaking_force_tab', false)) {
|
| | | inst = tinyMCE.selectedInstance;
|
| | |
|
| | | h = (inst.visualChars && inst.visualChars.state) ? '<span class="mceItemHiddenVisualChar">···</span>' : ' ';
|
| | | tinyMCE.execInstanceCommand(inst.editorId, 'mceInsertContent', false, h);
|
| | |
|
| | | tinyMCE.cancelEvent(e);
|
| | | return false;
|
| | | }
|
| | |
|
| | | return true;
|
| | | }
|
| | | };
|
| | |
|
| | | tinyMCE.addPlugin("nonbreaking", TinyMCE_NonBreakingPlugin);
|
| | | // Register plugin
|
| | | tinymce.PluginManager.add('nonbreaking', tinymce.plugins.Nonbreaking);
|
| | | })(); |
New file |
| | |
| | | <html xmlns="http://www.w3.org/1999/xhtml">
|
| | | <head>
|
| | | <title>blank_page</title>
|
| | | <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
|
| | | <link href="css/blank.css" rel="stylesheet" type="text/css" />
|
| | | <base target="_self" />
|
| | | <script type="text/javascript">
|
| | | function init() {
|
| | | if (parent.tinymce.isIE)
|
| | | document.body.contentEditable = true;
|
| | | else
|
| | | document.designMode = 'on';
|
| | |
|
| | | parent.initIframe(document);
|
| | | window.focus();
|
| | | }
|
| | | </script>
|
| | | </head>
|
| | | <body onload="init();">
|
| | |
|
| | | </body>
|
| | | </html>
|
New file |
| | |
| | | html, body {height:98%}
|
| | | body {
|
| | | background-color: #FFFFFF;
|
| | | font-family: Verdana, Arial, Helvetica, sans-serif;
|
| | | font-size: 10px;
|
| | | scrollbar-3dlight-color: #F0F0EE;
|
| | | scrollbar-arrow-color: #676662;
|
| | | scrollbar-base-color: #F0F0EE;
|
| | | scrollbar-darkshadow-color: #DDDDDD;
|
| | | scrollbar-face-color: #E0E0DD;
|
| | | scrollbar-highlight-color: #F0F0EE;
|
| | | scrollbar-shadow-color: #F0F0EE;
|
| | | scrollbar-track-color: #F5F5F5;
|
| | | }
|
New file |
| | |
| | | .sourceIframe {
|
| | | border: 1px solid #808080;
|
| | | }
|
New file |
| | |
| | | (function(){var Event=tinymce.dom.Event;tinymce.create('tinymce.plugins.PastePlugin',{init:function(ed,url){var t=this;t.editor=ed;ed.addCommand('mcePasteText',function(ui,v){if(ui){if((ed.getParam('paste_use_dialog',true))||(!tinymce.isIE)){ed.windowManager.open({file:url+'/pastetext.htm',width:450,height:400,inline:1},{plugin_url:url});}else t._insertText(clipboardData.getData("Text"),true);}else t._insertText(v.html,v.linebreaks);});ed.addCommand('mcePasteWord',function(ui,v){if(ui){if((ed.getParam('paste_use_dialog',true))||(!tinymce.isIE)){ed.windowManager.open({file:url+'/pasteword.htm',width:450,height:400,inline:1},{plugin_url:url});}else t._insertText(t._clipboardHTML());}else t._insertWordContent(v);});ed.addCommand('mceSelectAll',function(){ed.execCommand('selectall');});ed.addButton('pastetext',{title:'paste.paste_text_desc',cmd:'mcePasteText',ui:true});ed.addButton('pasteword',{title:'paste.paste_word_desc',cmd:'mcePasteWord',ui:true});ed.addButton('selectall',{title:'paste.selectall_desc',cmd:'mceSelectAll'});if(ed.getParam("paste_auto_cleanup_on_paste",false)){ed.onPaste.add(function(ed,e){return t._handlePasteEvent(e)});}if(!tinymce.isIE&&ed.getParam("paste_auto_cleanup_on_paste",false)){ed.onKeyDown.add(function(ed,e){if(e.ctrlKey&&e.keyCode==86){window.setTimeout(function(){ed.execCommand("mcePasteText",true);},1);Event.cancel(e);}});}},getInfo:function(){return{longname:'Paste text/word',author:'Moxiecode Systems AB',authorurl:'http://tinymce.moxiecode.com',infourl:'http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/paste',version:tinymce.majorVersion+"."+tinymce.minorVersion};},_handlePasteEvent:function(e){var html=this._clipboardHTML(),ed=this.editor,sel=ed.selection,r;if(ed&&(r=sel.getRng())&&r.text.length>0)ed.execCommand('delete');if(html&&html.length>0)ed.execCommand('mcePasteWord',false,html);return Event.cancel(e);},_insertText:function(content,bLinebreaks){if(content&&content.length>0){if(bLinebreaks){if(this.editor.getParam("paste_create_paragraphs",true)){var rl=this.editor.getParam("paste_replace_list",'\u2122,<sup>TM</sup>,\u2026,...,\u201c|\u201d,",\u2019,\',\u2013|\u2014|\u2015|\u2212,-').split(',');for(var i=0;i<rl.length;i+=2)content=content.replace(new RegExp(rl[i],'gi'),rl[i+1]);content=content.replace(/\r\n\r\n/g,'</p><p>');content=content.replace(/\r\r/g,'</p><p>');content=content.replace(/\n\n/g,'</p><p>');if((pos=content.indexOf('</p><p>'))!=-1){this.editor.execCommand("Delete");var node=this.editor.selection.getNode();var breakElms=[];do{if(node.nodeType==1){if(node.nodeName=="TD"||node.nodeName=="BODY")break;breakElms[breakElms.length]=node;}}while(node=node.parentNode);var before="",after="</p>";before+=content.substring(0,pos);for(var i=0;i<breakElms.length;i++){before+="</"+breakElms[i].nodeName+">";after+="<"+breakElms[(breakElms.length-1)-i].nodeName+">";}before+="<p>";content=before+content.substring(pos+7)+after;}}if(this.editor.getParam("paste_create_linebreaks",true)){content=content.replace(/\r\n/g,'<br />');content=content.replace(/\r/g,'<br />');content=content.replace(/\n/g,'<br />');}}this.editor.execCommand("mceInsertRawHTML",false,content);}},_insertWordContent:function(content){var t=this,ed=t.editor;if(content&&content.length>0){var bull=String.fromCharCode(8226);var middot=String.fromCharCode(183);if(ed.getParam('paste_insert_word_content_callback'))content=ed.execCallback('paste_insert_word_content_callback','before',content);var rl=ed.getParam("paste_replace_list",'\u2122,<sup>TM</sup>,\u2026,...,\u201c|\u201d,",\u2019,\',\u2013|\u2014|\u2015|\u2212,-').split(',');for(var i=0;i<rl.length;i+=2)content=content.replace(new RegExp(rl[i],'gi'),rl[i+1]);if(this.editor.getParam("paste_convert_headers_to_strong",false)){content=content.replace(new RegExp('<p class=MsoHeading.*?>(.*?)<\/p>','gi'),'<p><b>$1</b></p>');}content=content.replace(new RegExp('tab-stops: list [0-9]+.0pt">','gi'),'">'+"--list--");content=content.replace(new RegExp(bull+"(.*?)<BR>","gi"),"<p>"+middot+"$1</p>");content=content.replace(new RegExp('<SPAN style="mso-list: Ignore">','gi'),"<span>"+bull);content=content.replace(/<o:p><\/o:p>/gi,"");content=content.replace(new RegExp('<br style="page-break-before: always;.*>','gi'),'-- page break --');content=content.replace(new RegExp('<(!--)([^>]*)(--)>','g'),"");if(this.editor.getParam("paste_remove_spans",true))content=content.replace(/<\/?span[^>]*>/gi,"");if(this.editor.getParam("paste_remove_styles",true))content=content.replace(new RegExp('<(\\w[^>]*) style="([^"]*)"([^>]*)','gi'),"<$1$3");content=content.replace(/<\/?font[^>]*>/gi,"");switch(this.editor.getParam("paste_strip_class_attributes","all")){case"all":content=content.replace(/<(\w[^>]*) class=([^ |>]*)([^>]*)/gi,"<$1$3");break;case"mso":content=content.replace(new RegExp('<(\\w[^>]*) class="?mso([^ |>]*)([^>]*)','gi'),"<$1$3");break;}content=content.replace(new RegExp('href="?'+this._reEscape(""+document.location)+'','gi'),'href="'+this.editor.documentBaseURI.getURI());content=content.replace(/<(\w[^>]*) lang=([^ |>]*)([^>]*)/gi,"<$1$3");content=content.replace(/<\\?\?xml[^>]*>/gi,"");content=content.replace(/<\/?\w+:[^>]*>/gi,"");content=content.replace(/-- page break --\s*<p> <\/p>/gi,"");content=content.replace(/-- page break --/gi,"");if(!this.editor.getParam('force_p_newlines')){content=content.replace('','','gi');content=content.replace('</p>','<br /><br />','gi');}if(!tinymce.isIE&&!this.editor.getParam('force_p_newlines')){content=content.replace(/<\/?p[^>]*>/gi,"");}content=content.replace(/<\/?div[^>]*>/gi,"");if(this.editor.getParam("paste_convert_middot_lists",true)){var div=ed.dom.create("div",null,content);var className=this.editor.getParam("paste_unindented_list_class","unIndentedList");while(this._convertMiddots(div,"--list--"));while(this._convertMiddots(div,middot,className));while(this._convertMiddots(div,bull));content=div.innerHTML;}if(this.editor.getParam("paste_convert_headers_to_strong",false)){content=content.replace(/<h[1-6]> <\/h[1-6]>/gi,'<p> </p>');content=content.replace(/<h[1-6]>/gi,'<p><b>');content=content.replace(/<\/h[1-6]>/gi,'</b></p>');content=content.replace(/<b> <\/b>/gi,'<b> </b>');content=content.replace(/^( )*/gi,'');}content=content.replace(/--list--/gi,"");if(ed.getParam('paste_insert_word_content_callback'))content=ed.execCallback('paste_insert_word_content_callback','after',content);this.editor.execCommand("mceInsertContent",false,content);if(this.editor.getParam('paste_force_cleanup_wordpaste',true)){var ed=this.editor;window.setTimeout(function(){ed.execCommand("mceCleanup");},1);}}},_reEscape:function(s){var l="?.\\*[](){}+^$:";var o="";for(var i=0;i<s.length;i++){var c=s.charAt(i);if(l.indexOf(c)!=-1)o+='\\'+c;else o+=c;}return o;},_convertMiddots:function(div,search,class_name){var ed=this.editor,mdot=String.fromCharCode(183),bull=String.fromCharCode(8226);var nodes,prevul,i,p,ul,li,np,cp,li;nodes=div.getElementsByTagName("p");for(i=0;i<nodes.length;i++){p=nodes[i];if(p.innerHTML.indexOf(search)==0){ul=ed.dom.create("ul");if(class_name)ul.className=class_name;li=ed.dom.create("li");li.innerHTML=p.innerHTML.replace(new RegExp(''+mdot+'|'+bull+'|--list--| ',"gi"),'');ul.appendChild(li);np=p.nextSibling;while(np){if(np.nodeType==3&&new RegExp('^\\s$','m').test(np.nodeValue)){np=np.nextSibling;continue;}if(search==mdot){if(np.nodeType==1&&new RegExp('^o(\\s+| )').test(np.innerHTML)){if(!prevul){prevul=ul;ul=ed.dom.create("ul");prevul.appendChild(ul);}np.innerHTML=np.innerHTML.replace(/^o/,'');}else{if(prevul){ul=prevul;prevul=null;}if(np.nodeType!=1||np.innerHTML.indexOf(search)!=0)break;}}else{if(np.nodeType!=1||np.innerHTML.indexOf(search)!=0)break;}cp=np.nextSibling;li=ed.dom.create("li");li.innerHTML=np.innerHTML.replace(new RegExp(''+mdot+'|'+bull+'|--list--| ',"gi"),'');np.parentNode.removeChild(np);ul.appendChild(li);np=cp;}p.parentNode.replaceChild(ul,p);return true;}}return false;},_clipboardHTML:function(){var div=document.getElementById('_TinyMCE_clipboardHTML');if(!div){var div=document.createElement('DIV');div.id='_TinyMCE_clipboardHTML';with(div.style){visibility='hidden';overflow='hidden';position='absolute';width=1;height=1;}document.body.appendChild(div);}div.innerHTML='';var rng=document.body.createTextRange();rng.moveToElementText(div);rng.execCommand('Paste');var html=div.innerHTML;div.innerHTML='';return html;}});tinymce.PluginManager.add('paste',tinymce.plugins.PastePlugin);})(); |
New file |
| | |
| | | /**
|
| | | * $Id: editor_plugin_src.js 738 2008-03-20 20:00:48Z spocke $
|
| | | *
|
| | | * @author Moxiecode
|
| | | * @copyright Copyright © 2004-2008, Moxiecode Systems AB, All rights reserved.
|
| | | */
|
| | |
|
| | | (function() {
|
| | | var Event = tinymce.dom.Event;
|
| | |
|
| | | tinymce.create('tinymce.plugins.PastePlugin', {
|
| | | init : function(ed, url) {
|
| | | var t = this;
|
| | |
|
| | | t.editor = ed; |
| | |
|
| | | // Register commands
|
| | | ed.addCommand('mcePasteText', function(ui, v) {
|
| | | if (ui) {
|
| | | if ((ed.getParam('paste_use_dialog', true)) || (!tinymce.isIE)) {
|
| | | ed.windowManager.open({
|
| | | file : url + '/pastetext.htm',
|
| | | width : 450,
|
| | | height : 400,
|
| | | inline : 1
|
| | | }, {
|
| | | plugin_url : url
|
| | | });
|
| | | } else
|
| | | t._insertText(clipboardData.getData("Text"), true);
|
| | | } else
|
| | | t._insertText(v.html, v.linebreaks);
|
| | | });
|
| | |
|
| | | ed.addCommand('mcePasteWord', function(ui, v) {
|
| | | if (ui) {
|
| | | if ((ed.getParam('paste_use_dialog', true)) || (!tinymce.isIE)) {
|
| | | ed.windowManager.open({
|
| | | file : url + '/pasteword.htm',
|
| | | width : 450,
|
| | | height : 400,
|
| | | inline : 1
|
| | | }, {
|
| | | plugin_url : url
|
| | | });
|
| | | } else
|
| | | t._insertText(t._clipboardHTML());
|
| | | } else
|
| | | t._insertWordContent(v);
|
| | | });
|
| | |
|
| | | ed.addCommand('mceSelectAll', function() {
|
| | | ed.execCommand('selectall'); |
| | | });
|
| | |
|
| | | // Register buttons
|
| | | ed.addButton('pastetext', {title : 'paste.paste_text_desc', cmd : 'mcePasteText', ui : true});
|
| | | ed.addButton('pasteword', {title : 'paste.paste_word_desc', cmd : 'mcePasteWord', ui : true});
|
| | | ed.addButton('selectall', {title : 'paste.selectall_desc', cmd : 'mceSelectAll'});
|
| | |
|
| | | if (ed.getParam("paste_auto_cleanup_on_paste", false)) {
|
| | | ed.onPaste.add(function(ed, e) {
|
| | | return t._handlePasteEvent(e)
|
| | | });
|
| | | }
|
| | |
|
| | | if (!tinymce.isIE && ed.getParam("paste_auto_cleanup_on_paste", false)) {
|
| | | // Force paste dialog if non IE browser
|
| | | ed.onKeyDown.add(function(ed, e) {
|
| | | if (e.ctrlKey && e.keyCode == 86) {
|
| | | window.setTimeout(function() {
|
| | | ed.execCommand("mcePasteText", true);
|
| | | }, 1);
|
| | |
|
| | | Event.cancel(e);
|
| | | }
|
| | | });
|
| | | }
|
| | | },
|
| | |
|
| | | getInfo : function() {
|
| | | return {
|
| | | longname : 'Paste text/word',
|
| | | author : 'Moxiecode Systems AB',
|
| | | authorurl : 'http://tinymce.moxiecode.com',
|
| | | infourl : 'http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/paste',
|
| | | version : tinymce.majorVersion + "." + tinymce.minorVersion
|
| | | };
|
| | | },
|
| | |
|
| | | // Private methods
|
| | |
|
| | | _handlePasteEvent : function(e) {
|
| | | var html = this._clipboardHTML(), ed = this.editor, sel = ed.selection, r;
|
| | |
|
| | | // Removes italic, strong etc, the if was needed due to bug #1437114
|
| | | if (ed && (r = sel.getRng()) && r.text.length > 0)
|
| | | ed.execCommand('delete');
|
| | |
|
| | | if (html && html.length > 0)
|
| | | ed.execCommand('mcePasteWord', false, html);
|
| | |
|
| | | return Event.cancel(e);
|
| | | },
|
| | |
|
| | | _insertText : function(content, bLinebreaks) { |
| | | if (content && content.length > 0) {
|
| | | if (bLinebreaks) { |
| | | // Special paragraph treatment |
| | | if (this.editor.getParam("paste_create_paragraphs", true)) {
|
| | | var rl = this.editor.getParam("paste_replace_list", '\u2122,<sup>TM</sup>,\u2026,...,\u201c|\u201d,",\u2019,\',\u2013|\u2014|\u2015|\u2212,-').split(',');
|
| | | for (var i=0; i<rl.length; i+=2)
|
| | | content = content.replace(new RegExp(rl[i], 'gi'), rl[i+1]);
|
| | |
|
| | | content = content.replace(/\r\n\r\n/g, '</p><p>');
|
| | | content = content.replace(/\r\r/g, '</p><p>');
|
| | | content = content.replace(/\n\n/g, '</p><p>');
|
| | |
|
| | | // Has paragraphs |
| | | if ((pos = content.indexOf('</p><p>')) != -1) { |
| | | this.editor.execCommand("Delete"); |
| | |
|
| | | var node = this.editor.selection.getNode(); |
| | |
|
| | | // Get list of elements to break |
| | | var breakElms = [];
|
| | |
|
| | | do { |
| | | if (node.nodeType == 1) { |
| | | // Don't break tables and break at body |
| | | if (node.nodeName == "TD" || node.nodeName == "BODY") |
| | | break; |
| | | |
| | | breakElms[breakElms.length] = node; |
| | | } |
| | | } while(node = node.parentNode); |
| | |
|
| | | var before = "", after = "</p>"; |
| | | before += content.substring(0, pos); |
| | |
|
| | | for (var i=0; i<breakElms.length; i++) { |
| | | before += "</" + breakElms[i].nodeName + ">"; |
| | | after += "<" + breakElms[(breakElms.length-1)-i].nodeName + ">"; |
| | | } |
| | |
|
| | | before += "<p>"; |
| | | content = before + content.substring(pos+7) + after; |
| | | } |
| | | } |
| | |
|
| | | if (this.editor.getParam("paste_create_linebreaks", true)) {
|
| | | content = content.replace(/\r\n/g, '<br />');
|
| | | content = content.replace(/\r/g, '<br />');
|
| | | content = content.replace(/\n/g, '<br />');
|
| | | }
|
| | | } |
| | | |
| | | this.editor.execCommand("mceInsertRawHTML", false, content); |
| | | }
|
| | | },
|
| | |
|
| | | _insertWordContent : function(content) { |
| | | var t = this, ed = t.editor;
|
| | |
|
| | | if (content && content.length > 0) {
|
| | | // Cleanup Word content
|
| | | var bull = String.fromCharCode(8226);
|
| | | var middot = String.fromCharCode(183);
|
| | |
|
| | | if (ed.getParam('paste_insert_word_content_callback'))
|
| | | content = ed.execCallback('paste_insert_word_content_callback', 'before', content);
|
| | |
|
| | | var rl = ed.getParam("paste_replace_list", '\u2122,<sup>TM</sup>,\u2026,...,\u201c|\u201d,",\u2019,\',\u2013|\u2014|\u2015|\u2212,-').split(',');
|
| | | for (var i=0; i<rl.length; i+=2)
|
| | | content = content.replace(new RegExp(rl[i], 'gi'), rl[i+1]);
|
| | |
|
| | | if (this.editor.getParam("paste_convert_headers_to_strong", false)) {
|
| | | content = content.replace(new RegExp('<p class=MsoHeading.*?>(.*?)<\/p>', 'gi'), '<p><b>$1</b></p>');
|
| | | }
|
| | |
|
| | | content = content.replace(new RegExp('tab-stops: list [0-9]+.0pt">', 'gi'), '">' + "--list--");
|
| | | content = content.replace(new RegExp(bull + "(.*?)<BR>", "gi"), "<p>" + middot + "$1</p>");
|
| | | content = content.replace(new RegExp('<SPAN style="mso-list: Ignore">', 'gi'), "<span>" + bull); // Covert to bull list
|
| | | content = content.replace(/<o:p><\/o:p>/gi, "");
|
| | | content = content.replace(new RegExp('<br style="page-break-before: always;.*>', 'gi'), '-- page break --'); // Replace pagebreaks
|
| | | content = content.replace(new RegExp('<(!--)([^>]*)(--)>', 'g'), ""); // Word comments
|
| | |
|
| | | if (this.editor.getParam("paste_remove_spans", true))
|
| | | content = content.replace(/<\/?span[^>]*>/gi, "");
|
| | |
|
| | | if (this.editor.getParam("paste_remove_styles", true))
|
| | | content = content.replace(new RegExp('<(\\w[^>]*) style="([^"]*)"([^>]*)', 'gi'), "<$1$3");
|
| | |
|
| | | content = content.replace(/<\/?font[^>]*>/gi, "");
|
| | |
|
| | | // Strips class attributes.
|
| | | switch (this.editor.getParam("paste_strip_class_attributes", "all")) {
|
| | | case "all":
|
| | | content = content.replace(/<(\w[^>]*) class=([^ |>]*)([^>]*)/gi, "<$1$3");
|
| | | break;
|
| | |
|
| | | case "mso":
|
| | | content = content.replace(new RegExp('<(\\w[^>]*) class="?mso([^ |>]*)([^>]*)', 'gi'), "<$1$3");
|
| | | break;
|
| | | }
|
| | |
|
| | | content = content.replace(new RegExp('href="?' + this._reEscape("" + document.location) + '', 'gi'), 'href="' + this.editor.documentBaseURI.getURI());
|
| | | content = content.replace(/<(\w[^>]*) lang=([^ |>]*)([^>]*)/gi, "<$1$3");
|
| | | content = content.replace(/<\\?\?xml[^>]*>/gi, "");
|
| | | content = content.replace(/<\/?\w+:[^>]*>/gi, "");
|
| | | content = content.replace(/-- page break --\s*<p> <\/p>/gi, ""); // Remove pagebreaks
|
| | | content = content.replace(/-- page break --/gi, ""); // Remove pagebreaks
|
| | |
|
| | | // content = content.replace(/\/? */gi, "");
|
| | | // content = content.replace(/<p> <\/p>/gi, '');
|
| | |
|
| | | if (!this.editor.getParam('force_p_newlines')) {
|
| | | content = content.replace('', '' ,'gi');
|
| | | content = content.replace('</p>', '<br /><br />' ,'gi');
|
| | | }
|
| | |
|
| | | if (!tinymce.isIE && !this.editor.getParam('force_p_newlines')) {
|
| | | content = content.replace(/<\/?p[^>]*>/gi, "");
|
| | | }
|
| | |
|
| | | content = content.replace(/<\/?div[^>]*>/gi, "");
|
| | |
|
| | | // Convert all middlot lists to UL lists
|
| | | if (this.editor.getParam("paste_convert_middot_lists", true)) {
|
| | | var div = ed.dom.create("div", null, content);
|
| | |
|
| | | // Convert all middot paragraphs to li elements
|
| | | var className = this.editor.getParam("paste_unindented_list_class", "unIndentedList");
|
| | |
|
| | | while (this._convertMiddots(div, "--list--")) ; // bull
|
| | | while (this._convertMiddots(div, middot, className)) ; // Middot
|
| | | while (this._convertMiddots(div, bull)) ; // bull
|
| | |
|
| | | content = div.innerHTML;
|
| | | }
|
| | |
|
| | | // Replace all headers with strong and fix some other issues
|
| | | if (this.editor.getParam("paste_convert_headers_to_strong", false)) {
|
| | | content = content.replace(/<h[1-6]> <\/h[1-6]>/gi, '<p> </p>');
|
| | | content = content.replace(/<h[1-6]>/gi, '<p><b>');
|
| | | content = content.replace(/<\/h[1-6]>/gi, '</b></p>');
|
| | | content = content.replace(/<b> <\/b>/gi, '<b> </b>');
|
| | | content = content.replace(/^( )*/gi, '');
|
| | | }
|
| | |
|
| | | content = content.replace(/--list--/gi, ""); // Remove --list--
|
| | |
|
| | | if (ed.getParam('paste_insert_word_content_callback'))
|
| | | content = ed.execCallback('paste_insert_word_content_callback', 'after', content);
|
| | |
|
| | | // Insert cleaned content
|
| | | this.editor.execCommand("mceInsertContent", false, content);
|
| | |
|
| | | if (this.editor.getParam('paste_force_cleanup_wordpaste', true)) {
|
| | | var ed = this.editor;
|
| | |
|
| | | window.setTimeout(function() {
|
| | | ed.execCommand("mceCleanup");
|
| | | }, 1); // Do normal cleanup detached from this thread
|
| | | }
|
| | | }
|
| | | },
|
| | |
|
| | | _reEscape : function(s) {
|
| | | var l = "?.\\*[](){}+^$:";
|
| | | var o = "";
|
| | |
|
| | | for (var i=0; i<s.length; i++) {
|
| | | var c = s.charAt(i);
|
| | |
|
| | | if (l.indexOf(c) != -1)
|
| | | o += '\\' + c;
|
| | | else
|
| | | o += c;
|
| | | }
|
| | |
|
| | | return o;
|
| | | },
|
| | |
|
| | | _convertMiddots : function(div, search, class_name) {
|
| | | var ed = this.editor, mdot = String.fromCharCode(183), bull = String.fromCharCode(8226);
|
| | | var nodes, prevul, i, p, ul, li, np, cp, li;
|
| | |
|
| | | nodes = div.getElementsByTagName("p");
|
| | | for (i=0; i<nodes.length; i++) {
|
| | | p = nodes[i];
|
| | |
|
| | | // Is middot
|
| | | if (p.innerHTML.indexOf(search) == 0) {
|
| | | ul = ed.dom.create("ul");
|
| | |
|
| | | if (class_name)
|
| | | ul.className = class_name;
|
| | |
|
| | | // Add the first one
|
| | | li = ed.dom.create("li");
|
| | | li.innerHTML = p.innerHTML.replace(new RegExp('' + mdot + '|' + bull + '|--list--| ', "gi"), '');
|
| | | ul.appendChild(li);
|
| | |
|
| | | // Add the rest
|
| | | np = p.nextSibling;
|
| | | while (np) {
|
| | | // If the node is whitespace, then
|
| | | // ignore it and continue on.
|
| | | if (np.nodeType == 3 && new RegExp('^\\s$', 'm').test(np.nodeValue)) {
|
| | | np = np.nextSibling;
|
| | | continue;
|
| | | }
|
| | |
|
| | | if (search == mdot) {
|
| | | if (np.nodeType == 1 && new RegExp('^o(\\s+| )').test(np.innerHTML)) {
|
| | | // Second level of nesting
|
| | | if (!prevul) {
|
| | | prevul = ul;
|
| | | ul = ed.dom.create("ul");
|
| | | prevul.appendChild(ul);
|
| | | }
|
| | | np.innerHTML = np.innerHTML.replace(/^o/, '');
|
| | | } else {
|
| | | // Pop the stack if we're going back up to the first level
|
| | | if (prevul) {
|
| | | ul = prevul;
|
| | | prevul = null;
|
| | | }
|
| | | // Not element or middot paragraph
|
| | | if (np.nodeType != 1 || np.innerHTML.indexOf(search) != 0)
|
| | | break;
|
| | | }
|
| | | } else {
|
| | | // Not element or middot paragraph
|
| | | if (np.nodeType != 1 || np.innerHTML.indexOf(search) != 0)
|
| | | break;
|
| | | }
|
| | |
|
| | | cp = np.nextSibling;
|
| | | li = ed.dom.create("li");
|
| | | li.innerHTML = np.innerHTML.replace(new RegExp('' + mdot + '|' + bull + '|--list--| ', "gi"), '');
|
| | | np.parentNode.removeChild(np);
|
| | | ul.appendChild(li);
|
| | | np = cp;
|
| | | }
|
| | |
|
| | | p.parentNode.replaceChild(ul, p);
|
| | |
|
| | | return true;
|
| | | }
|
| | | }
|
| | |
|
| | | return false;
|
| | | },
|
| | |
|
| | | _clipboardHTML : function() {
|
| | | var div = document.getElementById('_TinyMCE_clipboardHTML');
|
| | |
|
| | | if (!div) {
|
| | | var div = document.createElement('DIV');
|
| | | div.id = '_TinyMCE_clipboardHTML';
|
| | |
|
| | | with (div.style) {
|
| | | visibility = 'hidden';
|
| | | overflow = 'hidden';
|
| | | position = 'absolute';
|
| | | width = 1;
|
| | | height = 1;
|
| | | }
|
| | |
|
| | | document.body.appendChild(div);
|
| | | }
|
| | |
|
| | | div.innerHTML = '';
|
| | | var rng = document.body.createTextRange();
|
| | | rng.moveToElementText(div);
|
| | | rng.execCommand('Paste');
|
| | | var html = div.innerHTML;
|
| | | div.innerHTML = '';
|
| | | return html;
|
| | | }
|
| | | });
|
| | |
|
| | | // Register plugin
|
| | | tinymce.PluginManager.add('paste', tinymce.plugins.PastePlugin);
|
| | | })(); |
New file |
| | |
| | | tinyMCEPopup.requireLangPack();
|
| | |
|
| | | function saveContent() {
|
| | | if (document.forms[0].htmlSource.value == '') {
|
| | | tinyMCEPopup.close();
|
| | | return false;
|
| | | }
|
| | |
|
| | | tinyMCEPopup.execCommand('mcePasteText', false, {
|
| | | html : document.forms[0].htmlSource.value,
|
| | | linebreaks : document.forms[0].linebreaks.checked
|
| | | });
|
| | |
|
| | | tinyMCEPopup.close();
|
| | | }
|
| | |
|
| | | function onLoadInit() {
|
| | | tinyMCEPopup.resizeToInnerSize();
|
| | |
|
| | | // Remove Gecko spellchecking
|
| | | if (tinymce.isGecko)
|
| | | document.body.spellcheck = tinyMCEPopup.getParam("gecko_spellcheck");
|
| | |
|
| | | resizeInputs();
|
| | | }
|
| | |
|
| | | var wHeight=0, wWidth=0, owHeight=0, owWidth=0;
|
| | |
|
| | | function resizeInputs() {
|
| | | if (!tinymce.isIE) {
|
| | | wHeight = self.innerHeight-80;
|
| | | wWidth = self.innerWidth-17;
|
| | | } else {
|
| | | wHeight = document.body.clientHeight-80;
|
| | | wWidth = document.body.clientWidth-17;
|
| | | }
|
| | |
|
| | | document.forms[0].htmlSource.style.height = Math.abs(wHeight) + 'px';
|
| | | document.forms[0].htmlSource.style.width = Math.abs(wWidth) + 'px';
|
| | | }
|
| | |
|
| | | tinyMCEPopup.onInit.add(onLoadInit); |
New file |
| | |
| | | tinyMCEPopup.requireLangPack();
|
| | |
|
| | | function saveContent() {
|
| | | var html = document.getElementById("frmData").contentWindow.document.body.innerHTML;
|
| | |
|
| | | if (html == ''){
|
| | | tinyMCEPopup.close();
|
| | | return false;
|
| | | }
|
| | |
|
| | | tinyMCEPopup.execCommand('mcePasteWord', false, html);
|
| | | tinyMCEPopup.close();
|
| | | }
|
| | |
|
| | | function onLoadInit() {
|
| | | tinyMCEPopup.resizeToInnerSize();
|
| | |
|
| | | // Fix for endless reloading in FF
|
| | | window.setTimeout(createIFrame, 10);
|
| | | }
|
| | |
|
| | | function createIFrame() {
|
| | | document.getElementById('iframecontainer').innerHTML = '<iframe id="frmData" name="frmData" class="sourceIframe" src="blank.htm" height="280" width="400" frameborder="0" style="background-color:#FFFFFF; width:100%;" dir="ltr" wrap="soft"></iframe>';
|
| | | }
|
| | |
|
| | | var wHeight=0, wWidth=0, owHeight=0, owWidth=0;
|
| | |
|
| | | function initIframe(doc) {
|
| | | var dir = tinyMCEPopup.editor.settings.directionality;
|
| | |
|
| | | doc.body.dir = dir;
|
| | |
|
| | | // Remove Gecko spellchecking
|
| | | if (tinymce.isGecko)
|
| | | doc.body.spellcheck = tinyMCEPopup.getParam("gecko_spellcheck");
|
| | |
|
| | | resizeInputs();
|
| | | }
|
| | |
|
| | | function resizeInputs() {
|
| | | if (!tinymce.isIE) {
|
| | | wHeight = self.innerHeight - 80;
|
| | | wWidth = self.innerWidth - 18;
|
| | | } else {
|
| | | wHeight = document.body.clientHeight - 80;
|
| | | wWidth = document.body.clientWidth - 18;
|
| | | }
|
| | |
|
| | | var elm = document.getElementById('frmData');
|
| | | if (elm) {
|
| | | elm.style.height = Math.abs(wHeight) + 'px';
|
| | | elm.style.width = Math.abs(wWidth) + 'px';
|
| | | }
|
| | | }
|
| | |
|
| | | tinyMCEPopup.onInit.add(onLoadInit);
|
New file |
| | |
| | | tinyMCE.addI18n('en.paste_dlg',{
|
| | | text_title:"Use CTRL+V on your keyboard to paste the text into the window.",
|
| | | text_linebreaks:"Keep linebreaks",
|
| | | word_title:"Use CTRL+V on your keyboard to paste the text into the window."
|
| | | }); |
New file |
| | |
| | | <html xmlns="http://www.w3.org/1999/xhtml">
|
| | | <head>
|
| | | <title>{#paste.paste_text_desc}</title>
|
| | | <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
|
| | | <script type="text/javascript" src="../../tiny_mce_popup.js"></script>
|
| | | <script type="text/javascript" src="js/pastetext.js"></script>
|
| | | <base target="_self" />
|
| | | </head>
|
| | | <body onresize="resizeInputs();" style="display:none; overflow:hidden;">
|
| | | <form name="source" onsubmit="saveContent();return false;" action="#">
|
| | | <div style="float: left" class="title">{#paste.paste_text_desc}</div>
|
| | |
|
| | | <div style="float: right">
|
| | | <input type="checkbox" name="linebreaks" id="linebreaks" class="wordWrapCode" checked="checked" /><label for="linebreaks">{#paste_dlg.text_linebreaks}</label>
|
| | | </div>
|
| | |
|
| | | <br style="clear: both" />
|
| | |
|
| | | <div>{#paste_dlg.text_title}</div>
|
| | |
|
| | | <textarea name="htmlSource" id="htmlSource" rows="15" cols="100" style="width: 100%; height: 100%; font-family: 'Courier New',Courier,mono; font-size: 12px;" dir="ltr" wrap="soft" class="mceFocus"></textarea>
|
| | |
|
| | | <div class="mceActionPanel">
|
| | | <div style="float: left">
|
| | | <input type="submit" name="insert" value="{#insert}" id="insert" />
|
| | | </div>
|
| | |
|
| | | <div style="float: right">
|
| | | <input type="button" name="cancel" value="{#cancel}" onclick="tinyMCEPopup.close();" id="cancel" />
|
| | | </div>
|
| | | </div>
|
| | | </form>
|
| | | </body> |
| | | </html> |
New file |
| | |
| | | <html xmlns="http://www.w3.org/1999/xhtml">
|
| | | <head>
|
| | | <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
|
| | | <title>{#paste.paste_word_desc}</title>
|
| | | <script type="text/javascript" src="../../tiny_mce_popup.js"></script>
|
| | | <script type="text/javascript" src="js/pasteword.js"></script>
|
| | | <link href="css/pasteword.css" rel="stylesheet" type="text/css" />
|
| | | <base target="_self" />
|
| | | </head>
|
| | | <body onresize="resizeInputs();" style="display:none; overflow:hidden;">
|
| | | <form name="source" onsubmit="saveContent();" action="#">
|
| | | <div class="title">{#paste.paste_word_desc}</div>
|
| | |
|
| | | <div>{#paste_dlg.word_title}</div>
|
| | |
|
| | | <div id="iframecontainer"></div>
|
| | |
|
| | | <div class="mceActionPanel">
|
| | | <div style="float: left">
|
| | | <input type="button" id="insert" name="insert" value="{#insert}" onclick="saveContent();" />
|
| | | </div>
|
| | |
|
| | | <div style="float: right">
|
| | | <input type="button" id="cancel" name="cancel" value="{#cancel}" onclick="tinyMCEPopup.close();" />
|
| | | </div>
|
| | | </div>
|
| | | </form>
|
| | | </body>
|
| | | </html>
|
| | |
| | | /* stylesheet for advsearchreplace plugin*/
|
| | | .panel_wrapper {height:85px;}
|
| | | .panel_wrapper div.current {height:85px;}
|
| | |
|
| | | .panel_wrapper { height: 85px; }
|
| | | .panel_wrapper div.current { height: 85px; }
|
| | |
|
| | | /* MS IE only styles */
|
| | | * html .panel_wrapper { height: 100px; }
|
| | | * html .panel_wrapper div.current { height: 100px; }
|
| | |
|
| | | #replaceBtn, #replaceAllBtn {
|
| | | padding-bottom: 2px;
|
| | | font-weight: bold;
|
| | | width: 90px;
|
| | | height: 21px;
|
| | | border: 0;
|
| | | cursor: pointer;
|
| | | }
|
| | |
|
| | | #replaceBtn { background: url(../images/replace_button_bg.gif); }
|
| | | #replaceAllBtn { background: url(../images/replace_all_button_bg.gif); }
|
| | | /* IE */
|
| | | * html .panel_wrapper {height:100px;}
|
| | | * html .panel_wrapper div.current {height:100px;}
|
| | |
| | | tinyMCE.importPluginLanguagePack('searchreplace');var TinyMCE_SearchReplacePlugin={getInfo:function(){return{longname:'Search/Replace',author:'Moxiecode Systems AB',authorurl:'http://tinymce.moxiecode.com',infourl:'http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/searchreplace',version:tinyMCE.majorVersion+"."+tinyMCE.minorVersion}},initInstance:function(inst){inst.addShortcut('ctrl','f','lang_searchreplace_search_desc','mceSearch',true);},getControlHTML:function(cn){switch(cn){case"search":return tinyMCE.getButtonHTML(cn,'lang_searchreplace_search_desc','{$pluginurl}/images/search.gif','mceSearch',true);case"replace":return tinyMCE.getButtonHTML(cn,'lang_searchreplace_replace_desc','{$pluginurl}/images/replace.gif','mceSearchReplace',true)}return""},execCommand:function(editor_id,element,command,user_interface,value){var inst=tinyMCE.getInstanceById(editor_id),selectedText=inst.selection.getSelectedText(),rng;function defValue(key,default_value){value[key]=typeof(value[key])=="undefined"?default_value:value[key]}function replaceSel(search_str,str,back){if(!inst.selection.isCollapsed()){if(tinyMCE.isRealIE)inst.selection.getRng().duplicate().pasteHTML(str);else inst.execCommand('mceInsertContent',false,str)}}if(!value)value=[];defValue("editor_id",editor_id);defValue("searchstring",selectedText);defValue("replacestring",null);defValue("replacemode","none");defValue("casesensitive",false);defValue("backwards",false);defValue("wrap",false);defValue("wholeword",false);defValue("inline","yes");defValue("resizable","no");switch(command){case"mceSearch":if(user_interface){var template=new Array();template['file']='../../plugins/searchreplace/searchreplace.htm';template['width']=380;template['height']=155+(tinyMCE.isNS7?20:0)+(tinyMCE.isMSIE?15:0);template['width']+=tinyMCE.getLang('lang_searchreplace_delta_width',0);template['height']+=tinyMCE.getLang('lang_searchreplace_delta_height',0);inst.selection.collapse(true);tinyMCE.openWindow(template,value)}else{var win=tinyMCE.getInstanceById(editor_id).contentWindow;var doc=tinyMCE.getInstanceById(editor_id).contentWindow.document;var body=tinyMCE.getInstanceById(editor_id).contentWindow.document.body;var awin=value.win,found;if(body.innerHTML==""){awin.alert(tinyMCE.getLang('lang_searchreplace_notfound'));return true}if(value['replacemode']=="current"){replaceSel(value['string'],value['replacestring'],value['backwards']);value['replacemode']="none";}inst.selection.collapse(value['backwards']);if(tinyMCE.isMSIE){var rng=inst.selection.getRng();var flags=0;if(value['wholeword'])flags=flags|2;if(value['casesensitive'])flags=flags|4;if(!rng.findText){awin.alert('This operation is currently not supported by this browser.');return true}if(value['replacemode']=="all"){found=false;while(rng.findText(value['string'],value['backwards']?-1:1,flags)){found=true;rng.scrollIntoView();rng.select();replaceSel(value['string'],value['replacestring'],value['backwards'])}if(found)awin.alert(tinyMCE.getLang('lang_searchreplace_allreplaced'));else awin.alert(tinyMCE.getLang('lang_searchreplace_notfound'));return true}if(rng.findText(value['string'],value['backwards']?-1:1,flags)){rng.scrollIntoView();rng.select()}else awin.alert(tinyMCE.getLang('lang_searchreplace_notfound'))}else{if(value['replacemode']=="all"){found=false;while(win.find(value['string'],value['casesensitive'],value['backwards'],value['wrap'],value['wholeword'],false,false)){found=true;replaceSel(value['string'],value['replacestring'],value['backwards'])}if(found)awin.alert(tinyMCE.getLang('lang_searchreplace_allreplaced'));else awin.alert(tinyMCE.getLang('lang_searchreplace_notfound'));return true}if(!win.find(value['string'],value['casesensitive'],value['backwards'],value['wrap'],value['wholeword'],false,false))awin.alert(tinyMCE.getLang('lang_searchreplace_notfound'))}}return true;case"mceSearchReplace":value['replacestring']="";tinyMCE.execInstanceCommand(editor_id,'mceSearch',user_interface,value,false);return true}return false}};tinyMCE.addPlugin("searchreplace",TinyMCE_SearchReplacePlugin); |
| | | (function(){tinymce.create('tinymce.plugins.SearchReplacePlugin',{init:function(ed,url){function open(m){ed.windowManager.open({file:url+'/searchreplace.htm',width:420+parseInt(ed.getLang('searchreplace.delta_width',0)),height:160+parseInt(ed.getLang('searchreplace.delta_height',0)),inline:1,auto_focus:0},{mode:m,search_string:ed.selection.getContent({format:'text'}),plugin_url:url});};ed.addCommand('mceSearch',function(){open('search');});ed.addCommand('mceReplace',function(){open('replace');});ed.addButton('search',{title:'searchreplace.search_desc',cmd:'mceSearch'});ed.addButton('replace',{title:'searchreplace.replace_desc',cmd:'mceReplace'});ed.addShortcut('ctrl+f','searchreplace.search_desc','mceSearch');},getInfo:function(){return{longname:'Search/Replace',author:'Moxiecode Systems AB',authorurl:'http://tinymce.moxiecode.com',infourl:'http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/searchreplace',version:tinymce.majorVersion+"."+tinymce.minorVersion};}});tinymce.PluginManager.add('searchreplace',tinymce.plugins.SearchReplacePlugin);})(); |
| | |
| | | /**
|
| | | * $Id: editor_plugin_src.js 201 2007-02-12 15:56:56Z spocke $
|
| | | * $Id: editor_plugin_src.js 686 2008-03-09 18:13:49Z spocke $
|
| | | *
|
| | | * @author Moxiecode
|
| | | * @copyright Copyright © 2004-2007, Moxiecode Systems AB, All rights reserved.
|
| | | * @copyright Copyright © 2004-2008, Moxiecode Systems AB, All rights reserved.
|
| | | */
|
| | |
|
| | | tinyMCE.importPluginLanguagePack('searchreplace');
|
| | | (function() {
|
| | | tinymce.create('tinymce.plugins.SearchReplacePlugin', {
|
| | | init : function(ed, url) {
|
| | | function open(m) {
|
| | | ed.windowManager.open({
|
| | | file : url + '/searchreplace.htm',
|
| | | width : 420 + parseInt(ed.getLang('searchreplace.delta_width', 0)),
|
| | | height : 160 + parseInt(ed.getLang('searchreplace.delta_height', 0)),
|
| | | inline : 1,
|
| | | auto_focus : 0
|
| | | }, {
|
| | | mode : m,
|
| | | search_string : ed.selection.getContent({format : 'text'}),
|
| | | plugin_url : url
|
| | | });
|
| | | };
|
| | |
|
| | | var TinyMCE_SearchReplacePlugin = {
|
| | | getInfo : function() {
|
| | | return {
|
| | | longname : 'Search/Replace',
|
| | | author : 'Moxiecode Systems AB',
|
| | | authorurl : 'http://tinymce.moxiecode.com',
|
| | | infourl : 'http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/searchreplace',
|
| | | version : tinyMCE.majorVersion + "." + tinyMCE.minorVersion
|
| | | };
|
| | | },
|
| | | // Register commands
|
| | | ed.addCommand('mceSearch', function() {
|
| | | open('search');
|
| | | });
|
| | |
|
| | | initInstance : function (inst) {
|
| | | inst.addShortcut('ctrl', 'f', 'lang_searchreplace_search_desc', 'mceSearch', true);
|
| | | // No CTRL+R for "replace" because browsers will reload page instead of executing plugin
|
| | | },
|
| | | ed.addCommand('mceReplace', function() {
|
| | | open('replace');
|
| | | });
|
| | |
|
| | | getControlHTML : function (cn) {
|
| | | switch (cn) {
|
| | | case "search" :
|
| | | return tinyMCE.getButtonHTML(cn, 'lang_searchreplace_search_desc', '{$pluginurl}/images/search.gif','mceSearch', true);
|
| | | // Register buttons
|
| | | ed.addButton('search', {title : 'searchreplace.search_desc', cmd : 'mceSearch'});
|
| | | ed.addButton('replace', {title : 'searchreplace.replace_desc', cmd : 'mceReplace'});
|
| | |
|
| | | case "replace" :
|
| | | return tinyMCE.getButtonHTML(cn, 'lang_searchreplace_replace_desc', '{$pluginurl}/images/replace.gif', 'mceSearchReplace', true);
|
| | | ed.addShortcut('ctrl+f', 'searchreplace.search_desc', 'mceSearch');
|
| | | },
|
| | |
|
| | | getInfo : function() {
|
| | | return {
|
| | | longname : 'Search/Replace',
|
| | | author : 'Moxiecode Systems AB',
|
| | | authorurl : 'http://tinymce.moxiecode.com',
|
| | | infourl : 'http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/searchreplace',
|
| | | version : tinymce.majorVersion + "." + tinymce.minorVersion
|
| | | };
|
| | | }
|
| | | });
|
| | |
|
| | | return "";
|
| | | },
|
| | |
|
| | | execCommand : function (editor_id, element, command, user_interface, value) {
|
| | | var inst = tinyMCE.getInstanceById(editor_id), selectedText = inst.selection.getSelectedText(), rng;
|
| | |
|
| | | function defValue(key, default_value) {
|
| | | value[key] = typeof(value[key]) == "undefined" ? default_value : value[key];
|
| | | }
|
| | |
|
| | | function replaceSel(search_str, str, back) {
|
| | | if (!inst.selection.isCollapsed()) {
|
| | | if (tinyMCE.isRealIE)
|
| | | inst.selection.getRng().duplicate().pasteHTML(str); // Needs to be duplicated due to selection bug in IE
|
| | | else
|
| | | inst.execCommand('mceInsertContent', false, str);
|
| | | }
|
| | | }
|
| | |
|
| | | if (!value)
|
| | | value = [];
|
| | |
|
| | | defValue("editor_id", editor_id);
|
| | | defValue("searchstring", selectedText);
|
| | | defValue("replacestring", null);
|
| | | defValue("replacemode", "none");
|
| | | defValue("casesensitive", false);
|
| | | defValue("backwards", false);
|
| | | defValue("wrap", false);
|
| | | defValue("wholeword", false);
|
| | | defValue("inline", "yes");
|
| | | defValue("resizable", "no");
|
| | |
|
| | | switch (command) {
|
| | | case "mceSearch" :
|
| | | if (user_interface) {
|
| | | var template = new Array();
|
| | |
|
| | | template['file'] = '../../plugins/searchreplace/searchreplace.htm';
|
| | | template['width'] = 380;
|
| | | template['height'] = 155 + (tinyMCE.isNS7 ? 20 : 0) + (tinyMCE.isMSIE ? 15 : 0);
|
| | | template['width'] += tinyMCE.getLang('lang_searchreplace_delta_width', 0);
|
| | | template['height'] += tinyMCE.getLang('lang_searchreplace_delta_height', 0);
|
| | |
|
| | | inst.selection.collapse(true);
|
| | |
|
| | | tinyMCE.openWindow(template, value);
|
| | | } else {
|
| | | var win = tinyMCE.getInstanceById(editor_id).contentWindow;
|
| | | var doc = tinyMCE.getInstanceById(editor_id).contentWindow.document;
|
| | | var body = tinyMCE.getInstanceById(editor_id).contentWindow.document.body;
|
| | | var awin = value.win, found;
|
| | |
|
| | | if (body.innerHTML == "") {
|
| | | awin.alert(tinyMCE.getLang('lang_searchreplace_notfound'));
|
| | | return true;
|
| | | }
|
| | |
|
| | | if (value['replacemode'] == "current") {
|
| | | replaceSel(value['string'], value['replacestring'], value['backwards']);
|
| | | value['replacemode'] = "none";
|
| | | //tinyMCE.execInstanceCommand(editor_id, 'mceSearch', user_interface, value);
|
| | | //return true;
|
| | | }
|
| | |
|
| | | inst.selection.collapse(value['backwards']);
|
| | |
|
| | | if (tinyMCE.isMSIE) {
|
| | | var rng = inst.selection.getRng();
|
| | | var flags = 0;
|
| | | if (value['wholeword'])
|
| | | flags = flags | 2;
|
| | |
|
| | | if (value['casesensitive'])
|
| | | flags = flags | 4;
|
| | |
|
| | | if (!rng.findText) {
|
| | | awin.alert('This operation is currently not supported by this browser.');
|
| | | return true;
|
| | | }
|
| | |
|
| | | if (value['replacemode'] == "all") {
|
| | | found = false;
|
| | |
|
| | | while (rng.findText(value['string'], value['backwards'] ? -1 : 1, flags)) {
|
| | | found = true;
|
| | | rng.scrollIntoView();
|
| | | rng.select();
|
| | | replaceSel(value['string'], value['replacestring'], value['backwards']);
|
| | | }
|
| | |
|
| | | if (found)
|
| | | awin.alert(tinyMCE.getLang('lang_searchreplace_allreplaced'));
|
| | | else
|
| | | awin.alert(tinyMCE.getLang('lang_searchreplace_notfound'));
|
| | |
|
| | | return true;
|
| | | }
|
| | |
|
| | | if (rng.findText(value['string'], value['backwards'] ? -1 : 1, flags)) {
|
| | | rng.scrollIntoView();
|
| | | rng.select();
|
| | | } else
|
| | | awin.alert(tinyMCE.getLang('lang_searchreplace_notfound'));
|
| | | } else {
|
| | | if (value['replacemode'] == "all") {
|
| | | found = false;
|
| | |
|
| | | while (win.find(value['string'], value['casesensitive'], value['backwards'], value['wrap'], value['wholeword'], false, false)) {
|
| | | found = true;
|
| | | replaceSel(value['string'], value['replacestring'], value['backwards']);
|
| | | }
|
| | |
|
| | | if (found)
|
| | | awin.alert(tinyMCE.getLang('lang_searchreplace_allreplaced'));
|
| | | else
|
| | | awin.alert(tinyMCE.getLang('lang_searchreplace_notfound'));
|
| | |
|
| | | return true;
|
| | | }
|
| | |
|
| | | if (!win.find(value['string'], value['casesensitive'], value['backwards'], value['wrap'], value['wholeword'], false, false))
|
| | | awin.alert(tinyMCE.getLang('lang_searchreplace_notfound'));
|
| | | }
|
| | | }
|
| | |
|
| | | return true;
|
| | |
|
| | | case "mceSearchReplace" :
|
| | | value['replacestring'] = "";
|
| | | tinyMCE.execInstanceCommand(editor_id, 'mceSearch', user_interface, value, false);
|
| | | return true;
|
| | | }
|
| | |
|
| | | return false;
|
| | | }
|
| | | };
|
| | |
|
| | | tinyMCE.addPlugin("searchreplace", TinyMCE_SearchReplacePlugin); |
| | | // Register plugin
|
| | | tinymce.PluginManager.add('searchreplace', tinymce.plugins.SearchReplacePlugin);
|
| | | })(); |
New file |
| | |
| | | tinyMCEPopup.requireLangPack();
|
| | |
|
| | | var SearchReplaceDialog = {
|
| | | init : function(ed) {
|
| | | var f = document.forms[0], m = tinyMCEPopup.getWindowArg("mode");
|
| | |
|
| | | this.switchMode(m);
|
| | |
|
| | | f[m + '_panel_searchstring'].value = tinyMCEPopup.getWindowArg("search_string");
|
| | |
|
| | | // Focus input field
|
| | | f[m + '_panel_searchstring'].focus();
|
| | | },
|
| | |
|
| | | switchMode : function(m) {
|
| | | var f, lm = this.lastMode;
|
| | |
|
| | | if (lm != m) {
|
| | | f = document.forms[0];
|
| | |
|
| | | if (lm) {
|
| | | f[m + '_panel_searchstring'].value = f[lm + '_panel_searchstring'].value;
|
| | | f[m + '_panel_backwardsu'].checked = f[lm + '_panel_backwardsu'].checked;
|
| | | f[m + '_panel_backwardsd'].checked = f[lm + '_panel_backwardsd'].checked;
|
| | | f[m + '_panel_casesensitivebox'].checked = f[lm + '_panel_casesensitivebox'].checked;
|
| | | }
|
| | |
|
| | | mcTabs.displayTab(m + '_tab', m + '_panel');
|
| | | document.getElementById("replaceBtn").style.display = (m == "replace") ? "inline" : "none";
|
| | | document.getElementById("replaceAllBtn").style.display = (m == "replace") ? "inline" : "none";
|
| | | this.lastMode = m;
|
| | | }
|
| | | },
|
| | |
|
| | | searchNext : function(a) {
|
| | | var ed = tinyMCEPopup.editor, se = ed.selection, r = se.getRng(), f, m = this.lastMode, s, b, fl = 0, w = ed.getWin(), wm = ed.windowManager, fo = 0;
|
| | |
|
| | | // Get input
|
| | | f = document.forms[0];
|
| | | s = f[m + '_panel_searchstring'].value;
|
| | | b = f[m + '_panel_backwardsu'].checked;
|
| | | ca = f[m + '_panel_casesensitivebox'].checked;
|
| | | rs = f['replace_panel_replacestring'].value;
|
| | |
|
| | | function fix() {
|
| | | // Correct Firefox graphics glitches
|
| | | r = se.getRng().cloneRange();
|
| | | ed.getDoc().execCommand('SelectAll', false, null);
|
| | | se.setRng(r);
|
| | | };
|
| | |
|
| | | function replace() {
|
| | | if (tinymce.isIE)
|
| | | ed.selection.getRng().duplicate().pasteHTML(rs); // Needs to be duplicated due to selection bug in IE
|
| | | else
|
| | | ed.getDoc().execCommand('InsertHTML', false, rs);
|
| | | };
|
| | |
|
| | | // IE flags
|
| | | if (ca)
|
| | | fl = fl | 4;
|
| | |
|
| | | switch (a) {
|
| | | case 'all':
|
| | | if (tinymce.isIE) {
|
| | | while (r.findText(s, b ? -1 : 1, fl)) {
|
| | | r.scrollIntoView();
|
| | | r.select();
|
| | | replace();
|
| | | fo = 1;
|
| | | }
|
| | |
|
| | | tinyMCEPopup.storeSelection();
|
| | | } else {
|
| | | while (w.find(s, ca, b, false, false, false, false)) {
|
| | | replace();
|
| | | fo = 1;
|
| | | }
|
| | | }
|
| | |
|
| | | if (fo)
|
| | | wm.alert(ed.getLang('searchreplace_dlg.allreplaced'));
|
| | | else
|
| | | wm.alert(ed.getLang('searchreplace_dlg.notfound'));
|
| | |
|
| | | return;
|
| | |
|
| | | case 'current':
|
| | | replace();
|
| | | break;
|
| | | }
|
| | |
|
| | | se.collapse(b);
|
| | | r = se.getRng();
|
| | |
|
| | | // Whats the point
|
| | | if (!s)
|
| | | return;
|
| | |
|
| | | if (tinymce.isIE) {
|
| | | if (r.findText(s, b ? -1 : 1, fl)) {
|
| | | r.scrollIntoView();
|
| | | r.select();
|
| | | } else
|
| | | wm.alert(ed.getLang('searchreplace_dlg.notfound'));
|
| | |
|
| | | tinyMCEPopup.storeSelection();
|
| | | } else {
|
| | | if (!w.find(s, ca, b, false, false, false, false))
|
| | | wm.alert(ed.getLang('searchreplace_dlg.notfound'));
|
| | | else
|
| | | fix();
|
| | | }
|
| | | }
|
| | | };
|
| | |
|
| | | tinyMCEPopup.onInit.add(SearchReplaceDialog.init, SearchReplaceDialog);
|
New file |
| | |
| | | tinyMCE.addI18n('en.searchreplace_dlg',{
|
| | | searchnext_desc:"Find again",
|
| | | notfound:"The search has been completed. The search string could not be found.",
|
| | | search_title:"Find",
|
| | | replace_title:"Find/Replace",
|
| | | allreplaced:"All occurrences of the search string were replaced.",
|
| | | findwhat:"Find what",
|
| | | replacewith:"Replace with",
|
| | | direction:"Direction",
|
| | | up:"Up",
|
| | | down:"Down",
|
| | | mcase:"Match case",
|
| | | findnext:"Find next",
|
| | | replace:"Replace",
|
| | | replaceall:"Replace all"
|
| | | }); |
| | |
| | | <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
|
| | | <html xmlns="http://www.w3.org/1999/xhtml">
|
| | | <head>
|
| | | <title>{$lang_searchreplace_replace_title}</title>
|
| | | <script language="javascript" type="text/javascript" src="../../tiny_mce_popup.js"></script>
|
| | | <script language="javascript" type="text/javascript" src="../../utils/mctabs.js"></script>
|
| | | <script language="javascript" type="text/javascript" src="../../utils/form_utils.js"></script>
|
| | | <script language="javascript" type="text/javascript" src="jscripts/searchreplace.js"></script>
|
| | | <title>{#searchreplace_dlg.replace_title}</title>
|
| | | <script type="text/javascript" src="../../tiny_mce_popup.js"></script>
|
| | | <script type="text/javascript" src="../../utils/mctabs.js"></script>
|
| | | <script type="text/javascript" src="../../utils/form_utils.js"></script>
|
| | | <script type="text/javascript" src="js/searchreplace.js"></script>
|
| | | <link rel="stylesheet" type="text/css" href="css/searchreplace.css" />
|
| | | <base target="_self" />
|
| | | </head>
|
| | | <body onload="tinyMCEPopup.executeOnLoad('init();');" style="display: none; margin: 4px;">
|
| | | <form onsubmit="return false;" action="#">
|
| | | <body style="display:none;">
|
| | | <form onsubmit="SearchReplaceDialog.searchNext('none');return false;" action="#">
|
| | | <div class="tabs">
|
| | | <ul>
|
| | | <li id="search_tab"><span><a href="javascript:mcTabs.displayTab('search_tab','search_panel');manageReplaceButtons();" onmousedown="return copyValues(this);">{$lang_searchreplace_search_desc}</a></span></li>
|
| | | <li id="replace_tab"><span><a href="javascript:mcTabs.displayTab('replace_tab','replace_panel');manageReplaceButtons();" onmousedown="return copyValues(this);">{$lang_searchreplace_replace}</a></span></li>
|
| | | <li id="search_tab"><span><a href="javascript:SearchReplaceDialog.switchMode('search');" onmousedown="return false;">{#searchreplace.search_desc}</a></span></li>
|
| | | <li id="replace_tab"><span><a href="javascript:SearchReplaceDialog.switchMode('replace');" onmousedown="return false;">{#searchreplace_dlg.replace}</a></span></li>
|
| | | </ul>
|
| | | </div>
|
| | |
|
| | | <div class="panel_wrapper">
|
| | |
|
| | | <div id="search_panel" class="panel">
|
| | | <table border="0" cellspacing="0" cellpadding="2">
|
| | | <tr>
|
| | | <td><label for="search_panel_searchstring">{$lang_searchreplace_findwhat}</label></td>
|
| | | <td><label for="search_panel_searchstring">{#searchreplace_dlg.findwhat}</label></td>
|
| | | <td><input type="text" id="search_panel_searchstring" name="search_panel_searchstring" style="width: 200px" /></td>
|
| | | </tr>
|
| | | <tr>
|
| | | <td colspan="2">
|
| | | <table border="0" cellspacing="0" cellpadding="0" class="direction">
|
| | | <tr>
|
| | | <td><label>{$lang_searchreplace_direction}</label></td>
|
| | | <td><label>{#searchreplace_dlg.direction}</label></td>
|
| | | <td><input id="search_panel_backwardsu" name="search_panel_backwards" class="radio" type="radio" /></td>
|
| | | <td><label for="search_panel_backwardsu">{$lang_searchreplace_up}</label></td>
|
| | | <td><input id="search_panel_backwardsd" name="search_panel_backwards" class="radio" type="radio" /></td>
|
| | | <td><label for="search_panel_backwardsd">{$lang_searchreplace_down}</label></td>
|
| | | <td><label for="search_panel_backwardsu">{#searchreplace_dlg.up}</label></td>
|
| | | <td><input id="search_panel_backwardsd" name="search_panel_backwards" class="radio" type="radio" checked="checked" /></td>
|
| | | <td><label for="search_panel_backwardsd">{#searchreplace_dlg.down}</label></td>
|
| | | </tr>
|
| | | </table>
|
| | | </td>
|
| | |
| | | <table border="0" cellspacing="0" cellpadding="0">
|
| | | <tr>
|
| | | <td><input id="search_panel_casesensitivebox" name="search_panel_casesensitivebox" class="checkbox" type="checkbox" /></td>
|
| | | <td><label for="search_panel_casesensitivebox">{$lang_searchreplace_case}</label></td>
|
| | | <td><label for="search_panel_casesensitivebox">{#searchreplace_dlg.mcase}</label></td>
|
| | | </tr>
|
| | | </table>
|
| | | </td>
|
| | |
| | | <div id="replace_panel" class="panel">
|
| | | <table border="0" cellspacing="0" cellpadding="2">
|
| | | <tr>
|
| | | <td><label for="replace_panel_searchstring">{$lang_searchreplace_findwhat}</label></td>
|
| | | <td><label for="replace_panel_searchstring">{#searchreplace_dlg.findwhat}</label></td>
|
| | | <td><input type="text" id="replace_panel_searchstring" name="replace_panel_searchstring" style="width: 200px" /></td>
|
| | | </tr>
|
| | | <tr>
|
| | | <td><label for="replace_panel_replacestring">{$lang_searchreplace_replacewith}</label></td>
|
| | | <td><label for="replace_panel_replacestring">{#searchreplace_dlg.replacewith}</label></td>
|
| | | <td><input type="text" id="replace_panel_replacestring" name="replace_panel_replacestring" style="width: 200px" /></td>
|
| | | </tr>
|
| | | <tr>
|
| | | <td colspan="2">
|
| | | <table border="0" cellspacing="0" cellpadding="0" class="direction">
|
| | | <tr>
|
| | | <td><label>{$lang_searchreplace_direction}</label></td>
|
| | | <td><label>{#searchreplace_dlg.direction}</label></td>
|
| | | <td><input id="replace_panel_backwardsu" name="replace_panel_backwards" class="radio" type="radio" /></td>
|
| | | <td><label for="replace_panel_backwardsu">{$lang_searchreplace_up}</label></td>
|
| | | <td><input id="replace_panel_backwardsd" name="replace_panel_backwards" class="radio" type="radio" /></td>
|
| | | <td><label for="replace_panel_backwardsd">{$lang_searchreplace_down}</label></td>
|
| | | <td><label for="replace_panel_backwardsu">{#searchreplace_dlg.up}</label></td>
|
| | | <td><input id="replace_panel_backwardsd" name="replace_panel_backwards" class="radio" type="radio" checked="checked" /></td>
|
| | | <td><label for="replace_panel_backwardsd">{#searchreplace_dlg.down}</label></td>
|
| | | </tr>
|
| | | </table>
|
| | | </td>
|
| | |
| | | <table border="0" cellspacing="0" cellpadding="0">
|
| | | <tr>
|
| | | <td><input id="replace_panel_casesensitivebox" name="replace_panel_casesensitivebox" class="checkbox" type="checkbox" /></td>
|
| | | <td><label for="replace_panel_casesensitivebox">{$lang_searchreplace_case}</label></td>
|
| | | <td><label for="replace_panel_casesensitivebox">{#searchreplace_dlg.mcase}</label></td>
|
| | | </tr>
|
| | | </table>
|
| | | </td>
|
| | |
| | |
|
| | | <div class="mceActionPanel">
|
| | | <div style="float: left">
|
| | | <input type="button" id="insert" name="insert" value="{$lang_searchreplace_findnext}" onclick="searchNext('none');" />
|
| | | <span id="replace_buttons">
|
| | | <input type="button" id="replaceBtn" name="replaceBtn" value="{$lang_searchreplace_replace}" onclick="searchNext('current');" />
|
| | | <input type="button" id="replaceAllBtn" name="replaceAllBtn" value="{$lang_searchreplace_replaceall}" onclick="searchNext('all');;" />
|
| | | </span>
|
| | | <input type="submit" id="insert" name="insert" value="{#searchreplace_dlg.findnext}" />
|
| | | <input type="button" class="button" id="replaceBtn" name="replaceBtn" value="{#searchreplace_dlg.replace}" onclick="SearchReplaceDialog.searchNext('current');" />
|
| | | <input type="button" class="button" id="replaceAllBtn" name="replaceAllBtn" value="{#searchreplace_dlg.replaceall}" onclick="SearchReplaceDialog.searchNext('all');" />
|
| | | </div>
|
| | |
|
| | | <div style="float: right">
|
| | | <input type="button" id="cancel" name="cancel" value="{$lang_searchreplace_cancel}" onclick="tinyMCEPopup.close();" />
|
| | | <input type="button" id="cancel" name="cancel" value="{#cancel}" onclick="tinyMCEPopup.close();" />
|
| | | </div>
|
| | | </div>
|
| | | </form>
|
| | |
| | | .mceItemHiddenSpellWord {
|
| | | background: url('../images/wline.gif') repeat-x bottom left;
|
| | | bo2rder-bottom: 1px dashed red;
|
| | | cursor: default;
|
| | | }
|
| | | .mceItemHiddenSpellWord {background:url(../img/wline.gif) repeat-x bottom left; cursor:default;}
|
| | |
| | | tinyMCE.importPluginLanguagePack('spellchecker','en,fr,sv,nn,nb');var TinyMCE_SpellCheckerPlugin={_contextMenu:new TinyMCE_Menu(),_menu:new TinyMCE_Menu(),_counter:0,_ajaxPage:'/tinyspell.php',getInfo:function(){return{longname:'Spellchecker',author:'Moxiecode Systems AB',authorurl:'http://tinymce.moxiecode.com',infourl:'http://tinymce.moxiecode.com/tinymce/docs/plugin_spellchecker.html',version:tinyMCE.majorVersion+"."+tinyMCE.minorVersion};},handleEvent:function(e){var elm=tinyMCE.isMSIE?e.srcElement:e.target;var inst=tinyMCE.selectedInstance,args='';var self=TinyMCE_SpellCheckerPlugin;var cm=self._contextMenu;var p,p2,x,y,sx,sy,h,elm;if((e.type=="click"||e.type=="contextmenu")&&elm){do{if(tinyMCE.getAttrib(elm,'class')=="mceItemHiddenSpellWord"){inst.spellCheckerElm=elm;args+='id='+inst.editorId+"|"+(++self._counter);args+='&cmd=suggest&check='+encodeURIComponent(elm.innerHTML);args+='&lang='+escape(inst.spellCheckerLang);elm=inst.spellCheckerElm;p=tinyMCE.getAbsPosition(inst.iframeElement);p2=tinyMCE.getAbsPosition(elm);h=parseInt(elm.offsetHeight);sx=inst.getBody().scrollLeft;sy=inst.getBody().scrollTop;x=p.absLeft+p2.absLeft-sx;y=p.absTop+p2.absTop-sy+h;cm.clear();cm.addTitle(tinyMCE.getLang('lang_spellchecker_wait','',true));cm.show();cm.moveTo(x,y);inst.selection.selectNode(elm,false,false);self._sendAjax(self.baseURL+self._ajaxPage,self._ajaxResponse,'post',args);tinyMCE.cancelEvent(e);return false;}}while((elm=elm.parentNode));}return true;},initInstance:function(inst){var self=TinyMCE_SpellCheckerPlugin,m=self._menu,cm=self._contextMenu,e;tinyMCE.importCSS(inst.getDoc(),tinyMCE.baseURL+"/plugins/spellchecker/css/content.css");if(!tinyMCE.hasMenu('spellcheckercontextmenu')){tinyMCE.importCSS(document,tinyMCE.baseURL+"/plugins/spellchecker/css/spellchecker.css");cm.init({drop_menu:false});tinyMCE.addMenu('spellcheckercontextmenu',cm);}if(!tinyMCE.hasMenu('spellcheckermenu')){m.init({});tinyMCE.addMenu('spellcheckermenu',m);}inst.spellCheckerLang='en';self._buildSettingsMenu(inst,null);e=self._getBlockBoxLayer(inst).create('div','mceBlockBox',document.getElementById(inst.editorId+'_parent'));self._getMsgBoxLayer(inst).create('div','mceMsgBox',document.getElementById(inst.editorId+'_parent'));},_getMsgBoxLayer:function(inst){if(!inst.spellCheckerMsgBoxL)inst.spellCheckerMsgBoxL=new TinyMCE_Layer(inst.editorId+'_spellcheckerMsgBox',false);return inst.spellCheckerMsgBoxL;},_getBlockBoxLayer:function(inst){if(!inst.spellCheckerBoxL)inst.spellCheckerBoxL=new TinyMCE_Layer(inst.editorId+'_spellcheckerBlockBox',false);return inst.spellCheckerBoxL;},_buildSettingsMenu:function(inst,lang){var i,ar=tinyMCE.getParam('spellchecker_languages','+English=en').split(','),p;var self=TinyMCE_SpellCheckerPlugin,m=self._menu,c;m.clear();m.addTitle(tinyMCE.getLang('lang_spellchecker_langs','',true));for(i=0;i<ar.length;i++){if(ar[i]!=''){p=ar[i].split('=');c='mceMenuCheckItem';if(p[0].charAt(0)=='+'){p[0]=p[0].substring(1);if(lang==null){c='mceMenuSelectedItem';inst.spellCheckerLang=p[1];}}if(lang==p[1])c='mceMenuSelectedItem';m.add({text:p[0],js:"tinyMCE.execInstanceCommand('"+inst.editorId+"','mceSpellCheckerSetLang',false,'"+p[1]+"');",class_name:c});}}},setupContent:function(editor_id,body,doc){TinyMCE_SpellCheckerPlugin._removeWords(doc);},getControlHTML:function(cn){switch(cn){case"spellchecker":return TinyMCE_SpellCheckerPlugin._getMenuButtonHTML(cn,'lang_spellchecker_desc','{$pluginurl}/images/spellchecker.gif','lang_spellchecker_desc','mceSpellCheckerMenu','mceSpellCheck');}return"";},_getMenuButtonHTML:function(id,lang,img,mlang,mid,cmd,ui,val){var h='',m,x;cmd='tinyMCE.hideMenus();tinyMCE.execInstanceCommand(\'{$editor_id}\',\''+cmd+'\'';if(typeof(ui)!="undefined"&&ui!=null)cmd+=','+ui;if(typeof(val)!="undefined"&&val!=null)cmd+=",'"+val+"'";cmd+=');';if(tinyMCE.getParam('button_tile_map')&&(!tinyMCE.isMSIE||tinyMCE.isOpera)&&(m=tinyMCE.buttonMap[id])!=null&&(tinyMCE.getParam("language")=="en"||img.indexOf('$lang')==-1)){x=0-(m*20)==0?'0':0-(m*20);h+='<a id="{$editor_id}_'+id+'" href="javascript:'+cmd+'" onclick="'+cmd+'return false;" onmousedown="return false;" class="mceTiledButton mceButtonNormal" target="_self">';h+='<img src="{$themeurl}/images/spacer.gif" style="background-position: '+x+'px 0" title="{$'+lang+'}" />';h+='<img src="{$themeurl}/images/button_menu.gif" title="{$'+lang+'}" class="mceMenuButton" onclick="'+mcmd+'return false;" />';h+='</a>';}else{if(tinyMCE.isMSIE&&!tinyMCE.isOpera)h+='<span id="{$editor_id}_'+id+'" class="mceMenuButton" onmouseover="tinyMCE.plugins.spellchecker._menuButtonEvent(\'over\',this);" onmouseout="tinyMCE.plugins.spellchecker._menuButtonEvent(\'out\',this);">';else h+='<span id="{$editor_id}_'+id+'" class="mceMenuButton">';h+='<a href="javascript:'+cmd+'" onclick="'+cmd+'return false;" onmousedown="return false;" class="mceMenuButtonNormal" target="_self">';h+='<img src="'+img+'" title="{$'+lang+'}" /></a>';h+='<a href="#" onclick="tinyMCE.plugins.spellchecker._toggleMenu(\'{$editor_id}\',\''+mid+'\');return false;" onmousedown="return false;"><img src="{$themeurl}/images/button_menu.gif" title="{$'+lang+'}" class="mceMenuButton" />';h+='</a></span>';}return h;},_menuButtonEvent:function(e,o){if(o.className=='mceMenuButtonFocus')return;if(e=='over')o.className=o.className+' mceMenuHover';else o.className=o.className.replace(/\s.*$/,'');},_toggleMenu:function(editor_id,id){var self=TinyMCE_SpellCheckerPlugin;var e=document.getElementById(editor_id+'_spellchecker');var inst=tinyMCE.getInstanceById(editor_id);if(self._menu.isVisible()){tinyMCE.hideMenus();return;}tinyMCE.lastMenuBtnClass=e.className.replace(/\s.*$/,'');tinyMCE.switchClass(editor_id+'_spellchecker','mceMenuButtonFocus');self._menu.moveRelativeTo(e,'bl');self._menu.moveBy(tinyMCE.isMSIE&&!tinyMCE.isOpera?0:1,-1);if(tinyMCE.isOpera)self._menu.moveBy(0,-2);self._onMenuEvent(inst,self._menu,'show');self._menu.show();tinyMCE.lastSelectedMenuBtn=editor_id+'_spellchecker';},_onMenuEvent:function(inst,m,n){TinyMCE_SpellCheckerPlugin._buildSettingsMenu(inst,inst.spellCheckerLang);},execCommand:function(editor_id,element,command,user_interface,value){var inst=tinyMCE.getInstanceById(editor_id),self=TinyMCE_SpellCheckerPlugin,args='',co,bb,mb,nl,i,e;switch(command){case"mceSpellCheck":if(!inst.spellcheckerOn){inst.spellCheckerBookmark=inst.selection.getBookmark();args+='id='+inst.editorId+"|"+(++self._counter);args+='&cmd=spell&check='+encodeURIComponent(self._getWordList(inst.getBody())).replace(/\'/g,'%27');args+='&lang='+escape(inst.spellCheckerLang);co=document.getElementById(inst.editorId+'_parent').firstChild;bb=self._getBlockBoxLayer(inst);bb.moveRelativeTo(co,'tl');bb.resizeTo(co.offsetWidth,co.offsetHeight);bb.show();mb=self._getMsgBoxLayer(inst);e=mb.getElement();e.innerHTML='<span>'+tinyMCE.getLang('lang_spellchecker_swait','',true)+'</span>';mb.show();mb.moveRelativeTo(co,'cc');if(tinyMCE.isMSIE&&!tinyMCE.isOpera){nl=co.getElementsByTagName('select');for(i=0;i<nl.length;i++)nl[i].disabled=true;}inst.spellcheckerOn=true;tinyMCE.switchClass(editor_id+'_spellchecker','mceMenuButtonSelected');self._sendAjax(self.baseURL+self._ajaxPage,self._ajaxResponse,'post',args);}else{self._removeWords(inst.getDoc());inst.spellcheckerOn=false;tinyMCE.switchClass(editor_id+'_spellchecker','mceMenuButton');}return true;case"mceSpellCheckReplace":if(inst.spellCheckerElm)tinyMCE.setOuterHTML(inst.spellCheckerElm,value);self._checkDone(inst);self._contextMenu.hide();self._menu.hide();return true;case"mceSpellCheckIgnore":if(inst.spellCheckerElm)self._removeWord(inst.spellCheckerElm);self._checkDone(inst);self._contextMenu.hide();self._menu.hide();return true;case"mceSpellCheckIgnoreAll":if(inst.spellCheckerElm)self._removeWords(inst.getDoc(),inst.spellCheckerElm.innerHTML);self._checkDone(inst);self._contextMenu.hide();self._menu.hide();return true;case"mceSpellCheckerSetLang":tinyMCE.hideMenus();inst.spellCheckerLang=value;self._removeWords(inst.getDoc());inst.spellcheckerOn=false;tinyMCE.switchClass(editor_id+'_spellchecker','mceMenuButton');return true;}return false;},cleanup:function(type,content,inst){switch(type){case"get_from_editor_dom":TinyMCE_SpellCheckerPlugin._removeWords(content);inst.spellcheckerOn=false;break;}return content;},_displayUI:function(inst){var self=TinyMCE_SpellCheckerPlugin;var bb=self._getBlockBoxLayer(inst);var mb=self._getMsgBoxLayer(inst);var nl,i;var co=document.getElementById(inst.editorId+'_parent').firstChild;if(tinyMCE.isMSIE&&!tinyMCE.isOpera){nl=co.getElementsByTagName('select');for(i=0;i<nl.length;i++)nl[i].disabled=false;}bb.hide();mb.hide();},_ajaxResponse:function(xml){var el=xml?xml.documentElement:null;var inst=tinyMCE.selectedInstance,self=TinyMCE_SpellCheckerPlugin;var cmd=el?el.getAttribute("cmd"):null,err,id=el?el.getAttribute("id"):null;if(id)inst=tinyMCE.getInstanceById(id.substring(0,id.indexOf('|')));self._displayUI(inst);if(cmd=="suggest"&&id!=inst.editorId+"|"+self._counter)return;if(!el){inst.spellcheckerOn=false;tinyMCE.switchClass(inst.editorId+'_spellchecker','mceMenuButton');alert("Could not execute AJAX call, server didn't return valid a XML.");return;}err=el.getAttribute("error");if(err=="true"){inst.spellcheckerOn=false;tinyMCE.switchClass(inst.editorId+'_spellchecker','mceMenuButton');alert(el.getAttribute("msg"));return;}switch(cmd){case"spell":if(xml.documentElement.firstChild){self._markWords(inst.getDoc(),inst.getBody(),decodeURIComponent(el.firstChild.nodeValue).split('+'));inst.selection.moveToBookmark(inst.spellCheckerBookmark);if(tinyMCE.getParam('spellchecker_report_mispellings',false))alert(tinyMCE.getLang('lang_spellchecker_mpell_found','',true,{words:self._countWords(inst)}));}else alert(tinyMCE.getLang('lang_spellchecker_no_mpell','',true));self._checkDone(inst);break;case"suggest":self._buildMenu(el.firstChild?decodeURIComponent(el.firstChild.nodeValue).split('+'):null,10);self._contextMenu.show();break;}},_getWordSeparators:function(){var i,re='',ch=tinyMCE.getParam('spellchecker_word_separator_chars','\\s!"#$%&()*+,-./:;<=>?@[\]^_{|}\u201d\u201c');for(i=0;i<ch.length;i++)re+='\\'+ch.charAt(i);return re;},_getWordList:function(n){var i,x,s,nv='',nl=tinyMCE.getNodeTree(n,new Array(),3),wl=new Array();var re=TinyMCE_SpellCheckerPlugin._getWordSeparators();for(i=0;i<nl.length;i++){if(!new RegExp('/SCRIPT|STYLE/').test(nl[i].parentNode.nodeName))nv+=nl[i].nodeValue+" ";}nv=nv.replace(new RegExp('([0-9]|['+re+'])','g'),' ');nv=tinyMCE.trim(nv.replace(/(\s+)/g,' '));nl=nv.split(/\s+/);for(i=0;i<nl.length;i++){s=false;for(x=0;x<wl.length;x++){if(wl[x]==nl[i]){s=true;break;}}if(!s&&nl[i].length>0)wl[wl.length]=nl[i];}return wl.join(' ');},_removeWords:function(doc,word){var i,c,nl=doc.getElementsByTagName("span");var self=TinyMCE_SpellCheckerPlugin;var inst=tinyMCE.selectedInstance,b=inst?inst.selection.getBookmark():null;word=typeof(word)=='undefined'?null:word;for(i=nl.length-1;i>=0;i--){c=tinyMCE.getAttrib(nl[i],'class');if((c=='mceItemHiddenSpellWord'||c=='mceItemHidden')&&(word==null||nl[i].innerHTML==word))self._removeWord(nl[i]);}if(b)inst.selection.moveToBookmark(b);},_checkDone:function(inst){var self=TinyMCE_SpellCheckerPlugin;var w=self._countWords(inst);if(w==0){self._removeWords(inst.getDoc());inst.spellcheckerOn=false;tinyMCE.switchClass(inst.editorId+'_spellchecker','mceMenuButton');}},_countWords:function(inst){var i,w=0,nl=inst.getDoc().getElementsByTagName("span"),c;var self=TinyMCE_SpellCheckerPlugin;for(i=nl.length-1;i>=0;i--){c=tinyMCE.getAttrib(nl[i],'class');if(c=='mceItemHiddenSpellWord')w++;}return w;},_removeWord:function(e){if(e!=null)tinyMCE.setOuterHTML(e,e.innerHTML);},_markWords:function(doc,n,wl){var i,nv,nn,nl=tinyMCE.getNodeTree(n,new Array(),3);var r1,r2,r3,r4,r5,w='';var re=TinyMCE_SpellCheckerPlugin._getWordSeparators();for(i=0;i<wl.length;i++){if(wl[i].length>0)w+=wl[i]+((i==wl.length-1)?'':'|');}for(i=0;i<nl.length;i++){nv=nl[i].nodeValue;r1=new RegExp('(['+re+'])('+w+')(['+re+'])','g');r2=new RegExp('^('+w+')','g');r3=new RegExp('('+w+')(['+re+']?)$','g');r4=new RegExp('^('+w+')(['+re+']?)$','g');r5=new RegExp('('+w+')(['+re+'])','g');if(r1.test(nv)||r2.test(nv)||r3.test(nv)||r4.test(nv)){nv=tinyMCE.xmlEncode(nv);nv=nv.replace(r5,'<span class="mceItemHiddenSpellWord">$1</span>$2');nv=nv.replace(r3,'<span class="mceItemHiddenSpellWord">$1</span>$2');nn=doc.createElement('span');nn.className="mceItemHidden";nn.innerHTML=nv;nl[i].parentNode.replaceChild(nn,nl[i]);}}},_buildMenu:function(sg,max){var i,self=TinyMCE_SpellCheckerPlugin,cm=self._contextMenu;cm.clear();if(sg!=null){cm.addTitle(tinyMCE.getLang('lang_spellchecker_sug','',true));for(i=0;i<sg.length&&i<max;i++)cm.addItem(sg[i],'tinyMCE.execCommand("mceSpellCheckReplace",false,"'+sg[i]+'");');cm.addSeparator();}else cm.addTitle(tinyMCE.getLang('lang_spellchecker_no_sug','',true));cm.addItem(tinyMCE.getLang('lang_spellchecker_ignore_word','',true),'tinyMCE.execCommand(\'mceSpellCheckIgnore\');');cm.addItem(tinyMCE.getLang('lang_spellchecker_ignore_words','',true),'tinyMCE.execCommand(\'mceSpellCheckIgnoreAll\');');cm.update();},_getAjaxHTTP:function(){try{return new ActiveXObject('Msxml2.XMLHTTP')}catch(e){try{return new ActiveXObject('Microsoft.XMLHTTP')}catch(e){return new XMLHttpRequest();}}},_sendAjax:function(u,f,m,a){var x=TinyMCE_SpellCheckerPlugin._getAjaxHTTP();x.open(m,u,true);x.onreadystatechange=function(){if(x.readyState==4)f(x.responseXML);};if(m=='post')x.setRequestHeader('Content-type','application/x-www-form-urlencoded');x.send(a);}};tinyMCE.addPlugin('spellchecker',TinyMCE_SpellCheckerPlugin); |
| | | (function(){var JSONRequest=tinymce.util.JSONRequest,each=tinymce.each,DOM=tinymce.DOM;tinymce.create('tinymce.plugins.SpellcheckerPlugin',{getInfo:function(){return{longname:'Spellchecker',author:'Moxiecode Systems AB',authorurl:'http://tinymce.moxiecode.com',infourl:'http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/spellchecker',version:tinymce.majorVersion+"."+tinymce.minorVersion};},init:function(ed,url){var t=this,cm;t.url=url;t.editor=ed;ed.addCommand('mceSpellCheck',function(){if(!t.active){ed.setProgressState(1);t._sendRPC('checkWords',[t.selectedLang,t._getWords()],function(r){if(r.length>0){t.active=1;t._markWords(r);ed.setProgressState(0);ed.nodeChanged();}else{ed.setProgressState(0);ed.windowManager.alert('spellchecker.no_mpell');}});}else t._done();});ed.onInit.add(function(){if(ed.settings.content_css!==false)ed.dom.loadCSS(url+'/css/content.css');});ed.onClick.add(t._showMenu,t);ed.onContextMenu.add(t._showMenu,t);ed.onBeforeGetContent.add(function(){if(t.active)t._removeWords();});ed.onNodeChange.add(function(ed,cm){cm.setActive('spellchecker',t.active);});ed.onSetContent.add(function(){t._done();});ed.onBeforeGetContent.add(function(){t._done();});ed.onBeforeExecCommand.add(function(ed,cmd){if(cmd=='mceFullScreen')t._done();});t.languages={};each(ed.getParam('spellchecker_languages','+English=en,Danish=da,Dutch=nl,Finnish=fi,French=fr,German=de,Italian=it,Polish=pl,Portuguese=pt,Spanish=es,Swedish=sv','hash'),function(v,k){if(k.indexOf('+')===0){k=k.substring(1);t.selectedLang=v;}t.languages[k]=v;});},createControl:function(n,cm){var t=this,c,ed=t.editor;if(n=='spellchecker'){c=cm.createSplitButton(n,{title:'spellchecker.desc',cmd:'mceSpellCheck',scope:t});c.onRenderMenu.add(function(c,m){m.add({title:'spellchecker.langs','class':'mceMenuItemTitle'}).setDisabled(1);each(t.languages,function(v,k){var o={icon:1},mi;o.onclick=function(){mi.setSelected(1);t.selectedItem.setSelected(0);t.selectedItem=mi;t.selectedLang=v;};o.title=k;mi=m.add(o);mi.setSelected(v==t.selectedLang);if(v==t.selectedLang)t.selectedItem=mi;})});return c;}},_walk:function(n,f){var d=this.editor.getDoc(),w;if(d.createTreeWalker){w=d.createTreeWalker(n,NodeFilter.SHOW_TEXT,null,false);while((n=w.nextNode())!=null)f.call(this,n);}else tinymce.walk(n,f,'childNodes');},_getSeparators:function(){var re='',i,str=this.editor.getParam('spellchecker_word_separator_chars','\\s!"#$%&()*+,-./:;<=>?@[\]^_{|}����������������\u201d\u201c');for(i=0;i<str.length;i++)re+='\\'+str.charAt(i);return re;},_getWords:function(){var ed=this.editor,wl=[],tx='',lo={};this._walk(ed.getBody(),function(n){if(n.nodeType==3)tx+=n.nodeValue+' ';});tx=tx.replace(new RegExp('([0-9]|['+this._getSeparators()+'])','g'),' ');tx=tinymce.trim(tx.replace(/(\s+)/g,' '));each(tx.split(' '),function(v){if(!lo[v]){wl.push(v);lo[v]=1;}});return wl;},_removeWords:function(w){var ed=this.editor,dom=ed.dom,se=ed.selection,b=se.getBookmark();each(dom.select('span').reverse(),function(n){if(n&&(dom.hasClass(n,'mceItemHiddenSpellWord')||dom.hasClass(n,'mceItemHidden'))){if(!w||dom.decode(n.innerHTML)==w)dom.remove(n,1);}});se.moveToBookmark(b);},_markWords:function(wl){var r1,r2,r3,r4,r5,w='',ed=this.editor,re=this._getSeparators(),dom=ed.dom,nl=[];var se=ed.selection,b=se.getBookmark();each(wl,function(v){w+=(w?'|':'')+v;});r1=new RegExp('(['+re+'])('+w+')(['+re+'])','g');r2=new RegExp('^('+w+')','g');r3=new RegExp('('+w+')(['+re+']?)$','g');r4=new RegExp('^('+w+')(['+re+']?)$','g');r5=new RegExp('('+w+')(['+re+'])','g');this._walk(this.editor.getBody(),function(n){if(n.nodeType==3){nl.push(n);}});each(nl,function(n){var v;if(n.nodeType==3){v=n.nodeValue;if(r1.test(v)||r2.test(v)||r3.test(v)||r4.test(v)){v=dom.encode(v);v=v.replace(r5,'<span class="mceItemHiddenSpellWord">$1</span>$2');v=v.replace(r3,'<span class="mceItemHiddenSpellWord">$1</span>$2');dom.replace(dom.create('span',{'class':'mceItemHidden'},v),n);}}});se.moveToBookmark(b);},_showMenu:function(ed,e){var t=this,ed=t.editor,m=t._menu,p1,dom=ed.dom,vp=dom.getViewPort(ed.getWin());if(!m){p1=DOM.getPos(ed.getContentAreaContainer());m=ed.controlManager.createDropMenu('spellcheckermenu',{offset_x:p1.x,offset_y:p1.y,'class':'mceNoIcons'});t._menu=m;}if(dom.hasClass(e.target,'mceItemHiddenSpellWord')){m.removeAll();m.add({title:'spellchecker.wait','class':'mceMenuItemTitle'}).setDisabled(1);t._sendRPC('getSuggestions',[t.selectedLang,dom.decode(e.target.innerHTML)],function(r){m.removeAll();if(r.length>0){m.add({title:'spellchecker.sug','class':'mceMenuItemTitle'}).setDisabled(1);each(r,function(v){m.add({title:v,onclick:function(){dom.replace(ed.getDoc().createTextNode(v),e.target);t._checkDone();}});});m.addSeparator();}else m.add({title:'spellchecker.no_sug','class':'mceMenuItemTitle'}).setDisabled(1);m.add({title:'spellchecker.ignore_word',onclick:function(){dom.remove(e.target,1);t._checkDone();}});m.add({title:'spellchecker.ignore_words',onclick:function(){t._removeWords(dom.decode(e.target.innerHTML));t._checkDone();}});m.update();});ed.selection.select(e.target);p1=dom.getPos(e.target);m.showMenu(p1.x,p1.y+e.target.offsetHeight-vp.y);return tinymce.dom.Event.cancel(e);}else m.hideMenu();},_checkDone:function(){var t=this,ed=t.editor,dom=ed.dom,o;each(dom.select('span'),function(n){if(n&&dom.hasClass(n,'mceItemHiddenSpellWord')){o=true;return false;}});if(!o)t._done();},_done:function(){var t=this,la=t.active;if(t.active){t.active=0;t._removeWords();if(t._menu)t._menu.hideMenu();if(la)t.editor.nodeChanged();}},_sendRPC:function(m,p,cb){var t=this,url=t.editor.getParam("spellchecker_rpc_url","{backend}");if(url=='{backend}'){t.editor.setProgressState(0);alert('Please specify: spellchecker_rpc_url');return;}JSONRequest.sendRPC({url:url,method:m,params:p,success:cb,error:function(e,x){t.editor.setProgressState(0);t.editor.windowManager.alert(e.errstr||('Error response: '+x.responseText));}});}});tinymce.PluginManager.add('spellchecker',tinymce.plugins.SpellcheckerPlugin);})(); |
| | |
| | | /**
|
| | | * $Id: editor_plugin_src.js 28 2006-08-01 16:02:56Z spocke $
|
| | | * $Id: editor_plugin_src.js 425 2007-11-21 15:17:39Z spocke $
|
| | | *
|
| | | * @author Moxiecode
|
| | | * @copyright Copyright © 2004-2006, Moxiecode Systems AB, All rights reserved.
|
| | | * @copyright Copyright © 2004-2008, Moxiecode Systems AB, All rights reserved.
|
| | | */
|
| | |
|
| | | tinyMCE.importPluginLanguagePack('spellchecker', 'en,fr,sv,nn,nb');
|
| | | (function() {
|
| | | var JSONRequest = tinymce.util.JSONRequest, each = tinymce.each, DOM = tinymce.DOM;
|
| | |
|
| | | // Plucin static class
|
| | | var TinyMCE_SpellCheckerPlugin = {
|
| | | _contextMenu : new TinyMCE_Menu(),
|
| | | _menu : new TinyMCE_Menu(),
|
| | | _counter : 0,
|
| | | _ajaxPage : '/tinyspell.php',
|
| | | tinymce.create('tinymce.plugins.SpellcheckerPlugin', {
|
| | | getInfo : function() {
|
| | | return {
|
| | | longname : 'Spellchecker',
|
| | | author : 'Moxiecode Systems AB',
|
| | | authorurl : 'http://tinymce.moxiecode.com',
|
| | | infourl : 'http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/spellchecker',
|
| | | version : tinymce.majorVersion + "." + tinymce.minorVersion
|
| | | };
|
| | | },
|
| | |
|
| | | getInfo : function() {
|
| | | return {
|
| | | longname : 'Spellchecker',
|
| | | author : 'Moxiecode Systems AB',
|
| | | authorurl : 'http://tinymce.moxiecode.com',
|
| | | infourl : 'http://tinymce.moxiecode.com/tinymce/docs/plugin_spellchecker.html',
|
| | | version : tinyMCE.majorVersion + "." + tinyMCE.minorVersion
|
| | | };
|
| | | },
|
| | | init : function(ed, url) {
|
| | | var t = this, cm;
|
| | |
|
| | | handleEvent : function(e) {
|
| | | var elm = tinyMCE.isMSIE ? e.srcElement : e.target;
|
| | | var inst = tinyMCE.selectedInstance, args = '';
|
| | | var self = TinyMCE_SpellCheckerPlugin;
|
| | | var cm = self._contextMenu;
|
| | | var p, p2, x, y, sx, sy, h, elm;
|
| | | t.url = url;
|
| | | t.editor = ed;
|
| | |
|
| | | // Handle click on word
|
| | | if ((e.type == "click" || e.type == "contextmenu") && elm) {
|
| | | do {
|
| | | if (tinyMCE.getAttrib(elm, 'class') == "mceItemHiddenSpellWord") {
|
| | | inst.spellCheckerElm = elm;
|
| | |
|
| | | // Setup arguments
|
| | | args += 'id=' + inst.editorId + "|" + (++self._counter);
|
| | | args += '&cmd=suggest&check=' + encodeURIComponent(elm.innerHTML);
|
| | | args += '&lang=' + escape(inst.spellCheckerLang);
|
| | |
|
| | | elm = inst.spellCheckerElm;
|
| | | p = tinyMCE.getAbsPosition(inst.iframeElement);
|
| | | p2 = tinyMCE.getAbsPosition(elm);
|
| | | h = parseInt(elm.offsetHeight);
|
| | | sx = inst.getBody().scrollLeft;
|
| | | sy = inst.getBody().scrollTop;
|
| | | x = p.absLeft + p2.absLeft - sx;
|
| | | y = p.absTop + p2.absTop - sy + h;
|
| | |
|
| | | cm.clear();
|
| | | cm.addTitle(tinyMCE.getLang('lang_spellchecker_wait', '', true));
|
| | | cm.show();
|
| | | cm.moveTo(x, y);
|
| | |
|
| | | inst.selection.selectNode(elm, false, false);
|
| | |
|
| | | self._sendAjax(self.baseURL + self._ajaxPage, self._ajaxResponse, 'post', args);
|
| | |
|
| | | tinyMCE.cancelEvent(e);
|
| | | return false;
|
| | | }
|
| | | } while ((elm = elm.parentNode));
|
| | | }
|
| | |
|
| | | return true;
|
| | | },
|
| | |
|
| | | initInstance : function(inst) {
|
| | | var self = TinyMCE_SpellCheckerPlugin, m = self._menu, cm = self._contextMenu, e;
|
| | |
|
| | | tinyMCE.importCSS(inst.getDoc(), tinyMCE.baseURL + "/plugins/spellchecker/css/content.css");
|
| | |
|
| | | if (!tinyMCE.hasMenu('spellcheckercontextmenu')) {
|
| | | tinyMCE.importCSS(document, tinyMCE.baseURL + "/plugins/spellchecker/css/spellchecker.css");
|
| | |
|
| | | cm.init({drop_menu : false});
|
| | | tinyMCE.addMenu('spellcheckercontextmenu', cm);
|
| | | }
|
| | |
|
| | | if (!tinyMCE.hasMenu('spellcheckermenu')) {
|
| | | m.init({});
|
| | | tinyMCE.addMenu('spellcheckermenu', m);
|
| | | }
|
| | |
|
| | | inst.spellCheckerLang = 'en';
|
| | | self._buildSettingsMenu(inst, null);
|
| | |
|
| | | e = self._getBlockBoxLayer(inst).create('div', 'mceBlockBox', document.getElementById(inst.editorId + '_parent'));
|
| | | self._getMsgBoxLayer(inst).create('div', 'mceMsgBox', document.getElementById(inst.editorId + '_parent'));
|
| | | },
|
| | |
|
| | | _getMsgBoxLayer : function(inst) {
|
| | | if (!inst.spellCheckerMsgBoxL)
|
| | | inst.spellCheckerMsgBoxL = new TinyMCE_Layer(inst.editorId + '_spellcheckerMsgBox', false);
|
| | |
|
| | | return inst.spellCheckerMsgBoxL;
|
| | | },
|
| | |
|
| | | _getBlockBoxLayer : function(inst) {
|
| | | if (!inst.spellCheckerBoxL)
|
| | | inst.spellCheckerBoxL = new TinyMCE_Layer(inst.editorId + '_spellcheckerBlockBox', false);
|
| | |
|
| | | return inst.spellCheckerBoxL;
|
| | | },
|
| | |
|
| | | _buildSettingsMenu : function(inst, lang) {
|
| | | var i, ar = tinyMCE.getParam('spellchecker_languages', '+English=en').split(','), p;
|
| | | var self = TinyMCE_SpellCheckerPlugin, m = self._menu, c;
|
| | |
|
| | | m.clear();
|
| | | m.addTitle(tinyMCE.getLang('lang_spellchecker_langs', '', true));
|
| | |
|
| | | for (i=0; i<ar.length; i++) {
|
| | | if (ar[i] != '') {
|
| | | p = ar[i].split('=');
|
| | | c = 'mceMenuCheckItem';
|
| | |
|
| | | if (p[0].charAt(0) == '+') {
|
| | | p[0] = p[0].substring(1);
|
| | |
|
| | | if (lang == null) {
|
| | | c = 'mceMenuSelectedItem';
|
| | | inst.spellCheckerLang = p[1];
|
| | | }
|
| | | }
|
| | |
|
| | | if (lang == p[1])
|
| | | c = 'mceMenuSelectedItem';
|
| | |
|
| | | m.add({text : p[0], js : "tinyMCE.execInstanceCommand('" + inst.editorId + "','mceSpellCheckerSetLang',false,'" + p[1] + "');", class_name : c});
|
| | | }
|
| | | }
|
| | | },
|
| | |
|
| | | setupContent : function(editor_id, body, doc) {
|
| | | TinyMCE_SpellCheckerPlugin._removeWords(doc);
|
| | | },
|
| | |
|
| | | getControlHTML : function(cn) {
|
| | | switch (cn) {
|
| | | case "spellchecker":
|
| | | return TinyMCE_SpellCheckerPlugin._getMenuButtonHTML(cn, 'lang_spellchecker_desc', '{$pluginurl}/images/spellchecker.gif', 'lang_spellchecker_desc', 'mceSpellCheckerMenu', 'mceSpellCheck');
|
| | | }
|
| | |
|
| | | return "";
|
| | | },
|
| | |
|
| | | /**
|
| | | * Returns the HTML code for a normal button control.
|
| | | *
|
| | | * @param {string} id Button control id, this will be the suffix for the element id, the prefix is the editor id.
|
| | | * @param {string} lang Language variable key name to insert as the title/alt of the button image.
|
| | | * @param {string} img Image URL to insert, {$themeurl} and {$pluginurl} will be replaced.
|
| | | * @param {string} mlang Language variable key name to insert as the title/alt of the menu button image.
|
| | | * @param {string} mid Menu by id to display when the menu button is pressed.
|
| | | * @param {string} cmd Command to execute when the user clicks the button.
|
| | | * @param {string} ui Optional user interface boolean for command.
|
| | | * @param {string} val Optional value for command.
|
| | | * @return HTML code for a normal button based in input information.
|
| | | * @type string
|
| | | */
|
| | | _getMenuButtonHTML : function(id, lang, img, mlang, mid, cmd, ui, val) {
|
| | | var h = '', m, x;
|
| | |
|
| | | cmd = 'tinyMCE.hideMenus();tinyMCE.execInstanceCommand(\'{$editor_id}\',\'' + cmd + '\'';
|
| | |
|
| | | if (typeof(ui) != "undefined" && ui != null)
|
| | | cmd += ',' + ui;
|
| | |
|
| | | if (typeof(val) != "undefined" && val != null)
|
| | | cmd += ",'" + val + "'";
|
| | |
|
| | | cmd += ');';
|
| | |
|
| | | // Use tilemaps when enabled and found and never in MSIE since it loads the tile each time from cache if cahce is disabled
|
| | | if (tinyMCE.getParam('button_tile_map') && (!tinyMCE.isMSIE || tinyMCE.isOpera) && (m = tinyMCE.buttonMap[id]) != null && (tinyMCE.getParam("language") == "en" || img.indexOf('$lang') == -1)) {
|
| | | // Tiled button
|
| | | x = 0 - (m * 20) == 0 ? '0' : 0 - (m * 20);
|
| | | h += '<a id="{$editor_id}_' + id + '" href="javascript:' + cmd + '" onclick="' + cmd + 'return false;" onmousedown="return false;" class="mceTiledButton mceButtonNormal" target="_self">';
|
| | | h += '<img src="{$themeurl}/images/spacer.gif" style="background-position: ' + x + 'px 0" title="{$' + lang + '}" />';
|
| | | h += '<img src="{$themeurl}/images/button_menu.gif" title="{$' + lang + '}" class="mceMenuButton" onclick="' + mcmd + 'return false;" />';
|
| | | h += '</a>';
|
| | | } else {
|
| | | if (tinyMCE.isMSIE && !tinyMCE.isOpera)
|
| | | h += '<span id="{$editor_id}_' + id + '" class="mceMenuButton" onmouseover="tinyMCE.plugins.spellchecker._menuButtonEvent(\'over\',this);" onmouseout="tinyMCE.plugins.spellchecker._menuButtonEvent(\'out\',this);">';
|
| | | else
|
| | | h += '<span id="{$editor_id}_' + id + '" class="mceMenuButton">';
|
| | |
|
| | | h += '<a href="javascript:' + cmd + '" onclick="' + cmd + 'return false;" onmousedown="return false;" class="mceMenuButtonNormal" target="_self">';
|
| | | h += '<img src="' + img + '" title="{$' + lang + '}" /></a>';
|
| | | h += '<a href="#" onclick="tinyMCE.plugins.spellchecker._toggleMenu(\'{$editor_id}\',\'' + mid + '\');return false;" onmousedown="return false;"><img src="{$themeurl}/images/button_menu.gif" title="{$' + lang + '}" class="mceMenuButton" />';
|
| | | h += '</a></span>';
|
| | | }
|
| | |
|
| | | return h;
|
| | | },
|
| | |
|
| | | _menuButtonEvent : function(e, o) {
|
| | | if (o.className == 'mceMenuButtonFocus')
|
| | | return;
|
| | |
|
| | | if (e == 'over')
|
| | | o.className = o.className + ' mceMenuHover';
|
| | | else
|
| | | o.className = o.className.replace(/\s.*$/, '');
|
| | | },
|
| | |
|
| | | _toggleMenu : function(editor_id, id) {
|
| | | var self = TinyMCE_SpellCheckerPlugin;
|
| | | var e = document.getElementById(editor_id + '_spellchecker');
|
| | | var inst = tinyMCE.getInstanceById(editor_id);
|
| | |
|
| | | if (self._menu.isVisible()) {
|
| | | tinyMCE.hideMenus();
|
| | | return;
|
| | | }
|
| | |
|
| | | tinyMCE.lastMenuBtnClass = e.className.replace(/\s.*$/, '');
|
| | | tinyMCE.switchClass(editor_id + '_spellchecker', 'mceMenuButtonFocus');
|
| | |
|
| | | self._menu.moveRelativeTo(e, 'bl');
|
| | | self._menu.moveBy(tinyMCE.isMSIE && !tinyMCE.isOpera ? 0 : 1, -1);
|
| | |
|
| | | if (tinyMCE.isOpera)
|
| | | self._menu.moveBy(0, -2);
|
| | |
|
| | | self._onMenuEvent(inst, self._menu, 'show');
|
| | |
|
| | | self._menu.show();
|
| | |
|
| | | tinyMCE.lastSelectedMenuBtn = editor_id + '_spellchecker';
|
| | | },
|
| | |
|
| | | _onMenuEvent : function(inst, m, n) {
|
| | | TinyMCE_SpellCheckerPlugin._buildSettingsMenu(inst, inst.spellCheckerLang);
|
| | | },
|
| | |
|
| | | execCommand : function(editor_id, element, command, user_interface, value) {
|
| | | var inst = tinyMCE.getInstanceById(editor_id), self = TinyMCE_SpellCheckerPlugin, args = '', co, bb, mb, nl, i, e;
|
| | |
|
| | | // Handle commands
|
| | | switch (command) {
|
| | | case "mceSpellCheck":
|
| | | if (!inst.spellcheckerOn) {
|
| | | inst.spellCheckerBookmark = inst.selection.getBookmark();
|
| | |
|
| | | // Setup arguments
|
| | | args += 'id=' + inst.editorId + "|" + (++self._counter);
|
| | | args += '&cmd=spell&check=' + encodeURIComponent(self._getWordList(inst.getBody())).replace( /\'/g, '%27' );
|
| | | args += '&lang=' + escape(inst.spellCheckerLang);
|
| | |
|
| | | co = document.getElementById(inst.editorId + '_parent').firstChild;
|
| | | bb = self._getBlockBoxLayer(inst);
|
| | | bb.moveRelativeTo(co, 'tl');
|
| | | bb.resizeTo(co.offsetWidth, co.offsetHeight);
|
| | | bb.show();
|
| | |
|
| | | // Setup message box
|
| | | mb = self._getMsgBoxLayer(inst);
|
| | | e = mb.getElement();
|
| | | e.innerHTML = '<span>' + tinyMCE.getLang('lang_spellchecker_swait', '', true) + '</span>';
|
| | | mb.show();
|
| | | mb.moveRelativeTo(co, 'cc');
|
| | |
|
| | | if (tinyMCE.isMSIE && !tinyMCE.isOpera) {
|
| | | nl = co.getElementsByTagName('select');
|
| | | for (i=0; i<nl.length; i++)
|
| | | nl[i].disabled = true;
|
| | | }
|
| | |
|
| | | inst.spellcheckerOn = true;
|
| | | tinyMCE.switchClass(editor_id + '_spellchecker', 'mceMenuButtonSelected');
|
| | |
|
| | | self._sendAjax(self.baseURL + self._ajaxPage, self._ajaxResponse, 'post', args);
|
| | | } else {
|
| | | self._removeWords(inst.getDoc());
|
| | | inst.spellcheckerOn = false;
|
| | | tinyMCE.switchClass(editor_id + '_spellchecker', 'mceMenuButton');
|
| | | }
|
| | |
|
| | | return true;
|
| | |
|
| | | case "mceSpellCheckReplace":
|
| | | if (inst.spellCheckerElm)
|
| | | tinyMCE.setOuterHTML(inst.spellCheckerElm, value);
|
| | |
|
| | | self._checkDone(inst);
|
| | | self._contextMenu.hide();
|
| | | self._menu.hide();
|
| | |
|
| | | return true;
|
| | |
|
| | | case "mceSpellCheckIgnore":
|
| | | if (inst.spellCheckerElm)
|
| | | self._removeWord(inst.spellCheckerElm);
|
| | |
|
| | | self._checkDone(inst);
|
| | | self._contextMenu.hide();
|
| | | self._menu.hide();
|
| | | return true;
|
| | |
|
| | | case "mceSpellCheckIgnoreAll":
|
| | | if (inst.spellCheckerElm)
|
| | | self._removeWords(inst.getDoc(), inst.spellCheckerElm.innerHTML);
|
| | |
|
| | | self._checkDone(inst);
|
| | | self._contextMenu.hide();
|
| | | self._menu.hide();
|
| | | return true;
|
| | |
|
| | | case "mceSpellCheckerSetLang":
|
| | | tinyMCE.hideMenus();
|
| | | inst.spellCheckerLang = value;
|
| | | self._removeWords(inst.getDoc());
|
| | | inst.spellcheckerOn = false;
|
| | | tinyMCE.switchClass(editor_id + '_spellchecker', 'mceMenuButton');
|
| | | return true;
|
| | | }
|
| | |
|
| | | // Pass to next handler in chain
|
| | | return false;
|
| | | },
|
| | |
|
| | | cleanup : function(type, content, inst) {
|
| | | switch (type) {
|
| | | case "get_from_editor_dom":
|
| | | TinyMCE_SpellCheckerPlugin._removeWords(content);
|
| | | inst.spellcheckerOn = false;
|
| | | break;
|
| | | }
|
| | |
|
| | | return content;
|
| | | },
|
| | |
|
| | | // Private plugin specific methods
|
| | |
|
| | | _displayUI : function(inst) {
|
| | | var self = TinyMCE_SpellCheckerPlugin;
|
| | | var bb = self._getBlockBoxLayer(inst);
|
| | | var mb = self._getMsgBoxLayer(inst);
|
| | | var nl, i;
|
| | | var co = document.getElementById(inst.editorId + '_parent').firstChild;
|
| | |
|
| | | if (tinyMCE.isMSIE && !tinyMCE.isOpera) {
|
| | | nl = co.getElementsByTagName('select');
|
| | | for (i=0; i<nl.length; i++)
|
| | | nl[i].disabled = false;
|
| | | }
|
| | |
|
| | | bb.hide();
|
| | | mb.hide();
|
| | | },
|
| | |
|
| | | _ajaxResponse : function(xml) {
|
| | | var el = xml ? xml.documentElement : null;
|
| | | var inst = tinyMCE.selectedInstance, self = TinyMCE_SpellCheckerPlugin;
|
| | | var cmd = el ? el.getAttribute("cmd") : null, err, id = el ? el.getAttribute("id") : null;
|
| | |
|
| | | if (id)
|
| | | inst = tinyMCE.getInstanceById(id.substring(0, id.indexOf('|')));
|
| | |
|
| | | self._displayUI(inst);
|
| | |
|
| | | // Ignore suggestions for other ajax responses
|
| | | if (cmd == "suggest" && id != inst.editorId + "|" + self._counter)
|
| | | return;
|
| | |
|
| | | if (!el) {
|
| | | inst.spellcheckerOn = false;
|
| | | tinyMCE.switchClass(inst.editorId + '_spellchecker', 'mceMenuButton');
|
| | | alert("Could not execute AJAX call, server didn't return valid a XML.");
|
| | | return;
|
| | | }
|
| | |
|
| | | err = el.getAttribute("error");
|
| | |
|
| | | if (err == "true") {
|
| | | inst.spellcheckerOn = false;
|
| | | tinyMCE.switchClass(inst.editorId + '_spellchecker', 'mceMenuButton');
|
| | | alert(el.getAttribute("msg"));
|
| | | return;
|
| | | }
|
| | |
|
| | | switch (cmd) {
|
| | | case "spell":
|
| | | if (xml.documentElement.firstChild) {
|
| | | self._markWords(inst.getDoc(), inst.getBody(), decodeURIComponent(el.firstChild.nodeValue).split('+'));
|
| | | inst.selection.moveToBookmark(inst.spellCheckerBookmark);
|
| | |
|
| | | if(tinyMCE.getParam('spellchecker_report_mispellings', false))
|
| | | alert(tinyMCE.getLang('lang_spellchecker_mpell_found', '', true, {words : self._countWords(inst)}));
|
| | | // Register commands
|
| | | ed.addCommand('mceSpellCheck', function() {
|
| | | if (!t.active) {
|
| | | ed.setProgressState(1);
|
| | | t._sendRPC('checkWords', [t.selectedLang, t._getWords()], function(r) {
|
| | | if (r.length > 0) {
|
| | | t.active = 1;
|
| | | t._markWords(r);
|
| | | ed.setProgressState(0);
|
| | | ed.nodeChanged();
|
| | | } else {
|
| | | ed.setProgressState(0);
|
| | | ed.windowManager.alert('spellchecker.no_mpell');
|
| | | }
|
| | | });
|
| | | } else
|
| | | alert(tinyMCE.getLang('lang_spellchecker_no_mpell', '', true));
|
| | | t._done();
|
| | | });
|
| | |
|
| | | self._checkDone(inst);
|
| | | ed.onInit.add(function() {
|
| | | if (ed.settings.content_css !== false)
|
| | | ed.dom.loadCSS(url + '/css/content.css');
|
| | | });
|
| | |
|
| | | break;
|
| | | ed.onClick.add(t._showMenu, t);
|
| | | ed.onContextMenu.add(t._showMenu, t);
|
| | | ed.onBeforeGetContent.add(function() {
|
| | | if (t.active)
|
| | | t._removeWords();
|
| | | });
|
| | |
|
| | | case "suggest":
|
| | | self._buildMenu(el.firstChild ? decodeURIComponent(el.firstChild.nodeValue).split('+') : null, 10);
|
| | | self._contextMenu.show();
|
| | | break;
|
| | | }
|
| | | },
|
| | | ed.onNodeChange.add(function(ed, cm) {
|
| | | cm.setActive('spellchecker', t.active);
|
| | | });
|
| | |
|
| | | _getWordSeparators : function() {
|
| | | var i, re = '', ch = tinyMCE.getParam('spellchecker_word_separator_chars', '\\s!"#$%&()*+,-./:;<=>?@[\]^_{|}§©«®±¶·¸»¼½¾¿×÷¤\u201d\u201c');
|
| | | ed.onSetContent.add(function() {
|
| | | t._done();
|
| | | });
|
| | |
|
| | | for (i=0; i<ch.length; i++)
|
| | | re += '\\' + ch.charAt(i);
|
| | | ed.onBeforeGetContent.add(function() {
|
| | | t._done();
|
| | | });
|
| | |
|
| | | return re;
|
| | | },
|
| | | ed.onBeforeExecCommand.add(function(ed, cmd) {
|
| | | if (cmd == 'mceFullScreen')
|
| | | t._done();
|
| | | });
|
| | |
|
| | | _getWordList : function(n) {
|
| | | var i, x, s, nv = '', nl = tinyMCE.getNodeTree(n, new Array(), 3), wl = new Array();
|
| | | var re = TinyMCE_SpellCheckerPlugin._getWordSeparators();
|
| | |
|
| | | for (i=0; i<nl.length; i++) {
|
| | | if (!new RegExp('/SCRIPT|STYLE/').test(nl[i].parentNode.nodeName))
|
| | | nv += nl[i].nodeValue + " ";
|
| | | }
|
| | |
|
| | | nv = nv.replace(new RegExp('([0-9]|[' + re + '])', 'g'), ' ');
|
| | | nv = tinyMCE.trim(nv.replace(/(\s+)/g, ' '));
|
| | |
|
| | | nl = nv.split(/\s+/);
|
| | | for (i=0; i<nl.length; i++) {
|
| | | s = false;
|
| | | for (x=0; x<wl.length; x++) {
|
| | | if (wl[x] == nl[i]) {
|
| | | s = true;
|
| | | break;
|
| | | // Find selected language
|
| | | t.languages = {};
|
| | | each(ed.getParam('spellchecker_languages', '+English=en,Danish=da,Dutch=nl,Finnish=fi,French=fr,German=de,Italian=it,Polish=pl,Portuguese=pt,Spanish=es,Swedish=sv', 'hash'), function(v, k) {
|
| | | if (k.indexOf('+') === 0) {
|
| | | k = k.substring(1);
|
| | | t.selectedLang = v;
|
| | | }
|
| | |
|
| | | t.languages[k] = v;
|
| | | });
|
| | | },
|
| | |
|
| | | createControl : function(n, cm) {
|
| | | var t = this, c, ed = t.editor;
|
| | |
|
| | | if (n == 'spellchecker') {
|
| | | c = cm.createSplitButton(n, {title : 'spellchecker.desc', cmd : 'mceSpellCheck', scope : t});
|
| | |
|
| | | c.onRenderMenu.add(function(c, m) {
|
| | | m.add({title : 'spellchecker.langs', 'class' : 'mceMenuItemTitle'}).setDisabled(1);
|
| | | each(t.languages, function(v, k) {
|
| | | var o = {icon : 1}, mi;
|
| | |
|
| | | o.onclick = function() {
|
| | | mi.setSelected(1);
|
| | | t.selectedItem.setSelected(0);
|
| | | t.selectedItem = mi;
|
| | | t.selectedLang = v;
|
| | | };
|
| | |
|
| | | o.title = k;
|
| | | mi = m.add(o);
|
| | | mi.setSelected(v == t.selectedLang);
|
| | |
|
| | | if (v == t.selectedLang)
|
| | | t.selectedItem = mi;
|
| | | })
|
| | | });
|
| | |
|
| | | return c;
|
| | | }
|
| | | },
|
| | |
|
| | | if (!s && nl[i].length > 0)
|
| | | wl[wl.length] = nl[i];
|
| | | }
|
| | | // Internal functions
|
| | |
|
| | | return wl.join(' ');
|
| | | },
|
| | | _walk : function(n, f) {
|
| | | var d = this.editor.getDoc(), w;
|
| | |
|
| | | _removeWords : function(doc, word) {
|
| | | var i, c, nl = doc.getElementsByTagName("span");
|
| | | var self = TinyMCE_SpellCheckerPlugin;
|
| | | var inst = tinyMCE.selectedInstance, b = inst ? inst.selection.getBookmark() : null;
|
| | | if (d.createTreeWalker) {
|
| | | w = d.createTreeWalker(n, NodeFilter.SHOW_TEXT, null, false);
|
| | |
|
| | | word = typeof(word) == 'undefined' ? null : word;
|
| | | while ((n = w.nextNode()) != null)
|
| | | f.call(this, n);
|
| | | } else
|
| | | tinymce.walk(n, f, 'childNodes');
|
| | | },
|
| | |
|
| | | for (i=nl.length-1; i>=0; i--) {
|
| | | c = tinyMCE.getAttrib(nl[i], 'class');
|
| | | _getSeparators : function() {
|
| | | var re = '', i, str = this.editor.getParam('spellchecker_word_separator_chars', '\\s!"#$%&()*+,-./:;<=>?@[\]^_{|}§©«®±¶·¸»¼½¾¿×÷¤\u201d\u201c');
|
| | |
|
| | | if ((c == 'mceItemHiddenSpellWord' || c == 'mceItemHidden') && (word == null || nl[i].innerHTML == word))
|
| | | self._removeWord(nl[i]);
|
| | | }
|
| | | // Build word separator regexp
|
| | | for (i=0; i<str.length; i++)
|
| | | re += '\\' + str.charAt(i);
|
| | |
|
| | | if (b)
|
| | | inst.selection.moveToBookmark(b);
|
| | | },
|
| | | return re;
|
| | | },
|
| | |
|
| | | _checkDone : function(inst) {
|
| | | var self = TinyMCE_SpellCheckerPlugin;
|
| | | var w = self._countWords(inst);
|
| | | _getWords : function() {
|
| | | var ed = this.editor, wl = [], tx = '', lo = {};
|
| | |
|
| | | if (w == 0) {
|
| | | self._removeWords(inst.getDoc());
|
| | | inst.spellcheckerOn = false;
|
| | | tinyMCE.switchClass(inst.editorId + '_spellchecker', 'mceMenuButton');
|
| | | }
|
| | | },
|
| | | // Get area text
|
| | | this._walk(ed.getBody(), function(n) {
|
| | | if (n.nodeType == 3)
|
| | | tx += n.nodeValue + ' ';
|
| | | });
|
| | |
|
| | | _countWords : function(inst) {
|
| | | var i, w = 0, nl = inst.getDoc().getElementsByTagName("span"), c;
|
| | | var self = TinyMCE_SpellCheckerPlugin;
|
| | | // Split words by separator
|
| | | tx = tx.replace(new RegExp('([0-9]|[' + this._getSeparators() + '])', 'g'), ' ');
|
| | | tx = tinymce.trim(tx.replace(/(\s+)/g, ' '));
|
| | |
|
| | | for (i=nl.length-1; i>=0; i--) {
|
| | | c = tinyMCE.getAttrib(nl[i], 'class');
|
| | | // Build word array and remove duplicates
|
| | | each(tx.split(' '), function(v) {
|
| | | if (!lo[v]) {
|
| | | wl.push(v);
|
| | | lo[v] = 1;
|
| | | }
|
| | | });
|
| | |
|
| | | if (c == 'mceItemHiddenSpellWord')
|
| | | w++;
|
| | | }
|
| | | return wl;
|
| | | },
|
| | |
|
| | | return w;
|
| | | },
|
| | | _removeWords : function(w) {
|
| | | var ed = this.editor, dom = ed.dom, se = ed.selection, b = se.getBookmark();
|
| | |
|
| | | _removeWord : function(e) {
|
| | | if (e != null)
|
| | | tinyMCE.setOuterHTML(e, e.innerHTML);
|
| | | },
|
| | | each(dom.select('span').reverse(), function(n) {
|
| | | if (n && (dom.hasClass(n, 'mceItemHiddenSpellWord') || dom.hasClass(n, 'mceItemHidden'))) {
|
| | | if (!w || dom.decode(n.innerHTML) == w)
|
| | | dom.remove(n, 1);
|
| | | }
|
| | | });
|
| | |
|
| | | _markWords : function(doc, n, wl) {
|
| | | var i, nv, nn, nl = tinyMCE.getNodeTree(n, new Array(), 3);
|
| | | var r1, r2, r3, r4, r5, w = '';
|
| | | var re = TinyMCE_SpellCheckerPlugin._getWordSeparators();
|
| | | se.moveToBookmark(b);
|
| | | },
|
| | |
|
| | | for (i=0; i<wl.length; i++) {
|
| | | if (wl[i].length > 0)
|
| | | w += wl[i] + ((i == wl.length-1) ? '' : '|');
|
| | | }
|
| | | _markWords : function(wl) {
|
| | | var r1, r2, r3, r4, r5, w = '', ed = this.editor, re = this._getSeparators(), dom = ed.dom, nl = [];
|
| | | var se = ed.selection, b = se.getBookmark();
|
| | |
|
| | | for (i=0; i<nl.length; i++) {
|
| | | nv = nl[i].nodeValue;
|
| | | each(wl, function(v) {
|
| | | w += (w ? '|' : '') + v;
|
| | | });
|
| | |
|
| | | r1 = new RegExp('([' + re + '])(' + w + ')([' + re + '])', 'g');
|
| | | r2 = new RegExp('^(' + w + ')', 'g');
|
| | | r3 = new RegExp('(' + w + ')([' + re + ']?)$', 'g');
|
| | | r4 = new RegExp('^(' + w + ')([' + re + ']?)$', 'g');
|
| | | r5 = new RegExp('(' + w + ')([' + re + '])', 'g');
|
| | |
|
| | | if (r1.test(nv) || r2.test(nv) || r3.test(nv) || r4.test(nv)) {
|
| | | nv = tinyMCE.xmlEncode(nv);
|
| | | nv = nv.replace(r5, '<span class="mceItemHiddenSpellWord">$1</span>$2');
|
| | | nv = nv.replace(r3, '<span class="mceItemHiddenSpellWord">$1</span>$2');
|
| | | // Collect all text nodes
|
| | | this._walk(this.editor.getBody(), function(n) {
|
| | | if (n.nodeType == 3) {
|
| | | nl.push(n);
|
| | | }
|
| | | });
|
| | |
|
| | | nn = doc.createElement('span');
|
| | | nn.className = "mceItemHidden";
|
| | | nn.innerHTML = nv;
|
| | | // Wrap incorrect words in spans
|
| | | each(nl, function(n) {
|
| | | var v;
|
| | |
|
| | | // Remove old text node
|
| | | nl[i].parentNode.replaceChild(nn, nl[i]);
|
| | | if (n.nodeType == 3) {
|
| | | v = n.nodeValue;
|
| | |
|
| | | if (r1.test(v) || r2.test(v) || r3.test(v) || r4.test(v)) {
|
| | | v = dom.encode(v);
|
| | | v = v.replace(r5, '<span class="mceItemHiddenSpellWord">$1</span>$2');
|
| | | v = v.replace(r3, '<span class="mceItemHiddenSpellWord">$1</span>$2');
|
| | |
|
| | | dom.replace(dom.create('span', {'class' : 'mceItemHidden'}, v), n);
|
| | | }
|
| | | }
|
| | | });
|
| | |
|
| | | se.moveToBookmark(b);
|
| | | },
|
| | |
|
| | | _showMenu : function(ed, e) {
|
| | | var t = this, ed = t.editor, m = t._menu, p1, dom = ed.dom, vp = dom.getViewPort(ed.getWin());
|
| | |
|
| | | if (!m) {
|
| | | p1 = DOM.getPos(ed.getContentAreaContainer());
|
| | | //p2 = DOM.getPos(ed.getContainer());
|
| | |
|
| | | m = ed.controlManager.createDropMenu('spellcheckermenu', {
|
| | | offset_x : p1.x,
|
| | | offset_y : p1.y,
|
| | | 'class' : 'mceNoIcons'
|
| | | });
|
| | |
|
| | | t._menu = m;
|
| | | }
|
| | | }
|
| | | },
|
| | |
|
| | | _buildMenu : function(sg, max) {
|
| | | var i, self = TinyMCE_SpellCheckerPlugin, cm = self._contextMenu;
|
| | | if (dom.hasClass(e.target, 'mceItemHiddenSpellWord')) {
|
| | | m.removeAll();
|
| | | m.add({title : 'spellchecker.wait', 'class' : 'mceMenuItemTitle'}).setDisabled(1);
|
| | |
|
| | | cm.clear();
|
| | | t._sendRPC('getSuggestions', [t.selectedLang, dom.decode(e.target.innerHTML)], function(r) {
|
| | | m.removeAll();
|
| | |
|
| | | if (sg != null) {
|
| | | cm.addTitle(tinyMCE.getLang('lang_spellchecker_sug', '', true));
|
| | | if (r.length > 0) {
|
| | | m.add({title : 'spellchecker.sug', 'class' : 'mceMenuItemTitle'}).setDisabled(1);
|
| | | each(r, function(v) {
|
| | | m.add({title : v, onclick : function() {
|
| | | dom.replace(ed.getDoc().createTextNode(v), e.target);
|
| | | t._checkDone();
|
| | | }});
|
| | | });
|
| | |
|
| | | for (i=0; i<sg.length && i<max; i++)
|
| | | cm.addItem(sg[i], 'tinyMCE.execCommand("mceSpellCheckReplace",false,"' + sg[i] + '");');
|
| | | m.addSeparator();
|
| | | } else
|
| | | m.add({title : 'spellchecker.no_sug', 'class' : 'mceMenuItemTitle'}).setDisabled(1);
|
| | |
|
| | | cm.addSeparator();
|
| | | } else
|
| | | cm.addTitle(tinyMCE.getLang('lang_spellchecker_no_sug', '', true));
|
| | | m.add({
|
| | | title : 'spellchecker.ignore_word',
|
| | | onclick : function() {
|
| | | dom.remove(e.target, 1);
|
| | | t._checkDone();
|
| | | }
|
| | | });
|
| | |
|
| | | cm.addItem(tinyMCE.getLang('lang_spellchecker_ignore_word', '', true), 'tinyMCE.execCommand(\'mceSpellCheckIgnore\');');
|
| | | cm.addItem(tinyMCE.getLang('lang_spellchecker_ignore_words', '', true), 'tinyMCE.execCommand(\'mceSpellCheckIgnoreAll\');');
|
| | | m.add({
|
| | | title : 'spellchecker.ignore_words',
|
| | | onclick : function() {
|
| | | t._removeWords(dom.decode(e.target.innerHTML));
|
| | | t._checkDone();
|
| | | }
|
| | | });
|
| | |
|
| | | cm.update();
|
| | | },
|
| | | m.update();
|
| | | });
|
| | |
|
| | | _getAjaxHTTP : function() {
|
| | | try {
|
| | | return new ActiveXObject('Msxml2.XMLHTTP')
|
| | | } catch (e) {
|
| | | try {
|
| | | return new ActiveXObject('Microsoft.XMLHTTP')
|
| | | } catch (e) {
|
| | | return new XMLHttpRequest();
|
| | | ed.selection.select(e.target);
|
| | | p1 = dom.getPos(e.target);
|
| | | m.showMenu(p1.x, p1.y + e.target.offsetHeight - vp.y);
|
| | |
|
| | | return tinymce.dom.Event.cancel(e);
|
| | | } else
|
| | | m.hideMenu();
|
| | | },
|
| | |
|
| | | _checkDone : function() {
|
| | | var t = this, ed = t.editor, dom = ed.dom, o;
|
| | |
|
| | | each(dom.select('span'), function(n) {
|
| | | if (n && dom.hasClass(n, 'mceItemHiddenSpellWord')) {
|
| | | o = true;
|
| | | return false;
|
| | | }
|
| | | });
|
| | |
|
| | | if (!o)
|
| | | t._done();
|
| | | },
|
| | |
|
| | | _done : function() {
|
| | | var t = this, la = t.active;
|
| | |
|
| | | if (t.active) {
|
| | | t.active = 0;
|
| | | t._removeWords();
|
| | |
|
| | | if (t._menu)
|
| | | t._menu.hideMenu();
|
| | |
|
| | | if (la)
|
| | | t.editor.nodeChanged();
|
| | | }
|
| | | },
|
| | |
|
| | | _sendRPC : function(m, p, cb) {
|
| | | var t = this, url = t.editor.getParam("spellchecker_rpc_url", "{backend}");
|
| | |
|
| | | if (url == '{backend}') {
|
| | | t.editor.setProgressState(0);
|
| | | alert('Please specify: spellchecker_rpc_url');
|
| | | return;
|
| | | }
|
| | |
|
| | | JSONRequest.sendRPC({
|
| | | url : url,
|
| | | method : m,
|
| | | params : p,
|
| | | success : cb,
|
| | | error : function(e, x) {
|
| | | t.editor.setProgressState(0);
|
| | | t.editor.windowManager.alert(e.errstr || ('Error response: ' + x.responseText));
|
| | | }
|
| | | });
|
| | | }
|
| | | },
|
| | | });
|
| | |
|
| | | /**
|
| | | * Perform AJAX call.
|
| | | *
|
| | | * @param {string} u URL of AJAX service.
|
| | | * @param {function} f Function to call when response arrives.
|
| | | * @param {string} m Request method post or get.
|
| | | * @param {Array} a Array with arguments to send.
|
| | | */
|
| | | _sendAjax : function(u, f, m, a) {
|
| | | var x = TinyMCE_SpellCheckerPlugin._getAjaxHTTP();
|
| | |
|
| | | x.open(m, u, true);
|
| | |
|
| | | x.onreadystatechange = function() {
|
| | | if (x.readyState == 4)
|
| | | f(x.responseXML);
|
| | | };
|
| | |
|
| | | if (m == 'post')
|
| | | x.setRequestHeader('Content-type', 'application/x-www-form-urlencoded');
|
| | |
|
| | | x.send(a);
|
| | | }
|
| | | };
|
| | |
|
| | | // Register plugin
|
| | | tinyMCE.addPlugin('spellchecker', TinyMCE_SpellCheckerPlugin);
|
| | | // Register plugin
|
| | | tinymce.PluginManager.add('spellchecker', tinymce.plugins.SpellcheckerPlugin);
|
| | | })(); |
| | |
| | | <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
|
| | | <html xmlns="http://www.w3.org/1999/xhtml">
|
| | | <head>
|
| | | <title>{$lang_table_cell_title}</title>
|
| | | <script language="javascript" type="text/javascript" src="../../tiny_mce_popup.js"></script>
|
| | | <script language="javascript" type="text/javascript" src="../../utils/mctabs.js"></script>
|
| | | <script language="javascript" type="text/javascript" src="../../utils/form_utils.js"></script>
|
| | | <script language="javascript" type="text/javascript" src="jscripts/cell.js"></script>
|
| | | <title>{#table_dlg.cell_title}</title>
|
| | | <script type="text/javascript" src="../../tiny_mce_popup.js"></script>
|
| | | <script type="text/javascript" src="../../utils/mctabs.js"></script>
|
| | | <script type="text/javascript" src="../../utils/form_utils.js"></script>
|
| | | <script type="text/javascript" src="../../utils/editable_selects.js"></script>
|
| | | <script type="text/javascript" src="js/cell.js"></script>
|
| | | <link href="css/cell.css" rel="stylesheet" type="text/css" />
|
| | | <base target="_self" />
|
| | | </head>
|
| | | <body id="tablecell" onload="tinyMCEPopup.executeOnLoad('init();');" style="display: none">
|
| | | <body id="tablecell" style="display: none">
|
| | | <form onsubmit="updateAction();return false;" action="#">
|
| | | <div class="tabs">
|
| | | <ul>
|
| | | <li id="general_tab" class="current"><span><a href="javascript:mcTabs.displayTab('general_tab','general_panel');" onmousedown="return false;">{$lang_table_general_tab}</a></span></li>
|
| | | <li id="advanced_tab"><span><a href="javascript:mcTabs.displayTab('advanced_tab','advanced_panel');" onmousedown="return false;">{$lang_table_advanced_tab}</a></span></li>
|
| | | <li id="general_tab" class="current"><span><a href="javascript:mcTabs.displayTab('general_tab','general_panel');" onmousedown="return false;">{#table_dlg.general_tab}</a></span></li>
|
| | | <li id="advanced_tab"><span><a href="javascript:mcTabs.displayTab('advanced_tab','advanced_panel');" onmousedown="return false;">{#table_dlg.advanced_tab}</a></span></li>
|
| | | </ul>
|
| | | </div>
|
| | |
|
| | | <div class="panel_wrapper">
|
| | | <div id="general_panel" class="panel current">
|
| | | <fieldset>
|
| | | <legend>{$lang_table_general_props}</legend>
|
| | | <legend>{#table_dlg.general_props}</legend>
|
| | |
|
| | | <table border="0" cellpadding="4" cellspacing="0">
|
| | | <tr>
|
| | | <td><label for="align">{$lang_table_align}</label></td>
|
| | | <td><label for="align">{#table_dlg.align}</label></td>
|
| | | <td>
|
| | | <select id="align" name="align">
|
| | | <option value="">{$lang_not_set}</option>
|
| | | <option value="center">{$lang_table_align_middle}</option>
|
| | | <option value="left">{$lang_table_align_left}</option>
|
| | | <option value="right">{$lang_table_align_right}</option>
|
| | | <select id="align" name="align" class="mceFocus">
|
| | | <option value="">{#not_set}</option>
|
| | | <option value="center">{#table_dlg.align_middle}</option>
|
| | | <option value="left">{#table_dlg.align_left}</option>
|
| | | <option value="right">{#table_dlg.align_right}</option>
|
| | | </select>
|
| | | </td>
|
| | |
|
| | | <td><label for="celltype">{$lang_table_cell_type}</label></td>
|
| | | <td><label for="celltype">{#table_dlg.cell_type}</label></td>
|
| | | <td>
|
| | | <select id="celltype" name="celltype">
|
| | | <option value="td">{$lang_table_td}</option>
|
| | | <option value="th">{$lang_table_th}</option>
|
| | | <option value="td">{#table_dlg.td}</option>
|
| | | <option value="th">{#table_dlg.th}</option>
|
| | | </select>
|
| | | </td>
|
| | | </tr>
|
| | |
|
| | | <tr>
|
| | | <td><label for="valign">{$lang_table_valign}</label></td>
|
| | | <td><label for="valign">{#table_dlg.valign}</label></td>
|
| | | <td>
|
| | | <select id="valign" name="valign">
|
| | | <option value="">{$lang_not_set}</option>
|
| | | <option value="top">{$lang_table_align_top}</option>
|
| | | <option value="middle">{$lang_table_align_middle}</option>
|
| | | <option value="bottom">{$lang_table_align_bottom}</option>
|
| | | <option value="">{#not_set}</option>
|
| | | <option value="top">{#table_dlg.align_top}</option>
|
| | | <option value="middle">{#table_dlg.align_middle}</option>
|
| | | <option value="bottom">{#table_dlg.align_bottom}</option>
|
| | | </select>
|
| | | </td>
|
| | |
|
| | | <td><label for="scope">{$lang_table_scope}</label></td>
|
| | | <td><label for="scope">{#table_dlg.scope}</label></td>
|
| | | <td>
|
| | | <select id="scope" name="scope">
|
| | | <option value="">{$lang_not_set}</option>
|
| | | <option value="col">{$lang_table_col}</option>
|
| | | <option value="row">{$lang_table_row}</option>
|
| | | <option value="rowgroup">{$lang_table_rowgroup}</option>
|
| | | <option value="colgroup">{$lang_table_colgroup}</option>
|
| | | <option value="">{#not_set}</option>
|
| | | <option value="col">{#table.col}</option>
|
| | | <option value="row">{#table.row}</option>
|
| | | <option value="rowgroup">{#table_dlg.rowgroup}</option>
|
| | | <option value="colgroup">{#table_dlg.colgroup}</option>
|
| | | </select>
|
| | | </td>
|
| | |
|
| | | </tr>
|
| | |
|
| | | <tr>
|
| | | <td><label for="width">{$lang_table_width}</label></td>
|
| | | <td><label for="width">{#table_dlg.width}</label></td>
|
| | | <td><input id="width" name="width" type="text" value="" size="4" maxlength="4" onchange="changedSize();" /></td>
|
| | |
|
| | | <td><label for="height">{$lang_table_height}</label></td>
|
| | | <td><label for="height">{#table_dlg.height}</label></td>
|
| | | <td><input id="height" name="height" type="text" value="" size="4" maxlength="4" onchange="changedSize();" /></td>
|
| | | </tr>
|
| | |
|
| | | <tr id="styleSelectRow">
|
| | | <td><label for="class">{$lang_class_name}</label></td>
|
| | | <td><label for="class">{#class_name}</label></td>
|
| | | <td colspan="3">
|
| | | <select id="class" name="class">
|
| | | <option value="" selected="selected">{$lang_not_set}</option>
|
| | | <select id="class" name="class" class="mceEditableSelect">
|
| | | <option value="" selected="selected">{#not_set}</option>
|
| | | </select>
|
| | | </td>
|
| | | </tr>
|
| | |
| | |
|
| | | <div id="advanced_panel" class="panel">
|
| | | <fieldset>
|
| | | <legend>{$lang_table_advanced_props}</legend>
|
| | | <legend>{#table_dlg.advanced_props}</legend>
|
| | |
|
| | | <table border="0" cellpadding="0" cellspacing="4">
|
| | | <tr>
|
| | | <td class="column1"><label for="id">{$lang_table_id}</label></td> |
| | | <td class="column1"><label for="id">{#table_dlg.id}</label></td> |
| | | <td><input id="id" name="id" type="text" value="" style="width: 200px" /></td>
|
| | | </tr>
|
| | |
|
| | | <tr>
|
| | | <td><label for="style">{$lang_table_style}</label></td>
|
| | | <td><label for="style">{#table_dlg.style}</label></td>
|
| | | <td><input type="text" id="style" name="style" value="" style="width: 200px;" onchange="changedStyle();" /></td>
|
| | | </tr>
|
| | |
|
| | | <tr>
|
| | | <td class="column1"><label for="dir">{$lang_table_langdir}</label></td> |
| | | <td class="column1"><label for="dir">{#table_dlg.langdir}</label></td> |
| | | <td>
|
| | | <select id="dir" name="dir" style="width: 200px">
|
| | | <option value="">{$lang_not_set}</option> |
| | | <option value="ltr">{$lang_table_ltr}</option> |
| | | <option value="rtl">{$lang_table_rtl}</option> |
| | | <option value="">{#not_set}</option> |
| | | <option value="ltr">{#table_dlg.ltr}</option> |
| | | <option value="rtl">{#table_dlg.rtl}</option> |
| | | </select>
|
| | | </td>
|
| | | </tr>
|
| | |
|
| | | <tr>
|
| | | <td class="column1"><label for="lang">{$lang_table_langcode}</label></td> |
| | | <td class="column1"><label for="lang">{#table_dlg.langcode}</label></td> |
| | | <td>
|
| | | <input id="lang" name="lang" type="text" value="" style="width: 200px" />
|
| | | </td>
|
| | | </tr>
|
| | |
|
| | | <tr>
|
| | | <td class="column1"><label for="backgroundimage">{$lang_table_bgimage}</label></td> |
| | | <td class="column1"><label for="backgroundimage">{#table_dlg.bgimage}</label></td> |
| | | <td>
|
| | | <table border="0" cellpadding="0" cellspacing="0">
|
| | | <tr>
|
| | |
| | | </tr>
|
| | |
|
| | | <tr>
|
| | | <td class="column1"><label for="bordercolor">{$lang_table_bordercolor}</label></td> |
| | | <td class="column1"><label for="bordercolor">{#table_dlg.bordercolor}</label></td> |
| | | <td>
|
| | | <table border="0" cellpadding="0" cellspacing="0">
|
| | | <tr>
|
| | |
| | | </tr>
|
| | |
|
| | | <tr>
|
| | | <td class="column1"><label for="bgcolor">{$lang_table_bgcolor}</label></td> |
| | | <td class="column1"><label for="bgcolor">{#table_dlg.bgcolor}</label></td> |
| | | <td>
|
| | | <table border="0" cellpadding="0" cellspacing="0">
|
| | | <tr>
|
| | |
| | | <div class="mceActionPanel">
|
| | | <div>
|
| | | <select id="action" name="action">
|
| | | <option value="cell">{$lang_table_cell_cell}</option>
|
| | | <option value="row">{$lang_table_cell_row}</option>
|
| | | <option value="all">{$lang_table_cell_all}</option>
|
| | | <option value="cell">{#table_dlg.cell_cell}</option>
|
| | | <option value="row">{#table_dlg.cell_row}</option>
|
| | | <option value="all">{#table_dlg.cell_all}</option>
|
| | | </select>
|
| | | </div>
|
| | |
|
| | | <div style="float: left">
|
| | | <div><input type="button" id="insert" name="insert" value="{$lang_update}" onclick="updateAction();" /></div>
|
| | | <div><input type="submit" id="insert" name="insert" value="{#update}" /></div>
|
| | | </div>
|
| | |
|
| | | <div style="float: right">
|
| | | <input type="button" id="cancel" name="cancel" value="{$lang_cancel}" onclick="tinyMCEPopup.close();" />
|
| | | <input type="button" id="cancel" name="cancel" value="{#cancel}" onclick="tinyMCEPopup.close();" />
|
| | | </div>
|
| | | </div>
|
| | | </form>
|
| | |
| | | /* CSS file for cell dialog in the table plugin */ |
| | | |
| | | .panel_wrapper div.current { |
| | | height: 200px; |
| | | } |
| | | |
| | | .advfield { |
| | | width: 200px; |
| | | } |
| | | |
| | | #action { |
| | | margin-bottom: 3px; |
| | | } |
| | | |
| | | #class { |
| | | width: 150px; |
| | | /* CSS file for cell dialog in the table plugin */
|
| | |
|
| | | .panel_wrapper div.current {
|
| | | height: 200px;
|
| | | }
|
| | |
|
| | | .advfield {
|
| | | width: 200px;
|
| | | }
|
| | |
|
| | | #action {
|
| | | margin-bottom: 3px;
|
| | | }
|
| | |
|
| | | #class {
|
| | | width: 150px;
|
| | | } |
| | |
| | | /* CSS file for row dialog in the table plugin */ |
| | | |
| | | .panel_wrapper div.current { |
| | | height: 200px; |
| | | } |
| | | |
| | | .advfield { |
| | | width: 200px; |
| | | } |
| | | |
| | | #action { |
| | | margin-bottom: 3px; |
| | | } |
| | | |
| | | #rowtype,#align,#valign,#class,#height { |
| | | width: 150px; |
| | | } |
| | | |
| | | #height { |
| | | width: 50px; |
| | | } |
| | | |
| | | .col2 { |
| | | padding-left: 20px; |
| | | } |
| | | /* CSS file for row dialog in the table plugin */
|
| | |
|
| | | .panel_wrapper div.current {
|
| | | height: 200px;
|
| | | }
|
| | |
|
| | | .advfield {
|
| | | width: 200px;
|
| | | }
|
| | |
|
| | | #action {
|
| | | margin-bottom: 3px;
|
| | | }
|
| | |
|
| | | #rowtype,#align,#valign,#class,#height {
|
| | | width: 150px;
|
| | | }
|
| | |
|
| | | #height {
|
| | | width: 50px; |
| | | }
|
| | |
|
| | | .col2 {
|
| | | padding-left: 20px;
|
| | | }
|
| | |
| | | /* CSS file for table dialog in the table plugin */ |
| | | |
| | | .panel_wrapper div.current { |
| | | height: 220px; |
| | | } |
| | | |
| | | .advfield { |
| | | width: 200px; |
| | | } |
| | | |
| | | #class { |
| | | width: 150px; |
| | | } |
| | | /* CSS file for table dialog in the table plugin */
|
| | |
|
| | | .panel_wrapper div.current {
|
| | | height: 245px;
|
| | | }
|
| | |
|
| | | .advfield {
|
| | | width: 200px;
|
| | | }
|
| | |
|
| | | #class {
|
| | | width: 150px;
|
| | | }
|
| | |
| | | tinyMCE.importPluginLanguagePack('table');var TinyMCE_TablePlugin={getInfo:function(){return{longname:'Tables',author:'Moxiecode Systems AB',authorurl:'http://tinymce.moxiecode.com',infourl:'http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/table',version:tinyMCE.majorVersion+"."+tinyMCE.minorVersion}},initInstance:function(inst){if(tinyMCE.isGecko){var doc=inst.getDoc();tinyMCE.addEvent(doc,"mouseup",TinyMCE_TablePlugin._mouseDownHandler)}inst.tableRowClipboard=null},getControlHTML:function(control_name){var controls=new Array(['table','table.gif','lang_table_desc','mceInsertTable',true],['delete_table','table_delete.gif','lang_table_del','mceTableDelete'],['delete_col','table_delete_col.gif','lang_table_delete_col_desc','mceTableDeleteCol'],['delete_row','table_delete_row.gif','lang_table_delete_row_desc','mceTableDeleteRow'],['col_after','table_insert_col_after.gif','lang_table_col_after_desc','mceTableInsertColAfter'],['col_before','table_insert_col_before.gif','lang_table_col_before_desc','mceTableInsertColBefore'],['row_after','table_insert_row_after.gif','lang_table_row_after_desc','mceTableInsertRowAfter'],['row_before','table_insert_row_before.gif','lang_table_row_before_desc','mceTableInsertRowBefore'],['row_props','table_row_props.gif','lang_table_row_desc','mceTableRowProps',true],['cell_props','table_cell_props.gif','lang_table_cell_desc','mceTableCellProps',true],['split_cells','table_split_cells.gif','lang_table_split_cells_desc','mceTableSplitCells',true],['merge_cells','table_merge_cells.gif','lang_table_merge_cells_desc','mceTableMergeCells',true]);for(var i=0;i<controls.length;i++){var but=controls[i];var cmd='tinyMCE.execInstanceCommand(\'{$editor_id}\',\''+but[3]+'\', '+(but.length>4?but[4]:false)+(but.length>5?', \''+but[5]+'\'':'')+');return false;';if(but[0]==control_name)return tinyMCE.getButtonHTML(control_name,but[2],'{$pluginurl}/images/'+but[1],but[3],(but.length>4?but[4]:false))}if(control_name=="tablecontrols"){var html="";html+=tinyMCE.getControlHTML("table");html+=tinyMCE.getControlHTML("separator");html+=tinyMCE.getControlHTML("row_props");html+=tinyMCE.getControlHTML("cell_props");html+=tinyMCE.getControlHTML("separator");html+=tinyMCE.getControlHTML("row_before");html+=tinyMCE.getControlHTML("row_after");html+=tinyMCE.getControlHTML("delete_row");html+=tinyMCE.getControlHTML("separator");html+=tinyMCE.getControlHTML("col_before");html+=tinyMCE.getControlHTML("col_after");html+=tinyMCE.getControlHTML("delete_col");html+=tinyMCE.getControlHTML("separator");html+=tinyMCE.getControlHTML("split_cells");html+=tinyMCE.getControlHTML("merge_cells");return html}return""},execCommand:function(editor_id,element,command,user_interface,value){switch(command){case"mceInsertTable":case"mceTableRowProps":case"mceTableCellProps":case"mceTableSplitCells":case"mceTableMergeCells":case"mceTableInsertRowBefore":case"mceTableInsertRowAfter":case"mceTableDeleteRow":case"mceTableInsertColBefore":case"mceTableInsertColAfter":case"mceTableDeleteCol":case"mceTableCutRow":case"mceTableCopyRow":case"mceTablePasteRowBefore":case"mceTablePasteRowAfter":case"mceTableDelete":var inst=tinyMCE.getInstanceById(editor_id);inst.execCommand('mceBeginUndoLevel');TinyMCE_TablePlugin._doExecCommand(editor_id,element,command,user_interface,value);inst.execCommand('mceEndUndoLevel');return true}return false},handleNodeChange:function(editor_id,node,undo_index,undo_levels,visual_aid,any_selection){var colspan="1",rowspan="1",tdElm;var inst=tinyMCE.getInstanceById(editor_id);tinyMCE.switchClass(editor_id+'_table','mceButtonNormal');tinyMCE.switchClass(editor_id+'_delete_table','mceButtonDisabled');tinyMCE.switchClass(editor_id+'_row_props','mceButtonDisabled');tinyMCE.switchClass(editor_id+'_cell_props','mceButtonDisabled');tinyMCE.switchClass(editor_id+'_row_before','mceButtonDisabled');tinyMCE.switchClass(editor_id+'_row_after','mceButtonDisabled');tinyMCE.switchClass(editor_id+'_delete_row','mceButtonDisabled');tinyMCE.switchClass(editor_id+'_col_before','mceButtonDisabled');tinyMCE.switchClass(editor_id+'_col_after','mceButtonDisabled');tinyMCE.switchClass(editor_id+'_delete_col','mceButtonDisabled');tinyMCE.switchClass(editor_id+'_split_cells','mceButtonDisabled');tinyMCE.switchClass(editor_id+'_merge_cells','mceButtonDisabled');if(tdElm=tinyMCE.getParentElement(node,"td,th")){tinyMCE.switchClass(editor_id+'_cell_props','mceButtonSelected');tinyMCE.switchClass(editor_id+'_delete_table','mceButtonNormal');tinyMCE.switchClass(editor_id+'_row_before','mceButtonNormal');tinyMCE.switchClass(editor_id+'_row_after','mceButtonNormal');tinyMCE.switchClass(editor_id+'_delete_row','mceButtonNormal');tinyMCE.switchClass(editor_id+'_col_before','mceButtonNormal');tinyMCE.switchClass(editor_id+'_col_after','mceButtonNormal');tinyMCE.switchClass(editor_id+'_delete_col','mceButtonNormal');colspan=tinyMCE.getAttrib(tdElm,"colspan");rowspan=tinyMCE.getAttrib(tdElm,"rowspan");colspan=colspan==""?"1":colspan;rowspan=rowspan==""?"1":rowspan;if(colspan!="1"||rowspan!="1")tinyMCE.switchClass(editor_id+'_split_cells','mceButtonNormal')}if(tinyMCE.getParentElement(node,"tr"))tinyMCE.switchClass(editor_id+'_row_props','mceButtonSelected');if(tinyMCE.getParentElement(node,"table")){tinyMCE.switchClass(editor_id+'_table','mceButtonSelected');tinyMCE.switchClass(editor_id+'_merge_cells','mceButtonNormal')}},_mouseDownHandler:function(e){var elm=tinyMCE.isMSIE?event.srcElement:e.target;var focusElm=tinyMCE.selectedInstance.getFocusElement();if(elm.nodeName=="BODY"&&(focusElm.nodeName=="TD"||focusElm.nodeName=="TH"||(focusElm.parentNode&&focusElm.parentNode.nodeName=="TD")||(focusElm.parentNode&&focusElm.parentNode.nodeName=="TH"))){window.setTimeout(function(){var tableElm=tinyMCE.getParentElement(focusElm,"table");tinyMCE.handleVisualAid(tableElm,true,tinyMCE.settings['visual'],tinyMCE.selectedInstance)},10)}},_doExecCommand:function(editor_id,element,command,user_interface,value){var inst=tinyMCE.getInstanceById(editor_id);var focusElm=inst.getFocusElement();var trElm=tinyMCE.getParentElement(focusElm,"tr");var tdElm=tinyMCE.getParentElement(focusElm,"td,th");var tableElm=tinyMCE.getParentElement(focusElm,"table");var doc=inst.contentWindow.document;var tableBorder=tableElm?tableElm.getAttribute("border"):"";if(trElm&&tdElm==null)tdElm=trElm.cells[0];function inArray(ar,v){for(var i=0;i<ar.length;i++){if(ar[i].length>0&&inArray(ar[i],v))return true;if(ar[i]==v)return true}return false}function makeTD(){var newTD=doc.createElement("td");newTD.innerHTML=" "}function getColRowSpan(td){var colspan=tinyMCE.getAttrib(td,"colspan");var rowspan=tinyMCE.getAttrib(td,"rowspan");colspan=colspan==""?1:parseInt(colspan);rowspan=rowspan==""?1:parseInt(rowspan);return{colspan:colspan,rowspan:rowspan}}function getCellPos(grid,td){var x,y;for(y=0;y<grid.length;y++){for(x=0;x<grid[y].length;x++){if(grid[y][x]==td)return{cellindex:x,rowindex:y}}}return null}function getCell(grid,row,col){if(grid[row]&&grid[row][col])return grid[row][col];return null}function getTableGrid(table){var grid=new Array(),rows=table.rows,x,y,td,sd,xstart,x2,y2;for(y=0;y<rows.length;y++){for(x=0;x<rows[y].cells.length;x++){td=rows[y].cells[x];sd=getColRowSpan(td);for(xstart=x;grid[y]&&grid[y][xstart];xstart++);for(y2=y;y2<y+sd['rowspan'];y2++){if(!grid[y2])grid[y2]=new Array();for(x2=xstart;x2<xstart+sd['colspan'];x2++)grid[y2][x2]=td}}}return grid}function trimRow(table,tr,td,new_tr){var grid=getTableGrid(table),cpos=getCellPos(grid,td);var cells,lastElm;if(new_tr.cells.length!=tr.childNodes.length){cells=tr.childNodes;lastElm=null;for(var x=0;td=getCell(grid,cpos.rowindex,x);x++){var remove=true;var sd=getColRowSpan(td);if(inArray(cells,td)){new_tr.childNodes[x]._delete=true}else if((lastElm==null||td!=lastElm)&&sd.colspan>1){for(var i=x;i<x+td.colSpan;i++)new_tr.childNodes[i]._delete=true}if((lastElm==null||td!=lastElm)&&sd.rowspan>1)td.rowSpan=sd.rowspan+1;lastElm=td}deleteMarked(tableElm)}}function prevElm(node,name){while((node=node.previousSibling)!=null){if(node.nodeName==name)return node}return null}function nextElm(node,names){var namesAr=names.split(',');while((node=node.nextSibling)!=null){for(var i=0;i<namesAr.length;i++){if(node.nodeName.toLowerCase()==namesAr[i].toLowerCase())return node}}return null}function deleteMarked(tbl){if(tbl.rows==0)return;var tr=tbl.rows[0];do{var next=nextElm(tr,"TR");if(tr._delete){tr.parentNode.removeChild(tr);continue}var td=tr.cells[0];if(td.cells>1){do{var nexttd=nextElm(td,"TD,TH");if(td._delete)td.parentNode.removeChild(td)}while((td=nexttd)!=null)}}while((tr=next)!=null)}function addRows(td_elm,tr_elm,rowspan){td_elm.rowSpan=1;var trNext=nextElm(tr_elm,"TR");for(var i=1;i<rowspan&&trNext;i++){var newTD=doc.createElement("td");newTD.innerHTML=" ";if(tinyMCE.isMSIE)trNext.insertBefore(newTD,trNext.cells(td_elm.cellIndex));else trNext.insertBefore(newTD,trNext.cells[td_elm.cellIndex]);trNext=nextElm(trNext,"TR")}}function copyRow(doc,table,tr){var grid=getTableGrid(table);var newTR=tr.cloneNode(false);var cpos=getCellPos(grid,tr.cells[0]);var lastCell=null;var tableBorder=tinyMCE.getAttrib(table,"border");var tdElm=null;for(var x=0;tdElm=getCell(grid,cpos.rowindex,x);x++){var newTD=null;if(lastCell!=tdElm){for(var i=0;i<tr.cells.length;i++){if(tdElm==tr.cells[i]){newTD=tdElm.cloneNode(true);break}}}if(newTD==null){newTD=doc.createElement("td");newTD.innerHTML=" "}newTD.colSpan=1;newTD.rowSpan=1;newTR.appendChild(newTD);lastCell=tdElm}return newTR}switch(command){case"mceTableRowProps":if(trElm==null)return true;if(user_interface){var template=new Array();template['file']='../../plugins/table/row.htm';template['width']=380;template['height']=295;template['width']+=tinyMCE.getLang('lang_table_rowprops_delta_width',0);template['height']+=tinyMCE.getLang('lang_table_rowprops_delta_height',0);tinyMCE.openWindow(template,{editor_id:inst.editorId,inline:"yes"})}return true;case"mceTableCellProps":if(tdElm==null)return true;if(user_interface){var template=new Array();template['file']='../../plugins/table/cell.htm';template['width']=380;template['height']=295;template['width']+=tinyMCE.getLang('lang_table_cellprops_delta_width',0);template['height']+=tinyMCE.getLang('lang_table_cellprops_delta_height',0);tinyMCE.openWindow(template,{editor_id:inst.editorId,inline:"yes"})}return true;case"mceInsertTable":if(user_interface){var template=new Array();template['file']='../../plugins/table/table.htm';template['width']=380;template['height']=295;template['width']+=tinyMCE.getLang('lang_table_table_delta_width',0);template['height']+=tinyMCE.getLang('lang_table_table_delta_height',0);tinyMCE.openWindow(template,{editor_id:inst.editorId,inline:"yes",action:value})}return true;case"mceTableDelete":var table=tinyMCE.getParentElement(inst.getFocusElement(),"table");if(table){table.parentNode.removeChild(table);inst.repaint()}return true;case"mceTableSplitCells":case"mceTableMergeCells":case"mceTableInsertRowBefore":case"mceTableInsertRowAfter":case"mceTableDeleteRow":case"mceTableInsertColBefore":case"mceTableInsertColAfter":case"mceTableDeleteCol":case"mceTableCutRow":case"mceTableCopyRow":case"mceTablePasteRowBefore":case"mceTablePasteRowAfter":if(!tableElm)return true;if(trElm&&tableElm!=trElm.parentNode)tableElm=trElm.parentNode;if(tableElm&&trElm){switch(command){case"mceTableCutRow":if(!trElm||!tdElm)return true;inst.tableRowClipboard=copyRow(doc,tableElm,trElm);inst.execCommand("mceTableDeleteRow");break;case"mceTableCopyRow":if(!trElm||!tdElm)return true;inst.tableRowClipboard=copyRow(doc,tableElm,trElm);break;case"mceTablePasteRowBefore":if(!trElm||!tdElm)return true;var newTR=inst.tableRowClipboard.cloneNode(true);var prevTR=prevElm(trElm,"TR");if(prevTR!=null)trimRow(tableElm,prevTR,prevTR.cells[0],newTR);trElm.parentNode.insertBefore(newTR,trElm);break;case"mceTablePasteRowAfter":if(!trElm||!tdElm)return true;var nextTR=nextElm(trElm,"TR");var newTR=inst.tableRowClipboard.cloneNode(true);trimRow(tableElm,trElm,tdElm,newTR);if(nextTR==null)trElm.parentNode.appendChild(newTR);else nextTR.parentNode.insertBefore(newTR,nextTR);break;case"mceTableInsertRowBefore":if(!trElm||!tdElm)return true;var grid=getTableGrid(tableElm);var cpos=getCellPos(grid,tdElm);var newTR=doc.createElement("tr");var lastTDElm=null;cpos.rowindex--;if(cpos.rowindex<0)cpos.rowindex=0;for(var x=0;tdElm=getCell(grid,cpos.rowindex,x);x++){if(tdElm!=lastTDElm){var sd=getColRowSpan(tdElm);if(sd['rowspan']==1){var newTD=doc.createElement("td");newTD.innerHTML=" ";newTD.colSpan=tdElm.colSpan;newTR.appendChild(newTD)}else tdElm.rowSpan=sd['rowspan']+1;lastTDElm=tdElm}}trElm.parentNode.insertBefore(newTR,trElm);grid=getTableGrid(tableElm);inst.selection.selectNode(getCell(grid,cpos.rowindex+1,cpos.cellindex),tinyMCE.isGecko,true);break;case"mceTableInsertRowAfter":if(!trElm||!tdElm)return true;var grid=getTableGrid(tableElm);var cpos=getCellPos(grid,tdElm);var newTR=doc.createElement("tr");var lastTDElm=null;for(var x=0;tdElm=getCell(grid,cpos.rowindex,x);x++){if(tdElm!=lastTDElm){var sd=getColRowSpan(tdElm);if(sd['rowspan']==1){var newTD=doc.createElement("td");newTD.innerHTML=" ";newTD.colSpan=tdElm.colSpan;newTR.appendChild(newTD)}else tdElm.rowSpan=sd['rowspan']+1;lastTDElm=tdElm}}if(newTR.hasChildNodes()){var nextTR=nextElm(trElm,"TR");if(nextTR)nextTR.parentNode.insertBefore(newTR,nextTR);else tableElm.appendChild(newTR)}grid=getTableGrid(tableElm);inst.selection.selectNode(getCell(grid,cpos.rowindex,cpos.cellindex),tinyMCE.isGecko,true);break;case"mceTableDeleteRow":if(!trElm||!tdElm)return true;var grid=getTableGrid(tableElm);var cpos=getCellPos(grid,tdElm);if(grid.length==1){tableElm=tinyMCE.getParentElement(tableElm,"table");tableElm.parentNode.removeChild(tableElm);return true}var cells=trElm.cells;var nextTR=nextElm(trElm,"TR");for(var x=0;x<cells.length;x++){if(cells[x].rowSpan>1){var newTD=cells[x].cloneNode(true);var sd=getColRowSpan(cells[x]);newTD.rowSpan=sd.rowspan-1;var nextTD=nextTR.cells[x];if(nextTD==null)nextTR.appendChild(newTD);else nextTR.insertBefore(newTD,nextTD)}}var lastTDElm=null;for(var x=0;tdElm=getCell(grid,cpos.rowindex,x);x++){if(tdElm!=lastTDElm){var sd=getColRowSpan(tdElm);if(sd.rowspan>1){tdElm.rowSpan=sd.rowspan-1}else{trElm=tdElm.parentNode;if(trElm.parentNode)trElm._delete=true}lastTDElm=tdElm}}deleteMarked(tableElm);cpos.rowindex--;if(cpos.rowindex<0)cpos.rowindex=0;grid=getTableGrid(tableElm);inst.selection.selectNode(getCell(grid,cpos.rowindex,0),tinyMCE.isGecko,true);break;case"mceTableInsertColBefore":if(!trElm||!tdElm)return true;var grid=getTableGrid(tableElm);var cpos=getCellPos(grid,tdElm);var lastTDElm=null;for(var y=0;tdElm=getCell(grid,y,cpos.cellindex);y++){if(tdElm!=lastTDElm){var sd=getColRowSpan(tdElm);if(sd['colspan']==1){var newTD=doc.createElement(tdElm.nodeName);newTD.innerHTML=" ";newTD.rowSpan=tdElm.rowSpan;tdElm.parentNode.insertBefore(newTD,tdElm)}else tdElm.colSpan++;lastTDElm=tdElm}}grid=getTableGrid(tableElm);inst.selection.selectNode(getCell(grid,cpos.rowindex,cpos.cellindex+1),tinyMCE.isGecko,true);break;case"mceTableInsertColAfter":if(!trElm||!tdElm)return true;var grid=getTableGrid(tableElm);var cpos=getCellPos(grid,tdElm);var lastTDElm=null;for(var y=0;tdElm=getCell(grid,y,cpos.cellindex);y++){if(tdElm!=lastTDElm){var sd=getColRowSpan(tdElm);if(sd['colspan']==1){var newTD=doc.createElement(tdElm.nodeName);newTD.innerHTML=" ";newTD.rowSpan=tdElm.rowSpan;var nextTD=nextElm(tdElm,"TD,TH");if(nextTD==null)tdElm.parentNode.appendChild(newTD);else nextTD.parentNode.insertBefore(newTD,nextTD)}else tdElm.colSpan++;lastTDElm=tdElm}}grid=getTableGrid(tableElm);inst.selection.selectNode(getCell(grid,cpos.rowindex,cpos.cellindex),tinyMCE.isGecko,true);break;case"mceTableDeleteCol":if(!trElm||!tdElm)return true;var grid=getTableGrid(tableElm);var cpos=getCellPos(grid,tdElm);var lastTDElm=null;if(grid.length>1&&grid[0].length<=1){tableElm=tinyMCE.getParentElement(tableElm,"table");tableElm.parentNode.removeChild(tableElm);return true}for(var y=0;tdElm=getCell(grid,y,cpos.cellindex);y++){if(tdElm!=lastTDElm){var sd=getColRowSpan(tdElm);if(sd['colspan']>1)tdElm.colSpan=sd['colspan']-1;else{if(tdElm.parentNode)tdElm.parentNode.removeChild(tdElm)}lastTDElm=tdElm}}cpos.cellindex--;if(cpos.cellindex<0)cpos.cellindex=0;grid=getTableGrid(tableElm);inst.selection.selectNode(getCell(grid,cpos.rowindex,0),tinyMCE.isGecko,true);break;case"mceTableSplitCells":if(!trElm||!tdElm)return true;var spandata=getColRowSpan(tdElm);var colspan=spandata["colspan"];var rowspan=spandata["rowspan"];if(colspan>1||rowspan>1){tdElm.colSpan=1;for(var i=1;i<colspan;i++){var newTD=doc.createElement("td");newTD.innerHTML=" ";trElm.insertBefore(newTD,nextElm(tdElm,"TD,TH"));if(rowspan>1)addRows(newTD,trElm,rowspan)}addRows(tdElm,trElm,rowspan)}tableElm=tinyMCE.getParentElement(inst.getFocusElement(),"table");break;case"mceTableMergeCells":var rows=new Array();var sel=inst.getSel();var grid=getTableGrid(tableElm);if(tinyMCE.isMSIE||sel.rangeCount==1){if(user_interface){var template=new Array();var sp=getColRowSpan(tdElm);template['file']='../../plugins/table/merge_cells.htm';template['width']=250;template['height']=105+(tinyMCE.isNS7?25:0);template['width']+=tinyMCE.getLang('lang_table_merge_cells_delta_width',0);template['height']+=tinyMCE.getLang('lang_table_merge_cells_delta_height',0);tinyMCE.openWindow(template,{editor_id:inst.editorId,inline:"yes",action:"update",numcols:sp.colspan,numrows:sp.rowspan});return true}else{var numRows=parseInt(value['numrows']);var numCols=parseInt(value['numcols']);var cpos=getCellPos(grid,tdElm);if((""+numRows)=="NaN")numRows=1;if((""+numCols)=="NaN")numCols=1;var tRows=tableElm.rows;for(var y=cpos.rowindex;y<grid.length;y++){var rowCells=new Array();for(var x=cpos.cellindex;x<grid[y].length;x++){var td=getCell(grid,y,x);if(td&&!inArray(rows,td)&&!inArray(rowCells,td)){var cp=getCellPos(grid,td);if(cp.cellindex<cpos.cellindex+numCols&&cp.rowindex<cpos.rowindex+numRows)rowCells[rowCells.length]=td}}if(rowCells.length>0)rows[rows.length]=rowCells}}}else{var cells=new Array();var sel=inst.getSel();var lastTR=null;var curRow=null;var x1=-1,y1=-1,x2,y2;if(sel.rangeCount<2)return true;for(var i=0;i<sel.rangeCount;i++){var rng=sel.getRangeAt(i);var tdElm=rng.startContainer.childNodes[rng.startOffset];if(!tdElm)break;if(tdElm.nodeName=="TD")cells[cells.length]=tdElm}var tRows=tableElm.rows;for(var y=0;y<tRows.length;y++){var rowCells=new Array();for(var x=0;x<tRows[y].cells.length;x++){var td=tRows[y].cells[x];for(var i=0;i<cells.length;i++){if(td==cells[i]){rowCells[rowCells.length]=td}}}if(rowCells.length>0)rows[rows.length]=rowCells}var curRow=new Array();var lastTR=null;for(var y=0;y<grid.length;y++){for(var x=0;x<grid[y].length;x++){grid[y][x]._selected=false;for(var i=0;i<cells.length;i++){if(grid[y][x]==cells[i]){if(x1==-1){x1=x;y1=y}x2=x;y2=y;grid[y][x]._selected=true}}}}for(var y=y1;y<=y2;y++){for(var x=x1;x<=x2;x++){if(!grid[y][x]._selected){alert("Invalid selection for merge.");return true}}}}var rowSpan=1,colSpan=1;var lastRowSpan=-1;for(var y=0;y<rows.length;y++){var rowColSpan=0;for(var x=0;x<rows[y].length;x++){var sd=getColRowSpan(rows[y][x]);rowColSpan+=sd['colspan'];if(lastRowSpan!=-1&&sd['rowspan']!=lastRowSpan){alert("Invalid selection for merge.");return true}lastRowSpan=sd['rowspan']}if(rowColSpan>colSpan)colSpan=rowColSpan;lastRowSpan=-1}var lastColSpan=-1;for(var x=0;x<rows[0].length;x++){var colRowSpan=0;for(var y=0;y<rows.length;y++){var sd=getColRowSpan(rows[y][x]);colRowSpan+=sd['rowspan'];if(lastColSpan!=-1&&sd['colspan']!=lastColSpan){alert("Invalid selection for merge.");return true}lastColSpan=sd['colspan']}if(colRowSpan>rowSpan)rowSpan=colRowSpan;lastColSpan=-1}tdElm=rows[0][0];tdElm.rowSpan=rowSpan;tdElm.colSpan=colSpan;for(var y=0;y<rows.length;y++){for(var x=0;x<rows[y].length;x++){var html=rows[y][x].innerHTML;var chk=tinyMCE.regexpReplace(html,"[ \t\r\n]","");if(chk!="<br/>"&&chk!="<br>"&&chk!=" "&&(x+y>0))tdElm.innerHTML+=html;if(rows[y][x]!=tdElm&&!rows[y][x]._deleted){var cpos=getCellPos(grid,rows[y][x]);var tr=rows[y][x].parentNode;tr.removeChild(rows[y][x]);rows[y][x]._deleted=true;if(!tr.hasChildNodes()){tr.parentNode.removeChild(tr);var lastCell=null;for(var x=0;cellElm=getCell(grid,cpos.rowindex,x);x++){if(cellElm!=lastCell&&cellElm.rowSpan>1)cellElm.rowSpan--;lastCell=cellElm}if(tdElm.rowSpan>1)tdElm.rowSpan--}}}}break}tableElm=tinyMCE.getParentElement(inst.getFocusElement(),"table");tinyMCE.handleVisualAid(tableElm,true,tinyMCE.settings['visual'],tinyMCE.selectedInstance);tinyMCE.triggerNodeChange();inst.repaint()}return true}return false}};tinyMCE.addPlugin("table",TinyMCE_TablePlugin); |
| | | (function(){var each=tinymce.each;tinymce.create('tinymce.plugins.TablePlugin',{init:function(ed,url){var t=this;t.editor=ed;t.url=url;each([['table','table.desc','mceInsertTable',true],['delete_table','table.del','mceTableDelete'],['delete_col','table.delete_col_desc','mceTableDeleteCol'],['delete_row','table.delete_row_desc','mceTableDeleteRow'],['col_after','table.col_after_desc','mceTableInsertColAfter'],['col_before','table.col_before_desc','mceTableInsertColBefore'],['row_after','table.row_after_desc','mceTableInsertRowAfter'],['row_before','table.row_before_desc','mceTableInsertRowBefore'],['row_props','table.row_desc','mceTableRowProps',true],['cell_props','table.cell_desc','mceTableCellProps',true],['split_cells','table.split_cells_desc','mceTableSplitCells',true],['merge_cells','table.merge_cells_desc','mceTableMergeCells',true]],function(c){ed.addButton(c[0],{title:c[1],cmd:c[2],ui:c[3]});});ed.onInit.add(function(){if(ed&&ed.plugins.contextmenu){ed.plugins.contextmenu.onContextMenu.add(function(th,m,e){var sm,se=ed.selection,el=se.getNode()||ed.getBody();if(ed.dom.getParent(e,'td')||ed.dom.getParent(e,'th')){m.removeAll();if(el.nodeName=='A'&&!ed.dom.getAttrib(el,'name')){m.add({title:'advanced.link_desc',icon:'link',cmd:ed.plugins.advlink?'mceAdvLink':'mceLink',ui:true});m.add({title:'advanced.unlink_desc',icon:'unlink',cmd:'UnLink'});m.addSeparator();}if(el.nodeName=='IMG'&&el.className.indexOf('mceItem')==-1){m.add({title:'advanced.image_desc',icon:'image',cmd:ed.plugins.advimage?'mceAdvImage':'mceImage',ui:true});m.addSeparator();}m.add({title:'table.desc',icon:'table',cmd:'mceInsertTable',ui:true,value:{action:'insert'}});m.add({title:'table.props_desc',icon:'table_props',cmd:'mceInsertTable',ui:true});m.add({title:'table.del',icon:'delete_table',cmd:'mceTableDelete',ui:true});m.addSeparator();sm=m.addMenu({title:'table.cell'});sm.add({title:'table.cell_desc',icon:'cell_props',cmd:'mceTableCellProps',ui:true});sm.add({title:'table.split_cells_desc',icon:'split_cells',cmd:'mceTableSplitCells',ui:true});sm.add({title:'table.merge_cells_desc',icon:'merge_cells',cmd:'mceTableMergeCells',ui:true});sm=m.addMenu({title:'table.row'});sm.add({title:'table.row_desc',icon:'row_props',cmd:'mceTableRowProps',ui:true});sm.add({title:'table.row_before_desc',icon:'row_before',cmd:'mceTableInsertRowBefore'});sm.add({title:'table.row_after_desc',icon:'row_after',cmd:'mceTableInsertRowAfter'});sm.add({title:'table.delete_row_desc',icon:'delete_row',cmd:'mceTableDeleteRow'});sm.addSeparator();sm.add({title:'table.cut_row_desc',icon:'cut',cmd:'mceTableCutRow'});sm.add({title:'table.copy_row_desc',icon:'copy',cmd:'mceTableCopyRow'});sm.add({title:'table.paste_row_before_desc',icon:'paste',cmd:'mceTablePasteRowBefore'});sm.add({title:'table.paste_row_after_desc',icon:'paste',cmd:'mceTablePasteRowAfter'});sm=m.addMenu({title:'table.col'});sm.add({title:'table.col_before_desc',icon:'col_before',cmd:'mceTableInsertColBefore'});sm.add({title:'table.col_after_desc',icon:'col_after',cmd:'mceTableInsertColAfter'});sm.add({title:'table.delete_col_desc',icon:'delete_col',cmd:'mceTableDeleteCol'});}else m.add({title:'table.desc',icon:'table',cmd:'mceInsertTable',ui:true});});}});ed.onKeyDown.add(function(ed,e){if(e.keyCode==9&&ed.dom.getParent(ed.selection.getNode(),'TABLE'))ed.undoManager.add();});ed.onNodeChange.add(function(ed,cm,n){var p=ed.dom.getParent(n,'td,th,caption');cm.setActive('table',!!p);if(p&&p.nodeName==='CAPTION')p=null;cm.setDisabled('delete_table',!p);cm.setDisabled('delete_col',!p);cm.setDisabled('delete_table',!p);cm.setDisabled('delete_row',!p);cm.setDisabled('col_after',!p);cm.setDisabled('col_before',!p);cm.setDisabled('row_after',!p);cm.setDisabled('row_before',!p);cm.setDisabled('row_props',!p);cm.setDisabled('cell_props',!p);cm.setDisabled('split_cells',!p||(parseInt(ed.dom.getAttrib(p,'colspan','1'))<2&&parseInt(ed.dom.getAttrib(p,'rowspan','1'))<2));cm.setDisabled('merge_cells',!p);});if(!tinymce.isIE){ed.onBeforeSetContent.add(function(ed,o){if(o.initial)o.content=o.content.replace(/<(td|th)([^>]+|)>\s*<\/(td|th)>/g,tinymce.isOpera?'<$1$2> </$1>':'<$1$2><br mce_bogus="1" /></$1>');});}},execCommand:function(cmd,ui,val){var ed=this.editor,b;switch(cmd){case"mceInsertTable":case"mceTableRowProps":case"mceTableCellProps":case"mceTableSplitCells":case"mceTableMergeCells":case"mceTableInsertRowBefore":case"mceTableInsertRowAfter":case"mceTableDeleteRow":case"mceTableInsertColBefore":case"mceTableInsertColAfter":case"mceTableDeleteCol":case"mceTableCutRow":case"mceTableCopyRow":case"mceTablePasteRowBefore":case"mceTablePasteRowAfter":case"mceTableDelete":ed.execCommand('mceBeginUndoLevel');this._doExecCommand(cmd,ui,val);ed.execCommand('mceEndUndoLevel');return true;}return false;},getInfo:function(){return{longname:'Tables',author:'Moxiecode Systems AB',authorurl:'http://tinymce.moxiecode.com',infourl:'http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/table',version:tinymce.majorVersion+"."+tinymce.minorVersion};},_doExecCommand:function(command,user_interface,value){var inst=this.editor,ed=inst,url=this.url;var focusElm=inst.selection.getNode();var trElm=inst.dom.getParent(focusElm,"tr");var tdElm=inst.dom.getParent(focusElm,"td,th");var tableElm=inst.dom.getParent(focusElm,"table");var doc=inst.contentWindow.document;var tableBorder=tableElm?tableElm.getAttribute("border"):"";if(trElm&&tdElm==null)tdElm=trElm.cells[0];function inArray(ar,v){for(var i=0;i<ar.length;i++){if(ar[i].length>0&&inArray(ar[i],v))return true;if(ar[i]==v)return true;}return false;}function select(dx,dy){var td;grid=getTableGrid(tableElm);dx=dx||0;dy=dy||0;dx=Math.max(cpos.cellindex+dx,0);dy=Math.max(cpos.rowindex+dy,0);inst.execCommand('mceRepaint');td=getCell(grid,dy,dx);if(td){inst.selection.select(td.firstChild||td);inst.selection.collapse(1);}};function makeTD(){var newTD=doc.createElement("td");if(!tinymce.isIE)newTD.innerHTML='<br mce_bogus="1"/>';}function getColRowSpan(td){var colspan=inst.dom.getAttrib(td,"colspan");var rowspan=inst.dom.getAttrib(td,"rowspan");colspan=colspan==""?1:parseInt(colspan);rowspan=rowspan==""?1:parseInt(rowspan);return{colspan:colspan,rowspan:rowspan};}function getCellPos(grid,td){var x,y;for(y=0;y<grid.length;y++){for(x=0;x<grid[y].length;x++){if(grid[y][x]==td)return{cellindex:x,rowindex:y};}}return null;}function getCell(grid,row,col){if(grid[row]&&grid[row][col])return grid[row][col];return null;}function getTableGrid(table){var grid=[],rows=table.rows,x,y,td,sd,xstart,x2,y2;for(y=0;y<rows.length;y++){for(x=0;x<rows[y].cells.length;x++){td=rows[y].cells[x];sd=getColRowSpan(td);for(xstart=x;grid[y]&&grid[y][xstart];xstart++);for(y2=y;y2<y+sd['rowspan'];y2++){if(!grid[y2])grid[y2]=[];for(x2=xstart;x2<xstart+sd['colspan'];x2++)grid[y2][x2]=td;}}}return grid;}function trimRow(table,tr,td,new_tr){var grid=getTableGrid(table),cpos=getCellPos(grid,td);var cells,lastElm;if(new_tr.cells.length!=tr.childNodes.length){cells=tr.childNodes;lastElm=null;for(var x=0;td=getCell(grid,cpos.rowindex,x);x++){var remove=true;var sd=getColRowSpan(td);if(inArray(cells,td)){new_tr.childNodes[x]._delete=true;}else if((lastElm==null||td!=lastElm)&&sd.colspan>1){for(var i=x;i<x+td.colSpan;i++)new_tr.childNodes[i]._delete=true;}if((lastElm==null||td!=lastElm)&&sd.rowspan>1)td.rowSpan=sd.rowspan+1;lastElm=td;}deleteMarked(tableElm);}}function prevElm(node,name){while((node=node.previousSibling)!=null){if(node.nodeName==name)return node;}return null;}function nextElm(node,names){var namesAr=names.split(',');while((node=node.nextSibling)!=null){for(var i=0;i<namesAr.length;i++){if(node.nodeName.toLowerCase()==namesAr[i].toLowerCase())return node;}}return null;}function deleteMarked(tbl){if(tbl.rows==0)return;var tr=tbl.rows[0];do{var next=nextElm(tr,"TR");if(tr._delete){tr.parentNode.removeChild(tr);continue;}var td=tr.cells[0];if(td.cells>1){do{var nexttd=nextElm(td,"TD,TH");if(td._delete)td.parentNode.removeChild(td);}while((td=nexttd)!=null);}}while((tr=next)!=null);}function addRows(td_elm,tr_elm,rowspan){td_elm.rowSpan=1;var trNext=nextElm(tr_elm,"TR");for(var i=1;i<rowspan&&trNext;i++){var newTD=doc.createElement("td");if(!tinymce.isIE)newTD.innerHTML='<br mce_bogus="1"/>';if(tinymce.isIE)trNext.insertBefore(newTD,trNext.cells(td_elm.cellIndex));else trNext.insertBefore(newTD,trNext.cells[td_elm.cellIndex]);trNext=nextElm(trNext,"TR");}}function copyRow(doc,table,tr){var grid=getTableGrid(table);var newTR=tr.cloneNode(false);var cpos=getCellPos(grid,tr.cells[0]);var lastCell=null;var tableBorder=inst.dom.getAttrib(table,"border");var tdElm=null;for(var x=0;tdElm=getCell(grid,cpos.rowindex,x);x++){var newTD=null;if(lastCell!=tdElm){for(var i=0;i<tr.cells.length;i++){if(tdElm==tr.cells[i]){newTD=tdElm.cloneNode(true);break;}}}if(newTD==null){newTD=doc.createElement("td");if(!tinymce.isIE)newTD.innerHTML='<br mce_bogus="1"/>';}newTD.colSpan=1;newTD.rowSpan=1;newTR.appendChild(newTD);lastCell=tdElm;}return newTR;}switch(command){case"mceTableRowProps":if(trElm==null)return true;if(user_interface){inst.windowManager.open({url:url+'/row.htm',width:400+parseInt(inst.getLang('table.rowprops_delta_width',0)),height:295+parseInt(inst.getLang('table.rowprops_delta_height',0)),inline:1},{plugin_url:url});}return true;case"mceTableCellProps":if(tdElm==null)return true;if(user_interface){inst.windowManager.open({url:url+'/cell.htm',width:400+parseInt(inst.getLang('table.cellprops_delta_width',0)),height:295+parseInt(inst.getLang('table.cellprops_delta_height',0)),inline:1},{plugin_url:url});}return true;case"mceInsertTable":if(user_interface){inst.windowManager.open({url:url+'/table.htm',width:400+parseInt(inst.getLang('table.table_delta_width',0)),height:320+parseInt(inst.getLang('table.table_delta_height',0)),inline:1},{plugin_url:url,action:value?value.action:0});}return true;case"mceTableDelete":var table=inst.dom.getParent(inst.selection.getNode(),"table");if(table){table.parentNode.removeChild(table);inst.execCommand('mceRepaint');}return true;case"mceTableSplitCells":case"mceTableMergeCells":case"mceTableInsertRowBefore":case"mceTableInsertRowAfter":case"mceTableDeleteRow":case"mceTableInsertColBefore":case"mceTableInsertColAfter":case"mceTableDeleteCol":case"mceTableCutRow":case"mceTableCopyRow":case"mceTablePasteRowBefore":case"mceTablePasteRowAfter":if(!tableElm)return true;if(trElm&&tableElm!=trElm.parentNode)tableElm=trElm.parentNode;if(tableElm&&trElm){switch(command){case"mceTableCutRow":if(!trElm||!tdElm)return true;inst.tableRowClipboard=copyRow(doc,tableElm,trElm);inst.execCommand("mceTableDeleteRow");break;case"mceTableCopyRow":if(!trElm||!tdElm)return true;inst.tableRowClipboard=copyRow(doc,tableElm,trElm);break;case"mceTablePasteRowBefore":if(!trElm||!tdElm)return true;var newTR=inst.tableRowClipboard.cloneNode(true);var prevTR=prevElm(trElm,"TR");if(prevTR!=null)trimRow(tableElm,prevTR,prevTR.cells[0],newTR);trElm.parentNode.insertBefore(newTR,trElm);break;case"mceTablePasteRowAfter":if(!trElm||!tdElm)return true;var nextTR=nextElm(trElm,"TR");var newTR=inst.tableRowClipboard.cloneNode(true);trimRow(tableElm,trElm,tdElm,newTR);if(nextTR==null)trElm.parentNode.appendChild(newTR);else nextTR.parentNode.insertBefore(newTR,nextTR);break;case"mceTableInsertRowBefore":if(!trElm||!tdElm)return true;var grid=getTableGrid(tableElm);var cpos=getCellPos(grid,tdElm);var newTR=doc.createElement("tr");var lastTDElm=null;cpos.rowindex--;if(cpos.rowindex<0)cpos.rowindex=0;for(var x=0;tdElm=getCell(grid,cpos.rowindex,x);x++){if(tdElm!=lastTDElm){var sd=getColRowSpan(tdElm);if(sd['rowspan']==1){var newTD=doc.createElement("td");if(!tinymce.isIE)newTD.innerHTML='<br mce_bogus="1"/>';newTD.colSpan=tdElm.colSpan;newTR.appendChild(newTD);}else tdElm.rowSpan=sd['rowspan']+1;lastTDElm=tdElm;}}trElm.parentNode.insertBefore(newTR,trElm);select(0,1);break;case"mceTableInsertRowAfter":if(!trElm||!tdElm)return true;var grid=getTableGrid(tableElm);var cpos=getCellPos(grid,tdElm);var newTR=doc.createElement("tr");var lastTDElm=null;for(var x=0;tdElm=getCell(grid,cpos.rowindex,x);x++){if(tdElm!=lastTDElm){var sd=getColRowSpan(tdElm);if(sd['rowspan']==1){var newTD=doc.createElement("td");if(!tinymce.isIE)newTD.innerHTML='<br mce_bogus="1"/>';newTD.colSpan=tdElm.colSpan;newTR.appendChild(newTD);}else tdElm.rowSpan=sd['rowspan']+1;lastTDElm=tdElm;}}if(newTR.hasChildNodes()){var nextTR=nextElm(trElm,"TR");if(nextTR)nextTR.parentNode.insertBefore(newTR,nextTR);else tableElm.appendChild(newTR);}select(0,1);break;case"mceTableDeleteRow":if(!trElm||!tdElm)return true;var grid=getTableGrid(tableElm);var cpos=getCellPos(grid,tdElm);if(grid.length==1){inst.dom.remove(inst.dom.getParent(tableElm,"table"));return true;}var cells=trElm.cells;var nextTR=nextElm(trElm,"TR");for(var x=0;x<cells.length;x++){if(cells[x].rowSpan>1){var newTD=cells[x].cloneNode(true);var sd=getColRowSpan(cells[x]);newTD.rowSpan=sd.rowspan-1;var nextTD=nextTR.cells[x];if(nextTD==null)nextTR.appendChild(newTD);else nextTR.insertBefore(newTD,nextTD);}}var lastTDElm=null;for(var x=0;tdElm=getCell(grid,cpos.rowindex,x);x++){if(tdElm!=lastTDElm){var sd=getColRowSpan(tdElm);if(sd.rowspan>1){tdElm.rowSpan=sd.rowspan-1;}else{trElm=tdElm.parentNode;if(trElm.parentNode)trElm._delete=true;}lastTDElm=tdElm;}}deleteMarked(tableElm);select(0,-1);break;case"mceTableInsertColBefore":if(!trElm||!tdElm)return true;var grid=getTableGrid(tableElm);var cpos=getCellPos(grid,tdElm);var lastTDElm=null;for(var y=0;tdElm=getCell(grid,y,cpos.cellindex);y++){if(tdElm!=lastTDElm){var sd=getColRowSpan(tdElm);if(sd['colspan']==1){var newTD=doc.createElement(tdElm.nodeName);if(!tinymce.isIE)newTD.innerHTML='<br mce_bogus="1"/>';newTD.rowSpan=tdElm.rowSpan;tdElm.parentNode.insertBefore(newTD,tdElm);}else tdElm.colSpan++;lastTDElm=tdElm;}}select();break;case"mceTableInsertColAfter":if(!trElm||!tdElm)return true;var grid=getTableGrid(tableElm);var cpos=getCellPos(grid,tdElm);var lastTDElm=null;for(var y=0;tdElm=getCell(grid,y,cpos.cellindex);y++){if(tdElm!=lastTDElm){var sd=getColRowSpan(tdElm);if(sd['colspan']==1){var newTD=doc.createElement(tdElm.nodeName);if(!tinymce.isIE)newTD.innerHTML='<br mce_bogus="1"/>';newTD.rowSpan=tdElm.rowSpan;var nextTD=nextElm(tdElm,"TD,TH");if(nextTD==null)tdElm.parentNode.appendChild(newTD);else nextTD.parentNode.insertBefore(newTD,nextTD);}else tdElm.colSpan++;lastTDElm=tdElm;}}select(1);break;case"mceTableDeleteCol":if(!trElm||!tdElm)return true;var grid=getTableGrid(tableElm);var cpos=getCellPos(grid,tdElm);var lastTDElm=null;if(grid.length>1&&grid[0].length<=1){inst.dom.remove(inst.dom.getParent(tableElm,"table"));return true;}for(var y=0;tdElm=getCell(grid,y,cpos.cellindex);y++){if(tdElm!=lastTDElm){var sd=getColRowSpan(tdElm);if(sd['colspan']>1)tdElm.colSpan=sd['colspan']-1;else{if(tdElm.parentNode)tdElm.parentNode.removeChild(tdElm);}lastTDElm=tdElm;}}select(-1);break;case"mceTableSplitCells":if(!trElm||!tdElm)return true;var spandata=getColRowSpan(tdElm);var colspan=spandata["colspan"];var rowspan=spandata["rowspan"];if(colspan>1||rowspan>1){tdElm.colSpan=1;for(var i=1;i<colspan;i++){var newTD=doc.createElement("td");if(!tinymce.isIE)newTD.innerHTML='<br mce_bogus="1"/>';trElm.insertBefore(newTD,nextElm(tdElm,"TD,TH"));if(rowspan>1)addRows(newTD,trElm,rowspan);}addRows(tdElm,trElm,rowspan);}tableElm=inst.dom.getParent(inst.selection.getNode(),"table");break;case"mceTableMergeCells":var rows=[];var sel=inst.selection.getSel();var grid=getTableGrid(tableElm);if(tinymce.isIE||sel.rangeCount==1){if(user_interface){var sp=getColRowSpan(tdElm);inst.windowManager.open({url:url+'/merge_cells.htm',width:240+parseInt(inst.getLang('table.merge_cells_delta_width',0)),height:110+parseInt(inst.getLang('table.merge_cells_delta_height',0)),inline:1},{action:"update",numcols:sp.colspan,numrows:sp.rowspan,plugin_url:url});return true;}else{var numRows=parseInt(value['numrows']);var numCols=parseInt(value['numcols']);var cpos=getCellPos(grid,tdElm);if((""+numRows)=="NaN")numRows=1;if((""+numCols)=="NaN")numCols=1;var tRows=tableElm.rows;for(var y=cpos.rowindex;y<grid.length;y++){var rowCells=[];for(var x=cpos.cellindex;x<grid[y].length;x++){var td=getCell(grid,y,x);if(td&&!inArray(rows,td)&&!inArray(rowCells,td)){var cp=getCellPos(grid,td);if(cp.cellindex<cpos.cellindex+numCols&&cp.rowindex<cpos.rowindex+numRows)rowCells[rowCells.length]=td;}}if(rowCells.length>0)rows[rows.length]=rowCells;var td=getCell(grid,cpos.rowindex,cpos.cellindex);each(ed.dom.select('br',td),function(e,i){if(i>0&&ed.dom.getAttrib('mce_bogus'))ed.dom.remove(e);});}}}else{var cells=[];var sel=inst.selection.getSel();var lastTR=null;var curRow=null;var x1=-1,y1=-1,x2,y2;if(sel.rangeCount<2)return true;for(var i=0;i<sel.rangeCount;i++){var rng=sel.getRangeAt(i);var tdElm=rng.startContainer.childNodes[rng.startOffset];if(!tdElm)break;if(tdElm.nodeName=="TD")cells[cells.length]=tdElm;}var tRows=tableElm.rows;for(var y=0;y<tRows.length;y++){var rowCells=[];for(var x=0;x<tRows[y].cells.length;x++){var td=tRows[y].cells[x];for(var i=0;i<cells.length;i++){if(td==cells[i]){rowCells[rowCells.length]=td;}}}if(rowCells.length>0)rows[rows.length]=rowCells;}var curRow=[];var lastTR=null;for(var y=0;y<grid.length;y++){for(var x=0;x<grid[y].length;x++){grid[y][x]._selected=false;for(var i=0;i<cells.length;i++){if(grid[y][x]==cells[i]){if(x1==-1){x1=x;y1=y;}x2=x;y2=y;grid[y][x]._selected=true;}}}}for(var y=y1;y<=y2;y++){for(var x=x1;x<=x2;x++){if(!grid[y][x]._selected){alert("Invalid selection for merge.");return true;}}}}var rowSpan=1,colSpan=1;var lastRowSpan=-1;for(var y=0;y<rows.length;y++){var rowColSpan=0;for(var x=0;x<rows[y].length;x++){var sd=getColRowSpan(rows[y][x]);rowColSpan+=sd['colspan'];if(lastRowSpan!=-1&&sd['rowspan']!=lastRowSpan){alert("Invalid selection for merge.");return true;}lastRowSpan=sd['rowspan'];}if(rowColSpan>colSpan)colSpan=rowColSpan;lastRowSpan=-1;}var lastColSpan=-1;for(var x=0;x<rows[0].length;x++){var colRowSpan=0;for(var y=0;y<rows.length;y++){var sd=getColRowSpan(rows[y][x]);colRowSpan+=sd['rowspan'];if(lastColSpan!=-1&&sd['colspan']!=lastColSpan){alert("Invalid selection for merge.");return true;}lastColSpan=sd['colspan'];}if(colRowSpan>rowSpan)rowSpan=colRowSpan;lastColSpan=-1;}tdElm=rows[0][0];tdElm.rowSpan=rowSpan;tdElm.colSpan=colSpan;for(var y=0;y<rows.length;y++){for(var x=0;x<rows[y].length;x++){var html=rows[y][x].innerHTML;var chk=html.replace(/[ \t\r\n]/g,"");if(chk!="<br/>"&&chk!="<br>"&&chk!='<br mce_bogus="1"/>'&&(x+y>0))tdElm.innerHTML+=html;if(rows[y][x]!=tdElm&&!rows[y][x]._deleted){var cpos=getCellPos(grid,rows[y][x]);var tr=rows[y][x].parentNode;tr.removeChild(rows[y][x]);rows[y][x]._deleted=true;if(!tr.hasChildNodes()){tr.parentNode.removeChild(tr);var lastCell=null;for(var x=0;cellElm=getCell(grid,cpos.rowindex,x);x++){if(cellElm!=lastCell&&cellElm.rowSpan>1)cellElm.rowSpan--;lastCell=cellElm;}if(tdElm.rowSpan>1)tdElm.rowSpan--;}}}}each(ed.dom.select('br',tdElm),function(e,i){if(i>0&&ed.dom.getAttrib(e,'mce_bogus'))ed.dom.remove(e);});break;}tableElm=inst.dom.getParent(inst.selection.getNode(),"table");inst.addVisual(tableElm);inst.nodeChanged();}return true;}return false;}});tinymce.PluginManager.add('table',tinymce.plugins.TablePlugin);})(); |
| | |
| | | /**
|
| | | * $Id: editor_plugin_src.js 201 2007-02-12 15:56:56Z spocke $
|
| | | * $Id: editor_plugin_src.js 768 2008-04-04 13:52:49Z spocke $
|
| | | *
|
| | | * @author Moxiecode
|
| | | * @copyright Copyright © 2004-2007, Moxiecode Systems AB, All rights reserved.
|
| | | * @copyright Copyright © 2004-2008, Moxiecode Systems AB, All rights reserved.
|
| | | */
|
| | |
|
| | | /* Import plugin specific language pack */
|
| | | tinyMCE.importPluginLanguagePack('table');
|
| | | (function() {
|
| | | var each = tinymce.each;
|
| | |
|
| | | var TinyMCE_TablePlugin = {
|
| | | getInfo : function() {
|
| | | return {
|
| | | longname : 'Tables',
|
| | | author : 'Moxiecode Systems AB',
|
| | | authorurl : 'http://tinymce.moxiecode.com',
|
| | | infourl : 'http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/table',
|
| | | version : tinyMCE.majorVersion + "." + tinyMCE.minorVersion
|
| | | };
|
| | | },
|
| | | tinymce.create('tinymce.plugins.TablePlugin', {
|
| | | init : function(ed, url) {
|
| | | var t = this;
|
| | |
|
| | | initInstance : function(inst) {
|
| | | if (tinyMCE.isGecko) {
|
| | | var doc = inst.getDoc();
|
| | | tinyMCE.addEvent(doc, "mouseup", TinyMCE_TablePlugin._mouseDownHandler);
|
| | | }
|
| | | t.editor = ed;
|
| | | t.url = url;
|
| | |
|
| | | inst.tableRowClipboard = null;
|
| | | },
|
| | | // Register buttons
|
| | | each([
|
| | | ['table', 'table.desc', 'mceInsertTable', true],
|
| | | ['delete_table', 'table.del', 'mceTableDelete'],
|
| | | ['delete_col', 'table.delete_col_desc', 'mceTableDeleteCol'],
|
| | | ['delete_row', 'table.delete_row_desc', 'mceTableDeleteRow'],
|
| | | ['col_after', 'table.col_after_desc', 'mceTableInsertColAfter'],
|
| | | ['col_before', 'table.col_before_desc', 'mceTableInsertColBefore'],
|
| | | ['row_after', 'table.row_after_desc', 'mceTableInsertRowAfter'],
|
| | | ['row_before', 'table.row_before_desc', 'mceTableInsertRowBefore'],
|
| | | ['row_props', 'table.row_desc', 'mceTableRowProps', true],
|
| | | ['cell_props', 'table.cell_desc', 'mceTableCellProps', true],
|
| | | ['split_cells', 'table.split_cells_desc', 'mceTableSplitCells', true],
|
| | | ['merge_cells', 'table.merge_cells_desc', 'mceTableMergeCells', true]
|
| | | ], function(c) {
|
| | | ed.addButton(c[0], {title : c[1], cmd : c[2], ui : c[3]});
|
| | | });
|
| | |
|
| | | /**
|
| | | * Returns the HTML contents of the table control.
|
| | | */
|
| | | getControlHTML : function(control_name) {
|
| | | var controls = new Array(
|
| | | ['table', 'table.gif', 'lang_table_desc', 'mceInsertTable', true],
|
| | | ['delete_table', 'table_delete.gif', 'lang_table_del', 'mceTableDelete'],
|
| | | ['delete_col', 'table_delete_col.gif', 'lang_table_delete_col_desc', 'mceTableDeleteCol'],
|
| | | ['delete_row', 'table_delete_row.gif', 'lang_table_delete_row_desc', 'mceTableDeleteRow'],
|
| | | ['col_after', 'table_insert_col_after.gif', 'lang_table_col_after_desc', 'mceTableInsertColAfter'],
|
| | | ['col_before', 'table_insert_col_before.gif', 'lang_table_col_before_desc', 'mceTableInsertColBefore'],
|
| | | ['row_after', 'table_insert_row_after.gif', 'lang_table_row_after_desc', 'mceTableInsertRowAfter'],
|
| | | ['row_before', 'table_insert_row_before.gif', 'lang_table_row_before_desc', 'mceTableInsertRowBefore'],
|
| | | ['row_props', 'table_row_props.gif', 'lang_table_row_desc', 'mceTableRowProps', true],
|
| | | ['cell_props', 'table_cell_props.gif', 'lang_table_cell_desc', 'mceTableCellProps', true],
|
| | | ['split_cells', 'table_split_cells.gif', 'lang_table_split_cells_desc', 'mceTableSplitCells', true],
|
| | | ['merge_cells', 'table_merge_cells.gif', 'lang_table_merge_cells_desc', 'mceTableMergeCells', true]);
|
| | | ed.onInit.add(function() {
|
| | | if (ed && ed.plugins.contextmenu) {
|
| | | ed.plugins.contextmenu.onContextMenu.add(function(th, m, e) {
|
| | | var sm, se = ed.selection, el = se.getNode() || ed.getBody();
|
| | |
|
| | | // Render table control
|
| | | for (var i=0; i<controls.length; i++) {
|
| | | var but = controls[i];
|
| | | var cmd = 'tinyMCE.execInstanceCommand(\'{$editor_id}\',\'' + but[3] + '\', ' + (but.length > 4 ? but[4] : false) + (but.length > 5 ? ', \'' + but[5] + '\'' : '') + ');return false;';
|
| | | if (ed.dom.getParent(e, 'td') || ed.dom.getParent(e, 'th')) {
|
| | | m.removeAll();
|
| | |
|
| | | if (but[0] == control_name)
|
| | | return tinyMCE.getButtonHTML(control_name, but[2], '{$pluginurl}/images/'+ but[1], but[3], (but.length > 4 ? but[4] : false));
|
| | | }
|
| | | if (el.nodeName == 'A' && !ed.dom.getAttrib(el, 'name')) {
|
| | | m.add({title : 'advanced.link_desc', icon : 'link', cmd : ed.plugins.advlink ? 'mceAdvLink' : 'mceLink', ui : true});
|
| | | m.add({title : 'advanced.unlink_desc', icon : 'unlink', cmd : 'UnLink'});
|
| | | m.addSeparator();
|
| | | }
|
| | |
|
| | | // Special tablecontrols
|
| | | if (control_name == "tablecontrols") {
|
| | | var html = "";
|
| | | if (el.nodeName == 'IMG' && el.className.indexOf('mceItem') == -1) {
|
| | | m.add({title : 'advanced.image_desc', icon : 'image', cmd : ed.plugins.advimage ? 'mceAdvImage' : 'mceImage', ui : true});
|
| | | m.addSeparator();
|
| | | }
|
| | |
|
| | | html += tinyMCE.getControlHTML("table");
|
| | | html += tinyMCE.getControlHTML("separator");
|
| | | html += tinyMCE.getControlHTML("row_props");
|
| | | html += tinyMCE.getControlHTML("cell_props");
|
| | | html += tinyMCE.getControlHTML("separator");
|
| | | html += tinyMCE.getControlHTML("row_before");
|
| | | html += tinyMCE.getControlHTML("row_after");
|
| | | html += tinyMCE.getControlHTML("delete_row");
|
| | | html += tinyMCE.getControlHTML("separator");
|
| | | html += tinyMCE.getControlHTML("col_before");
|
| | | html += tinyMCE.getControlHTML("col_after");
|
| | | html += tinyMCE.getControlHTML("delete_col");
|
| | | html += tinyMCE.getControlHTML("separator");
|
| | | html += tinyMCE.getControlHTML("split_cells");
|
| | | html += tinyMCE.getControlHTML("merge_cells");
|
| | | m.add({title : 'table.desc', icon : 'table', cmd : 'mceInsertTable', ui : true, value : {action : 'insert'}});
|
| | | m.add({title : 'table.props_desc', icon : 'table_props', cmd : 'mceInsertTable', ui : true});
|
| | | m.add({title : 'table.del', icon : 'delete_table', cmd : 'mceTableDelete', ui : true});
|
| | | m.addSeparator();
|
| | |
|
| | | return html;
|
| | | }
|
| | | // Cell menu
|
| | | sm = m.addMenu({title : 'table.cell'});
|
| | | sm.add({title : 'table.cell_desc', icon : 'cell_props', cmd : 'mceTableCellProps', ui : true});
|
| | | sm.add({title : 'table.split_cells_desc', icon : 'split_cells', cmd : 'mceTableSplitCells', ui : true});
|
| | | sm.add({title : 'table.merge_cells_desc', icon : 'merge_cells', cmd : 'mceTableMergeCells', ui : true});
|
| | |
|
| | | return "";
|
| | | },
|
| | | // Row menu
|
| | | sm = m.addMenu({title : 'table.row'});
|
| | | sm.add({title : 'table.row_desc', icon : 'row_props', cmd : 'mceTableRowProps', ui : true});
|
| | | sm.add({title : 'table.row_before_desc', icon : 'row_before', cmd : 'mceTableInsertRowBefore'});
|
| | | sm.add({title : 'table.row_after_desc', icon : 'row_after', cmd : 'mceTableInsertRowAfter'});
|
| | | sm.add({title : 'table.delete_row_desc', icon : 'delete_row', cmd : 'mceTableDeleteRow'});
|
| | | sm.addSeparator();
|
| | | sm.add({title : 'table.cut_row_desc', icon : 'cut', cmd : 'mceTableCutRow'});
|
| | | sm.add({title : 'table.copy_row_desc', icon : 'copy', cmd : 'mceTableCopyRow'});
|
| | | sm.add({title : 'table.paste_row_before_desc', icon : 'paste', cmd : 'mceTablePasteRowBefore'});
|
| | | sm.add({title : 'table.paste_row_after_desc', icon : 'paste', cmd : 'mceTablePasteRowAfter'});
|
| | |
|
| | | /**
|
| | | * Executes the table commands.
|
| | | */
|
| | | execCommand : function(editor_id, element, command, user_interface, value) {
|
| | | // Is table command
|
| | | switch (command) {
|
| | | case "mceInsertTable":
|
| | | case "mceTableRowProps":
|
| | | case "mceTableCellProps":
|
| | | case "mceTableSplitCells":
|
| | | case "mceTableMergeCells":
|
| | | case "mceTableInsertRowBefore":
|
| | | case "mceTableInsertRowAfter":
|
| | | case "mceTableDeleteRow":
|
| | | case "mceTableInsertColBefore":
|
| | | case "mceTableInsertColAfter":
|
| | | case "mceTableDeleteCol":
|
| | | case "mceTableCutRow":
|
| | | case "mceTableCopyRow":
|
| | | case "mceTablePasteRowBefore":
|
| | | case "mceTablePasteRowAfter":
|
| | | case "mceTableDelete":
|
| | | var inst = tinyMCE.getInstanceById(editor_id);
|
| | | // Column menu
|
| | | sm = m.addMenu({title : 'table.col'});
|
| | | sm.add({title : 'table.col_before_desc', icon : 'col_before', cmd : 'mceTableInsertColBefore'});
|
| | | sm.add({title : 'table.col_after_desc', icon : 'col_after', cmd : 'mceTableInsertColAfter'});
|
| | | sm.add({title : 'table.delete_col_desc', icon : 'delete_col', cmd : 'mceTableDeleteCol'});
|
| | | } else
|
| | | m.add({title : 'table.desc', icon : 'table', cmd : 'mceInsertTable', ui : true});
|
| | | });
|
| | | }
|
| | | });
|
| | |
|
| | | inst.execCommand('mceBeginUndoLevel');
|
| | | TinyMCE_TablePlugin._doExecCommand(editor_id, element, command, user_interface, value);
|
| | | inst.execCommand('mceEndUndoLevel');
|
| | | // Add undo level when new rows are created using the tab key
|
| | | ed.onKeyDown.add(function(ed, e) {
|
| | | if (e.keyCode == 9 && ed.dom.getParent(ed.selection.getNode(), 'TABLE'))
|
| | | ed.undoManager.add();
|
| | | });
|
| | |
|
| | | return true;
|
| | | }
|
| | | ed.onNodeChange.add(function(ed, cm, n) {
|
| | | var p = ed.dom.getParent(n, 'td,th,caption');
|
| | |
|
| | | // Pass to next handler in chain
|
| | | return false;
|
| | | },
|
| | | cm.setActive('table', !!p);
|
| | | if (p && p.nodeName === 'CAPTION')
|
| | | p = null;
|
| | |
|
| | | handleNodeChange : function(editor_id, node, undo_index, undo_levels, visual_aid, any_selection) {
|
| | | var colspan = "1", rowspan = "1", tdElm;
|
| | | cm.setDisabled('delete_table', !p);
|
| | | cm.setDisabled('delete_col', !p);
|
| | | cm.setDisabled('delete_table', !p);
|
| | | cm.setDisabled('delete_row', !p);
|
| | | cm.setDisabled('col_after', !p);
|
| | | cm.setDisabled('col_before', !p);
|
| | | cm.setDisabled('row_after', !p);
|
| | | cm.setDisabled('row_before', !p);
|
| | | cm.setDisabled('row_props', !p);
|
| | | cm.setDisabled('cell_props', !p);
|
| | | cm.setDisabled('split_cells', !p || (parseInt(ed.dom.getAttrib(p, 'colspan', '1')) < 2 && parseInt(ed.dom.getAttrib(p, 'rowspan', '1')) < 2));
|
| | | cm.setDisabled('merge_cells', !p);
|
| | | });
|
| | |
|
| | | var inst = tinyMCE.getInstanceById(editor_id);
|
| | | // Padd empty table cells
|
| | | if (!tinymce.isIE) {
|
| | | ed.onBeforeSetContent.add(function(ed, o) {
|
| | | if (o.initial)
|
| | | o.content = o.content.replace(/<(td|th)([^>]+|)>\s*<\/(td|th)>/g, tinymce.isOpera ? '<$1$2> </$1>' : '<$1$2><br mce_bogus="1" /></$1>');
|
| | | });
|
| | | }
|
| | | },
|
| | |
|
| | | // Reset table controls
|
| | | tinyMCE.switchClass(editor_id + '_table', 'mceButtonNormal');
|
| | | tinyMCE.switchClass(editor_id + '_delete_table', 'mceButtonDisabled');
|
| | | tinyMCE.switchClass(editor_id + '_row_props', 'mceButtonDisabled');
|
| | | tinyMCE.switchClass(editor_id + '_cell_props', 'mceButtonDisabled');
|
| | | tinyMCE.switchClass(editor_id + '_row_before', 'mceButtonDisabled');
|
| | | tinyMCE.switchClass(editor_id + '_row_after', 'mceButtonDisabled');
|
| | | tinyMCE.switchClass(editor_id + '_delete_row', 'mceButtonDisabled');
|
| | | tinyMCE.switchClass(editor_id + '_col_before', 'mceButtonDisabled');
|
| | | tinyMCE.switchClass(editor_id + '_col_after', 'mceButtonDisabled');
|
| | | tinyMCE.switchClass(editor_id + '_delete_col', 'mceButtonDisabled');
|
| | | tinyMCE.switchClass(editor_id + '_split_cells', 'mceButtonDisabled');
|
| | | tinyMCE.switchClass(editor_id + '_merge_cells', 'mceButtonDisabled');
|
| | | execCommand : function(cmd, ui, val) {
|
| | | var ed = this.editor, b;
|
| | |
|
| | | // Within a td element
|
| | | if (tdElm = tinyMCE.getParentElement(node, "td,th")) {
|
| | | tinyMCE.switchClass(editor_id + '_cell_props', 'mceButtonSelected');
|
| | | tinyMCE.switchClass(editor_id + '_delete_table', 'mceButtonNormal');
|
| | | tinyMCE.switchClass(editor_id + '_row_before', 'mceButtonNormal');
|
| | | tinyMCE.switchClass(editor_id + '_row_after', 'mceButtonNormal');
|
| | | tinyMCE.switchClass(editor_id + '_delete_row', 'mceButtonNormal');
|
| | | tinyMCE.switchClass(editor_id + '_col_before', 'mceButtonNormal');
|
| | | tinyMCE.switchClass(editor_id + '_col_after', 'mceButtonNormal');
|
| | | tinyMCE.switchClass(editor_id + '_delete_col', 'mceButtonNormal');
|
| | | // Is table command
|
| | | switch (cmd) {
|
| | | case "mceInsertTable":
|
| | | case "mceTableRowProps":
|
| | | case "mceTableCellProps":
|
| | | case "mceTableSplitCells":
|
| | | case "mceTableMergeCells":
|
| | | case "mceTableInsertRowBefore":
|
| | | case "mceTableInsertRowAfter":
|
| | | case "mceTableDeleteRow":
|
| | | case "mceTableInsertColBefore":
|
| | | case "mceTableInsertColAfter":
|
| | | case "mceTableDeleteCol":
|
| | | case "mceTableCutRow":
|
| | | case "mceTableCopyRow":
|
| | | case "mceTablePasteRowBefore":
|
| | | case "mceTablePasteRowAfter":
|
| | | case "mceTableDelete":
|
| | | ed.execCommand('mceBeginUndoLevel');
|
| | | this._doExecCommand(cmd, ui, val);
|
| | | ed.execCommand('mceEndUndoLevel');
|
| | |
|
| | | colspan = tinyMCE.getAttrib(tdElm, "colspan");
|
| | | rowspan = tinyMCE.getAttrib(tdElm, "rowspan");
|
| | |
|
| | | colspan = colspan == "" ? "1" : colspan;
|
| | | rowspan = rowspan == "" ? "1" : rowspan;
|
| | |
|
| | | if (colspan != "1" || rowspan != "1")
|
| | | tinyMCE.switchClass(editor_id + '_split_cells', 'mceButtonNormal');
|
| | | }
|
| | |
|
| | | // Within a tr element
|
| | | if (tinyMCE.getParentElement(node, "tr"))
|
| | | tinyMCE.switchClass(editor_id + '_row_props', 'mceButtonSelected');
|
| | |
|
| | | // Within table
|
| | | if (tinyMCE.getParentElement(node, "table")) {
|
| | | tinyMCE.switchClass(editor_id + '_table', 'mceButtonSelected');
|
| | | tinyMCE.switchClass(editor_id + '_merge_cells', 'mceButtonNormal');
|
| | | }
|
| | | },
|
| | |
|
| | | // Private plugin internal methods
|
| | |
|
| | | _mouseDownHandler : function(e) {
|
| | | var elm = tinyMCE.isMSIE ? event.srcElement : e.target;
|
| | | var focusElm = tinyMCE.selectedInstance.getFocusElement();
|
| | |
|
| | | // If press on special Mozilla create TD/TR thingie
|
| | | if (elm.nodeName == "BODY" && (focusElm.nodeName == "TD" || focusElm.nodeName == "TH" || (focusElm.parentNode && focusElm.parentNode.nodeName == "TD") ||(focusElm.parentNode && focusElm.parentNode.nodeName == "TH") )) {
|
| | | window.setTimeout(function() {
|
| | | var tableElm = tinyMCE.getParentElement(focusElm, "table");
|
| | | tinyMCE.handleVisualAid(tableElm, true, tinyMCE.settings['visual'], tinyMCE.selectedInstance);
|
| | | }, 10);
|
| | | }
|
| | | },
|
| | |
|
| | | /**
|
| | | * Executes the table commands.
|
| | | */
|
| | | _doExecCommand : function(editor_id, element, command, user_interface, value) {
|
| | | var inst = tinyMCE.getInstanceById(editor_id);
|
| | | var focusElm = inst.getFocusElement();
|
| | | var trElm = tinyMCE.getParentElement(focusElm, "tr");
|
| | | var tdElm = tinyMCE.getParentElement(focusElm, "td,th");
|
| | | var tableElm = tinyMCE.getParentElement(focusElm, "table");
|
| | | var doc = inst.contentWindow.document;
|
| | | var tableBorder = tableElm ? tableElm.getAttribute("border") : "";
|
| | |
|
| | | // Get first TD if no TD found
|
| | | if (trElm && tdElm == null)
|
| | | tdElm = trElm.cells[0];
|
| | |
|
| | | // ------- Inner functions ---------
|
| | | function inArray(ar, v) {
|
| | | for (var i=0; i<ar.length; i++) {
|
| | | // Is array
|
| | | if (ar[i].length > 0 && inArray(ar[i], v))
|
| | | return true;
|
| | |
|
| | | // Found value
|
| | | if (ar[i] == v)
|
| | | return true;
|
| | | }
|
| | |
|
| | | // Pass to next handler in chain
|
| | | return false;
|
| | | }
|
| | | },
|
| | |
|
| | | function makeTD() {
|
| | | var newTD = doc.createElement("td");
|
| | | newTD.innerHTML = " ";
|
| | | }
|
| | | getInfo : function() {
|
| | | return {
|
| | | longname : 'Tables',
|
| | | author : 'Moxiecode Systems AB',
|
| | | authorurl : 'http://tinymce.moxiecode.com',
|
| | | infourl : 'http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/table',
|
| | | version : tinymce.majorVersion + "." + tinymce.minorVersion
|
| | | };
|
| | | },
|
| | |
|
| | | function getColRowSpan(td) {
|
| | | var colspan = tinyMCE.getAttrib(td, "colspan");
|
| | | var rowspan = tinyMCE.getAttrib(td, "rowspan");
|
| | | // Private plugin internal methods
|
| | |
|
| | | colspan = colspan == "" ? 1 : parseInt(colspan);
|
| | | rowspan = rowspan == "" ? 1 : parseInt(rowspan);
|
| | | /**
|
| | | * Executes the table commands.
|
| | | */
|
| | | _doExecCommand : function(command, user_interface, value) {
|
| | | var inst = this.editor, ed = inst, url = this.url;
|
| | | var focusElm = inst.selection.getNode();
|
| | | var trElm = inst.dom.getParent(focusElm, "tr");
|
| | | var tdElm = inst.dom.getParent(focusElm, "td,th");
|
| | | var tableElm = inst.dom.getParent(focusElm, "table");
|
| | | var doc = inst.contentWindow.document;
|
| | | var tableBorder = tableElm ? tableElm.getAttribute("border") : "";
|
| | |
|
| | | return {colspan : colspan, rowspan : rowspan};
|
| | | }
|
| | | // Get first TD if no TD found
|
| | | if (trElm && tdElm == null)
|
| | | tdElm = trElm.cells[0];
|
| | |
|
| | | function getCellPos(grid, td) {
|
| | | var x, y;
|
| | | function inArray(ar, v) {
|
| | | for (var i=0; i<ar.length; i++) {
|
| | | // Is array
|
| | | if (ar[i].length > 0 && inArray(ar[i], v))
|
| | | return true;
|
| | |
|
| | | for (y=0; y<grid.length; y++) {
|
| | | for (x=0; x<grid[y].length; x++) {
|
| | | if (grid[y][x] == td)
|
| | | return {cellindex : x, rowindex : y};
|
| | | // Found value
|
| | | if (ar[i] == v)
|
| | | return true;
|
| | | }
|
| | |
|
| | | return false;
|
| | | }
|
| | |
|
| | | return null;
|
| | | }
|
| | | function select(dx, dy) {
|
| | | var td;
|
| | |
|
| | | function getCell(grid, row, col) {
|
| | | if (grid[row] && grid[row][col])
|
| | | return grid[row][col];
|
| | | grid = getTableGrid(tableElm);
|
| | | dx = dx || 0;
|
| | | dy = dy || 0;
|
| | | dx = Math.max(cpos.cellindex + dx, 0);
|
| | | dy = Math.max(cpos.rowindex + dy, 0);
|
| | |
|
| | | return null;
|
| | | }
|
| | | // Recalculate grid and select
|
| | | inst.execCommand('mceRepaint');
|
| | | td = getCell(grid, dy, dx);
|
| | |
|
| | | function getTableGrid(table) {
|
| | | var grid = new Array(), rows = table.rows, x, y, td, sd, xstart, x2, y2;
|
| | | if (td) {
|
| | | inst.selection.select(td.firstChild || td);
|
| | | inst.selection.collapse(1);
|
| | | }
|
| | | };
|
| | |
|
| | | for (y=0; y<rows.length; y++) {
|
| | | for (x=0; x<rows[y].cells.length; x++) {
|
| | | td = rows[y].cells[x];
|
| | | sd = getColRowSpan(td);
|
| | | function makeTD() {
|
| | | var newTD = doc.createElement("td");
|
| | |
|
| | | // All ready filled
|
| | | for (xstart = x; grid[y] && grid[y][xstart]; xstart++) ;
|
| | | if (!tinymce.isIE)
|
| | | newTD.innerHTML = '<br mce_bogus="1"/>';
|
| | | }
|
| | |
|
| | | // Fill box
|
| | | for (y2=y; y2<y+sd['rowspan']; y2++) {
|
| | | if (!grid[y2])
|
| | | grid[y2] = new Array();
|
| | | function getColRowSpan(td) {
|
| | | var colspan = inst.dom.getAttrib(td, "colspan");
|
| | | var rowspan = inst.dom.getAttrib(td, "rowspan");
|
| | |
|
| | | for (x2=xstart; x2<xstart+sd['colspan']; x2++)
|
| | | grid[y2][x2] = td;
|
| | | colspan = colspan == "" ? 1 : parseInt(colspan);
|
| | | rowspan = rowspan == "" ? 1 : parseInt(rowspan);
|
| | |
|
| | | return {colspan : colspan, rowspan : rowspan};
|
| | | }
|
| | |
|
| | | function getCellPos(grid, td) {
|
| | | var x, y;
|
| | |
|
| | | for (y=0; y<grid.length; y++) {
|
| | | for (x=0; x<grid[y].length; x++) {
|
| | | if (grid[y][x] == td)
|
| | | return {cellindex : x, rowindex : y};
|
| | | }
|
| | | }
|
| | |
|
| | | return null;
|
| | | }
|
| | |
|
| | | return grid;
|
| | | }
|
| | | function getCell(grid, row, col) {
|
| | | if (grid[row] && grid[row][col])
|
| | | return grid[row][col];
|
| | |
|
| | | function trimRow(table, tr, td, new_tr) {
|
| | | var grid = getTableGrid(table), cpos = getCellPos(grid, td);
|
| | | var cells, lastElm;
|
| | | return null;
|
| | | }
|
| | |
|
| | | // Time to crop away some
|
| | | if (new_tr.cells.length != tr.childNodes.length) {
|
| | | cells = tr.childNodes;
|
| | | lastElm = null;
|
| | | function getTableGrid(table) {
|
| | | var grid = [], rows = table.rows, x, y, td, sd, xstart, x2, y2;
|
| | |
|
| | | for (var x=0; td = getCell(grid, cpos.rowindex, x); x++) {
|
| | | var remove = true;
|
| | | var sd = getColRowSpan(td);
|
| | | for (y=0; y<rows.length; y++) {
|
| | | for (x=0; x<rows[y].cells.length; x++) {
|
| | | td = rows[y].cells[x];
|
| | | sd = getColRowSpan(td);
|
| | |
|
| | | // Remove due to rowspan
|
| | | if (inArray(cells, td)) {
|
| | | new_tr.childNodes[x]._delete = true;
|
| | | } else if ((lastElm == null || td != lastElm) && sd.colspan > 1) { // Remove due to colspan
|
| | | for (var i=x; i<x+td.colSpan; i++)
|
| | | new_tr.childNodes[i]._delete = true;
|
| | | // All ready filled
|
| | | for (xstart = x; grid[y] && grid[y][xstart]; xstart++) ;
|
| | |
|
| | | // Fill box
|
| | | for (y2=y; y2<y+sd['rowspan']; y2++) {
|
| | | if (!grid[y2])
|
| | | grid[y2] = [];
|
| | |
|
| | | for (x2=xstart; x2<xstart+sd['colspan']; x2++)
|
| | | grid[y2][x2] = td;
|
| | | }
|
| | | }
|
| | |
|
| | | if ((lastElm == null || td != lastElm) && sd.rowspan > 1)
|
| | | td.rowSpan = sd.rowspan + 1;
|
| | |
|
| | | lastElm = td;
|
| | | }
|
| | |
|
| | | deleteMarked(tableElm);
|
| | | }
|
| | | }
|
| | |
|
| | | function prevElm(node, name) {
|
| | | while ((node = node.previousSibling) != null) {
|
| | | if (node.nodeName == name)
|
| | | return node;
|
| | | return grid;
|
| | | }
|
| | |
|
| | | return null;
|
| | | }
|
| | | function trimRow(table, tr, td, new_tr) {
|
| | | var grid = getTableGrid(table), cpos = getCellPos(grid, td);
|
| | | var cells, lastElm;
|
| | |
|
| | | function nextElm(node, names) {
|
| | | var namesAr = names.split(',');
|
| | | // Time to crop away some
|
| | | if (new_tr.cells.length != tr.childNodes.length) {
|
| | | cells = tr.childNodes;
|
| | | lastElm = null;
|
| | |
|
| | | while ((node = node.nextSibling) != null) {
|
| | | for (var i=0; i<namesAr.length; i++) {
|
| | | if (node.nodeName.toLowerCase() == namesAr[i].toLowerCase() )
|
| | | for (var x=0; td = getCell(grid, cpos.rowindex, x); x++) {
|
| | | var remove = true;
|
| | | var sd = getColRowSpan(td);
|
| | |
|
| | | // Remove due to rowspan
|
| | | if (inArray(cells, td)) {
|
| | | new_tr.childNodes[x]._delete = true;
|
| | | } else if ((lastElm == null || td != lastElm) && sd.colspan > 1) { // Remove due to colspan
|
| | | for (var i=x; i<x+td.colSpan; i++)
|
| | | new_tr.childNodes[i]._delete = true;
|
| | | }
|
| | |
|
| | | if ((lastElm == null || td != lastElm) && sd.rowspan > 1)
|
| | | td.rowSpan = sd.rowspan + 1;
|
| | |
|
| | | lastElm = td;
|
| | | }
|
| | |
|
| | | deleteMarked(tableElm);
|
| | | }
|
| | | }
|
| | |
|
| | | function prevElm(node, name) {
|
| | | while ((node = node.previousSibling) != null) {
|
| | | if (node.nodeName == name)
|
| | | return node;
|
| | | }
|
| | |
|
| | | return null;
|
| | | }
|
| | |
|
| | | return null;
|
| | | }
|
| | | function nextElm(node, names) {
|
| | | var namesAr = names.split(',');
|
| | |
|
| | | function deleteMarked(tbl) {
|
| | | if (tbl.rows == 0)
|
| | | return;
|
| | |
|
| | | var tr = tbl.rows[0];
|
| | | do {
|
| | | var next = nextElm(tr, "TR");
|
| | |
|
| | | // Delete row
|
| | | if (tr._delete) {
|
| | | tr.parentNode.removeChild(tr);
|
| | | continue;
|
| | | }
|
| | |
|
| | | // Delete cells
|
| | | var td = tr.cells[0];
|
| | | if (td.cells > 1) {
|
| | | do {
|
| | | var nexttd = nextElm(td, "TD,TH");
|
| | |
|
| | | if (td._delete)
|
| | | td.parentNode.removeChild(td);
|
| | | } while ((td = nexttd) != null);
|
| | | }
|
| | | } while ((tr = next) != null);
|
| | | }
|
| | |
|
| | | function addRows(td_elm, tr_elm, rowspan) {
|
| | | // Add rows
|
| | | td_elm.rowSpan = 1;
|
| | | var trNext = nextElm(tr_elm, "TR");
|
| | | for (var i=1; i<rowspan && trNext; i++) {
|
| | | var newTD = doc.createElement("td");
|
| | | newTD.innerHTML = " ";
|
| | |
|
| | | if (tinyMCE.isMSIE)
|
| | | trNext.insertBefore(newTD, trNext.cells(td_elm.cellIndex));
|
| | | else
|
| | | trNext.insertBefore(newTD, trNext.cells[td_elm.cellIndex]);
|
| | |
|
| | | trNext = nextElm(trNext, "TR");
|
| | | }
|
| | | }
|
| | |
|
| | | function copyRow(doc, table, tr) {
|
| | | var grid = getTableGrid(table);
|
| | | var newTR = tr.cloneNode(false);
|
| | | var cpos = getCellPos(grid, tr.cells[0]);
|
| | | var lastCell = null;
|
| | | var tableBorder = tinyMCE.getAttrib(table, "border");
|
| | | var tdElm = null;
|
| | |
|
| | | for (var x=0; tdElm = getCell(grid, cpos.rowindex, x); x++) {
|
| | | var newTD = null;
|
| | |
|
| | | if (lastCell != tdElm) {
|
| | | for (var i=0; i<tr.cells.length; i++) {
|
| | | if (tdElm == tr.cells[i]) {
|
| | | newTD = tdElm.cloneNode(true);
|
| | | break;
|
| | | }
|
| | | while ((node = node.nextSibling) != null) {
|
| | | for (var i=0; i<namesAr.length; i++) {
|
| | | if (node.nodeName.toLowerCase() == namesAr[i].toLowerCase() )
|
| | | return node;
|
| | | }
|
| | | }
|
| | |
|
| | | if (newTD == null) {
|
| | | newTD = doc.createElement("td");
|
| | | newTD.innerHTML = " ";
|
| | | }
|
| | |
|
| | | // Reset col/row span
|
| | | newTD.colSpan = 1;
|
| | | newTD.rowSpan = 1;
|
| | |
|
| | | newTR.appendChild(newTD);
|
| | |
|
| | | lastCell = tdElm;
|
| | | return null;
|
| | | }
|
| | |
|
| | | return newTR;
|
| | | }
|
| | | function deleteMarked(tbl) {
|
| | | if (tbl.rows == 0)
|
| | | return;
|
| | |
|
| | | // ---- Commands -----
|
| | | var tr = tbl.rows[0];
|
| | | do {
|
| | | var next = nextElm(tr, "TR");
|
| | |
|
| | | // Handle commands
|
| | | switch (command) {
|
| | | case "mceTableRowProps":
|
| | | if (trElm == null)
|
| | | return true;
|
| | | // Delete row
|
| | | if (tr._delete) {
|
| | | tr.parentNode.removeChild(tr);
|
| | | continue;
|
| | | }
|
| | |
|
| | | if (user_interface) {
|
| | | // Setup template
|
| | | var template = new Array();
|
| | | // Delete cells
|
| | | var td = tr.cells[0];
|
| | | if (td.cells > 1) {
|
| | | do {
|
| | | var nexttd = nextElm(td, "TD,TH");
|
| | |
|
| | | template['file'] = '../../plugins/table/row.htm';
|
| | | template['width'] = 380;
|
| | | template['height'] = 295;
|
| | | if (td._delete)
|
| | | td.parentNode.removeChild(td);
|
| | | } while ((td = nexttd) != null);
|
| | | }
|
| | | } while ((tr = next) != null);
|
| | | }
|
| | |
|
| | | // Language specific width and height addons
|
| | | template['width'] += tinyMCE.getLang('lang_table_rowprops_delta_width', 0);
|
| | | template['height'] += tinyMCE.getLang('lang_table_rowprops_delta_height', 0);
|
| | | function addRows(td_elm, tr_elm, rowspan) {
|
| | | // Add rows
|
| | | td_elm.rowSpan = 1;
|
| | | var trNext = nextElm(tr_elm, "TR");
|
| | | for (var i=1; i<rowspan && trNext; i++) {
|
| | | var newTD = doc.createElement("td");
|
| | |
|
| | | // Open window
|
| | | tinyMCE.openWindow(template, {editor_id : inst.editorId, inline : "yes"});
|
| | | if (!tinymce.isIE)
|
| | | newTD.innerHTML = '<br mce_bogus="1"/>';
|
| | |
|
| | | if (tinymce.isIE)
|
| | | trNext.insertBefore(newTD, trNext.cells(td_elm.cellIndex));
|
| | | else
|
| | | trNext.insertBefore(newTD, trNext.cells[td_elm.cellIndex]);
|
| | |
|
| | | trNext = nextElm(trNext, "TR");
|
| | | }
|
| | | }
|
| | |
|
| | | return true;
|
| | | function copyRow(doc, table, tr) {
|
| | | var grid = getTableGrid(table);
|
| | | var newTR = tr.cloneNode(false);
|
| | | var cpos = getCellPos(grid, tr.cells[0]);
|
| | | var lastCell = null;
|
| | | var tableBorder = inst.dom.getAttrib(table, "border");
|
| | | var tdElm = null;
|
| | |
|
| | | case "mceTableCellProps":
|
| | | if (tdElm == null)
|
| | | return true;
|
| | | for (var x=0; tdElm = getCell(grid, cpos.rowindex, x); x++) {
|
| | | var newTD = null;
|
| | |
|
| | | if (user_interface) {
|
| | | // Setup template
|
| | | var template = new Array();
|
| | |
|
| | | template['file'] = '../../plugins/table/cell.htm';
|
| | | template['width'] = 380;
|
| | | template['height'] = 295;
|
| | |
|
| | | // Language specific width and height addons
|
| | | template['width'] += tinyMCE.getLang('lang_table_cellprops_delta_width', 0);
|
| | | template['height'] += tinyMCE.getLang('lang_table_cellprops_delta_height', 0);
|
| | |
|
| | | // Open window
|
| | | tinyMCE.openWindow(template, {editor_id : inst.editorId, inline : "yes"});
|
| | | }
|
| | |
|
| | | return true;
|
| | |
|
| | | case "mceInsertTable":
|
| | | if (user_interface) {
|
| | | // Setup template
|
| | | var template = new Array();
|
| | |
|
| | | template['file'] = '../../plugins/table/table.htm';
|
| | | template['width'] = 380;
|
| | | template['height'] = 295;
|
| | |
|
| | | // Language specific width and height addons
|
| | | template['width'] += tinyMCE.getLang('lang_table_table_delta_width', 0);
|
| | | template['height'] += tinyMCE.getLang('lang_table_table_delta_height', 0);
|
| | |
|
| | | // Open window
|
| | | tinyMCE.openWindow(template, {editor_id : inst.editorId, inline : "yes", action : value});
|
| | | }
|
| | |
|
| | | return true;
|
| | |
|
| | | case "mceTableDelete":
|
| | | var table = tinyMCE.getParentElement(inst.getFocusElement(), "table");
|
| | | if (table) {
|
| | | table.parentNode.removeChild(table);
|
| | | inst.repaint();
|
| | | }
|
| | | return true;
|
| | |
|
| | | case "mceTableSplitCells":
|
| | | case "mceTableMergeCells":
|
| | | case "mceTableInsertRowBefore":
|
| | | case "mceTableInsertRowAfter":
|
| | | case "mceTableDeleteRow":
|
| | | case "mceTableInsertColBefore":
|
| | | case "mceTableInsertColAfter":
|
| | | case "mceTableDeleteCol":
|
| | | case "mceTableCutRow":
|
| | | case "mceTableCopyRow":
|
| | | case "mceTablePasteRowBefore":
|
| | | case "mceTablePasteRowAfter":
|
| | | // No table just return (invalid command)
|
| | | if (!tableElm)
|
| | | return true;
|
| | |
|
| | | // Table has a tbody use that reference
|
| | | // Changed logic by ApTest 2005.07.12 (www.aptest.com)
|
| | | // Now lookk at the focused element and take its parentNode. That will be a tbody or a table.
|
| | | if (trElm && tableElm != trElm.parentNode)
|
| | | tableElm = trElm.parentNode;
|
| | |
|
| | | if (tableElm && trElm) {
|
| | | switch (command) {
|
| | | case "mceTableCutRow":
|
| | | if (!trElm || !tdElm)
|
| | | return true;
|
| | |
|
| | | inst.tableRowClipboard = copyRow(doc, tableElm, trElm);
|
| | | inst.execCommand("mceTableDeleteRow");
|
| | | break;
|
| | |
|
| | | case "mceTableCopyRow":
|
| | | if (!trElm || !tdElm)
|
| | | return true;
|
| | |
|
| | | inst.tableRowClipboard = copyRow(doc, tableElm, trElm);
|
| | | break;
|
| | |
|
| | | case "mceTablePasteRowBefore":
|
| | | if (!trElm || !tdElm)
|
| | | return true;
|
| | |
|
| | | var newTR = inst.tableRowClipboard.cloneNode(true);
|
| | |
|
| | | var prevTR = prevElm(trElm, "TR");
|
| | | if (prevTR != null)
|
| | | trimRow(tableElm, prevTR, prevTR.cells[0], newTR);
|
| | |
|
| | | trElm.parentNode.insertBefore(newTR, trElm);
|
| | | break;
|
| | |
|
| | | case "mceTablePasteRowAfter":
|
| | | if (!trElm || !tdElm)
|
| | | return true;
|
| | | |
| | | var nextTR = nextElm(trElm, "TR");
|
| | | var newTR = inst.tableRowClipboard.cloneNode(true);
|
| | |
|
| | | trimRow(tableElm, trElm, tdElm, newTR);
|
| | |
|
| | | if (nextTR == null)
|
| | | trElm.parentNode.appendChild(newTR);
|
| | | else
|
| | | nextTR.parentNode.insertBefore(newTR, nextTR);
|
| | |
|
| | | break;
|
| | |
|
| | | case "mceTableInsertRowBefore":
|
| | | if (!trElm || !tdElm)
|
| | | return true;
|
| | |
|
| | | var grid = getTableGrid(tableElm);
|
| | | var cpos = getCellPos(grid, tdElm);
|
| | | var newTR = doc.createElement("tr");
|
| | | var lastTDElm = null;
|
| | |
|
| | | cpos.rowindex--;
|
| | | if (cpos.rowindex < 0)
|
| | | cpos.rowindex = 0;
|
| | |
|
| | | // Create cells
|
| | | for (var x=0; tdElm = getCell(grid, cpos.rowindex, x); x++) {
|
| | | if (tdElm != lastTDElm) {
|
| | | var sd = getColRowSpan(tdElm);
|
| | |
|
| | | if (sd['rowspan'] == 1) {
|
| | | var newTD = doc.createElement("td");
|
| | |
|
| | | newTD.innerHTML = " ";
|
| | | newTD.colSpan = tdElm.colSpan;
|
| | |
|
| | | newTR.appendChild(newTD);
|
| | | } else
|
| | | tdElm.rowSpan = sd['rowspan'] + 1;
|
| | |
|
| | | lastTDElm = tdElm;
|
| | | }
|
| | | if (lastCell != tdElm) {
|
| | | for (var i=0; i<tr.cells.length; i++) {
|
| | | if (tdElm == tr.cells[i]) {
|
| | | newTD = tdElm.cloneNode(true);
|
| | | break;
|
| | | }
|
| | |
|
| | | trElm.parentNode.insertBefore(newTR, trElm);
|
| | |
|
| | | grid = getTableGrid(tableElm);
|
| | | inst.selection.selectNode(getCell(grid, cpos.rowindex + 1, cpos.cellindex), tinyMCE.isGecko, true); // Only collape on gecko
|
| | | break;
|
| | |
|
| | | case "mceTableInsertRowAfter":
|
| | | if (!trElm || !tdElm)
|
| | | return true;
|
| | |
|
| | | var grid = getTableGrid(tableElm);
|
| | | var cpos = getCellPos(grid, tdElm);
|
| | | var newTR = doc.createElement("tr");
|
| | | var lastTDElm = null;
|
| | |
|
| | | // Create cells
|
| | | for (var x=0; tdElm = getCell(grid, cpos.rowindex, x); x++) {
|
| | | if (tdElm != lastTDElm) {
|
| | | var sd = getColRowSpan(tdElm);
|
| | |
|
| | | if (sd['rowspan'] == 1) {
|
| | | var newTD = doc.createElement("td");
|
| | |
|
| | | newTD.innerHTML = " ";
|
| | | newTD.colSpan = tdElm.colSpan;
|
| | |
|
| | | newTR.appendChild(newTD);
|
| | | } else
|
| | | tdElm.rowSpan = sd['rowspan'] + 1;
|
| | |
|
| | | lastTDElm = tdElm;
|
| | | }
|
| | | }
|
| | |
|
| | | if (newTR.hasChildNodes()) {
|
| | | var nextTR = nextElm(trElm, "TR");
|
| | | if (nextTR)
|
| | | nextTR.parentNode.insertBefore(newTR, nextTR);
|
| | | else
|
| | | tableElm.appendChild(newTR);
|
| | | }
|
| | |
|
| | | grid = getTableGrid(tableElm);
|
| | | inst.selection.selectNode(getCell(grid, cpos.rowindex, cpos.cellindex), tinyMCE.isGecko, true); // Only collape on gecko
|
| | | break;
|
| | |
|
| | | case "mceTableDeleteRow":
|
| | | if (!trElm || !tdElm)
|
| | | return true;
|
| | |
|
| | | var grid = getTableGrid(tableElm);
|
| | | var cpos = getCellPos(grid, tdElm);
|
| | |
|
| | | // Only one row, remove whole table
|
| | | if (grid.length == 1) {
|
| | | tableElm = tinyMCE.getParentElement(tableElm, "table"); // Look for table instead of tbody
|
| | | tableElm.parentNode.removeChild(tableElm);
|
| | | return true;
|
| | | }
|
| | |
|
| | | // Move down row spanned cells
|
| | | var cells = trElm.cells;
|
| | | var nextTR = nextElm(trElm, "TR");
|
| | | for (var x=0; x<cells.length; x++) {
|
| | | if (cells[x].rowSpan > 1) {
|
| | | var newTD = cells[x].cloneNode(true);
|
| | | var sd = getColRowSpan(cells[x]);
|
| | |
|
| | | newTD.rowSpan = sd.rowspan - 1;
|
| | |
|
| | | var nextTD = nextTR.cells[x];
|
| | |
|
| | | if (nextTD == null)
|
| | | nextTR.appendChild(newTD);
|
| | | else
|
| | | nextTR.insertBefore(newTD, nextTD);
|
| | | }
|
| | | }
|
| | |
|
| | | // Delete cells
|
| | | var lastTDElm = null;
|
| | | for (var x=0; tdElm = getCell(grid, cpos.rowindex, x); x++) {
|
| | | if (tdElm != lastTDElm) {
|
| | | var sd = getColRowSpan(tdElm);
|
| | |
|
| | | if (sd.rowspan > 1) {
|
| | | tdElm.rowSpan = sd.rowspan - 1;
|
| | | } else {
|
| | | trElm = tdElm.parentNode;
|
| | |
|
| | | if (trElm.parentNode)
|
| | | trElm._delete = true;
|
| | | }
|
| | |
|
| | | lastTDElm = tdElm;
|
| | | }
|
| | | }
|
| | |
|
| | | deleteMarked(tableElm);
|
| | |
|
| | | cpos.rowindex--;
|
| | | if (cpos.rowindex < 0)
|
| | | cpos.rowindex = 0;
|
| | |
|
| | | // Recalculate grid and select
|
| | | grid = getTableGrid(tableElm);
|
| | | inst.selection.selectNode(getCell(grid, cpos.rowindex, 0), tinyMCE.isGecko, true); // Only collape on gecko
|
| | | break;
|
| | |
|
| | | case "mceTableInsertColBefore":
|
| | | if (!trElm || !tdElm)
|
| | | return true;
|
| | |
|
| | | var grid = getTableGrid(tableElm);
|
| | | var cpos = getCellPos(grid, tdElm);
|
| | | var lastTDElm = null;
|
| | |
|
| | | for (var y=0; tdElm = getCell(grid, y, cpos.cellindex); y++) {
|
| | | if (tdElm != lastTDElm) {
|
| | | var sd = getColRowSpan(tdElm);
|
| | |
|
| | | if (sd['colspan'] == 1) {
|
| | | var newTD = doc.createElement(tdElm.nodeName);
|
| | |
|
| | | newTD.innerHTML = " ";
|
| | | newTD.rowSpan = tdElm.rowSpan;
|
| | |
|
| | | tdElm.parentNode.insertBefore(newTD, tdElm);
|
| | | } else
|
| | | tdElm.colSpan++;
|
| | |
|
| | | lastTDElm = tdElm;
|
| | | }
|
| | | }
|
| | |
|
| | | grid = getTableGrid(tableElm);
|
| | | inst.selection.selectNode(getCell(grid, cpos.rowindex, cpos.cellindex + 1), tinyMCE.isGecko, true); // Only collape on gecko
|
| | | break;
|
| | |
|
| | | case "mceTableInsertColAfter":
|
| | | if (!trElm || !tdElm)
|
| | | return true;
|
| | |
|
| | | var grid = getTableGrid(tableElm);
|
| | | var cpos = getCellPos(grid, tdElm);
|
| | | var lastTDElm = null;
|
| | |
|
| | | for (var y=0; tdElm = getCell(grid, y, cpos.cellindex); y++) {
|
| | | if (tdElm != lastTDElm) {
|
| | | var sd = getColRowSpan(tdElm);
|
| | |
|
| | | if (sd['colspan'] == 1) {
|
| | | var newTD = doc.createElement(tdElm.nodeName);
|
| | |
|
| | | newTD.innerHTML = " ";
|
| | | newTD.rowSpan = tdElm.rowSpan;
|
| | |
|
| | | var nextTD = nextElm(tdElm, "TD,TH");
|
| | | if (nextTD == null)
|
| | | tdElm.parentNode.appendChild(newTD);
|
| | | else
|
| | | nextTD.parentNode.insertBefore(newTD, nextTD);
|
| | | } else
|
| | | tdElm.colSpan++;
|
| | |
|
| | | lastTDElm = tdElm;
|
| | | }
|
| | | }
|
| | |
|
| | | grid = getTableGrid(tableElm);
|
| | | inst.selection.selectNode(getCell(grid, cpos.rowindex, cpos.cellindex), tinyMCE.isGecko, true); // Only collape on gecko
|
| | | break;
|
| | |
|
| | | case "mceTableDeleteCol":
|
| | | if (!trElm || !tdElm)
|
| | | return true;
|
| | |
|
| | | var grid = getTableGrid(tableElm);
|
| | | var cpos = getCellPos(grid, tdElm);
|
| | | var lastTDElm = null;
|
| | |
|
| | | // Only one col, remove whole table
|
| | | if (grid.length > 1 && grid[0].length <= 1) {
|
| | | tableElm = tinyMCE.getParentElement(tableElm, "table"); // Look for table instead of tbody
|
| | | tableElm.parentNode.removeChild(tableElm);
|
| | | return true;
|
| | | }
|
| | |
|
| | | // Delete cells
|
| | | for (var y=0; tdElm = getCell(grid, y, cpos.cellindex); y++) {
|
| | | if (tdElm != lastTDElm) {
|
| | | var sd = getColRowSpan(tdElm);
|
| | |
|
| | | if (sd['colspan'] > 1)
|
| | | tdElm.colSpan = sd['colspan'] - 1;
|
| | | else {
|
| | | if (tdElm.parentNode)
|
| | | tdElm.parentNode.removeChild(tdElm);
|
| | | }
|
| | |
|
| | | lastTDElm = tdElm;
|
| | | }
|
| | | }
|
| | |
|
| | | cpos.cellindex--;
|
| | | if (cpos.cellindex < 0)
|
| | | cpos.cellindex = 0;
|
| | |
|
| | | // Recalculate grid and select
|
| | | grid = getTableGrid(tableElm);
|
| | | inst.selection.selectNode(getCell(grid, cpos.rowindex, 0), tinyMCE.isGecko, true); // Only collape on gecko
|
| | | break;
|
| | |
|
| | | case "mceTableSplitCells":
|
| | | if (!trElm || !tdElm)
|
| | | return true;
|
| | |
|
| | | var spandata = getColRowSpan(tdElm);
|
| | |
|
| | | var colspan = spandata["colspan"];
|
| | | var rowspan = spandata["rowspan"];
|
| | |
|
| | | // Needs splitting
|
| | | if (colspan > 1 || rowspan > 1) {
|
| | | // Generate cols
|
| | | tdElm.colSpan = 1;
|
| | | for (var i=1; i<colspan; i++) {
|
| | | var newTD = doc.createElement("td");
|
| | |
|
| | | newTD.innerHTML = " ";
|
| | |
|
| | | trElm.insertBefore(newTD, nextElm(tdElm, "TD,TH"));
|
| | |
|
| | | if (rowspan > 1)
|
| | | addRows(newTD, trElm, rowspan);
|
| | | }
|
| | |
|
| | | addRows(tdElm, trElm, rowspan);
|
| | | }
|
| | | }
|
| | |
|
| | | // Apply visual aids
|
| | | tableElm = tinyMCE.getParentElement(inst.getFocusElement(), "table");
|
| | | break;
|
| | | if (newTD == null) {
|
| | | newTD = doc.createElement("td");
|
| | |
|
| | | case "mceTableMergeCells":
|
| | | var rows = new Array();
|
| | | var sel = inst.getSel();
|
| | | var grid = getTableGrid(tableElm);
|
| | | if (!tinymce.isIE)
|
| | | newTD.innerHTML = '<br mce_bogus="1"/>';
|
| | | }
|
| | |
|
| | | if (tinyMCE.isMSIE || sel.rangeCount == 1) {
|
| | | if (user_interface) {
|
| | | // Setup template
|
| | | var template = new Array();
|
| | | var sp = getColRowSpan(tdElm);
|
| | | // Reset col/row span
|
| | | newTD.colSpan = 1;
|
| | | newTD.rowSpan = 1;
|
| | |
|
| | | template['file'] = '../../plugins/table/merge_cells.htm';
|
| | | template['width'] = 250;
|
| | | template['height'] = 105 + (tinyMCE.isNS7 ? 25 : 0);
|
| | | newTR.appendChild(newTD);
|
| | |
|
| | | // Language specific width and height addons
|
| | | template['width'] += tinyMCE.getLang('lang_table_merge_cells_delta_width', 0);
|
| | | template['height'] += tinyMCE.getLang('lang_table_merge_cells_delta_height', 0);
|
| | | lastCell = tdElm;
|
| | | }
|
| | |
|
| | | // Open window
|
| | | tinyMCE.openWindow(template, {editor_id : inst.editorId, inline : "yes", action : "update", numcols : sp.colspan, numrows : sp.rowspan});
|
| | | return newTR;
|
| | | }
|
| | |
|
| | | return true;
|
| | | } else {
|
| | | var numRows = parseInt(value['numrows']);
|
| | | var numCols = parseInt(value['numcols']);
|
| | | // ---- Commands -----
|
| | |
|
| | | // Handle commands
|
| | | switch (command) {
|
| | | case "mceTableRowProps":
|
| | | if (trElm == null)
|
| | | return true;
|
| | |
|
| | | if (user_interface) {
|
| | | inst.windowManager.open({
|
| | | url : url + '/row.htm',
|
| | | width : 400 + parseInt(inst.getLang('table.rowprops_delta_width', 0)),
|
| | | height : 295 + parseInt(inst.getLang('table.rowprops_delta_height', 0)),
|
| | | inline : 1
|
| | | }, {
|
| | | plugin_url : url
|
| | | });
|
| | | }
|
| | |
|
| | | return true;
|
| | |
|
| | | case "mceTableCellProps":
|
| | | if (tdElm == null)
|
| | | return true;
|
| | |
|
| | | if (user_interface) {
|
| | | inst.windowManager.open({
|
| | | url : url + '/cell.htm',
|
| | | width : 400 + parseInt(inst.getLang('table.cellprops_delta_width', 0)),
|
| | | height : 295 + parseInt(inst.getLang('table.cellprops_delta_height', 0)),
|
| | | inline : 1
|
| | | }, {
|
| | | plugin_url : url
|
| | | });
|
| | | }
|
| | |
|
| | | return true;
|
| | |
|
| | | case "mceInsertTable":
|
| | | if (user_interface) {
|
| | | inst.windowManager.open({
|
| | | url : url + '/table.htm',
|
| | | width : 400 + parseInt(inst.getLang('table.table_delta_width', 0)),
|
| | | height : 320 + parseInt(inst.getLang('table.table_delta_height', 0)),
|
| | | inline : 1
|
| | | }, {
|
| | | plugin_url : url,
|
| | | action : value ? value.action : 0
|
| | | });
|
| | | }
|
| | |
|
| | | return true;
|
| | |
|
| | | case "mceTableDelete":
|
| | | var table = inst.dom.getParent(inst.selection.getNode(), "table");
|
| | | if (table) {
|
| | | table.parentNode.removeChild(table);
|
| | | inst.execCommand('mceRepaint');
|
| | | }
|
| | | return true;
|
| | |
|
| | | case "mceTableSplitCells":
|
| | | case "mceTableMergeCells":
|
| | | case "mceTableInsertRowBefore":
|
| | | case "mceTableInsertRowAfter":
|
| | | case "mceTableDeleteRow":
|
| | | case "mceTableInsertColBefore":
|
| | | case "mceTableInsertColAfter":
|
| | | case "mceTableDeleteCol":
|
| | | case "mceTableCutRow":
|
| | | case "mceTableCopyRow":
|
| | | case "mceTablePasteRowBefore":
|
| | | case "mceTablePasteRowAfter":
|
| | | // No table just return (invalid command)
|
| | | if (!tableElm)
|
| | | return true;
|
| | |
|
| | | // Table has a tbody use that reference
|
| | | // Changed logic by ApTest 2005.07.12 (www.aptest.com)
|
| | | // Now lookk at the focused element and take its parentNode. That will be a tbody or a table.
|
| | | if (trElm && tableElm != trElm.parentNode)
|
| | | tableElm = trElm.parentNode;
|
| | |
|
| | | if (tableElm && trElm) {
|
| | | switch (command) {
|
| | | case "mceTableCutRow":
|
| | | if (!trElm || !tdElm)
|
| | | return true;
|
| | |
|
| | | inst.tableRowClipboard = copyRow(doc, tableElm, trElm);
|
| | | inst.execCommand("mceTableDeleteRow");
|
| | | break;
|
| | |
|
| | | case "mceTableCopyRow":
|
| | | if (!trElm || !tdElm)
|
| | | return true;
|
| | |
|
| | | inst.tableRowClipboard = copyRow(doc, tableElm, trElm);
|
| | | break;
|
| | |
|
| | | case "mceTablePasteRowBefore":
|
| | | if (!trElm || !tdElm)
|
| | | return true;
|
| | |
|
| | | var newTR = inst.tableRowClipboard.cloneNode(true);
|
| | |
|
| | | var prevTR = prevElm(trElm, "TR");
|
| | | if (prevTR != null)
|
| | | trimRow(tableElm, prevTR, prevTR.cells[0], newTR);
|
| | |
|
| | | trElm.parentNode.insertBefore(newTR, trElm);
|
| | | break;
|
| | |
|
| | | case "mceTablePasteRowAfter":
|
| | | if (!trElm || !tdElm)
|
| | | return true;
|
| | | |
| | | var nextTR = nextElm(trElm, "TR");
|
| | | var newTR = inst.tableRowClipboard.cloneNode(true);
|
| | |
|
| | | trimRow(tableElm, trElm, tdElm, newTR);
|
| | |
|
| | | if (nextTR == null)
|
| | | trElm.parentNode.appendChild(newTR);
|
| | | else
|
| | | nextTR.parentNode.insertBefore(newTR, nextTR);
|
| | |
|
| | | break;
|
| | |
|
| | | case "mceTableInsertRowBefore":
|
| | | if (!trElm || !tdElm)
|
| | | return true;
|
| | |
|
| | | var grid = getTableGrid(tableElm);
|
| | | var cpos = getCellPos(grid, tdElm);
|
| | | var newTR = doc.createElement("tr");
|
| | | var lastTDElm = null;
|
| | |
|
| | | cpos.rowindex--;
|
| | | if (cpos.rowindex < 0)
|
| | | cpos.rowindex = 0;
|
| | |
|
| | | // Create cells
|
| | | for (var x=0; tdElm = getCell(grid, cpos.rowindex, x); x++) {
|
| | | if (tdElm != lastTDElm) {
|
| | | var sd = getColRowSpan(tdElm);
|
| | |
|
| | | if (sd['rowspan'] == 1) {
|
| | | var newTD = doc.createElement("td");
|
| | |
|
| | | if (!tinymce.isIE)
|
| | | newTD.innerHTML = '<br mce_bogus="1"/>';
|
| | |
|
| | | newTD.colSpan = tdElm.colSpan;
|
| | |
|
| | | newTR.appendChild(newTD);
|
| | | } else
|
| | | tdElm.rowSpan = sd['rowspan'] + 1;
|
| | |
|
| | | lastTDElm = tdElm;
|
| | | }
|
| | | }
|
| | |
|
| | | trElm.parentNode.insertBefore(newTR, trElm);
|
| | | select(0, 1);
|
| | | break;
|
| | |
|
| | | case "mceTableInsertRowAfter":
|
| | | if (!trElm || !tdElm)
|
| | | return true;
|
| | |
|
| | | var grid = getTableGrid(tableElm);
|
| | | var cpos = getCellPos(grid, tdElm);
|
| | | var newTR = doc.createElement("tr");
|
| | | var lastTDElm = null;
|
| | |
|
| | | // Create cells
|
| | | for (var x=0; tdElm = getCell(grid, cpos.rowindex, x); x++) {
|
| | | if (tdElm != lastTDElm) {
|
| | | var sd = getColRowSpan(tdElm);
|
| | |
|
| | | if (sd['rowspan'] == 1) {
|
| | | var newTD = doc.createElement("td");
|
| | |
|
| | | if (!tinymce.isIE)
|
| | | newTD.innerHTML = '<br mce_bogus="1"/>';
|
| | |
|
| | | newTD.colSpan = tdElm.colSpan;
|
| | |
|
| | | newTR.appendChild(newTD);
|
| | | } else
|
| | | tdElm.rowSpan = sd['rowspan'] + 1;
|
| | |
|
| | | lastTDElm = tdElm;
|
| | | }
|
| | | }
|
| | |
|
| | | if (newTR.hasChildNodes()) {
|
| | | var nextTR = nextElm(trElm, "TR");
|
| | | if (nextTR)
|
| | | nextTR.parentNode.insertBefore(newTR, nextTR);
|
| | | else
|
| | | tableElm.appendChild(newTR);
|
| | | }
|
| | |
|
| | | select(0, 1);
|
| | | break;
|
| | |
|
| | | case "mceTableDeleteRow":
|
| | | if (!trElm || !tdElm)
|
| | | return true;
|
| | |
|
| | | var grid = getTableGrid(tableElm);
|
| | | var cpos = getCellPos(grid, tdElm);
|
| | |
|
| | | if (("" + numRows) == "NaN")
|
| | | numRows = 1;
|
| | | // Only one row, remove whole table
|
| | | if (grid.length == 1) {
|
| | | inst.dom.remove(inst.dom.getParent(tableElm, "table"));
|
| | | return true;
|
| | | }
|
| | |
|
| | | if (("" + numCols) == "NaN")
|
| | | numCols = 1;
|
| | | // Move down row spanned cells
|
| | | var cells = trElm.cells;
|
| | | var nextTR = nextElm(trElm, "TR");
|
| | | for (var x=0; x<cells.length; x++) {
|
| | | if (cells[x].rowSpan > 1) {
|
| | | var newTD = cells[x].cloneNode(true);
|
| | | var sd = getColRowSpan(cells[x]);
|
| | |
|
| | | newTD.rowSpan = sd.rowspan - 1;
|
| | |
|
| | | var nextTD = nextTR.cells[x];
|
| | |
|
| | | if (nextTD == null)
|
| | | nextTR.appendChild(newTD);
|
| | | else
|
| | | nextTR.insertBefore(newTD, nextTD);
|
| | | }
|
| | | }
|
| | |
|
| | | // Delete cells
|
| | | var lastTDElm = null;
|
| | | for (var x=0; tdElm = getCell(grid, cpos.rowindex, x); x++) {
|
| | | if (tdElm != lastTDElm) {
|
| | | var sd = getColRowSpan(tdElm);
|
| | |
|
| | | if (sd.rowspan > 1) {
|
| | | tdElm.rowSpan = sd.rowspan - 1;
|
| | | } else {
|
| | | trElm = tdElm.parentNode;
|
| | |
|
| | | if (trElm.parentNode)
|
| | | trElm._delete = true;
|
| | | }
|
| | |
|
| | | lastTDElm = tdElm;
|
| | | }
|
| | | }
|
| | |
|
| | | deleteMarked(tableElm);
|
| | |
|
| | | select(0, -1);
|
| | | break;
|
| | |
|
| | | case "mceTableInsertColBefore":
|
| | | if (!trElm || !tdElm)
|
| | | return true;
|
| | |
|
| | | var grid = getTableGrid(tableElm);
|
| | | var cpos = getCellPos(grid, tdElm);
|
| | | var lastTDElm = null;
|
| | |
|
| | | for (var y=0; tdElm = getCell(grid, y, cpos.cellindex); y++) {
|
| | | if (tdElm != lastTDElm) {
|
| | | var sd = getColRowSpan(tdElm);
|
| | |
|
| | | if (sd['colspan'] == 1) {
|
| | | var newTD = doc.createElement(tdElm.nodeName);
|
| | |
|
| | | if (!tinymce.isIE)
|
| | | newTD.innerHTML = '<br mce_bogus="1"/>';
|
| | |
|
| | | newTD.rowSpan = tdElm.rowSpan;
|
| | |
|
| | | tdElm.parentNode.insertBefore(newTD, tdElm);
|
| | | } else
|
| | | tdElm.colSpan++;
|
| | |
|
| | | lastTDElm = tdElm;
|
| | | }
|
| | | }
|
| | |
|
| | | select();
|
| | | break;
|
| | |
|
| | | case "mceTableInsertColAfter":
|
| | | if (!trElm || !tdElm)
|
| | | return true;
|
| | |
|
| | | var grid = getTableGrid(tableElm);
|
| | | var cpos = getCellPos(grid, tdElm);
|
| | | var lastTDElm = null;
|
| | |
|
| | | for (var y=0; tdElm = getCell(grid, y, cpos.cellindex); y++) {
|
| | | if (tdElm != lastTDElm) {
|
| | | var sd = getColRowSpan(tdElm);
|
| | |
|
| | | if (sd['colspan'] == 1) {
|
| | | var newTD = doc.createElement(tdElm.nodeName);
|
| | |
|
| | | if (!tinymce.isIE)
|
| | | newTD.innerHTML = '<br mce_bogus="1"/>';
|
| | |
|
| | | newTD.rowSpan = tdElm.rowSpan;
|
| | |
|
| | | var nextTD = nextElm(tdElm, "TD,TH");
|
| | | if (nextTD == null)
|
| | | tdElm.parentNode.appendChild(newTD);
|
| | | else
|
| | | nextTD.parentNode.insertBefore(newTD, nextTD);
|
| | | } else
|
| | | tdElm.colSpan++;
|
| | |
|
| | | lastTDElm = tdElm;
|
| | | }
|
| | | }
|
| | |
|
| | | select(1);
|
| | | break;
|
| | |
|
| | | case "mceTableDeleteCol":
|
| | | if (!trElm || !tdElm)
|
| | | return true;
|
| | |
|
| | | var grid = getTableGrid(tableElm);
|
| | | var cpos = getCellPos(grid, tdElm);
|
| | | var lastTDElm = null;
|
| | |
|
| | | // Only one col, remove whole table
|
| | | if (grid.length > 1 && grid[0].length <= 1) {
|
| | | inst.dom.remove(inst.dom.getParent(tableElm, "table"));
|
| | | return true;
|
| | | }
|
| | |
|
| | | // Delete cells
|
| | | for (var y=0; tdElm = getCell(grid, y, cpos.cellindex); y++) {
|
| | | if (tdElm != lastTDElm) {
|
| | | var sd = getColRowSpan(tdElm);
|
| | |
|
| | | if (sd['colspan'] > 1)
|
| | | tdElm.colSpan = sd['colspan'] - 1;
|
| | | else {
|
| | | if (tdElm.parentNode)
|
| | | tdElm.parentNode.removeChild(tdElm);
|
| | | }
|
| | |
|
| | | lastTDElm = tdElm;
|
| | | }
|
| | | }
|
| | |
|
| | | select(-1);
|
| | | break;
|
| | |
|
| | | case "mceTableSplitCells":
|
| | | if (!trElm || !tdElm)
|
| | | return true;
|
| | |
|
| | | var spandata = getColRowSpan(tdElm);
|
| | |
|
| | | var colspan = spandata["colspan"];
|
| | | var rowspan = spandata["rowspan"];
|
| | |
|
| | | // Needs splitting
|
| | | if (colspan > 1 || rowspan > 1) {
|
| | | // Generate cols
|
| | | tdElm.colSpan = 1;
|
| | | for (var i=1; i<colspan; i++) {
|
| | | var newTD = doc.createElement("td");
|
| | |
|
| | | if (!tinymce.isIE)
|
| | | newTD.innerHTML = '<br mce_bogus="1"/>';
|
| | |
|
| | | trElm.insertBefore(newTD, nextElm(tdElm, "TD,TH"));
|
| | |
|
| | | if (rowspan > 1)
|
| | | addRows(newTD, trElm, rowspan);
|
| | | }
|
| | |
|
| | | addRows(tdElm, trElm, rowspan);
|
| | | }
|
| | |
|
| | | // Apply visual aids
|
| | | tableElm = inst.dom.getParent(inst.selection.getNode(), "table");
|
| | | break;
|
| | |
|
| | | case "mceTableMergeCells":
|
| | | var rows = [];
|
| | | var sel = inst.selection.getSel();
|
| | | var grid = getTableGrid(tableElm);
|
| | |
|
| | | if (tinymce.isIE || sel.rangeCount == 1) {
|
| | | if (user_interface) {
|
| | | // Setup template
|
| | | var sp = getColRowSpan(tdElm);
|
| | |
|
| | | inst.windowManager.open({
|
| | | url : url + '/merge_cells.htm',
|
| | | width : 240 + parseInt(inst.getLang('table.merge_cells_delta_width', 0)),
|
| | | height : 110 + parseInt(inst.getLang('table.merge_cells_delta_height', 0)),
|
| | | inline : 1
|
| | | }, {
|
| | | action : "update",
|
| | | numcols : sp.colspan,
|
| | | numrows : sp.rowspan,
|
| | | plugin_url : url
|
| | | });
|
| | |
|
| | | return true;
|
| | | } else {
|
| | | var numRows = parseInt(value['numrows']);
|
| | | var numCols = parseInt(value['numcols']);
|
| | | var cpos = getCellPos(grid, tdElm);
|
| | |
|
| | | if (("" + numRows) == "NaN")
|
| | | numRows = 1;
|
| | |
|
| | | if (("" + numCols) == "NaN")
|
| | | numCols = 1;
|
| | |
|
| | | // Get rows and cells
|
| | | var tRows = tableElm.rows;
|
| | | for (var y=cpos.rowindex; y<grid.length; y++) {
|
| | | var rowCells = [];
|
| | |
|
| | | for (var x=cpos.cellindex; x<grid[y].length; x++) {
|
| | | var td = getCell(grid, y, x);
|
| | |
|
| | | if (td && !inArray(rows, td) && !inArray(rowCells, td)) {
|
| | | var cp = getCellPos(grid, td);
|
| | |
|
| | | // Within range
|
| | | if (cp.cellindex < cpos.cellindex+numCols && cp.rowindex < cpos.rowindex+numRows)
|
| | | rowCells[rowCells.length] = td;
|
| | | }
|
| | | }
|
| | |
|
| | | if (rowCells.length > 0)
|
| | | rows[rows.length] = rowCells;
|
| | |
|
| | | var td = getCell(grid, cpos.rowindex, cpos.cellindex);
|
| | | each(ed.dom.select('br', td), function(e, i) {
|
| | | if (i > 0 && ed.dom.getAttrib('mce_bogus'))
|
| | | ed.dom.remove(e);
|
| | | });
|
| | | }
|
| | |
|
| | | //return true;
|
| | | }
|
| | | } else {
|
| | | var cells = [];
|
| | | var sel = inst.selection.getSel();
|
| | | var lastTR = null;
|
| | | var curRow = null;
|
| | | var x1 = -1, y1 = -1, x2, y2;
|
| | |
|
| | | // Only one cell selected, whats the point?
|
| | | if (sel.rangeCount < 2)
|
| | | return true;
|
| | |
|
| | | // Get all selected cells
|
| | | for (var i=0; i<sel.rangeCount; i++) {
|
| | | var rng = sel.getRangeAt(i);
|
| | | var tdElm = rng.startContainer.childNodes[rng.startOffset];
|
| | |
|
| | | if (!tdElm)
|
| | | break;
|
| | |
|
| | | if (tdElm.nodeName == "TD")
|
| | | cells[cells.length] = tdElm;
|
| | | }
|
| | |
|
| | | // Get rows and cells
|
| | | var tRows = tableElm.rows;
|
| | | for (var y=cpos.rowindex; y<grid.length; y++) {
|
| | | var rowCells = new Array();
|
| | | for (var y=0; y<tRows.length; y++) {
|
| | | var rowCells = [];
|
| | |
|
| | | for (var x=cpos.cellindex; x<grid[y].length; x++) {
|
| | | var td = getCell(grid, y, x);
|
| | | for (var x=0; x<tRows[y].cells.length; x++) {
|
| | | var td = tRows[y].cells[x];
|
| | |
|
| | | if (td && !inArray(rows, td) && !inArray(rowCells, td)) {
|
| | | var cp = getCellPos(grid, td);
|
| | |
|
| | | // Within range
|
| | | if (cp.cellindex < cpos.cellindex+numCols && cp.rowindex < cpos.rowindex+numRows)
|
| | | for (var i=0; i<cells.length; i++) {
|
| | | if (td == cells[i]) {
|
| | | rowCells[rowCells.length] = td;
|
| | | }
|
| | | }
|
| | | }
|
| | |
|
| | |
| | | rows[rows.length] = rowCells;
|
| | | }
|
| | |
|
| | | //return true;
|
| | | }
|
| | | } else {
|
| | | var cells = new Array();
|
| | | var sel = inst.getSel();
|
| | | var lastTR = null;
|
| | | var curRow = null;
|
| | | var x1 = -1, y1 = -1, x2, y2;
|
| | | // Find selected cells in grid and box
|
| | | var curRow = [];
|
| | | var lastTR = null;
|
| | | for (var y=0; y<grid.length; y++) {
|
| | | for (var x=0; x<grid[y].length; x++) {
|
| | | grid[y][x]._selected = false;
|
| | |
|
| | | // Only one cell selected, whats the point?
|
| | | if (sel.rangeCount < 2)
|
| | | return true;
|
| | | for (var i=0; i<cells.length; i++) {
|
| | | if (grid[y][x] == cells[i]) {
|
| | | // Get start pos
|
| | | if (x1 == -1) {
|
| | | x1 = x;
|
| | | y1 = y;
|
| | | }
|
| | |
|
| | | // Get all selected cells
|
| | | for (var i=0; i<sel.rangeCount; i++) {
|
| | | var rng = sel.getRangeAt(i);
|
| | | var tdElm = rng.startContainer.childNodes[rng.startOffset];
|
| | | // Get end pos
|
| | | x2 = x;
|
| | | y2 = y;
|
| | |
|
| | | if (!tdElm)
|
| | | break;
|
| | |
|
| | | if (tdElm.nodeName == "TD")
|
| | | cells[cells.length] = tdElm;
|
| | | }
|
| | |
|
| | | // Get rows and cells
|
| | | var tRows = tableElm.rows;
|
| | | for (var y=0; y<tRows.length; y++) {
|
| | | var rowCells = new Array();
|
| | |
|
| | | for (var x=0; x<tRows[y].cells.length; x++) {
|
| | | var td = tRows[y].cells[x];
|
| | |
|
| | | for (var i=0; i<cells.length; i++) {
|
| | | if (td == cells[i]) {
|
| | | rowCells[rowCells.length] = td;
|
| | | }
|
| | | }
|
| | | }
|
| | |
|
| | | if (rowCells.length > 0)
|
| | | rows[rows.length] = rowCells;
|
| | | }
|
| | |
|
| | | // Find selected cells in grid and box
|
| | | var curRow = new Array();
|
| | | var lastTR = null;
|
| | | for (var y=0; y<grid.length; y++) {
|
| | | for (var x=0; x<grid[y].length; x++) {
|
| | | grid[y][x]._selected = false;
|
| | |
|
| | | for (var i=0; i<cells.length; i++) {
|
| | | if (grid[y][x] == cells[i]) {
|
| | | // Get start pos
|
| | | if (x1 == -1) {
|
| | | x1 = x;
|
| | | y1 = y;
|
| | | grid[y][x]._selected = true;
|
| | | }
|
| | | }
|
| | | }
|
| | | }
|
| | |
|
| | | // Get end pos
|
| | | x2 = x;
|
| | | y2 = y;
|
| | |
|
| | | grid[y][x]._selected = true;
|
| | | // Is there gaps, if so deny
|
| | | for (var y=y1; y<=y2; y++) {
|
| | | for (var x=x1; x<=x2; x++) {
|
| | | if (!grid[y][x]._selected) {
|
| | | alert("Invalid selection for merge.");
|
| | | return true;
|
| | | }
|
| | | }
|
| | | }
|
| | | }
|
| | |
|
| | | // Is there gaps, if so deny
|
| | | for (var y=y1; y<=y2; y++) {
|
| | | for (var x=x1; x<=x2; x++) {
|
| | | if (!grid[y][x]._selected) {
|
| | | // Validate selection and get total rowspan and colspan
|
| | | var rowSpan = 1, colSpan = 1;
|
| | |
|
| | | // Validate horizontal and get total colspan
|
| | | var lastRowSpan = -1;
|
| | | for (var y=0; y<rows.length; y++) {
|
| | | var rowColSpan = 0;
|
| | |
|
| | | for (var x=0; x<rows[y].length; x++) {
|
| | | var sd = getColRowSpan(rows[y][x]);
|
| | |
|
| | | rowColSpan += sd['colspan'];
|
| | |
|
| | | if (lastRowSpan != -1 && sd['rowspan'] != lastRowSpan) {
|
| | | alert("Invalid selection for merge.");
|
| | | return true;
|
| | | }
|
| | | }
|
| | | }
|
| | | }
|
| | |
|
| | | // Validate selection and get total rowspan and colspan
|
| | | var rowSpan = 1, colSpan = 1;
|
| | |
|
| | | // Validate horizontal and get total colspan
|
| | | var lastRowSpan = -1;
|
| | | for (var y=0; y<rows.length; y++) {
|
| | | var rowColSpan = 0;
|
| | |
|
| | | for (var x=0; x<rows[y].length; x++) {
|
| | | var sd = getColRowSpan(rows[y][x]);
|
| | |
|
| | | rowColSpan += sd['colspan'];
|
| | |
|
| | | if (lastRowSpan != -1 && sd['rowspan'] != lastRowSpan) {
|
| | | alert("Invalid selection for merge.");
|
| | | return true;
|
| | | lastRowSpan = sd['rowspan'];
|
| | | }
|
| | |
|
| | | lastRowSpan = sd['rowspan'];
|
| | | if (rowColSpan > colSpan)
|
| | | colSpan = rowColSpan;
|
| | |
|
| | | lastRowSpan = -1;
|
| | | }
|
| | |
|
| | | if (rowColSpan > colSpan)
|
| | | colSpan = rowColSpan;
|
| | | // Validate vertical and get total rowspan
|
| | | var lastColSpan = -1;
|
| | | for (var x=0; x<rows[0].length; x++) {
|
| | | var colRowSpan = 0;
|
| | |
|
| | | lastRowSpan = -1;
|
| | | }
|
| | | for (var y=0; y<rows.length; y++) {
|
| | | var sd = getColRowSpan(rows[y][x]);
|
| | |
|
| | | // Validate vertical and get total rowspan
|
| | | var lastColSpan = -1;
|
| | | for (var x=0; x<rows[0].length; x++) {
|
| | | var colRowSpan = 0;
|
| | | colRowSpan += sd['rowspan'];
|
| | |
|
| | | if (lastColSpan != -1 && sd['colspan'] != lastColSpan) {
|
| | | alert("Invalid selection for merge.");
|
| | | return true;
|
| | | }
|
| | |
|
| | | lastColSpan = sd['colspan'];
|
| | | }
|
| | |
|
| | | if (colRowSpan > rowSpan)
|
| | | rowSpan = colRowSpan;
|
| | |
|
| | | lastColSpan = -1;
|
| | | }
|
| | |
|
| | | // Setup td
|
| | | tdElm = rows[0][0];
|
| | | tdElm.rowSpan = rowSpan;
|
| | | tdElm.colSpan = colSpan;
|
| | |
|
| | | // Merge cells
|
| | | for (var y=0; y<rows.length; y++) {
|
| | | var sd = getColRowSpan(rows[y][x]);
|
| | | for (var x=0; x<rows[y].length; x++) {
|
| | | var html = rows[y][x].innerHTML;
|
| | | var chk = html.replace(/[ \t\r\n]/g, "");
|
| | |
|
| | | colRowSpan += sd['rowspan'];
|
| | | if (chk != "<br/>" && chk != "<br>" && chk != '<br mce_bogus="1"/>' && (x+y > 0))
|
| | | tdElm.innerHTML += html;
|
| | |
|
| | | if (lastColSpan != -1 && sd['colspan'] != lastColSpan) {
|
| | | alert("Invalid selection for merge.");
|
| | | return true;
|
| | | }
|
| | | // Not current cell
|
| | | if (rows[y][x] != tdElm && !rows[y][x]._deleted) {
|
| | | var cpos = getCellPos(grid, rows[y][x]);
|
| | | var tr = rows[y][x].parentNode;
|
| | |
|
| | | lastColSpan = sd['colspan'];
|
| | | }
|
| | | tr.removeChild(rows[y][x]);
|
| | | rows[y][x]._deleted = true;
|
| | |
|
| | | if (colRowSpan > rowSpan)
|
| | | rowSpan = colRowSpan;
|
| | | // Empty TR, remove it
|
| | | if (!tr.hasChildNodes()) {
|
| | | tr.parentNode.removeChild(tr);
|
| | |
|
| | | lastColSpan = -1;
|
| | | }
|
| | | var lastCell = null;
|
| | | for (var x=0; cellElm = getCell(grid, cpos.rowindex, x); x++) {
|
| | | if (cellElm != lastCell && cellElm.rowSpan > 1)
|
| | | cellElm.rowSpan--;
|
| | |
|
| | | // Setup td
|
| | | tdElm = rows[0][0];
|
| | | tdElm.rowSpan = rowSpan;
|
| | | tdElm.colSpan = colSpan;
|
| | | lastCell = cellElm;
|
| | | }
|
| | |
|
| | | // Merge cells
|
| | | for (var y=0; y<rows.length; y++) {
|
| | | for (var x=0; x<rows[y].length; x++) {
|
| | | var html = rows[y][x].innerHTML;
|
| | | var chk = tinyMCE.regexpReplace(html, "[ \t\r\n]", "");
|
| | |
|
| | | if (chk != "<br/>" && chk != "<br>" && chk != " " && (x+y > 0))
|
| | | tdElm.innerHTML += html;
|
| | |
|
| | | // Not current cell
|
| | | if (rows[y][x] != tdElm && !rows[y][x]._deleted) {
|
| | | var cpos = getCellPos(grid, rows[y][x]);
|
| | | var tr = rows[y][x].parentNode;
|
| | |
|
| | | tr.removeChild(rows[y][x]);
|
| | | rows[y][x]._deleted = true;
|
| | |
|
| | | // Empty TR, remove it
|
| | | if (!tr.hasChildNodes()) {
|
| | | tr.parentNode.removeChild(tr);
|
| | |
|
| | | var lastCell = null;
|
| | | for (var x=0; cellElm = getCell(grid, cpos.rowindex, x); x++) {
|
| | | if (cellElm != lastCell && cellElm.rowSpan > 1)
|
| | | cellElm.rowSpan--;
|
| | |
|
| | | lastCell = cellElm;
|
| | | if (tdElm.rowSpan > 1)
|
| | | tdElm.rowSpan--;
|
| | | }
|
| | |
|
| | | if (tdElm.rowSpan > 1)
|
| | | tdElm.rowSpan--;
|
| | | }
|
| | | }
|
| | | }
|
| | |
|
| | | // Remove all but one bogus br
|
| | | each(ed.dom.select('br', tdElm), function(e, i) {
|
| | | if (i > 0 && ed.dom.getAttrib(e, 'mce_bogus'))
|
| | | ed.dom.remove(e);
|
| | | });
|
| | |
|
| | | break;
|
| | | }
|
| | |
|
| | | break;
|
| | | tableElm = inst.dom.getParent(inst.selection.getNode(), "table");
|
| | | inst.addVisual(tableElm);
|
| | | inst.nodeChanged();
|
| | | }
|
| | |
|
| | | tableElm = tinyMCE.getParentElement(inst.getFocusElement(), "table");
|
| | | tinyMCE.handleVisualAid(tableElm, true, tinyMCE.settings['visual'], tinyMCE.selectedInstance);
|
| | | tinyMCE.triggerNodeChange();
|
| | | inst.repaint();
|
| | | }
|
| | | return true;
|
| | | }
|
| | |
|
| | | return true;
|
| | | // Pass to next handler in chain
|
| | | return false;
|
| | | }
|
| | | });
|
| | |
|
| | | // Pass to next handler in chain
|
| | | return false;
|
| | | }
|
| | | };
|
| | |
|
| | | tinyMCE.addPlugin("table", TinyMCE_TablePlugin);
|
| | | // Register plugin
|
| | | tinymce.PluginManager.add('table', tinymce.plugins.TablePlugin);
|
| | | })(); |
File was renamed from program/js/tiny_mce/plugins/table/jscripts/cell.js |
| | |
| | | tinyMCEPopup.requireLangPack();
|
| | |
|
| | | var ed;
|
| | |
|
| | | function init() {
|
| | | ed = tinyMCEPopup.editor;
|
| | | tinyMCEPopup.resizeToInnerSize();
|
| | |
|
| | | document.getElementById('backgroundimagebrowsercontainer').innerHTML = getBrowserHTML('backgroundimagebrowser','backgroundimage','image','table');
|
| | | document.getElementById('bordercolor_pickcontainer').innerHTML = getColorPickerHTML('bordercolor_pick','bordercolor');
|
| | | document.getElementById('bgcolor_pickcontainer').innerHTML = getColorPickerHTML('bgcolor_pick','bgcolor')
|
| | |
|
| | | var inst = tinyMCE.selectedInstance;
|
| | | var tdElm = tinyMCE.getParentElement(inst.getFocusElement(), "td,th");
|
| | | var inst = ed;
|
| | | var tdElm = ed.dom.getParent(ed.selection.getNode(), "td,th");
|
| | | var formObj = document.forms[0];
|
| | | var st = tinyMCE.parseStyle(tinyMCE.getAttrib(tdElm, "style"));
|
| | | var st = ed.dom.parseStyle(ed.dom.getAttrib(tdElm, "style"));
|
| | |
|
| | | // Get table cell data
|
| | | var celltype = tdElm.nodeName.toLowerCase();
|
| | | var align = tinyMCE.getAttrib(tdElm, 'align');
|
| | | var valign = tinyMCE.getAttrib(tdElm, 'valign');
|
| | | var align = ed.dom.getAttrib(tdElm, 'align');
|
| | | var valign = ed.dom.getAttrib(tdElm, 'valign');
|
| | | var width = trimSize(getStyle(tdElm, 'width', 'width'));
|
| | | var height = trimSize(getStyle(tdElm, 'height', 'height'));
|
| | | var bordercolor = convertRGBToHex(getStyle(tdElm, 'bordercolor', 'borderLeftColor'));
|
| | | var bgcolor = convertRGBToHex(getStyle(tdElm, 'bgcolor', 'backgroundColor'));
|
| | | var className = tinyMCE.getVisualAidClass(tinyMCE.getAttrib(tdElm, 'class'), false);
|
| | | var className = ed.dom.getAttrib(tdElm, 'class');
|
| | | var backgroundimage = getStyle(tdElm, 'background', 'backgroundImage').replace(new RegExp("url\\('?([^']*)'?\\)", 'gi'), "$1");;
|
| | | var id = tinyMCE.getAttrib(tdElm, 'id');
|
| | | var lang = tinyMCE.getAttrib(tdElm, 'lang');
|
| | | var dir = tinyMCE.getAttrib(tdElm, 'dir');
|
| | | var scope = tinyMCE.getAttrib(tdElm, 'scope');
|
| | | var id = ed.dom.getAttrib(tdElm, 'id');
|
| | | var lang = ed.dom.getAttrib(tdElm, 'lang');
|
| | | var dir = ed.dom.getAttrib(tdElm, 'dir');
|
| | | var scope = ed.dom.getAttrib(tdElm, 'scope');
|
| | |
|
| | | // Setup form
|
| | | addClassesToList('class', 'table_cell_styles');
|
| | | TinyMCE_EditableSelects.init();
|
| | |
|
| | | formObj.bordercolor.value = bordercolor;
|
| | | formObj.bgcolor.value = bgcolor;
|
| | | formObj.backgroundimage.value = backgroundimage;
|
| | |
| | | formObj.height.value = height;
|
| | | formObj.id.value = id;
|
| | | formObj.lang.value = lang;
|
| | | formObj.style.value = tinyMCE.serializeStyle(st);
|
| | | formObj.style.value = ed.dom.serializeStyle(st);
|
| | | selectByValue(formObj, 'align', align);
|
| | | selectByValue(formObj, 'valign', valign);
|
| | | selectByValue(formObj, 'class', className);
|
| | | selectByValue(formObj, 'class', className, true, true);
|
| | | selectByValue(formObj, 'celltype', celltype);
|
| | | selectByValue(formObj, 'dir', dir);
|
| | | selectByValue(formObj, 'scope', scope);
|
| | |
| | | }
|
| | |
|
| | | function updateAction() {
|
| | | var el, inst = ed, tdElm, trElm, tableElm, formObj = document.forms[0];
|
| | |
|
| | | tinyMCEPopup.restoreSelection();
|
| | | el = ed.selection.getNode();
|
| | | tdElm = ed.dom.getParent(el, "td,th");
|
| | | trElm = ed.dom.getParent(el, "tr");
|
| | | tableElm = ed.dom.getParent(el, "table");
|
| | |
|
| | | var inst = tinyMCE.selectedInstance;
|
| | | var tdElm = tinyMCE.getParentElement(inst.getFocusElement(), "td,th");
|
| | | var trElm = tinyMCE.getParentElement(inst.getFocusElement(), "tr");
|
| | | var tableElm = tinyMCE.getParentElement(inst.getFocusElement(), "table");
|
| | | var formObj = document.forms[0];
|
| | |
|
| | | inst.execCommand('mceBeginUndoLevel');
|
| | | ed.execCommand('mceBeginUndoLevel');
|
| | |
|
| | | switch (getSelectValue(formObj, 'action')) {
|
| | | case "cell":
|
| | | var celltype = getSelectValue(formObj, 'celltype');
|
| | | var scope = getSelectValue(formObj, 'scope');
|
| | |
|
| | | if (tinyMCE.getParam("accessibility_warnings")) {
|
| | | if (ed.getParam("accessibility_warnings")) {
|
| | | if (celltype == "th" && scope == "")
|
| | | var answer = confirm(tinyMCE.getLang('lang_table_missing_scope', '', true));
|
| | | var answer = confirm(ed.getLang('table_dlg.missing_scope', '', true));
|
| | | else
|
| | | var answer = true;
|
| | |
|
| | |
| | | break;
|
| | | }
|
| | |
|
| | | tinyMCE.handleVisualAid(inst.getBody(), true, inst.visualAid, inst);
|
| | | tinyMCE.triggerNodeChange();
|
| | | ed.addVisual();
|
| | | ed.nodeChanged();
|
| | | inst.execCommand('mceEndUndoLevel');
|
| | | tinyMCEPopup.close();
|
| | | }
|
| | |
| | | }
|
| | |
|
| | | function updateCell(td, skip_id) {
|
| | | var inst = tinyMCE.selectedInstance;
|
| | | var inst = ed;
|
| | | var formObj = document.forms[0];
|
| | | var curCellType = td.nodeName.toLowerCase();
|
| | | var celltype = getSelectValue(formObj, 'celltype');
|
| | | var doc = inst.getDoc();
|
| | | var dom = ed.dom;
|
| | |
|
| | | if (!skip_id)
|
| | | td.setAttribute('id', formObj.id.value);
|
| | |
| | | td.setAttribute('vAlign', formObj.valign.value);
|
| | | td.setAttribute('lang', formObj.lang.value);
|
| | | td.setAttribute('dir', getSelectValue(formObj, 'dir'));
|
| | | td.setAttribute('style', tinyMCE.serializeStyle(tinyMCE.parseStyle(formObj.style.value)));
|
| | | td.setAttribute('style', ed.dom.serializeStyle(ed.dom.parseStyle(formObj.style.value)));
|
| | | td.setAttribute('scope', formObj.scope.value);
|
| | | tinyMCE.setAttrib(td, 'class', getSelectValue(formObj, 'class'));
|
| | | ed.dom.setAttrib(td, 'class', getSelectValue(formObj, 'class'));
|
| | |
|
| | | // Clear deprecated attributes
|
| | | tinyMCE.setAttrib(td, 'width', '');
|
| | | tinyMCE.setAttrib(td, 'height', '');
|
| | | tinyMCE.setAttrib(td, 'bgColor', '');
|
| | | tinyMCE.setAttrib(td, 'borderColor', '');
|
| | | tinyMCE.setAttrib(td, 'background', '');
|
| | | ed.dom.setAttrib(td, 'width', '');
|
| | | ed.dom.setAttrib(td, 'height', '');
|
| | | ed.dom.setAttrib(td, 'bgColor', '');
|
| | | ed.dom.setAttrib(td, 'borderColor', '');
|
| | | ed.dom.setAttrib(td, 'background', '');
|
| | |
|
| | | // Set styles
|
| | | td.style.width = getCSSSize(formObj.width.value);
|
| | |
| | | for (var c=0; c<td.childNodes.length; c++)
|
| | | newCell.appendChild(td.childNodes[c].cloneNode(1));
|
| | |
|
| | | for (var a=0; a<td.attributes.length; a++) {
|
| | | var attr = td.attributes[a];
|
| | | newCell.setAttribute(attr.name, attr.value);
|
| | | }
|
| | | for (var a=0; a<td.attributes.length; a++)
|
| | | ed.dom.setAttrib(newCell, td.attributes[a].name, ed.dom.getAttrib(td, td.attributes[a].name));
|
| | |
|
| | | td.parentNode.replaceChild(newCell, td);
|
| | | td = newCell;
|
| | | }
|
| | |
|
| | | dom.setAttrib(td, 'style', dom.serializeStyle(dom.parseStyle(td.style.cssText)));
|
| | |
|
| | | return td;
|
| | | }
|
| | |
|
| | | function changedBackgroundImage() {
|
| | | var formObj = document.forms[0];
|
| | | var st = tinyMCE.parseStyle(formObj.style.value);
|
| | | var st = ed.dom.parseStyle(formObj.style.value);
|
| | |
|
| | | st['background-image'] = "url('" + formObj.backgroundimage.value + "')";
|
| | |
|
| | | formObj.style.value = tinyMCE.serializeStyle(st);
|
| | | formObj.style.value = ed.dom.serializeStyle(st);
|
| | | }
|
| | |
|
| | | function changedSize() {
|
| | | var formObj = document.forms[0];
|
| | | var st = tinyMCE.parseStyle(formObj.style.value);
|
| | | var st = ed.dom.parseStyle(formObj.style.value);
|
| | |
|
| | | var width = formObj.width.value;
|
| | | if (width != "")
|
| | |
| | | else
|
| | | st['height'] = "";
|
| | |
|
| | | formObj.style.value = tinyMCE.serializeStyle(st);
|
| | | formObj.style.value = ed.dom.serializeStyle(st);
|
| | | }
|
| | |
|
| | | function changedColor() {
|
| | | var formObj = document.forms[0];
|
| | | var st = tinyMCE.parseStyle(formObj.style.value);
|
| | | var st = ed.dom.parseStyle(formObj.style.value);
|
| | |
|
| | | st['background-color'] = formObj.bgcolor.value;
|
| | | st['border-color'] = formObj.bordercolor.value;
|
| | |
|
| | | formObj.style.value = tinyMCE.serializeStyle(st);
|
| | | formObj.style.value = ed.dom.serializeStyle(st);
|
| | | }
|
| | |
|
| | | function changedStyle() {
|
| | | var formObj = document.forms[0];
|
| | | var st = tinyMCE.parseStyle(formObj.style.value);
|
| | | var st = ed.dom.parseStyle(formObj.style.value);
|
| | |
|
| | | if (st['background-image'])
|
| | | formObj.backgroundimage.value = st['background-image'].replace(new RegExp("url\\('?([^']*)'?\\)", 'gi'), "$1");
|
| | |
| | | updateColor('bordercolor_pick','bordercolor');
|
| | | }
|
| | | }
|
| | |
|
| | | tinyMCEPopup.onInit.add(init);
|
New file |
| | |
| | | tinyMCEPopup.requireLangPack();
|
| | |
|
| | | function init() {
|
| | | var f = document.forms[0], v;
|
| | |
|
| | | tinyMCEPopup.resizeToInnerSize();
|
| | |
|
| | | f.numcols.value = tinyMCEPopup.getWindowArg('numcols', 1);
|
| | | f.numrows.value = tinyMCEPopup.getWindowArg('numcols', 1);
|
| | | }
|
| | |
|
| | | function mergeCells() {
|
| | | var args = [], f = document.forms[0];
|
| | |
|
| | | tinyMCEPopup.restoreSelection();
|
| | |
|
| | | if (!AutoValidator.validate(f)) {
|
| | | alert(tinyMCEPopup.getLang('invalid_data'));
|
| | | return false;
|
| | | }
|
| | |
|
| | | args["numcols"] = f.numcols.value;
|
| | | args["numrows"] = f.numrows.value;
|
| | |
|
| | | tinyMCEPopup.execCommand("mceTableMergeCells", false, args);
|
| | | tinyMCEPopup.close();
|
| | | }
|
| | |
|
| | | tinyMCEPopup.onInit.add(init);
|
File was renamed from program/js/tiny_mce/plugins/table/jscripts/row.js |
| | |
| | | tinyMCEPopup.requireLangPack();
|
| | |
|
| | | function init() {
|
| | | tinyMCEPopup.resizeToInnerSize();
|
| | |
|
| | | document.getElementById('backgroundimagebrowsercontainer').innerHTML = getBrowserHTML('backgroundimagebrowser','backgroundimage','image','table');
|
| | | document.getElementById('bgcolor_pickcontainer').innerHTML = getColorPickerHTML('bgcolor_pick','bgcolor');
|
| | |
|
| | | var inst = tinyMCE.selectedInstance;
|
| | | var trElm = tinyMCE.getParentElement(inst.getFocusElement(), "tr");
|
| | | var inst = tinyMCEPopup.editor;
|
| | | var dom = inst.dom;
|
| | | var trElm = dom.getParent(inst.selection.getNode(), "tr");
|
| | | var formObj = document.forms[0];
|
| | | var st = tinyMCE.parseStyle(tinyMCE.getAttrib(trElm, "style"));
|
| | | var st = dom.parseStyle(dom.getAttrib(trElm, "style"));
|
| | |
|
| | | // Get table row data
|
| | | var rowtype = trElm.parentNode.nodeName.toLowerCase();
|
| | | var align = tinyMCE.getAttrib(trElm, 'align');
|
| | | var valign = tinyMCE.getAttrib(trElm, 'valign');
|
| | | var align = dom.getAttrib(trElm, 'align');
|
| | | var valign = dom.getAttrib(trElm, 'valign');
|
| | | var height = trimSize(getStyle(trElm, 'height', 'height'));
|
| | | var className = tinyMCE.getVisualAidClass(tinyMCE.getAttrib(trElm, 'class'), false);
|
| | | var className = dom.getAttrib(trElm, 'class');
|
| | | var bgcolor = convertRGBToHex(getStyle(trElm, 'bgcolor', 'backgroundColor'));
|
| | | var backgroundimage = getStyle(trElm, 'background', 'backgroundImage').replace(new RegExp("url\\('?([^']*)'?\\)", 'gi'), "$1");;
|
| | | var id = tinyMCE.getAttrib(trElm, 'id');
|
| | | var lang = tinyMCE.getAttrib(trElm, 'lang');
|
| | | var dir = tinyMCE.getAttrib(trElm, 'dir');
|
| | | var id = dom.getAttrib(trElm, 'id');
|
| | | var lang = dom.getAttrib(trElm, 'lang');
|
| | | var dir = dom.getAttrib(trElm, 'dir');
|
| | |
|
| | | // Setup form
|
| | | addClassesToList('class', 'table_row_styles');
|
| | | TinyMCE_EditableSelects.init();
|
| | |
|
| | | formObj.bgcolor.value = bgcolor;
|
| | | formObj.backgroundimage.value = backgroundimage;
|
| | | formObj.height.value = height;
|
| | | formObj.id.value = id;
|
| | | formObj.lang.value = lang;
|
| | | formObj.style.value = tinyMCE.serializeStyle(st);
|
| | | formObj.style.value = dom.serializeStyle(st);
|
| | | selectByValue(formObj, 'align', align);
|
| | | selectByValue(formObj, 'valign', valign);
|
| | | selectByValue(formObj, 'class', className);
|
| | | selectByValue(formObj, 'class', className, true, true);
|
| | | selectByValue(formObj, 'rowtype', rowtype);
|
| | | selectByValue(formObj, 'dir', dir);
|
| | |
|
| | |
| | | }
|
| | |
|
| | | function updateAction() {
|
| | | tinyMCEPopup.restoreSelection();
|
| | |
|
| | | var inst = tinyMCE.selectedInstance;
|
| | | var trElm = tinyMCE.getParentElement(inst.getFocusElement(), "tr");
|
| | | var tableElm = tinyMCE.getParentElement(inst.getFocusElement(), "table");
|
| | | var formObj = document.forms[0];
|
| | | var inst = tinyMCEPopup.editor, dom = inst.dom, trElm, tableElm, formObj = document.forms[0];
|
| | | var action = getSelectValue(formObj, 'action');
|
| | |
|
| | | tinyMCEPopup.restoreSelection();
|
| | | trElm = dom.getParent(inst.selection.getNode(), "tr");
|
| | | tableElm = dom.getParent(inst.selection.getNode(), "table");
|
| | |
|
| | | inst.execCommand('mceBeginUndoLevel');
|
| | |
|
| | |
| | | break;
|
| | | }
|
| | |
|
| | | tinyMCE.handleVisualAid(inst.getBody(), true, inst.visualAid, inst);
|
| | | tinyMCE.triggerNodeChange();
|
| | | inst.addVisual();
|
| | | inst.nodeChanged();
|
| | | inst.execCommand('mceEndUndoLevel');
|
| | | tinyMCEPopup.close();
|
| | | }
|
| | |
|
| | | function updateRow(tr_elm, skip_id, skip_parent) {
|
| | | var inst = tinyMCE.selectedInstance;
|
| | | var inst = tinyMCEPopup.editor;
|
| | | var formObj = document.forms[0];
|
| | | var dom = inst.dom;
|
| | | var curRowType = tr_elm.parentNode.nodeName.toLowerCase();
|
| | | var rowtype = getSelectValue(formObj, 'rowtype');
|
| | | var doc = inst.getDoc();
|
| | |
| | | tr_elm.setAttribute('vAlign', getSelectValue(formObj, 'valign'));
|
| | | tr_elm.setAttribute('lang', formObj.lang.value);
|
| | | tr_elm.setAttribute('dir', getSelectValue(formObj, 'dir'));
|
| | | tr_elm.setAttribute('style', tinyMCE.serializeStyle(tinyMCE.parseStyle(formObj.style.value)));
|
| | | tinyMCE.setAttrib(tr_elm, 'class', getSelectValue(formObj, 'class'));
|
| | | tr_elm.setAttribute('style', dom.serializeStyle(dom.parseStyle(formObj.style.value)));
|
| | | dom.setAttrib(tr_elm, 'class', getSelectValue(formObj, 'class'));
|
| | |
|
| | | // Clear deprecated attributes
|
| | | tr_elm.setAttribute('background', '');
|
| | |
| | | var newRow = tr_elm.cloneNode(1);
|
| | |
|
| | | // next, find the parent of its new destination (creating it if necessary)
|
| | | var theTable = tinyMCE.getParentElement(tr_elm, "table");
|
| | | var theTable = dom.getParent(tr_elm, "table");
|
| | | var dest = rowtype;
|
| | | var newParent = null;
|
| | | for (var i = 0; i < theTable.childNodes.length; i++) {
|
| | |
| | | if (newParent == null) {
|
| | | newParent = doc.createElement(dest);
|
| | |
|
| | | if (dest == "thead")
|
| | | theTable.insertBefore(newParent, theTable.firstChild);
|
| | | else
|
| | | if (dest == "thead") {
|
| | | if (theTable.firstChild.nodeName == 'CAPTION')
|
| | | inst.dom.insertAfter(newParent, theTable.firstChild);
|
| | | else
|
| | | theTable.insertBefore(newParent, theTable.firstChild);
|
| | | } else
|
| | | theTable.appendChild(newParent);
|
| | | }
|
| | |
|
| | |
| | | // set tr_elm to the new node
|
| | | tr_elm = newRow;
|
| | | }
|
| | |
|
| | | dom.setAttrib(tr_elm, 'style', dom.serializeStyle(dom.parseStyle(tr_elm.style.cssText)));
|
| | | }
|
| | |
|
| | | function changedBackgroundImage() {
|
| | | var formObj = document.forms[0];
|
| | | var st = tinyMCE.parseStyle(formObj.style.value);
|
| | | var formObj = document.forms[0], dom = tinyMCEPopup.editor.dom;
|
| | | var st = dom.parseStyle(formObj.style.value);
|
| | |
|
| | | st['background-image'] = "url('" + formObj.backgroundimage.value + "')";
|
| | |
|
| | | formObj.style.value = tinyMCE.serializeStyle(st);
|
| | | formObj.style.value = dom.serializeStyle(st);
|
| | | }
|
| | |
|
| | | function changedStyle() {
|
| | | var formObj = document.forms[0];
|
| | | var st = tinyMCE.parseStyle(formObj.style.value);
|
| | | var formObj = document.forms[0], dom = tinyMCEPopup.editor.dom;
|
| | | var st = dom.parseStyle(formObj.style.value);
|
| | |
|
| | | if (st['background-image'])
|
| | | formObj.backgroundimage.value = st['background-image'].replace(new RegExp("url\\('?([^']*)'?\\)", 'gi'), "$1");
|
| | |
| | | }
|
| | |
|
| | | function changedSize() {
|
| | | var formObj = document.forms[0];
|
| | | var st = tinyMCE.parseStyle(formObj.style.value);
|
| | | var formObj = document.forms[0], dom = tinyMCEPopup.editor.dom;
|
| | | var st = dom.parseStyle(formObj.style.value);
|
| | |
|
| | | var height = formObj.height.value;
|
| | | if (height != "")
|
| | |
| | | else
|
| | | st['height'] = "";
|
| | |
|
| | | formObj.style.value = tinyMCE.serializeStyle(st);
|
| | | formObj.style.value = dom.serializeStyle(st);
|
| | | }
|
| | |
|
| | | function changedColor() {
|
| | | var formObj = document.forms[0];
|
| | | var st = tinyMCE.parseStyle(formObj.style.value);
|
| | | var formObj = document.forms[0], dom = tinyMCEPopup.editor.dom;
|
| | | var st = dom.parseStyle(formObj.style.value);
|
| | |
|
| | | st['background-color'] = formObj.bgcolor.value;
|
| | |
|
| | | formObj.style.value = tinyMCE.serializeStyle(st);
|
| | | formObj.style.value = dom.serializeStyle(st);
|
| | | }
|
| | |
|
| | | tinyMCEPopup.onInit.add(init);
|
File was renamed from program/js/tiny_mce/plugins/table/jscripts/table.js |
| | |
| | | var action, orgTableWidth, orgTableHeight;
|
| | | tinyMCEPopup.requireLangPack();
|
| | |
|
| | | var action, orgTableWidth, orgTableHeight, dom = tinyMCEPopup.editor.dom;
|
| | |
|
| | | function insertTable() {
|
| | | var formObj = document.forms[0];
|
| | | var inst = tinyMCE.selectedInstance;
|
| | | var cols = 2, rows = 2, border = 0, cellpadding = -1, cellspacing = -1, align, width, height, className, caption;
|
| | | var html = '', capEl;
|
| | | var elm = tinyMCE.tableElm;
|
| | | var inst = tinyMCEPopup.editor, dom = inst.dom;
|
| | | var cols = 2, rows = 2, border = 0, cellpadding = -1, cellspacing = -1, align, width, height, className, caption, frame, rules;
|
| | | var html = '', capEl, elm;
|
| | | var cellLimit, rowLimit, colLimit;
|
| | |
|
| | | tinyMCEPopup.restoreSelection();
|
| | |
|
| | | if (!AutoValidator.validate(formObj)) {
|
| | | alert(tinyMCE.getLang('lang_invalid_data'));
|
| | | alert(inst.getLang('invalid_data'));
|
| | | return false;
|
| | | }
|
| | |
|
| | | tinyMCEPopup.restoreSelection();
|
| | | elm = dom.getParent(inst.selection.getNode(), 'table');
|
| | |
|
| | | // Get form data
|
| | | cols = formObj.elements['cols'].value;
|
| | |
| | | cellpadding = formObj.elements['cellpadding'].value != "" ? formObj.elements['cellpadding'].value : "";
|
| | | cellspacing = formObj.elements['cellspacing'].value != "" ? formObj.elements['cellspacing'].value : "";
|
| | | align = formObj.elements['align'].options[formObj.elements['align'].selectedIndex].value;
|
| | | frame = formObj.elements['frame'].options[formObj.elements['frame'].selectedIndex].value;
|
| | | rules = formObj.elements['rules'].options[formObj.elements['rules'].selectedIndex].value;
|
| | | width = formObj.elements['width'].value;
|
| | | height = formObj.elements['height'].value;
|
| | | bordercolor = formObj.elements['bordercolor'].value;
|
| | |
| | | background = formObj.elements['backgroundimage'].value;
|
| | | caption = formObj.elements['caption'].checked;
|
| | |
|
| | | cellLimit = tinyMCE.getParam('table_cell_limit', false);
|
| | | rowLimit = tinyMCE.getParam('table_row_limit', false);
|
| | | colLimit = tinyMCE.getParam('table_col_limit', false);
|
| | | cellLimit = tinyMCEPopup.getParam('table_cell_limit', false);
|
| | | rowLimit = tinyMCEPopup.getParam('table_row_limit', false);
|
| | | colLimit = tinyMCEPopup.getParam('table_col_limit', false);
|
| | |
|
| | | // Validate table size
|
| | | if (colLimit && cols > colLimit) {
|
| | | alert(tinyMCE.getLang('lang_table_col_limit', '', true, {cols : colLimit}));
|
| | | alert(inst.getLang('table_col_limit', '', true, {cols : colLimit}));
|
| | | return false;
|
| | | } else if (rowLimit && rows > rowLimit) {
|
| | | alert(tinyMCE.getLang('lang_table_row_limit', '', true, {rows : rowLimit}));
|
| | | alert(inst.getLang('table_row_limit', '', true, {rows : rowLimit}));
|
| | | return false;
|
| | | } else if (cellLimit && cols * rows > cellLimit) {
|
| | | alert(tinyMCE.getLang('lang_table_cell_limit', '', true, {cells : cellLimit}));
|
| | | alert(inst.getLang('table_cell_limit', '', true, {cells : cellLimit}));
|
| | | return false;
|
| | | }
|
| | |
|
| | |
| | | if (action == "update") {
|
| | | inst.execCommand('mceBeginUndoLevel');
|
| | |
|
| | | tinyMCE.setAttrib(elm, 'cellPadding', cellpadding, true);
|
| | | tinyMCE.setAttrib(elm, 'cellSpacing', cellspacing, true);
|
| | | tinyMCE.setAttrib(elm, 'border', border, true);
|
| | | tinyMCE.setAttrib(elm, 'align', align);
|
| | | tinyMCE.setAttrib(elm, 'class', className);
|
| | | tinyMCE.setAttrib(elm, 'style', style);
|
| | | tinyMCE.setAttrib(elm, 'id', id);
|
| | | tinyMCE.setAttrib(elm, 'summary', summary);
|
| | | tinyMCE.setAttrib(elm, 'dir', dir);
|
| | | tinyMCE.setAttrib(elm, 'lang', lang);
|
| | | dom.setAttrib(elm, 'cellPadding', cellpadding, true);
|
| | | dom.setAttrib(elm, 'cellSpacing', cellspacing, true);
|
| | | dom.setAttrib(elm, 'border', border);
|
| | | dom.setAttrib(elm, 'align', align);
|
| | | dom.setAttrib(elm, 'frame', frame);
|
| | | dom.setAttrib(elm, 'rules', rules);
|
| | | dom.setAttrib(elm, 'class', className);
|
| | | dom.setAttrib(elm, 'style', style);
|
| | | dom.setAttrib(elm, 'id', id);
|
| | | dom.setAttrib(elm, 'summary', summary);
|
| | | dom.setAttrib(elm, 'dir', dir);
|
| | | dom.setAttrib(elm, 'lang', lang);
|
| | |
|
| | | capEl = elm.getElementsByTagName('caption')[0];
|
| | | capEl = inst.dom.select('caption', elm)[0];
|
| | |
|
| | | if (capEl && !caption)
|
| | | capEl.parentNode.removeChild(capEl);
|
| | |
|
| | | if (!capEl && caption) {
|
| | | capEl = elm.ownerDocument.createElement('caption');
|
| | | capEl.innerHTML = ' ';
|
| | |
|
| | | if (!tinymce.isIE)
|
| | | capEl.innerHTML = '<br mce_bogus="1"/>';
|
| | |
|
| | | elm.insertBefore(capEl, elm.firstChild);
|
| | | }
|
| | |
|
| | | // Not inline styles
|
| | | if (!tinyMCE.getParam("inline_styles"))
|
| | | tinyMCE.setAttrib(elm, 'width', width, true);
|
| | | if (width && /(pt|em|cm)$/.test(width)) {
|
| | | dom.setStyle(elm, 'width', width);
|
| | | dom.setAttrib(elm, 'width', '');
|
| | | } else {
|
| | | dom.setAttrib(elm, 'width', width, true);
|
| | | dom.setStyle(elm, 'width', '');
|
| | | }
|
| | |
|
| | | // Remove these since they are not valid XHTML
|
| | | tinyMCE.setAttrib(elm, 'borderColor', '');
|
| | | tinyMCE.setAttrib(elm, 'bgColor', '');
|
| | | tinyMCE.setAttrib(elm, 'background', '');
|
| | | tinyMCE.setAttrib(elm, 'height', '');
|
| | | dom.setAttrib(elm, 'borderColor', '');
|
| | | dom.setAttrib(elm, 'bgColor', '');
|
| | | dom.setAttrib(elm, 'background', '');
|
| | |
|
| | | if (height) {
|
| | | dom.setStyle(elm, 'height', height);
|
| | | dom.setAttrib(elm, 'height', '');
|
| | | }
|
| | |
|
| | | if (background != '')
|
| | | elm.style.backgroundImage = "url('" + background + "')";
|
| | | else
|
| | | elm.style.backgroundImage = '';
|
| | |
|
| | | if (tinyMCE.getParam("inline_styles"))
|
| | | elm.style.borderWidth = border + "px";
|
| | |
|
| | | if (tinyMCE.getParam("inline_styles")) {
|
| | | /* if (tinyMCEPopup.getParam("inline_styles")) {
|
| | | if (width != '')
|
| | | elm.style.width = getCSSSize(width);
|
| | | }
|
| | | }*/
|
| | |
|
| | | if (bordercolor != "") {
|
| | | elm.style.borderColor = bordercolor;
|
| | |
| | | elm.style.backgroundColor = bgcolor;
|
| | | elm.style.height = getCSSSize(height);
|
| | |
|
| | | tinyMCE.handleVisualAid(tinyMCE.tableElm, false, inst.visualAid, inst);
|
| | | inst.addVisual();
|
| | |
|
| | | // Fix for stange MSIE align bug
|
| | | tinyMCE.tableElm.outerHTML = tinyMCE.tableElm.outerHTML;
|
| | | //elm.outerHTML = elm.outerHTML;
|
| | |
|
| | | tinyMCE.handleVisualAid(inst.getBody(), true, inst.visualAid, inst);
|
| | | tinyMCE.triggerNodeChange();
|
| | | inst.nodeChanged();
|
| | | inst.execCommand('mceEndUndoLevel');
|
| | |
|
| | | // Repaint if dimensions changed
|
| | | if (formObj.width.value != orgTableWidth || formObj.height.value != orgTableHeight)
|
| | | inst.repaint();
|
| | | inst.execCommand('mceRepaint');
|
| | |
|
| | | tinyMCEPopup.close();
|
| | | return true;
|
| | |
| | | html += makeAttrib('border', border);
|
| | | html += makeAttrib('cellpadding', cellpadding);
|
| | | html += makeAttrib('cellspacing', cellspacing);
|
| | | html += makeAttrib('width', width);
|
| | |
|
| | | if (width && /(pt|em|cm)$/.test(width)) {
|
| | | if (style)
|
| | | style += '; ';
|
| | |
|
| | | style += 'width: ' + width;
|
| | | } else
|
| | | html += makeAttrib('width', width);
|
| | |
|
| | | /* if (height) {
|
| | | if (style)
|
| | | style += '; ';
|
| | |
|
| | | style += 'height: ' + height;
|
| | | }*/
|
| | |
|
| | | //html += makeAttrib('height', height);
|
| | | //html += makeAttrib('bordercolor', bordercolor);
|
| | | //html += makeAttrib('bgcolor', bgcolor);
|
| | | html += makeAttrib('align', align);
|
| | | html += makeAttrib('class', tinyMCE.getVisualAidClass(className, border == 0));
|
| | | html += makeAttrib('frame', frame);
|
| | | html += makeAttrib('rules', rules);
|
| | | html += makeAttrib('class', className);
|
| | | html += makeAttrib('style', style);
|
| | | html += makeAttrib('summary', summary);
|
| | | html += makeAttrib('dir', dir);
|
| | | html += makeAttrib('lang', lang);
|
| | | html += '>';
|
| | |
|
| | | if (caption)
|
| | | html += '<caption> </caption>';
|
| | | if (caption) {
|
| | | if (!tinymce.isIE)
|
| | | html += '<caption><br mce_bogus="1"/></caption>';
|
| | | else
|
| | | html += '<caption></caption>';
|
| | | }
|
| | |
|
| | | for (var y=0; y<rows; y++) {
|
| | | html += "<tr>";
|
| | |
|
| | | for (var x=0; x<cols; x++)
|
| | | html += '<td> </td>';
|
| | | for (var x=0; x<cols; x++) {
|
| | | if (!tinymce.isIE)
|
| | | html += '<td><br mce_bogus="1"/></td>';
|
| | | else
|
| | | html += '<td></td>';
|
| | | }
|
| | |
|
| | | html += "</tr>";
|
| | | }
|
| | |
| | |
|
| | | inst.execCommand('mceBeginUndoLevel');
|
| | | inst.execCommand('mceInsertContent', false, html);
|
| | | tinyMCE.handleVisualAid(inst.getBody(), true, tinyMCE.settings['visual']);
|
| | | inst.addVisual();
|
| | | inst.execCommand('mceEndUndoLevel');
|
| | |
|
| | | tinyMCEPopup.close();
|
| | |
| | | document.getElementById('bordercolor_pickcontainer').innerHTML = getColorPickerHTML('bordercolor_pick','bordercolor');
|
| | | document.getElementById('bgcolor_pickcontainer').innerHTML = getColorPickerHTML('bgcolor_pick','bgcolor');
|
| | |
|
| | | var cols = 2, rows = 2, border = tinyMCE.getParam('table_default_border', '0'), cellpadding = tinyMCE.getParam('table_default_cellpadding', ''), cellspacing = tinyMCE.getParam('table_default_cellspacing', '');
|
| | | var cols = 2, rows = 2, border = tinyMCEPopup.getParam('table_default_border', '0'), cellpadding = tinyMCEPopup.getParam('table_default_cellpadding', ''), cellspacing = tinyMCEPopup.getParam('table_default_cellspacing', '');
|
| | | var align = "", width = "", height = "", bordercolor = "", bgcolor = "", className = "";
|
| | | var id = "", summary = "", style = "", dir = "", lang = "", background = "", bgcolor = "", bordercolor = "";
|
| | | var inst = tinyMCE.selectedInstance;
|
| | | var id = "", summary = "", style = "", dir = "", lang = "", background = "", bgcolor = "", bordercolor = "", rules, frame;
|
| | | var inst = tinyMCEPopup.editor, dom = inst.dom;
|
| | | var formObj = document.forms[0];
|
| | | var elm = tinyMCE.getParentElement(inst.getFocusElement(), "table");
|
| | | var elm = dom.getParent(inst.selection.getNode(), "table");
|
| | |
|
| | | tinyMCE.tableElm = elm;
|
| | | action = tinyMCE.getWindowArg('action');
|
| | | if (action == null)
|
| | | action = tinyMCE.tableElm ? "update" : "insert";
|
| | | action = tinyMCEPopup.getWindowArg('action');
|
| | |
|
| | | if (tinyMCE.tableElm && action != "insert") {
|
| | | var rowsAr = tinyMCE.tableElm.rows;
|
| | | if (!action)
|
| | | action = elm ? "update" : "insert";
|
| | |
|
| | | if (elm && action != "insert") {
|
| | | var rowsAr = elm.rows;
|
| | | var cols = 0;
|
| | | for (var i=0; i<rowsAr.length; i++)
|
| | | if (rowsAr[i].cells.length > cols)
|
| | |
| | | cols = cols;
|
| | | rows = rowsAr.length;
|
| | |
|
| | | st = tinyMCE.parseStyle(tinyMCE.getAttrib(tinyMCE.tableElm, "style"));
|
| | | st = dom.parseStyle(dom.getAttrib(elm, "style"));
|
| | | border = trimSize(getStyle(elm, 'border', 'borderWidth'));
|
| | | cellpadding = tinyMCE.getAttrib(tinyMCE.tableElm, 'cellpadding', "");
|
| | | cellspacing = tinyMCE.getAttrib(tinyMCE.tableElm, 'cellspacing', "");
|
| | | cellpadding = dom.getAttrib(elm, 'cellpadding', "");
|
| | | cellspacing = dom.getAttrib(elm, 'cellspacing', "");
|
| | | width = trimSize(getStyle(elm, 'width', 'width'));
|
| | | height = trimSize(getStyle(elm, 'height', 'height'));
|
| | | bordercolor = convertRGBToHex(getStyle(elm, 'bordercolor', 'borderLeftColor'));
|
| | | bgcolor = convertRGBToHex(getStyle(elm, 'bgcolor', 'backgroundColor'));
|
| | | align = tinyMCE.getAttrib(tinyMCE.tableElm, 'align', align);
|
| | | className = tinyMCE.getVisualAidClass(tinyMCE.getAttrib(tinyMCE.tableElm, 'class'), false);
|
| | | id = tinyMCE.getAttrib(tinyMCE.tableElm, 'id');
|
| | | summary = tinyMCE.getAttrib(tinyMCE.tableElm, 'summary');
|
| | | style = tinyMCE.serializeStyle(st);
|
| | | dir = tinyMCE.getAttrib(tinyMCE.tableElm, 'dir');
|
| | | lang = tinyMCE.getAttrib(tinyMCE.tableElm, 'lang');
|
| | | align = dom.getAttrib(elm, 'align', align);
|
| | | frame = dom.getAttrib(elm, 'frame');
|
| | | rules = dom.getAttrib(elm, 'rules');
|
| | | className = tinymce.trim(dom.getAttrib(elm, 'class').replace(/mceItem.+/g, ''));
|
| | | id = dom.getAttrib(elm, 'id');
|
| | | summary = dom.getAttrib(elm, 'summary');
|
| | | style = dom.serializeStyle(st);
|
| | | dir = dom.getAttrib(elm, 'dir');
|
| | | lang = dom.getAttrib(elm, 'lang');
|
| | | background = getStyle(elm, 'background', 'backgroundImage').replace(new RegExp("url\\('?([^']*)'?\\)", 'gi'), "$1");
|
| | | formObj.caption.checked = tinyMCE.tableElm.getElementsByTagName('caption').length > 0;
|
| | | formObj.caption.checked = elm.getElementsByTagName('caption').length > 0;
|
| | |
|
| | | orgTableWidth = width;
|
| | | orgTableHeight = height;
|
| | |
|
| | | action = "update";
|
| | | formObj.insert.value = inst.getLang('update');
|
| | | }
|
| | |
|
| | | addClassesToList('class', "table_styles");
|
| | | TinyMCE_EditableSelects.init();
|
| | |
|
| | | // Update form
|
| | | selectByValue(formObj, 'align', align);
|
| | | selectByValue(formObj, 'class', className);
|
| | | selectByValue(formObj, 'frame', frame);
|
| | | selectByValue(formObj, 'rules', rules);
|
| | | selectByValue(formObj, 'class', className, true, true);
|
| | | formObj.cols.value = cols;
|
| | | formObj.rows.value = rows;
|
| | | formObj.border.value = border;
|
| | |
| | | formObj.dir.value = dir;
|
| | | formObj.lang.value = lang;
|
| | | formObj.backgroundimage.value = background;
|
| | | formObj.insert.value = tinyMCE.getLang('lang_' + action, 'Insert', true); |
| | |
|
| | | updateColor('bordercolor_pick', 'bordercolor');
|
| | | updateColor('bgcolor_pick', 'bgcolor');
|
| | |
| | |
|
| | | function changedSize() {
|
| | | var formObj = document.forms[0];
|
| | | var st = tinyMCE.parseStyle(formObj.style.value);
|
| | | var st = dom.parseStyle(formObj.style.value);
|
| | |
|
| | | var width = formObj.width.value;
|
| | | /* var width = formObj.width.value;
|
| | | if (width != "")
|
| | | st['width'] = tinyMCE.getParam("inline_styles") ? getCSSSize(width) : "";
|
| | | st['width'] = tinyMCEPopup.getParam("inline_styles") ? getCSSSize(width) : "";
|
| | | else
|
| | | st['width'] = "";
|
| | | st['width'] = "";*/
|
| | |
|
| | | var height = formObj.height.value;
|
| | | if (height != "")
|
| | |
| | | else
|
| | | st['height'] = "";
|
| | |
|
| | | formObj.style.value = tinyMCE.serializeStyle(st);
|
| | | formObj.style.value = dom.serializeStyle(st);
|
| | | }
|
| | |
|
| | | function changedBackgroundImage() {
|
| | | var formObj = document.forms[0];
|
| | | var st = tinyMCE.parseStyle(formObj.style.value);
|
| | | var st = dom.parseStyle(formObj.style.value);
|
| | |
|
| | | st['background-image'] = "url('" + formObj.backgroundimage.value + "')";
|
| | |
|
| | | formObj.style.value = tinyMCE.serializeStyle(st);
|
| | | formObj.style.value = dom.serializeStyle(st);
|
| | | }
|
| | |
|
| | | function changedBorder() {
|
| | | var formObj = document.forms[0];
|
| | | var st = tinyMCE.parseStyle(formObj.style.value);
|
| | | var st = dom.parseStyle(formObj.style.value);
|
| | |
|
| | | // Update border width if the element has a color
|
| | | if (formObj.border.value != "" && formObj.bordercolor.value != "")
|
| | | st['border-width'] = formObj.border.value + "px";
|
| | |
|
| | | formObj.style.value = tinyMCE.serializeStyle(st);
|
| | | formObj.style.value = dom.serializeStyle(st);
|
| | | }
|
| | |
|
| | | function changedColor() {
|
| | | var formObj = document.forms[0];
|
| | | var st = tinyMCE.parseStyle(formObj.style.value);
|
| | | var st = dom.parseStyle(formObj.style.value);
|
| | |
|
| | | st['background-color'] = formObj.bgcolor.value;
|
| | |
|
| | |
| | | st['border-width'] = formObj.border.value == "" ? "1px" : formObj.border.value + "px";
|
| | | }
|
| | |
|
| | | formObj.style.value = tinyMCE.serializeStyle(st);
|
| | | formObj.style.value = dom.serializeStyle(st);
|
| | | }
|
| | |
|
| | | function changedStyle() {
|
| | | var formObj = document.forms[0];
|
| | | var st = tinyMCE.parseStyle(formObj.style.value);
|
| | | var st = dom.parseStyle(formObj.style.value);
|
| | |
|
| | | if (st['background-image'])
|
| | | formObj.backgroundimage.value = st['background-image'].replace(new RegExp("url\\('?([^']*)'?\\)", 'gi'), "$1");
|
| | |
| | | updateColor('bordercolor_pick','bordercolor');
|
| | | }
|
| | | }
|
| | |
|
| | | tinyMCEPopup.onInit.add(init);
|
New file |
| | |
| | | tinyMCE.addI18n('en.table_dlg',{
|
| | | general_tab:"General",
|
| | | advanced_tab:"Advanced",
|
| | | general_props:"General properties",
|
| | | advanced_props:"Advanced properties",
|
| | | rowtype:"Row in table part",
|
| | | title:"Insert/Modify table",
|
| | | width:"Width",
|
| | | height:"Height",
|
| | | cols:"Cols",
|
| | | rows:"Rows",
|
| | | cellspacing:"Cellspacing",
|
| | | cellpadding:"Cellpadding",
|
| | | border:"Border",
|
| | | align:"Alignment",
|
| | | align_default:"Default",
|
| | | align_left:"Left",
|
| | | align_right:"Right",
|
| | | align_middle:"Center",
|
| | | row_title:"Table row properties",
|
| | | cell_title:"Table cell properties",
|
| | | cell_type:"Cell type",
|
| | | valign:"Vertical alignment",
|
| | | align_top:"Top",
|
| | | align_bottom:"Bottom",
|
| | | bordercolor:"Border color",
|
| | | bgcolor:"Background color",
|
| | | merge_cells_title:"Merge table cells",
|
| | | id:"Id",
|
| | | style:"Style",
|
| | | langdir:"Language direction",
|
| | | langcode:"Language code",
|
| | | mime:"Target MIME type",
|
| | | ltr:"Left to right",
|
| | | rtl:"Right to left",
|
| | | bgimage:"Background image",
|
| | | summary:"Summary",
|
| | | td:"Data",
|
| | | th:"Header",
|
| | | cell_cell:"Update current cell",
|
| | | cell_row:"Update all cells in row",
|
| | | cell_all:"Update all cells in table",
|
| | | row_row:"Update current row",
|
| | | row_odd:"Update odd rows in table",
|
| | | row_even:"Update even rows in table",
|
| | | row_all:"Update all rows in table",
|
| | | thead:"Table Head",
|
| | | tbody:"Table Body",
|
| | | tfoot:"Table Foot",
|
| | | scope:"Scope",
|
| | | rowgroup:"Row Group",
|
| | | colgroup:"Col Group",
|
| | | col_limit:"You've exceeded the maximum number of columns of {$cols}.",
|
| | | row_limit:"You've exceeded the maximum number of rows of {$rows}.",
|
| | | cell_limit:"You've exceeded the maximum number of cells of {$cells}.",
|
| | | missing_scope:"Are you sure you want to continue without specifying a scope for this table header cell. Without it, it may be difficult for some users with disabilities to understand the content or data displayed of the table.",
|
| | | caption:"Table caption",
|
| | | frame:"Frame",
|
| | | frame_none:"none",
|
| | | frame_groups:"groups",
|
| | | frame_rows:"rows",
|
| | | frame_cols:"cols",
|
| | | frame_all:"all",
|
| | | rules:"Rules",
|
| | | rules_void:"void",
|
| | | rules_above:"above",
|
| | | rules_below:"below",
|
| | | rules_hsides:"hsides",
|
| | | rules_lhs:"lhs",
|
| | | rules_rhs:"rhs",
|
| | | rules_vsides:"vsides",
|
| | | rules_box:"box",
|
| | | rules_border:"border"
|
| | | }); |
| | |
| | | <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
|
| | | <html xmlns="http://www.w3.org/1999/xhtml">
|
| | | <head>
|
| | | <title>{$lang_table_merge_cells_title}</title>
|
| | | <script language="javascript" type="text/javascript" src="../../tiny_mce_popup.js"></script>
|
| | | <script language="javascript" type="text/javascript" src="../../utils/mctabs.js"></script>
|
| | | <script language="javascript" type="text/javascript" src="../../utils/validate.js"></script>
|
| | | <script language="javascript" type="text/javascript" src="jscripts/merge_cells.js"></script>
|
| | | <title>{#table_dlg.merge_cells_title}</title>
|
| | | <script type="text/javascript" src="../../tiny_mce_popup.js"></script>
|
| | | <script type="text/javascript" src="../../utils/mctabs.js"></script>
|
| | | <script type="text/javascript" src="../../utils/validate.js"></script>
|
| | | <script type="text/javascript" src="js/merge_cells.js"></script>
|
| | | <base target="_self" />
|
| | | </head>
|
| | | <body onload="tinyMCEPopup.executeOnLoad('init();');" style="margin: 8px" style="display: none">
|
| | | <form onsubmit="insertTable();return false;" action="#">
|
| | | <body style="margin: 8px" style="display: none">
|
| | | <form onsubmit="mergeCells();return false;" action="#">
|
| | | <fieldset>
|
| | | <legend>{$lang_table_merge_cells_title}</legend>
|
| | | <legend>{#table_dlg.merge_cells_title}</legend>
|
| | | <table border="0" cellpadding="0" cellspacing="3" width="100%">
|
| | | <tr>
|
| | | <td>{$lang_table_cols}:</td>
|
| | | <td align="right"><input type="text" name="numcols" value="" class="number min1" style="width: 30px" /></td>
|
| | | <td>
|
| | | <td>{#table_dlg.cols}:</td>
|
| | | <td align="right"><input type="text" name="numcols" value="" class="number min1 mceFocus" style="width: 30px" /></td>
|
| | | </tr>
|
| | | <tr>
|
| | | <td>{$lang_table_rows}:</td>
|
| | | <td>{#table_dlg.rows}:</td>
|
| | | <td align="right"><input type="text" name="numrows" value="" class="number min1" style="width: 30px" /></td>
|
| | | </tr>
|
| | | </table>
|
| | |
| | |
|
| | | <div class="mceActionPanel">
|
| | | <div style="float: left">
|
| | | <input type="button" id="insert" name="insert" value="{$lang_update}" onclick="mergeCells();" />
|
| | | <input type="submit" id="insert" name="insert" value="{#update}" />
|
| | | </div>
|
| | |
|
| | | <div style="float: right">
|
| | | <input type="button" id="cancel" name="cancel" value="{$lang_cancel}" onclick="tinyMCEPopup.close();" />
|
| | | <input type="button" id="cancel" name="cancel" value="{#cancel}" onclick="tinyMCEPopup.close();" />
|
| | | </div>
|
| | | </div>
|
| | | </form>
|
| | |
| | | <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
|
| | | <html xmlns="http://www.w3.org/1999/xhtml">
|
| | | <head>
|
| | | <title>{$lang_table_row_title}</title>
|
| | | <script language="javascript" type="text/javascript" src="../../tiny_mce_popup.js"></script>
|
| | | <script language="javascript" type="text/javascript" src="../../utils/mctabs.js"></script>
|
| | | <script language="javascript" type="text/javascript" src="../../utils/form_utils.js"></script>
|
| | | <script language="javascript" type="text/javascript" src="jscripts/row.js"></script>
|
| | | <title>{#table_dlg.row_title}</title>
|
| | | <script type="text/javascript" src="../../tiny_mce_popup.js"></script>
|
| | | <script type="text/javascript" src="../../utils/mctabs.js"></script>
|
| | | <script type="text/javascript" src="../../utils/form_utils.js"></script>
|
| | | <script type="text/javascript" src="../../utils/editable_selects.js"></script>
|
| | | <script type="text/javascript" src="js/row.js"></script>
|
| | | <link href="css/row.css" rel="stylesheet" type="text/css" />
|
| | | <base target="_self" />
|
| | | </head>
|
| | | <body id="tablerow" onload="tinyMCEPopup.executeOnLoad('init();');" style="display: none">
|
| | | <body id="tablerow" style="display: none">
|
| | | <form onsubmit="updateAction();return false;">
|
| | | <div class="tabs">
|
| | | <ul>
|
| | | <li id="general_tab" class="current"><span><a href="javascript:mcTabs.displayTab('general_tab','general_panel');" onmousedown="return false;">{$lang_table_general_tab}</a></span></li>
|
| | | <li id="advanced_tab"><span><a href="javascript:mcTabs.displayTab('advanced_tab','advanced_panel');" onmousedown="return false;">{$lang_table_advanced_tab}</a></span></li>
|
| | | <li id="general_tab" class="current"><span><a href="javascript:mcTabs.displayTab('general_tab','general_panel');" onmousedown="return false;">{#table_dlg.general_tab}</a></span></li>
|
| | | <li id="advanced_tab"><span><a href="javascript:mcTabs.displayTab('advanced_tab','advanced_panel');" onmousedown="return false;">{#table_dlg.advanced_tab}</a></span></li>
|
| | | </ul>
|
| | | </div>
|
| | |
|
| | | <div class="panel_wrapper">
|
| | | <div id="general_panel" class="panel current">
|
| | | <fieldset>
|
| | | <legend>{$lang_table_general_props}</legend>
|
| | | <legend>{#table_dlg.general_props}</legend>
|
| | |
|
| | | <table border="0" cellpadding="4" cellspacing="0">
|
| | | <tr>
|
| | | <td><label for="rowtype">{$lang_table_rowtype}</label></td>
|
| | | <td><label for="rowtype">{#table_dlg.rowtype}</label></td>
|
| | | <td class="col2">
|
| | | <select id="rowtype" name="rowtype">
|
| | | <option value="thead">{$lang_table_thead}</option>
|
| | | <option value="tbody">{$lang_table_tbody}</option>
|
| | | <option value="tfoot">{$lang_table_tfoot}</option>
|
| | | <select id="rowtype" name="rowtype" class="mceFocus">
|
| | | <option value="thead">{#table_dlg.thead}</option>
|
| | | <option value="tbody">{#table_dlg.tbody}</option>
|
| | | <option value="tfoot">{#table_dlg.tfoot}</option>
|
| | | </select>
|
| | | </td>
|
| | | </tr>
|
| | |
|
| | | <tr>
|
| | | <td><label for="align">{$lang_table_align}</label></td>
|
| | | <td><label for="align">{#table_dlg.align}</label></td>
|
| | | <td class="col2">
|
| | | <select id="align" name="align">
|
| | | <option value="">{$lang_not_set}</option>
|
| | | <option value="center">{$lang_table_align_middle}</option>
|
| | | <option value="left">{$lang_table_align_left}</option>
|
| | | <option value="right">{$lang_table_align_right}</option>
|
| | | <option value="">{#not_set}</option>
|
| | | <option value="center">{#table_dlg.align_middle}</option>
|
| | | <option value="left">{#table_dlg.align_left}</option>
|
| | | <option value="right">{#table_dlg.align_right}</option>
|
| | | </select>
|
| | | </td>
|
| | | </tr>
|
| | |
|
| | | <tr>
|
| | | <td><label for="valign">{$lang_table_valign}</label></td>
|
| | | <td><label for="valign">{#table_dlg.valign}</label></td>
|
| | | <td class="col2">
|
| | | <select id="valign" name="valign">
|
| | | <option value="">{$lang_not_set}</option>
|
| | | <option value="top">{$lang_table_align_top}</option>
|
| | | <option value="middle">{$lang_table_align_middle}</option>
|
| | | <option value="bottom">{$lang_table_align_bottom}</option>
|
| | | <option value="">{#not_set}</option>
|
| | | <option value="top">{#table_dlg.align_top}</option>
|
| | | <option value="middle">{#table_dlg.align_middle}</option>
|
| | | <option value="bottom">{#table_dlg.align_bottom}</option>
|
| | | </select>
|
| | | </td>
|
| | | </tr>
|
| | |
|
| | | <tr id="styleSelectRow">
|
| | | <td><label for="class">{$lang_class_name}</label></td>
|
| | | <td><label for="class">{#class_name}</label></td>
|
| | | <td class="col2">
|
| | | <select id="class" name="class">
|
| | | <option value="" selected="selected">{$lang_not_set}</option>
|
| | | <select id="class" name="class" class="mceEditableSelect">
|
| | | <option value="" selected="selected">{#not_set}</option>
|
| | | </select>
|
| | | </td>
|
| | | </tr>
|
| | |
|
| | | <tr>
|
| | | <td><label for="height">{$lang_table_height}</label></td>
|
| | | <td><label for="height">{#table_dlg.height}</label></td>
|
| | | <td class="col2"><input name="height" type="text" id="height" value="" size="4" maxlength="4" onchange="changedSize();" /></td>
|
| | | </tr>
|
| | | </table>
|
| | |
| | |
|
| | | <div id="advanced_panel" class="panel">
|
| | | <fieldset>
|
| | | <legend>{$lang_table_advanced_props}</legend>
|
| | | <legend>{#table_dlg.advanced_props}</legend>
|
| | |
|
| | | <table border="0" cellpadding="0" cellspacing="4">
|
| | | <tr>
|
| | | <td class="column1"><label for="id">{$lang_table_id}</label></td> |
| | | <td class="column1"><label for="id">{#table_dlg.id}</label></td> |
| | | <td><input id="id" name="id" type="text" value="" style="width: 200px" /></td>
|
| | | </tr>
|
| | |
|
| | | <tr>
|
| | | <td><label for="style">{$lang_table_style}</label></td>
|
| | | <td><label for="style">{#table_dlg.style}</label></td>
|
| | | <td><input type="text" id="style" name="style" value="" style="width: 200px;" onchange="changedStyle();" /></td>
|
| | | </tr>
|
| | |
|
| | | <tr>
|
| | | <td class="column1"><label for="dir">{$lang_table_langdir}</label></td> |
| | | <td class="column1"><label for="dir">{#table_dlg.langdir}</label></td> |
| | | <td>
|
| | | <select id="dir" name="dir" style="width: 200px">
|
| | | <option value="">{$lang_not_set}</option> |
| | | <option value="ltr">{$lang_table_ltr}</option> |
| | | <option value="rtl">{$lang_table_rtl}</option> |
| | | <option value="">{#not_set}</option> |
| | | <option value="ltr">{#table_dlg.ltr}</option> |
| | | <option value="rtl">{#table_dlg.rtl}</option> |
| | | </select>
|
| | | </td>
|
| | | </tr>
|
| | |
|
| | | <tr>
|
| | | <td class="column1"><label for="lang">{$lang_table_langcode}</label></td> |
| | | <td class="column1"><label for="lang">{#table_dlg.langcode}</label></td> |
| | | <td>
|
| | | <input id="lang" name="lang" type="text" value="" style="width: 200px" />
|
| | | </td>
|
| | | </tr>
|
| | |
|
| | | <tr>
|
| | | <td class="column1"><label for="backgroundimage">{$lang_table_bgimage}</label></td> |
| | | <td class="column1"><label for="backgroundimage">{#table_dlg.bgimage}</label></td> |
| | | <td>
|
| | | <table border="0" cellpadding="0" cellspacing="0">
|
| | | <tr>
|
| | |
| | | </tr>
|
| | |
|
| | | <tr>
|
| | | <td class="column1"><label for="bgcolor">{$lang_table_bgcolor}</label></td> |
| | | <td class="column1"><label for="bgcolor">{#table_dlg.bgcolor}</label></td> |
| | | <td>
|
| | | <table border="0" cellpadding="0" cellspacing="0">
|
| | | <tr>
|
| | |
| | | <div class="mceActionPanel">
|
| | | <div>
|
| | | <select id="action" name="action">
|
| | | <option value="row">{$lang_table_row_row}</option>
|
| | | <option value="odd">{$lang_table_row_odd}</option>
|
| | | <option value="even">{$lang_table_row_even}</option>
|
| | | <option value="all">{$lang_table_row_all}</option>
|
| | | <option value="row">{#table_dlg.row_row}</option>
|
| | | <option value="odd">{#table_dlg.row_odd}</option>
|
| | | <option value="even">{#table_dlg.row_even}</option>
|
| | | <option value="all">{#table_dlg.row_all}</option>
|
| | | </select>
|
| | | </div>
|
| | |
|
| | | <div style="float: left">
|
| | | <div><input type="button" id="insert" name="insert" value="{$lang_update}" onclick="updateAction();" /></div>
|
| | | <div><input type="submit" id="insert" name="insert" value="{#update}" /></div>
|
| | | </div>
|
| | |
|
| | | <div style="float: right">
|
| | | <input type="button" id="cancel" name="cancel" value="{$lang_cancel}" onclick="tinyMCEPopup.close();" />
|
| | | <input type="button" id="cancel" name="cancel" value="{#cancel}" onclick="tinyMCEPopup.close();" />
|
| | | </div>
|
| | | </div>
|
| | | </form>
|
| | |
| | | <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
|
| | | <html xmlns="http://www.w3.org/1999/xhtml">
|
| | | <head>
|
| | | <title>{$lang_table_title}</title>
|
| | | <script language="javascript" type="text/javascript" src="../../tiny_mce_popup.js"></script>
|
| | | <script language="javascript" type="text/javascript" src="../../utils/mctabs.js"></script>
|
| | | <script language="javascript" type="text/javascript" src="../../utils/form_utils.js"></script>
|
| | | <script language="javascript" type="text/javascript" src="../../utils/validate.js"></script>
|
| | | <script language="javascript" type="text/javascript" src="jscripts/table.js"></script>
|
| | | <title>{#table_dlg.title}</title>
|
| | | <script type="text/javascript" src="../../tiny_mce_popup.js"></script>
|
| | | <script type="text/javascript" src="../../utils/mctabs.js"></script>
|
| | | <script type="text/javascript" src="../../utils/form_utils.js"></script>
|
| | | <script type="text/javascript" src="../../utils/validate.js"></script>
|
| | | <script type="text/javascript" src="../../utils/editable_selects.js"></script>
|
| | | <script type="text/javascript" src="js/table.js"></script>
|
| | | <link href="css/table.css" rel="stylesheet" type="text/css" />
|
| | | <base target="_self" />
|
| | | </head>
|
| | | <body id="table" onload="tinyMCEPopup.executeOnLoad('init();');" style="display: none">
|
| | | <body id="table" style="display: none">
|
| | | <form onsubmit="insertTable();return false;" action="#">
|
| | | <div class="tabs">
|
| | | <ul>
|
| | | <li id="general_tab" class="current"><span><a href="javascript:mcTabs.displayTab('general_tab','general_panel');" onmousedown="return false;">{$lang_table_general_tab}</a></span></li>
|
| | | <li id="advanced_tab"><span><a href="javascript:mcTabs.displayTab('advanced_tab','advanced_panel');" onmousedown="return false;">{$lang_table_advanced_tab}</a></span></li>
|
| | | <li id="general_tab" class="current"><span><a href="javascript:mcTabs.displayTab('general_tab','general_panel');" onmousedown="return false;">{#table_dlg.general_tab}</a></span></li>
|
| | | <li id="advanced_tab"><span><a href="javascript:mcTabs.displayTab('advanced_tab','advanced_panel');" onmousedown="return false;">{#table_dlg.advanced_tab}</a></span></li>
|
| | | </ul>
|
| | | </div>
|
| | |
|
| | | <div class="panel_wrapper">
|
| | | <div id="general_panel" class="panel current">
|
| | | <fieldset>
|
| | | <legend>{$lang_table_general_props}</legend>
|
| | |
|
| | | <legend>{#table_dlg.general_props}</legend>
|
| | | <table border="0" cellpadding="4" cellspacing="0" width="100%">
|
| | | <tr>
|
| | | <td><label id="colslabel" for="cols">{$lang_table_cols}</label></td>
|
| | | <td><input id="cols" name="cols" type="text" value="" size="3" maxlength="3" class="required number min1" /></td>
|
| | | <td><label id="rowslabel" for="rows">{$lang_table_rows}</label></td>
|
| | | <td><label id="colslabel" for="cols">{#table_dlg.cols}</label></td>
|
| | | <td><input id="cols" name="cols" type="text" value="" size="3" maxlength="3" class="required number min1 mceFocus" /></td>
|
| | | <td><label id="rowslabel" for="rows">{#table_dlg.rows}</label></td>
|
| | | <td><input id="rows" name="rows" type="text" value="" size="3" maxlength="3" class="required number min1" /></td>
|
| | | </tr>
|
| | | <tr>
|
| | | <td><label id="cellpaddinglabel" for="cellpadding">{$lang_table_cellpadding}</label></td>
|
| | | <td><label id="cellpaddinglabel" for="cellpadding">{#table_dlg.cellpadding}</label></td>
|
| | | <td><input id="cellpadding" name="cellpadding" type="text" value="" size="3" maxlength="3" class="number" /></td>
|
| | | <td><label id="cellspacinglabel" for="cellspacing">{$lang_table_cellspacing}</label></td>
|
| | | <td><label id="cellspacinglabel" for="cellspacing">{#table_dlg.cellspacing}</label></td>
|
| | | <td><input id="cellspacing" name="cellspacing" type="text" value="" size="3" maxlength="3" class="number" /></td>
|
| | | </tr>
|
| | | <tr>
|
| | | <td><label id="alignlabel" for="align">{$lang_table_align}</label></td>
|
| | | <td><label id="alignlabel" for="align">{#table_dlg.align}</label></td>
|
| | | <td><select id="align" name="align">
|
| | | <option value="">{$lang_not_set}</option>
|
| | | <option value="center">{$lang_table_align_middle}</option>
|
| | | <option value="left">{$lang_table_align_left}</option>
|
| | | <option value="right">{$lang_table_align_right}</option>
|
| | | <option value="">{#not_set}</option>
|
| | | <option value="center">{#table_dlg.align_middle}</option>
|
| | | <option value="left">{#table_dlg.align_left}</option>
|
| | | <option value="right">{#table_dlg.align_right}</option>
|
| | | </select></td>
|
| | | <td><label id="borderlabel" for="border">{$lang_table_border}</label></td>
|
| | | <td><label id="borderlabel" for="border">{#table_dlg.border}</label></td>
|
| | | <td><input id="border" name="border" type="text" value="" size="3" maxlength="3" onchange="changedBorder();" class="number" /></td>
|
| | | </tr>
|
| | | <tr id="width_row">
|
| | | <td><label id="widthlabel" for="width">{$lang_table_width}</label></td>
|
| | | <td><label id="widthlabel" for="width">{#table_dlg.width}</label></td>
|
| | | <td><input name="width" type="text" id="width" value="" size="4" maxlength="4" onchange="changedSize();" class="size" /></td>
|
| | | <td><label id="heightlabel" for="height">{$lang_table_height}</label></td>
|
| | | <td><label id="heightlabel" for="height">{#table_dlg.height}</label></td>
|
| | | <td><input name="height" type="text" id="height" value="" size="4" maxlength="4" onchange="changedSize();" class="size" /></td>
|
| | | </tr>
|
| | | <tr id="styleSelectRow">
|
| | | <td><label id="classlabel" for="class">{$lang_class_name}</label></td>
|
| | | <td><label id="classlabel" for="class">{#class_name}</label></td>
|
| | | <td colspan="3">
|
| | | <select id="class" name="class">
|
| | | <option value="" selected>{$lang_not_set}</option>
|
| | | <select id="class" name="class" class="mceEditableSelect">
|
| | | <option value="" selected>{#not_set}</option>
|
| | | </select></td>
|
| | | </tr>
|
| | | <tr>
|
| | | <td class="column1"><label for="caption">{$lang_table_caption}</label></td> |
| | | <td class="column1"><label for="caption">{#table_dlg.caption}</label></td> |
| | | <td><input id="caption" name="caption" type="checkbox" class="checkbox" value="true" /></td>
|
| | | </tr>
|
| | | </table>
|
| | |
| | |
|
| | | <div id="advanced_panel" class="panel">
|
| | | <fieldset>
|
| | | <legend>{$lang_table_advanced_props}</legend>
|
| | | <legend>{#table_dlg.advanced_props}</legend>
|
| | |
|
| | | <table border="0" cellpadding="0" cellspacing="4">
|
| | | <tr>
|
| | | <td class="column1"><label for="id">{$lang_table_id}</label></td> |
| | | <td class="column1"><label for="id">{#table_dlg.id}</label></td> |
| | | <td><input id="id" name="id" type="text" value="" class="advfield" /></td>
|
| | | </tr>
|
| | |
|
| | | <tr>
|
| | | <td class="column1"><label for="summary">{$lang_table_summary}</label></td> |
| | | <td class="column1"><label for="summary">{#table_dlg.summary}</label></td> |
| | | <td><input id="summary" name="summary" type="text" value="" class="advfield" /></td>
|
| | | </tr>
|
| | |
|
| | | <tr>
|
| | | <td><label for="style">{$lang_table_style}</label></td>
|
| | | <td><label for="style">{#table_dlg.style}</label></td>
|
| | | <td><input type="text" id="style" name="style" value="" class="advfield" onchange="changedStyle();" /></td>
|
| | | </tr>
|
| | |
|
| | | <tr>
|
| | | <td class="column1"><label for="dir">{$lang_table_langdir}</label></td> |
| | | <td>
|
| | | <select id="dir" name="dir" class="advfield"> |
| | | <option value="">{$lang_not_set}</option> |
| | | <option value="ltr">{$lang_table_ltr}</option> |
| | | <option value="rtl">{$lang_table_rtl}</option> |
| | | </select>
|
| | | </td> |
| | | </tr>
|
| | |
|
| | | <tr>
|
| | | <td class="column1"><label id="langlabel" for="lang">{$lang_table_langcode}</label></td> |
| | | <td class="column1"><label id="langlabel" for="lang">{#table_dlg.langcode}</label></td> |
| | | <td>
|
| | | <input id="lang" name="lang" type="text" value="" class="advfield" />
|
| | | </td>
|
| | | </tr>
|
| | |
|
| | | <tr>
|
| | | <td class="column1"><label for="backgroundimage">{$lang_table_bgimage}</label></td> |
| | | <td class="column1"><label for="backgroundimage">{#table_dlg.bgimage}</label></td> |
| | | <td>
|
| | | <table border="0" cellpadding="0" cellspacing="0">
|
| | | <tr>
|
| | |
| | | </tr>
|
| | |
|
| | | <tr>
|
| | | <td class="column1"><label for="bordercolor">{$lang_table_bordercolor}</label></td> |
| | | <td class="column1"><label for="frame">{#table_dlg.frame}</label></td> |
| | | <td>
|
| | | <select id="frame" name="frame" class="advfield"> |
| | | <option value="">{#not_set}</option> |
| | | <option value="none">{#table_dlg.frame_none}</option>
|
| | | <option value="groups">{#table_dlg.frame_groups}</option>
|
| | | <option value="rows">{#table_dlg.frame_rows}</option>
|
| | | <option value="cols">{#table_dlg.frame_cols}</option>
|
| | | <option value="all">{#table_dlg.frame_all}</option>
|
| | | </select>
|
| | | </td> |
| | | </tr>
|
| | |
|
| | | <tr>
|
| | | <td class="column1"><label for="rules">{#table_dlg.rules}</label></td> |
| | | <td>
|
| | | <select id="rules" name="rules" class="advfield"> |
| | | <option value="">{#not_set}</option> |
| | | <option value="void">{#table_dlg.rules_void}</option>
|
| | | <option value="above">{#table_dlg.rules_above}</option> |
| | | <option value="below">{#table_dlg.rules_below}</option> |
| | | <option value="hsides">{#table_dlg.rules_hsides}</option> |
| | | <option value="lhs">{#table_dlg.rules_lhs}</option> |
| | | <option value="rhs">{#table_dlg.rules_rhs}</option> |
| | | <option value="vsides">{#table_dlg.rules_vsides}</option> |
| | | <option value="box">{#table_dlg.rules_box}</option> |
| | | <option value="border">{#table_dlg.rules_border}</option> |
| | | </select>
|
| | | </td> |
| | | </tr>
|
| | |
|
| | | <tr>
|
| | | <td class="column1"><label for="dir">{#table_dlg.langdir}</label></td> |
| | | <td>
|
| | | <select id="dir" name="dir" class="advfield"> |
| | | <option value="">{#not_set}</option> |
| | | <option value="ltr">{#table_dlg.ltr}</option> |
| | | <option value="rtl">{#table_dlg.rtl}</option> |
| | | </select>
|
| | | </td> |
| | | </tr>
|
| | |
|
| | | <tr>
|
| | | <td class="column1"><label for="bordercolor">{#table_dlg.bordercolor}</label></td> |
| | | <td>
|
| | | <table border="0" cellpadding="0" cellspacing="0">
|
| | | <tr>
|
| | |
| | | </tr>
|
| | |
|
| | | <tr>
|
| | | <td class="column1"><label for="bgcolor">{$lang_table_bgcolor}</label></td> |
| | | <td class="column1"><label for="bgcolor">{#table_dlg.bgcolor}</label></td> |
| | | <td>
|
| | | <table border="0" cellpadding="0" cellspacing="0">
|
| | | <tr>
|
| | |
| | |
|
| | | <div class="mceActionPanel">
|
| | | <div style="float: left">
|
| | | <input type="button" id="insert" name="insert" value="{$lang_insert}" onclick="insertTable();" />
|
| | | <input type="submit" id="insert" name="insert" value="{#insert}" />
|
| | | </div>
|
| | |
|
| | | <div style="float: right">
|
| | | <input type="button" id="cancel" name="cancel" value="{$lang_cancel}" onclick="tinyMCEPopup.close();" />
|
| | | <input type="button" id="cancel" name="cancel" value="{#cancel}" onclick="tinyMCEPopup.close();" />
|
| | | </div>
|
| | | </div>
|
| | | </form>
|
| | |
| | | tinyMCE.importPluginLanguagePack('visualchars');var TinyMCE_VisualCharsPlugin={getInfo:function(){return{longname:'Visual characters',author:'Moxiecode Systems AB',authorurl:'http://tinymce.moxiecode.com',infourl:'http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/visualchars',version:tinyMCE.majorVersion+"."+tinyMCE.minorVersion}},initInstance:function(inst){inst.visualChars={state:false}},getControlHTML:function(cn){switch(cn){case"visualchars":return tinyMCE.getButtonHTML(cn,'lang_visualchars_desc','{$pluginurl}/images/visualchars.gif','mceVisualChars',false)}return""},execCommand:function(editor_id,element,command,user_interface,value){var inst=tinyMCE.getInstanceById(editor_id);switch(command){case"mceVisualChars":this._toggleVisualChars(editor_id,inst);return true}return false},cleanup:function(type,content,inst){if(type=="insert_to_editor_dom"||type=="get_from_editor_dom"){inst.visualChars.state=true;this._toggleVisualChars(inst.editorId,inst)}return content},_toggleVisualChars:function(editor_id,inst){var nl,i,h,d=inst.getDoc(),b=inst.getBody(),nv,s=inst.selection,bo;inst.visualChars.state=!inst.visualChars.state;bo=s.getBookmark(true);tinyMCE.switchClass(editor_id+'_visualchars',inst.visualChars.state?'mceButtonSelected':'mceButtonNormal');if(inst.visualChars.state){nl=tinyMCE.selectNodes(b,function(n){return n.nodeType==3&&n.nodeValue&&n.nodeValue.indexOf('\u00a0')!=-1});for(i=0;i<nl.length;i++){nv=nl[i].nodeValue;nv=nv.replace(/(\u00a0+)/g,'<span class="mceItemHiddenVisualChar">$1</span>');nv=nv.replace(/\u00a0/g,'\u00b7');tinyMCE.setOuterHTML(nl[i],nv,d)}}else{nl=tinyMCE.selectNodes(b,function(n){return n.nodeType==1&&n.nodeName=='SPAN'&&n.className=='mceItemHiddenVisualChar'});for(i=0;i<nl.length;i++)tinyMCE.setOuterHTML(nl[i],nl[i].innerHTML.replace(/(·|\u00b7)/g,' '),d)}}};tinyMCE.addPlugin("visualchars",TinyMCE_VisualCharsPlugin); |
| | | (function(){tinymce.create('tinymce.plugins.VisualChars',{init:function(ed,url){var t=this;t.editor=ed;ed.addCommand('mceVisualChars',t._toggleVisualChars,t);ed.addButton('visualchars',{title:'visualchars.desc',cmd:'mceVisualChars'});ed.onBeforeGetContent.add(function(ed,o){if(t.state){t.state=true;t._toggleVisualChars();}});},getInfo:function(){return{longname:'Visual characters',author:'Moxiecode Systems AB',authorurl:'http://tinymce.moxiecode.com',infourl:'http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/visualchars',version:tinymce.majorVersion+"."+tinymce.minorVersion};},_toggleVisualChars:function(){var t=this,ed=t.editor,nl,i,h,d=ed.getDoc(),b=ed.getBody(),nv,s=ed.selection,bo;t.state=!t.state;ed.controlManager.setActive('visualchars',t.state);if(t.state){nl=[];tinymce.walk(b,function(n){if(n.nodeType==3&&n.nodeValue&&n.nodeValue.indexOf('\u00a0')!=-1)nl.push(n);},'childNodes');for(i=0;i<nl.length;i++){nv=nl[i].nodeValue;nv=nv.replace(/(\u00a0+)/g,'<span class="mceItemHidden mceVisualNbsp">$1</span>');nv=nv.replace(/\u00a0/g,'\u00b7');ed.dom.setOuterHTML(nl[i],nv,d);}}else{nl=tinymce.grep(ed.dom.select('span',b),function(n){return ed.dom.hasClass(n,'mceVisualNbsp');});for(i=0;i<nl.length;i++)ed.dom.setOuterHTML(nl[i],nl[i].innerHTML.replace(/(·|\u00b7)/g,' '),d);}}});tinymce.PluginManager.add('visualchars',tinymce.plugins.VisualChars);})(); |
| | |
| | | /**
|
| | | * $Id: editor_plugin_src.js 42 2006-08-08 14:32:24Z spocke $
|
| | | * $Id: editor_plugin_src.js 201 2007-02-12 15:56:56Z spocke $
|
| | | *
|
| | | * @author Moxiecode
|
| | | * @copyright Copyright © 2004-2007, Moxiecode Systems AB, All rights reserved.
|
| | | * @copyright Copyright © 2004-2008, Moxiecode Systems AB, All rights reserved.
|
| | | */
|
| | |
|
| | | /* Import plugin specific language pack */
|
| | | tinyMCE.importPluginLanguagePack('visualchars');
|
| | | (function() {
|
| | | tinymce.create('tinymce.plugins.VisualChars', {
|
| | | init : function(ed, url) {
|
| | | var t = this;
|
| | |
|
| | | var TinyMCE_VisualCharsPlugin = {
|
| | | getInfo : function() {
|
| | | return {
|
| | | longname : 'Visual characters',
|
| | | author : 'Moxiecode Systems AB',
|
| | | authorurl : 'http://tinymce.moxiecode.com',
|
| | | infourl : 'http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/visualchars',
|
| | | version : tinyMCE.majorVersion + "." + tinyMCE.minorVersion
|
| | | };
|
| | | },
|
| | | t.editor = ed;
|
| | |
|
| | | initInstance : function(inst) {
|
| | | inst.visualChars = {
|
| | | state : false
|
| | | };
|
| | | },
|
| | | // Register commands
|
| | | ed.addCommand('mceVisualChars', t._toggleVisualChars, t);
|
| | |
|
| | | getControlHTML : function(cn) {
|
| | | switch (cn) {
|
| | | case "visualchars":
|
| | | return tinyMCE.getButtonHTML(cn, 'lang_visualchars_desc', '{$pluginurl}/images/visualchars.gif', 'mceVisualChars', false);
|
| | | }
|
| | | // Register buttons
|
| | | ed.addButton('visualchars', {title : 'visualchars.desc', cmd : 'mceVisualChars'});
|
| | |
|
| | | return "";
|
| | | },
|
| | | ed.onBeforeGetContent.add(function(ed, o) {
|
| | | if (t.state) {
|
| | | t.state = true;
|
| | | t._toggleVisualChars();
|
| | | }
|
| | | });
|
| | | },
|
| | |
|
| | | execCommand : function(editor_id, element, command, user_interface, value) {
|
| | | var inst = tinyMCE.getInstanceById(editor_id);
|
| | | getInfo : function() {
|
| | | return {
|
| | | longname : 'Visual characters',
|
| | | author : 'Moxiecode Systems AB',
|
| | | authorurl : 'http://tinymce.moxiecode.com',
|
| | | infourl : 'http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/visualchars',
|
| | | version : tinymce.majorVersion + "." + tinymce.minorVersion
|
| | | };
|
| | | },
|
| | |
|
| | | switch (command) {
|
| | | case "mceVisualChars":
|
| | | this._toggleVisualChars(editor_id, inst);
|
| | | return true;
|
| | | }
|
| | | // Private methods
|
| | |
|
| | | return false;
|
| | | },
|
| | | _toggleVisualChars : function() {
|
| | | var t = this, ed = t.editor, nl, i, h, d = ed.getDoc(), b = ed.getBody(), nv, s = ed.selection, bo;
|
| | |
|
| | | cleanup : function(type, content, inst) {
|
| | | if (type == "insert_to_editor_dom" || type == "get_from_editor_dom") {
|
| | | inst.visualChars.state = true;
|
| | | this._toggleVisualChars(inst.editorId, inst);
|
| | | }
|
| | | t.state = !t.state;
|
| | | ed.controlManager.setActive('visualchars', t.state);
|
| | |
|
| | | return content;
|
| | | },
|
| | | if (t.state) {
|
| | | nl = [];
|
| | | tinymce.walk(b, function(n) {
|
| | | if (n.nodeType == 3 && n.nodeValue && n.nodeValue.indexOf('\u00a0') != -1)
|
| | | nl.push(n);
|
| | | }, 'childNodes');
|
| | |
|
| | | // Private plugin internal methods
|
| | | for (i=0; i<nl.length; i++) {
|
| | | nv = nl[i].nodeValue;
|
| | | nv = nv.replace(/(\u00a0+)/g, '<span class="mceItemHidden mceVisualNbsp">$1</span>');
|
| | | nv = nv.replace(/\u00a0/g, '\u00b7');
|
| | | ed.dom.setOuterHTML(nl[i], nv, d);
|
| | | }
|
| | | } else {
|
| | | nl = tinymce.grep(ed.dom.select('span', b), function(n) {
|
| | | return ed.dom.hasClass(n, 'mceVisualNbsp');
|
| | | });
|
| | |
|
| | | _toggleVisualChars : function(editor_id, inst) {
|
| | | var nl, i, h, d = inst.getDoc(), b = inst.getBody(), nv, s = inst.selection, bo;
|
| | |
|
| | | inst.visualChars.state = !inst.visualChars.state;
|
| | |
|
| | | bo = s.getBookmark(true);
|
| | |
|
| | | tinyMCE.switchClass(editor_id + '_visualchars', inst.visualChars.state ? 'mceButtonSelected' : 'mceButtonNormal');
|
| | |
|
| | | if (inst.visualChars.state) {
|
| | | nl = tinyMCE.selectNodes(b, function(n) {return n.nodeType == 3 && n.nodeValue && n.nodeValue.indexOf('\u00a0') != -1;});
|
| | |
|
| | | for (i=0; i<nl.length; i++) {
|
| | | nv = nl[i].nodeValue;
|
| | | nv = nv.replace(/(\u00a0+)/g, '<span class="mceItemHiddenVisualChar">$1</span>');
|
| | | nv = nv.replace(/\u00a0/g, '\u00b7');
|
| | | tinyMCE.setOuterHTML(nl[i], nv, d);
|
| | | for (i=0; i<nl.length; i++)
|
| | | ed.dom.setOuterHTML(nl[i], nl[i].innerHTML.replace(/(·|\u00b7)/g, ' '), d);
|
| | | }
|
| | | } else {
|
| | | nl = tinyMCE.selectNodes(b, function(n) {return n.nodeType == 1 && n.nodeName == 'SPAN' && n.className == 'mceItemHiddenVisualChar';});
|
| | |
|
| | | for (i=0; i<nl.length; i++)
|
| | | tinyMCE.setOuterHTML(nl[i], nl[i].innerHTML.replace(/(·|\u00b7)/g, ' '), d);
|
| | | }
|
| | | });
|
| | |
|
| | | //s.moveToBookmark(bo);
|
| | | }
|
| | | };
|
| | |
|
| | | tinyMCE.addPlugin("visualchars", TinyMCE_VisualCharsPlugin);
|
| | | // Register plugin
|
| | | tinymce.PluginManager.add('visualchars', tinymce.plugins.VisualChars);
|
| | | })(); |
New file |
| | |
| | | <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
|
| | | <html xmlns="http://www.w3.org/1999/xhtml">
|
| | | <head>
|
| | | <title>{#xhtmlxtras_dlg.title_abbr_element}</title>
|
| | | <script type="text/javascript" src="../../tiny_mce_popup.js"></script>
|
| | | <script type="text/javascript" src="../../utils/mctabs.js"></script>
|
| | | <script type="text/javascript" src="../../utils/form_utils.js"></script>
|
| | | <script type="text/javascript" src="../../utils/editable_selects.js"></script>
|
| | | <script type="text/javascript" src="js/element_common.js"></script>
|
| | | <script type="text/javascript" src="js/abbr.js"></script>
|
| | | <link rel="stylesheet" type="text/css" href="css/popup.css" />
|
| | | <base target="_self" />
|
| | | </head>
|
| | | <body style="display: none">
|
| | | <form onsubmit="insertAbbr();return false;" action="#">
|
| | | <div class="tabs">
|
| | | <ul>
|
| | | <li id="general_tab" class="current"><span><a href="javascript:mcTabs.displayTab('general_tab','general_panel');" onmousedown="return false;">{#xhtmlxtras_dlg.general_tab}</a></span></li>
|
| | | <!-- <li id="events_tab"><span><a href="javascript:mcTabs.displayTab('events_tab','events_panel');" onmousedown="return false;">{#xhtmlxtras_dlg.events_tab}</a></span></li> -->
|
| | | </ul>
|
| | | </div>
|
| | |
|
| | | <div class="panel_wrapper">
|
| | | <div id="general_panel" class="panel current">
|
| | | <fieldset>
|
| | | <legend>{#xhtmlxtras_dlg.fieldset_attrib_tab}</legend>
|
| | | <table border="0" cellpadding="0" cellspacing="4">
|
| | | <tr>
|
| | | <td class="label"><label id="titlelabel" for="title">{#xhtmlxtras_dlg.attribute_label_title}</label>:</td> |
| | | <td><input id="title" name="title" type="text" value="" class="field mceFocus" /></td> |
| | | </tr>
|
| | | <tr>
|
| | | <td class="label"><label id="idlabel" for="id">{#xhtmlxtras_dlg.attribute_label_id}</label>:</td> |
| | | <td><input id="id" name="id" type="text" value="" class="field" /></td> |
| | | </tr>
|
| | | <tr>
|
| | | <td class="label"><label id="classlabel" for="class">{#xhtmlxtras_dlg.attribute_label_class}</label>:</td> |
| | | <td>
|
| | | <select id="class" name="class" class="field mceEditableSelect">
|
| | | <option value="">{#not_set}</option> |
| | | </select>
|
| | | </td>
|
| | | </tr>
|
| | | <tr>
|
| | | <td class="label"><label id="stylelabel" for="class">{#xhtmlxtras_dlg.attribute_label_style}</label>:</td> |
| | | <td><input id="style" name="style" type="text" value="" class="field" /></td> |
| | | </tr>
|
| | | <tr>
|
| | | <td class="label"><label id="dirlabel" for="dir">{#xhtmlxtras_dlg.attribute_label_langdir}</label>:</td> |
| | | <td>
|
| | | <select id="dir" name="dir" class="field"> |
| | | <option value="">{#not_set}</option> |
| | | <option value="ltr">{#xhtmlxtras_dlg.attribute_option_ltr}</option> |
| | | <option value="rtl">{#xhtmlxtras_dlg.attribute_option_rtl}</option> |
| | | </select>
|
| | | </td> |
| | | </tr>
|
| | | <tr>
|
| | | <td class="label"><label id="langlabel" for="lang">{#xhtmlxtras_dlg.attribute_label_langcode}</label>:</td> |
| | | <td>
|
| | | <input id="lang" name="lang" type="text" value="" class="field" />
|
| | | </td> |
| | | </tr>
|
| | | </table>
|
| | | </fieldset>
|
| | | </div>
|
| | | <div id="events_panel" class="panel">
|
| | | <fieldset>
|
| | | <legend>{#xhtmlxtras_dlg.fieldset_events_tab}</legend>
|
| | |
|
| | | <table border="0" cellpadding="0" cellspacing="4">
|
| | | <tr>
|
| | | <td class="label"><label for="onfocus">onfocus</label>:</td> |
| | | <td><input id="onfocus" name="onfocus" type="text" value="" class="field" /></td> |
| | | </tr>
|
| | |
|
| | | <tr>
|
| | | <td class="label"><label for="onblur">onblur</label>:</td> |
| | | <td><input id="onblur" name="onblur" type="text" value="" class="field" /></td> |
| | | </tr>
|
| | |
|
| | | <tr>
|
| | | <td class="label"><label for="onclick">onclick</label>:</td> |
| | | <td><input id="onclick" name="onclick" type="text" value="" class="field" /></td> |
| | | </tr>
|
| | |
|
| | | <tr>
|
| | | <td class="label"><label for="ondblclick">ondblclick</label>:</td> |
| | | <td><input id="ondblclick" name="ondblclick" type="text" value="" class="field" /></td> |
| | | </tr>
|
| | |
|
| | | <tr>
|
| | | <td class="label"><label for="onmousedown">onmousedown</label>:</td> |
| | | <td><input id="onmousedown" name="onmousedown" type="text" value="" class="field" /></td> |
| | | </tr>
|
| | |
|
| | | <tr>
|
| | | <td class="label"><label for="onmouseup">onmouseup</label>:</td> |
| | | <td><input id="onmouseup" name="onmouseup" type="text" value="" class="field" /></td> |
| | | </tr>
|
| | |
|
| | | <tr>
|
| | | <td class="label"><label for="onmouseover">onmouseover</label>:</td> |
| | | <td><input id="onmouseover" name="onmouseover" type="text" value="" class="field" /></td> |
| | | </tr>
|
| | |
|
| | | <tr>
|
| | | <td class="label"><label for="onmousemove">onmousemove</label>:</td> |
| | | <td><input id="onmousemove" name="onmousemove" type="text" value="" class="field" /></td> |
| | | </tr>
|
| | |
|
| | | <tr>
|
| | | <td class="label"><label for="onmouseout">onmouseout</label>:</td> |
| | | <td><input id="onmouseout" name="onmouseout" type="text" value="" class="field" /></td> |
| | | </tr>
|
| | |
|
| | | <tr>
|
| | | <td class="label"><label for="onkeypress">onkeypress</label>:</td> |
| | | <td><input id="onkeypress" name="onkeypress" type="text" value="" class="field" /></td> |
| | | </tr>
|
| | |
|
| | | <tr>
|
| | | <td class="label"><label for="onkeydown">onkeydown</label>:</td> |
| | | <td><input id="onkeydown" name="onkeydown" type="text" value="" class="field" /></td> |
| | | </tr>
|
| | |
|
| | | <tr>
|
| | | <td class="label"><label for="onkeyup">onkeyup</label>:</td> |
| | | <td><input id="onkeyup" name="onkeyup" type="text" value="" class="field" /></td> |
| | | </tr>
|
| | | </table>
|
| | | </fieldset>
|
| | | </div>
|
| | | </div>
|
| | | <div class="mceActionPanel">
|
| | | <div style="float: left">
|
| | | <input type="submit" id="insert" name="insert" value="{#update}" />
|
| | | </div>
|
| | | <div style="float: left">
|
| | | <input type="button" id="remove" name="remove" class="button" value="{#xhtmlxtras_dlg.remove}" onclick="removeAbbr();" style="display: none;" />
|
| | | </div>
|
| | | <div style="float: right">
|
| | | <input type="button" id="cancel" name="cancel" value="{#cancel}" onclick="tinyMCEPopup.close();" />
|
| | | </div>
|
| | | </div>
|
| | |
|
| | | </form>
|
| | | </body>
|
| | | </html>
|
New file |
| | |
| | | <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
|
| | | <html xmlns="http://www.w3.org/1999/xhtml">
|
| | | <head>
|
| | | <title>{#xhtmlxtras_dlg.title_acronym_element}</title>
|
| | | <script type="text/javascript" src="../../tiny_mce_popup.js"></script>
|
| | | <script type="text/javascript" src="../../utils/mctabs.js"></script>
|
| | | <script type="text/javascript" src="../../utils/form_utils.js"></script>
|
| | | <script type="text/javascript" src="../../utils/editable_selects.js"></script>
|
| | | <script type="text/javascript" src="js/element_common.js"></script>
|
| | | <script type="text/javascript" src="js/acronym.js"></script>
|
| | | <link rel="stylesheet" type="text/css" href="css/popup.css" />
|
| | | <base target="_self" />
|
| | | </head>
|
| | | <body style="display: none">
|
| | | <form onsubmit="insertAcronym();return false;" action="#">
|
| | | <div class="tabs">
|
| | | <ul>
|
| | | <li id="general_tab" class="current"><span><a href="javascript:mcTabs.displayTab('general_tab','general_panel');" onmousedown="return false;">{#xhtmlxtras_dlg.general_tab}</a></span></li>
|
| | | <!-- <li id="events_tab"><span><a href="javascript:mcTabs.displayTab('events_tab','events_panel');" onmousedown="return false;">{#xhtmlxtras_dlg.events_tab}</a></span></li> -->
|
| | | </ul>
|
| | | </div>
|
| | |
|
| | | <div class="panel_wrapper">
|
| | | <div id="general_panel" class="panel current">
|
| | | <fieldset>
|
| | | <legend>{#xhtmlxtras_dlg.fieldset_attrib_tab}</legend>
|
| | | <table border="0" cellpadding="0" cellspacing="4">
|
| | | <tr>
|
| | | <td class="label"><label id="titlelabel" for="title">{#xhtmlxtras_dlg.attribute_label_title}</label>:</td> |
| | | <td><input id="title" name="title" type="text" value="" class="field mceFocus" /></td> |
| | | </tr>
|
| | | <tr>
|
| | | <td class="label"><label id="idlabel" for="id">{#xhtmlxtras_dlg.attribute_label_id}</label>:</td> |
| | | <td><input id="id" name="id" type="text" value="" class="field" /></td> |
| | | </tr>
|
| | | <tr>
|
| | | <td class="label"><label id="classlabel" for="class">{#xhtmlxtras_dlg.attribute_label_class}</label>:</td> |
| | | <td>
|
| | | <select id="class" name="class" class="field mceEditableSelect">
|
| | | <option value="">{#not_set}</option> |
| | | </select>
|
| | | </td>
|
| | | </tr>
|
| | | <tr>
|
| | | <td class="label"><label id="stylelabel" for="class">{#xhtmlxtras_dlg.attribute_label_style}</label>:</td> |
| | | <td><input id="style" name="style" type="text" value="" class="field" /></td> |
| | | </tr>
|
| | | <tr>
|
| | | <td class="label"><label id="dirlabel" for="dir">{#xhtmlxtras_dlg.attribute_label_langdir}</label>:</td> |
| | | <td>
|
| | | <select id="dir" name="dir" class="field"> |
| | | <option value="">{#not_set}</option> |
| | | <option value="ltr">{#xhtmlxtras_dlg.attribute_option_ltr}</option> |
| | | <option value="rtl">{#xhtmlxtras_dlg.attribute_option_rtl}</option> |
| | | </select>
|
| | | </td> |
| | | </tr>
|
| | | <tr>
|
| | | <td class="label"><label id="langlabel" for="lang">{#xhtmlxtras_dlg.attribute_label_langcode}</label>:</td> |
| | | <td>
|
| | | <input id="lang" name="lang" type="text" value="" class="field" />
|
| | | </td> |
| | | </tr>
|
| | | </table>
|
| | | </fieldset>
|
| | | </div>
|
| | | <div id="events_panel" class="panel">
|
| | | <fieldset>
|
| | | <legend>{#xhtmlxtras_dlg.fieldset_events_tab}</legend>
|
| | |
|
| | | <table border="0" cellpadding="0" cellspacing="4">
|
| | | <tr>
|
| | | <td class="label"><label for="onfocus">onfocus</label>:</td> |
| | | <td><input id="onfocus" name="onfocus" type="text" value="" class="field" /></td> |
| | | </tr>
|
| | |
|
| | | <tr>
|
| | | <td class="label"><label for="onblur">onblur</label>:</td> |
| | | <td><input id="onblur" name="onblur" type="text" value="" class="field" /></td> |
| | | </tr>
|
| | |
|
| | | <tr>
|
| | | <td class="label"><label for="onclick">onclick</label>:</td> |
| | | <td><input id="onclick" name="onclick" type="text" value="" class="field" /></td> |
| | | </tr>
|
| | |
|
| | | <tr>
|
| | | <td class="label"><label for="ondblclick">ondblclick</label>:</td> |
| | | <td><input id="ondblclick" name="ondblclick" type="text" value="" class="field" /></td> |
| | | </tr>
|
| | |
|
| | | <tr>
|
| | | <td class="label"><label for="onmousedown">onmousedown</label>:</td> |
| | | <td><input id="onmousedown" name="onmousedown" type="text" value="" class="field" /></td> |
| | | </tr>
|
| | |
|
| | | <tr>
|
| | | <td class="label"><label for="onmouseup">onmouseup</label>:</td> |
| | | <td><input id="onmouseup" name="onmouseup" type="text" value="" class="field" /></td> |
| | | </tr>
|
| | |
|
| | | <tr>
|
| | | <td class="label"><label for="onmouseover">onmouseover</label>:</td> |
| | | <td><input id="onmouseover" name="onmouseover" type="text" value="" class="field" /></td> |
| | | </tr>
|
| | |
|
| | | <tr>
|
| | | <td class="label"><label for="onmousemove">onmousemove</label>:</td> |
| | | <td><input id="onmousemove" name="onmousemove" type="text" value="" class="field" /></td> |
| | | </tr>
|
| | |
|
| | | <tr>
|
| | | <td class="label"><label for="onmouseout">onmouseout</label>:</td> |
| | | <td><input id="onmouseout" name="onmouseout" type="text" value="" class="field" /></td> |
| | | </tr>
|
| | |
|
| | | <tr>
|
| | | <td class="label"><label for="onkeypress">onkeypress</label>:</td> |
| | | <td><input id="onkeypress" name="onkeypress" type="text" value="" class="field" /></td> |
| | | </tr>
|
| | |
|
| | | <tr>
|
| | | <td class="label"><label for="onkeydown">onkeydown</label>:</td> |
| | | <td><input id="onkeydown" name="onkeydown" type="text" value="" class="field" /></td> |
| | | </tr>
|
| | |
|
| | | <tr>
|
| | | <td class="label"><label for="onkeyup">onkeyup</label>:</td> |
| | | <td><input id="onkeyup" name="onkeyup" type="text" value="" class="field" /></td> |
| | | </tr>
|
| | | </table>
|
| | | </fieldset>
|
| | | </div>
|
| | | </div>
|
| | | <div class="mceActionPanel">
|
| | | <div style="float: left">
|
| | | <input type="submit" id="insert" name="insert" value="{#update}" />
|
| | | </div>
|
| | | <div style="float: left">
|
| | | <input type="button" id="remove" name="remove" class="button" value="{#xhtmlxtras_dlg.remove}" onclick="removeAcronym();" style="display: none;" />
|
| | | </div>
|
| | | <div style="float: right">
|
| | | <input type="button" id="cancel" name="cancel" value="{#cancel}" onclick="tinyMCEPopup.close();" />
|
| | | </div>
|
| | | </div>
|
| | |
|
| | | </form>
|
| | | </body>
|
| | | </html>
|
New file |
| | |
| | | <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
|
| | | <html xmlns="http://www.w3.org/1999/xhtml">
|
| | | <head>
|
| | | <title>{#xhtmlxtras_dlg.attribs_title}</title>
|
| | | <script type="text/javascript" src="../../tiny_mce_popup.js"></script>
|
| | | <script type="text/javascript" src="../../utils/mctabs.js"></script>
|
| | | <script type="text/javascript" src="../../utils/editable_selects.js"></script>
|
| | | <script type="text/javascript" src="../../utils/form_utils.js"></script>
|
| | | <script type="text/javascript" src="js/attributes.js"></script>
|
| | | <link rel="stylesheet" type="text/css" href="css/attributes.css" />
|
| | | <base target="_self" />
|
| | | </head>
|
| | | <body style="display: none">
|
| | | <form onsubmit="insertAction();return false;" action="#">
|
| | | <div class="tabs">
|
| | | <ul>
|
| | | <li id="general_tab" class="current"><span><a href="javascript:mcTabs.displayTab('general_tab','general_panel');" onmousedown="return false;">{#xhtmlxtras_dlg.attribute_attrib_tab}</a></span></li>
|
| | | <li id="events_tab"><span><a href="javascript:mcTabs.displayTab('events_tab','events_panel');" onmousedown="return false;">{#xhtmlxtras_dlg.attribute_events_tab}</a></span></li>
|
| | | </ul>
|
| | | </div>
|
| | |
|
| | | <div class="panel_wrapper">
|
| | | <div id="general_panel" class="panel current">
|
| | | <fieldset>
|
| | | <legend>{#xhtmlxtras_dlg.attribute_attrib_tab}</legend>
|
| | | <table border="0" cellpadding="0" cellspacing="4">
|
| | | <tr>
|
| | | <td class="label"><label id="titlelabel" for="title">{#xhtmlxtras_dlg.attribute_label_title}</label>:</td> |
| | | <td><input id="title" name="title" type="text" value="" class="mceFocus" /></td> |
| | | </tr>
|
| | | <tr>
|
| | | <td class="label"><label id="idlabel" for="id">{#xhtmlxtras_dlg.attribute_label_id}</label>:</td> |
| | | <td><input id="id" name="id" type="text" value="" /></td> |
| | | </tr>
|
| | | <tr>
|
| | | <td><label id="classlabel" for="classlist">{#class_name}</label></td>
|
| | | <td>
|
| | | <select id="classlist" name="classlist" class="mceEditableSelect">
|
| | | <option value="" selected>{#not_set}</option>
|
| | | </select>
|
| | | </td>
|
| | | </tr>
|
| | | <tr>
|
| | | <td class="label"><label id="stylelabel" for="class">{#xhtmlxtras_dlg.attribute_label_style}</label>:</td> |
| | | <td><input id="style" name="style" type="text" value="" /></td> |
| | | </tr>
|
| | | <tr>
|
| | | <td class="label"><label id="dirlabel" for="dir">{#xhtmlxtras_dlg.attribute_label_langdir}</label>:</td> |
| | | <td>
|
| | | <select id="dir" name="dir"> |
| | | <option value="">{#not_set}</option> |
| | | <option value="ltr">{#xhtmlxtras_dlg.option_ltr}</option> |
| | | <option value="rtl">{#xhtmlxtras_dlg.option_rtl}</option> |
| | | </select>
|
| | | </td> |
| | | </tr>
|
| | | <tr>
|
| | | <td class="label"><label id="langlabel" for="lang">{#xhtmlxtras_dlg.attribute_label_langcode}</label>:</td> |
| | | <td>
|
| | | <input id="lang" name="lang" type="text" value="" />
|
| | | </td> |
| | | </tr>
|
| | | <tr>
|
| | | <td><label id="tabindexlabel" for="tabindex">{#xhtmlxtras_dlg.attribute_label_tabindex}</label></td>
|
| | | <td><input type="text" id="tabindex" name="tabindex" value="" /></td>
|
| | | </tr>
|
| | |
|
| | | <tr>
|
| | | <td><label id="accesskeylabel" for="accesskey">{#xhtmlxtras_dlg.attribute_label_accesskey}</label></td>
|
| | | <td><input type="text" id="accesskey" name="accesskey" value="" /></td>
|
| | | </tr>
|
| | | </table>
|
| | | </fieldset>
|
| | | </div>
|
| | | <div id="events_panel" class="panel">
|
| | | <fieldset>
|
| | | <legend>{#xhtmlxtras_dlg.attribute_events_tab}</legend>
|
| | |
|
| | | <table border="0" cellpadding="0" cellspacing="4">
|
| | | <tr>
|
| | | <td class="label"><label for="onfocus">onfocus</label>:</td> |
| | | <td><input id="onfocus" name="onfocus" type="text" value="" /></td> |
| | | </tr>
|
| | |
|
| | | <tr>
|
| | | <td class="label"><label for="onblur">onblur</label>:</td> |
| | | <td><input id="onblur" name="onblur" type="text" value="" /></td> |
| | | </tr>
|
| | |
|
| | | <tr>
|
| | | <td class="label"><label for="onclick">onclick</label>:</td> |
| | | <td><input id="onclick" name="onclick" type="text" value="" /></td> |
| | | </tr>
|
| | |
|
| | | <tr>
|
| | | <td class="label"><label for="ondblclick">ondblclick</label>:</td> |
| | | <td><input id="ondblclick" name="ondblclick" type="text" value="" /></td> |
| | | </tr>
|
| | |
|
| | | <tr>
|
| | | <td class="label"><label for="onmousedown">onmousedown</label>:</td> |
| | | <td><input id="onmousedown" name="onmousedown" type="text" value="" /></td> |
| | | </tr>
|
| | |
|
| | | <tr>
|
| | | <td class="label"><label for="onmouseup">onmouseup</label>:</td> |
| | | <td><input id="onmouseup" name="onmouseup" type="text" value="" /></td> |
| | | </tr>
|
| | |
|
| | | <tr>
|
| | | <td class="label"><label for="onmouseover">onmouseover</label>:</td> |
| | | <td><input id="onmouseover" name="onmouseover" type="text" value="" /></td> |
| | | </tr>
|
| | |
|
| | | <tr>
|
| | | <td class="label"><label for="onmousemove">onmousemove</label>:</td> |
| | | <td><input id="onmousemove" name="onmousemove" type="text" value="" /></td> |
| | | </tr>
|
| | |
|
| | | <tr>
|
| | | <td class="label"><label for="onmouseout">onmouseout</label>:</td> |
| | | <td><input id="onmouseout" name="onmouseout" type="text" value="" /></td> |
| | | </tr>
|
| | |
|
| | | <tr>
|
| | | <td class="label"><label for="onkeypress">onkeypress</label>:</td> |
| | | <td><input id="onkeypress" name="onkeypress" type="text" value="" /></td> |
| | | </tr>
|
| | |
|
| | | <tr>
|
| | | <td class="label"><label for="onkeydown">onkeydown</label>:</td> |
| | | <td><input id="onkeydown" name="onkeydown" type="text" value="" /></td> |
| | | </tr>
|
| | |
|
| | | <tr>
|
| | | <td class="label"><label for="onkeyup">onkeyup</label>:</td> |
| | | <td><input id="onkeyup" name="onkeyup" type="text" value="" /></td> |
| | | </tr>
|
| | | </table>
|
| | | </fieldset>
|
| | | </div>
|
| | | </div>
|
| | | <div class="mceActionPanel">
|
| | | <div style="float: left">
|
| | | <input type="submit" id="insert" name="insert" value="{#insert}" />
|
| | | </div>
|
| | | <div style="float: right">
|
| | | <input type="button" id="cancel" name="cancel" value="{#cancel}" onclick="tinyMCEPopup.close();" />
|
| | | </div>
|
| | | </div>
|
| | |
|
| | | </form>
|
| | | </body>
|
| | | </html>
|
New file |
| | |
| | | <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
|
| | | <html xmlns="http://www.w3.org/1999/xhtml">
|
| | | <head>
|
| | | <title>{#xhtmlxtras_dlg.title_cite_element}</title>
|
| | | <script type="text/javascript" src="../../tiny_mce_popup.js"></script>
|
| | | <script type="text/javascript" src="../../utils/mctabs.js"></script>
|
| | | <script type="text/javascript" src="../../utils/form_utils.js"></script>
|
| | | <script type="text/javascript" src="../../utils/editable_selects.js"></script>
|
| | | <script type="text/javascript" src="js/element_common.js"></script>
|
| | | <script type="text/javascript" src="js/cite.js"></script>
|
| | | <link rel="stylesheet" type="text/css" href="css/popup.css" />
|
| | | <base target="_self" />
|
| | | </head>
|
| | | <body style="display: none">
|
| | | <form onsubmit="insertCite();return false;" action="#">
|
| | | <div class="tabs">
|
| | | <ul>
|
| | | <li id="general_tab" class="current"><span><a href="javascript:mcTabs.displayTab('general_tab','general_panel');" onmousedown="return false;">{#xhtmlxtras_dlg.general_tab}</a></span></li>
|
| | | <!-- <li id="events_tab"><span><a href="javascript:mcTabs.displayTab('events_tab','events_panel');" onmousedown="return false;">{#xhtmlxtras_dlg.events_tab}</a></span></li> -->
|
| | | </ul>
|
| | | </div>
|
| | |
|
| | | <div class="panel_wrapper">
|
| | | <div id="general_panel" class="panel current">
|
| | | <fieldset>
|
| | | <legend>{#xhtmlxtras_dlg.fieldset_attrib_tab}</legend>
|
| | | <table border="0" cellpadding="0" cellspacing="4">
|
| | | <tr>
|
| | | <td class="label"><label id="titlelabel" for="title">{#xhtmlxtras_dlg.attribute_label_title}</label>:</td> |
| | | <td><input id="title" name="title" type="text" value="" class="field mceFocus" /></td> |
| | | </tr>
|
| | | <tr>
|
| | | <td class="label"><label id="idlabel" for="id">{#xhtmlxtras_dlg.attribute_label_id}</label>:</td> |
| | | <td><input id="id" name="id" type="text" value="" class="field" /></td> |
| | | </tr>
|
| | | <tr>
|
| | | <td class="label"><label id="classlabel" for="class">{#xhtmlxtras_dlg.attribute_label_class}</label>:</td> |
| | | <td>
|
| | | <select id="class" name="class" class="field mceEditableSelect">
|
| | | <option value="">{#not_set}</option> |
| | | </select>
|
| | | </td>
|
| | | </tr>
|
| | | <tr>
|
| | | <td class="label"><label id="stylelabel" for="class">{#xhtmlxtras_dlg.attribute_label_style}</label>:</td> |
| | | <td><input id="style" name="style" type="text" value="" class="field" /></td> |
| | | </tr>
|
| | | <tr>
|
| | | <td class="label"><label id="dirlabel" for="dir">{#xhtmlxtras_dlg.attribute_label_langdir}</label>:</td> |
| | | <td>
|
| | | <select id="dir" name="dir" class="field"> |
| | | <option value="">{#not_set}</option> |
| | | <option value="ltr">{#xhtmlxtras_dlg.attribute_option_ltr}</option> |
| | | <option value="rtl">{#xhtmlxtras_dlg.attribute_option_rtl}</option> |
| | | </select>
|
| | | </td> |
| | | </tr>
|
| | | <tr>
|
| | | <td class="label"><label id="langlabel" for="lang">{#xhtmlxtras_dlg.attribute_label_langcode}</label>:</td> |
| | | <td>
|
| | | <input id="lang" name="lang" type="text" value="" class="field" />
|
| | | </td> |
| | | </tr>
|
| | | </table>
|
| | | </fieldset>
|
| | | </div>
|
| | | <div id="events_panel" class="panel">
|
| | | <fieldset>
|
| | | <legend>{#xhtmlxtras_dlg.fieldset_events_tab}</legend>
|
| | |
|
| | | <table border="0" cellpadding="0" cellspacing="4">
|
| | | <tr>
|
| | | <td class="label"><label for="onfocus">onfocus</label>:</td> |
| | | <td><input id="onfocus" name="onfocus" type="text" value="" class="field" /></td> |
| | | </tr>
|
| | |
|
| | | <tr>
|
| | | <td class="label"><label for="onblur">onblur</label>:</td> |
| | | <td><input id="onblur" name="onblur" type="text" value="" class="field" /></td> |
| | | </tr>
|
| | |
|
| | | <tr>
|
| | | <td class="label"><label for="onclick">onclick</label>:</td> |
| | | <td><input id="onclick" name="onclick" type="text" value="" class="field" /></td> |
| | | </tr>
|
| | |
|
| | | <tr>
|
| | | <td class="label"><label for="ondblclick">ondblclick</label>:</td> |
| | | <td><input id="ondblclick" name="ondblclick" type="text" value="" class="field" /></td> |
| | | </tr>
|
| | |
|
| | | <tr>
|
| | | <td class="label"><label for="onmousedown">onmousedown</label>:</td> |
| | | <td><input id="onmousedown" name="onmousedown" type="text" value="" class="field" /></td> |
| | | </tr>
|
| | |
|
| | | <tr>
|
| | | <td class="label"><label for="onmouseup">onmouseup</label>:</td> |
| | | <td><input id="onmouseup" name="onmouseup" type="text" value="" class="field" /></td> |
| | | </tr>
|
| | |
|
| | | <tr>
|
| | | <td class="label"><label for="onmouseover">onmouseover</label>:</td> |
| | | <td><input id="onmouseover" name="onmouseover" type="text" value="" class="field" /></td> |
| | | </tr>
|
| | |
|
| | | <tr>
|
| | | <td class="label"><label for="onmousemove">onmousemove</label>:</td> |
| | | <td><input id="onmousemove" name="onmousemove" type="text" value="" class="field" /></td> |
| | | </tr>
|
| | |
|
| | | <tr>
|
| | | <td class="label"><label for="onmouseout">onmouseout</label>:</td> |
| | | <td><input id="onmouseout" name="onmouseout" type="text" value="" class="field" /></td> |
| | | </tr>
|
| | |
|
| | | <tr>
|
| | | <td class="label"><label for="onkeypress">onkeypress</label>:</td> |
| | | <td><input id="onkeypress" name="onkeypress" type="text" value="" class="field" /></td> |
| | | </tr>
|
| | |
|
| | | <tr>
|
| | | <td class="label"><label for="onkeydown">onkeydown</label>:</td> |
| | | <td><input id="onkeydown" name="onkeydown" type="text" value="" class="field" /></td> |
| | | </tr>
|
| | |
|
| | | <tr>
|
| | | <td class="label"><label for="onkeyup">onkeyup</label>:</td> |
| | | <td><input id="onkeyup" name="onkeyup" type="text" value="" class="field" /></td> |
| | | </tr>
|
| | | </table>
|
| | | </fieldset>
|
| | | </div>
|
| | | </div>
|
| | | <div class="mceActionPanel">
|
| | | <div style="float: left">
|
| | | <input type="submit" id="insert" name="insert" value="{#update}" />
|
| | | </div>
|
| | | <div style="float: left">
|
| | | <input type="button" id="remove" name="remove" class="button" value="{#xhtmlxtras_dlg.remove}" onclick="removeCite();" style="display: none;" />
|
| | | </div>
|
| | | <div style="float: right">
|
| | | <input type="button" id="cancel" name="cancel" value="{#cancel}" onclick="tinyMCEPopup.close();" />
|
| | | </div>
|
| | | </div>
|
| | |
|
| | | </form>
|
| | | </body>
|
| | | </html>
|
New file |
| | |
| | | .panel_wrapper div.current {
|
| | | height: 290px;
|
| | | }
|
| | |
|
| | | #id, #style, #title, #dir, #hreflang, #lang, #classlist, #tabindex, #accesskey {
|
| | | width: 200px;
|
| | | }
|
| | |
|
| | | #events_panel input {
|
| | | width: 200px;
|
| | | }
|
New file |
| | |
| | | input.field, select.field {width:200px;}
|
| | | input.picker {width:179px; margin-left: 5px;}
|
| | | input.disabled {border-color:#F2F2F2;}
|
| | | img.picker {vertical-align:text-bottom; cursor:pointer;}
|
| | | h1 {padding: 0 0 5px 0;}
|
| | | .panel_wrapper div.current {height:160px;}
|
| | | #xhtmlxtrasdel .panel_wrapper div.current, #xhtmlxtrasins .panel_wrapper div.current {height: 230px;}
|
| | | a.browse span {display:block; width:20px; height:20px; background:url('../../../themes/advanced/img/icons.gif') -140px -20px;}
|
| | | #datetime {width:180px;}
|
New file |
| | |
| | | ins {
|
| | | border-bottom: 1px solid green;
|
| | | text-decoration: none;
|
| | | color: green;
|
| | | }
|
| | |
|
| | | del {
|
| | | color: Red;
|
| | | text-decoration: line-through;
|
| | | }
|
| | |
|
| | | cite {
|
| | | border-bottom: 1px dashed blue;
|
| | | }
|
| | |
|
| | | acronym {
|
| | | border-bottom: 1px dotted #CCC;
|
| | | cursor: help;
|
| | | }
|
| | |
|
| | | abbr, html\:abbr {
|
| | | border-bottom: 1px dashed #CCC;
|
| | | cursor: help;
|
| | | }
|
New file |
| | |
| | | <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
|
| | | <html xmlns="http://www.w3.org/1999/xhtml">
|
| | | <head>
|
| | | <title>{#xhtmlxtras_dlg.title_del_element}</title>
|
| | | <script type="text/javascript" src="../../tiny_mce_popup.js"></script>
|
| | | <script type="text/javascript" src="../../utils/mctabs.js"></script>
|
| | | <script type="text/javascript" src="../../utils/form_utils.js"></script>
|
| | | <script type="text/javascript" src="../../utils/editable_selects.js"></script>
|
| | | <script type="text/javascript" src="js/element_common.js"></script>
|
| | | <script type="text/javascript" src="js/del.js"></script>
|
| | | <link rel="stylesheet" type="text/css" href="css/popup.css" />
|
| | | <base target="_self" />
|
| | | </head>
|
| | | <body id="xhtmlxtrasins" style="display: none">
|
| | | <form onsubmit="insertDel();return false;" action="#">
|
| | | <div class="tabs">
|
| | | <ul>
|
| | | <li id="general_tab" class="current"><span><a href="javascript:mcTabs.displayTab('general_tab','general_panel');" onmousedown="return false;">{#xhtmlxtras_dlg.general_tab}</a></span></li>
|
| | | <!-- <li id="events_tab"><span><a href="javascript:mcTabs.displayTab('events_tab','events_panel');" onmousedown="return false;">{#xhtmlxtras_dlg.events_tab}</a></span></li> -->
|
| | | </ul>
|
| | | </div>
|
| | |
|
| | | <div class="panel_wrapper">
|
| | | <div id="general_panel" class="panel current">
|
| | | <fieldset>
|
| | | <legend>{#xhtmlxtras_dlg.fieldset_general_tab}</legend>
|
| | | <table border="0" cellpadding="0" cellspacing="4">
|
| | | <tr>
|
| | | <td class="label"><label id="datetimelabel" for="datetime">{#xhtmlxtras_dlg.attribute_label_datetime}</label>:</td>
|
| | | <td>
|
| | | <table border="0" cellspacing="0" cellpadding="0">
|
| | | <tr> |
| | | <td><input id="datetime" name="datetime" type="text" value="" maxlength="19" class="field mceFocus" /></td> |
| | | <td><a href="javascript:insertDateTime('datetime');" onmousedown="return false;" class="browse"><span class="datetime" alt="{#xhtmlxtras_dlg.insert_date}" title="{#xhtmlxtras_dlg.insert_date}"></span></a></td>
|
| | | </tr>
|
| | | </table>
|
| | | </td>
|
| | | </tr>
|
| | | <tr>
|
| | | <td class="label"><label id="citelabel" for="cite">{#xhtmlxtras_dlg.attribute_label_cite}</label>:</td>
|
| | | <td><input id="cite" name="cite" type="text" value="" class="field" /></td> |
| | | </tr>
|
| | | </table>
|
| | | </fieldset>
|
| | | <fieldset>
|
| | | <legend>{#xhtmlxtras_dlg.fieldset_attrib_tab}</legend>
|
| | | <table border="0" cellpadding="0" cellspacing="4">
|
| | | <tr>
|
| | | <td class="label"><label id="titlelabel" for="title">{#xhtmlxtras_dlg.attribute_label_title}</label>:</td> |
| | | <td><input id="title" name="title" type="text" value="" class="field" /></td> |
| | | </tr>
|
| | | <tr>
|
| | | <td class="label"><label id="idlabel" for="id">{#xhtmlxtras_dlg.attribute_label_id}</label>:</td> |
| | | <td><input id="id" name="id" type="text" value="" class="field" /></td> |
| | | </tr>
|
| | | <tr>
|
| | | <td class="label"><label id="classlabel" for="class">{#xhtmlxtras_dlg.attribute_label_class}</label>:</td> |
| | | <td>
|
| | | <select id="class" name="class" class="field mceEditableSelect">
|
| | | <option value="">{#not_set}</option> |
| | | </select>
|
| | | </td>
|
| | | </tr>
|
| | | <tr>
|
| | | <td class="label"><label id="stylelabel" for="class">{#xhtmlxtras_dlg.attribute_label_style}</label>:</td> |
| | | <td><input id="style" name="style" type="text" value="" class="field" /></td> |
| | | </tr>
|
| | | <tr>
|
| | | <td class="label"><label id="dirlabel" for="dir">{#xhtmlxtras_dlg.attribute_label_langdir}</label>:</td> |
| | | <td>
|
| | | <select id="dir" name="dir" class="field"> |
| | | <option value="">{#not_set}</option> |
| | | <option value="ltr">{#xhtmlxtras_dlg.attribute_option_ltr}</option> |
| | | <option value="rtl">{#xhtmlxtras_dlg.attribute_option_rtl}</option> |
| | | </select>
|
| | | </td> |
| | | </tr>
|
| | | <tr>
|
| | | <td class="label"><label id="langlabel" for="lang">{#xhtmlxtras_dlg.attribute_label_langcode}</label>:</td> |
| | | <td>
|
| | | <input id="lang" name="lang" type="text" value="" class="field" />
|
| | | </td> |
| | | </tr>
|
| | | </table>
|
| | | </fieldset>
|
| | | </div>
|
| | | <div id="events_panel" class="panel">
|
| | | <fieldset>
|
| | | <legend>{#xhtmlxtras_dlg.fieldset_events_tab}</legend>
|
| | |
|
| | | <table border="0" cellpadding="0" cellspacing="4">
|
| | | <tr>
|
| | | <td class="label"><label for="onfocus">onfocus</label>:</td> |
| | | <td><input id="onfocus" name="onfocus" type="text" value="" class="field" /></td> |
| | | </tr>
|
| | |
|
| | | <tr>
|
| | | <td class="label"><label for="onblur">onblur</label>:</td> |
| | | <td><input id="onblur" name="onblur" type="text" value="" class="field" /></td> |
| | | </tr>
|
| | |
|
| | | <tr>
|
| | | <td class="label"><label for="onclick">onclick</label>:</td> |
| | | <td><input id="onclick" name="onclick" type="text" value="" class="field" /></td> |
| | | </tr>
|
| | |
|
| | | <tr>
|
| | | <td class="label"><label for="ondblclick">ondblclick</label>:</td> |
| | | <td><input id="ondblclick" name="ondblclick" type="text" value="" class="field" /></td> |
| | | </tr>
|
| | |
|
| | | <tr>
|
| | | <td class="label"><label for="onmousedown">onmousedown</label>:</td> |
| | | <td><input id="onmousedown" name="onmousedown" type="text" value="" class="field" /></td> |
| | | </tr>
|
| | |
|
| | | <tr>
|
| | | <td class="label"><label for="onmouseup">onmouseup</label>:</td> |
| | | <td><input id="onmouseup" name="onmouseup" type="text" value="" class="field" /></td> |
| | | </tr>
|
| | |
|
| | | <tr>
|
| | | <td class="label"><label for="onmouseover">onmouseover</label>:</td> |
| | | <td><input id="onmouseover" name="onmouseover" type="text" value="" class="field" /></td> |
| | | </tr>
|
| | |
|
| | | <tr>
|
| | | <td class="label"><label for="onmousemove">onmousemove</label>:</td> |
| | | <td><input id="onmousemove" name="onmousemove" type="text" value="" class="field" /></td> |
| | | </tr>
|
| | |
|
| | | <tr>
|
| | | <td class="label"><label for="onmouseout">onmouseout</label>:</td> |
| | | <td><input id="onmouseout" name="onmouseout" type="text" value="" class="field" /></td> |
| | | </tr>
|
| | |
|
| | | <tr>
|
| | | <td class="label"><label for="onkeypress">onkeypress</label>:</td> |
| | | <td><input id="onkeypress" name="onkeypress" type="text" value="" class="field" /></td> |
| | | </tr>
|
| | |
|
| | | <tr>
|
| | | <td class="label"><label for="onkeydown">onkeydown</label>:</td> |
| | | <td><input id="onkeydown" name="onkeydown" type="text" value="" class="field" /></td> |
| | | </tr>
|
| | |
|
| | | <tr>
|
| | | <td class="label"><label for="onkeyup">onkeyup</label>:</td> |
| | | <td><input id="onkeyup" name="onkeyup" type="text" value="" class="field" /></td> |
| | | </tr>
|
| | | </table>
|
| | | </fieldset>
|
| | | </div>
|
| | | </div>
|
| | | <div class="mceActionPanel">
|
| | | <div style="float: left">
|
| | | <input type="submit" id="insert" name="insert" value="{#update}" />
|
| | | </div>
|
| | | <div style="float: left">
|
| | | <input type="button" id="remove" name="remove" class="button" value="{#xhtmlxtras_dlg.remove}" onclick="removeDel();" style="display: none;" />
|
| | | </div>
|
| | | <div style="float: right">
|
| | | <input type="button" id="cancel" name="cancel" value="{#cancel}" onclick="tinyMCEPopup.close();" />
|
| | | </div>
|
| | | </div>
|
| | |
|
| | | </form>
|
| | |
|
| | | </body>
|
| | | </html>
|
New file |
| | |
| | | (function(){tinymce.create('tinymce.plugins.XHTMLXtrasPlugin',{init:function(ed,url){ed.addCommand('mceCite',function(){ed.windowManager.open({file:url+'/cite.htm',width:350+parseInt(ed.getLang('xhtmlxtras.cite_delta_width',0)),height:250+parseInt(ed.getLang('xhtmlxtras.cite_delta_height',0)),inline:1},{plugin_url:url});});ed.addCommand('mceAcronym',function(){ed.windowManager.open({file:url+'/acronym.htm',width:350+parseInt(ed.getLang('xhtmlxtras.acronym_delta_width',0)),height:250+parseInt(ed.getLang('xhtmlxtras.acronym_delta_width',0)),inline:1},{plugin_url:url});});ed.addCommand('mceAbbr',function(){ed.windowManager.open({file:url+'/abbr.htm',width:350+parseInt(ed.getLang('xhtmlxtras.abbr_delta_width',0)),height:250+parseInt(ed.getLang('xhtmlxtras.abbr_delta_width',0)),inline:1},{plugin_url:url});});ed.addCommand('mceDel',function(){ed.windowManager.open({file:url+'/del.htm',width:340+parseInt(ed.getLang('xhtmlxtras.del_delta_width',0)),height:310+parseInt(ed.getLang('xhtmlxtras.del_delta_width',0)),inline:1},{plugin_url:url});});ed.addCommand('mceIns',function(){ed.windowManager.open({file:url+'/ins.htm',width:340+parseInt(ed.getLang('xhtmlxtras.ins_delta_width',0)),height:310+parseInt(ed.getLang('xhtmlxtras.ins_delta_width',0)),inline:1},{plugin_url:url});});ed.addCommand('mceAttributes',function(){ed.windowManager.open({file:url+'/attributes.htm',width:380,height:370,inline:1},{plugin_url:url});});ed.addButton('cite',{title:'xhtmlxtras.cite_desc',cmd:'mceCite'});ed.addButton('acronym',{title:'xhtmlxtras.acronym_desc',cmd:'mceAcronym'});ed.addButton('abbr',{title:'xhtmlxtras.abbr_desc',cmd:'mceAbbr'});ed.addButton('del',{title:'xhtmlxtras.del_desc',cmd:'mceDel'});ed.addButton('ins',{title:'xhtmlxtras.ins_desc',cmd:'mceIns'});ed.addButton('attribs',{title:'xhtmlxtras.attribs_desc',cmd:'mceAttributes'});if(tinymce.isIE){function fix(ed,o){if(o.set){o.content=o.content.replace(/<abbr([^>]+)>/gi,'<html:abbr $1>');o.content=o.content.replace(/<\/abbr>/gi,'</html:abbr>');}};ed.onBeforeSetContent.add(fix);ed.onPostProcess.add(fix);}ed.onNodeChange.add(function(ed,cm,n,co){n=ed.dom.getParent(n,'CITE,ACRONYM,ABBR,DEL,INS');cm.setDisabled('cite',co);cm.setDisabled('acronym',co);cm.setDisabled('abbr',co);cm.setDisabled('del',co);cm.setDisabled('ins',co);cm.setDisabled('attribs',n&&n.nodeName=='BODY');if(n){cm.setDisabled(n.nodeName.toLowerCase(),0);cm.setActive(n.nodeName.toLowerCase(),1);}else{cm.setActive('cite',0);cm.setActive('acronym',0);cm.setActive('abbr',0);cm.setActive('del',0);cm.setActive('ins',0);}});},getInfo:function(){return{longname:'XHTML Xtras Plugin',author:'Moxiecode Systems AB',authorurl:'http://tinymce.moxiecode.com',infourl:'http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/xhtmlxtras',version:tinymce.majorVersion+"."+tinymce.minorVersion};}});tinymce.PluginManager.add('xhtmlxtras',tinymce.plugins.XHTMLXtrasPlugin);})(); |
New file |
| | |
| | | /**
|
| | | * $Id: editor_plugin_src.js 201 2007-02-12 15:56:56Z spocke $
|
| | | *
|
| | | * @author Moxiecode
|
| | | * @copyright Copyright © 2004-2008, Moxiecode Systems AB, All rights reserved.
|
| | | */
|
| | |
|
| | | (function() {
|
| | | tinymce.create('tinymce.plugins.XHTMLXtrasPlugin', {
|
| | | init : function(ed, url) {
|
| | | // Register commands
|
| | | ed.addCommand('mceCite', function() {
|
| | | ed.windowManager.open({
|
| | | file : url + '/cite.htm',
|
| | | width : 350 + parseInt(ed.getLang('xhtmlxtras.cite_delta_width', 0)),
|
| | | height : 250 + parseInt(ed.getLang('xhtmlxtras.cite_delta_height', 0)),
|
| | | inline : 1
|
| | | }, {
|
| | | plugin_url : url
|
| | | });
|
| | | });
|
| | |
|
| | | ed.addCommand('mceAcronym', function() {
|
| | | ed.windowManager.open({
|
| | | file : url + '/acronym.htm',
|
| | | width : 350 + parseInt(ed.getLang('xhtmlxtras.acronym_delta_width', 0)),
|
| | | height : 250 + parseInt(ed.getLang('xhtmlxtras.acronym_delta_width', 0)),
|
| | | inline : 1
|
| | | }, {
|
| | | plugin_url : url
|
| | | });
|
| | | });
|
| | |
|
| | | ed.addCommand('mceAbbr', function() {
|
| | | ed.windowManager.open({
|
| | | file : url + '/abbr.htm',
|
| | | width : 350 + parseInt(ed.getLang('xhtmlxtras.abbr_delta_width', 0)),
|
| | | height : 250 + parseInt(ed.getLang('xhtmlxtras.abbr_delta_width', 0)),
|
| | | inline : 1
|
| | | }, {
|
| | | plugin_url : url
|
| | | });
|
| | | });
|
| | |
|
| | | ed.addCommand('mceDel', function() {
|
| | | ed.windowManager.open({
|
| | | file : url + '/del.htm',
|
| | | width : 340 + parseInt(ed.getLang('xhtmlxtras.del_delta_width', 0)),
|
| | | height : 310 + parseInt(ed.getLang('xhtmlxtras.del_delta_width', 0)),
|
| | | inline : 1
|
| | | }, {
|
| | | plugin_url : url
|
| | | });
|
| | | });
|
| | |
|
| | | ed.addCommand('mceIns', function() {
|
| | | ed.windowManager.open({
|
| | | file : url + '/ins.htm',
|
| | | width : 340 + parseInt(ed.getLang('xhtmlxtras.ins_delta_width', 0)),
|
| | | height : 310 + parseInt(ed.getLang('xhtmlxtras.ins_delta_width', 0)),
|
| | | inline : 1
|
| | | }, {
|
| | | plugin_url : url
|
| | | });
|
| | | });
|
| | |
|
| | | ed.addCommand('mceAttributes', function() {
|
| | | ed.windowManager.open({
|
| | | file : url + '/attributes.htm',
|
| | | width : 380,
|
| | | height : 370,
|
| | | inline : 1
|
| | | }, {
|
| | | plugin_url : url
|
| | | });
|
| | | });
|
| | |
|
| | | // Register buttons
|
| | | ed.addButton('cite', {title : 'xhtmlxtras.cite_desc', cmd : 'mceCite'});
|
| | | ed.addButton('acronym', {title : 'xhtmlxtras.acronym_desc', cmd : 'mceAcronym'});
|
| | | ed.addButton('abbr', {title : 'xhtmlxtras.abbr_desc', cmd : 'mceAbbr'});
|
| | | ed.addButton('del', {title : 'xhtmlxtras.del_desc', cmd : 'mceDel'});
|
| | | ed.addButton('ins', {title : 'xhtmlxtras.ins_desc', cmd : 'mceIns'});
|
| | | ed.addButton('attribs', {title : 'xhtmlxtras.attribs_desc', cmd : 'mceAttributes'});
|
| | |
|
| | | if (tinymce.isIE) {
|
| | | function fix(ed, o) {
|
| | | if (o.set) {
|
| | | o.content = o.content.replace(/<abbr([^>]+)>/gi, '<html:abbr $1>');
|
| | | o.content = o.content.replace(/<\/abbr>/gi, '</html:abbr>');
|
| | | }
|
| | | };
|
| | |
|
| | | ed.onBeforeSetContent.add(fix);
|
| | | ed.onPostProcess.add(fix);
|
| | | }
|
| | |
|
| | | ed.onNodeChange.add(function(ed, cm, n, co) {
|
| | | n = ed.dom.getParent(n, 'CITE,ACRONYM,ABBR,DEL,INS');
|
| | |
|
| | | cm.setDisabled('cite', co);
|
| | | cm.setDisabled('acronym', co);
|
| | | cm.setDisabled('abbr', co);
|
| | | cm.setDisabled('del', co);
|
| | | cm.setDisabled('ins', co);
|
| | | cm.setDisabled('attribs', n && n.nodeName == 'BODY');
|
| | |
|
| | | if (n) {
|
| | | cm.setDisabled(n.nodeName.toLowerCase(), 0);
|
| | | cm.setActive(n.nodeName.toLowerCase(), 1);
|
| | | } else {
|
| | | cm.setActive('cite', 0);
|
| | | cm.setActive('acronym', 0);
|
| | | cm.setActive('abbr', 0);
|
| | | cm.setActive('del', 0);
|
| | | cm.setActive('ins', 0);
|
| | | }
|
| | | });
|
| | | },
|
| | |
|
| | | getInfo : function() {
|
| | | return {
|
| | | longname : 'XHTML Xtras Plugin',
|
| | | author : 'Moxiecode Systems AB',
|
| | | authorurl : 'http://tinymce.moxiecode.com',
|
| | | infourl : 'http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/xhtmlxtras',
|
| | | version : tinymce.majorVersion + "." + tinymce.minorVersion
|
| | | };
|
| | | }
|
| | | });
|
| | |
|
| | | // Register plugin
|
| | | tinymce.PluginManager.add('xhtmlxtras', tinymce.plugins.XHTMLXtrasPlugin);
|
| | | })(); |
New file |
| | |
| | | <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
|
| | | <html xmlns="http://www.w3.org/1999/xhtml">
|
| | | <head>
|
| | | <title>{#xhtmlxtras_dlg.title_ins_element}</title>
|
| | | <script type="text/javascript" src="../../tiny_mce_popup.js"></script>
|
| | | <script type="text/javascript" src="../../utils/mctabs.js"></script>
|
| | | <script type="text/javascript" src="../../utils/form_utils.js"></script>
|
| | | <script type="text/javascript" src="../../utils/editable_selects.js"></script>
|
| | | <script type="text/javascript" src="js/element_common.js"></script>
|
| | | <script type="text/javascript" src="js/ins.js"></script>
|
| | | <link rel="stylesheet" type="text/css" href="css/popup.css" />
|
| | | <base target="_self" />
|
| | | </head>
|
| | | <body id="xhtmlxtrasins" style="display: none">
|
| | | <form onsubmit="insertIns();return false;" action="#">
|
| | | <div class="tabs">
|
| | | <ul>
|
| | | <li id="general_tab" class="current"><span><a href="javascript:mcTabs.displayTab('general_tab','general_panel');" onmousedown="return false;">{#xhtmlxtras_dlg.general_tab}</a></span></li>
|
| | | <!-- <li id="events_tab"><span><a href="javascript:mcTabs.displayTab('events_tab','events_panel');" onmousedown="return false;">{#xhtmlxtras_dlg.events_tab}</a></span></li> -->
|
| | | </ul>
|
| | | </div>
|
| | |
|
| | | <div class="panel_wrapper">
|
| | | <div id="general_panel" class="panel current">
|
| | | <fieldset>
|
| | | <legend>{#xhtmlxtras_dlg.fieldset_general_tab}</legend>
|
| | | <table border="0" cellpadding="0" cellspacing="4">
|
| | | <tr>
|
| | | <td class="label"><label id="datetimelabel" for="datetime">{#xhtmlxtras_dlg.attribute_label_datetime}</label>:</td> |
| | | <td>
|
| | | <table border="0" cellspacing="0" cellpadding="0">
|
| | | <tr> |
| | | <td><input id="datetime" name="datetime" type="text" value="" maxlength="19" class="field mceFocus" /></td> |
| | | <td><a href="javascript:insertDateTime('datetime');" onmousedown="return false;" class="browse"><span class="datetime" alt="{#xhtmlxtras_dlg.insert_date}" title="{#xhtmlxtras_dlg.insert_date}"></span></a></td>
|
| | | </tr>
|
| | | </table>
|
| | | </td>
|
| | | </tr>
|
| | | <tr>
|
| | | <td class="label"><label id="citelabel" for="cite">{#xhtmlxtras_dlg.attribute_label_cite}</label>:</td> |
| | | <td><input id="cite" name="cite" type="text" value="" class="field" /></td> |
| | | </tr>
|
| | | </table>
|
| | | </fieldset>
|
| | | <fieldset>
|
| | | <legend>{#xhtmlxtras_dlg.fieldset_attrib_tab}</legend>
|
| | | <table border="0" cellpadding="0" cellspacing="4">
|
| | | <tr>
|
| | | <td class="label"><label id="titlelabel" for="title">{#xhtmlxtras_dlg.attribute_label_title}</label>:</td> |
| | | <td><input id="title" name="title" type="text" value="" class="field" /></td> |
| | | </tr>
|
| | | <tr>
|
| | | <td class="label"><label id="idlabel" for="id">{#xhtmlxtras_dlg.attribute_label_id}</label>:</td> |
| | | <td><input id="id" name="id" type="text" value="" class="field" /></td> |
| | | </tr>
|
| | | <tr>
|
| | | <td class="label"><label id="classlabel" for="class">{#xhtmlxtras_dlg.attribute_label_class}</label>:</td> |
| | | <td>
|
| | | <select id="class" name="class" class="field mceEditableSelect">
|
| | | <option value="">{#not_set}</option> |
| | | </select>
|
| | | </td>
|
| | | </tr>
|
| | | <tr>
|
| | | <td class="label"><label id="stylelabel" for="class">{#xhtmlxtras_dlg.attribute_label_style}</label>:</td> |
| | | <td><input id="style" name="style" type="text" value="" class="field" /></td> |
| | | </tr>
|
| | | <tr>
|
| | | <td class="label"><label id="dirlabel" for="dir">{#xhtmlxtras_dlg.attribute_label_langdir}</label>:</td> |
| | | <td>
|
| | | <select id="dir" name="dir" class="field"> |
| | | <option value="">{#not_set}</option> |
| | | <option value="ltr">{#xhtmlxtras_dlg.attribute_option_ltr}</option> |
| | | <option value="rtl">{#xhtmlxtras_dlg.attribute_option_rtl}</option> |
| | | </select>
|
| | | </td> |
| | | </tr>
|
| | | <tr>
|
| | | <td class="label"><label id="langlabel" for="lang">{#xhtmlxtras_dlg.attribute_label_langcode}</label>:</td> |
| | | <td>
|
| | | <input id="lang" name="lang" type="text" value="" class="field" />
|
| | | </td> |
| | | </tr>
|
| | | </table>
|
| | | </fieldset>
|
| | | </div>
|
| | | <div id="events_panel" class="panel">
|
| | | <fieldset>
|
| | | <legend>{#xhtmlxtras_dlg.fieldset_events_tab}</legend>
|
| | |
|
| | | <table border="0" cellpadding="0" cellspacing="4">
|
| | | <tr>
|
| | | <td class="label"><label for="onfocus">onfocus</label>:</td> |
| | | <td><input id="onfocus" name="onfocus" type="text" value="" class="field" /></td> |
| | | </tr>
|
| | |
|
| | | <tr>
|
| | | <td class="label"><label for="onblur">onblur</label>:</td> |
| | | <td><input id="onblur" name="onblur" type="text" value="" class="field" /></td> |
| | | </tr>
|
| | |
|
| | | <tr>
|
| | | <td class="label"><label for="onclick">onclick</label>:</td> |
| | | <td><input id="onclick" name="onclick" type="text" value="" class="field" /></td> |
| | | </tr>
|
| | |
|
| | | <tr>
|
| | | <td class="label"><label for="ondblclick">ondblclick</label>:</td> |
| | | <td><input id="ondblclick" name="ondblclick" type="text" value="" class="field" /></td> |
| | | </tr>
|
| | |
|
| | | <tr>
|
| | | <td class="label"><label for="onmousedown">onmousedown</label>:</td> |
| | | <td><input id="onmousedown" name="onmousedown" type="text" value="" class="field" /></td> |
| | | </tr>
|
| | |
|
| | | <tr>
|
| | | <td class="label"><label for="onmouseup">onmouseup</label>:</td> |
| | | <td><input id="onmouseup" name="onmouseup" type="text" value="" class="field" /></td> |
| | | </tr>
|
| | |
|
| | | <tr>
|
| | | <td class="label"><label for="onmouseover">onmouseover</label>:</td> |
| | | <td><input id="onmouseover" name="onmouseover" type="text" value="" class="field" /></td> |
| | | </tr>
|
| | |
|
| | | <tr>
|
| | | <td class="label"><label for="onmousemove">onmousemove</label>:</td> |
| | | <td><input id="onmousemove" name="onmousemove" type="text" value="" class="field" /></td> |
| | | </tr>
|
| | |
|
| | | <tr>
|
| | | <td class="label"><label for="onmouseout">onmouseout</label>:</td> |
| | | <td><input id="onmouseout" name="onmouseout" type="text" value="" class="field" /></td> |
| | | </tr>
|
| | |
|
| | | <tr>
|
| | | <td class="label"><label for="onkeypress">onkeypress</label>:</td> |
| | | <td><input id="onkeypress" name="onkeypress" type="text" value="" class="field" /></td> |
| | | </tr>
|
| | |
|
| | | <tr>
|
| | | <td class="label"><label for="onkeydown">onkeydown</label>:</td> |
| | | <td><input id="onkeydown" name="onkeydown" type="text" value="" class="field" /></td> |
| | | </tr>
|
| | |
|
| | | <tr>
|
| | | <td class="label"><label for="onkeyup">onkeyup</label>:</td> |
| | | <td><input id="onkeyup" name="onkeyup" type="text" value="" class="field" /></td> |
| | | </tr>
|
| | | </table>
|
| | | </fieldset>
|
| | | </div>
|
| | | </div>
|
| | | <div class="mceActionPanel">
|
| | | <div style="float: left">
|
| | | <input type="submit" id="insert" name="insert" value="{#update}" />
|
| | | </div>
|
| | | <div style="float: left">
|
| | | <input type="button" id="remove" name="remove" class="button" value="{#xhtmlxtras_dlg.remove}" onclick="removeIns();" style="display: none;" />
|
| | | </div>
|
| | | <div style="float: right">
|
| | | <input type="button" id="cancel" name="cancel" value="{#cancel}" onclick="tinyMCEPopup.close();" />
|
| | | </div>
|
| | | </div>
|
| | |
|
| | | </form>
|
| | |
|
| | | </body>
|
| | | </html>
|
New file |
| | |
| | | /**
|
| | | * $Id: editor_plugin_src.js 42 2006-08-08 14:32:24Z spocke $
|
| | | *
|
| | | * @author Moxiecode - based on work by Andrew Tetlaw
|
| | | * @copyright Copyright © 2004-2008, Moxiecode Systems AB, All rights reserved.
|
| | | */
|
| | |
|
| | | function init() {
|
| | | SXE.initElementDialog('abbr');
|
| | | if (SXE.currentAction == "update") {
|
| | | SXE.showRemoveButton();
|
| | | }
|
| | | }
|
| | |
|
| | | function insertAbbr() {
|
| | | SXE.insertElement(tinymce.isIE ? 'html:abbr' : 'abbr');
|
| | | tinyMCEPopup.close();
|
| | | }
|
| | |
|
| | | function removeAbbr() {
|
| | | SXE.removeElement('abbr');
|
| | | tinyMCEPopup.close();
|
| | | }
|
| | |
|
| | | tinyMCEPopup.onInit.add(init);
|
New file |
| | |
| | | /**
|
| | | * $Id: editor_plugin_src.js 42 2006-08-08 14:32:24Z spocke $
|
| | | *
|
| | | * @author Moxiecode - based on work by Andrew Tetlaw
|
| | | * @copyright Copyright © 2004-2008, Moxiecode Systems AB, All rights reserved.
|
| | | */
|
| | |
|
| | | function init() {
|
| | | SXE.initElementDialog('acronym');
|
| | | if (SXE.currentAction == "update") {
|
| | | SXE.showRemoveButton();
|
| | | }
|
| | | }
|
| | |
|
| | | function insertAcronym() {
|
| | | SXE.insertElement('acronym');
|
| | | tinyMCEPopup.close();
|
| | | }
|
| | |
|
| | | function removeAcronym() {
|
| | | SXE.removeElement('acronym');
|
| | | tinyMCEPopup.close();
|
| | | }
|
| | |
|
| | | tinyMCEPopup.onInit.add(init);
|
New file |
| | |
| | | /**
|
| | | * $Id: editor_plugin_src.js 42 2006-08-08 14:32:24Z spocke $
|
| | | *
|
| | | * @author Moxiecode - based on work by Andrew Tetlaw
|
| | | * @copyright Copyright © 2004-2006, Moxiecode Systems AB, All rights reserved.
|
| | | */
|
| | |
|
| | | function init() {
|
| | | tinyMCEPopup.resizeToInnerSize();
|
| | | var inst = tinyMCEPopup.editor;
|
| | | var dom = inst.dom;
|
| | | var elm = inst.selection.getNode();
|
| | | var f = document.forms[0];
|
| | | var onclick = dom.getAttrib(elm, 'onclick');
|
| | |
|
| | | setFormValue('title', dom.getAttrib(elm, 'title'));
|
| | | setFormValue('id', dom.getAttrib(elm, 'id'));
|
| | | setFormValue('style', dom.getAttrib(elm, "style"));
|
| | | setFormValue('dir', dom.getAttrib(elm, 'dir'));
|
| | | setFormValue('lang', dom.getAttrib(elm, 'lang'));
|
| | | setFormValue('tabindex', dom.getAttrib(elm, 'tabindex', typeof(elm.tabindex) != "undefined" ? elm.tabindex : ""));
|
| | | setFormValue('accesskey', dom.getAttrib(elm, 'accesskey', typeof(elm.accesskey) != "undefined" ? elm.accesskey : ""));
|
| | | setFormValue('onfocus', dom.getAttrib(elm, 'onfocus'));
|
| | | setFormValue('onblur', dom.getAttrib(elm, 'onblur'));
|
| | | setFormValue('onclick', onclick);
|
| | | setFormValue('ondblclick', dom.getAttrib(elm, 'ondblclick'));
|
| | | setFormValue('onmousedown', dom.getAttrib(elm, 'onmousedown'));
|
| | | setFormValue('onmouseup', dom.getAttrib(elm, 'onmouseup'));
|
| | | setFormValue('onmouseover', dom.getAttrib(elm, 'onmouseover'));
|
| | | setFormValue('onmousemove', dom.getAttrib(elm, 'onmousemove'));
|
| | | setFormValue('onmouseout', dom.getAttrib(elm, 'onmouseout'));
|
| | | setFormValue('onkeypress', dom.getAttrib(elm, 'onkeypress'));
|
| | | setFormValue('onkeydown', dom.getAttrib(elm, 'onkeydown'));
|
| | | setFormValue('onkeyup', dom.getAttrib(elm, 'onkeyup'));
|
| | | className = dom.getAttrib(elm, 'class');
|
| | |
|
| | | addClassesToList('classlist', 'advlink_styles');
|
| | | selectByValue(f, 'classlist', className, true);
|
| | |
|
| | | TinyMCE_EditableSelects.init();
|
| | | }
|
| | |
|
| | | function setFormValue(name, value) {
|
| | | if(value && document.forms[0].elements[name]){
|
| | | document.forms[0].elements[name].value = value;
|
| | | }
|
| | | }
|
| | |
|
| | | function insertAction() {
|
| | | var inst = tinyMCEPopup.editor;
|
| | | var elm = inst.selection.getNode();
|
| | |
|
| | | tinyMCEPopup.execCommand("mceBeginUndoLevel"); |
| | | setAllAttribs(elm);
|
| | | tinyMCEPopup.execCommand("mceEndUndoLevel");
|
| | | tinyMCEPopup.close();
|
| | | }
|
| | |
|
| | | function setAttrib(elm, attrib, value) {
|
| | | var formObj = document.forms[0];
|
| | | var valueElm = formObj.elements[attrib.toLowerCase()];
|
| | | var inst = tinyMCEPopup.editor;
|
| | | var dom = inst.dom;
|
| | |
|
| | | if (typeof(value) == "undefined" || value == null) {
|
| | | value = "";
|
| | |
|
| | | if (valueElm)
|
| | | value = valueElm.value;
|
| | | }
|
| | |
|
| | | if (value != "") {
|
| | | dom.setAttrib(elm, attrib.toLowerCase(), value);
|
| | |
|
| | | if (attrib == "style")
|
| | | attrib = "style.cssText";
|
| | |
|
| | | if (attrib.substring(0, 2) == 'on')
|
| | | value = 'return true;' + value;
|
| | |
|
| | | if (attrib == "class")
|
| | | attrib = "className";
|
| | |
|
| | | elm[attrib]=value;
|
| | | } else
|
| | | elm.removeAttribute(attrib);
|
| | | }
|
| | |
|
| | | function setAllAttribs(elm) {
|
| | | var f = document.forms[0];
|
| | |
|
| | | setAttrib(elm, 'title');
|
| | | setAttrib(elm, 'id');
|
| | | setAttrib(elm, 'style');
|
| | | setAttrib(elm, 'class', getSelectValue(f, 'classlist'));
|
| | | setAttrib(elm, 'dir');
|
| | | setAttrib(elm, 'lang');
|
| | | setAttrib(elm, 'tabindex');
|
| | | setAttrib(elm, 'accesskey');
|
| | | setAttrib(elm, 'onfocus');
|
| | | setAttrib(elm, 'onblur');
|
| | | setAttrib(elm, 'onclick');
|
| | | setAttrib(elm, 'ondblclick');
|
| | | setAttrib(elm, 'onmousedown');
|
| | | setAttrib(elm, 'onmouseup');
|
| | | setAttrib(elm, 'onmouseover');
|
| | | setAttrib(elm, 'onmousemove');
|
| | | setAttrib(elm, 'onmouseout');
|
| | | setAttrib(elm, 'onkeypress');
|
| | | setAttrib(elm, 'onkeydown');
|
| | | setAttrib(elm, 'onkeyup');
|
| | |
|
| | | // Refresh in old MSIE
|
| | | // if (tinyMCE.isMSIE5)
|
| | | // elm.outerHTML = elm.outerHTML;
|
| | | }
|
| | |
|
| | | function insertAttribute() {
|
| | | tinyMCEPopup.close();
|
| | | }
|
| | |
|
| | | tinyMCEPopup.onInit.add(init);
|
| | | tinyMCEPopup.requireLangPack();
|
New file |
| | |
| | | /**
|
| | | * $Id: editor_plugin_src.js 42 2006-08-08 14:32:24Z spocke $
|
| | | *
|
| | | * @author Moxiecode - based on work by Andrew Tetlaw
|
| | | * @copyright Copyright © 2004-2008, Moxiecode Systems AB, All rights reserved.
|
| | | */
|
| | |
|
| | | function init() {
|
| | | SXE.initElementDialog('cite');
|
| | | if (SXE.currentAction == "update") {
|
| | | SXE.showRemoveButton();
|
| | | }
|
| | | }
|
| | |
|
| | | function insertCite() {
|
| | | SXE.insertElement('cite');
|
| | | tinyMCEPopup.close();
|
| | | }
|
| | |
|
| | | function removeCite() {
|
| | | SXE.removeElement('cite');
|
| | | tinyMCEPopup.close();
|
| | | }
|
| | |
|
| | | tinyMCEPopup.onInit.add(init);
|
New file |
| | |
| | | /**
|
| | | * $Id: editor_plugin_src.js 42 2006-08-08 14:32:24Z spocke $
|
| | | *
|
| | | * @author Moxiecode - based on work by Andrew Tetlaw
|
| | | * @copyright Copyright © 2004-2008, Moxiecode Systems AB, All rights reserved.
|
| | | */
|
| | |
|
| | | function init() {
|
| | | SXE.initElementDialog('del');
|
| | | if (SXE.currentAction == "update") {
|
| | | setFormValue('datetime', tinyMCEPopup.editor.dom.getAttrib(SXE.updateElement, 'datetime'));
|
| | | setFormValue('cite', tinyMCEPopup.editor.dom.getAttrib(SXE.updateElement, 'cite'));
|
| | | SXE.showRemoveButton();
|
| | | }
|
| | | }
|
| | |
|
| | | function setElementAttribs(elm) {
|
| | | setAllCommonAttribs(elm);
|
| | | setAttrib(elm, 'datetime');
|
| | | setAttrib(elm, 'cite');
|
| | | }
|
| | |
|
| | | function insertDel() {
|
| | | var elm = tinyMCEPopup.editor.dom.getParent(SXE.focusElement, 'DEL');
|
| | |
|
| | | tinyMCEPopup.execCommand('mceBeginUndoLevel');
|
| | | if (elm == null) {
|
| | | var s = SXE.inst.selection.getContent();
|
| | | if(s.length > 0) {
|
| | | tinyMCEPopup.execCommand('mceInsertContent', false, '<del id="#sxe_temp_del#">' + s + '</del>');
|
| | | var elementArray = tinymce.grep(SXE.inst.dom.select('del'), function(n) {return n.id == '#sxe_temp_del#';});
|
| | | for (var i=0; i<elementArray.length; i++) {
|
| | | var elm = elementArray[i];
|
| | | setElementAttribs(elm);
|
| | | }
|
| | | }
|
| | | } else {
|
| | | setElementAttribs(elm);
|
| | | }
|
| | | tinyMCEPopup.editor.nodeChanged();
|
| | | tinyMCEPopup.execCommand('mceEndUndoLevel');
|
| | | tinyMCEPopup.close();
|
| | | }
|
| | |
|
| | | function removeDel() {
|
| | | SXE.removeElement('del');
|
| | | tinyMCEPopup.close();
|
| | | }
|
| | |
|
| | | tinyMCEPopup.onInit.add(init);
|
New file |
| | |
| | | /**
|
| | | * $Id: editor_plugin_src.js 42 2006-08-08 14:32:24Z spocke $
|
| | | *
|
| | | * @author Moxiecode - based on work by Andrew Tetlaw
|
| | | * @copyright Copyright © 2004-2008, Moxiecode Systems AB, All rights reserved.
|
| | | */
|
| | |
|
| | | tinyMCEPopup.requireLangPack();
|
| | |
|
| | | function initCommonAttributes(elm) {
|
| | | var formObj = document.forms[0], dom = tinyMCEPopup.editor.dom;
|
| | |
|
| | | // Setup form data for common element attributes
|
| | | setFormValue('title', dom.getAttrib(elm, 'title'));
|
| | | setFormValue('id', dom.getAttrib(elm, 'id'));
|
| | | selectByValue(formObj, 'class', dom.getAttrib(elm, 'class'), true);
|
| | | setFormValue('style', dom.getAttrib(elm, 'style'));
|
| | | selectByValue(formObj, 'dir', dom.getAttrib(elm, 'dir'));
|
| | | setFormValue('lang', dom.getAttrib(elm, 'lang'));
|
| | | setFormValue('onfocus', dom.getAttrib(elm, 'onfocus'));
|
| | | setFormValue('onblur', dom.getAttrib(elm, 'onblur'));
|
| | | setFormValue('onclick', dom.getAttrib(elm, 'onclick'));
|
| | | setFormValue('ondblclick', dom.getAttrib(elm, 'ondblclick'));
|
| | | setFormValue('onmousedown', dom.getAttrib(elm, 'onmousedown'));
|
| | | setFormValue('onmouseup', dom.getAttrib(elm, 'onmouseup'));
|
| | | setFormValue('onmouseover', dom.getAttrib(elm, 'onmouseover'));
|
| | | setFormValue('onmousemove', dom.getAttrib(elm, 'onmousemove'));
|
| | | setFormValue('onmouseout', dom.getAttrib(elm, 'onmouseout'));
|
| | | setFormValue('onkeypress', dom.getAttrib(elm, 'onkeypress'));
|
| | | setFormValue('onkeydown', dom.getAttrib(elm, 'onkeydown'));
|
| | | setFormValue('onkeyup', dom.getAttrib(elm, 'onkeyup'));
|
| | | }
|
| | |
|
| | | function setFormValue(name, value) {
|
| | | if(document.forms[0].elements[name]) document.forms[0].elements[name].value = value;
|
| | | }
|
| | |
|
| | | function insertDateTime(id) {
|
| | | document.getElementById(id).value = getDateTime(new Date(), "%Y-%m-%dT%H:%M:%S");
|
| | | }
|
| | |
|
| | | function getDateTime(d, fmt) {
|
| | | fmt = fmt.replace("%D", "%m/%d/%y");
|
| | | fmt = fmt.replace("%r", "%I:%M:%S %p");
|
| | | fmt = fmt.replace("%Y", "" + d.getFullYear());
|
| | | fmt = fmt.replace("%y", "" + d.getYear());
|
| | | fmt = fmt.replace("%m", addZeros(d.getMonth()+1, 2));
|
| | | fmt = fmt.replace("%d", addZeros(d.getDate(), 2));
|
| | | fmt = fmt.replace("%H", "" + addZeros(d.getHours(), 2));
|
| | | fmt = fmt.replace("%M", "" + addZeros(d.getMinutes(), 2));
|
| | | fmt = fmt.replace("%S", "" + addZeros(d.getSeconds(), 2));
|
| | | fmt = fmt.replace("%I", "" + ((d.getHours() + 11) % 12 + 1));
|
| | | fmt = fmt.replace("%p", "" + (d.getHours() < 12 ? "AM" : "PM"));
|
| | | fmt = fmt.replace("%%", "%");
|
| | |
|
| | | return fmt;
|
| | | }
|
| | |
|
| | | function addZeros(value, len) {
|
| | | var i;
|
| | |
|
| | | value = "" + value;
|
| | |
|
| | | if (value.length < len) {
|
| | | for (i=0; i<(len-value.length); i++)
|
| | | value = "0" + value;
|
| | | }
|
| | |
|
| | | return value;
|
| | | }
|
| | |
|
| | | function selectByValue(form_obj, field_name, value, add_custom, ignore_case) {
|
| | | if (!form_obj || !form_obj.elements[field_name])
|
| | | return;
|
| | |
|
| | | var sel = form_obj.elements[field_name];
|
| | |
|
| | | var found = false;
|
| | | for (var i=0; i<sel.options.length; i++) {
|
| | | var option = sel.options[i];
|
| | |
|
| | | if (option.value == value || (ignore_case && option.value.toLowerCase() == value.toLowerCase())) {
|
| | | option.selected = true;
|
| | | found = true;
|
| | | } else
|
| | | option.selected = false;
|
| | | }
|
| | |
|
| | | if (!found && add_custom && value != '') {
|
| | | var option = new Option('Value: ' + value, value);
|
| | | option.selected = true;
|
| | | sel.options[sel.options.length] = option;
|
| | | }
|
| | |
|
| | | return found;
|
| | | }
|
| | |
|
| | | function setAttrib(elm, attrib, value) {
|
| | | var formObj = document.forms[0];
|
| | | var valueElm = formObj.elements[attrib.toLowerCase()];
|
| | | tinyMCEPopup.editor.dom.setAttrib(elm, attrib, value || valueElm.value);
|
| | | }
|
| | |
|
| | | function setAllCommonAttribs(elm) {
|
| | | setAttrib(elm, 'title');
|
| | | setAttrib(elm, 'id');
|
| | | setAttrib(elm, 'class');
|
| | | setAttrib(elm, 'style');
|
| | | setAttrib(elm, 'dir');
|
| | | setAttrib(elm, 'lang');
|
| | | /*setAttrib(elm, 'onfocus');
|
| | | setAttrib(elm, 'onblur');
|
| | | setAttrib(elm, 'onclick');
|
| | | setAttrib(elm, 'ondblclick');
|
| | | setAttrib(elm, 'onmousedown');
|
| | | setAttrib(elm, 'onmouseup');
|
| | | setAttrib(elm, 'onmouseover');
|
| | | setAttrib(elm, 'onmousemove');
|
| | | setAttrib(elm, 'onmouseout');
|
| | | setAttrib(elm, 'onkeypress');
|
| | | setAttrib(elm, 'onkeydown');
|
| | | setAttrib(elm, 'onkeyup');*/
|
| | | }
|
| | |
|
| | | SXE = {
|
| | | currentAction : "insert",
|
| | | inst : tinyMCEPopup.editor,
|
| | | updateElement : null
|
| | | }
|
| | |
|
| | | SXE.focusElement = SXE.inst.selection.getNode();
|
| | |
|
| | | SXE.initElementDialog = function(element_name) {
|
| | | addClassesToList('class', 'xhtmlxtras_styles');
|
| | | TinyMCE_EditableSelects.init();
|
| | |
|
| | | element_name = element_name.toLowerCase();
|
| | | var elm = SXE.inst.dom.getParent(SXE.focusElement, element_name.toUpperCase());
|
| | | if (elm != null && elm.nodeName == element_name.toUpperCase()) {
|
| | | SXE.currentAction = "update";
|
| | | }
|
| | |
|
| | | if (SXE.currentAction == "update") {
|
| | | initCommonAttributes(elm);
|
| | | SXE.updateElement = elm;
|
| | | }
|
| | |
|
| | | document.forms[0].insert.value = tinyMCEPopup.getLang(SXE.currentAction, 'Insert', true); |
| | | }
|
| | |
|
| | | SXE.insertElement = function(element_name) {
|
| | | var elm = SXE.inst.dom.getParent(SXE.focusElement, element_name.toUpperCase()), h, tagName;
|
| | |
|
| | | tinyMCEPopup.execCommand('mceBeginUndoLevel');
|
| | | if (elm == null) {
|
| | | var s = SXE.inst.selection.getContent();
|
| | | if(s.length > 0) {
|
| | | tagName = element_name;
|
| | |
|
| | | if (tinymce.isIE && element_name.indexOf('html:') == 0)
|
| | | element_name = element_name.substring(5).toLowerCase();
|
| | |
|
| | | h = '<' + tagName + ' id="#sxe_temp_' + element_name + '#">' + s + '</' + tagName + '>';
|
| | |
|
| | | tinyMCEPopup.execCommand('mceInsertContent', false, h);
|
| | |
|
| | | var elementArray = tinymce.grep(SXE.inst.dom.select(element_name), function(n) {return n.id == '#sxe_temp_' + element_name + '#';});
|
| | | for (var i=0; i<elementArray.length; i++) {
|
| | | var elm = elementArray[i];
|
| | |
|
| | | elm.id = '';
|
| | | elm.setAttribute('id', '');
|
| | | elm.removeAttribute('id');
|
| | |
|
| | | setAllCommonAttribs(elm);
|
| | | }
|
| | | }
|
| | | } else {
|
| | | setAllCommonAttribs(elm);
|
| | | }
|
| | | SXE.inst.nodeChanged();
|
| | | tinyMCEPopup.execCommand('mceEndUndoLevel');
|
| | | }
|
| | |
|
| | | SXE.removeElement = function(element_name){
|
| | | element_name = element_name.toLowerCase();
|
| | | elm = SXE.inst.dom.getParent(SXE.focusElement, element_name.toUpperCase());
|
| | | if(elm && elm.nodeName == element_name.toUpperCase()){
|
| | | tinyMCEPopup.execCommand('mceBeginUndoLevel');
|
| | | tinyMCE.execCommand('mceRemoveNode', false, elm);
|
| | | SXE.inst.nodeChanged();
|
| | | tinyMCEPopup.execCommand('mceEndUndoLevel');
|
| | | }
|
| | | }
|
| | |
|
| | | SXE.showRemoveButton = function() {
|
| | | document.getElementById("remove").style.display = 'block';
|
| | | }
|
| | |
|
| | | SXE.containsClass = function(elm,cl) {
|
| | | return (elm.className.indexOf(cl) > -1) ? true : false;
|
| | | }
|
| | |
|
| | | SXE.removeClass = function(elm,cl) {
|
| | | if(elm.className == null || elm.className == "" || !SXE.containsClass(elm,cl)) {
|
| | | return true;
|
| | | }
|
| | | var classNames = elm.className.split(" ");
|
| | | var newClassNames = "";
|
| | | for (var x = 0, cnl = classNames.length; x < cnl; x++) {
|
| | | if (classNames[x] != cl) {
|
| | | newClassNames += (classNames[x] + " ");
|
| | | }
|
| | | }
|
| | | elm.className = newClassNames.substring(0,newClassNames.length-1); //removes extra space at the end
|
| | | }
|
| | |
|
| | | SXE.addClass = function(elm,cl) {
|
| | | if(!SXE.containsClass(elm,cl)) elm.className ? elm.className += " " + cl : elm.className = cl;
|
| | | return true;
|
| | | } |
New file |
| | |
| | | /**
|
| | | * $Id: editor_plugin_src.js 42 2006-08-08 14:32:24Z spocke $
|
| | | *
|
| | | * @author Moxiecode - based on work by Andrew Tetlaw
|
| | | * @copyright Copyright © 2004-2008, Moxiecode Systems AB, All rights reserved.
|
| | | */
|
| | |
|
| | | function init() {
|
| | | SXE.initElementDialog('ins');
|
| | | if (SXE.currentAction == "update") {
|
| | | setFormValue('datetime', tinyMCEPopup.editor.dom.getAttrib(SXE.updateElement, 'datetime'));
|
| | | setFormValue('cite', tinyMCEPopup.editor.dom.getAttrib(SXE.updateElement, 'cite'));
|
| | | SXE.showRemoveButton();
|
| | | }
|
| | | }
|
| | |
|
| | | function setElementAttribs(elm) {
|
| | | setAllCommonAttribs(elm);
|
| | | setAttrib(elm, 'datetime');
|
| | | setAttrib(elm, 'cite');
|
| | | }
|
| | |
|
| | | function insertIns() {
|
| | | var elm = tinyMCEPopup.editor.dom.getParent(SXE.focusElement, 'INS');
|
| | | tinyMCEPopup.execCommand('mceBeginUndoLevel');
|
| | | if (elm == null) {
|
| | | var s = SXE.inst.selection.getContent();
|
| | | if(s.length > 0) {
|
| | | tinyMCEPopup.execCommand('mceInsertContent', false, '<ins id="#sxe_temp_ins#">' + s + '</ins>');
|
| | | var elementArray = tinymce.grep(SXE.inst.dom.select('ins'), function(n) {return n.id == '#sxe_temp_ins#';});
|
| | | for (var i=0; i<elementArray.length; i++) {
|
| | | var elm = elementArray[i];
|
| | | setElementAttribs(elm);
|
| | | }
|
| | | }
|
| | | } else {
|
| | | setElementAttribs(elm);
|
| | | }
|
| | | tinyMCEPopup.editor.nodeChanged();
|
| | | tinyMCEPopup.execCommand('mceEndUndoLevel');
|
| | | tinyMCEPopup.close();
|
| | | }
|
| | |
|
| | | function removeIns() {
|
| | | SXE.removeElement('ins');
|
| | | tinyMCEPopup.close();
|
| | | }
|
| | |
|
| | | tinyMCEPopup.onInit.add(init);
|
New file |
| | |
| | | tinyMCE.addI18n('en.xhtmlxtras_dlg',{
|
| | | attribute_label_title:"Title",
|
| | | attribute_label_id:"ID",
|
| | | attribute_label_class:"Class",
|
| | | attribute_label_style:"Style",
|
| | | attribute_label_cite:"Cite",
|
| | | attribute_label_datetime:"Date/Time",
|
| | | attribute_label_langdir:"Text Direction",
|
| | | attribute_option_ltr:"Left to right",
|
| | | attribute_option_rtl:"Right to left",
|
| | | attribute_label_langcode:"Language",
|
| | | attribute_label_tabindex:"TabIndex",
|
| | | attribute_label_accesskey:"AccessKey",
|
| | | attribute_events_tab:"Events",
|
| | | attribute_attrib_tab:"Attributes",
|
| | | general_tab:"General",
|
| | | attrib_tab:"Attributes",
|
| | | events_tab:"Events",
|
| | | fieldset_general_tab:"General Settings",
|
| | | fieldset_attrib_tab:"Element Attributes",
|
| | | fieldset_events_tab:"Element Events",
|
| | | title_ins_element:"Insertion Element",
|
| | | title_del_element:"Deletion Element",
|
| | | title_acronym_element:"Acronym Element",
|
| | | title_abbr_element:"Abbreviation Element",
|
| | | title_cite_element:"Citation Element",
|
| | | remove:"Remove",
|
| | | insert_date:"Insert current date/time",
|
| | | option_ltr:"Left to right",
|
| | | option_rtl:"Right to left",
|
| | | attribs_title:"Insert/Edit Attributes"
|
| | | }); |
| | |
| | | <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
|
| | | <html xmlns="http://www.w3.org/1999/xhtml">
|
| | | <head>
|
| | | <title>{$lang_about_title}</title>
|
| | | <script language="javascript" type="text/javascript" src="../../tiny_mce_popup.js"></script>
|
| | | <script language="javascript" type="text/javascript" src="../../utils/mctabs.js"></script>
|
| | | <script language="javascript" type="text/javascript" src="jscripts/about.js"></script>
|
| | | <base target="_self" />
|
| | | <title>{#advanced_dlg.about_title}</title>
|
| | | <script type="text/javascript" src="../../tiny_mce_popup.js"></script>
|
| | | <script type="text/javascript" src="../../utils/mctabs.js"></script>
|
| | | <script type="text/javascript" src="js/about.js"></script>
|
| | | </head>
|
| | | <body id="about" onload="tinyMCEPopup.executeOnLoad('init();');" style="display: none">
|
| | | <body id="about" style="display: none">
|
| | | <div class="tabs">
|
| | | <ul>
|
| | | <li id="general_tab" class="current"><span><a href="javascript:mcTabs.displayTab('general_tab','general_panel');" onmousedown="return false;">{$lang_about}</a></span></li>
|
| | | <li id="help_tab"><span><a href="javascript:mcTabs.displayTab('help_tab','help_panel');" onmousedown="return false;">{$lang_help}</a></span></li>
|
| | | <li id="plugins_tab"><span><a href="javascript:mcTabs.displayTab('plugins_tab','plugins_panel');" onmousedown="return false;">{$lang_plugins}</a></span></li>
|
| | | <li id="general_tab" class="current"><span><a href="javascript:mcTabs.displayTab('general_tab','general_panel');" onmousedown="return false;">{#advanced_dlg.about_general}</a></span></li>
|
| | | <li id="help_tab" style="display:none"><span><a href="javascript:mcTabs.displayTab('help_tab','help_panel');" onmousedown="return false;">{#advanced_dlg.about_help}</a></span></li>
|
| | | <li id="plugins_tab"><span><a href="javascript:mcTabs.displayTab('plugins_tab','plugins_panel');" onmousedown="return false;">{#advanced_dlg.about_plugins}</a></span></li>
|
| | | </ul>
|
| | | </div>
|
| | |
|
| | | <div class="panel_wrapper">
|
| | | <div id="general_panel" class="panel current">
|
| | | <h3>{$lang_about_title}</h3>
|
| | | <p>Version: {$tinymce_version} ({$tinymce_releasedate})</p>
|
| | | <h3>{#advanced_dlg.about_title}</h3>
|
| | | <p>Version: <span id="version"></span> (<span id="date"></span>)</p>
|
| | | <p>TinyMCE is a platform independent web based Javascript HTML WYSIWYG editor control released as Open Source under <a href="../../license.txt" target="_blank">LGPL</a>
|
| | | by Moxiecode Systems AB. It has the ability to convert HTML TEXTAREA fields or other HTML elements to editor instances.</p>
|
| | | <p>Copyright © 2003-2007, <a href="http://www.moxiecode.com" target="_blank">Moxiecode Systems AB</a>, All rights reserved.</p>
|
| | | <p>Copyright © 2003-2008, <a href="http://www.moxiecode.com" target="_blank">Moxiecode Systems AB</a>, All rights reserved.</p>
|
| | | <p>For more information about this software visit the <a href="http://tinymce.moxiecode.com" target="_blank">TinyMCE website</a>.</p>
|
| | |
|
| | | <div id="buttoncontainer"></div>
|
| | | <div id="buttoncontainer">
|
| | | <a href="http://www.moxiecode.com" target="_blank"><img src="http://tinymce.moxiecode.com/images/gotmoxie.png" alt="Got Moxie?" border="0" /></a>
|
| | | <a href="http://sourceforge.net/projects/tinymce/" target="_blank"><img src="http://sourceforge.net/sflogo.php?group_id=103281" alt="Hosted By Sourceforge" border="0" /></a>
|
| | | <a href="http://www.freshmeat.net/projects/tinymce" target="_blank"><img src="http://tinymce.moxiecode.com/images/fm.gif" alt="Also on freshmeat" border="0" /></a>
|
| | | </div>
|
| | | </div>
|
| | |
|
| | | <div id="plugins_panel" class="panel">
|
| | | <div id="pluginscontainer">
|
| | | <h3>{$lang_loaded_plugins}</h3>
|
| | | <h3>{#advanced_dlg.about_loaded}</h3>
|
| | |
|
| | | <div id="plugintablecontainer">
|
| | | </div>
|
| | |
| | |
|
| | | <div class="mceActionPanel">
|
| | | <div style="float: right">
|
| | | <input type="button" id="cancel" name="cancel" value="{$lang_close}" onclick="tinyMCEPopup.close();" />
|
| | | <input type="button" id="cancel" name="cancel" value="{#close}" onclick="tinyMCEPopup.close();" />
|
| | | </div>
|
| | | </div>
|
| | | </body>
|
| | |
| | | <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
|
| | | <html xmlns="http://www.w3.org/1999/xhtml">
|
| | | <head>
|
| | | <title>{$lang_insert_anchor_title}</title>
|
| | | <script language="javascript" type="text/javascript" src="../../tiny_mce_popup.js"></script>
|
| | | <script language="javascript" type="text/javascript" src="jscripts/anchor.js"></script>
|
| | | <title>{#advanced_dlg.anchor_title}</title>
|
| | | <script type="text/javascript" src="../../tiny_mce_popup.js"></script>
|
| | | <script type="text/javascript" src="js/anchor.js"></script>
|
| | | <base target="_self" />
|
| | | </head>
|
| | | <body onload="tinyMCEPopup.executeOnLoad('init();');" style="display: none">
|
| | | <form onsubmit="insertAnchor();return false;" action="#">
|
| | |
|
| | | <body style="display: none">
|
| | | <form onsubmit="AnchorDialog.update();return false;" action="#">
|
| | | <table border="0" cellpadding="4" cellspacing="0">
|
| | | <tr>
|
| | | <td colspan="2" class="title">{$lang_insert_anchor_title}</td>
|
| | | <td colspan="2" class="title">{#advanced_dlg.anchor_title}</td>
|
| | | </tr>
|
| | | <tr>
|
| | | <td nowrap="nowrap">{$lang_insert_anchor_name}:</td>
|
| | | <td><input name="anchorName" type="text" id="anchorName" value="" style="width: 200px" /></td>
|
| | | <td nowrap="nowrap">{#advanced_dlg.anchor_name}:</td>
|
| | | <td><input name="anchorName" type="text" class="mceFocus" id="anchorName" value="" style="width: 200px" /></td>
|
| | | </tr>
|
| | | </table>
|
| | |
|
| | | <div class="mceActionPanel">
|
| | | <div style="float: left">
|
| | | <input type="button" id="insert" name="insert" value="{$lang_update}" onclick="insertAnchor();" />
|
| | | <input type="submit" id="insert" name="insert" value="{#update}" />
|
| | | </div>
|
| | |
|
| | | <div style="float: right">
|
| | | <input type="button" id="cancel" name="cancel" value="{$lang_cancel}" onclick="tinyMCEPopup.close();" />
|
| | | <input type="button" id="cancel" name="cancel" value="{#cancel}" onclick="tinyMCEPopup.close();" />
|
| | | </div>
|
| | | </div>
|
| | |
|
| | | </form>
|
| | | </body>
|
| | | </html>
|
| | |
| | | <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
|
| | | <html xmlns="http://www.w3.org/1999/xhtml">
|
| | | <head>
|
| | | <title>{$lang_theme_charmap_title}</title>
|
| | | <title>{#advanced_dlg.charmap_title}</title>
|
| | | <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1" />
|
| | | <script language="javascript" type="text/javascript" src="../../tiny_mce_popup.js"></script>
|
| | | <script language="javascript" type="text/javascript" src="jscripts/charmap.js"></script>
|
| | | <script type="text/javascript" src="../../tiny_mce_popup.js"></script>
|
| | | <script type="text/javascript" src="js/charmap.js"></script>
|
| | | <base target="_self" />
|
| | | </head>
|
| | | <body onload="tinyMCEPopup.executeOnLoad('init();');" style="display: none">
|
| | | <body id="charmap" style="display:none">
|
| | | <table align="center" border="0" cellspacing="0" cellpadding="2">
|
| | | <tr>
|
| | | <td colspan="2" class="title">{$lang_theme_charmap_title}</td>
|
| | | <td colspan="2" class="title">{#advanced_dlg.charmap_title}</td>
|
| | | </tr>
|
| | | <tr>
|
| | | <td rowspan="2" align="left" valign="top">
|
| | | <script language="javascript" type="text/javascript">renderCharMapHTML();</script>
|
| | | <td id="charmapView" rowspan="2" align="left" valign="top">
|
| | | <!-- Chars will be rendered here -->
|
| | | </td>
|
| | | <td width="100" align="center" valign="top">
|
| | | <table border="0" cellpadding="0" cellspacing="0" width="100" style="height: 100px">
|
| | | <table border="0" cellpadding="0" cellspacing="0" width="100" style="height:100px">
|
| | | <tr>
|
| | | <td class="charmapOver" style="font-size: 40px; height:80px;" id="codeV"> </td>
|
| | | <td id="codeV"> </td>
|
| | | </tr>
|
| | | <tr>
|
| | | <td style="font-size: 10px; font-family: Arial, Helvetica, sans-serif; text-align:center;" id="codeN"> </td>
|
| | | <td id="codeN"> </td>
|
| | | </tr>
|
| | | </table>
|
| | | </td>
|
| | |
| | | <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
|
| | | <html xmlns="http://www.w3.org/1999/xhtml">
|
| | | <head>
|
| | | <title>{$lang_theme_colorpicker_title}</title>
|
| | | <script language="javascript" type="text/javascript" src="../../tiny_mce_popup.js"></script>
|
| | | <script language="javascript" type="text/javascript" src="../../utils/mctabs.js"></script>
|
| | | <script language="javascript" type="text/javascript" src="jscripts/color_picker.js"></script>
|
| | | <link href="css/colorpicker.css" rel="stylesheet" type="text/css" />
|
| | | <title>{#advanced_dlg.colorpicker_title}</title>
|
| | | <script type="text/javascript" src="../../tiny_mce_popup.js"></script>
|
| | | <script type="text/javascript" src="../../utils/mctabs.js"></script>
|
| | | <script type="text/javascript" src="js/color_picker.js"></script>
|
| | | <base target="_self" />
|
| | | </head>
|
| | | <body onload="tinyMCEPopup.executeOnLoad('init();');" style="display: none">
|
| | | <body id="colorpicker" style="display: none">
|
| | | <form onsubmit="insertAction();return false" action="#">
|
| | | <div class="tabs">
|
| | | <ul>
|
| | | <li id="picker_tab" class="current"><span><a href="javascript:mcTabs.displayTab('picker_tab','picker_panel');" onmousedown="return false;">{$lang_color_picker_tab}</a></span></li>
|
| | | <li id="rgb_tab"><span><a href="#" onclick="generateWebColors();mcTabs.displayTab('rgb_tab','rgb_panel');" onmousedown="return false;">{$lang_web_colors_tab}</a></span></li>
|
| | | <li id="named_tab"><span><a href="#" onclick="generateNamedColors();javascript:mcTabs.displayTab('named_tab','named_panel');" onmousedown="return false;">{$lang_named_colors_tab}</a></span></li>
|
| | | <li id="picker_tab" class="current"><span><a href="javascript:mcTabs.displayTab('picker_tab','picker_panel');" onmousedown="return false;">{#advanced_dlg.colorpicker_picker_tab}</a></span></li>
|
| | | <li id="rgb_tab"><span><a href="javascript:;" onclick="generateWebColors();mcTabs.displayTab('rgb_tab','rgb_panel');" onmousedown="return false;">{#advanced_dlg.colorpicker_palette_tab}</a></span></li>
|
| | | <li id="named_tab"><span><a href="javascript:;" onclick="generateNamedColors();javascript:mcTabs.displayTab('named_tab','named_panel');" onmousedown="return false;">{#advanced_dlg.colorpicker_named_tab}</a></span></li>
|
| | | </ul>
|
| | | </div>
|
| | |
|
| | | <div class="panel_wrapper">
|
| | | <div id="picker_panel" class="panel current">
|
| | | <fieldset>
|
| | | <legend>{$lang_color_picker}</legend>
|
| | | <legend>{#advanced_dlg.colorpicker_picker_title}</legend>
|
| | | <div id="picker">
|
| | | <img id="colorpicker" src="images/colors.jpg" onclick="computeColor(event)" onmousedown="isMouseDown = true;return false;" onmouseup="isMouseDown = false;" onmousemove="if (isMouseDown && isMouseOver) computeColor(event); return false;" onmouseover="isMouseOver=true;" onmouseout="isMouseOver=false;" />
|
| | | <img id="colors" src="img/colorpicker.jpg" onclick="computeColor(event)" onmousedown="isMouseDown = true;return false;" onmouseup="isMouseDown = false;" onmousemove="if (isMouseDown && isMouseOver) computeColor(event); return false;" onmouseover="isMouseOver=true;" onmouseout="isMouseOver=false;" />
|
| | |
|
| | | <div id="light">
|
| | | <!-- Will be filled with divs -->
|
| | |
| | |
|
| | | <div id="rgb_panel" class="panel">
|
| | | <fieldset>
|
| | | <legend>{$lang_web_colors}</legend>
|
| | | <legend>{#advanced_dlg.colorpicker_palette_title}</legend>
|
| | | <div id="webcolors">
|
| | | <!-- Gets filled with web safe colors-->
|
| | | </div>
|
| | |
| | |
|
| | | <div id="named_panel" class="panel">
|
| | | <fieldset>
|
| | | <legend>{$lang_named_colors}</legend>
|
| | | <legend>{#advanced_dlg.colorpicker_named_title}</legend>
|
| | | <div id="namedcolors">
|
| | | <!-- Gets filled with named colors-->
|
| | | </div>
|
| | |
| | | <br style="clear: both" />
|
| | |
|
| | | <div id="colornamecontainer">
|
| | | {$lang_color_name} <span id="colorname"></span>
|
| | | {#advanced_dlg.colorpicker_name} <span id="colorname"></span>
|
| | | </div>
|
| | | </fieldset>
|
| | | </div>
|
| | |
| | |
|
| | | <div class="mceActionPanel">
|
| | | <div style="float: left">
|
| | | <input type="button" id="insert" name="insert" value="{$lang_theme_colorpicker_apply}" onclick="insertAction();" />
|
| | | <input type="submit" id="insert" name="insert" value="{#apply}" />
|
| | | </div>
|
| | |
|
| | | <div id="preview"></div>
|
| | |
|
| | | <div id="previewblock">
|
| | | <label for="color">{$lang_color}</label> <input id="color" type="text" size="8" maxlength="8" class="text" />
|
| | | <label for="color">{#advanced_dlg.colorpicker_color}</label> <input id="color" type="text" size="8" maxlength="8" class="text mceFocus" />
|
| | | </div>
|
| | | </div>
|
| | | </form>
|
| | | </body>
|
| | | </html>
|
| | |
| | | tinyMCE.importThemeLanguagePack('advanced');var TinyMCE_AdvancedTheme={_defColors:"000000,993300,333300,003300,003366,000080,333399,333333,800000,FF6600,808000,008000,008080,0000FF,666699,808080,FF0000,FF9900,99CC00,339966,33CCCC,3366FF,800080,999999,FF00FF,FFCC00,FFFF00,00FF00,00FFFF,00CCFF,993366,C0C0C0,FF99CC,FFCC99,FFFF99,CCFFCC,CCFFFF,99CCFF,CC99FF,FFFFFF",_autoImportCSSClasses:true,_resizer:{},_buttons:[['bold','{$lang_bold_img}','lang_bold_desc','Bold'],['italic','{$lang_italic_img}','lang_italic_desc','Italic'],['underline','{$lang_underline_img}','lang_underline_desc','Underline'],['strikethrough','strikethrough.gif','lang_striketrough_desc','Strikethrough'],['justifyleft','justifyleft.gif','lang_justifyleft_desc','JustifyLeft'],['justifycenter','justifycenter.gif','lang_justifycenter_desc','JustifyCenter'],['justifyright','justifyright.gif','lang_justifyright_desc','JustifyRight'],['justifyfull','justifyfull.gif','lang_justifyfull_desc','JustifyFull'],['bullist','bullist.gif','lang_bullist_desc','InsertUnorderedList'],['numlist','numlist.gif','lang_numlist_desc','InsertOrderedList'],['outdent','outdent.gif','lang_outdent_desc','Outdent'],['indent','indent.gif','lang_indent_desc','Indent'],['cut','cut.gif','lang_cut_desc','Cut'],['copy','copy.gif','lang_copy_desc','Copy'],['paste','paste.gif','lang_paste_desc','Paste'],['undo','undo.gif','lang_undo_desc','Undo'],['redo','redo.gif','lang_redo_desc','Redo'],['link','link.gif','lang_link_desc','mceLink',true],['unlink','unlink.gif','lang_unlink_desc','unlink'],['image','image.gif','lang_image_desc','mceImage',true],['cleanup','cleanup.gif','lang_cleanup_desc','mceCleanup'],['help','help.gif','lang_help_desc','mceHelp'],['code','code.gif','lang_theme_code_desc','mceCodeEditor'],['hr','hr.gif','lang_theme_hr_desc','inserthorizontalrule'],['removeformat','removeformat.gif','lang_theme_removeformat_desc','removeformat'],['sub','sub.gif','lang_theme_sub_desc','subscript'],['sup','sup.gif','lang_theme_sup_desc','superscript'],['forecolor','forecolor.gif','lang_theme_forecolor_desc','forecolor',true],['forecolorpicker','forecolor.gif','lang_theme_forecolor_desc','forecolorpicker',true],['backcolor','backcolor.gif','lang_theme_backcolor_desc','HiliteColor',true],['backcolorpicker','backcolor.gif','lang_theme_backcolor_desc','backcolorpicker',true],['charmap','charmap.gif','lang_theme_charmap_desc','mceCharMap'],['visualaid','visualaid.gif','lang_theme_visualaid_desc','mceToggleVisualAid'],['anchor','anchor.gif','lang_theme_anchor_desc','mceInsertAnchor'],['newdocument','newdocument.gif','lang_newdocument_desc','mceNewDocument']],_buttonMap:'anchor,backcolor,bold,bullist,charmap,cleanup,code,copy,cut,forecolor,help,hr,image,indent,italic,justifycenter,justifyfull,justifyleft,justifyright,link,newdocument,numlist,outdent,paste,redo,removeformat,strikethrough,sub,sup,underline,undo,unlink,visualaid,advhr,ltr,rtl,emotions,flash,fullpage,fullscreen,iespell,insertdate,inserttime,pastetext,pasteword,selectall,preview,print,save,replace,search,table,cell_props,delete_col,delete_row,col_after,col_before,row_after,row_before,merge_cells,row_props,split_cells,delete_table',getControlHTML:function(button_name){var i,x,but;for(i=0;i<TinyMCE_AdvancedTheme._buttons.length;i++){but=TinyMCE_AdvancedTheme._buttons[i];if(but[0]==button_name&&(button_name=="forecolor"||button_name=="backcolor"))return tinyMCE.getMenuButtonHTML(but[0],but[2],'{$themeurl}/images/'+but[1],but[3]+"Menu",but[3],(but.length>4?but[4]:false),(but.length>5?but[5]:null));if(but[0]==button_name)return tinyMCE.getButtonHTML(but[0],but[2],'{$themeurl}/images/'+but[1],but[3],(but.length>4?but[4]:false),(but.length>5?but[5]:null))}switch(button_name){case"formatselect":var html='<select id="{$editor_id}_formatSelect" name="{$editor_id}_formatSelect" onfocus="tinyMCE.addSelectAccessibility(event, this, window);" onchange="tinyMCE.execInstanceCommand(\'{$editor_id}\',\'FormatBlock\',false,this.options[this.selectedIndex].value);" class="mceSelectList">';var formats=tinyMCE.getParam("theme_advanced_blockformats","p,address,pre,h1,h2,h3,h4,h5,h6",true).split(',');var lookup=[['p','{$lang_theme_paragraph}'],['address','{$lang_theme_address}'],['pre','{$lang_theme_pre}'],['h1','{$lang_theme_h1}'],['h2','{$lang_theme_h2}'],['h3','{$lang_theme_h3}'],['h4','{$lang_theme_h4}'],['h5','{$lang_theme_h5}'],['h6','{$lang_theme_h6}'],['div','{$lang_theme_div}'],['blockquote','{$lang_theme_blockquote}'],['code','{$lang_theme_code}'],['dt','{$lang_theme_dt}'],['dd','{$lang_theme_dd}'],['samp','{$lang_theme_samp}']];html+='<option value="">{$lang_theme_block}</option>';for(var i=0;i<formats.length;i++){for(var x=0;x<lookup.length;x++){if(formats[i]==lookup[x][0])html+='<option value="<'+lookup[x][0]+'>">'+lookup[x][1]+'</option>'}}html+='</select>';return html;case"styleselect":return'<select id="{$editor_id}_styleSelect" onmousedown="tinyMCE.themes.advanced._setupCSSClasses(\'{$editor_id}\');" name="{$editor_id}_styleSelect" onfocus="tinyMCE.addSelectAccessibility(event,this,window);" onchange="tinyMCE.execInstanceCommand(\'{$editor_id}\',\'mceSetCSSClass\',false,this.options[this.selectedIndex].value);" class="mceSelectList">{$style_select_options}</select>';case"fontselect":var fontHTML='<select id="{$editor_id}_fontNameSelect" name="{$editor_id}_fontNameSelect" onfocus="tinyMCE.addSelectAccessibility(event, this, window);" onchange="tinyMCE.execInstanceCommand(\'{$editor_id}\',\'FontName\',false,this.options[this.selectedIndex].value);" class="mceSelectList"><option value="">{$lang_theme_fontdefault}</option>';var iFonts='Arial=arial,helvetica,sans-serif;Courier New=courier new,courier,monospace;Georgia=georgia,times new roman,times,serif;Tahoma=tahoma,arial,helvetica,sans-serif;Times New Roman=times new roman,times,serif;Verdana=verdana,arial,helvetica,sans-serif;Impact=impact;WingDings=wingdings';var nFonts='Andale Mono=andale mono,times;Arial=arial,helvetica,sans-serif;Arial Black=arial black,avant garde;Book Antiqua=book antiqua,palatino;Comic Sans MS=comic sans ms,sans-serif;Courier New=courier new,courier;Georgia=georgia,palatino;Helvetica=helvetica;Impact=impact,chicago;Symbol=symbol;Tahoma=tahoma,arial,helvetica,sans-serif;Terminal=terminal,monaco;Times New Roman=times new roman,times;Trebuchet MS=trebuchet ms,geneva;Verdana=verdana,geneva;Webdings=webdings;Wingdings=wingdings,zapf dingbats';var fonts=tinyMCE.getParam("theme_advanced_fonts",nFonts).split(';');for(i=0;i<fonts.length;i++){if(fonts[i]!=''){var parts=fonts[i].split('=');fontHTML+='<option value="'+parts[1]+'">'+parts[0]+'</option>'}}fontHTML+='</select>';return fontHTML;case"fontsizeselect":return'<select id="{$editor_id}_fontSizeSelect" name="{$editor_id}_fontSizeSelect" onfocus="tinyMCE.addSelectAccessibility(event, this, window);" onchange="tinyMCE.execInstanceCommand(\'{$editor_id}\',\'FontSize\',false,this.options[this.selectedIndex].value);" class="mceSelectList">'+'<option value="0">{$lang_theme_font_size}</option>'+'<option value="1">1 (8 pt)</option>'+'<option value="2">2 (10 pt)</option>'+'<option value="3">3 (12 pt)</option>'+'<option value="4">4 (14 pt)</option>'+'<option value="5">5 (18 pt)</option>'+'<option value="6">6 (24 pt)</option>'+'<option value="7">7 (36 pt)</option>'+'</select>';case"|":case"separator":return'<img src="{$themeurl}/images/separator.gif" width="2" height="20" class="mceSeparatorLine" alt="" />';case"spacer":return'<img src="{$themeurl}/images/separator.gif" width="2" height="15" border="0" class="mceSeparatorLine" style="vertical-align: middle" alt="" />';case"rowseparator":return'<br />'}return""},execCommand:function(editor_id,element,command,user_interface,value){switch(command){case'mceHelp':tinyMCE.openWindow({file:'about.htm',width:480,height:380},{tinymce_version:tinyMCE.majorVersion+"."+tinyMCE.minorVersion,tinymce_releasedate:tinyMCE.releaseDate,inline:"yes"});return true;case"mceLink":var inst=tinyMCE.getInstanceById(editor_id);var doc=inst.getDoc();var selectedText="";if(tinyMCE.isMSIE){var rng=doc.selection.createRange();selectedText=rng.text}else selectedText=inst.getSel().toString();if(!tinyMCE.linkElement){if((tinyMCE.selectedElement.nodeName.toLowerCase()!="img")&&(selectedText.length<=0))return true}var href="",target="",title="",onclick="",action="insert",style_class="";if(tinyMCE.selectedElement.nodeName.toLowerCase()=="a")tinyMCE.linkElement=tinyMCE.selectedElement;if(tinyMCE.linkElement!=null&&tinyMCE.getAttrib(tinyMCE.linkElement,'href')=="")tinyMCE.linkElement=null;if(tinyMCE.linkElement){href=tinyMCE.getAttrib(tinyMCE.linkElement,'href');target=tinyMCE.getAttrib(tinyMCE.linkElement,'target');title=tinyMCE.getAttrib(tinyMCE.linkElement,'title');onclick=tinyMCE.getAttrib(tinyMCE.linkElement,'onclick');style_class=tinyMCE.getAttrib(tinyMCE.linkElement,'class');if(onclick=="")onclick=tinyMCE.getAttrib(tinyMCE.linkElement,'onclick');onclick=tinyMCE.cleanupEventStr(onclick);href=eval(tinyMCE.settings['urlconverter_callback']+"(href, tinyMCE.linkElement, true);");mceRealHref=tinyMCE.getAttrib(tinyMCE.linkElement,'mce_href');if(mceRealHref!=""){href=mceRealHref;if(tinyMCE.getParam('convert_urls'))href=eval(tinyMCE.settings['urlconverter_callback']+"(href, tinyMCE.linkElement, true);")}action="update"}var template=new Array();template['file']='link.htm';template['width']=310;template['height']=200;template['width']+=tinyMCE.getLang('lang_insert_link_delta_width',0);template['height']+=tinyMCE.getLang('lang_insert_link_delta_height',0);if(inst.settings['insertlink_callback']){var returnVal=eval(inst.settings['insertlink_callback']+"(href, target, title, onclick, action, style_class);");if(returnVal&&returnVal['href'])TinyMCE_AdvancedTheme._insertLink(returnVal['href'],returnVal['target'],returnVal['title'],returnVal['onclick'],returnVal['style_class'])}else{tinyMCE.openWindow(template,{href:href,target:target,title:title,onclick:onclick,action:action,className:style_class,inline:"yes"})}return true;case"mceImage":var src="",alt="",border="",hspace="",vspace="",width="",height="",align="";var title="",onmouseover="",onmouseout="",action="insert";var img=tinyMCE.imgElement;var inst=tinyMCE.getInstanceById(editor_id);if(tinyMCE.selectedElement!=null&&tinyMCE.selectedElement.nodeName.toLowerCase()=="img"){img=tinyMCE.selectedElement;tinyMCE.imgElement=img}if(img){if(tinyMCE.getAttrib(img,'name').indexOf('mce_')==0)return true;src=tinyMCE.getAttrib(img,'src');alt=tinyMCE.getAttrib(img,'alt');if(alt=="")alt=tinyMCE.getAttrib(img,'title');if(tinyMCE.isGecko){var w=img.style.width;if(w!=null&&w!="")img.setAttribute("width",w);var h=img.style.height;if(h!=null&&h!="")img.setAttribute("height",h)}border=tinyMCE.getAttrib(img,'border');hspace=tinyMCE.getAttrib(img,'hspace');vspace=tinyMCE.getAttrib(img,'vspace');width=tinyMCE.getAttrib(img,'width');height=tinyMCE.getAttrib(img,'height');align=tinyMCE.getAttrib(img,'align');onmouseover=tinyMCE.getAttrib(img,'onmouseover');onmouseout=tinyMCE.getAttrib(img,'onmouseout');title=tinyMCE.getAttrib(img,'title');if(tinyMCE.isMSIE){width=img.attributes['width'].specified?width:"";height=img.attributes['height'].specified?height:""}src=eval(tinyMCE.settings['urlconverter_callback']+"(src, img, true);");mceRealSrc=tinyMCE.getAttrib(img,'mce_src');if(mceRealSrc!=""){src=mceRealSrc;if(tinyMCE.getParam('convert_urls'))src=eval(tinyMCE.settings['urlconverter_callback']+"(src, img, true);")}action="update"}var template=new Array();template['file']='image.htm?src={$src}';template['width']=355;template['height']=265+(tinyMCE.isMSIE?25:0);template['width']+=tinyMCE.getLang('lang_insert_image_delta_width',0);template['height']+=tinyMCE.getLang('lang_insert_image_delta_height',0);if(inst.settings['insertimage_callback']){var returnVal=eval(inst.settings['insertimage_callback']+"(src, alt, border, hspace, vspace, width, height, align, title, onmouseover, onmouseout, action);");if(returnVal&&returnVal['src'])TinyMCE_AdvancedTheme._insertImage(returnVal['src'],returnVal['alt'],returnVal['border'],returnVal['hspace'],returnVal['vspace'],returnVal['width'],returnVal['height'],returnVal['align'],returnVal['title'],returnVal['onmouseover'],returnVal['onmouseout'])}else tinyMCE.openWindow(template,{src:src,alt:alt,border:border,hspace:hspace,vspace:vspace,width:width,height:height,align:align,title:title,onmouseover:onmouseover,onmouseout:onmouseout,action:action,inline:"yes"});return true;case"forecolor":var fcp=new TinyMCE_Layer(editor_id+'_fcPreview',false),p,img,elm;TinyMCE_AdvancedTheme._hideMenus(editor_id);if(!fcp.exists()){fcp.create('div','mceColorPreview',document.getElementById(editor_id+'_toolbar'));elm=fcp.getElement();elm._editor_id=editor_id;elm._command="forecolor";elm._switchId=editor_id+"_forecolor";tinyMCE.addEvent(elm,'click',TinyMCE_AdvancedTheme._handleMenuEvent);tinyMCE.addEvent(elm,'mouseover',TinyMCE_AdvancedTheme._handleMenuEvent);tinyMCE.addEvent(elm,'mouseout',TinyMCE_AdvancedTheme._handleMenuEvent)}img=tinyMCE.selectNodes(document.getElementById(editor_id+"_forecolor"),function(n){return n.nodeName=="IMG"})[0];p=tinyMCE.getAbsPosition(img,document.getElementById(editor_id+'_toolbar'));fcp.moveTo(p.absLeft,p.absTop);fcp.getElement().style.backgroundColor=value!=null?value:tinyMCE.getInstanceById(editor_id).foreColor;fcp.show();return false;case"forecolorpicker":this._pickColor(editor_id,'forecolor');return true;case"forecolorMenu":TinyMCE_AdvancedTheme._hideMenus(editor_id);var ml=new TinyMCE_Layer(editor_id+'_fcMenu');if(!ml.exists())ml.create('div','mceMenu',document.body,TinyMCE_AdvancedTheme._getColorHTML(editor_id,'theme_advanced_text_colors','forecolor'));tinyMCE.switchClass(editor_id+'_forecolor','mceMenuButtonFocus');ml.moveRelativeTo(document.getElementById(editor_id+"_forecolor"),'bl');ml.moveBy(tinyMCE.isMSIE&&!tinyMCE.isOpera?-1:1,-1);if(tinyMCE.isOpera)ml.moveBy(0,-2);ml.show();return true;case"HiliteColor":var bcp=new TinyMCE_Layer(editor_id+'_bcPreview',false),p,img;TinyMCE_AdvancedTheme._hideMenus(editor_id);if(!bcp.exists()){bcp.create('div','mceColorPreview',document.getElementById(editor_id+'_toolbar'));elm=bcp.getElement();elm._editor_id=editor_id;elm._command="HiliteColor";elm._switchId=editor_id+"_backcolor";tinyMCE.addEvent(elm,'click',TinyMCE_AdvancedTheme._handleMenuEvent);tinyMCE.addEvent(elm,'mouseover',TinyMCE_AdvancedTheme._handleMenuEvent);tinyMCE.addEvent(elm,'mouseout',TinyMCE_AdvancedTheme._handleMenuEvent)}img=tinyMCE.selectNodes(document.getElementById(editor_id+"_backcolor"),function(n){return n.nodeName=="IMG"})[0];p=tinyMCE.getAbsPosition(img,document.getElementById(editor_id+'_toolbar'));bcp.moveTo(p.absLeft,p.absTop);bcp.getElement().style.backgroundColor=value!=null?value:tinyMCE.getInstanceById(editor_id).backColor;bcp.show();return false;case"HiliteColorMenu":TinyMCE_AdvancedTheme._hideMenus(editor_id);var ml=new TinyMCE_Layer(editor_id+'_bcMenu');if(!ml.exists())ml.create('div','mceMenu',document.body,TinyMCE_AdvancedTheme._getColorHTML(editor_id,'theme_advanced_background_colors','HiliteColor'));tinyMCE.switchClass(editor_id+'_backcolor','mceMenuButtonFocus');ml.moveRelativeTo(document.getElementById(editor_id+"_backcolor"),'bl');ml.moveBy(tinyMCE.isMSIE&&!tinyMCE.isOpera?-1:1,-1);if(tinyMCE.isOpera)ml.moveBy(0,-2);ml.show();return true;case"backcolorpicker":this._pickColor(editor_id,'HiliteColor');return true;case"mceColorPicker":if(user_interface){var template=[];if(!value['callback']&&!value['color'])value['color']=value['document'].getElementById(value['element_id']).value;template['file']='color_picker.htm';template['width']=380;template['height']=250;template['close_previous']="no";template['width']+=tinyMCE.getLang('lang_theme_advanced_colorpicker_delta_width',0);template['height']+=tinyMCE.getLang('lang_theme_advanced_colorpicker_delta_height',0);if(typeof(value['store_selection'])=="undefined")value['store_selection']=true;tinyMCE.lastColorPickerValue=value;tinyMCE.openWindow(template,{editor_id:editor_id,mce_store_selection:value['store_selection'],inline:"yes",command:"mceColorPicker",input_color:value['color']})}else{var savedVal=tinyMCE.lastColorPickerValue,elm;if(savedVal['callback']){savedVal['callback'](value);return true}elm=savedVal['document'].getElementById(savedVal['element_id']);elm.value=value;if(elm.onchange!=null&&elm.onchange!='')eval('elm.onchange();')}return true;case"mceCodeEditor":var template=new Array();template['file']='source_editor.htm';template['width']=parseInt(tinyMCE.getParam("theme_advanced_source_editor_width",720));template['height']=parseInt(tinyMCE.getParam("theme_advanced_source_editor_height",580));tinyMCE.openWindow(template,{editor_id:editor_id,resizable:"yes",scrollbars:"no",inline:"yes"});return true;case"mceCharMap":var template=new Array();template['file']='charmap.htm';template['width']=550+(tinyMCE.isOpera?40:0);template['height']=250;template['width']+=tinyMCE.getLang('lang_theme_advanced_charmap_delta_width',0);template['height']+=tinyMCE.getLang('lang_theme_advanced_charmap_delta_height',0);tinyMCE.openWindow(template,{editor_id:editor_id,inline:"yes"});return true;case"mceInsertAnchor":var template=new Array();template['file']='anchor.htm';template['width']=320;template['height']=90+(tinyMCE.isNS7?30:0);template['width']+=tinyMCE.getLang('lang_theme_advanced_anchor_delta_width',0);template['height']+=tinyMCE.getLang('lang_theme_advanced_anchor_delta_height',0);tinyMCE.openWindow(template,{editor_id:editor_id,inline:"yes"});return true;case"mceNewDocument":if(confirm(tinyMCE.entityDecode(tinyMCE.getLang('lang_newdocument'))))tinyMCE.execInstanceCommand(editor_id,'mceSetContent',false,' ');return true}return false},getEditorTemplate:function(settings,editorId){function removeFromArray(in_array,remove_array){var outArray=new Array(),skip;for(var i=0;i<in_array.length;i++){skip=false;for(var j=0;j<remove_array.length;j++){if(in_array[i]==remove_array[j]){skip=true}}if(!skip){outArray[outArray.length]=in_array[i]}}return outArray}function addToArray(in_array,add_array){for(var i=0;i<add_array.length;i++){in_array[in_array.length]=add_array[i]}return in_array}var template=new Array();var deltaHeight=0;var resizing=tinyMCE.getParam("theme_advanced_resizing",false);var path=tinyMCE.getParam("theme_advanced_path",true);var statusbarHTML='<div id="{$editor_id}_path" class="mceStatusbarPathText" style="display: '+(path?"block":"none")+'"> </div><div id="{$editor_id}_resize" class="mceStatusbarResize" style="display: '+(resizing?"block":"none")+'" onmousedown="tinyMCE.themes.advanced._setResizing(event,\'{$editor_id}\',true);"></div><br style="clear: both" />';var layoutManager=tinyMCE.getParam("theme_advanced_layout_manager","SimpleLayout");var styleSelectHTML='<option value="">{$lang_theme_style_select}</option>';if(settings['theme_advanced_styles']){var stylesAr=settings['theme_advanced_styles'].split(';');for(var i=0;i<stylesAr.length;i++){var key,value;key=stylesAr[i].split('=')[0];value=stylesAr[i].split('=')[1];styleSelectHTML+='<option value="'+value+'">'+key+'</option>'}TinyMCE_AdvancedTheme._autoImportCSSClasses=false}switch(layoutManager){case"SimpleLayout":var toolbarHTML="";var toolbarLocation=tinyMCE.getParam("theme_advanced_toolbar_location","bottom");var toolbarAlign=tinyMCE.getParam("theme_advanced_toolbar_align","center");var pathLocation=tinyMCE.getParam("theme_advanced_path_location","none");var statusbarLocation=tinyMCE.getParam("theme_advanced_statusbar_location",pathLocation);var defVals={theme_advanced_buttons1:"bold,italic,underline,strikethrough,separator,justifyleft,justifycenter,justifyright,justifyfull,separator,styleselect,formatselect",theme_advanced_buttons2:"bullist,numlist,separator,outdent,indent,separator,undo,redo,separator,link,unlink,anchor,image,cleanup,help,code",theme_advanced_buttons3:"hr,removeformat,visualaid,separator,sub,sup,separator,charmap"};toolbarHTML+='<a href="#" accesskey="q" title="'+tinyMCE.getLang("lang_toolbar_focus")+'"';if(!tinyMCE.getParam("accessibility_focus"))toolbarHTML+=' onfocus="tinyMCE.getInstanceById(\''+editorId+'\').getWin().focus();"';toolbarHTML+='></a>';for(var i=1;i<100;i++){var def=defVals["theme_advanced_buttons"+i];var buttons=tinyMCE.getParam("theme_advanced_buttons"+i,def==null?'':def,true,',');if(buttons.length==0)break;buttons=removeFromArray(buttons,tinyMCE.getParam("theme_advanced_disable","",true,','));buttons=addToArray(buttons,tinyMCE.getParam("theme_advanced_buttons"+i+"_add","",true,','));buttons=addToArray(tinyMCE.getParam("theme_advanced_buttons"+i+"_add_before","",true,','),buttons);for(var b=0;b<buttons.length;b++)toolbarHTML+=tinyMCE.getControlHTML(buttons[b]);if(buttons.length>0){toolbarHTML+="<br />";deltaHeight-=23}}toolbarHTML+='<a href="#" accesskey="z" onfocus="tinyMCE.getInstanceById(\''+editorId+'\').getWin().focus();"></a>';template['html']='<table class="mceEditor" border="0" cellpadding="0" cellspacing="0" width="{$width}" height="{$height}" style="width:{$width_style};height:{$height_style}"><tbody>';if(toolbarLocation=="top")template['html']+='<tr><td dir="ltr" class="mceToolbarTop" align="'+toolbarAlign+'" height="1" nowrap="nowrap"><span id="'+editorId+'_toolbar" class="mceToolbarContainer">'+toolbarHTML+'</span></td></tr>';if(statusbarLocation=="top"){template['html']+='<tr><td class="mceStatusbarTop" height="1">'+statusbarHTML+'</td></tr>';deltaHeight-=23}template['html']+='<tr><td align="center"><span id="{$editor_id}"></span></td></tr>';if(toolbarLocation=="bottom")template['html']+='<tr><td dir="ltr" class="mceToolbarBottom" align="'+toolbarAlign+'" height="1"><span id="'+editorId+'_toolbar" class="mceToolbarContainer">'+toolbarHTML+'</span></td></tr>';if(toolbarLocation=="external"){var bod=document.body;var elm=document.createElement("div");toolbarHTML=tinyMCE.replaceVar(toolbarHTML,'style_select_options',styleSelectHTML);toolbarHTML=tinyMCE.applyTemplate(toolbarHTML,{editor_id:editorId});elm.className="mceToolbarExternal";elm.id=editorId+"_toolbar";elm.innerHTML='<table width="100%" border="0" align="center"><tr><td align="center">'+toolbarHTML+'</td></tr></table>';bod.appendChild(elm);deltaHeight=0;tinyMCE.getInstanceById(editorId).toolbarElement=elm;}else{tinyMCE.getInstanceById(editorId).toolbarElement=null}if(statusbarLocation=="bottom"){template['html']+='<tr><td class="mceStatusbarBottom" height="1">'+statusbarHTML+'</td></tr>';deltaHeight-=23}template['html']+='</tbody></table>';break;case"RowLayout":template['html']='<table class="mceEditor" border="0" cellpadding="0" cellspacing="0" width="{$width}" height="{$height}" style="width:{$width}px;height:{$height}px"><tbody>';var containers=tinyMCE.getParam("theme_advanced_containers","",true,",");var defaultContainerCSS=tinyMCE.getParam("theme_advanced_containers_default_class","container");var defaultContainerAlign=tinyMCE.getParam("theme_advanced_containers_default_align","center");for(var i=0;i<containers.length;i++){if(containers[i]=="mceEditor")template['html']+='<tr><td align="center" class="mceEditor_border"><span id="{$editor_id}"></span></td></tr>';else if(containers[i]=="mceElementpath"||containers[i]=="mceStatusbar"){var pathClass="mceStatusbar";if(i==containers.length-1){pathClass="mceStatusbarBottom"}else if(i==0){pathClass="mceStatusbar"}else{deltaHeight-=2}template['html']+='<tr><td class="'+pathClass+'" height="1">'+statusbarHTML+'</td></tr>';deltaHeight-=22}else{var curContainer=tinyMCE.getParam("theme_advanced_container_"+containers[i],"",true,',');var curContainerHTML="";var curAlign=tinyMCE.getParam("theme_advanced_container_"+containers[i]+"_align",defaultContainerAlign);var curCSS=tinyMCE.getParam("theme_advanced_container_"+containers[i]+"_class",defaultContainerCSS);curContainer=removeFromArray(curContainer,tinyMCE.getParam("theme_advanced_disable","",true,','));for(var j=0;j<curContainer.length;j++)curContainerHTML+=tinyMCE.getControlHTML(curContainer[j]);if(curContainer.length>0){curContainerHTML+="<br />";deltaHeight-=23}template['html']+='<tr><td class="'+curCSS+'" align="'+curAlign+'" height="1">'+curContainerHTML+'</td></tr>'}}template['html']+='</tbody></table>';break;case"CustomLayout":var customLayout=tinyMCE.getParam("theme_advanced_custom_layout","");if(customLayout!=""&&eval("typeof("+customLayout+")")!="undefined"){template=eval(customLayout+"(template);")}break}if(resizing)template['html']+='<span id="{$editor_id}_resize_box" class="mceResizeBox"></span>';template['html']=tinyMCE.replaceVar(template['html'],'style_select_options',styleSelectHTML);if(!template['delta_width'])template['delta_width']=0;if(!template['delta_height'])template['delta_height']=deltaHeight;return template},initInstance:function(inst){if(tinyMCE.getParam("theme_advanced_resizing",false)){if(tinyMCE.getParam("theme_advanced_resizing_use_cookie",true)){var w=TinyMCE_AdvancedTheme._getCookie("TinyMCE_"+inst.editorId+"_width");var h=TinyMCE_AdvancedTheme._getCookie("TinyMCE_"+inst.editorId+"_height");TinyMCE_AdvancedTheme._resizeTo(inst,w,h,tinyMCE.getParam("theme_advanced_resize_horizontal",true))}}inst.addShortcut('ctrl','k','lang_link_desc','mceLink')},removeInstance:function(inst){new TinyMCE_Layer(inst.editorId+'_fcMenu').remove();new TinyMCE_Layer(inst.editorId+'_bcMenu').remove()},hideInstance:function(inst){TinyMCE_AdvancedTheme._hideMenus(inst.editorId)},_handleMenuEvent:function(e){var te=tinyMCE.isMSIE?window.event.srcElement:e.target;tinyMCE._menuButtonEvent(e.type=="mouseover"?"over":"out",document.getElementById(te._switchId));if(e.type=="click")tinyMCE.execInstanceCommand(te._editor_id,te._command)},_hideMenus:function(id){var fcml=new TinyMCE_Layer(id+'_fcMenu'),bcml=new TinyMCE_Layer(id+'_bcMenu');if(fcml.exists()&&fcml.isVisible()){tinyMCE.switchClass(id+'_forecolor','mceMenuButton');fcml.hide()}if(bcml.exists()&&bcml.isVisible()){tinyMCE.switchClass(id+'_backcolor','mceMenuButton');bcml.hide()}},handleNodeChange:function(editor_id,node,undo_index,undo_levels,visual_aid,any_selection,setup_content){var alignNode,breakOut,classNode;function selectByValue(select_elm,value,first_index){first_index=typeof(first_index)=="undefined"?false:true;if(select_elm){for(var i=0;i<select_elm.options.length;i++){var ov=""+select_elm.options[i].value;if(first_index&&ov.toLowerCase().indexOf(value.toLowerCase())==0){select_elm.selectedIndex=i;return true}if(ov==value){select_elm.selectedIndex=i;return true}}}return false};if(node==null)return;var pathElm=document.getElementById(editor_id+"_path");var inst=tinyMCE.getInstanceById(editor_id);var doc=inst.getDoc();TinyMCE_AdvancedTheme._hideMenus(editor_id);if(pathElm){var parentNode=node;var path=new Array();while(parentNode!=null){if(parentNode.nodeName.toUpperCase()=="BODY"){break}if(parentNode.nodeType==1&&tinyMCE.getAttrib(parentNode,"class").indexOf('mceItemHidden')==-1){path[path.length]=parentNode}parentNode=parentNode.parentNode}var html="";for(var i=path.length-1;i>=0;i--){var nodeName=path[i].nodeName.toLowerCase();var nodeData="";if(nodeName.indexOf("html:")==0)nodeName=nodeName.substring(5);if(nodeName=="b"){nodeName="strong"}if(nodeName=="i"){nodeName="em"}if(nodeName=="span"){var cn=tinyMCE.getAttrib(path[i],"class");if(cn!=""&&cn.indexOf('mceItem')==-1)nodeData+="class: "+cn+" ";var st=tinyMCE.getAttrib(path[i],"style");if(st!=""){st=tinyMCE.serializeStyle(tinyMCE.parseStyle(st));nodeData+="style: "+tinyMCE.xmlEncode(st)+" "}}if(nodeName=="font"){if(tinyMCE.getParam("convert_fonts_to_spans"))nodeName="span";var face=tinyMCE.getAttrib(path[i],"face");if(face!="")nodeData+="font: "+tinyMCE.xmlEncode(face)+" ";var size=tinyMCE.getAttrib(path[i],"size");if(size!="")nodeData+="size: "+tinyMCE.xmlEncode(size)+" ";var color=tinyMCE.getAttrib(path[i],"color");if(color!="")nodeData+="color: "+tinyMCE.xmlEncode(color)+" "}if(tinyMCE.getAttrib(path[i],'id')!=""){nodeData+="id: "+path[i].getAttribute('id')+" "}var className=tinyMCE.getVisualAidClass(tinyMCE.getAttrib(path[i],"class"),false);if(className!=""&&className.indexOf('mceItem')==-1)nodeData+="class: "+className+" ";if(tinyMCE.getAttrib(path[i],'src')!=""){var src=tinyMCE.getAttrib(path[i],"mce_src");if(src=="")src=tinyMCE.getAttrib(path[i],"src");nodeData+="src: "+tinyMCE.xmlEncode(src)+" "}if(path[i].nodeName=='A'&&tinyMCE.getAttrib(path[i],'href')!=""){var href=tinyMCE.getAttrib(path[i],"mce_href");if(href=="")href=tinyMCE.getAttrib(path[i],"href");nodeData+="href: "+tinyMCE.xmlEncode(href)+" "}className=tinyMCE.getAttrib(path[i],"class");if((nodeName=="img"||nodeName=="span")&&className.indexOf('mceItem')!=-1){nodeName=className.replace(/mceItem([a-z]+)/gi,'$1').toLowerCase();nodeData=path[i].getAttribute('title')}if(nodeName=="a"&&(anchor=tinyMCE.getAttrib(path[i],"name"))!=""){nodeName="a";nodeName+="#"+tinyMCE.xmlEncode(anchor);nodeData=""}if(tinyMCE.getAttrib(path[i],'name').indexOf("mce_")!=0){var className=tinyMCE.getVisualAidClass(tinyMCE.getAttrib(path[i],"class"),false);if(className!=""&&className.indexOf('mceItem')==-1){nodeName+="."+className}}var cmd='tinyMCE.execInstanceCommand(\''+editor_id+'\',\'mceSelectNodeDepth\',false,\''+i+'\');';html+='<a title="'+nodeData+'" href="javascript:'+cmd+'" onclick="'+cmd+'return false;" onmousedown="return false;" target="_self" class="mcePathItem">'+nodeName+'</a>';if(i>0){html+=" » "}}pathElm.innerHTML='<a href="#" accesskey="x"></a>'+tinyMCE.getLang('lang_theme_path')+": "+html+' '}tinyMCE.switchClass(editor_id+'_justifyleft','mceButtonNormal');tinyMCE.switchClass(editor_id+'_justifyright','mceButtonNormal');tinyMCE.switchClass(editor_id+'_justifycenter','mceButtonNormal');tinyMCE.switchClass(editor_id+'_justifyfull','mceButtonNormal');tinyMCE.switchClass(editor_id+'_bold','mceButtonNormal');tinyMCE.switchClass(editor_id+'_italic','mceButtonNormal');tinyMCE.switchClass(editor_id+'_underline','mceButtonNormal');tinyMCE.switchClass(editor_id+'_strikethrough','mceButtonNormal');tinyMCE.switchClass(editor_id+'_bullist','mceButtonNormal');tinyMCE.switchClass(editor_id+'_numlist','mceButtonNormal');tinyMCE.switchClass(editor_id+'_sub','mceButtonNormal');tinyMCE.switchClass(editor_id+'_sup','mceButtonNormal');tinyMCE.switchClass(editor_id+'_anchor','mceButtonNormal');tinyMCE.switchClass(editor_id+'_link','mceButtonDisabled');tinyMCE.switchClass(editor_id+'_unlink','mceButtonDisabled');tinyMCE.switchClass(editor_id+'_outdent','mceButtonDisabled');tinyMCE.switchClass(editor_id+'_image','mceButtonNormal');tinyMCE.switchClass(editor_id+'_hr','mceButtonNormal');if(node.nodeName=="A"&&tinyMCE.getAttrib(node,"class").indexOf('mceItemAnchor')!=-1)tinyMCE.switchClass(editor_id+'_anchor','mceButtonSelected');var anchorLink=tinyMCE.getParentElement(node,"a","href");if(anchorLink||any_selection){tinyMCE.switchClass(editor_id+'_link',anchorLink?'mceButtonSelected':'mceButtonNormal');tinyMCE.switchClass(editor_id+'_unlink',anchorLink?'mceButtonSelected':'mceButtonNormal')}tinyMCE.switchClass(editor_id+'_visualaid',visual_aid?'mceButtonSelected':'mceButtonNormal');if(undo_levels!=-1){tinyMCE.switchClass(editor_id+'_undo','mceButtonDisabled');tinyMCE.switchClass(editor_id+'_redo','mceButtonDisabled')}if(tinyMCE.getParentElement(node,"li,blockquote"))tinyMCE.switchClass(editor_id+'_outdent','mceButtonNormal');if(undo_index!=-1&&(undo_index<undo_levels-1&&undo_levels>0))tinyMCE.switchClass(editor_id+'_redo','mceButtonNormal');if(undo_index!=-1&&(undo_index>0&&undo_levels>0))tinyMCE.switchClass(editor_id+'_undo','mceButtonNormal');var selectElm=document.getElementById(editor_id+"_styleSelect");if(selectElm){TinyMCE_AdvancedTheme._setupCSSClasses(editor_id);classNode=node;breakOut=false;var index=0;do{if(classNode&&classNode.className){for(var i=0;i<selectElm.options.length;i++){if(selectElm.options[i].value==classNode.className){index=i;breakOut=true;break}}}}while(!breakOut&&classNode!=null&&(classNode=classNode.parentNode)!=null);selectElm.selectedIndex=index}var selectElm=document.getElementById(editor_id+"_formatSelect");if(selectElm){var elm=tinyMCE.getParentElement(node,"p,div,h1,h2,h3,h4,h5,h6,pre,address");if(elm)selectByValue(selectElm,"<"+elm.nodeName.toLowerCase()+">");else selectByValue(selectElm,"")}var selectElm=document.getElementById(editor_id+"_fontNameSelect");if(selectElm){if(!tinyMCE.isSafari&&!(tinyMCE.isMSIE&&!tinyMCE.isOpera)){var face=inst.queryCommandValue('FontName');face=face==null||face==""?"":face;selectByValue(selectElm,face,face!="")}else{var elm=tinyMCE.getParentElement(node,"font","face");if(elm){var family=tinyMCE.getAttrib(elm,"face");if(family=='')family=''+elm.style.fontFamily;if(!selectByValue(selectElm,family,family!=""))selectByValue(selectElm,"")}else selectByValue(selectElm,"")}}var selectElm=document.getElementById(editor_id+"_fontSizeSelect");if(selectElm){if(!tinyMCE.isSafari&&!tinyMCE.isOpera){var size=inst.queryCommandValue('FontSize');selectByValue(selectElm,size==null||size==""?"0":size)}else{var elm=tinyMCE.getParentElement(node,"font","size");if(elm){var size=tinyMCE.getAttrib(elm,"size");if(size==''){var sizes=new Array('','8px','10px','12px','14px','18px','24px','36px');size=''+elm.style.fontSize;for(var i=0;i<sizes.length;i++){if((''+sizes[i])==size){size=i;break}}}if(!selectByValue(selectElm,size))selectByValue(selectElm,"")}else selectByValue(selectElm,"0")}}alignNode=node;breakOut=false;do{if(!alignNode.getAttribute||!alignNode.getAttribute('align'))continue;switch(alignNode.getAttribute('align').toLowerCase()){case"left":tinyMCE.switchClass(editor_id+'_justifyleft','mceButtonSelected');breakOut=true;break;case"right":tinyMCE.switchClass(editor_id+'_justifyright','mceButtonSelected');breakOut=true;break;case"middle":case"center":tinyMCE.switchClass(editor_id+'_justifycenter','mceButtonSelected');breakOut=true;break;case"justify":tinyMCE.switchClass(editor_id+'_justifyfull','mceButtonSelected');breakOut=true;break}}while(!breakOut&&(alignNode=alignNode.parentNode)!=null);var div=tinyMCE.getParentElement(node,"div");if(div&&div.style.textAlign=="center")tinyMCE.switchClass(editor_id+'_justifycenter','mceButtonSelected');if(!setup_content){var ar=new Array("Bold","_bold","Italic","_italic","Strikethrough","_strikethrough","superscript","_sup","subscript","_sub");for(var i=0;i<ar.length;i+=2){if(inst.queryCommandState(ar[i]))tinyMCE.switchClass(editor_id+ar[i+1],'mceButtonSelected')}if(inst.queryCommandState("Underline")&&(node.parentNode==null||node.parentNode.nodeName!="A"))tinyMCE.switchClass(editor_id+'_underline','mceButtonSelected')}do{switch(node.nodeName){case"UL":tinyMCE.switchClass(editor_id+'_bullist','mceButtonSelected');break;case"OL":tinyMCE.switchClass(editor_id+'_numlist','mceButtonSelected');break;case"HR":tinyMCE.switchClass(editor_id+'_hr','mceButtonSelected');break;case"IMG":if(tinyMCE.getAttrib(node,'name').indexOf('mce_')!=0&&tinyMCE.getAttrib(node,'class').indexOf('mceItem')==-1){tinyMCE.switchClass(editor_id+'_image','mceButtonSelected')}break}}while((node=node.parentNode)!=null)},_setupCSSClasses:function(editor_id){var i,selectElm;if(!TinyMCE_AdvancedTheme._autoImportCSSClasses)return;selectElm=document.getElementById(editor_id+'_styleSelect');if(selectElm&&selectElm.getAttribute('cssImported')!='true'){var csses=tinyMCE.getCSSClasses(editor_id);if(csses&&selectElm){for(i=0;i<csses.length;i++)selectElm.options[selectElm.options.length]=new Option(csses[i],csses[i])}if(csses!=null&&csses.length>0)selectElm.setAttribute('cssImported','true')}},_setCookie:function(name,value,expires,path,domain,secure){var curCookie=name+"="+escape(value)+((expires)?"; expires="+expires.toGMTString():"")+((path)?"; path="+escape(path):"")+((domain)?"; domain="+domain:"")+((secure)?"; secure":"");document.cookie=curCookie},_getCookie:function(name){var dc=document.cookie;var prefix=name+"=";var begin=dc.indexOf("; "+prefix);if(begin==-1){begin=dc.indexOf(prefix);if(begin!=0)return null}else begin+=2;var end=document.cookie.indexOf(";",begin);if(end==-1)end=dc.length;return unescape(dc.substring(begin+prefix.length,end))},_resizeTo:function(inst,w,h,set_w){var editorContainer=document.getElementById(inst.editorId+'_parent');var tableElm=editorContainer.firstChild;var iframe=inst.iframeElement;if(w==null||w=="null"){set_w=false;w=0}if(h==null||h=="null")return;w=parseInt(w);h=parseInt(h);if(tinyMCE.isGecko){w+=2;h+=2}var dx=w-tableElm.clientWidth;var dy=h-tableElm.clientHeight;w=w<1?30:w;h=h<1?30:h;if(set_w)tableElm.style.width=w+"px";tableElm.style.height=h+"px";iw=iframe.clientWidth+dx;ih=iframe.clientHeight+dy;iw=iw<1?30:iw;ih=ih<1?30:ih;if(tinyMCE.isGecko){iw-=2;ih-=2}if(set_w)iframe.style.width=iw+"px";iframe.style.height=ih+"px";if(set_w){var tableBodyElm=tableElm.firstChild;var minIframeWidth=tableBodyElm.scrollWidth;if(inst.iframeElement.clientWidth<minIframeWidth){dx=minIframeWidth-inst.iframeElement.clientWidth;inst.iframeElement.style.width=(iw+dx)+"px"}}inst.useCSS=false},_resizeEventHandler:function(e){var resizer=TinyMCE_AdvancedTheme._resizer;if(!resizer.resizing)return;e=typeof(e)=="undefined"?window.event:e;var dx=e.screenX-resizer.downX;var dy=e.screenY-resizer.downY;var resizeBox=resizer.resizeBox;var editorId=resizer.editorId;switch(e.type){case"mousemove":var w,h;w=resizer.width+dx;h=resizer.height+dy;w=w<1?1:w;h=h<1?1:h;if(resizer.horizontal)resizeBox.style.width=w+"px";resizeBox.style.height=h+"px";break;case"mouseup":TinyMCE_AdvancedTheme._setResizing(e,editorId,false);TinyMCE_AdvancedTheme._resizeTo(tinyMCE.getInstanceById(editorId),resizer.width+dx,resizer.height+dy,resizer.horizontal);if(tinyMCE.getParam("theme_advanced_resizing_use_cookie",true)){var expires=new Date();expires.setTime(expires.getTime()+3600000*24*30);TinyMCE_AdvancedTheme._setCookie("TinyMCE_"+editorId+"_width",""+(resizer.horizontal?resizer.width+dx:""),expires);TinyMCE_AdvancedTheme._setCookie("TinyMCE_"+editorId+"_height",""+(resizer.height+dy),expires)}break}},_setResizing:function(e,editor_id,state){e=typeof(e)=="undefined"?window.event:e;var resizer=TinyMCE_AdvancedTheme._resizer;var editorContainer=document.getElementById(editor_id+'_parent');var editorArea=document.getElementById(editor_id+'_parent').firstChild;var resizeBox=document.getElementById(editor_id+'_resize_box');var inst=tinyMCE.getInstanceById(editor_id);if(state){var width=editorArea.clientWidth;var height=editorArea.clientHeight;resizeBox.style.width=width+"px";resizeBox.style.height=height+"px";resizer.iframeWidth=inst.iframeElement.clientWidth;resizer.iframeHeight=inst.iframeElement.clientHeight;editorArea.style.display="none";resizeBox.style.display="block";if(!resizer.eventHandlers){if(tinyMCE.isMSIE)tinyMCE.addEvent(document,"mousemove",TinyMCE_AdvancedTheme._resizeEventHandler);else tinyMCE.addEvent(window,"mousemove",TinyMCE_AdvancedTheme._resizeEventHandler);tinyMCE.addEvent(document,"mouseup",TinyMCE_AdvancedTheme._resizeEventHandler);resizer.eventHandlers=true}resizer.resizing=true;resizer.downX=e.screenX;resizer.downY=e.screenY;resizer.width=parseInt(resizeBox.style.width);resizer.height=parseInt(resizeBox.style.height);resizer.editorId=editor_id;resizer.resizeBox=resizeBox;resizer.horizontal=tinyMCE.getParam("theme_advanced_resize_horizontal",true)}else{resizer.resizing=false;resizeBox.style.display="none";editorArea.style.display=tinyMCE.isMSIE&&!tinyMCE.isOpera?"block":"table";tinyMCE.execCommand('mceResetDesignMode')}},_getColorHTML:function(id,n,cm){var i,h,cl;h='<span class="mceMenuLine"></span>';cl=tinyMCE.getParam(n,TinyMCE_AdvancedTheme._defColors).split(',');h+='<table class="mceColors"><tr>';for(i=0;i<cl.length;i++){c='tinyMCE.execInstanceCommand(\''+id+'\', \''+cm+'\', false, \'#'+cl[i]+'\');';h+='<td><a href="javascript:'+c+'" style="background-color: #'+cl[i]+'" onclick="'+c+';return false;"></a></td>';if((i+1)%8==0)h+='</tr><tr>'}h+='</tr></table>';if(tinyMCE.getParam("theme_advanced_more_colors",true))h+='<a href="javascript:void(0);" onclick="TinyMCE_AdvancedTheme._pickColor(\''+id+'\',\''+cm+'\');" class="mceMoreColors">'+tinyMCE.getLang('lang_more_colors')+'</a>';return h},_pickColor:function(id,cm){var inputColor,inst=tinyMCE.selectedInstance;if(cm=='forecolor'&&inst)inputColor=inst.foreColor;if((cm=='backcolor'||cm=='HiliteColor')&&inst)inputColor=inst.backColor;tinyMCE.execCommand('mceColorPicker',true,{color:inputColor,callback:function(c){tinyMCE.execInstanceCommand(id,cm,false,c)}})},_insertImage:function(src,alt,border,hspace,vspace,width,height,align,title,onmouseover,onmouseout){tinyMCE.execCommand("mceInsertContent",false,tinyMCE.createTagHTML('img',{src:tinyMCE.convertRelativeToAbsoluteURL(tinyMCE.settings['base_href'],src),mce_src:src,alt:alt,border:border,hspace:hspace,vspace:vspace,width:width,height:height,align:align,title:title,onmouseover:onmouseover,onmouseout:onmouseout}))},_insertLink:function(href,target,title,onclick,style_class){tinyMCE.execCommand('mceBeginUndoLevel');if(tinyMCE.selectedInstance&&tinyMCE.selectedElement&&tinyMCE.selectedElement.nodeName.toLowerCase()=="img"){var doc=tinyMCE.selectedInstance.getDoc();var linkElement=tinyMCE.getParentElement(tinyMCE.selectedElement,"a");var newLink=false;if(!linkElement){linkElement=doc.createElement("a");newLink=true}var mhref=href;var thref=eval(tinyMCE.settings['urlconverter_callback']+"(href, linkElement);");mhref=tinyMCE.getParam('convert_urls')?href:mhref;tinyMCE.setAttrib(linkElement,'href',thref);tinyMCE.setAttrib(linkElement,'mce_href',mhref);tinyMCE.setAttrib(linkElement,'target',target);tinyMCE.setAttrib(linkElement,'title',title);tinyMCE.setAttrib(linkElement,'onclick',onclick);tinyMCE.setAttrib(linkElement,'class',style_class);if(newLink){linkElement.appendChild(tinyMCE.selectedElement.cloneNode(true));tinyMCE.selectedElement.parentNode.replaceChild(linkElement,tinyMCE.selectedElement)}return}if(!tinyMCE.linkElement&&tinyMCE.selectedInstance){if(tinyMCE.isSafari){tinyMCE.execCommand("mceInsertContent",false,'<a href="'+tinyMCE.uniqueURL+'">'+tinyMCE.selectedInstance.selection.getSelectedHTML()+'</a>')}else tinyMCE.selectedInstance.contentDocument.execCommand("createlink",false,tinyMCE.uniqueURL);tinyMCE.linkElement=tinyMCE.getElementByAttributeValue(tinyMCE.selectedInstance.contentDocument.body,"a","href",tinyMCE.uniqueURL);var elementArray=tinyMCE.getElementsByAttributeValue(tinyMCE.selectedInstance.contentDocument.body,"a","href",tinyMCE.uniqueURL);for(var i=0;i<elementArray.length;i++){var mhref=href;var thref=eval(tinyMCE.settings['urlconverter_callback']+"(href, elementArray[i]);");mhref=tinyMCE.getParam('convert_urls')?href:mhref;tinyMCE.setAttrib(elementArray[i],'href',thref);tinyMCE.setAttrib(elementArray[i],'mce_href',mhref);tinyMCE.setAttrib(elementArray[i],'target',target);tinyMCE.setAttrib(elementArray[i],'title',title);tinyMCE.setAttrib(elementArray[i],'onclick',onclick);tinyMCE.setAttrib(elementArray[i],'class',style_class)}tinyMCE.linkElement=elementArray[0]}if(tinyMCE.linkElement){var mhref=href;href=eval(tinyMCE.settings['urlconverter_callback']+"(href, tinyMCE.linkElement);");mhref=tinyMCE.getParam('convert_urls')?href:mhref;tinyMCE.setAttrib(tinyMCE.linkElement,'href',href);tinyMCE.setAttrib(tinyMCE.linkElement,'mce_href',mhref);tinyMCE.setAttrib(tinyMCE.linkElement,'target',target);tinyMCE.setAttrib(tinyMCE.linkElement,'title',title);tinyMCE.setAttrib(tinyMCE.linkElement,'onclick',onclick);tinyMCE.setAttrib(tinyMCE.linkElement,'class',style_class)}tinyMCE.execCommand('mceEndUndoLevel')}};tinyMCE.addTheme("advanced",TinyMCE_AdvancedTheme);tinyMCE.addButtonMap(TinyMCE_AdvancedTheme._buttonMap); |
| | | (function(){var DOM=tinymce.DOM,Event=tinymce.dom.Event,extend=tinymce.extend,each=tinymce.each,Cookie=tinymce.util.Cookie,lastExtID,explode=tinymce.explode;tinymce.ThemeManager.requireLangPack('advanced');tinymce.create('tinymce.themes.AdvancedTheme',{controls:{bold:['bold_desc','Bold'],italic:['italic_desc','Italic'],underline:['underline_desc','Underline'],strikethrough:['striketrough_desc','Strikethrough'],justifyleft:['justifyleft_desc','JustifyLeft'],justifycenter:['justifycenter_desc','JustifyCenter'],justifyright:['justifyright_desc','JustifyRight'],justifyfull:['justifyfull_desc','JustifyFull'],bullist:['bullist_desc','InsertUnorderedList'],numlist:['numlist_desc','InsertOrderedList'],outdent:['outdent_desc','Outdent'],indent:['indent_desc','Indent'],cut:['cut_desc','Cut'],copy:['copy_desc','Copy'],paste:['paste_desc','Paste'],undo:['undo_desc','Undo'],redo:['redo_desc','Redo'],link:['link_desc','mceLink'],unlink:['unlink_desc','unlink'],image:['image_desc','mceImage'],cleanup:['cleanup_desc','mceCleanup'],help:['help_desc','mceHelp'],code:['code_desc','mceCodeEditor'],hr:['hr_desc','InsertHorizontalRule'],removeformat:['removeformat_desc','RemoveFormat'],sub:['sub_desc','subscript'],sup:['sup_desc','superscript'],forecolor:['forecolor_desc','ForeColor'],forecolorpicker:['forecolor_desc','mceForeColor'],backcolor:['backcolor_desc','HiliteColor'],backcolorpicker:['backcolor_desc','mceBackColor'],charmap:['charmap_desc','mceCharMap'],visualaid:['visualaid_desc','mceToggleVisualAid'],anchor:['anchor_desc','mceInsertAnchor'],newdocument:['newdocument_desc','mceNewDocument'],blockquote:['blockquote_desc','mceBlockQuote']},stateControls:['bold','italic','underline','strikethrough','bullist','numlist','justifyleft','justifycenter','justifyright','justifyfull','sub','sup','blockquote'],init:function(ed,url){var t=this,s,v;t.editor=ed;t.url=url;t.onResolveName=new tinymce.util.Dispatcher(this);t.settings=s=extend({theme_advanced_path:true,theme_advanced_toolbar_location:'bottom',theme_advanced_buttons1:"bold,italic,underline,strikethrough,|,justifyleft,justifycenter,justifyright,justifyfull,|,styleselect,formatselect",theme_advanced_buttons2:"bullist,numlist,|,outdent,indent,|,undo,redo,|,link,unlink,anchor,image,cleanup,help,code",theme_advanced_buttons3:"hr,removeformat,visualaid,|,sub,sup,|,charmap",theme_advanced_blockformats:"p,address,pre,h1,h2,h3,h4,h5,h6",theme_advanced_toolbar_align:"center",theme_advanced_fonts:"Andale Mono=andale mono,times;Arial=arial,helvetica,sans-serif;Arial Black=arial black,avant garde;Book Antiqua=book antiqua,palatino;Comic Sans MS=comic sans ms,sans-serif;Courier New=courier new,courier;Georgia=georgia,palatino;Helvetica=helvetica;Impact=impact,chicago;Symbol=symbol;Tahoma=tahoma,arial,helvetica,sans-serif;Terminal=terminal,monaco;Times New Roman=times new roman,times;Trebuchet MS=trebuchet ms,geneva;Verdana=verdana,geneva;Webdings=webdings;Wingdings=wingdings,zapf dingbats",theme_advanced_font_sizes:"1,2,3,4,5,6,7",theme_advanced_more_colors:1,theme_advanced_row_height:23,theme_advanced_resize_horizontal:1,theme_advanced_resizing_use_cookie:1},ed.settings);if((v=s.theme_advanced_path_location)&&v!='none')s.theme_advanced_statusbar_location=s.theme_advanced_path_location;if(s.theme_advanced_statusbar_location=='none')s.theme_advanced_statusbar_location=0;ed.onInit.add(function(){ed.onNodeChange.add(t._nodeChanged,t);if(ed.settings.content_css!==false)ed.dom.loadCSS(ed.baseURI.toAbsolute("themes/advanced/skins/"+ed.settings.skin+"/content.css"));});ed.onSetProgressState.add(function(ed,b,ti){var co,id=ed.id,tb;if(b){t.progressTimer=setTimeout(function(){co=ed.getContainer();co=co.insertBefore(DOM.create('DIV',{style:'position:relative'}),co.firstChild);tb=DOM.get(ed.id+'_tbl');DOM.add(co,'div',{id:id+'_blocker','class':'mceBlocker',style:{width:tb.clientWidth+2,height:tb.clientHeight+2}});DOM.add(co,'div',{id:id+'_progress','class':'mceProgress',style:{left:tb.clientWidth/ 2, top : tb.clientHeight /2}});},ti||0);}else{DOM.remove(id+'_blocker');DOM.remove(id+'_progress');clearTimeout(t.progressTimer);}});DOM.loadCSS(ed.baseURI.toAbsolute(s.editor_css||"themes/advanced/skins/"+ed.settings.skin+"/ui.css"));if(s.skin_variant)DOM.loadCSS(ed.baseURI.toAbsolute(s.editor_css||"themes/advanced/skins/"+ed.settings.skin+"/ui_"+s.skin_variant+".css"));},createControl:function(n,cf){var cd,c;if(c=cf.createControl(n))return c;switch(n){case"styleselect":return this._createStyleSelect();case"formatselect":return this._createBlockFormats();case"fontselect":return this._createFontSelect();case"fontsizeselect":return this._createFontSizeSelect();case"forecolor":return this._createForeColorMenu();case"backcolor":return this._createBackColorMenu();}if((cd=this.controls[n]))return cf.createButton(n,{title:"advanced."+cd[0],cmd:cd[1],ui:cd[2],value:cd[3]});},execCommand:function(cmd,ui,val){var f=this['_'+cmd];if(f){f.call(this,ui,val);return true;}return false;},_importClasses:function(){var ed=this.editor,c=ed.controlManager.get('styleselect');if(c.getLength()==0){each(ed.dom.getClasses(),function(o){c.add(o['class'],o['class']);});}},_createStyleSelect:function(n){var t=this,ed=t.editor,cf=ed.controlManager,c=cf.createListBox('styleselect',{title:'advanced.style_select',onselect:function(v){if(c.selectedValue===v){ed.execCommand('mceSetStyleInfo',0,{command:'removeformat'});c.select();return false;}else ed.execCommand('mceSetCSSClass',0,v);}});if(c){each(ed.getParam('theme_advanced_styles','','hash'),function(v,k){if(v)c.add(t.editor.translate(k),v);});c.onPostRender.add(function(ed,n){Event.add(n,'focus',t._importClasses,t);Event.add(n,'mousedown',t._importClasses,t);});}return c;},_createFontSelect:function(){var c,t=this,ed=t.editor;c=ed.controlManager.createListBox('fontselect',{title:'advanced.fontdefault',cmd:'FontName'});if(c){each(ed.getParam('theme_advanced_fonts',t.settings.theme_advanced_fonts,'hash'),function(v,k){c.add(ed.translate(k),v,{style:v.indexOf('dings')==-1?'font-family:'+v:''});});}return c;},_createFontSizeSelect:function(){var c,t=this,lo=["1 (8 pt)","2 (10 pt)","3 (12 pt)","4 (14 pt)","5 (18 pt)","6 (24 pt)","7 (36 pt)"],fz=[8,10,12,14,18,24,36];c=t.editor.controlManager.createListBox('fontsizeselect',{title:'advanced.font_size',cmd:'FontSize'});if(c){each(explode(t.settings.theme_advanced_font_sizes),function(v){c.add(lo[parseInt(v)-1],v,{'style':'font-size:'+fz[v-1]+'pt','class':'mceFontSize'+v});});}return c;},_createBlockFormats:function(){var c,fmts={p:'advanced.paragraph',address:'advanced.address',pre:'advanced.pre',h1:'advanced.h1',h2:'advanced.h2',h3:'advanced.h3',h4:'advanced.h4',h5:'advanced.h5',h6:'advanced.h6',div:'advanced.div',blockquote:'advanced.blockquote',code:'advanced.code',dt:'advanced.dt',dd:'advanced.dd',samp:'advanced.samp'},t=this;c=t.editor.controlManager.createListBox('formatselect',{title:'advanced.block',cmd:'FormatBlock'});if(c){each(t.editor.getParam('theme_advanced_blockformats',t.settings.theme_advanced_blockformats,'hash'),function(v,k){c.add(t.editor.translate(k!=v?k:fmts[v]),v,{'class':'mce_formatPreview mce_'+v});});}return c;},_createForeColorMenu:function(){var c,t=this,s=t.settings,o={},v;if(s.theme_advanced_more_colors){o.more_colors_func=function(){t._mceColorPicker(0,{color:c.value,func:function(co){c.setColor(co);}});};}if(v=s.theme_advanced_text_colors)o.colors=v;o.title='advanced.forecolor_desc';o.cmd='ForeColor';o.scope=this;c=t.editor.controlManager.createColorSplitButton('forecolor',o);return c;},_createBackColorMenu:function(){var c,t=this,s=t.settings,o={},v;if(s.theme_advanced_more_colors){o.more_colors_func=function(){t._mceColorPicker(0,{color:c.value,func:function(co){c.setColor(co);}});};}if(v=s.theme_advanced_background_colors)o.colors=v;o.title='advanced.backcolor_desc';o.cmd='HiliteColor';o.scope=this;c=t.editor.controlManager.createColorSplitButton('backcolor',o);return c;},renderUI:function(o){var n,ic,tb,t=this,ed=t.editor,s=t.settings,sc,p,nl;n=p=DOM.create('span',{id:ed.id+'_parent','class':'mceEditor '+ed.settings.skin+'Skin'+(s.skin_variant?' '+ed.settings.skin+'Skin'+t._ufirst(s.skin_variant):'')});if(!DOM.boxModel)n=DOM.add(n,'div',{'class':'mceOldBoxModel'});n=sc=DOM.add(n,'table',{id:ed.id+'_tbl','class':'mceLayout',cellSpacing:0,cellPadding:0});n=tb=DOM.add(n,'tbody');switch((s.theme_advanced_layout_manager||'').toLowerCase()){case"rowlayout":ic=t._rowLayout(s,tb,o);break;case"customlayout":ic=ed.execCallback("theme_advanced_custom_layout",s,tb,o,p);break;default:ic=t._simpleLayout(s,tb,o,p);}n=o.targetNode;nl=DOM.stdMode?sc.getElementsByTagName('tr'):sc.rows;DOM.addClass(nl[0],'mceFirst');DOM.addClass(nl[nl.length-1],'mceLast');each(DOM.select('tr',tb),function(n){DOM.addClass(n.firstChild,'mceFirst');DOM.addClass(n.childNodes[n.childNodes.length-1],'mceLast');});if(DOM.get(s.theme_advanced_toolbar_container))DOM.get(s.theme_advanced_toolbar_container).appendChild(p);else DOM.insertAfter(p,n);Event.add(ed.id+'_path_row','click',function(e){e=e.target;if(e.nodeName=='A'){t._sel(e.className.replace(/^.*mcePath_([0-9]+).*$/,'$1'));return Event.cancel(e);}});if(!ed.getParam('accessibility_focus')||ed.getParam('tab_focus'))Event.add(DOM.add(p,'a',{href:'#'},'<!-- IE -->'),'focus',function(){tinyMCE.get(ed.id).focus();});if(s.theme_advanced_toolbar_location=='external')o.deltaHeight=0;t.deltaHeight=o.deltaHeight;o.targetNode=null;return{iframeContainer:ic,editorContainer:ed.id+'_parent',sizeContainer:sc,deltaHeight:o.deltaHeight};},getInfo:function(){return{longname:'Advanced theme',author:'Moxiecode Systems AB',authorurl:'http://tinymce.moxiecode.com',version:tinymce.majorVersion+"."+tinymce.minorVersion}},resizeBy:function(dw,dh){var e=DOM.get(this.editor.id+'_tbl');this.resizeTo(e.clientWidth+dw,e.clientHeight+dh);},resizeTo:function(w,h){var ed=this.editor,s=ed.settings,e=DOM.get(ed.id+'_tbl'),ifr=DOM.get(ed.id+'_ifr'),dh;w=Math.max(s.theme_advanced_resizing_min_width||100,w);h=Math.max(s.theme_advanced_resizing_min_height||100,h);w=Math.min(s.theme_advanced_resizing_max_width||0xFFFF,w);h=Math.min(s.theme_advanced_resizing_max_height||0xFFFF,h);dh=e.clientHeight-ifr.clientHeight;DOM.setStyle(ifr,'height',h-dh);DOM.setStyles(e,{width:w,height:h});},destroy:function(){var id=this.editor.id;Event.clear(id+'_resize');Event.clear(id+'_path_row');Event.clear(id+'_external_close');},_simpleLayout:function(s,tb,o,p){var t=this,ed=t.editor,lo=s.theme_advanced_toolbar_location,sl=s.theme_advanced_statusbar_location,n,ic,etb,c;if(lo=='top')t._addToolbars(tb,o);if(lo=='external'){n=c=DOM.create('div',{style:'position:relative'});n=DOM.add(n,'div',{id:ed.id+'_external','class':'mceExternalToolbar'});DOM.add(n,'a',{id:ed.id+'_external_close',href:'javascript:;','class':'mceExternalClose'});n=DOM.add(n,'table',{id:ed.id+'_tblext',cellSpacing:0,cellPadding:0});etb=DOM.add(n,'tbody');if(p.firstChild.className=='mceOldBoxModel')p.firstChild.appendChild(c);else p.insertBefore(c,p.firstChild);t._addToolbars(etb,o);ed.onMouseUp.add(function(){var e=DOM.get(ed.id+'_external');DOM.show(e);DOM.hide(lastExtID);var f=Event.add(ed.id+'_external_close','click',function(){DOM.hide(ed.id+'_external');Event.remove(ed.id+'_external_close','click',f);});DOM.show(e);DOM.setStyle(e,'top',0-DOM.getRect(ed.id+'_tblext').h-1);DOM.hide(e);DOM.show(e);e.style.filter='';lastExtID=ed.id+'_external';e=null;});}if(sl=='top')t._addStatusBar(tb,o);if(!s.theme_advanced_toolbar_container){n=DOM.add(tb,'tr');n=ic=DOM.add(n,'td',{'class':'mceIframeContainer'});}if(lo=='bottom')t._addToolbars(tb,o);if(sl=='bottom')t._addStatusBar(tb,o);return ic;},_rowLayout:function(s,tb,o){var t=this,ed=t.editor,dc,da,cf=ed.controlManager,n,ic,to,a;dc=s.theme_advanced_containers_default_class||'';da=s.theme_advanced_containers_default_align||'center';each(explode(s.theme_advanced_containers||''),function(c,i){var v=s['theme_advanced_container_'+c]||'';switch(c.toLowerCase()){case'mceeditor':n=DOM.add(tb,'tr');n=ic=DOM.add(n,'td',{'class':'mceIframeContainer'});break;case'mceelementpath':t._addStatusBar(tb,o);break;default:a=s['theme_advanced_container_'+c+'_align'].toLowerCase();a='mce'+t._ufirst(a);n=DOM.add(DOM.add(tb,'tr'),'td',{'class':'mceToolbar '+(s['theme_advanced_container_'+c+'_class']||dc)+' '+a||da});to=cf.createToolbar("toolbar"+i);t._addControls(v,to);DOM.setHTML(n,to.renderHTML());o.deltaHeight-=s.theme_advanced_row_height;}});return ic;},_addControls:function(v,tb){var t=this,s=t.settings,di,cf=t.editor.controlManager;if(s.theme_advanced_disable&&!t._disabled){di={};each(explode(s.theme_advanced_disable),function(v){di[v]=1;});t._disabled=di;}else di=t._disabled;each(explode(v),function(n){var c;if(di&&di[n])return;if(n=='tablecontrols'){each(["table","|","row_props","cell_props","|","row_before","row_after","delete_row","|","col_before","col_after","delete_col","|","split_cells","merge_cells"],function(n){n=t.createControl(n,cf);if(n)tb.add(n);});return;}c=t.createControl(n,cf);if(c)tb.add(c);});},_addToolbars:function(c,o){var t=this,i,tb,ed=t.editor,s=t.settings,v,cf=ed.controlManager,di,n,h=[],a;a=s.theme_advanced_toolbar_align.toLowerCase();a='mce'+t._ufirst(a);n=DOM.add(DOM.add(c,'tr'),'td',{'class':'mceToolbar '+a});if(!ed.getParam('accessibility_focus')||ed.getParam('tab_focus'))h.push(DOM.createHTML('a',{href:'#',onfocus:'tinyMCE.get(\''+ed.id+'\').focus();'},'<!-- IE -->'));h.push(DOM.createHTML('a',{href:'#',accesskey:'q',title:ed.getLang("advanced.toolbar_focus")},'<!-- IE -->'));for(i=1;(v=s['theme_advanced_buttons'+i]);i++){tb=cf.createToolbar("toolbar"+i,{'class':'mceToolbarRow'+i});if(s['theme_advanced_buttons'+i+'_add'])v+=','+s['theme_advanced_buttons'+i+'_add'];if(s['theme_advanced_buttons'+i+'_add_before'])v=s['theme_advanced_buttons'+i+'_add_before']+','+v;t._addControls(v,tb);h.push(tb.renderHTML());o.deltaHeight-=s.theme_advanced_row_height;}h.push(DOM.createHTML('a',{href:'#',accesskey:'z',title:ed.getLang("advanced.toolbar_focus"),onfocus:'tinyMCE.getInstanceById(\''+ed.id+'\').focus();'},'<!-- IE -->'));DOM.setHTML(n,h.join(''));},_addStatusBar:function(tb,o){var n,t=this,ed=t.editor,s=t.settings,r,mf,me,td;n=DOM.add(tb,'tr');n=td=DOM.add(n,'td',{'class':'mceStatusbar'});n=DOM.add(n,'div',{id:ed.id+'_path_row'},s.theme_advanced_path?ed.translate('advanced.path')+': ':' ');DOM.add(n,'a',{href:'#',accesskey:'x'});if(s.theme_advanced_resizing&&!tinymce.isOldWebKit){DOM.add(td,'a',{id:ed.id+'_resize',href:'javascript:;',onclick:"return false;",'class':'mceResize'});if(s.theme_advanced_resizing_use_cookie){ed.onPostRender.add(function(){var o=Cookie.getHash("TinyMCE_"+ed.id+"_size"),c=DOM.get(ed.id+'_tbl');if(!o)return;if(s.theme_advanced_resize_horizontal)c.style.width=Math.max(10,o.cw)+'px';c.style.height=Math.max(10,o.ch)+'px';DOM.get(ed.id+'_ifr').style.height=Math.max(10,parseInt(o.ch)+t.deltaHeight)+'px';});}ed.onPostRender.add(function(){Event.add(ed.id+'_resize','mousedown',function(e){var c,p,w,h,n,pa;c=DOM.get(ed.id+'_tbl');w=c.clientWidth;h=c.clientHeight;miw=s.theme_advanced_resizing_min_width||100;mih=s.theme_advanced_resizing_min_height||100;maw=s.theme_advanced_resizing_max_width||0xFFFF;mah=s.theme_advanced_resizing_max_height||0xFFFF;p=DOM.add(DOM.get(ed.id+'_parent'),'div',{'class':'mcePlaceHolder'});DOM.setStyles(p,{width:w,height:h});DOM.hide(c);DOM.show(p);r={x:e.screenX,y:e.screenY,w:w,h:h,dx:null,dy:null};mf=Event.add(DOM.doc,'mousemove',function(e){var w,h;r.dx=e.screenX-r.x;r.dy=e.screenY-r.y;w=Math.max(miw,r.w+r.dx);h=Math.max(mih,r.h+r.dy);w=Math.min(maw,w);h=Math.min(mah,h);if(s.theme_advanced_resize_horizontal)p.style.width=w+'px';p.style.height=h+'px';return Event.cancel(e);});me=Event.add(DOM.doc,'mouseup',function(e){var ifr;Event.remove(DOM.doc,'mousemove',mf);Event.remove(DOM.doc,'mouseup',me);c.style.display='';DOM.remove(p);if(r.dx===null)return;ifr=DOM.get(ed.id+'_ifr');if(s.theme_advanced_resize_horizontal)c.style.width=Math.max(10,r.w+r.dx)+'px';c.style.height=Math.max(10,r.h+r.dy)+'px';ifr.style.height=Math.max(10,ifr.clientHeight+r.dy)+'px';if(s.theme_advanced_resizing_use_cookie){Cookie.setHash("TinyMCE_"+ed.id+"_size",{cw:r.w+r.dx,ch:r.h+r.dy});}});return Event.cancel(e);});});}o.deltaHeight-=21;n=tb=null;},_nodeChanged:function(ed,cm,n,co){var t=this,p,de=0,v,c,s=t.settings;tinymce.each(t.stateControls,function(c){cm.setActive(c,ed.queryCommandState(t.controls[c][1]));});cm.setActive('visualaid',ed.hasVisual);cm.setDisabled('undo',!ed.undoManager.hasUndo()&&!ed.typing);cm.setDisabled('redo',!ed.undoManager.hasRedo());cm.setDisabled('outdent',!ed.queryCommandState('Outdent'));p=DOM.getParent(n,'A');if(c=cm.get('link')){if(!p||!p.name){c.setDisabled(!p&&co);c.setActive(!!p);}}if(c=cm.get('unlink')){c.setDisabled(!p&&co);c.setActive(!!p&&!p.name);}if(c=cm.get('anchor')){c.setActive(!!p&&p.name);if(tinymce.isWebKit){p=DOM.getParent(n,'IMG');c.setActive(!!p&&DOM.getAttrib(p,'mce_name')=='a');}}p=DOM.getParent(n,'IMG');if(c=cm.get('image'))c.setActive(!!p&&n.className.indexOf('mceItem')==-1);if(c=cm.get('styleselect')){if(n.className){t._importClasses();c.select(n.className);}else c.select();}if(c=cm.get('formatselect')){p=DOM.getParent(n,DOM.isBlock);if(p)c.select(p.nodeName.toLowerCase());}if(c=cm.get('fontselect'))c.select(ed.queryCommandValue('FontName'));if(c=cm.get('fontsizeselect'))c.select(ed.queryCommandValue('FontSize'));if(s.theme_advanced_path&&s.theme_advanced_statusbar_location){p=DOM.get(ed.id+'_path')||DOM.add(ed.id+'_path_row','span',{id:ed.id+'_path'});DOM.setHTML(p,'');ed.dom.getParent(n,function(n){var na=n.nodeName.toLowerCase(),u,pi,ti='';if(n.nodeType!=1||(DOM.hasClass(n,'mceItemHidden')||DOM.hasClass(n,'mceItemRemoved')))return;if(v=DOM.getAttrib(n,'mce_name'))na=v;if(tinymce.isIE&&n.scopeName!=='HTML')na=n.scopeName+':'+na;na=na.replace(/mce\:/g,'');switch(na){case'b':na='strong';break;case'i':na='em';break;case'img':if(v=DOM.getAttrib(n,'src'))ti+='src: '+v+' ';break;case'a':if(v=DOM.getAttrib(n,'name')){ti+='name: '+v+' ';na+='#'+v;}if(v=DOM.getAttrib(n,'href'))ti+='href: '+v+' ';break;case'font':if(s.convert_fonts_to_spans)na='span';if(v=DOM.getAttrib(n,'face'))ti+='font: '+v+' ';if(v=DOM.getAttrib(n,'size'))ti+='size: '+v+' ';if(v=DOM.getAttrib(n,'color'))ti+='color: '+v+' ';break;case'span':if(v=DOM.getAttrib(n,'style'))ti+='style: '+v+' ';break;}if(v=DOM.getAttrib(n,'id'))ti+='id: '+v+' ';if(v=n.className){v=v.replace(/(webkit-[\w\-]+|Apple-[\w\-]+|mceItem\w+|mceVisualAid)/g,'');if(v&&v.indexOf('mceItem')==-1){ti+='class: '+v+' ';if(DOM.isBlock(n)||na=='img'||na=='span')na+='.'+v;}}na=na.replace(/(html:)/g,'');na={name:na,node:n,title:ti};t.onResolveName.dispatch(t,na);ti=na.title;na=na.name;pi=DOM.create('a',{'href':"javascript:;",onmousedown:"return false;",title:ti,'class':'mcePath_'+(de++)},na);if(p.hasChildNodes()){p.insertBefore(DOM.doc.createTextNode(' \u00bb '),p.firstChild);p.insertBefore(pi,p.firstChild);}else p.appendChild(pi);},ed.getBody());}},_sel:function(v){this.editor.execCommand('mceSelectNodeDepth',false,v);},_mceInsertAnchor:function(ui,v){var ed=this.editor;ed.windowManager.open({url:tinymce.baseURL+'/themes/advanced/anchor.htm',width:320+parseInt(ed.getLang('advanced.anchor_delta_width',0)),height:90+parseInt(ed.getLang('advanced.anchor_delta_height',0)),inline:true},{theme_url:this.url});},_mceCharMap:function(){var ed=this.editor;ed.windowManager.open({url:tinymce.baseURL+'/themes/advanced/charmap.htm',width:550+parseInt(ed.getLang('advanced.charmap_delta_width',0)),height:250+parseInt(ed.getLang('advanced.charmap_delta_height',0)),inline:true},{theme_url:this.url});},_mceHelp:function(){var ed=this.editor;ed.windowManager.open({url:tinymce.baseURL+'/themes/advanced/about.htm',width:480,height:380,inline:true},{theme_url:this.url});},_mceColorPicker:function(u,v){var ed=this.editor;v=v||{};ed.windowManager.open({url:tinymce.baseURL+'/themes/advanced/color_picker.htm',width:375+parseInt(ed.getLang('advanced.colorpicker_delta_width',0)),height:250+parseInt(ed.getLang('advanced.colorpicker_delta_height',0)),close_previous:false,inline:true},{input_color:v.color,func:v.func,theme_url:this.url});},_mceCodeEditor:function(ui,val){var ed=this.editor;ed.windowManager.open({url:tinymce.baseURL+'/themes/advanced/source_editor.htm',width:parseInt(ed.getParam("theme_advanced_source_editor_width",720)),height:parseInt(ed.getParam("theme_advanced_source_editor_height",580)),inline:true,resizable:true,maximizable:true},{theme_url:this.url});},_mceImage:function(ui,val){var ed=this.editor;if(ed.dom.getAttrib(ed.selection.getNode(),'class').indexOf('mceItem')!=-1)return;ed.windowManager.open({url:tinymce.baseURL+'/themes/advanced/image.htm',width:355+parseInt(ed.getLang('advanced.image_delta_width',0)),height:275+parseInt(ed.getLang('advanced.image_delta_height',0)),inline:true},{theme_url:this.url});},_mceLink:function(ui,val){var ed=this.editor;ed.windowManager.open({url:tinymce.baseURL+'/themes/advanced/link.htm',width:310+parseInt(ed.getLang('advanced.link_delta_width',0)),height:200+parseInt(ed.getLang('advanced.link_delta_height',0)),inline:true},{theme_url:this.url});},_mceNewDocument:function(){var ed=this.editor;ed.windowManager.confirm('advanced.newdocument',function(s){if(s)ed.execCommand('mceSetContent',false,'');});},_mceForeColor:function(){var t=this;this._mceColorPicker(0,{func:function(co){t.editor.execCommand('ForeColor',false,co);}});},_mceBackColor:function(){var t=this;this._mceColorPicker(0,{func:function(co){t.editor.execCommand('HiliteColor',false,co);}});},_ufirst:function(s){return s.substring(0,1).toUpperCase()+s.substring(1);}});tinymce.ThemeManager.add('advanced',tinymce.themes.AdvancedTheme);}()); |
| | |
| | | /** |
| | | * $Id: editor_template_src.js 296 2007-08-21 10:36:35Z spocke $ |
| | | * |
| | | * @author Moxiecode |
| | | * @copyright Copyright © 2004-2007, Moxiecode Systems AB, All rights reserved. |
| | | */ |
| | | |
| | | /* Import theme specific language pack */ |
| | | tinyMCE.importThemeLanguagePack('advanced'); |
| | | |
| | | var TinyMCE_AdvancedTheme = { |
| | | // Private theme fields |
| | | _defColors : "000000,993300,333300,003300,003366,000080,333399,333333,800000,FF6600,808000,008000,008080,0000FF,666699,808080,FF0000,FF9900,99CC00,339966,33CCCC,3366FF,800080,999999,FF00FF,FFCC00,FFFF00,00FF00,00FFFF,00CCFF,993366,C0C0C0,FF99CC,FFCC99,FFFF99,CCFFCC,CCFFFF,99CCFF,CC99FF,FFFFFF", |
| | | _autoImportCSSClasses : true, |
| | | _resizer : {}, |
| | | _buttons : [ |
| | | // Control id, button img, button title, command, user_interface, value |
| | | ['bold', '{$lang_bold_img}', 'lang_bold_desc', 'Bold'], |
| | | ['italic', '{$lang_italic_img}', 'lang_italic_desc', 'Italic'], |
| | | ['underline', '{$lang_underline_img}', 'lang_underline_desc', 'Underline'], |
| | | ['strikethrough', 'strikethrough.gif', 'lang_striketrough_desc', 'Strikethrough'], |
| | | ['justifyleft', 'justifyleft.gif', 'lang_justifyleft_desc', 'JustifyLeft'], |
| | | ['justifycenter', 'justifycenter.gif', 'lang_justifycenter_desc', 'JustifyCenter'], |
| | | ['justifyright', 'justifyright.gif', 'lang_justifyright_desc', 'JustifyRight'], |
| | | ['justifyfull', 'justifyfull.gif', 'lang_justifyfull_desc', 'JustifyFull'], |
| | | ['bullist', 'bullist.gif', 'lang_bullist_desc', 'InsertUnorderedList'], |
| | | ['numlist', 'numlist.gif', 'lang_numlist_desc', 'InsertOrderedList'], |
| | | ['outdent', 'outdent.gif', 'lang_outdent_desc', 'Outdent'], |
| | | ['indent', 'indent.gif', 'lang_indent_desc', 'Indent'], |
| | | ['cut', 'cut.gif', 'lang_cut_desc', 'Cut'], |
| | | ['copy', 'copy.gif', 'lang_copy_desc', 'Copy'], |
| | | ['paste', 'paste.gif', 'lang_paste_desc', 'Paste'], |
| | | ['undo', 'undo.gif', 'lang_undo_desc', 'Undo'], |
| | | ['redo', 'redo.gif', 'lang_redo_desc', 'Redo'], |
| | | ['link', 'link.gif', 'lang_link_desc', 'mceLink', true], |
| | | ['unlink', 'unlink.gif', 'lang_unlink_desc', 'unlink'], |
| | | ['image', 'image.gif', 'lang_image_desc', 'mceImage', true], |
| | | ['cleanup', 'cleanup.gif', 'lang_cleanup_desc', 'mceCleanup'], |
| | | ['help', 'help.gif', 'lang_help_desc', 'mceHelp'], |
| | | ['code', 'code.gif', 'lang_theme_code_desc', 'mceCodeEditor'], |
| | | ['hr', 'hr.gif', 'lang_theme_hr_desc', 'inserthorizontalrule'], |
| | | ['removeformat', 'removeformat.gif', 'lang_theme_removeformat_desc', 'removeformat'], |
| | | ['sub', 'sub.gif', 'lang_theme_sub_desc', 'subscript'], |
| | | ['sup', 'sup.gif', 'lang_theme_sup_desc', 'superscript'], |
| | | ['forecolor', 'forecolor.gif', 'lang_theme_forecolor_desc', 'forecolor', true], |
| | | ['forecolorpicker', 'forecolor.gif', 'lang_theme_forecolor_desc', 'forecolorpicker', true], |
| | | ['backcolor', 'backcolor.gif', 'lang_theme_backcolor_desc', 'HiliteColor', true], |
| | | ['backcolorpicker', 'backcolor.gif', 'lang_theme_backcolor_desc', 'backcolorpicker', true], |
| | | ['charmap', 'charmap.gif', 'lang_theme_charmap_desc', 'mceCharMap'], |
| | | ['visualaid', 'visualaid.gif', 'lang_theme_visualaid_desc', 'mceToggleVisualAid'], |
| | | ['anchor', 'anchor.gif', 'lang_theme_anchor_desc', 'mceInsertAnchor'], |
| | | ['newdocument', 'newdocument.gif', 'lang_newdocument_desc', 'mceNewDocument'] |
| | | ], |
| | | |
| | | _buttonMap : 'anchor,backcolor,bold,bullist,charmap,cleanup,code,copy,cut,forecolor,help,hr,image,indent,italic,justifycenter,justifyfull,justifyleft,justifyright,link,newdocument,numlist,outdent,paste,redo,removeformat,strikethrough,sub,sup,underline,undo,unlink,visualaid,advhr,ltr,rtl,emotions,flash,fullpage,fullscreen,iespell,insertdate,inserttime,pastetext,pasteword,selectall,preview,print,save,replace,search,table,cell_props,delete_col,delete_row,col_after,col_before,row_after,row_before,merge_cells,row_props,split_cells,delete_table', |
| | | |
| | | /** |
| | | * Returns HTML code for the specificed control. |
| | | */ |
| | | getControlHTML : function(button_name) { |
| | | var i, x, but; |
| | | |
| | | // Lookup button in button list |
| | | for (i=0; i<TinyMCE_AdvancedTheme._buttons.length; i++) { |
| | | but = TinyMCE_AdvancedTheme._buttons[i]; |
| | | |
| | | if (but[0] == button_name && (button_name == "forecolor" || button_name == "backcolor")) |
| | | return tinyMCE.getMenuButtonHTML(but[0], but[2], '{$themeurl}/images/' + but[1], but[3] + "Menu", but[3], (but.length > 4 ? but[4] : false), (but.length > 5 ? but[5] : null)); |
| | | |
| | | if (but[0] == button_name) |
| | | return tinyMCE.getButtonHTML(but[0], but[2], '{$themeurl}/images/' + but[1], but[3], (but.length > 4 ? but[4] : false), (but.length > 5 ? but[5] : null)); |
| | | } |
| | | |
| | | // Custom controlls other than buttons |
| | | switch (button_name) { |
| | | case "formatselect": |
| | | var html = '<select id="{$editor_id}_formatSelect" name="{$editor_id}_formatSelect" onfocus="tinyMCE.addSelectAccessibility(event, this, window);" onchange="tinyMCE.execInstanceCommand(\'{$editor_id}\',\'FormatBlock\',false,this.options[this.selectedIndex].value);" class="mceSelectList">'; |
| | | var formats = tinyMCE.getParam("theme_advanced_blockformats", "p,address,pre,h1,h2,h3,h4,h5,h6", true).split(','); |
| | | var lookup = [ |
| | | ['p', '{$lang_theme_paragraph}'], |
| | | ['address', '{$lang_theme_address}'], |
| | | ['pre', '{$lang_theme_pre}'], |
| | | ['h1', '{$lang_theme_h1}'], |
| | | ['h2', '{$lang_theme_h2}'], |
| | | ['h3', '{$lang_theme_h3}'], |
| | | ['h4', '{$lang_theme_h4}'], |
| | | ['h5', '{$lang_theme_h5}'], |
| | | ['h6', '{$lang_theme_h6}'], |
| | | ['div', '{$lang_theme_div}'], |
| | | ['blockquote', '{$lang_theme_blockquote}'], |
| | | ['code', '{$lang_theme_code}'], |
| | | ['dt', '{$lang_theme_dt}'], |
| | | ['dd', '{$lang_theme_dd}'], |
| | | ['samp', '{$lang_theme_samp}'] |
| | | ]; |
| | | |
| | | html += '<option value="">{$lang_theme_block}</option>'; |
| | | |
| | | // Build format select |
| | | for (var i=0; i<formats.length; i++) { |
| | | for (var x=0; x<lookup.length; x++) { |
| | | if (formats[i] == lookup[x][0]) |
| | | html += '<option value="<' + lookup[x][0] + '>">' + lookup[x][1] + '</option>'; |
| | | } |
| | | } |
| | | |
| | | html += '</select>'; |
| | | |
| | | return html; |
| | | |
| | | case "styleselect": |
| | | return '<select id="{$editor_id}_styleSelect" onmousedown="tinyMCE.themes.advanced._setupCSSClasses(\'{$editor_id}\');" name="{$editor_id}_styleSelect" onfocus="tinyMCE.addSelectAccessibility(event,this,window);" onchange="tinyMCE.execInstanceCommand(\'{$editor_id}\',\'mceSetCSSClass\',false,this.options[this.selectedIndex].value);" class="mceSelectList">{$style_select_options}</select>'; |
| | | |
| | | case "fontselect": |
| | | var fontHTML = '<select id="{$editor_id}_fontNameSelect" name="{$editor_id}_fontNameSelect" onfocus="tinyMCE.addSelectAccessibility(event, this, window);" onchange="tinyMCE.execInstanceCommand(\'{$editor_id}\',\'FontName\',false,this.options[this.selectedIndex].value);" class="mceSelectList"><option value="">{$lang_theme_fontdefault}</option>'; |
| | | var iFonts = 'Arial=arial,helvetica,sans-serif;Courier New=courier new,courier,monospace;Georgia=georgia,times new roman,times,serif;Tahoma=tahoma,arial,helvetica,sans-serif;Times New Roman=times new roman,times,serif;Verdana=verdana,arial,helvetica,sans-serif;Impact=impact;WingDings=wingdings'; |
| | | var nFonts = 'Andale Mono=andale mono,times;Arial=arial,helvetica,sans-serif;Arial Black=arial black,avant garde;Book Antiqua=book antiqua,palatino;Comic Sans MS=comic sans ms,sans-serif;Courier New=courier new,courier;Georgia=georgia,palatino;Helvetica=helvetica;Impact=impact,chicago;Symbol=symbol;Tahoma=tahoma,arial,helvetica,sans-serif;Terminal=terminal,monaco;Times New Roman=times new roman,times;Trebuchet MS=trebuchet ms,geneva;Verdana=verdana,geneva;Webdings=webdings;Wingdings=wingdings,zapf dingbats'; |
| | | var fonts = tinyMCE.getParam("theme_advanced_fonts", nFonts).split(';'); |
| | | for (i=0; i<fonts.length; i++) { |
| | | if (fonts[i] != '') { |
| | | var parts = fonts[i].split('='); |
| | | fontHTML += '<option value="' + parts[1] + '">' + parts[0] + '</option>'; |
| | | } |
| | | } |
| | | |
| | | fontHTML += '</select>'; |
| | | return fontHTML; |
| | | |
| | | case "fontsizeselect": |
| | | return '<select id="{$editor_id}_fontSizeSelect" name="{$editor_id}_fontSizeSelect" onfocus="tinyMCE.addSelectAccessibility(event, this, window);" onchange="tinyMCE.execInstanceCommand(\'{$editor_id}\',\'FontSize\',false,this.options[this.selectedIndex].value);" class="mceSelectList">'+ |
| | | '<option value="0">{$lang_theme_font_size}</option>'+ |
| | | '<option value="1">1 (8 pt)</option>'+ |
| | | '<option value="2">2 (10 pt)</option>'+ |
| | | '<option value="3">3 (12 pt)</option>'+ |
| | | '<option value="4">4 (14 pt)</option>'+ |
| | | '<option value="5">5 (18 pt)</option>'+ |
| | | '<option value="6">6 (24 pt)</option>'+ |
| | | '<option value="7">7 (36 pt)</option>'+ |
| | | '</select>'; |
| | | |
| | | case "|": |
| | | case "separator": |
| | | return '<img src="{$themeurl}/images/separator.gif" width="2" height="20" class="mceSeparatorLine" alt="" />'; |
| | | |
| | | case "spacer": |
| | | return '<img src="{$themeurl}/images/separator.gif" width="2" height="15" border="0" class="mceSeparatorLine" style="vertical-align: middle" alt="" />'; |
| | | |
| | | case "rowseparator": |
| | | return '<br />'; |
| | | } |
| | | |
| | | return ""; |
| | | }, |
| | | |
| | | /** |
| | | * Theme specific execcommand handling. |
| | | */ |
| | | execCommand : function(editor_id, element, command, user_interface, value) { |
| | | switch (command) { |
| | | case 'mceHelp': |
| | | tinyMCE.openWindow({ |
| | | file : 'about.htm', |
| | | width : 480, |
| | | height : 380 |
| | | }, { |
| | | tinymce_version : tinyMCE.majorVersion + "." + tinyMCE.minorVersion, |
| | | tinymce_releasedate : tinyMCE.releaseDate, |
| | | inline : "yes" |
| | | }); |
| | | return true; |
| | | |
| | | case "mceLink": |
| | | var inst = tinyMCE.getInstanceById(editor_id); |
| | | var doc = inst.getDoc(); |
| | | var selectedText = ""; |
| | | |
| | | if (tinyMCE.isMSIE) { |
| | | var rng = doc.selection.createRange(); |
| | | selectedText = rng.text; |
| | | } else |
| | | selectedText = inst.getSel().toString(); |
| | | |
| | | if (!tinyMCE.linkElement) { |
| | | if ((tinyMCE.selectedElement.nodeName.toLowerCase() != "img") && (selectedText.length <= 0)) |
| | | return true; |
| | | } |
| | | |
| | | var href = "", target = "", title = "", onclick = "", action = "insert", style_class = ""; |
| | | |
| | | if (tinyMCE.selectedElement.nodeName.toLowerCase() == "a") |
| | | tinyMCE.linkElement = tinyMCE.selectedElement; |
| | | |
| | | // Is anchor not a link |
| | | if (tinyMCE.linkElement != null && tinyMCE.getAttrib(tinyMCE.linkElement, 'href') == "") |
| | | tinyMCE.linkElement = null; |
| | | |
| | | if (tinyMCE.linkElement) { |
| | | href = tinyMCE.getAttrib(tinyMCE.linkElement, 'href'); |
| | | target = tinyMCE.getAttrib(tinyMCE.linkElement, 'target'); |
| | | title = tinyMCE.getAttrib(tinyMCE.linkElement, 'title'); |
| | | onclick = tinyMCE.getAttrib(tinyMCE.linkElement, 'onclick'); |
| | | style_class = tinyMCE.getAttrib(tinyMCE.linkElement, 'class'); |
| | | |
| | | // Try old onclick to if copy/pasted content |
| | | if (onclick == "") |
| | | onclick = tinyMCE.getAttrib(tinyMCE.linkElement, 'onclick'); |
| | | |
| | | onclick = tinyMCE.cleanupEventStr(onclick); |
| | | |
| | | href = eval(tinyMCE.settings['urlconverter_callback'] + "(href, tinyMCE.linkElement, true);"); |
| | | |
| | | // Use mce_href if defined |
| | | mceRealHref = tinyMCE.getAttrib(tinyMCE.linkElement, 'mce_href'); |
| | | if (mceRealHref != "") { |
| | | href = mceRealHref; |
| | | |
| | | if (tinyMCE.getParam('convert_urls')) |
| | | href = eval(tinyMCE.settings['urlconverter_callback'] + "(href, tinyMCE.linkElement, true);"); |
| | | } |
| | | |
| | | action = "update"; |
| | | } |
| | | |
| | | var template = new Array(); |
| | | |
| | | template['file'] = 'link.htm'; |
| | | template['width'] = 310; |
| | | template['height'] = 200; |
| | | |
| | | // Language specific width and height addons |
| | | template['width'] += tinyMCE.getLang('lang_insert_link_delta_width', 0); |
| | | template['height'] += tinyMCE.getLang('lang_insert_link_delta_height', 0); |
| | | |
| | | if (inst.settings['insertlink_callback']) { |
| | | var returnVal = eval(inst.settings['insertlink_callback'] + "(href, target, title, onclick, action, style_class);"); |
| | | if (returnVal && returnVal['href']) |
| | | TinyMCE_AdvancedTheme._insertLink(returnVal['href'], returnVal['target'], returnVal['title'], returnVal['onclick'], returnVal['style_class']); |
| | | } else { |
| | | tinyMCE.openWindow(template, {href : href, target : target, title : title, onclick : onclick, action : action, className : style_class, inline : "yes"}); |
| | | } |
| | | |
| | | return true; |
| | | |
| | | case "mceImage": |
| | | var src = "", alt = "", border = "", hspace = "", vspace = "", width = "", height = "", align = ""; |
| | | var title = "", onmouseover = "", onmouseout = "", action = "insert"; |
| | | var img = tinyMCE.imgElement; |
| | | var inst = tinyMCE.getInstanceById(editor_id); |
| | | |
| | | if (tinyMCE.selectedElement != null && tinyMCE.selectedElement.nodeName.toLowerCase() == "img") { |
| | | img = tinyMCE.selectedElement; |
| | | tinyMCE.imgElement = img; |
| | | } |
| | | |
| | | if (img) { |
| | | // Is it a internal MCE visual aid image, then skip this one. |
| | | if (tinyMCE.getAttrib(img, 'name').indexOf('mce_') == 0) |
| | | return true; |
| | | |
| | | src = tinyMCE.getAttrib(img, 'src'); |
| | | alt = tinyMCE.getAttrib(img, 'alt'); |
| | | |
| | | // Try polling out the title |
| | | if (alt == "") |
| | | alt = tinyMCE.getAttrib(img, 'title'); |
| | | |
| | | // Fix width/height attributes if the styles is specified |
| | | if (tinyMCE.isGecko) { |
| | | var w = img.style.width; |
| | | if (w != null && w != "") |
| | | img.setAttribute("width", w); |
| | | |
| | | var h = img.style.height; |
| | | if (h != null && h != "") |
| | | img.setAttribute("height", h); |
| | | } |
| | | |
| | | border = tinyMCE.getAttrib(img, 'border'); |
| | | hspace = tinyMCE.getAttrib(img, 'hspace'); |
| | | vspace = tinyMCE.getAttrib(img, 'vspace'); |
| | | width = tinyMCE.getAttrib(img, 'width'); |
| | | height = tinyMCE.getAttrib(img, 'height'); |
| | | align = tinyMCE.getAttrib(img, 'align'); |
| | | onmouseover = tinyMCE.getAttrib(img, 'onmouseover'); |
| | | onmouseout = tinyMCE.getAttrib(img, 'onmouseout'); |
| | | title = tinyMCE.getAttrib(img, 'title'); |
| | | |
| | | // Is realy specified? |
| | | if (tinyMCE.isMSIE) { |
| | | width = img.attributes['width'].specified ? width : ""; |
| | | height = img.attributes['height'].specified ? height : ""; |
| | | } |
| | | |
| | | //onmouseover = tinyMCE.getImageSrc(tinyMCE.cleanupEventStr(onmouseover)); |
| | | //onmouseout = tinyMCE.getImageSrc(tinyMCE.cleanupEventStr(onmouseout)); |
| | | |
| | | src = eval(tinyMCE.settings['urlconverter_callback'] + "(src, img, true);"); |
| | | |
| | | // Use mce_src if defined |
| | | mceRealSrc = tinyMCE.getAttrib(img, 'mce_src'); |
| | | if (mceRealSrc != "") { |
| | | src = mceRealSrc; |
| | | |
| | | if (tinyMCE.getParam('convert_urls')) |
| | | src = eval(tinyMCE.settings['urlconverter_callback'] + "(src, img, true);"); |
| | | } |
| | | |
| | | //if (onmouseover != "") |
| | | // onmouseover = eval(tinyMCE.settings['urlconverter_callback'] + "(onmouseover, img, true);"); |
| | | |
| | | //if (onmouseout != "") |
| | | // onmouseout = eval(tinyMCE.settings['urlconverter_callback'] + "(onmouseout, img, true);"); |
| | | |
| | | action = "update"; |
| | | } |
| | | |
| | | var template = new Array(); |
| | | |
| | | template['file'] = 'image.htm?src={$src}'; |
| | | template['width'] = 355; |
| | | template['height'] = 265 + (tinyMCE.isMSIE ? 25 : 0); |
| | | |
| | | // Language specific width and height addons |
| | | template['width'] += tinyMCE.getLang('lang_insert_image_delta_width', 0); |
| | | template['height'] += tinyMCE.getLang('lang_insert_image_delta_height', 0); |
| | | |
| | | if (inst.settings['insertimage_callback']) { |
| | | var returnVal = eval(inst.settings['insertimage_callback'] + "(src, alt, border, hspace, vspace, width, height, align, title, onmouseover, onmouseout, action);"); |
| | | if (returnVal && returnVal['src']) |
| | | TinyMCE_AdvancedTheme._insertImage(returnVal['src'], returnVal['alt'], returnVal['border'], returnVal['hspace'], returnVal['vspace'], returnVal['width'], returnVal['height'], returnVal['align'], returnVal['title'], returnVal['onmouseover'], returnVal['onmouseout']); |
| | | } else |
| | | tinyMCE.openWindow(template, {src : src, alt : alt, border : border, hspace : hspace, vspace : vspace, width : width, height : height, align : align, title : title, onmouseover : onmouseover, onmouseout : onmouseout, action : action, inline : "yes"}); |
| | | |
| | | return true; |
| | | |
| | | case "forecolor": |
| | | var fcp = new TinyMCE_Layer(editor_id + '_fcPreview', false), p, img, elm; |
| | | |
| | | TinyMCE_AdvancedTheme._hideMenus(editor_id); |
| | | |
| | | if (!fcp.exists()) { |
| | | fcp.create('div', 'mceColorPreview', document.getElementById(editor_id + '_toolbar')); |
| | | elm = fcp.getElement(); |
| | | elm._editor_id = editor_id; |
| | | elm._command = "forecolor"; |
| | | elm._switchId = editor_id + "_forecolor"; |
| | | tinyMCE.addEvent(elm, 'click', TinyMCE_AdvancedTheme._handleMenuEvent); |
| | | tinyMCE.addEvent(elm, 'mouseover', TinyMCE_AdvancedTheme._handleMenuEvent); |
| | | tinyMCE.addEvent(elm, 'mouseout', TinyMCE_AdvancedTheme._handleMenuEvent); |
| | | } |
| | | |
| | | img = tinyMCE.selectNodes(document.getElementById(editor_id + "_forecolor"), function(n) {return n.nodeName == "IMG";})[0]; |
| | | p = tinyMCE.getAbsPosition(img, document.getElementById(editor_id + '_toolbar')); |
| | | |
| | | fcp.moveTo(p.absLeft, p.absTop); |
| | | fcp.getElement().style.backgroundColor = value != null ? value : tinyMCE.getInstanceById(editor_id).foreColor; |
| | | fcp.show(); |
| | | |
| | | return false; |
| | | |
| | | case "forecolorpicker": |
| | | this._pickColor(editor_id, 'forecolor'); |
| | | return true; |
| | | |
| | | case "forecolorMenu": |
| | | TinyMCE_AdvancedTheme._hideMenus(editor_id); |
| | | |
| | | // Create color layer |
| | | var ml = new TinyMCE_Layer(editor_id + '_fcMenu'); |
| | | |
| | | if (!ml.exists()) |
| | | ml.create('div', 'mceMenu', document.body, TinyMCE_AdvancedTheme._getColorHTML(editor_id, 'theme_advanced_text_colors', 'forecolor')); |
| | | |
| | | tinyMCE.switchClass(editor_id + '_forecolor', 'mceMenuButtonFocus'); |
| | | ml.moveRelativeTo(document.getElementById(editor_id + "_forecolor"), 'bl'); |
| | | |
| | | ml.moveBy(tinyMCE.isMSIE && !tinyMCE.isOpera ? -1 : 1, -1); |
| | | |
| | | if (tinyMCE.isOpera) |
| | | ml.moveBy(0, -2); |
| | | |
| | | ml.show(); |
| | | return true; |
| | | |
| | | case "HiliteColor": |
| | | var bcp = new TinyMCE_Layer(editor_id + '_bcPreview', false), p, img; |
| | | |
| | | TinyMCE_AdvancedTheme._hideMenus(editor_id); |
| | | |
| | | if (!bcp.exists()) { |
| | | bcp.create('div', 'mceColorPreview', document.getElementById(editor_id + '_toolbar')); |
| | | elm = bcp.getElement(); |
| | | elm._editor_id = editor_id; |
| | | elm._command = "HiliteColor"; |
| | | elm._switchId = editor_id + "_backcolor"; |
| | | tinyMCE.addEvent(elm, 'click', TinyMCE_AdvancedTheme._handleMenuEvent); |
| | | tinyMCE.addEvent(elm, 'mouseover', TinyMCE_AdvancedTheme._handleMenuEvent); |
| | | tinyMCE.addEvent(elm, 'mouseout', TinyMCE_AdvancedTheme._handleMenuEvent); |
| | | } |
| | | |
| | | img = tinyMCE.selectNodes(document.getElementById(editor_id + "_backcolor"), function(n) {return n.nodeName == "IMG";})[0]; |
| | | p = tinyMCE.getAbsPosition(img, document.getElementById(editor_id + '_toolbar')); |
| | | |
| | | bcp.moveTo(p.absLeft, p.absTop); |
| | | bcp.getElement().style.backgroundColor = value != null ? value : tinyMCE.getInstanceById(editor_id).backColor; |
| | | bcp.show(); |
| | | |
| | | return false; |
| | | |
| | | case "HiliteColorMenu": |
| | | TinyMCE_AdvancedTheme._hideMenus(editor_id); |
| | | |
| | | // Create color layer |
| | | var ml = new TinyMCE_Layer(editor_id + '_bcMenu'); |
| | | |
| | | if (!ml.exists()) |
| | | ml.create('div', 'mceMenu', document.body, TinyMCE_AdvancedTheme._getColorHTML(editor_id, 'theme_advanced_background_colors', 'HiliteColor')); |
| | | |
| | | tinyMCE.switchClass(editor_id + '_backcolor', 'mceMenuButtonFocus'); |
| | | ml.moveRelativeTo(document.getElementById(editor_id + "_backcolor"), 'bl'); |
| | | |
| | | ml.moveBy(tinyMCE.isMSIE && !tinyMCE.isOpera ? -1 : 1, -1); |
| | | |
| | | if (tinyMCE.isOpera) |
| | | ml.moveBy(0, -2); |
| | | |
| | | ml.show(); |
| | | return true; |
| | | |
| | | case "backcolorpicker": |
| | | this._pickColor(editor_id, 'HiliteColor'); |
| | | return true; |
| | | |
| | | case "mceColorPicker": |
| | | if (user_interface) { |
| | | var template = []; |
| | | |
| | | if (!value['callback'] && !value['color']) |
| | | value['color'] = value['document'].getElementById(value['element_id']).value; |
| | | |
| | | template['file'] = 'color_picker.htm'; |
| | | template['width'] = 380; |
| | | template['height'] = 250; |
| | | template['close_previous'] = "no"; |
| | | |
| | | template['width'] += tinyMCE.getLang('lang_theme_advanced_colorpicker_delta_width', 0); |
| | | template['height'] += tinyMCE.getLang('lang_theme_advanced_colorpicker_delta_height', 0); |
| | | |
| | | if (typeof(value['store_selection']) == "undefined") |
| | | value['store_selection'] = true; |
| | | |
| | | tinyMCE.lastColorPickerValue = value; |
| | | tinyMCE.openWindow(template, {editor_id : editor_id, mce_store_selection : value['store_selection'], inline : "yes", command : "mceColorPicker", input_color : value['color']}); |
| | | } else { |
| | | var savedVal = tinyMCE.lastColorPickerValue, elm; |
| | | |
| | | if (savedVal['callback']) { |
| | | savedVal['callback'](value); |
| | | return true; |
| | | } |
| | | |
| | | elm = savedVal['document'].getElementById(savedVal['element_id']); |
| | | elm.value = value; |
| | | |
| | | if (elm.onchange != null && elm.onchange != '') |
| | | eval('elm.onchange();'); |
| | | } |
| | | return true; |
| | | |
| | | case "mceCodeEditor": |
| | | var template = new Array(); |
| | | |
| | | template['file'] = 'source_editor.htm'; |
| | | template['width'] = parseInt(tinyMCE.getParam("theme_advanced_source_editor_width", 720)); |
| | | template['height'] = parseInt(tinyMCE.getParam("theme_advanced_source_editor_height", 580)); |
| | | |
| | | tinyMCE.openWindow(template, {editor_id : editor_id, resizable : "yes", scrollbars : "no", inline : "yes"}); |
| | | return true; |
| | | |
| | | case "mceCharMap": |
| | | var template = new Array(); |
| | | |
| | | template['file'] = 'charmap.htm'; |
| | | template['width'] = 550 + (tinyMCE.isOpera ? 40 : 0); |
| | | template['height'] = 250; |
| | | |
| | | template['width'] += tinyMCE.getLang('lang_theme_advanced_charmap_delta_width', 0); |
| | | template['height'] += tinyMCE.getLang('lang_theme_advanced_charmap_delta_height', 0); |
| | | |
| | | tinyMCE.openWindow(template, {editor_id : editor_id, inline : "yes"}); |
| | | return true; |
| | | |
| | | case "mceInsertAnchor": |
| | | var template = new Array(); |
| | | |
| | | template['file'] = 'anchor.htm'; |
| | | template['width'] = 320; |
| | | template['height'] = 90 + (tinyMCE.isNS7 ? 30 : 0); |
| | | |
| | | template['width'] += tinyMCE.getLang('lang_theme_advanced_anchor_delta_width', 0); |
| | | template['height'] += tinyMCE.getLang('lang_theme_advanced_anchor_delta_height', 0); |
| | | |
| | | tinyMCE.openWindow(template, {editor_id : editor_id, inline : "yes"}); |
| | | return true; |
| | | |
| | | case "mceNewDocument": |
| | | if (confirm(tinyMCE.entityDecode(tinyMCE.getLang('lang_newdocument')))) |
| | | tinyMCE.execInstanceCommand(editor_id, 'mceSetContent', false, ' '); |
| | | |
| | | return true; |
| | | } |
| | | |
| | | return false; |
| | | }, |
| | | |
| | | /** |
| | | * Editor instance template function. |
| | | */ |
| | | getEditorTemplate : function(settings, editorId) { |
| | | function removeFromArray(in_array, remove_array) { |
| | | var outArray = new Array(), skip; |
| | | |
| | | for (var i=0; i<in_array.length; i++) { |
| | | skip = false; |
| | | |
| | | for (var j=0; j<remove_array.length; j++) { |
| | | if (in_array[i] == remove_array[j]) { |
| | | skip = true; |
| | | } |
| | | } |
| | | |
| | | if (!skip) { |
| | | outArray[outArray.length] = in_array[i]; |
| | | } |
| | | } |
| | | |
| | | return outArray; |
| | | } |
| | | |
| | | function addToArray(in_array, add_array) { |
| | | for (var i=0; i<add_array.length; i++) { |
| | | in_array[in_array.length] = add_array[i]; |
| | | } |
| | | |
| | | return in_array; |
| | | } |
| | | |
| | | var template = new Array(); |
| | | var deltaHeight = 0; |
| | | var resizing = tinyMCE.getParam("theme_advanced_resizing", false); |
| | | var path = tinyMCE.getParam("theme_advanced_path", true); |
| | | var statusbarHTML = '<div id="{$editor_id}_path" class="mceStatusbarPathText" style="display: ' + (path ? "block" : "none") + '"> </div><div id="{$editor_id}_resize" class="mceStatusbarResize" style="display: ' + (resizing ? "block" : "none") + '" onmousedown="tinyMCE.themes.advanced._setResizing(event,\'{$editor_id}\',true);"></div><br style="clear: both" />'; |
| | | var layoutManager = tinyMCE.getParam("theme_advanced_layout_manager", "SimpleLayout"); |
| | | |
| | | // Setup style select options -- MOVED UP FOR EXTERNAL TOOLBAR COMPATABILITY! |
| | | var styleSelectHTML = '<option value="">{$lang_theme_style_select}</option>'; |
| | | if (settings['theme_advanced_styles']) { |
| | | var stylesAr = settings['theme_advanced_styles'].split(';'); |
| | | |
| | | for (var i=0; i<stylesAr.length; i++) { |
| | | var key, value; |
| | | |
| | | key = stylesAr[i].split('=')[0]; |
| | | value = stylesAr[i].split('=')[1]; |
| | | |
| | | styleSelectHTML += '<option value="' + value + '">' + key + '</option>'; |
| | | } |
| | | |
| | | TinyMCE_AdvancedTheme._autoImportCSSClasses = false; |
| | | } |
| | | |
| | | switch(layoutManager) { |
| | | case "SimpleLayout" : //the default TinyMCE Layout (for backwards compatibility)... |
| | | var toolbarHTML = ""; |
| | | var toolbarLocation = tinyMCE.getParam("theme_advanced_toolbar_location", "bottom"); |
| | | var toolbarAlign = tinyMCE.getParam("theme_advanced_toolbar_align", "center"); |
| | | var pathLocation = tinyMCE.getParam("theme_advanced_path_location", "none"); // Compatiblity |
| | | var statusbarLocation = tinyMCE.getParam("theme_advanced_statusbar_location", pathLocation); |
| | | var defVals = { |
| | | theme_advanced_buttons1 : "bold,italic,underline,strikethrough,separator,justifyleft,justifycenter,justifyright,justifyfull,separator,styleselect,formatselect", |
| | | theme_advanced_buttons2 : "bullist,numlist,separator,outdent,indent,separator,undo,redo,separator,link,unlink,anchor,image,cleanup,help,code", |
| | | theme_advanced_buttons3 : "hr,removeformat,visualaid,separator,sub,sup,separator,charmap" |
| | | }; |
| | | |
| | | // Add accessibility control |
| | | toolbarHTML += '<a href="#" accesskey="q" title="' + tinyMCE.getLang("lang_toolbar_focus") + '"'; |
| | | |
| | | if (!tinyMCE.getParam("accessibility_focus")) |
| | | toolbarHTML += ' onfocus="tinyMCE.getInstanceById(\'' + editorId + '\').getWin().focus();"'; |
| | | |
| | | toolbarHTML += '></a>'; |
| | | |
| | | // Render rows |
| | | for (var i=1; i<100; i++) { |
| | | var def = defVals["theme_advanced_buttons" + i]; |
| | | |
| | | var buttons = tinyMCE.getParam("theme_advanced_buttons" + i, def == null ? '' : def, true, ','); |
| | | if (buttons.length == 0) |
| | | break; |
| | | |
| | | buttons = removeFromArray(buttons, tinyMCE.getParam("theme_advanced_disable", "", true, ',')); |
| | | buttons = addToArray(buttons, tinyMCE.getParam("theme_advanced_buttons" + i + "_add", "", true, ',')); |
| | | buttons = addToArray(tinyMCE.getParam("theme_advanced_buttons" + i + "_add_before", "", true, ','), buttons); |
| | | |
| | | for (var b=0; b<buttons.length; b++) |
| | | toolbarHTML += tinyMCE.getControlHTML(buttons[b]); |
| | | |
| | | if (buttons.length > 0) { |
| | | toolbarHTML += "<br />"; |
| | | deltaHeight -= 23; |
| | | } |
| | | } |
| | | |
| | | // Add accessibility control |
| | | toolbarHTML += '<a href="#" accesskey="z" onfocus="tinyMCE.getInstanceById(\'' + editorId + '\').getWin().focus();"></a>'; |
| | | |
| | | // Setup template html |
| | | template['html'] = '<table class="mceEditor" border="0" cellpadding="0" cellspacing="0" width="{$width}" height="{$height}" style="width:{$width_style};height:{$height_style}"><tbody>'; |
| | | |
| | | if (toolbarLocation == "top") |
| | | template['html'] += '<tr><td dir="ltr" class="mceToolbarTop" align="' + toolbarAlign + '" height="1" nowrap="nowrap"><span id="' + editorId + '_toolbar" class="mceToolbarContainer">' + toolbarHTML + '</span></td></tr>'; |
| | | |
| | | if (statusbarLocation == "top") { |
| | | template['html'] += '<tr><td class="mceStatusbarTop" height="1">' + statusbarHTML + '</td></tr>'; |
| | | deltaHeight -= 23; |
| | | } |
| | | |
| | | template['html'] += '<tr><td align="center"><span id="{$editor_id}"></span></td></tr>'; |
| | | |
| | | if (toolbarLocation == "bottom") |
| | | template['html'] += '<tr><td dir="ltr" class="mceToolbarBottom" align="' + toolbarAlign + '" height="1"><span id="' + editorId + '_toolbar" class="mceToolbarContainer">' + toolbarHTML + '</span></td></tr>'; |
| | | |
| | | // External toolbar changes |
| | | if (toolbarLocation == "external") { |
| | | var bod = document.body; |
| | | var elm = document.createElement ("div"); |
| | | |
| | | toolbarHTML = tinyMCE.replaceVar(toolbarHTML, 'style_select_options', styleSelectHTML); |
| | | toolbarHTML = tinyMCE.applyTemplate(toolbarHTML, {editor_id : editorId}); |
| | | |
| | | elm.className = "mceToolbarExternal"; |
| | | elm.id = editorId+"_toolbar"; |
| | | elm.innerHTML = '<table width="100%" border="0" align="center"><tr><td align="center">'+toolbarHTML+'</td></tr></table>'; |
| | | bod.appendChild (elm); |
| | | // bod.style.marginTop = elm.offsetHeight + "px"; |
| | | |
| | | deltaHeight = 0; |
| | | tinyMCE.getInstanceById(editorId).toolbarElement = elm; |
| | | |
| | | //template['html'] = '<div id="mceExternalToolbar" align="center" class="mceToolbarExternal"><table width="100%" border="0" align="center"><tr><td align="center">'+toolbarHTML+'</td></tr></table></div>' + template["html"]; |
| | | } else { |
| | | tinyMCE.getInstanceById(editorId).toolbarElement = null; |
| | | } |
| | | |
| | | if (statusbarLocation == "bottom") { |
| | | template['html'] += '<tr><td class="mceStatusbarBottom" height="1">' + statusbarHTML + '</td></tr>'; |
| | | deltaHeight -= 23; |
| | | } |
| | | |
| | | template['html'] += '</tbody></table>'; |
| | | //"SimpleLayout" |
| | | break; |
| | | |
| | | case "RowLayout" : //Container Layout - containers defined in "theme_advanced_containers" are rendered from top to bottom. |
| | | template['html'] = '<table class="mceEditor" border="0" cellpadding="0" cellspacing="0" width="{$width}" height="{$height}" style="width:{$width}px;height:{$height}px"><tbody>'; |
| | | |
| | | var containers = tinyMCE.getParam("theme_advanced_containers", "", true, ","); |
| | | var defaultContainerCSS = tinyMCE.getParam("theme_advanced_containers_default_class", "container"); |
| | | var defaultContainerAlign = tinyMCE.getParam("theme_advanced_containers_default_align", "center"); |
| | | |
| | | //Render Containers: |
| | | for (var i = 0; i < containers.length; i++) |
| | | { |
| | | if (containers[i] == "mceEditor") //Exceptions for mceEditor and ... |
| | | template['html'] += '<tr><td align="center" class="mceEditor_border"><span id="{$editor_id}"></span></td></tr>'; |
| | | else if (containers[i] == "mceElementpath" || containers[i] == "mceStatusbar") // ... mceElementpath: |
| | | { |
| | | var pathClass = "mceStatusbar"; |
| | | |
| | | if (i == containers.length-1) |
| | | { |
| | | pathClass = "mceStatusbarBottom"; |
| | | } |
| | | else if (i == 0) |
| | | { |
| | | pathClass = "mceStatusbar"; |
| | | } |
| | | else |
| | | { |
| | | deltaHeight-=2; |
| | | } |
| | | |
| | | template['html'] += '<tr><td class="' + pathClass + '" height="1">' + statusbarHTML + '</td></tr>'; |
| | | deltaHeight -= 22; |
| | | } else { // Render normal Container |
| | | var curContainer = tinyMCE.getParam("theme_advanced_container_"+containers[i], "", true, ','); |
| | | var curContainerHTML = ""; |
| | | var curAlign = tinyMCE.getParam("theme_advanced_container_"+containers[i]+"_align", defaultContainerAlign); |
| | | var curCSS = tinyMCE.getParam("theme_advanced_container_"+containers[i]+"_class", defaultContainerCSS); |
| | | |
| | | curContainer = removeFromArray(curContainer, tinyMCE.getParam("theme_advanced_disable", "", true, ',')); |
| | | |
| | | for (var j=0; j<curContainer.length; j++) |
| | | curContainerHTML += tinyMCE.getControlHTML(curContainer[j]); |
| | | |
| | | if (curContainer.length > 0) { |
| | | curContainerHTML += "<br />"; |
| | | deltaHeight -= 23; |
| | | } |
| | | |
| | | template['html'] += '<tr><td class="' + curCSS + '" align="' + curAlign + '" height="1">' + curContainerHTML + '</td></tr>'; |
| | | } |
| | | } |
| | | |
| | | template['html'] += '</tbody></table>'; |
| | | //RowLayout |
| | | break; |
| | | |
| | | case "CustomLayout" : //User defined layout callback... |
| | | var customLayout = tinyMCE.getParam("theme_advanced_custom_layout",""); |
| | | |
| | | if (customLayout != "" && eval("typeof(" + customLayout + ")") != "undefined") { |
| | | template = eval(customLayout + "(template);"); |
| | | } |
| | | break; |
| | | } |
| | | |
| | | if (resizing) |
| | | template['html'] += '<span id="{$editor_id}_resize_box" class="mceResizeBox"></span>'; |
| | | |
| | | template['html'] = tinyMCE.replaceVar(template['html'], 'style_select_options', styleSelectHTML); |
| | | |
| | | // Set to default values |
| | | if (!template['delta_width']) |
| | | template['delta_width'] = 0; |
| | | |
| | | if (!template['delta_height']) |
| | | template['delta_height'] = deltaHeight; |
| | | |
| | | return template; |
| | | }, |
| | | |
| | | initInstance : function(inst) { |
| | | if (tinyMCE.getParam("theme_advanced_resizing", false)) { |
| | | if (tinyMCE.getParam("theme_advanced_resizing_use_cookie", true)) { |
| | | var w = TinyMCE_AdvancedTheme._getCookie("TinyMCE_" + inst.editorId + "_width"); |
| | | var h = TinyMCE_AdvancedTheme._getCookie("TinyMCE_" + inst.editorId + "_height"); |
| | | |
| | | TinyMCE_AdvancedTheme._resizeTo(inst, w, h, tinyMCE.getParam("theme_advanced_resize_horizontal", true)); |
| | | } |
| | | } |
| | | |
| | | inst.addShortcut('ctrl', 'k', 'lang_link_desc', 'mceLink'); |
| | | }, |
| | | |
| | | removeInstance : function(inst) { |
| | | new TinyMCE_Layer(inst.editorId + '_fcMenu').remove(); |
| | | new TinyMCE_Layer(inst.editorId + '_bcMenu').remove(); |
| | | }, |
| | | |
| | | hideInstance : function(inst) { |
| | | TinyMCE_AdvancedTheme._hideMenus(inst.editorId); |
| | | }, |
| | | |
| | | _handleMenuEvent : function(e) { |
| | | var te = tinyMCE.isMSIE ? window.event.srcElement : e.target; |
| | | tinyMCE._menuButtonEvent(e.type == "mouseover" ? "over" : "out", document.getElementById(te._switchId)); |
| | | |
| | | if (e.type == "click") |
| | | tinyMCE.execInstanceCommand(te._editor_id, te._command); |
| | | }, |
| | | |
| | | _hideMenus : function(id) { |
| | | var fcml = new TinyMCE_Layer(id + '_fcMenu'), bcml = new TinyMCE_Layer(id + '_bcMenu'); |
| | | |
| | | if (fcml.exists() && fcml.isVisible()) { |
| | | tinyMCE.switchClass(id + '_forecolor', 'mceMenuButton'); |
| | | fcml.hide(); |
| | | } |
| | | |
| | | if (bcml.exists() && bcml.isVisible()) { |
| | | tinyMCE.switchClass(id + '_backcolor', 'mceMenuButton'); |
| | | bcml.hide(); |
| | | } |
| | | }, |
| | | |
| | | /** |
| | | * Node change handler. |
| | | */ |
| | | handleNodeChange : function(editor_id, node, undo_index, undo_levels, visual_aid, any_selection, setup_content) { |
| | | var alignNode, breakOut, classNode; |
| | | |
| | | function selectByValue(select_elm, value, first_index) { |
| | | first_index = typeof(first_index) == "undefined" ? false : true; |
| | | |
| | | if (select_elm) { |
| | | for (var i=0; i<select_elm.options.length; i++) { |
| | | var ov = "" + select_elm.options[i].value; |
| | | |
| | | if (first_index && ov.toLowerCase().indexOf(value.toLowerCase()) == 0) { |
| | | select_elm.selectedIndex = i; |
| | | return true; |
| | | } |
| | | |
| | | if (ov == value) { |
| | | select_elm.selectedIndex = i; |
| | | return true; |
| | | } |
| | | } |
| | | } |
| | | |
| | | return false; |
| | | }; |
| | | |
| | | // No node provided |
| | | if (node == null) |
| | | return; |
| | | |
| | | // Update path |
| | | var pathElm = document.getElementById(editor_id + "_path"); |
| | | var inst = tinyMCE.getInstanceById(editor_id); |
| | | var doc = inst.getDoc(); |
| | | TinyMCE_AdvancedTheme._hideMenus(editor_id); |
| | | |
| | | if (pathElm) { |
| | | // Get node path |
| | | var parentNode = node; |
| | | var path = new Array(); |
| | | |
| | | while (parentNode != null) { |
| | | if (parentNode.nodeName.toUpperCase() == "BODY") { |
| | | break; |
| | | } |
| | | |
| | | // Only append element nodes to path |
| | | if (parentNode.nodeType == 1 && tinyMCE.getAttrib(parentNode, "class").indexOf('mceItemHidden') == -1) { |
| | | path[path.length] = parentNode; |
| | | } |
| | | |
| | | parentNode = parentNode.parentNode; |
| | | } |
| | | |
| | | // Setup HTML |
| | | var html = ""; |
| | | for (var i=path.length-1; i>=0; i--) { |
| | | var nodeName = path[i].nodeName.toLowerCase(); |
| | | var nodeData = ""; |
| | | |
| | | if (nodeName.indexOf("html:") == 0) |
| | | nodeName = nodeName.substring(5); |
| | | |
| | | if (nodeName == "b") { |
| | | nodeName = "strong"; |
| | | } |
| | | |
| | | if (nodeName == "i") { |
| | | nodeName = "em"; |
| | | } |
| | | |
| | | if (nodeName == "span") { |
| | | var cn = tinyMCE.getAttrib(path[i], "class"); |
| | | if (cn != "" && cn.indexOf('mceItem') == -1) |
| | | nodeData += "class: " + cn + " "; |
| | | |
| | | var st = tinyMCE.getAttrib(path[i], "style"); |
| | | if (st != "") { |
| | | st = tinyMCE.serializeStyle(tinyMCE.parseStyle(st)); |
| | | nodeData += "style: " + tinyMCE.xmlEncode(st) + " "; |
| | | } |
| | | } |
| | | |
| | | if (nodeName == "font") { |
| | | if (tinyMCE.getParam("convert_fonts_to_spans")) |
| | | nodeName = "span"; |
| | | |
| | | var face = tinyMCE.getAttrib(path[i], "face"); |
| | | if (face != "") |
| | | nodeData += "font: " + tinyMCE.xmlEncode(face) + " "; |
| | | |
| | | var size = tinyMCE.getAttrib(path[i], "size"); |
| | | if (size != "") |
| | | nodeData += "size: " + tinyMCE.xmlEncode(size) + " "; |
| | | |
| | | var color = tinyMCE.getAttrib(path[i], "color"); |
| | | if (color != "") |
| | | nodeData += "color: " + tinyMCE.xmlEncode(color) + " "; |
| | | } |
| | | |
| | | if (tinyMCE.getAttrib(path[i], 'id') != "") { |
| | | nodeData += "id: " + path[i].getAttribute('id') + " "; |
| | | } |
| | | |
| | | var className = tinyMCE.getVisualAidClass(tinyMCE.getAttrib(path[i], "class"), false); |
| | | if (className != "" && className.indexOf('mceItem') == -1) |
| | | nodeData += "class: " + className + " "; |
| | | |
| | | if (tinyMCE.getAttrib(path[i], 'src') != "") { |
| | | var src = tinyMCE.getAttrib(path[i], "mce_src"); |
| | | |
| | | if (src == "") |
| | | src = tinyMCE.getAttrib(path[i], "src"); |
| | | |
| | | nodeData += "src: " + tinyMCE.xmlEncode(src) + " "; |
| | | } |
| | | |
| | | if (path[i].nodeName == 'A' && tinyMCE.getAttrib(path[i], 'href') != "") { |
| | | var href = tinyMCE.getAttrib(path[i], "mce_href"); |
| | | |
| | | if (href == "") |
| | | href = tinyMCE.getAttrib(path[i], "href"); |
| | | |
| | | nodeData += "href: " + tinyMCE.xmlEncode(href) + " "; |
| | | } |
| | | |
| | | className = tinyMCE.getAttrib(path[i], "class"); |
| | | if ((nodeName == "img" || nodeName == "span") && className.indexOf('mceItem') != -1) { |
| | | nodeName = className.replace(/mceItem([a-z]+)/gi, '$1').toLowerCase(); |
| | | nodeData = path[i].getAttribute('title'); |
| | | } |
| | | |
| | | if (nodeName == "a" && (anchor = tinyMCE.getAttrib(path[i], "name")) != "") { |
| | | nodeName = "a"; |
| | | nodeName += "#" + tinyMCE.xmlEncode(anchor); |
| | | nodeData = ""; |
| | | } |
| | | |
| | | if (tinyMCE.getAttrib(path[i], 'name').indexOf("mce_") != 0) { |
| | | var className = tinyMCE.getVisualAidClass(tinyMCE.getAttrib(path[i], "class"), false); |
| | | if (className != "" && className.indexOf('mceItem') == -1) { |
| | | nodeName += "." + className; |
| | | } |
| | | } |
| | | |
| | | var cmd = 'tinyMCE.execInstanceCommand(\'' + editor_id + '\',\'mceSelectNodeDepth\',false,\'' + i + '\');'; |
| | | html += '<a title="' + nodeData + '" href="javascript:' + cmd + '" onclick="' + cmd + 'return false;" onmousedown="return false;" target="_self" class="mcePathItem">' + nodeName + '</a>'; |
| | | |
| | | if (i > 0) { |
| | | html += " » "; |
| | | } |
| | | } |
| | | |
| | | pathElm.innerHTML = '<a href="#" accesskey="x"></a>' + tinyMCE.getLang('lang_theme_path') + ": " + html + ' '; |
| | | } |
| | | |
| | | // Reset old states |
| | | tinyMCE.switchClass(editor_id + '_justifyleft', 'mceButtonNormal'); |
| | | tinyMCE.switchClass(editor_id + '_justifyright', 'mceButtonNormal'); |
| | | tinyMCE.switchClass(editor_id + '_justifycenter', 'mceButtonNormal'); |
| | | tinyMCE.switchClass(editor_id + '_justifyfull', 'mceButtonNormal'); |
| | | tinyMCE.switchClass(editor_id + '_bold', 'mceButtonNormal'); |
| | | tinyMCE.switchClass(editor_id + '_italic', 'mceButtonNormal'); |
| | | tinyMCE.switchClass(editor_id + '_underline', 'mceButtonNormal'); |
| | | tinyMCE.switchClass(editor_id + '_strikethrough', 'mceButtonNormal'); |
| | | tinyMCE.switchClass(editor_id + '_bullist', 'mceButtonNormal'); |
| | | tinyMCE.switchClass(editor_id + '_numlist', 'mceButtonNormal'); |
| | | tinyMCE.switchClass(editor_id + '_sub', 'mceButtonNormal'); |
| | | tinyMCE.switchClass(editor_id + '_sup', 'mceButtonNormal'); |
| | | tinyMCE.switchClass(editor_id + '_anchor', 'mceButtonNormal'); |
| | | tinyMCE.switchClass(editor_id + '_link', 'mceButtonDisabled'); |
| | | tinyMCE.switchClass(editor_id + '_unlink', 'mceButtonDisabled'); |
| | | tinyMCE.switchClass(editor_id + '_outdent', 'mceButtonDisabled'); |
| | | tinyMCE.switchClass(editor_id + '_image', 'mceButtonNormal'); |
| | | tinyMCE.switchClass(editor_id + '_hr', 'mceButtonNormal'); |
| | | |
| | | if (node.nodeName == "A" && tinyMCE.getAttrib(node, "class").indexOf('mceItemAnchor') != -1) |
| | | tinyMCE.switchClass(editor_id + '_anchor', 'mceButtonSelected'); |
| | | |
| | | // Get link |
| | | var anchorLink = tinyMCE.getParentElement(node, "a", "href"); |
| | | |
| | | if (anchorLink || any_selection) { |
| | | tinyMCE.switchClass(editor_id + '_link', anchorLink ? 'mceButtonSelected' : 'mceButtonNormal'); |
| | | tinyMCE.switchClass(editor_id + '_unlink', anchorLink ? 'mceButtonSelected' : 'mceButtonNormal'); |
| | | } |
| | | |
| | | // Handle visual aid |
| | | tinyMCE.switchClass(editor_id + '_visualaid', visual_aid ? 'mceButtonSelected' : 'mceButtonNormal'); |
| | | |
| | | if (undo_levels != -1) { |
| | | tinyMCE.switchClass(editor_id + '_undo', 'mceButtonDisabled'); |
| | | tinyMCE.switchClass(editor_id + '_redo', 'mceButtonDisabled'); |
| | | } |
| | | |
| | | // Within li, blockquote |
| | | if (tinyMCE.getParentElement(node, "li,blockquote")) |
| | | tinyMCE.switchClass(editor_id + '_outdent', 'mceButtonNormal'); |
| | | |
| | | // Has redo levels |
| | | if (undo_index != -1 && (undo_index < undo_levels-1 && undo_levels > 0)) |
| | | tinyMCE.switchClass(editor_id + '_redo', 'mceButtonNormal'); |
| | | |
| | | // Has undo levels |
| | | if (undo_index != -1 && (undo_index > 0 && undo_levels > 0)) |
| | | tinyMCE.switchClass(editor_id + '_undo', 'mceButtonNormal'); |
| | | |
| | | // Select class in select box |
| | | var selectElm = document.getElementById(editor_id + "_styleSelect"); |
| | | |
| | | if (selectElm) { |
| | | TinyMCE_AdvancedTheme._setupCSSClasses(editor_id); |
| | | |
| | | classNode = node; |
| | | breakOut = false; |
| | | var index = 0; |
| | | |
| | | do { |
| | | if (classNode && classNode.className) { |
| | | for (var i=0; i<selectElm.options.length; i++) { |
| | | if (selectElm.options[i].value == classNode.className) { |
| | | index = i; |
| | | breakOut = true; |
| | | break; |
| | | } |
| | | } |
| | | } |
| | | } while (!breakOut && classNode != null && (classNode = classNode.parentNode) != null); |
| | | |
| | | selectElm.selectedIndex = index; |
| | | } |
| | | |
| | | // Select formatblock |
| | | var selectElm = document.getElementById(editor_id + "_formatSelect"); |
| | | if (selectElm) { |
| | | var elm = tinyMCE.getParentElement(node, "p,div,h1,h2,h3,h4,h5,h6,pre,address"); |
| | | |
| | | if (elm) |
| | | selectByValue(selectElm, "<" + elm.nodeName.toLowerCase() + ">"); |
| | | else |
| | | selectByValue(selectElm, ""); |
| | | } |
| | | |
| | | // Select fontselect |
| | | var selectElm = document.getElementById(editor_id + "_fontNameSelect"); |
| | | if (selectElm) { |
| | | if (!tinyMCE.isSafari && !(tinyMCE.isMSIE && !tinyMCE.isOpera)) { |
| | | var face = inst.queryCommandValue('FontName'); |
| | | |
| | | face = face == null || face == "" ? "" : face; |
| | | |
| | | selectByValue(selectElm, face, face != ""); |
| | | } else { |
| | | var elm = tinyMCE.getParentElement(node, "font", "face"); |
| | | |
| | | if (elm) { |
| | | var family = tinyMCE.getAttrib(elm, "face"); |
| | | |
| | | if (family == '') |
| | | family = '' + elm.style.fontFamily; |
| | | |
| | | if (!selectByValue(selectElm, family, family != "")) |
| | | selectByValue(selectElm, ""); |
| | | } else |
| | | selectByValue(selectElm, ""); |
| | | } |
| | | } |
| | | |
| | | // Select fontsize |
| | | var selectElm = document.getElementById(editor_id + "_fontSizeSelect"); |
| | | if (selectElm) { |
| | | if (!tinyMCE.isSafari && !tinyMCE.isOpera) { |
| | | var size = inst.queryCommandValue('FontSize'); |
| | | selectByValue(selectElm, size == null || size == "" ? "0" : size); |
| | | } else { |
| | | var elm = tinyMCE.getParentElement(node, "font", "size"); |
| | | if (elm) { |
| | | var size = tinyMCE.getAttrib(elm, "size"); |
| | | |
| | | if (size == '') { |
| | | var sizes = new Array('', '8px', '10px', '12px', '14px', '18px', '24px', '36px'); |
| | | |
| | | size = '' + elm.style.fontSize; |
| | | |
| | | for (var i=0; i<sizes.length; i++) { |
| | | if (('' + sizes[i]) == size) { |
| | | size = i; |
| | | break; |
| | | } |
| | | } |
| | | } |
| | | |
| | | if (!selectByValue(selectElm, size)) |
| | | selectByValue(selectElm, ""); |
| | | } else |
| | | selectByValue(selectElm, "0"); |
| | | } |
| | | } |
| | | |
| | | // Handle align attributes |
| | | alignNode = node; |
| | | breakOut = false; |
| | | do { |
| | | if (!alignNode.getAttribute || !alignNode.getAttribute('align')) |
| | | continue; |
| | | |
| | | switch (alignNode.getAttribute('align').toLowerCase()) { |
| | | case "left": |
| | | tinyMCE.switchClass(editor_id + '_justifyleft', 'mceButtonSelected'); |
| | | breakOut = true; |
| | | break; |
| | | |
| | | case "right": |
| | | tinyMCE.switchClass(editor_id + '_justifyright', 'mceButtonSelected'); |
| | | breakOut = true; |
| | | break; |
| | | |
| | | case "middle": |
| | | case "center": |
| | | tinyMCE.switchClass(editor_id + '_justifycenter', 'mceButtonSelected'); |
| | | breakOut = true; |
| | | break; |
| | | |
| | | case "justify": |
| | | tinyMCE.switchClass(editor_id + '_justifyfull', 'mceButtonSelected'); |
| | | breakOut = true; |
| | | break; |
| | | } |
| | | } while (!breakOut && (alignNode = alignNode.parentNode) != null); |
| | | |
| | | // Div justification |
| | | var div = tinyMCE.getParentElement(node, "div"); |
| | | if (div && div.style.textAlign == "center") |
| | | tinyMCE.switchClass(editor_id + '_justifycenter', 'mceButtonSelected'); |
| | | |
| | | // Do special text |
| | | if (!setup_content) { |
| | | // , "JustifyLeft", "_justifyleft", "JustifyCenter", "justifycenter", "JustifyRight", "justifyright", "JustifyFull", "justifyfull", "InsertUnorderedList", "bullist", "InsertOrderedList", "numlist", "InsertUnorderedList", "bullist", "Outdent", "outdent", "Indent", "indent", "subscript", "sub" |
| | | var ar = new Array("Bold", "_bold", "Italic", "_italic", "Strikethrough", "_strikethrough", "superscript", "_sup", "subscript", "_sub"); |
| | | for (var i=0; i<ar.length; i+=2) { |
| | | if (inst.queryCommandState(ar[i])) |
| | | tinyMCE.switchClass(editor_id + ar[i+1], 'mceButtonSelected'); |
| | | } |
| | | |
| | | if (inst.queryCommandState("Underline") && (node.parentNode == null || node.parentNode.nodeName != "A")) |
| | | tinyMCE.switchClass(editor_id + '_underline', 'mceButtonSelected'); |
| | | } |
| | | |
| | | // Handle elements |
| | | do { |
| | | switch (node.nodeName) { |
| | | case "UL": |
| | | tinyMCE.switchClass(editor_id + '_bullist', 'mceButtonSelected'); |
| | | break; |
| | | |
| | | case "OL": |
| | | tinyMCE.switchClass(editor_id + '_numlist', 'mceButtonSelected'); |
| | | break; |
| | | |
| | | case "HR": |
| | | tinyMCE.switchClass(editor_id + '_hr', 'mceButtonSelected'); |
| | | break; |
| | | |
| | | case "IMG": |
| | | if (tinyMCE.getAttrib(node, 'name').indexOf('mce_') != 0 && tinyMCE.getAttrib(node, 'class').indexOf('mceItem') == -1) { |
| | | tinyMCE.switchClass(editor_id + '_image', 'mceButtonSelected'); |
| | | } |
| | | break; |
| | | } |
| | | } while ((node = node.parentNode) != null); |
| | | }, |
| | | |
| | | // Private theme internal functions |
| | | |
| | | // This function auto imports CSS classes into the class selection droplist |
| | | _setupCSSClasses : function(editor_id) { |
| | | var i, selectElm; |
| | | |
| | | if (!TinyMCE_AdvancedTheme._autoImportCSSClasses) |
| | | return; |
| | | |
| | | selectElm = document.getElementById(editor_id + '_styleSelect'); |
| | | |
| | | if (selectElm && selectElm.getAttribute('cssImported') != 'true') { |
| | | var csses = tinyMCE.getCSSClasses(editor_id); |
| | | if (csses && selectElm) { |
| | | for (i=0; i<csses.length; i++) |
| | | selectElm.options[selectElm.options.length] = new Option(csses[i], csses[i]); |
| | | } |
| | | |
| | | // Only do this once |
| | | if (csses != null && csses.length > 0) |
| | | selectElm.setAttribute('cssImported', 'true'); |
| | | } |
| | | }, |
| | | |
| | | _setCookie : function(name, value, expires, path, domain, secure) { |
| | | var curCookie = name + "=" + escape(value) + |
| | | ((expires) ? "; expires=" + expires.toGMTString() : "") + |
| | | ((path) ? "; path=" + escape(path) : "") + |
| | | ((domain) ? "; domain=" + domain : "") + |
| | | ((secure) ? "; secure" : ""); |
| | | |
| | | document.cookie = curCookie; |
| | | }, |
| | | |
| | | _getCookie : function(name) { |
| | | var dc = document.cookie; |
| | | var prefix = name + "="; |
| | | var begin = dc.indexOf("; " + prefix); |
| | | |
| | | if (begin == -1) { |
| | | begin = dc.indexOf(prefix); |
| | | |
| | | if (begin != 0) |
| | | return null; |
| | | } else |
| | | begin += 2; |
| | | |
| | | var end = document.cookie.indexOf(";", begin); |
| | | |
| | | if (end == -1) |
| | | end = dc.length; |
| | | |
| | | return unescape(dc.substring(begin + prefix.length, end)); |
| | | }, |
| | | |
| | | _resizeTo : function(inst, w, h, set_w) { |
| | | var editorContainer = document.getElementById(inst.editorId + '_parent'); |
| | | var tableElm = editorContainer.firstChild; |
| | | var iframe = inst.iframeElement; |
| | | |
| | | if (w == null || w == "null") { |
| | | set_w = false; |
| | | w = 0; |
| | | } |
| | | |
| | | if (h == null || h == "null") |
| | | return; |
| | | |
| | | w = parseInt(w); |
| | | h = parseInt(h); |
| | | |
| | | if (tinyMCE.isGecko) { |
| | | w += 2; |
| | | h += 2; |
| | | } |
| | | |
| | | var dx = w - tableElm.clientWidth; |
| | | var dy = h - tableElm.clientHeight; |
| | | |
| | | w = w < 1 ? 30 : w; |
| | | h = h < 1 ? 30 : h; |
| | | |
| | | if (set_w) |
| | | tableElm.style.width = w + "px"; |
| | | |
| | | tableElm.style.height = h + "px"; |
| | | |
| | | iw = iframe.clientWidth + dx; |
| | | ih = iframe.clientHeight + dy; |
| | | |
| | | iw = iw < 1 ? 30 : iw; |
| | | ih = ih < 1 ? 30 : ih; |
| | | |
| | | if (tinyMCE.isGecko) { |
| | | iw -= 2; |
| | | ih -= 2; |
| | | } |
| | | |
| | | if (set_w) |
| | | iframe.style.width = iw + "px"; |
| | | |
| | | iframe.style.height = ih + "px"; |
| | | |
| | | // Is it to small, make it bigger again |
| | | if (set_w) { |
| | | var tableBodyElm = tableElm.firstChild; |
| | | var minIframeWidth = tableBodyElm.scrollWidth; |
| | | if (inst.iframeElement.clientWidth < minIframeWidth) { |
| | | dx = minIframeWidth - inst.iframeElement.clientWidth; |
| | | |
| | | inst.iframeElement.style.width = (iw + dx) + "px"; |
| | | } |
| | | } |
| | | |
| | | // Remove pesky table controls |
| | | inst.useCSS = false; |
| | | }, |
| | | |
| | | /** |
| | | * Handles resizing events. |
| | | */ |
| | | _resizeEventHandler : function(e) { |
| | | var resizer = TinyMCE_AdvancedTheme._resizer; |
| | | |
| | | // Do nothing |
| | | if (!resizer.resizing) |
| | | return; |
| | | |
| | | e = typeof(e) == "undefined" ? window.event : e; |
| | | |
| | | var dx = e.screenX - resizer.downX; |
| | | var dy = e.screenY - resizer.downY; |
| | | var resizeBox = resizer.resizeBox; |
| | | var editorId = resizer.editorId; |
| | | |
| | | switch (e.type) { |
| | | case "mousemove": |
| | | var w, h; |
| | | |
| | | w = resizer.width + dx; |
| | | h = resizer.height + dy; |
| | | |
| | | w = w < 1 ? 1 : w; |
| | | h = h < 1 ? 1 : h; |
| | | |
| | | if (resizer.horizontal) |
| | | resizeBox.style.width = w + "px"; |
| | | |
| | | resizeBox.style.height = h + "px"; |
| | | break; |
| | | |
| | | case "mouseup": |
| | | TinyMCE_AdvancedTheme._setResizing(e, editorId, false); |
| | | TinyMCE_AdvancedTheme._resizeTo(tinyMCE.getInstanceById(editorId), resizer.width + dx, resizer.height + dy, resizer.horizontal); |
| | | |
| | | // Expire in a month |
| | | if (tinyMCE.getParam("theme_advanced_resizing_use_cookie", true)) { |
| | | var expires = new Date(); |
| | | expires.setTime(expires.getTime() + 3600000 * 24 * 30); |
| | | |
| | | // Set the cookies |
| | | TinyMCE_AdvancedTheme._setCookie("TinyMCE_" + editorId + "_width", "" + (resizer.horizontal ? resizer.width + dx : ""), expires); |
| | | TinyMCE_AdvancedTheme._setCookie("TinyMCE_" + editorId + "_height", "" + (resizer.height + dy), expires); |
| | | } |
| | | break; |
| | | } |
| | | }, |
| | | |
| | | /** |
| | | * Starts/stops the editor resizing. |
| | | */ |
| | | _setResizing : function(e, editor_id, state) { |
| | | e = typeof(e) == "undefined" ? window.event : e; |
| | | |
| | | var resizer = TinyMCE_AdvancedTheme._resizer; |
| | | var editorContainer = document.getElementById(editor_id + '_parent'); |
| | | var editorArea = document.getElementById(editor_id + '_parent').firstChild; |
| | | var resizeBox = document.getElementById(editor_id + '_resize_box'); |
| | | var inst = tinyMCE.getInstanceById(editor_id); |
| | | |
| | | if (state) { |
| | | // Place box over editor area |
| | | var width = editorArea.clientWidth; |
| | | var height = editorArea.clientHeight; |
| | | |
| | | resizeBox.style.width = width + "px"; |
| | | resizeBox.style.height = height + "px"; |
| | | |
| | | resizer.iframeWidth = inst.iframeElement.clientWidth; |
| | | resizer.iframeHeight = inst.iframeElement.clientHeight; |
| | | |
| | | // Hide editor and show resize box |
| | | editorArea.style.display = "none"; |
| | | resizeBox.style.display = "block"; |
| | | |
| | | // Add event handlers, only once |
| | | if (!resizer.eventHandlers) { |
| | | if (tinyMCE.isMSIE) |
| | | tinyMCE.addEvent(document, "mousemove", TinyMCE_AdvancedTheme._resizeEventHandler); |
| | | else |
| | | tinyMCE.addEvent(window, "mousemove", TinyMCE_AdvancedTheme._resizeEventHandler); |
| | | |
| | | tinyMCE.addEvent(document, "mouseup", TinyMCE_AdvancedTheme._resizeEventHandler); |
| | | |
| | | resizer.eventHandlers = true; |
| | | } |
| | | |
| | | resizer.resizing = true; |
| | | resizer.downX = e.screenX; |
| | | resizer.downY = e.screenY; |
| | | resizer.width = parseInt(resizeBox.style.width); |
| | | resizer.height = parseInt(resizeBox.style.height); |
| | | resizer.editorId = editor_id; |
| | | resizer.resizeBox = resizeBox; |
| | | resizer.horizontal = tinyMCE.getParam("theme_advanced_resize_horizontal", true); |
| | | } else { |
| | | resizer.resizing = false; |
| | | resizeBox.style.display = "none"; |
| | | editorArea.style.display = tinyMCE.isMSIE && !tinyMCE.isOpera ? "block" : "table"; |
| | | tinyMCE.execCommand('mceResetDesignMode'); |
| | | } |
| | | }, |
| | | |
| | | _getColorHTML : function(id, n, cm) { |
| | | var i, h, cl; |
| | | |
| | | h = '<span class="mceMenuLine"></span>'; |
| | | cl = tinyMCE.getParam(n, TinyMCE_AdvancedTheme._defColors).split(','); |
| | | |
| | | h += '<table class="mceColors"><tr>'; |
| | | for (i=0; i<cl.length; i++) { |
| | | c = 'tinyMCE.execInstanceCommand(\'' + id + '\', \'' + cm + '\', false, \'#' + cl[i] + '\');'; |
| | | h += '<td><a href="javascript:' + c + '" style="background-color: #' + cl[i] + '" onclick="' + c + ';return false;"></a></td>'; |
| | | |
| | | if ((i+1) % 8 == 0) |
| | | h += '</tr><tr>'; |
| | | } |
| | | |
| | | h += '</tr></table>'; |
| | | |
| | | if (tinyMCE.getParam("theme_advanced_more_colors", true)) |
| | | h += '<a href="javascript:void(0);" onclick="TinyMCE_AdvancedTheme._pickColor(\'' + id + '\',\'' + cm + '\');" class="mceMoreColors">' + tinyMCE.getLang('lang_more_colors') + '</a>'; |
| | | |
| | | return h; |
| | | }, |
| | | |
| | | _pickColor : function(id, cm) { |
| | | var inputColor, inst = tinyMCE.selectedInstance; |
| | | |
| | | if (cm == 'forecolor' && inst) |
| | | inputColor = inst.foreColor; |
| | | |
| | | if ((cm == 'backcolor' || cm == 'HiliteColor') && inst) |
| | | inputColor = inst.backColor; |
| | | |
| | | tinyMCE.execCommand('mceColorPicker', true, {color : inputColor, callback : function(c) { |
| | | tinyMCE.execInstanceCommand(id, cm, false, c); |
| | | }}); |
| | | }, |
| | | |
| | | _insertImage : function(src, alt, border, hspace, vspace, width, height, align, title, onmouseover, onmouseout) { |
| | | tinyMCE.execCommand("mceInsertContent", false, tinyMCE.createTagHTML('img', { |
| | | src : tinyMCE.convertRelativeToAbsoluteURL(tinyMCE.settings.base_href, src), // Force absolute |
| | | mce_src : src, |
| | | alt : alt, |
| | | border : border, |
| | | hspace : hspace, |
| | | vspace : vspace, |
| | | width : width, |
| | | height : height, |
| | | align : align, |
| | | title : title, |
| | | onmouseover : onmouseover, |
| | | onmouseout : onmouseout |
| | | })); |
| | | }, |
| | | |
| | | _insertLink : function(href, target, title, onclick, style_class) { |
| | | tinyMCE.execCommand('mceBeginUndoLevel'); |
| | | |
| | | if (tinyMCE.selectedInstance && tinyMCE.selectedElement && tinyMCE.selectedElement.nodeName.toLowerCase() == "img") { |
| | | var doc = tinyMCE.selectedInstance.getDoc(); |
| | | var linkElement = tinyMCE.getParentElement(tinyMCE.selectedElement, "a"); |
| | | var newLink = false; |
| | | |
| | | if (!linkElement) { |
| | | linkElement = doc.createElement("a"); |
| | | newLink = true; |
| | | } |
| | | |
| | | var mhref = href; |
| | | var thref = eval(tinyMCE.settings['urlconverter_callback'] + "(href, linkElement);"); |
| | | mhref = tinyMCE.getParam('convert_urls') ? href : mhref; |
| | | |
| | | tinyMCE.setAttrib(linkElement, 'href', thref); |
| | | tinyMCE.setAttrib(linkElement, 'mce_href', mhref); |
| | | tinyMCE.setAttrib(linkElement, 'target', target); |
| | | tinyMCE.setAttrib(linkElement, 'title', title); |
| | | tinyMCE.setAttrib(linkElement, 'onclick', onclick); |
| | | tinyMCE.setAttrib(linkElement, 'class', style_class); |
| | | |
| | | if (newLink) { |
| | | linkElement.appendChild(tinyMCE.selectedElement.cloneNode(true)); |
| | | tinyMCE.selectedElement.parentNode.replaceChild(linkElement, tinyMCE.selectedElement); |
| | | } |
| | | |
| | | return; |
| | | } |
| | | |
| | | if (!tinyMCE.linkElement && tinyMCE.selectedInstance) { |
| | | if (tinyMCE.isSafari) { |
| | | tinyMCE.execCommand("mceInsertContent", false, '<a href="' + tinyMCE.uniqueURL + '">' + tinyMCE.selectedInstance.selection.getSelectedHTML() + '</a>'); |
| | | } else |
| | | tinyMCE.selectedInstance.contentDocument.execCommand("createlink", false, tinyMCE.uniqueURL); |
| | | |
| | | tinyMCE.linkElement = tinyMCE.getElementByAttributeValue(tinyMCE.selectedInstance.contentDocument.body, "a", "href", tinyMCE.uniqueURL); |
| | | |
| | | var elementArray = tinyMCE.getElementsByAttributeValue(tinyMCE.selectedInstance.contentDocument.body, "a", "href", tinyMCE.uniqueURL); |
| | | |
| | | for (var i=0; i<elementArray.length; i++) { |
| | | var mhref = href; |
| | | var thref = eval(tinyMCE.settings['urlconverter_callback'] + "(href, elementArray[i]);"); |
| | | mhref = tinyMCE.getParam('convert_urls') ? href : mhref; |
| | | |
| | | tinyMCE.setAttrib(elementArray[i], 'href', thref); |
| | | tinyMCE.setAttrib(elementArray[i], 'mce_href', mhref); |
| | | tinyMCE.setAttrib(elementArray[i], 'target', target); |
| | | tinyMCE.setAttrib(elementArray[i], 'title', title); |
| | | tinyMCE.setAttrib(elementArray[i], 'onclick', onclick); |
| | | tinyMCE.setAttrib(elementArray[i], 'class', style_class); |
| | | } |
| | | |
| | | tinyMCE.linkElement = elementArray[0]; |
| | | } |
| | | |
| | | if (tinyMCE.linkElement) { |
| | | var mhref = href; |
| | | href = eval(tinyMCE.settings['urlconverter_callback'] + "(href, tinyMCE.linkElement);"); |
| | | mhref = tinyMCE.getParam('convert_urls') ? href : mhref; |
| | | |
| | | tinyMCE.setAttrib(tinyMCE.linkElement, 'href', href); |
| | | tinyMCE.setAttrib(tinyMCE.linkElement, 'mce_href', mhref); |
| | | tinyMCE.setAttrib(tinyMCE.linkElement, 'target', target); |
| | | tinyMCE.setAttrib(tinyMCE.linkElement, 'title', title); |
| | | tinyMCE.setAttrib(tinyMCE.linkElement, 'onclick', onclick); |
| | | tinyMCE.setAttrib(tinyMCE.linkElement, 'class', style_class); |
| | | } |
| | | |
| | | tinyMCE.execCommand('mceEndUndoLevel'); |
| | | } |
| | | }; |
| | | |
| | | tinyMCE.addTheme("advanced", TinyMCE_AdvancedTheme); |
| | | |
| | | // Add default buttons maps for advanced theme and all internal plugins |
| | | tinyMCE.addButtonMap(TinyMCE_AdvancedTheme._buttonMap); |
| | | /**
|
| | | * $Id: editor_template_src.js 766 2008-04-03 20:37:06Z spocke $
|
| | | *
|
| | | * @author Moxiecode
|
| | | * @copyright Copyright © 2004-2008, Moxiecode Systems AB, All rights reserved.
|
| | | */
|
| | |
|
| | | (function() {
|
| | | var DOM = tinymce.DOM, Event = tinymce.dom.Event, extend = tinymce.extend, each = tinymce.each, Cookie = tinymce.util.Cookie, lastExtID, explode = tinymce.explode;
|
| | |
|
| | | // Tell it to load theme specific language pack(s)
|
| | | tinymce.ThemeManager.requireLangPack('advanced');
|
| | |
|
| | | tinymce.create('tinymce.themes.AdvancedTheme', {
|
| | | // Control name lookup, format: title, command
|
| | | controls : {
|
| | | bold : ['bold_desc', 'Bold'],
|
| | | italic : ['italic_desc', 'Italic'],
|
| | | underline : ['underline_desc', 'Underline'],
|
| | | strikethrough : ['striketrough_desc', 'Strikethrough'],
|
| | | justifyleft : ['justifyleft_desc', 'JustifyLeft'],
|
| | | justifycenter : ['justifycenter_desc', 'JustifyCenter'],
|
| | | justifyright : ['justifyright_desc', 'JustifyRight'],
|
| | | justifyfull : ['justifyfull_desc', 'JustifyFull'],
|
| | | bullist : ['bullist_desc', 'InsertUnorderedList'],
|
| | | numlist : ['numlist_desc', 'InsertOrderedList'],
|
| | | outdent : ['outdent_desc', 'Outdent'],
|
| | | indent : ['indent_desc', 'Indent'],
|
| | | cut : ['cut_desc', 'Cut'],
|
| | | copy : ['copy_desc', 'Copy'],
|
| | | paste : ['paste_desc', 'Paste'],
|
| | | undo : ['undo_desc', 'Undo'],
|
| | | redo : ['redo_desc', 'Redo'],
|
| | | link : ['link_desc', 'mceLink'],
|
| | | unlink : ['unlink_desc', 'unlink'],
|
| | | image : ['image_desc', 'mceImage'],
|
| | | cleanup : ['cleanup_desc', 'mceCleanup'],
|
| | | help : ['help_desc', 'mceHelp'],
|
| | | code : ['code_desc', 'mceCodeEditor'],
|
| | | hr : ['hr_desc', 'InsertHorizontalRule'],
|
| | | removeformat : ['removeformat_desc', 'RemoveFormat'],
|
| | | sub : ['sub_desc', 'subscript'],
|
| | | sup : ['sup_desc', 'superscript'],
|
| | | forecolor : ['forecolor_desc', 'ForeColor'],
|
| | | forecolorpicker : ['forecolor_desc', 'mceForeColor'],
|
| | | backcolor : ['backcolor_desc', 'HiliteColor'],
|
| | | backcolorpicker : ['backcolor_desc', 'mceBackColor'],
|
| | | charmap : ['charmap_desc', 'mceCharMap'],
|
| | | visualaid : ['visualaid_desc', 'mceToggleVisualAid'],
|
| | | anchor : ['anchor_desc', 'mceInsertAnchor'],
|
| | | newdocument : ['newdocument_desc', 'mceNewDocument'],
|
| | | blockquote : ['blockquote_desc', 'mceBlockQuote']
|
| | | },
|
| | |
|
| | | stateControls : ['bold', 'italic', 'underline', 'strikethrough', 'bullist', 'numlist', 'justifyleft', 'justifycenter', 'justifyright', 'justifyfull', 'sub', 'sup', 'blockquote'],
|
| | |
|
| | | init : function(ed, url) {
|
| | | var t = this, s, v;
|
| | | |
| | | t.editor = ed;
|
| | | t.url = url;
|
| | | t.onResolveName = new tinymce.util.Dispatcher(this);
|
| | |
|
| | | // Default settings
|
| | | t.settings = s = extend({
|
| | | theme_advanced_path : true,
|
| | | theme_advanced_toolbar_location : 'bottom',
|
| | | theme_advanced_buttons1 : "bold,italic,underline,strikethrough,|,justifyleft,justifycenter,justifyright,justifyfull,|,styleselect,formatselect",
|
| | | theme_advanced_buttons2 : "bullist,numlist,|,outdent,indent,|,undo,redo,|,link,unlink,anchor,image,cleanup,help,code",
|
| | | theme_advanced_buttons3 : "hr,removeformat,visualaid,|,sub,sup,|,charmap",
|
| | | theme_advanced_blockformats : "p,address,pre,h1,h2,h3,h4,h5,h6",
|
| | | theme_advanced_toolbar_align : "center",
|
| | | theme_advanced_fonts : "Andale Mono=andale mono,times;Arial=arial,helvetica,sans-serif;Arial Black=arial black,avant garde;Book Antiqua=book antiqua,palatino;Comic Sans MS=comic sans ms,sans-serif;Courier New=courier new,courier;Georgia=georgia,palatino;Helvetica=helvetica;Impact=impact,chicago;Symbol=symbol;Tahoma=tahoma,arial,helvetica,sans-serif;Terminal=terminal,monaco;Times New Roman=times new roman,times;Trebuchet MS=trebuchet ms,geneva;Verdana=verdana,geneva;Webdings=webdings;Wingdings=wingdings,zapf dingbats",
|
| | | theme_advanced_font_sizes : "1,2,3,4,5,6,7",
|
| | | theme_advanced_more_colors : 1,
|
| | | theme_advanced_row_height : 23,
|
| | | theme_advanced_resize_horizontal : 1,
|
| | | theme_advanced_resizing_use_cookie : 1
|
| | | }, ed.settings);
|
| | |
|
| | | if ((v = s.theme_advanced_path_location) && v != 'none')
|
| | | s.theme_advanced_statusbar_location = s.theme_advanced_path_location;
|
| | |
|
| | | if (s.theme_advanced_statusbar_location == 'none')
|
| | | s.theme_advanced_statusbar_location = 0;
|
| | |
|
| | | // Init editor
|
| | | ed.onInit.add(function() {
|
| | | ed.onNodeChange.add(t._nodeChanged, t);
|
| | |
|
| | | if (ed.settings.content_css !== false)
|
| | | ed.dom.loadCSS(ed.baseURI.toAbsolute("themes/advanced/skins/" + ed.settings.skin + "/content.css"));
|
| | | });
|
| | |
|
| | | ed.onSetProgressState.add(function(ed, b, ti) {
|
| | | var co, id = ed.id, tb;
|
| | |
|
| | | if (b) {
|
| | | t.progressTimer = setTimeout(function() {
|
| | | co = ed.getContainer();
|
| | | co = co.insertBefore(DOM.create('DIV', {style : 'position:relative'}), co.firstChild);
|
| | | tb = DOM.get(ed.id + '_tbl');
|
| | |
|
| | | DOM.add(co, 'div', {id : id + '_blocker', 'class' : 'mceBlocker', style : {width : tb.clientWidth + 2, height : tb.clientHeight + 2}});
|
| | | DOM.add(co, 'div', {id : id + '_progress', 'class' : 'mceProgress', style : {left : tb.clientWidth / 2, top : tb.clientHeight / 2}});
|
| | | }, ti || 0);
|
| | | } else {
|
| | | DOM.remove(id + '_blocker');
|
| | | DOM.remove(id + '_progress');
|
| | | clearTimeout(t.progressTimer);
|
| | | }
|
| | | });
|
| | |
|
| | | DOM.loadCSS(ed.baseURI.toAbsolute(s.editor_css || "themes/advanced/skins/" + ed.settings.skin + "/ui.css"));
|
| | |
|
| | | if (s.skin_variant)
|
| | | DOM.loadCSS(ed.baseURI.toAbsolute(s.editor_css || "themes/advanced/skins/" + ed.settings.skin + "/ui_" + s.skin_variant + ".css"));
|
| | | },
|
| | |
|
| | | createControl : function(n, cf) {
|
| | | var cd, c;
|
| | |
|
| | | if (c = cf.createControl(n))
|
| | | return c;
|
| | |
|
| | | switch (n) {
|
| | | case "styleselect":
|
| | | return this._createStyleSelect();
|
| | |
|
| | | case "formatselect":
|
| | | return this._createBlockFormats();
|
| | |
|
| | | case "fontselect":
|
| | | return this._createFontSelect();
|
| | |
|
| | | case "fontsizeselect":
|
| | | return this._createFontSizeSelect();
|
| | |
|
| | | case "forecolor":
|
| | | return this._createForeColorMenu();
|
| | |
|
| | | case "backcolor":
|
| | | return this._createBackColorMenu();
|
| | | }
|
| | |
|
| | | if ((cd = this.controls[n]))
|
| | | return cf.createButton(n, {title : "advanced." + cd[0], cmd : cd[1], ui : cd[2], value : cd[3]});
|
| | | },
|
| | |
|
| | | execCommand : function(cmd, ui, val) {
|
| | | var f = this['_' + cmd];
|
| | |
|
| | | if (f) {
|
| | | f.call(this, ui, val);
|
| | | return true;
|
| | | }
|
| | |
|
| | | return false;
|
| | | },
|
| | |
|
| | | _importClasses : function() {
|
| | | var ed = this.editor, c = ed.controlManager.get('styleselect');
|
| | |
|
| | | if (c.getLength() == 0) {
|
| | | each(ed.dom.getClasses(), function(o) {
|
| | | c.add(o['class'], o['class']);
|
| | | });
|
| | | }
|
| | | },
|
| | |
|
| | | _createStyleSelect : function(n) {
|
| | | var t = this, ed = t.editor, cf = ed.controlManager, c = cf.createListBox('styleselect', {
|
| | | title : 'advanced.style_select',
|
| | | onselect : function(v) {
|
| | | if (c.selectedValue === v) {
|
| | | ed.execCommand('mceSetStyleInfo', 0, {command : 'removeformat'});
|
| | | c.select();
|
| | | return false;
|
| | | } else
|
| | | ed.execCommand('mceSetCSSClass', 0, v);
|
| | | }
|
| | | });
|
| | |
|
| | | if (c) {
|
| | | each(ed.getParam('theme_advanced_styles', '', 'hash'), function(v, k) {
|
| | | if (v)
|
| | | c.add(t.editor.translate(k), v);
|
| | | });
|
| | |
|
| | | c.onPostRender.add(function(ed, n) {
|
| | | Event.add(n, 'focus', t._importClasses, t);
|
| | | Event.add(n, 'mousedown', t._importClasses, t);
|
| | | });
|
| | | }
|
| | |
|
| | | return c;
|
| | | },
|
| | |
|
| | | _createFontSelect : function() {
|
| | | var c, t = this, ed = t.editor;
|
| | |
|
| | | c = ed.controlManager.createListBox('fontselect', {title : 'advanced.fontdefault', cmd : 'FontName'});
|
| | | if (c) {
|
| | | each(ed.getParam('theme_advanced_fonts', t.settings.theme_advanced_fonts, 'hash'), function(v, k) {
|
| | | c.add(ed.translate(k), v, {style : v.indexOf('dings') == -1 ? 'font-family:' + v : ''});
|
| | | });
|
| | | }
|
| | |
|
| | | return c;
|
| | | },
|
| | |
|
| | | _createFontSizeSelect : function() {
|
| | | var c, t = this, lo = [
|
| | | "1 (8 pt)",
|
| | | "2 (10 pt)",
|
| | | "3 (12 pt)",
|
| | | "4 (14 pt)",
|
| | | "5 (18 pt)",
|
| | | "6 (24 pt)",
|
| | | "7 (36 pt)"
|
| | | ], fz = [8, 10, 12, 14, 18, 24, 36];
|
| | |
|
| | | c = t.editor.controlManager.createListBox('fontsizeselect', {title : 'advanced.font_size', cmd : 'FontSize'});
|
| | | if (c) {
|
| | | each(explode(t.settings.theme_advanced_font_sizes), function(v) {
|
| | | c.add(lo[parseInt(v) - 1], v, {'style' : 'font-size:' + fz[v - 1] + 'pt', 'class' : 'mceFontSize' + v});
|
| | | });
|
| | | }
|
| | |
|
| | | return c;
|
| | | },
|
| | |
|
| | | _createBlockFormats : function() {
|
| | | var c, fmts = {
|
| | | p : 'advanced.paragraph',
|
| | | address : 'advanced.address',
|
| | | pre : 'advanced.pre',
|
| | | h1 : 'advanced.h1',
|
| | | h2 : 'advanced.h2',
|
| | | h3 : 'advanced.h3',
|
| | | h4 : 'advanced.h4',
|
| | | h5 : 'advanced.h5',
|
| | | h6 : 'advanced.h6',
|
| | | div : 'advanced.div',
|
| | | blockquote : 'advanced.blockquote',
|
| | | code : 'advanced.code',
|
| | | dt : 'advanced.dt',
|
| | | dd : 'advanced.dd',
|
| | | samp : 'advanced.samp'
|
| | | }, t = this;
|
| | |
|
| | | c = t.editor.controlManager.createListBox('formatselect', {title : 'advanced.block', cmd : 'FormatBlock'});
|
| | | if (c) {
|
| | | each(t.editor.getParam('theme_advanced_blockformats', t.settings.theme_advanced_blockformats, 'hash'), function(v, k) {
|
| | | c.add(t.editor.translate(k != v ? k : fmts[v]), v, {'class' : 'mce_formatPreview mce_' + v});
|
| | | });
|
| | | }
|
| | |
|
| | | return c;
|
| | | },
|
| | |
|
| | | _createForeColorMenu : function() {
|
| | | var c, t = this, s = t.settings, o = {}, v;
|
| | |
|
| | | if (s.theme_advanced_more_colors) {
|
| | | o.more_colors_func = function() {
|
| | | t._mceColorPicker(0, {
|
| | | color : c.value,
|
| | | func : function(co) {
|
| | | c.setColor(co);
|
| | | }
|
| | | });
|
| | | };
|
| | | }
|
| | |
|
| | | if (v = s.theme_advanced_text_colors)
|
| | | o.colors = v;
|
| | |
|
| | | o.title = 'advanced.forecolor_desc';
|
| | | o.cmd = 'ForeColor';
|
| | | o.scope = this;
|
| | |
|
| | | c = t.editor.controlManager.createColorSplitButton('forecolor', o);
|
| | |
|
| | | return c;
|
| | | },
|
| | |
|
| | | _createBackColorMenu : function() {
|
| | | var c, t = this, s = t.settings, o = {}, v;
|
| | |
|
| | | if (s.theme_advanced_more_colors) {
|
| | | o.more_colors_func = function() {
|
| | | t._mceColorPicker(0, {
|
| | | color : c.value,
|
| | | func : function(co) {
|
| | | c.setColor(co);
|
| | | }
|
| | | });
|
| | | };
|
| | | }
|
| | |
|
| | | if (v = s.theme_advanced_background_colors)
|
| | | o.colors = v;
|
| | |
|
| | | o.title = 'advanced.backcolor_desc';
|
| | | o.cmd = 'HiliteColor';
|
| | | o.scope = this;
|
| | |
|
| | | c = t.editor.controlManager.createColorSplitButton('backcolor', o);
|
| | |
|
| | | return c;
|
| | | },
|
| | |
|
| | | renderUI : function(o) {
|
| | | var n, ic, tb, t = this, ed = t.editor, s = t.settings, sc, p, nl;
|
| | |
|
| | | n = p = DOM.create('span', {id : ed.id + '_parent', 'class' : 'mceEditor ' + ed.settings.skin + 'Skin' + (s.skin_variant ? ' ' + ed.settings.skin + 'Skin' + t._ufirst(s.skin_variant) : '')});
|
| | |
|
| | | if (!DOM.boxModel)
|
| | | n = DOM.add(n, 'div', {'class' : 'mceOldBoxModel'});
|
| | |
|
| | | n = sc = DOM.add(n, 'table', {id : ed.id + '_tbl', 'class' : 'mceLayout', cellSpacing : 0, cellPadding : 0});
|
| | | n = tb = DOM.add(n, 'tbody');
|
| | |
|
| | | switch ((s.theme_advanced_layout_manager || '').toLowerCase()) {
|
| | | case "rowlayout":
|
| | | ic = t._rowLayout(s, tb, o);
|
| | | break;
|
| | |
|
| | | case "customlayout":
|
| | | ic = ed.execCallback("theme_advanced_custom_layout", s, tb, o, p);
|
| | | break;
|
| | |
|
| | | default:
|
| | | ic = t._simpleLayout(s, tb, o, p);
|
| | | }
|
| | |
|
| | | n = o.targetNode;
|
| | |
|
| | | // Add classes to first and last TRs
|
| | | nl = DOM.stdMode ? sc.getElementsByTagName('tr') : sc.rows; // Quick fix for IE 8
|
| | | DOM.addClass(nl[0], 'mceFirst');
|
| | | DOM.addClass(nl[nl.length - 1], 'mceLast');
|
| | |
|
| | | // Add classes to first and last TDs
|
| | | each(DOM.select('tr', tb), function(n) {
|
| | | DOM.addClass(n.firstChild, 'mceFirst');
|
| | | DOM.addClass(n.childNodes[n.childNodes.length - 1], 'mceLast');
|
| | | });
|
| | |
|
| | | if (DOM.get(s.theme_advanced_toolbar_container))
|
| | | DOM.get(s.theme_advanced_toolbar_container).appendChild(p);
|
| | | else
|
| | | DOM.insertAfter(p, n);
|
| | |
|
| | | Event.add(ed.id + '_path_row', 'click', function(e) {
|
| | | e = e.target;
|
| | |
|
| | | if (e.nodeName == 'A') {
|
| | | t._sel(e.className.replace(/^.*mcePath_([0-9]+).*$/, '$1'));
|
| | |
|
| | | return Event.cancel(e);
|
| | | }
|
| | | });
|
| | | /*
|
| | | if (DOM.get(ed.id + '_path_row')) {
|
| | | Event.add(ed.id + '_tbl', 'mouseover', function(e) {
|
| | | var re;
|
| | | |
| | | e = e.target;
|
| | |
|
| | | if (e.nodeName == 'SPAN' && DOM.hasClass(e.parentNode, 'mceButton')) {
|
| | | re = DOM.get(ed.id + '_path_row');
|
| | | t.lastPath = re.innerHTML;
|
| | | DOM.setHTML(re, e.parentNode.title);
|
| | | }
|
| | | });
|
| | |
|
| | | Event.add(ed.id + '_tbl', 'mouseout', function(e) {
|
| | | if (t.lastPath) {
|
| | | DOM.setHTML(ed.id + '_path_row', t.lastPath);
|
| | | t.lastPath = 0;
|
| | | }
|
| | | });
|
| | | }
|
| | | */
|
| | |
|
| | | if (!ed.getParam('accessibility_focus') || ed.getParam('tab_focus'))
|
| | | Event.add(DOM.add(p, 'a', {href : '#'}, '<!-- IE -->'), 'focus', function() {tinyMCE.get(ed.id).focus();});
|
| | |
|
| | | if (s.theme_advanced_toolbar_location == 'external')
|
| | | o.deltaHeight = 0;
|
| | |
|
| | | t.deltaHeight = o.deltaHeight;
|
| | | o.targetNode = null;
|
| | |
|
| | | return {
|
| | | iframeContainer : ic,
|
| | | editorContainer : ed.id + '_parent',
|
| | | sizeContainer : sc,
|
| | | deltaHeight : o.deltaHeight
|
| | | };
|
| | | },
|
| | |
|
| | | getInfo : function() {
|
| | | return {
|
| | | longname : 'Advanced theme',
|
| | | author : 'Moxiecode Systems AB',
|
| | | authorurl : 'http://tinymce.moxiecode.com',
|
| | | version : tinymce.majorVersion + "." + tinymce.minorVersion
|
| | | }
|
| | | },
|
| | |
|
| | | resizeBy : function(dw, dh) {
|
| | | var e = DOM.get(this.editor.id + '_tbl');
|
| | |
|
| | | this.resizeTo(e.clientWidth + dw, e.clientHeight + dh);
|
| | | },
|
| | |
|
| | | resizeTo : function(w, h) {
|
| | | var ed = this.editor, s = ed.settings, e = DOM.get(ed.id + '_tbl'), ifr = DOM.get(ed.id + '_ifr'), dh;
|
| | |
|
| | | // Boundery fix box
|
| | | w = Math.max(s.theme_advanced_resizing_min_width || 100, w);
|
| | | h = Math.max(s.theme_advanced_resizing_min_height || 100, h);
|
| | | w = Math.min(s.theme_advanced_resizing_max_width || 0xFFFF, w);
|
| | | h = Math.min(s.theme_advanced_resizing_max_height || 0xFFFF, h);
|
| | |
|
| | | // Calc difference between iframe and container
|
| | | dh = e.clientHeight - ifr.clientHeight;
|
| | |
|
| | | // Resize iframe and container
|
| | | DOM.setStyle(ifr, 'height', h - dh);
|
| | | DOM.setStyles(e, {width : w, height : h});
|
| | | },
|
| | |
|
| | | destroy : function() {
|
| | | var id = this.editor.id;
|
| | |
|
| | | Event.clear(id + '_resize');
|
| | | Event.clear(id + '_path_row');
|
| | | Event.clear(id + '_external_close');
|
| | | },
|
| | |
|
| | | // Internal functions
|
| | |
|
| | | _simpleLayout : function(s, tb, o, p) {
|
| | | var t = this, ed = t.editor, lo = s.theme_advanced_toolbar_location, sl = s.theme_advanced_statusbar_location, n, ic, etb, c;
|
| | |
|
| | | // Create toolbar container at top
|
| | | if (lo == 'top')
|
| | | t._addToolbars(tb, o);
|
| | |
|
| | | // Create external toolbar
|
| | | if (lo == 'external') {
|
| | | n = c = DOM.create('div', {style : 'position:relative'});
|
| | | n = DOM.add(n, 'div', {id : ed.id + '_external', 'class' : 'mceExternalToolbar'});
|
| | | DOM.add(n, 'a', {id : ed.id + '_external_close', href : 'javascript:;', 'class' : 'mceExternalClose'});
|
| | | n = DOM.add(n, 'table', {id : ed.id + '_tblext', cellSpacing : 0, cellPadding : 0});
|
| | | etb = DOM.add(n, 'tbody');
|
| | |
|
| | | if (p.firstChild.className == 'mceOldBoxModel')
|
| | | p.firstChild.appendChild(c);
|
| | | else
|
| | | p.insertBefore(c, p.firstChild);
|
| | |
|
| | | t._addToolbars(etb, o);
|
| | |
|
| | | ed.onMouseUp.add(function() {
|
| | | var e = DOM.get(ed.id + '_external');
|
| | | DOM.show(e);
|
| | |
|
| | | DOM.hide(lastExtID);
|
| | |
|
| | | var f = Event.add(ed.id + '_external_close', 'click', function() {
|
| | | DOM.hide(ed.id + '_external');
|
| | | Event.remove(ed.id + '_external_close', 'click', f);
|
| | | });
|
| | |
|
| | | DOM.show(e);
|
| | | DOM.setStyle(e, 'top', 0 - DOM.getRect(ed.id + '_tblext').h - 1);
|
| | |
|
| | | // Fixes IE rendering bug
|
| | | DOM.hide(e);
|
| | | DOM.show(e);
|
| | | e.style.filter = '';
|
| | |
|
| | | lastExtID = ed.id + '_external';
|
| | |
|
| | | e = null;
|
| | | });
|
| | | }
|
| | |
|
| | | if (sl == 'top')
|
| | | t._addStatusBar(tb, o);
|
| | |
|
| | | // Create iframe container
|
| | | if (!s.theme_advanced_toolbar_container) {
|
| | | n = DOM.add(tb, 'tr');
|
| | | n = ic = DOM.add(n, 'td', {'class' : 'mceIframeContainer'});
|
| | | }
|
| | |
|
| | | // Create toolbar container at bottom
|
| | | if (lo == 'bottom')
|
| | | t._addToolbars(tb, o);
|
| | |
|
| | | if (sl == 'bottom')
|
| | | t._addStatusBar(tb, o);
|
| | |
|
| | | return ic;
|
| | | },
|
| | |
|
| | | _rowLayout : function(s, tb, o) {
|
| | | var t = this, ed = t.editor, dc, da, cf = ed.controlManager, n, ic, to, a;
|
| | |
|
| | | dc = s.theme_advanced_containers_default_class || '';
|
| | | da = s.theme_advanced_containers_default_align || 'center';
|
| | |
|
| | | each(explode(s.theme_advanced_containers || ''), function(c, i) {
|
| | | var v = s['theme_advanced_container_' + c] || '';
|
| | |
|
| | | switch (c.toLowerCase()) {
|
| | | case 'mceeditor':
|
| | | n = DOM.add(tb, 'tr');
|
| | | n = ic = DOM.add(n, 'td', {'class' : 'mceIframeContainer'});
|
| | | break;
|
| | |
|
| | | case 'mceelementpath':
|
| | | t._addStatusBar(tb, o);
|
| | | break;
|
| | |
|
| | | default:
|
| | | a = s['theme_advanced_container_' + c + '_align'].toLowerCase();
|
| | | a = 'mce' + t._ufirst(a);
|
| | |
|
| | | n = DOM.add(DOM.add(tb, 'tr'), 'td', {
|
| | | 'class' : 'mceToolbar ' + (s['theme_advanced_container_' + c + '_class'] || dc) + ' ' + a || da
|
| | | });
|
| | |
|
| | | to = cf.createToolbar("toolbar" + i);
|
| | | t._addControls(v, to);
|
| | | DOM.setHTML(n, to.renderHTML());
|
| | | o.deltaHeight -= s.theme_advanced_row_height;
|
| | | }
|
| | | });
|
| | |
|
| | | return ic;
|
| | | },
|
| | |
|
| | | _addControls : function(v, tb) {
|
| | | var t = this, s = t.settings, di, cf = t.editor.controlManager;
|
| | |
|
| | | if (s.theme_advanced_disable && !t._disabled) {
|
| | | di = {};
|
| | |
|
| | | each(explode(s.theme_advanced_disable), function(v) {
|
| | | di[v] = 1;
|
| | | });
|
| | |
|
| | | t._disabled = di;
|
| | | } else
|
| | | di = t._disabled;
|
| | |
|
| | | each(explode(v), function(n) {
|
| | | var c;
|
| | |
|
| | | if (di && di[n])
|
| | | return;
|
| | |
|
| | | // Compatiblity with 2.x
|
| | | if (n == 'tablecontrols') {
|
| | | each(["table","|","row_props","cell_props","|","row_before","row_after","delete_row","|","col_before","col_after","delete_col","|","split_cells","merge_cells"], function(n) {
|
| | | n = t.createControl(n, cf);
|
| | |
|
| | | if (n)
|
| | | tb.add(n);
|
| | | });
|
| | |
|
| | | return;
|
| | | }
|
| | |
|
| | | c = t.createControl(n, cf);
|
| | |
|
| | | if (c)
|
| | | tb.add(c);
|
| | | });
|
| | | },
|
| | |
|
| | | _addToolbars : function(c, o) {
|
| | | var t = this, i, tb, ed = t.editor, s = t.settings, v, cf = ed.controlManager, di, n, h = [], a;
|
| | |
|
| | | a = s.theme_advanced_toolbar_align.toLowerCase();
|
| | | a = 'mce' + t._ufirst(a);
|
| | |
|
| | | n = DOM.add(DOM.add(c, 'tr'), 'td', {'class' : 'mceToolbar ' + a});
|
| | |
|
| | | if (!ed.getParam('accessibility_focus') || ed.getParam('tab_focus'))
|
| | | h.push(DOM.createHTML('a', {href : '#', onfocus : 'tinyMCE.get(\'' + ed.id + '\').focus();'}, '<!-- IE -->'));
|
| | |
|
| | | h.push(DOM.createHTML('a', {href : '#', accesskey : 'q', title : ed.getLang("advanced.toolbar_focus")}, '<!-- IE -->'));
|
| | |
|
| | | // Create toolbar and add the controls
|
| | | for (i=1; (v = s['theme_advanced_buttons' + i]); i++) {
|
| | | tb = cf.createToolbar("toolbar" + i, {'class' : 'mceToolbarRow' + i});
|
| | |
|
| | | if (s['theme_advanced_buttons' + i + '_add'])
|
| | | v += ',' + s['theme_advanced_buttons' + i + '_add'];
|
| | |
|
| | | if (s['theme_advanced_buttons' + i + '_add_before'])
|
| | | v = s['theme_advanced_buttons' + i + '_add_before'] + ',' + v;
|
| | |
|
| | | t._addControls(v, tb);
|
| | |
|
| | | //n.appendChild(n = tb.render());
|
| | | h.push(tb.renderHTML());
|
| | |
|
| | | o.deltaHeight -= s.theme_advanced_row_height;
|
| | | }
|
| | |
|
| | | h.push(DOM.createHTML('a', {href : '#', accesskey : 'z', title : ed.getLang("advanced.toolbar_focus"), onfocus : 'tinyMCE.getInstanceById(\'' + ed.id + '\').focus();'}, '<!-- IE -->'));
|
| | | DOM.setHTML(n, h.join(''));
|
| | | },
|
| | |
|
| | | _addStatusBar : function(tb, o) {
|
| | | var n, t = this, ed = t.editor, s = t.settings, r, mf, me, td;
|
| | |
|
| | | n = DOM.add(tb, 'tr');
|
| | | n = td = DOM.add(n, 'td', {'class' : 'mceStatusbar'});
|
| | | n = DOM.add(n, 'div', {id : ed.id + '_path_row'}, s.theme_advanced_path ? ed.translate('advanced.path') + ': ' : ' ');
|
| | | DOM.add(n, 'a', {href : '#', accesskey : 'x'});
|
| | |
|
| | | if (s.theme_advanced_resizing && !tinymce.isOldWebKit) {
|
| | | DOM.add(td, 'a', {id : ed.id + '_resize', href : 'javascript:;', onclick : "return false;", 'class' : 'mceResize'});
|
| | |
|
| | | if (s.theme_advanced_resizing_use_cookie) {
|
| | | ed.onPostRender.add(function() {
|
| | | var o = Cookie.getHash("TinyMCE_" + ed.id + "_size"), c = DOM.get(ed.id + '_tbl');
|
| | |
|
| | | if (!o)
|
| | | return;
|
| | |
|
| | | if (s.theme_advanced_resize_horizontal)
|
| | | c.style.width = Math.max(10, o.cw) + 'px';
|
| | |
|
| | | c.style.height = Math.max(10, o.ch) + 'px';
|
| | | DOM.get(ed.id + '_ifr').style.height = Math.max(10, parseInt(o.ch) + t.deltaHeight) + 'px';
|
| | | });
|
| | | }
|
| | |
|
| | | ed.onPostRender.add(function() {
|
| | | Event.add(ed.id + '_resize', 'mousedown', function(e) {
|
| | | var c, p, w, h, n, pa;
|
| | |
|
| | | // Measure container
|
| | | c = DOM.get(ed.id + '_tbl');
|
| | | w = c.clientWidth;
|
| | | h = c.clientHeight;
|
| | |
|
| | | miw = s.theme_advanced_resizing_min_width || 100;
|
| | | mih = s.theme_advanced_resizing_min_height || 100;
|
| | | maw = s.theme_advanced_resizing_max_width || 0xFFFF;
|
| | | mah = s.theme_advanced_resizing_max_height || 0xFFFF;
|
| | |
|
| | | // Setup placeholder
|
| | | p = DOM.add(DOM.get(ed.id + '_parent'), 'div', {'class' : 'mcePlaceHolder'});
|
| | | DOM.setStyles(p, {width : w, height : h});
|
| | |
|
| | | // Replace with placeholder
|
| | | DOM.hide(c);
|
| | | DOM.show(p);
|
| | |
|
| | | // Create internal resize obj
|
| | | r = {
|
| | | x : e.screenX,
|
| | | y : e.screenY,
|
| | | w : w,
|
| | | h : h,
|
| | | dx : null,
|
| | | dy : null
|
| | | };
|
| | |
|
| | | // Start listening
|
| | | mf = Event.add(DOM.doc, 'mousemove', function(e) {
|
| | | var w, h;
|
| | |
|
| | | // Calc delta values
|
| | | r.dx = e.screenX - r.x;
|
| | | r.dy = e.screenY - r.y;
|
| | |
|
| | | // Boundery fix box
|
| | | w = Math.max(miw, r.w + r.dx);
|
| | | h = Math.max(mih, r.h + r.dy);
|
| | | w = Math.min(maw, w);
|
| | | h = Math.min(mah, h);
|
| | |
|
| | | // Resize placeholder
|
| | | if (s.theme_advanced_resize_horizontal)
|
| | | p.style.width = w + 'px';
|
| | |
|
| | | p.style.height = h + 'px';
|
| | |
|
| | | return Event.cancel(e);
|
| | | });
|
| | |
|
| | | me = Event.add(DOM.doc, 'mouseup', function(e) {
|
| | | var ifr;
|
| | |
|
| | | // Stop listening
|
| | | Event.remove(DOM.doc, 'mousemove', mf);
|
| | | Event.remove(DOM.doc, 'mouseup', me);
|
| | |
|
| | | c.style.display = '';
|
| | | DOM.remove(p);
|
| | |
|
| | | if (r.dx === null)
|
| | | return;
|
| | |
|
| | | ifr = DOM.get(ed.id + '_ifr');
|
| | |
|
| | | if (s.theme_advanced_resize_horizontal)
|
| | | c.style.width = Math.max(10, r.w + r.dx) + 'px';
|
| | |
|
| | | c.style.height = Math.max(10, r.h + r.dy) + 'px';
|
| | | ifr.style.height = Math.max(10, ifr.clientHeight + r.dy) + 'px';
|
| | |
|
| | | if (s.theme_advanced_resizing_use_cookie) {
|
| | | Cookie.setHash("TinyMCE_" + ed.id + "_size", {
|
| | | cw : r.w + r.dx,
|
| | | ch : r.h + r.dy
|
| | | });
|
| | | }
|
| | | });
|
| | |
|
| | | return Event.cancel(e);
|
| | | });
|
| | | });
|
| | | }
|
| | |
|
| | | o.deltaHeight -= 21;
|
| | | n = tb = null;
|
| | | },
|
| | |
|
| | | _nodeChanged : function(ed, cm, n, co) {
|
| | | var t = this, p, de = 0, v, c, s = t.settings;
|
| | |
|
| | | tinymce.each(t.stateControls, function(c) {
|
| | | cm.setActive(c, ed.queryCommandState(t.controls[c][1]));
|
| | | });
|
| | |
|
| | | cm.setActive('visualaid', ed.hasVisual);
|
| | | cm.setDisabled('undo', !ed.undoManager.hasUndo() && !ed.typing);
|
| | | cm.setDisabled('redo', !ed.undoManager.hasRedo());
|
| | | cm.setDisabled('outdent', !ed.queryCommandState('Outdent'));
|
| | |
|
| | | p = DOM.getParent(n, 'A');
|
| | | if (c = cm.get('link')) {
|
| | | if (!p || !p.name) {
|
| | | c.setDisabled(!p && co);
|
| | | c.setActive(!!p);
|
| | | }
|
| | | }
|
| | |
|
| | | if (c = cm.get('unlink')) {
|
| | | c.setDisabled(!p && co);
|
| | | c.setActive(!!p && !p.name);
|
| | | }
|
| | |
|
| | | if (c = cm.get('anchor')) {
|
| | | c.setActive(!!p && p.name);
|
| | |
|
| | | if (tinymce.isWebKit) {
|
| | | p = DOM.getParent(n, 'IMG');
|
| | | c.setActive(!!p && DOM.getAttrib(p, 'mce_name') == 'a');
|
| | | }
|
| | | }
|
| | |
|
| | | p = DOM.getParent(n, 'IMG');
|
| | | if (c = cm.get('image'))
|
| | | c.setActive(!!p && n.className.indexOf('mceItem') == -1);
|
| | |
|
| | | if (c = cm.get('styleselect')) {
|
| | | if (n.className) {
|
| | | t._importClasses();
|
| | | c.select(n.className);
|
| | | } else
|
| | | c.select();
|
| | | }
|
| | |
|
| | | if (c = cm.get('formatselect')) {
|
| | | p = DOM.getParent(n, DOM.isBlock);
|
| | |
|
| | | if (p)
|
| | | c.select(p.nodeName.toLowerCase());
|
| | | }
|
| | |
|
| | | if (c = cm.get('fontselect'))
|
| | | c.select(ed.queryCommandValue('FontName'));
|
| | |
|
| | | if (c = cm.get('fontsizeselect'))
|
| | | c.select(ed.queryCommandValue('FontSize'));
|
| | |
|
| | | if (s.theme_advanced_path && s.theme_advanced_statusbar_location) {
|
| | | p = DOM.get(ed.id + '_path') || DOM.add(ed.id + '_path_row', 'span', {id : ed.id + '_path'});
|
| | | DOM.setHTML(p, '');
|
| | |
|
| | | ed.dom.getParent(n, function(n) {
|
| | | var na = n.nodeName.toLowerCase(), u, pi, ti = '';
|
| | |
|
| | | // Ignore non element and hidden elements
|
| | | if (n.nodeType != 1 || (DOM.hasClass(n, 'mceItemHidden') || DOM.hasClass(n, 'mceItemRemoved')))
|
| | | return;
|
| | |
|
| | | // Fake name
|
| | | if (v = DOM.getAttrib(n, 'mce_name'))
|
| | | na = v;
|
| | | |
| | | // Handle prefix
|
| | | if (tinymce.isIE && n.scopeName !== 'HTML')
|
| | | na = n.scopeName + ':' + na;
|
| | |
|
| | | // Remove internal prefix
|
| | | na = na.replace(/mce\:/g, '');
|
| | |
|
| | | // Handle node name
|
| | | switch (na) {
|
| | | case 'b':
|
| | | na = 'strong';
|
| | | break;
|
| | |
|
| | | case 'i':
|
| | | na = 'em';
|
| | | break;
|
| | |
|
| | | case 'img':
|
| | | if (v = DOM.getAttrib(n, 'src'))
|
| | | ti += 'src: ' + v + ' ';
|
| | |
|
| | | break;
|
| | |
|
| | | case 'a':
|
| | | if (v = DOM.getAttrib(n, 'name')) {
|
| | | ti += 'name: ' + v + ' ';
|
| | | na += '#' + v;
|
| | | }
|
| | |
|
| | | if (v = DOM.getAttrib(n, 'href'))
|
| | | ti += 'href: ' + v + ' ';
|
| | |
|
| | | break;
|
| | |
|
| | | case 'font':
|
| | | if (s.convert_fonts_to_spans)
|
| | | na = 'span';
|
| | |
|
| | | if (v = DOM.getAttrib(n, 'face'))
|
| | | ti += 'font: ' + v + ' ';
|
| | |
|
| | | if (v = DOM.getAttrib(n, 'size'))
|
| | | ti += 'size: ' + v + ' ';
|
| | |
|
| | | if (v = DOM.getAttrib(n, 'color'))
|
| | | ti += 'color: ' + v + ' ';
|
| | |
|
| | | break;
|
| | |
|
| | | case 'span':
|
| | | if (v = DOM.getAttrib(n, 'style'))
|
| | | ti += 'style: ' + v + ' ';
|
| | |
|
| | | break;
|
| | | }
|
| | |
|
| | | if (v = DOM.getAttrib(n, 'id'))
|
| | | ti += 'id: ' + v + ' ';
|
| | |
|
| | | if (v = n.className) {
|
| | | v = v.replace(/(webkit-[\w\-]+|Apple-[\w\-]+|mceItem\w+|mceVisualAid)/g, '');
|
| | |
|
| | | if (v && v.indexOf('mceItem') == -1) {
|
| | | ti += 'class: ' + v + ' ';
|
| | |
|
| | | if (DOM.isBlock(n) || na == 'img' || na == 'span')
|
| | | na += '.' + v;
|
| | | }
|
| | | }
|
| | |
|
| | | na = na.replace(/(html:)/g, '');
|
| | | na = {name : na, node : n, title : ti};
|
| | | t.onResolveName.dispatch(t, na);
|
| | | ti = na.title;
|
| | | na = na.name;
|
| | |
|
| | | //u = "javascript:tinymce.EditorManager.get('" + ed.id + "').theme._sel('" + (de++) + "');";
|
| | | pi = DOM.create('a', {'href' : "javascript:;", onmousedown : "return false;", title : ti, 'class' : 'mcePath_' + (de++)}, na);
|
| | |
|
| | | if (p.hasChildNodes()) {
|
| | | p.insertBefore(DOM.doc.createTextNode(' \u00bb '), p.firstChild);
|
| | | p.insertBefore(pi, p.firstChild);
|
| | | } else
|
| | | p.appendChild(pi);
|
| | | }, ed.getBody());
|
| | | }
|
| | | },
|
| | |
|
| | | // Commands gets called by execCommand
|
| | |
|
| | | _sel : function(v) {
|
| | | this.editor.execCommand('mceSelectNodeDepth', false, v);
|
| | | },
|
| | |
|
| | | _mceInsertAnchor : function(ui, v) {
|
| | | var ed = this.editor;
|
| | |
|
| | | ed.windowManager.open({
|
| | | url : tinymce.baseURL + '/themes/advanced/anchor.htm',
|
| | | width : 320 + parseInt(ed.getLang('advanced.anchor_delta_width', 0)),
|
| | | height : 90 + parseInt(ed.getLang('advanced.anchor_delta_height', 0)),
|
| | | inline : true
|
| | | }, {
|
| | | theme_url : this.url
|
| | | });
|
| | | },
|
| | |
|
| | | _mceCharMap : function() {
|
| | | var ed = this.editor;
|
| | |
|
| | | ed.windowManager.open({
|
| | | url : tinymce.baseURL + '/themes/advanced/charmap.htm',
|
| | | width : 550 + parseInt(ed.getLang('advanced.charmap_delta_width', 0)),
|
| | | height : 250 + parseInt(ed.getLang('advanced.charmap_delta_height', 0)),
|
| | | inline : true
|
| | | }, {
|
| | | theme_url : this.url
|
| | | });
|
| | | },
|
| | |
|
| | | _mceHelp : function() {
|
| | | var ed = this.editor;
|
| | |
|
| | | ed.windowManager.open({
|
| | | url : tinymce.baseURL + '/themes/advanced/about.htm',
|
| | | width : 480,
|
| | | height : 380,
|
| | | inline : true
|
| | | }, {
|
| | | theme_url : this.url
|
| | | });
|
| | | },
|
| | |
|
| | | _mceColorPicker : function(u, v) {
|
| | | var ed = this.editor;
|
| | |
|
| | | v = v || {};
|
| | |
|
| | | ed.windowManager.open({
|
| | | url : tinymce.baseURL + '/themes/advanced/color_picker.htm',
|
| | | width : 375 + parseInt(ed.getLang('advanced.colorpicker_delta_width', 0)),
|
| | | height : 250 + parseInt(ed.getLang('advanced.colorpicker_delta_height', 0)),
|
| | | close_previous : false,
|
| | | inline : true
|
| | | }, {
|
| | | input_color : v.color,
|
| | | func : v.func,
|
| | | theme_url : this.url
|
| | | });
|
| | | },
|
| | |
|
| | | _mceCodeEditor : function(ui, val) {
|
| | | var ed = this.editor;
|
| | |
|
| | | ed.windowManager.open({
|
| | | url : tinymce.baseURL + '/themes/advanced/source_editor.htm',
|
| | | width : parseInt(ed.getParam("theme_advanced_source_editor_width", 720)),
|
| | | height : parseInt(ed.getParam("theme_advanced_source_editor_height", 580)),
|
| | | inline : true,
|
| | | resizable : true,
|
| | | maximizable : true
|
| | | }, {
|
| | | theme_url : this.url
|
| | | });
|
| | | },
|
| | |
|
| | | _mceImage : function(ui, val) {
|
| | | var ed = this.editor;
|
| | |
|
| | | // Internal image object like a flash placeholder
|
| | | if (ed.dom.getAttrib(ed.selection.getNode(), 'class').indexOf('mceItem') != -1)
|
| | | return;
|
| | |
|
| | | ed.windowManager.open({
|
| | | url : tinymce.baseURL + '/themes/advanced/image.htm',
|
| | | width : 355 + parseInt(ed.getLang('advanced.image_delta_width', 0)),
|
| | | height : 275 + parseInt(ed.getLang('advanced.image_delta_height', 0)),
|
| | | inline : true
|
| | | }, {
|
| | | theme_url : this.url
|
| | | });
|
| | | },
|
| | |
|
| | | _mceLink : function(ui, val) {
|
| | | var ed = this.editor;
|
| | |
|
| | | ed.windowManager.open({
|
| | | url : tinymce.baseURL + '/themes/advanced/link.htm',
|
| | | width : 310 + parseInt(ed.getLang('advanced.link_delta_width', 0)),
|
| | | height : 200 + parseInt(ed.getLang('advanced.link_delta_height', 0)),
|
| | | inline : true
|
| | | }, {
|
| | | theme_url : this.url
|
| | | });
|
| | | },
|
| | |
|
| | | _mceNewDocument : function() {
|
| | | var ed = this.editor;
|
| | |
|
| | | ed.windowManager.confirm('advanced.newdocument', function(s) {
|
| | | if (s)
|
| | | ed.execCommand('mceSetContent', false, '');
|
| | | });
|
| | | },
|
| | |
|
| | | _mceForeColor : function() {
|
| | | var t = this;
|
| | |
|
| | | this._mceColorPicker(0, {
|
| | | func : function(co) {
|
| | | t.editor.execCommand('ForeColor', false, co);
|
| | | }
|
| | | });
|
| | | },
|
| | |
|
| | | _mceBackColor : function() {
|
| | | var t = this;
|
| | |
|
| | | this._mceColorPicker(0, {
|
| | | func : function(co) {
|
| | | t.editor.execCommand('HiliteColor', false, co);
|
| | | }
|
| | | });
|
| | | },
|
| | |
|
| | | _ufirst : function(s) {
|
| | | return s.substring(0, 1).toUpperCase() + s.substring(1);
|
| | | }
|
| | | });
|
| | |
|
| | | tinymce.ThemeManager.add('advanced', tinymce.themes.AdvancedTheme);
|
| | | }()); |
| | |
| | | <html xmlns="http://www.w3.org/1999/xhtml"> |
| | | <head> |
| | | <title>{$lang_insert_image_title}</title> |
| | | <script language="javascript" type="text/javascript" src="../../tiny_mce_popup.js"></script> |
| | | <script language="javascript" type="text/javascript" src="../../utils/mctabs.js"></script> |
| | | <script language="javascript" type="text/javascript" src="../../utils/form_utils.js"></script> |
| | | <script language="javascript" type="text/javascript" src="jscripts/image.js"></script> |
| | | <base target="_self" /> |
| | | </head> |
| | | <body id="image" onload="tinyMCEPopup.executeOnLoad('init();');" style="display: none"> |
| | | <form onsubmit="insertImage();return false;" action="#"> |
| | | <div class="tabs"> |
| | | <ul> |
| | | <li id="general_tab" class="current"><span><a href="javascript:mcTabs.displayTab('general_tab','general_panel');" onmousedown="return false;">{$lang_insert_image_title}</a></span></li> |
| | | </ul> |
| | | </div> |
| | | |
| | | <div class="panel_wrapper"> |
| | | <div id="general_panel" class="panel current"> |
| | | <table border="0" cellpadding="4" cellspacing="0"> |
| | | <tr> |
| | | <td nowrap="nowrap"><label for="src">{$lang_insert_image_src}</label></td> |
| | | <td><table border="0" cellspacing="0" cellpadding="0"> |
| | | <tr> |
| | | <td><input id="src" name="src" type="text" value="" style="width: 200px" onchange="getImageData();" /></td> |
| | | <td id="srcbrowsercontainer"> </td> |
| | | </tr> |
| | | </table></td> |
| | | </tr> |
| | | <!-- Image list --> |
| | | <script language="javascript"> |
| | | if (typeof(tinyMCEImageList) != "undefined" && tinyMCEImageList.length > 0) { |
| | | var html = ""; |
| | | |
| | | html += '<tr><td><label for="image_list">{$lang_image_list}</label></td>'; |
| | | html += '<td><select id="image_list" name="image_list" style="width: 200px" onchange="this.form.src.value=this.options[this.selectedIndex].value;resetImageData();getImageData();">'; |
| | | html += '<option value="">---</option>'; |
| | | |
| | | for (var i=0; i<tinyMCEImageList.length; i++) |
| | | html += '<option value="' + tinyMCEImageList[i][1] + '">' + tinyMCEImageList[i][0] + '</option>'; |
| | | |
| | | html += '</select></td></tr>'; |
| | | |
| | | document.write(html); |
| | | } |
| | | </script> |
| | | <!-- /Image list --> |
| | | <tr> |
| | | <td nowrap="nowrap"><label for="alt">{$lang_insert_image_alt}</label></td> |
| | | <td><input id="alt" name="alt" type="text" value="" style="width: 200px" /></td> |
| | | </tr> |
| | | <tr> |
| | | <td nowrap="nowrap"><label for="align">{$lang_insert_image_align}</label></td> |
| | | <td><select id="align" name="align"> |
| | | <option value="">{$lang_insert_image_align_default}</option> |
| | | <option value="baseline">{$lang_insert_image_align_baseline}</option> |
| | | <option value="top">{$lang_insert_image_align_top}</option> |
| | | <option value="middle">{$lang_insert_image_align_middle}</option> |
| | | <option value="bottom">{$lang_insert_image_align_bottom}</option> |
| | | <option value="texttop">{$lang_insert_image_align_texttop}</option> |
| | | <option value="absmiddle">{$lang_insert_image_align_absmiddle}</option> |
| | | <option value="absbottom">{$lang_insert_image_align_absbottom}</option> |
| | | <option value="left">{$lang_insert_image_align_left}</option> |
| | | <option value="right">{$lang_insert_image_align_right}</option> |
| | | </select></td> |
| | | </tr> |
| | | <tr> |
| | | <td nowrap="nowrap"><label for="width">{$lang_insert_image_dimensions}</label></td> |
| | | <td><input id="width" name="width" type="text" value="" size="3" maxlength="5" /> |
| | | x |
| | | <input id="height" name="height" type="text" value="" size="3" maxlength="5" /></td> |
| | | </tr> |
| | | <tr> |
| | | <td nowrap="nowrap"><label for="border">{$lang_insert_image_border}</label></td> |
| | | <td><input id="border" name="border" type="text" value="" size="3" maxlength="3" /></td> |
| | | </tr> |
| | | <tr> |
| | | <td nowrap="nowrap"><label for="vspace">{$lang_insert_image_vspace}</label></td> |
| | | <td><input id="vspace" name="vspace" type="text" value="" size="3" maxlength="3" /></td> |
| | | </tr> |
| | | <tr> |
| | | <td nowrap="nowrap"><label for="hspace">{$lang_insert_image_hspace}</label></td> |
| | | <td><input id="hspace" name="hspace" type="text" value="" size="3" maxlength="3" /></td> |
| | | </tr> |
| | | </table> |
| | | </div> |
| | | </div> |
| | | |
| | | <div class="mceActionPanel"> |
| | | <div style="float: left"> |
| | | <input type="button" id="insert" name="insert" value="{$lang_insert}" onclick="insertImage();" /> |
| | | </div> |
| | | |
| | | <div style="float: right"> |
| | | <input type="button" id="cancel" name="cancel" value="{$lang_cancel}" onclick="tinyMCEPopup.close();" /> |
| | | </div> |
| | | </div> |
| | | </form> |
| | | </body> |
| | | </html> |
| | | <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
|
| | | <html xmlns="http://www.w3.org/1999/xhtml">
|
| | | <head>
|
| | | <title>{#advanced_dlg.image_title}</title>
|
| | | <script type="text/javascript" src="../../tiny_mce_popup.js"></script>
|
| | | <script type="text/javascript" src="../../utils/mctabs.js"></script>
|
| | | <script type="text/javascript" src="../../utils/form_utils.js"></script>
|
| | | <script type="text/javascript" src="js/image.js"></script>
|
| | | <base target="_self" />
|
| | | </head>
|
| | | <body id="image" style="display: none">
|
| | | <form onsubmit="ImageDialog.update();return false;" action="#">
|
| | | <div class="tabs">
|
| | | <ul>
|
| | | <li id="general_tab" class="current"><span><a href="javascript:mcTabs.displayTab('general_tab','general_panel');" onmousedown="return false;">{#advanced_dlg.image_title}</a></span></li>
|
| | | </ul>
|
| | | </div>
|
| | |
|
| | | <div class="panel_wrapper">
|
| | | <div id="general_panel" class="panel current">
|
| | | <table border="0" cellpadding="4" cellspacing="0">
|
| | | <tr>
|
| | | <td nowrap="nowrap"><label for="src">{#advanced_dlg.image_src}</label></td>
|
| | | <td><table border="0" cellspacing="0" cellpadding="0">
|
| | | <tr>
|
| | | <td><input id="src" name="src" type="text" class="mceFocus" value="" style="width: 200px" onchange="ImageDialog.getImageData();" /></td>
|
| | | <td id="srcbrowsercontainer"> </td>
|
| | | </tr>
|
| | | </table></td>
|
| | | </tr>
|
| | | <tr>
|
| | | <td><label for="image_list">{#advanced_dlg.image_list}</label></td>
|
| | | <td><select id="image_list" name="image_list" onchange="document.getElementById('src').value=this.options[this.selectedIndex].value;document.getElementById('alt').value=this.options[this.selectedIndex].text;"></select></td>
|
| | | </tr>
|
| | | <tr>
|
| | | <td nowrap="nowrap"><label for="alt">{#advanced_dlg.image_alt}</label></td>
|
| | | <td><input id="alt" name="alt" type="text" value="" style="width: 200px" /></td>
|
| | | </tr>
|
| | | <tr>
|
| | | <td nowrap="nowrap"><label for="align">{#advanced_dlg.image_align}</label></td>
|
| | | <td><select id="align" name="align" onchange="ImageDialog.updateStyle();">
|
| | | <option value="">{#not_set}</option>
|
| | | <option value="baseline">{#advanced_dlg.image_align_baseline}</option>
|
| | | <option value="top">{#advanced_dlg.image_align_top}</option>
|
| | | <option value="middle">{#advanced_dlg.image_align_middle}</option>
|
| | | <option value="bottom">{#advanced_dlg.image_align_bottom}</option>
|
| | | <option value="text-top">{#advanced_dlg.image_align_texttop}</option>
|
| | | <option value="text-bottom">{#advanced_dlg.image_align_textbottom}</option>
|
| | | <option value="left">{#advanced_dlg.image_align_left}</option>
|
| | | <option value="right">{#advanced_dlg.image_align_right}</option>
|
| | | </select></td>
|
| | | </tr>
|
| | | <tr>
|
| | | <td nowrap="nowrap"><label for="width">{#advanced_dlg.image_dimensions}</label></td>
|
| | | <td><input id="width" name="width" type="text" value="" size="3" maxlength="5" />
|
| | | x
|
| | | <input id="height" name="height" type="text" value="" size="3" maxlength="5" /></td>
|
| | | </tr>
|
| | | <tr>
|
| | | <td nowrap="nowrap"><label for="border">{#advanced_dlg.image_border}</label></td>
|
| | | <td><input id="border" name="border" type="text" value="" size="3" maxlength="3" onchange="ImageDialog.updateStyle();" /></td>
|
| | | </tr>
|
| | | <tr>
|
| | | <td nowrap="nowrap"><label for="vspace">{#advanced_dlg.image_vspace}</label></td>
|
| | | <td><input id="vspace" name="vspace" type="text" value="" size="3" maxlength="3" onchange="ImageDialog.updateStyle();" /></td>
|
| | | </tr>
|
| | | <tr>
|
| | | <td nowrap="nowrap"><label for="hspace">{#advanced_dlg.image_hspace}</label></td>
|
| | | <td><input id="hspace" name="hspace" type="text" value="" size="3" maxlength="3" onchange="ImageDialog.updateStyle();" /></td>
|
| | | </tr>
|
| | | </table>
|
| | | </div>
|
| | | </div>
|
| | |
|
| | | <div class="mceActionPanel">
|
| | | <div style="float: left">
|
| | | <input type="submit" id="insert" name="insert" value="{#insert}" />
|
| | | </div>
|
| | |
|
| | | <div style="float: right">
|
| | | <input type="button" id="cancel" name="cancel" value="{#cancel}" onclick="tinyMCEPopup.close();" />
|
| | | </div>
|
| | | </div>
|
| | | </form>
|
| | | </body>
|
| | | </html>
|
New file |
| | |
| | | tinyMCEPopup.requireLangPack();
|
| | |
|
| | | function init() {
|
| | | var ed, tcont;
|
| | |
|
| | | tinyMCEPopup.resizeToInnerSize();
|
| | | ed = tinyMCEPopup.editor;
|
| | |
|
| | | // Give FF some time
|
| | | window.setTimeout('insertHelpIFrame();', 10);
|
| | |
|
| | | tcont = document.getElementById('plugintablecontainer');
|
| | | document.getElementById('plugins_tab').style.display = 'none';
|
| | |
|
| | | var html = "";
|
| | | html += '<table id="plugintable">';
|
| | | html += '<thead>';
|
| | | html += '<tr>';
|
| | | html += '<td>' + ed.getLang('advanced_dlg.about_plugin') + '</td>';
|
| | | html += '<td>' + ed.getLang('advanced_dlg.about_author') + '</td>';
|
| | | html += '<td>' + ed.getLang('advanced_dlg.about_version') + '</td>';
|
| | | html += '</tr>';
|
| | | html += '</thead>';
|
| | | html += '<tbody>';
|
| | |
|
| | | tinymce.each(ed.plugins, function(p, n) {
|
| | | var info;
|
| | |
|
| | | if (!p.getInfo)
|
| | | return;
|
| | |
|
| | | html += '<tr>';
|
| | |
|
| | | info = p.getInfo();
|
| | |
|
| | | if (info.infourl != null && info.infourl != '')
|
| | | html += '<td width="50%" title="' + n + '"><a href="' + info.infourl + '" target="_blank">' + info.longname + '</a></td>';
|
| | | else
|
| | | html += '<td width="50%" title="' + n + '">' + info.longname + '</td>';
|
| | |
|
| | | if (info.authorurl != null && info.authorurl != '')
|
| | | html += '<td width="35%"><a href="' + info.authorurl + '" target="_blank">' + info.author + '</a></td>';
|
| | | else
|
| | | html += '<td width="35%">' + info.author + '</td>';
|
| | |
|
| | | html += '<td width="15%">' + info.version + '</td>';
|
| | | html += '</tr>';
|
| | |
|
| | | document.getElementById('plugins_tab').style.display = '';
|
| | |
|
| | | });
|
| | |
|
| | | html += '</tbody>';
|
| | | html += '</table>';
|
| | |
|
| | | tcont.innerHTML = html;
|
| | |
|
| | | tinyMCEPopup.dom.get('version').innerHTML = tinymce.majorVersion + "." + tinymce.minorVersion;
|
| | | tinyMCEPopup.dom.get('date').innerHTML = tinymce.releaseDate;
|
| | | }
|
| | |
|
| | | function insertHelpIFrame() {
|
| | | var html;
|
| | |
|
| | | if (tinyMCEPopup.getParam('docs_url')) {
|
| | | html = '<iframe width="100%" height="300" src="' + tinyMCEPopup.editor.baseURI.toAbsolute(tinyMCEPopup.getParam('docs_url')) + '"></iframe>';
|
| | | document.getElementById('iframecontainer').innerHTML = html;
|
| | | document.getElementById('help_tab').style.display = 'block';
|
| | | }
|
| | | }
|
| | |
|
| | | tinyMCEPopup.onInit.add(init);
|
New file |
| | |
| | | tinyMCEPopup.requireLangPack();
|
| | |
|
| | | var AnchorDialog = {
|
| | | init : function(ed) {
|
| | | var action, elm, f = document.forms[0];
|
| | |
|
| | | this.editor = ed;
|
| | | elm = ed.dom.getParent(ed.selection.getNode(), 'A,IMG');
|
| | | v = ed.dom.getAttrib(elm, 'name');
|
| | |
|
| | | if (v) {
|
| | | this.action = 'update';
|
| | | f.anchorName.value = v;
|
| | | }
|
| | |
|
| | | f.insert.value = ed.getLang(elm ? 'update' : 'insert');
|
| | | },
|
| | |
|
| | | update : function() {
|
| | | var ed = this.editor;
|
| | | |
| | | tinyMCEPopup.restoreSelection();
|
| | |
|
| | | if (this.action != 'update')
|
| | | ed.selection.collapse(1);
|
| | |
|
| | | // Webkit acts weird if empty inline element is inserted so we need to use a image instead
|
| | | if (tinymce.isWebKit)
|
| | | ed.execCommand('mceInsertContent', 0, ed.dom.createHTML('img', {mce_name : 'a', name : document.forms[0].anchorName.value, 'class' : 'mceItemAnchor'}));
|
| | | else
|
| | | ed.execCommand('mceInsertContent', 0, ed.dom.createHTML('a', {name : document.forms[0].anchorName.value, 'class' : 'mceItemAnchor'}, ''));
|
| | |
|
| | | tinyMCEPopup.close();
|
| | | }
|
| | | };
|
| | |
|
| | | tinyMCEPopup.onInit.add(AnchorDialog.init, AnchorDialog);
|
File was renamed from program/js/tiny_mce/themes/advanced/jscripts/charmap.js |
| | |
| | | function init() {
|
| | | tinyMCEPopup.resizeToInnerSize();
|
| | | }
|
| | | tinyMCEPopup.requireLangPack();
|
| | |
|
| | | var charmap = new Array();
|
| | |
|
| | | // for mor details please see w3c.org
|
| | | // now here is the complete list ;)
|
| | |
|
| | | charmap = [
|
| | | var charmap = [
|
| | | [' ', ' ', true, 'no-break space'],
|
| | | ['&', '&', true, 'ampersand'],
|
| | | ['"', '"', true, 'quotation mark'],
|
| | |
| | | ['­', '­', false,'soft hyphen']
|
| | | ];
|
| | |
|
| | | tinyMCEPopup.onInit.add(function() {
|
| | | tinyMCEPopup.dom.setHTML('charmapView', renderCharMapHTML());
|
| | | });
|
| | |
|
| | | function renderCharMapHTML() {
|
| | | var charsPerRow = 20, tdWidth=20, tdHeight=20;
|
| | | var charsPerRow = 20, tdWidth=20, tdHeight=20, i;
|
| | | var html = '<table border="0" cellspacing="1" cellpadding="0" width="' + (tdWidth*charsPerRow) + '"><tr height="' + tdHeight + '">';
|
| | | var cols=-1;
|
| | | for (var i=0; i<charmap.length; i++) {
|
| | |
|
| | | for (i=0; i<charmap.length; i++) {
|
| | | if (charmap[i][2]==true) {
|
| | | cols++;
|
| | | html += ''
|
| | | + '<td width="' + tdWidth + '" height="' + tdHeight + '" class="charmap"'
|
| | | + ' onmouseover="this.className=\'charmapOver\';'
|
| | | + 'previewChar(\'' + charmap[i][1].substring(1,charmap[i][1].length) + '\',\'' + charmap[i][0].substring(1,charmap[i][0].length) + '\',\'' + charmap[i][3] + '\');"'
|
| | | + ' onmouseout="this.className=\'charmap\';"'
|
| | | + ' nowrap="nowrap" onclick="insertChar(\'' + charmap[i][1].substring(2,charmap[i][1].length-1) + '\');"><a style="text-decoration: none;" onfocus="previewChar(\'' + charmap[i][1].substring(1,charmap[i][1].length) + '\',\'' + charmap[i][0].substring(1,charmap[i][0].length) + '\',\'' + charmap[i][3] + '\');" href="javascript:insertChar(\'' + charmap[i][1].substring(2,charmap[i][1].length-1) + '\');" onclick="return false;" onmousedown="return false;" title="' + charmap[i][3] + '">'
|
| | | + '<td class="charmap">'
|
| | | + '<a onmouseover="previewChar(\'' + charmap[i][1].substring(1,charmap[i][1].length) + '\',\'' + charmap[i][0].substring(1,charmap[i][0].length) + '\',\'' + charmap[i][3] + '\');" onfocus="previewChar(\'' + charmap[i][1].substring(1,charmap[i][1].length) + '\',\'' + charmap[i][0].substring(1,charmap[i][0].length) + '\',\'' + charmap[i][3] + '\');" href="javascript:void(0)" onclick="insertChar(\'' + charmap[i][1].substring(2,charmap[i][1].length-1) + '\');" onclick="return false;" onmousedown="return false;" title="' + charmap[i][3] + '">'
|
| | | + charmap[i][1]
|
| | | + '</a></td>';
|
| | | if ((cols+1) % charsPerRow == 0)
|
| | | html += '</tr><tr height="' + tdHeight + '">';
|
| | | }
|
| | | }
|
| | |
|
| | | if (cols % charsPerRow > 0) {
|
| | | var padd = charsPerRow - (cols % charsPerRow);
|
| | | for (var i=0; i<padd-1; i++)
|
| | | html += '<td width="' + tdWidth + '" height="' + tdHeight + '" class="charmap"> </td>';
|
| | | }
|
| | |
|
| | | html += '</tr></table>';
|
| | | document.write(html);
|
| | |
|
| | | return html;
|
| | | }
|
| | |
|
| | | function insertChar(chr) {
|
| | |
| | | if (tinyMCEPopup.isWindow)
|
| | | window.focus();
|
| | |
|
| | | tinyMCEPopup.editor.focus();
|
| | | tinyMCEPopup.close();
|
| | | }
|
| | |
|
File was renamed from program/js/tiny_mce/themes/advanced/jscripts/color_picker.js |
| | |
| | | tinyMCEPopup.requireLangPack();
|
| | |
|
| | | var detail = 50, strhex = "0123456789abcdef", i, isMouseDown = false, isMouseOver = false;
|
| | |
|
| | | var colors = new Array(
|
| | | var colors = [
|
| | | "#000000","#000033","#000066","#000099","#0000cc","#0000ff","#330000","#330033",
|
| | | "#330066","#330099","#3300cc","#3300ff","#660000","#660033","#660066","#660099",
|
| | | "#6600cc","#6600ff","#990000","#990033","#990066","#990099","#9900cc","#9900ff",
|
| | |
| | | "#66ff00","#66ff33","#66ff66","#66ff99","#66ffcc","#66ffff","#99ff00","#99ff33",
|
| | | "#99ff66","#99ff99","#99ffcc","#99ffff","#ccff00","#ccff33","#ccff66","#ccff99",
|
| | | "#ccffcc","#ccffff","#ffff00","#ffff33","#ffff66","#ffff99","#ffffcc","#ffffff"
|
| | | );
|
| | | ];
|
| | |
|
| | | var named = {
|
| | | '#F0F8FF':'AliceBlue','#FAEBD7':'AntiqueWhite','#00FFFF':'Aqua','#7FFFD4':'Aquamarine','#F0FFFF':'Azure','#F5F5DC':'Beige',
|
| | |
| | | };
|
| | |
|
| | | function init() {
|
| | | var inputColor = convertRGBToHex(tinyMCE.getWindowArg('input_color'));
|
| | | var inputColor = convertRGBToHex(tinyMCEPopup.getWindowArg('input_color'));
|
| | |
|
| | | if (tinyMCE.isMSIE)
|
| | | tinyMCEPopup.resizeToInnerSize();
|
| | | tinyMCEPopup.resizeToInnerSize();
|
| | |
|
| | | generatePicker();
|
| | |
|
| | |
| | | }
|
| | |
|
| | | function insertAction() {
|
| | | var color = document.getElementById("color").value;
|
| | | var color = document.getElementById("color").value, f = tinyMCEPopup.getWindowArg('func');
|
| | |
|
| | | tinyMCEPopup.execCommand(tinyMCE.getWindowArg('command'), false, color);
|
| | | tinyMCEPopup.restoreSelection();
|
| | |
|
| | | if (f)
|
| | | f(color);
|
| | |
|
| | | tinyMCEPopup.close();
|
| | | }
|
| | |
|
| | |
| | | document.getElementById("colorname").innerHTML = name;
|
| | |
|
| | | document.getElementById("preview").style.backgroundColor = color;
|
| | | document.getElementById("color").value = color;
|
| | | document.getElementById("color").value = color.toLowerCase();
|
| | | }
|
| | |
|
| | | function convertRGBToHex(col) {
|
| | |
| | | + '<tr>';
|
| | |
|
| | | for (i=0; i<colors.length; i++) {
|
| | | h += '<td bgcolor="' + colors[i] + '">'
|
| | | + '<a href="javascript:insertAction();" onfocus="showColor(\'' + colors[i] + '\');" onmouseover="showColor(\'' + colors[i] + '\');">'
|
| | | + '<img border="0" src="images/spacer.gif" width="10" height="10" title="' + colors[i] + '" alt="' + colors[i] + '" /></a></td>';
|
| | | h += '<td bgcolor="' + colors[i] + '" width="10" height="10">'
|
| | | + '<a href="javascript:insertAction();" onfocus="showColor(\'' + colors[i] + '\');" onmouseover="showColor(\'' + colors[i] + '\');" style="display:block;width:10px;height:10px;overflow:hidden;">'
|
| | | + '</a></td>';
|
| | | if ((i+1) % 18 == 0)
|
| | | h += '</tr><tr>';
|
| | | }
|
| | |
| | | x = e.offsetX ? e.offsetX : (e.target ? e.clientX - e.target.x : 0);
|
| | | y = e.offsetY ? e.offsetY : (e.target ? e.clientY - e.target.y : 0);
|
| | |
|
| | | partWidth = document.getElementById('colorpicker').width / 6;
|
| | | partWidth = document.getElementById('colors').width / 6;
|
| | | partDetail = detail / 2;
|
| | | imHeight = document.getElementById('colorpicker').height;
|
| | | imHeight = document.getElementById('colors').height;
|
| | |
|
| | | r = (x >= 0)*(x < partWidth)*255 + (x >= partWidth)*(x < 2*partWidth)*(2*255 - x * 255 / partWidth) + (x >= 4*partWidth)*(x < 5*partWidth)*(-4*255 + x * 255 / partWidth) + (x >= 5*partWidth)*(x < 6*partWidth)*255;
|
| | | g = (x >= 0)*(x < partWidth)*(x * 255 / partWidth) + (x >= partWidth)*(x < 3*partWidth)*255 + (x >= 3*partWidth)*(x < 4*partWidth)*(4*255 - x * 255 / partWidth);
|
| | |
| | | document.getElementById('color').value = color;
|
| | | }
|
| | |
|
| | | window.focus(); |
| | | tinyMCEPopup.onInit.add(init);
|
New file |
| | |
| | | var ImageDialog = {
|
| | | preInit : function() {
|
| | | var url;
|
| | |
|
| | | tinyMCEPopup.requireLangPack();
|
| | |
|
| | | if (url = tinyMCEPopup.getParam("external_image_list_url"))
|
| | | document.write('<script language="javascript" type="text/javascript" src="' + tinyMCEPopup.editor.documentBaseURI.toAbsolute(url) + '"></script>');
|
| | | },
|
| | |
|
| | | init : function() {
|
| | | var f = document.forms[0], ed = tinyMCEPopup.editor;
|
| | |
|
| | | // Setup browse button
|
| | | document.getElementById('srcbrowsercontainer').innerHTML = getBrowserHTML('srcbrowser','src','image','theme_advanced_image');
|
| | | if (isVisible('srcbrowser'))
|
| | | document.getElementById('src').style.width = '180px';
|
| | |
|
| | | e = ed.selection.getNode();
|
| | |
|
| | | this.fillFileList('image_list', 'tinyMCEImageList');
|
| | |
|
| | | if (e.nodeName == 'IMG') {
|
| | | f.src.value = ed.dom.getAttrib(e, 'src');
|
| | | f.alt.value = ed.dom.getAttrib(e, 'alt');
|
| | | f.border.value = this.getAttrib(e, 'border');
|
| | | f.vspace.value = this.getAttrib(e, 'vspace');
|
| | | f.hspace.value = this.getAttrib(e, 'hspace');
|
| | | f.width.value = ed.dom.getAttrib(e, 'width');
|
| | | f.height.value = ed.dom.getAttrib(e, 'height');
|
| | | f.insert.value = ed.getLang('update');
|
| | | this.styleVal = ed.dom.getAttrib(e, 'style');
|
| | | selectByValue(f, 'image_list', f.src.value);
|
| | | selectByValue(f, 'align', this.getAttrib(e, 'align'));
|
| | | this.updateStyle();
|
| | | }
|
| | | },
|
| | |
|
| | | fillFileList : function(id, l) {
|
| | | var dom = tinyMCEPopup.dom, lst = dom.get(id), v, cl;
|
| | |
|
| | | l = window[l];
|
| | |
|
| | | if (l && l.length > 0) {
|
| | | lst.options[lst.options.length] = new Option('', '');
|
| | |
|
| | | tinymce.each(l, function(o) {
|
| | | lst.options[lst.options.length] = new Option(o[0], o[1]);
|
| | | });
|
| | | } else
|
| | | dom.remove(dom.getParent(id, 'tr'));
|
| | | },
|
| | |
|
| | | update : function() {
|
| | | var f = document.forms[0], nl = f.elements, ed = tinyMCEPopup.editor, args = {}, el;
|
| | |
|
| | | tinyMCEPopup.restoreSelection();
|
| | |
|
| | | if (f.src.value === '') {
|
| | | if (ed.selection.getNode().nodeName == 'IMG') {
|
| | | ed.dom.remove(ed.selection.getNode());
|
| | | ed.execCommand('mceRepaint');
|
| | | }
|
| | |
|
| | | tinyMCEPopup.close();
|
| | | return;
|
| | | }
|
| | |
|
| | | if (!ed.settings.inline_styles) {
|
| | | args = tinymce.extend(args, {
|
| | | vspace : nl.vspace.value,
|
| | | hspace : nl.hspace.value,
|
| | | border : nl.border.value,
|
| | | align : getSelectValue(f, 'align')
|
| | | });
|
| | | } else
|
| | | args.style = this.styleVal;
|
| | |
|
| | | tinymce.extend(args, {
|
| | | src : f.src.value,
|
| | | alt : f.alt.value,
|
| | | width : f.width.value,
|
| | | height : f.height.value
|
| | | });
|
| | |
|
| | | el = ed.selection.getNode();
|
| | |
|
| | | if (el && el.nodeName == 'IMG') {
|
| | | ed.dom.setAttribs(el, args);
|
| | | } else {
|
| | | ed.execCommand('mceInsertContent', false, '<img id="__mce_tmp" src="javascript:;" />', {skip_undo : 1});
|
| | | ed.dom.setAttribs('__mce_tmp', args);
|
| | | ed.dom.setAttrib('__mce_tmp', 'id', '');
|
| | | ed.undoManager.add();
|
| | | }
|
| | |
|
| | | tinyMCEPopup.close();
|
| | | },
|
| | |
|
| | | updateStyle : function() {
|
| | | var dom = tinyMCEPopup.dom, st, v, f = document.forms[0];
|
| | |
|
| | | if (tinyMCEPopup.editor.settings.inline_styles) {
|
| | | st = tinyMCEPopup.dom.parseStyle(this.styleVal);
|
| | |
|
| | | // Handle align
|
| | | v = getSelectValue(f, 'align');
|
| | | if (v) {
|
| | | if (v == 'left' || v == 'right') {
|
| | | st['float'] = v;
|
| | | delete st['vertical-align'];
|
| | | } else {
|
| | | st['vertical-align'] = v;
|
| | | delete st['float'];
|
| | | }
|
| | | } else {
|
| | | delete st['float'];
|
| | | delete st['vertical-align'];
|
| | | }
|
| | |
|
| | | // Handle border
|
| | | v = f.border.value;
|
| | | if (v || v == '0') {
|
| | | if (v == '0')
|
| | | st['border'] = '0';
|
| | | else
|
| | | st['border'] = v + 'px solid black';
|
| | | } else
|
| | | delete st['border'];
|
| | |
|
| | | // Handle hspace
|
| | | v = f.hspace.value;
|
| | | if (v) {
|
| | | delete st['margin'];
|
| | | st['margin-left'] = v + 'px';
|
| | | st['margin-right'] = v + 'px';
|
| | | } else {
|
| | | delete st['margin-left'];
|
| | | delete st['margin-right'];
|
| | | }
|
| | |
|
| | | // Handle vspace
|
| | | v = f.vspace.value;
|
| | | if (v) {
|
| | | delete st['margin'];
|
| | | st['margin-top'] = v + 'px';
|
| | | st['margin-bottom'] = v + 'px';
|
| | | } else {
|
| | | delete st['margin-top'];
|
| | | delete st['margin-bottom'];
|
| | | }
|
| | |
|
| | | // Merge
|
| | | st = tinyMCEPopup.dom.parseStyle(dom.serializeStyle(st));
|
| | | this.styleVal = dom.serializeStyle(st);
|
| | | }
|
| | | },
|
| | |
|
| | | getAttrib : function(e, at) {
|
| | | var ed = tinyMCEPopup.editor, dom = ed.dom, v, v2;
|
| | |
|
| | | if (ed.settings.inline_styles) {
|
| | | switch (at) {
|
| | | case 'align':
|
| | | if (v = dom.getStyle(e, 'float'))
|
| | | return v;
|
| | |
|
| | | if (v = dom.getStyle(e, 'vertical-align'))
|
| | | return v;
|
| | |
|
| | | break;
|
| | |
|
| | | case 'hspace':
|
| | | v = dom.getStyle(e, 'margin-left')
|
| | | v2 = dom.getStyle(e, 'margin-right');
|
| | | if (v && v == v2)
|
| | | return parseInt(v.replace(/[^0-9]/g, ''));
|
| | |
|
| | | break;
|
| | |
|
| | | case 'vspace':
|
| | | v = dom.getStyle(e, 'margin-top')
|
| | | v2 = dom.getStyle(e, 'margin-bottom');
|
| | | if (v && v == v2)
|
| | | return parseInt(v.replace(/[^0-9]/g, ''));
|
| | |
|
| | | break;
|
| | |
|
| | | case 'border':
|
| | | v = 0;
|
| | |
|
| | | tinymce.each(['top', 'right', 'bottom', 'left'], function(sv) {
|
| | | sv = dom.getStyle(e, 'border-' + sv + '-width');
|
| | |
|
| | | // False or not the same as prev
|
| | | if (!sv || (sv != v && v !== 0)) {
|
| | | v = 0;
|
| | | return false;
|
| | | }
|
| | |
|
| | | if (sv)
|
| | | v = sv;
|
| | | });
|
| | |
|
| | | if (v)
|
| | | return parseInt(v.replace(/[^0-9]/g, ''));
|
| | |
|
| | | break;
|
| | | }
|
| | | }
|
| | |
|
| | | if (v = dom.getAttrib(e, at))
|
| | | return v;
|
| | |
|
| | | return '';
|
| | | },
|
| | |
|
| | | resetImageData : function() {
|
| | | var f = document.forms[0];
|
| | |
|
| | | f.width.value = f.height.value = ""; |
| | | },
|
| | |
|
| | | updateImageData : function() {
|
| | | var f = document.forms[0], t = ImageDialog;
|
| | |
|
| | | if (f.width.value == "")
|
| | | f.width.value = t.preloadImg.width;
|
| | |
|
| | | if (f.height.value == "")
|
| | | f.height.value = t.preloadImg.height;
|
| | | },
|
| | |
|
| | | getImageData : function() {
|
| | | var f = document.forms[0];
|
| | |
|
| | | this.preloadImg = new Image();
|
| | | this.preloadImg.onload = this.updateImageData;
|
| | | this.preloadImg.onerror = this.resetImageData;
|
| | | this.preloadImg.src = tinyMCEPopup.editor.documentBaseURI.toAbsolute(f.src.value);
|
| | | }
|
| | | };
|
| | |
|
| | | ImageDialog.preInit();
|
| | | tinyMCEPopup.onInit.add(ImageDialog.init, ImageDialog);
|
New file |
| | |
| | | tinyMCEPopup.requireLangPack();
|
| | |
|
| | | var LinkDialog = {
|
| | | preInit : function() {
|
| | | var url;
|
| | |
|
| | | if (url = tinyMCEPopup.getParam("external_link_list_url"))
|
| | | document.write('<script language="javascript" type="text/javascript" src="' + tinyMCEPopup.editor.documentBaseURI.toAbsolute(url) + '"></script>');
|
| | | },
|
| | |
|
| | | init : function() {
|
| | | var f = document.forms[0], ed = tinyMCEPopup.editor;
|
| | |
|
| | | // Setup browse button
|
| | | document.getElementById('hrefbrowsercontainer').innerHTML = getBrowserHTML('hrefbrowser', 'href', 'file', 'theme_advanced_link');
|
| | | if (isVisible('hrefbrowser'))
|
| | | document.getElementById('href').style.width = '180px';
|
| | |
|
| | | this.fillClassList('class_list');
|
| | | this.fillFileList('link_list', 'tinyMCELinkList');
|
| | | this.fillTargetList('target_list');
|
| | |
|
| | | if (e = ed.dom.getParent(ed.selection.getNode(), 'A')) {
|
| | | f.href.value = ed.dom.getAttrib(e, 'href');
|
| | | f.linktitle.value = ed.dom.getAttrib(e, 'title');
|
| | | f.insert.value = ed.getLang('update');
|
| | | selectByValue(f, 'link_list', f.href.value);
|
| | | selectByValue(f, 'target_list', ed.dom.getAttrib(e, 'target'));
|
| | | selectByValue(f, 'class_list', ed.dom.getAttrib(e, 'class'));
|
| | | }
|
| | | },
|
| | |
|
| | | update : function() {
|
| | | var f = document.forms[0], ed = tinyMCEPopup.editor, e, b;
|
| | |
|
| | | tinyMCEPopup.restoreSelection();
|
| | |
|
| | | // Remove element if there is no href
|
| | | if (!f.href.value) {
|
| | | e = ed.dom.getParent(ed.selection.getNode(), 'A');
|
| | | if (e) {
|
| | | tinyMCEPopup.execCommand("mceBeginUndoLevel");
|
| | | b = ed.selection.getBookmark();
|
| | | ed.dom.remove(e, 1);
|
| | | ed.selection.moveToBookmark(b);
|
| | | tinyMCEPopup.execCommand("mceEndUndoLevel");
|
| | | tinyMCEPopup.close();
|
| | | return;
|
| | | }
|
| | | }
|
| | |
|
| | | ed.execCommand('mceInsertLink', false, {
|
| | | href : f.href.value,
|
| | | title : f.linktitle.value,
|
| | | target : f.target_list ? f.target_list.options[f.target_list.selectedIndex].value : null,
|
| | | 'class' : f.class_list ? f.class_list.options[f.class_list.selectedIndex].value : null
|
| | | });
|
| | |
|
| | | tinyMCEPopup.close();
|
| | | },
|
| | |
|
| | | checkPrefix : function(n) {
|
| | | if (n.value && Validator.isEmail(n) && !/^\s*mailto:/i.test(n.value) && confirm(tinyMCEPopup.getLang('advanced_dlg.link_is_email')))
|
| | | n.value = 'mailto:' + n.value;
|
| | |
|
| | | if (/^\s*www./i.test(n.value) && confirm(tinyMCEPopup.getLang('advanced_dlg.link_is_external')))
|
| | | n.value = 'http://' + n.value;
|
| | | },
|
| | |
|
| | | fillFileList : function(id, l) {
|
| | | var dom = tinyMCEPopup.dom, lst = dom.get(id), v, cl;
|
| | |
|
| | | l = window[l];
|
| | |
|
| | | if (l && l.length > 0) {
|
| | | lst.options[lst.options.length] = new Option('', '');
|
| | |
|
| | | tinymce.each(l, function(o) {
|
| | | lst.options[lst.options.length] = new Option(o[0], o[1]);
|
| | | });
|
| | | } else
|
| | | dom.remove(dom.getParent(id, 'tr'));
|
| | | },
|
| | |
|
| | | fillClassList : function(id) {
|
| | | var dom = tinyMCEPopup.dom, lst = dom.get(id), v, cl;
|
| | |
|
| | | if (v = tinyMCEPopup.getParam('theme_advanced_styles')) {
|
| | | cl = [];
|
| | |
|
| | | tinymce.each(v.split(';'), function(v) {
|
| | | var p = v.split('=');
|
| | |
|
| | | cl.push({'title' : p[0], 'class' : p[1]});
|
| | | });
|
| | | } else
|
| | | cl = tinyMCEPopup.editor.dom.getClasses();
|
| | |
|
| | | if (cl.length > 0) {
|
| | | lst.options[lst.options.length] = new Option(tinyMCEPopup.getLang('not_set'), '');
|
| | |
|
| | | tinymce.each(cl, function(o) {
|
| | | lst.options[lst.options.length] = new Option(o.title || o['class'], o['class']);
|
| | | });
|
| | | } else
|
| | | dom.remove(dom.getParent(id, 'tr'));
|
| | | },
|
| | |
|
| | | fillTargetList : function(id) {
|
| | | var dom = tinyMCEPopup.dom, lst = dom.get(id), v;
|
| | |
|
| | | lst.options[lst.options.length] = new Option(tinyMCEPopup.getLang('not_set'), '');
|
| | | lst.options[lst.options.length] = new Option(tinyMCEPopup.getLang('advanced_dlg.link_target_same'), '_self');
|
| | | lst.options[lst.options.length] = new Option(tinyMCEPopup.getLang('advanced_dlg.link_target_blank'), '_blank');
|
| | |
|
| | | if (v = tinyMCEPopup.getParam('theme_advanced_link_targets')) {
|
| | | tinymce.each(v.split(','), function(v) {
|
| | | v = v.split('=');
|
| | | lst.options[lst.options.length] = new Option(v[0], v[1]);
|
| | | });
|
| | | }
|
| | | }
|
| | | };
|
| | |
|
| | | LinkDialog.preInit();
|
| | | tinyMCEPopup.onInit.add(LinkDialog.init, LinkDialog);
|
New file |
| | |
| | | tinyMCEPopup.requireLangPack();
|
| | | tinyMCEPopup.onInit.add(onLoadInit);
|
| | |
|
| | | function saveContent() {
|
| | | tinyMCEPopup.editor.setContent(document.getElementById('htmlSource').value);
|
| | | tinyMCEPopup.close();
|
| | | }
|
| | |
|
| | | function onLoadInit() {
|
| | | tinyMCEPopup.resizeToInnerSize();
|
| | |
|
| | | // Remove Gecko spellchecking
|
| | | if (tinymce.isGecko)
|
| | | document.body.spellcheck = tinyMCEPopup.editor.getParam("gecko_spellcheck");
|
| | |
|
| | | document.getElementById('htmlSource').value = tinyMCEPopup.editor.getContent();
|
| | |
|
| | | if (tinyMCEPopup.editor.getParam("theme_advanced_source_editor_wrap", true)) {
|
| | | setWrap('soft');
|
| | | document.getElementById('wraped').checked = true;
|
| | | }
|
| | |
|
| | | resizeInputs();
|
| | | }
|
| | |
|
| | | function setWrap(val) {
|
| | | var v, n, s = document.getElementById('htmlSource');
|
| | |
|
| | | s.wrap = val;
|
| | |
|
| | | if (!tinymce.isIE) {
|
| | | v = s.value;
|
| | | n = s.cloneNode(false);
|
| | | n.setAttribute("wrap", val);
|
| | | s.parentNode.replaceChild(n, s);
|
| | | n.value = v;
|
| | | }
|
| | | }
|
| | |
|
| | | function toggleWordWrap(elm) {
|
| | | if (elm.checked)
|
| | | setWrap('soft');
|
| | | else
|
| | | setWrap('off');
|
| | | }
|
| | |
|
| | | var wHeight=0, wWidth=0, owHeight=0, owWidth=0;
|
| | |
|
| | | function resizeInputs() {
|
| | | var el = document.getElementById('htmlSource');
|
| | |
|
| | | if (!tinymce.isIE) {
|
| | | wHeight = self.innerHeight - 65;
|
| | | wWidth = self.innerWidth - 16;
|
| | | } else {
|
| | | wHeight = document.body.clientHeight - 70;
|
| | | wWidth = document.body.clientWidth - 16;
|
| | | }
|
| | |
|
| | | el.style.height = Math.abs(wHeight) + 'px';
|
| | | el.style.width = Math.abs(wWidth) + 'px';
|
| | | }
|
| | |
| | | // UK lang variables
|
| | |
|
| | | tinyMCE.addToLang('',{
|
| | | theme_style_select : '-- Styles --',
|
| | | theme_code_desc : 'Edit HTML Source',
|
| | | theme_code_title : 'HTML Source Editor',
|
| | | theme_code_wordwrap : 'Word wrap',
|
| | | theme_sub_desc : 'Subscript',
|
| | | theme_sup_desc : 'Superscript',
|
| | | theme_hr_desc : 'Insert horizontal ruler',
|
| | | theme_removeformat_desc : 'Remove formatting',
|
| | | theme_custom1_desc : 'Your custom description here',
|
| | | insert_image_border : 'Border',
|
| | | insert_image_dimensions : 'Dimensions',
|
| | | insert_image_vspace : 'Vertical space',
|
| | | insert_image_hspace : 'Horizontal space',
|
| | | insert_image_align : 'Alignment',
|
| | | insert_image_align_default : '-- Not set --',
|
| | | insert_image_align_baseline : 'Baseline',
|
| | | insert_image_align_top : 'Top',
|
| | | insert_image_align_middle : 'Middle',
|
| | | insert_image_align_bottom : 'Bottom',
|
| | | insert_image_align_texttop : 'TextTop',
|
| | | insert_image_align_absmiddle : 'Absolute Middle',
|
| | | insert_image_align_absbottom : 'Absolute Bottom',
|
| | | insert_image_align_left : 'Left',
|
| | | insert_image_align_right : 'Right',
|
| | | theme_font_size : '-- Font size --',
|
| | | theme_fontdefault : '-- Font family --',
|
| | | theme_block : '-- Format --',
|
| | | theme_paragraph : 'Paragraph',
|
| | | theme_div : 'Div',
|
| | | theme_address : 'Address',
|
| | | theme_pre : 'Preformatted',
|
| | | theme_h1 : 'Heading 1',
|
| | | theme_h2 : 'Heading 2',
|
| | | theme_h3 : 'Heading 3',
|
| | | theme_h4 : 'Heading 4',
|
| | | theme_h5 : 'Heading 5',
|
| | | theme_h6 : 'Heading 6',
|
| | | theme_blockquote : 'Blockquote',
|
| | | theme_code : 'Code',
|
| | | theme_samp : 'Code sample',
|
| | | theme_dt : 'Definition term ',
|
| | | theme_dd : 'Definition description',
|
| | | theme_colorpicker_title : 'Select a color',
|
| | | theme_colorpicker_apply : 'Apply',
|
| | | theme_forecolor_desc : 'Select text color',
|
| | | theme_backcolor_desc : 'Select background color',
|
| | | theme_charmap_title : 'Select custom character',
|
| | | theme_charmap_desc : 'Insert custom character',
|
| | | theme_visualaid_desc : 'Toggle guidelines/invisible elements',
|
| | | insert_anchor_title : 'Insert/edit anchor',
|
| | | insert_anchor_name : 'Anchor name',
|
| | | theme_anchor_desc : 'Insert/edit anchor',
|
| | | theme_insert_link_titlefield : 'Title',
|
| | | theme_clipboard_msg : 'Copy/Cut/Paste is not available in Mozilla and Firefox.\nDo you want more information about this issue?',
|
| | | theme_path : 'Path',
|
| | | cut_desc : 'Cut',
|
| | | copy_desc : 'Copy',
|
| | | paste_desc : 'Paste',
|
| | | link_list : 'Link list',
|
| | | image_list : 'Image list',
|
| | | browse : 'Browse',
|
| | | image_props_desc : 'Image properties',
|
| | | newdocument_desc : 'New document',
|
| | | class_name : 'Class',
|
| | | newdocument : 'Are you sure you want clear all contents?',
|
| | | about_title : 'About TinyMCE',
|
| | | about : 'About',
|
| | | license : 'License',
|
| | | plugins : 'Plugins',
|
| | | plugin : 'Plugin',
|
| | | author : 'Author',
|
| | | version : 'Version',
|
| | | loaded_plugins : 'Loaded plugins',
|
| | | help : 'Help',
|
| | | not_set : '-- Not set --',
|
| | | close : 'Close',
|
| | | toolbar_focus : 'Jump to tool buttons - Alt+Q, Jump to editor - Alt-Z, Jump to element path - Alt-X',
|
| | | invalid_data : 'Error: Invalid values entered, these are marked in red.',
|
| | | more_colors : 'More colors',
|
| | | color_picker_tab : 'Picker',
|
| | | color_picker : 'Color picker',
|
| | | web_colors_tab : 'Palette',
|
| | | web_colors : 'Palette colors',
|
| | | named_colors_tab : 'Named',
|
| | | named_colors : 'Named colors',
|
| | | color : 'Color:',
|
| | | color_name : 'Name:',
|
| | | is_email : 'The URL you entered seems to be an email address, do you want to add the required mailto: prefix?',
|
| | | is_external : 'The URL you entered seems to external link, do you want to add the required http:// prefix?'
|
| | | });
|
| | | tinyMCE.addI18n('en.advanced',{
|
| | | style_select:"Styles",
|
| | | font_size:"Font size",
|
| | | fontdefault:"Font family",
|
| | | block:"Format",
|
| | | paragraph:"Paragraph",
|
| | | div:"Div",
|
| | | address:"Address",
|
| | | pre:"Preformatted",
|
| | | h1:"Heading 1",
|
| | | h2:"Heading 2",
|
| | | h3:"Heading 3",
|
| | | h4:"Heading 4",
|
| | | h5:"Heading 5",
|
| | | h6:"Heading 6",
|
| | | blockquote:"Blockquote",
|
| | | code:"Code",
|
| | | samp:"Code sample",
|
| | | dt:"Definition term ",
|
| | | dd:"Definition description",
|
| | | bold_desc:"Bold (Ctrl+B)",
|
| | | italic_desc:"Italic (Ctrl+I)",
|
| | | underline_desc:"Underline (Ctrl+U)",
|
| | | striketrough_desc:"Strikethrough",
|
| | | justifyleft_desc:"Align left",
|
| | | justifycenter_desc:"Align center",
|
| | | justifyright_desc:"Align right",
|
| | | justifyfull_desc:"Align full",
|
| | | bullist_desc:"Unordered list",
|
| | | numlist_desc:"Ordered list",
|
| | | outdent_desc:"Outdent",
|
| | | indent_desc:"Indent",
|
| | | undo_desc:"Undo (Ctrl+Z)",
|
| | | redo_desc:"Redo (Ctrl+Y)",
|
| | | link_desc:"Insert/edit link",
|
| | | unlink_desc:"Unlink",
|
| | | image_desc:"Insert/edit image",
|
| | | cleanup_desc:"Cleanup messy code",
|
| | | code_desc:"Edit HTML Source",
|
| | | sub_desc:"Subscript",
|
| | | sup_desc:"Superscript",
|
| | | hr_desc:"Insert horizontal ruler",
|
| | | removeformat_desc:"Remove formatting",
|
| | | custom1_desc:"Your custom description here",
|
| | | forecolor_desc:"Select text color",
|
| | | backcolor_desc:"Select background color",
|
| | | charmap_desc:"Insert custom character",
|
| | | visualaid_desc:"Toggle guidelines/invisible elements",
|
| | | anchor_desc:"Insert/edit anchor",
|
| | | cut_desc:"Cut",
|
| | | copy_desc:"Copy",
|
| | | paste_desc:"Paste",
|
| | | image_props_desc:"Image properties",
|
| | | newdocument_desc:"New document",
|
| | | help_desc:"Help",
|
| | | blockquote_desc:"Blockquote",
|
| | | clipboard_msg:"Copy/Cut/Paste is not available in Mozilla and Firefox.\r\nDo you want more information about this issue?",
|
| | | path:"Path",
|
| | | newdocument:"Are you sure you want clear all contents?",
|
| | | toolbar_focus:"Jump to tool buttons - Alt+Q, Jump to editor - Alt-Z, Jump to element path - Alt-X",
|
| | | more_colors:"More colors"
|
| | | }); |
New file |
| | |
| | | tinyMCE.addI18n('en.advanced_dlg',{
|
| | | about_title:"About TinyMCE",
|
| | | about_general:"About",
|
| | | about_help:"Help",
|
| | | about_license:"License",
|
| | | about_plugins:"Plugins",
|
| | | about_plugin:"Plugin",
|
| | | about_author:"Author",
|
| | | about_version:"Version",
|
| | | about_loaded:"Loaded plugins",
|
| | | anchor_title:"Insert/edit anchor",
|
| | | anchor_name:"Anchor name",
|
| | | code_title:"HTML Source Editor",
|
| | | code_wordwrap:"Word wrap",
|
| | | colorpicker_title:"Select a color",
|
| | | colorpicker_picker_tab:"Picker",
|
| | | colorpicker_picker_title:"Color picker",
|
| | | colorpicker_palette_tab:"Palette",
|
| | | colorpicker_palette_title:"Palette colors",
|
| | | colorpicker_named_tab:"Named",
|
| | | colorpicker_named_title:"Named colors",
|
| | | colorpicker_color:"Color:",
|
| | | colorpicker_name:"Name:",
|
| | | charmap_title:"Select custom character",
|
| | | image_title:"Insert/edit image",
|
| | | image_src:"Image URL",
|
| | | image_alt:"Image description",
|
| | | image_list:"Image list",
|
| | | image_border:"Border",
|
| | | image_dimensions:"Dimensions",
|
| | | image_vspace:"Vertical space",
|
| | | image_hspace:"Horizontal space",
|
| | | image_align:"Alignment",
|
| | | image_align_baseline:"Baseline",
|
| | | image_align_top:"Top",
|
| | | image_align_middle:"Middle",
|
| | | image_align_bottom:"Bottom",
|
| | | image_align_texttop:"Text top",
|
| | | image_align_textbottom:"Text bottom",
|
| | | image_align_left:"Left",
|
| | | image_align_right:"Right",
|
| | | link_title:"Insert/edit link",
|
| | | link_url:"Link URL",
|
| | | link_target:"Target",
|
| | | link_target_same:"Open link in the same window",
|
| | | link_target_blank:"Open link in a new window",
|
| | | link_titlefield:"Title",
|
| | | link_is_email:"The URL you entered seems to be an email address, do you want to add the required mailto: prefix?",
|
| | | link_is_external:"The URL you entered seems to external link, do you want to add the required http:// prefix?",
|
| | | link_list:"Link list"
|
| | | }); |
| | |
| | | <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
|
| | | <html xmlns="http://www.w3.org/1999/xhtml">
|
| | | <head>
|
| | | <title>{$lang_insert_link_title}</title>
|
| | | <script language="javascript" type="text/javascript" src="../../tiny_mce_popup.js"></script>
|
| | | <script language="javascript" type="text/javascript" src="../../utils/mctabs.js"></script>
|
| | | <script language="javascript" type="text/javascript" src="../../utils/form_utils.js"></script>
|
| | | <script language="javascript" type="text/javascript" src="../../utils/validate.js"></script>
|
| | | <script language="javascript" type="text/javascript" src="jscripts/link.js"></script>
|
| | | <title>{#advanced_dlg.link_title}</title>
|
| | | <script type="text/javascript" src="../../tiny_mce_popup.js"></script>
|
| | | <script type="text/javascript" src="../../utils/mctabs.js"></script>
|
| | | <script type="text/javascript" src="../../utils/form_utils.js"></script>
|
| | | <script type="text/javascript" src="../../utils/validate.js"></script>
|
| | | <script type="text/javascript" src="js/link.js"></script>
|
| | | <base target="_self" />
|
| | | </head>
|
| | | <body id="link" onload="tinyMCEPopup.executeOnLoad('init();');" style="display: none">
|
| | | <form onsubmit="insertLink();return false;" action="#">
|
| | | <body id="link" style="display: none">
|
| | | <form onsubmit="LinkDialog.update();return false;" action="#">
|
| | | <div class="tabs">
|
| | | <ul>
|
| | | <li id="general_tab" class="current"><span><a href="javascript:mcTabs.displayTab('general_tab','general_panel');" onmousedown="return false;">{$lang_insert_link_title}</a></span></li>
|
| | | <li id="general_tab" class="current"><span><a href="javascript:mcTabs.displayTab('general_tab','general_panel');" onmousedown="return false;">{#advanced_dlg.link_title}</a></span></li>
|
| | | </ul>
|
| | | </div>
|
| | |
|
| | |
| | |
|
| | | <table border="0" cellpadding="4" cellspacing="0">
|
| | | <tr>
|
| | | <td nowrap="nowrap"><label for="href">{$lang_insert_link_url}</label></td>
|
| | | <td nowrap="nowrap"><label for="href">{#advanced_dlg.link_url}</label></td>
|
| | | <td><table border="0" cellspacing="0" cellpadding="0">
|
| | | <tr>
|
| | | <td><input id="href" name="href" type="text" value="" style="width: 200px" onchange="checkPrefix(this);" /></td> |
| | | <td><input id="href" name="href" type="text" class="mceFocus" value="" style="width: 200px" onchange="LinkDialog.checkPrefix(this);" /></td> |
| | | <td id="hrefbrowsercontainer"> </td>
|
| | | </tr>
|
| | | </table></td>
|
| | | </tr>
|
| | | <!-- Link list -->
|
| | | <script language="javascript">
|
| | | if (typeof(tinyMCELinkList) != "undefined" && tinyMCELinkList.length > 0) {
|
| | | var html = "";
|
| | |
|
| | | html += '<tr><td><label for="link_list">{$lang_link_list}</label></td>';
|
| | | html += '<td><select id="link_list" name="link_list" style="width: 200px" onchange="this.form.href.value=this.options[this.selectedIndex].value;">';
|
| | | html += '<option value="">---</option>';
|
| | |
|
| | | for (var i=0; i<tinyMCELinkList.length; i++)
|
| | | html += '<option value="' + tinyMCELinkList[i][1] + '">' + tinyMCELinkList[i][0] + '</option>';
|
| | |
|
| | | html += '</select></td></tr>';
|
| | |
|
| | | document.write(html);
|
| | | }
|
| | | </script>
|
| | | <!-- /Link list -->
|
| | | <tr>
|
| | | <td><label for="link_list">{#advanced_dlg.link_list}</label></td>
|
| | | <td><select id="link_list" name="link_list" onchange="document.getElementById('href').value=this.options[this.selectedIndex].value;"></select></td>
|
| | | </tr>
|
| | | <tr>
|
| | | <td><label id="targetlistlabel" for="targetlist">{#advanced_dlg.link_target}</label></td>
|
| | | <td><select id="target_list" name="target_list"></select></td>
|
| | | </tr>
|
| | | <tr>
|
| | | <td nowrap="nowrap"><label for="target">{$lang_insert_link_target}</label></td>
|
| | | <td><select id="target" name="target" style="width: 200px">
|
| | | <option value="_self">{$lang_insert_link_target_same}</option>
|
| | | <option value="_blank">{$lang_insert_link_target_blank}</option>
|
| | | <script language="javascript">
|
| | | var html = "";
|
| | | var targets = tinyMCE.getParam('theme_advanced_link_targets', '').split(';');
|
| | |
|
| | | for (var i=0; i<targets.length; i++) {
|
| | | var key, value;
|
| | |
|
| | | if (targets[i] == "")
|
| | | continue;
|
| | |
|
| | | key = targets[i].split('=')[0];
|
| | | value = targets[i].split('=')[1];
|
| | |
|
| | | html += '<option value="' + value + '">' + key + '</option>';
|
| | | }
|
| | |
|
| | | document.write(html);
|
| | | </script>
|
| | | </select></td>
|
| | | <td nowrap="nowrap"><label for="linktitle">{#advanced_dlg.link_titlefield}</label></td>
|
| | | <td><input id="linktitle" name="linktitle" type="text" value="" style="width: 200px" /></td>
|
| | | </tr>
|
| | | <tr>
|
| | | <td nowrap="nowrap"><label for="linktitle">{$lang_theme_insert_link_titlefield}</label></td>
|
| | | <td><input id="linktitle" name="linktitle" type="text" value="" style="width: 200px"></td>
|
| | | </tr>
|
| | | <tr id="styleSelectRow">
|
| | | <td><label for="styleSelect">{$lang_class_name}</label></td>
|
| | | <td>
|
| | | <select id="styleSelect" name="styleSelect">
|
| | | <option value="" selected>{$lang_theme_style_select}</option>
|
| | | </select></td>
|
| | | </tr>
|
| | | <tr>
|
| | | <td><label for="class_list">{#class_name}</label></td>
|
| | | <td><select id="class_list" name="class_list"></select></td>
|
| | | </tr>
|
| | | </table>
|
| | | </div>
|
| | | </div>
|
| | |
|
| | | <div class="mceActionPanel">
|
| | | <div style="float: left">
|
| | | <input type="button" id="insert" name="insert" value="{$lang_insert}" onclick="insertLink();" />
|
| | | <input type="submit" id="insert" name="insert" value="{#insert}" />
|
| | | </div>
|
| | |
|
| | | <div style="float: right">
|
| | | <input type="button" id="cancel" name="cancel" value="{$lang_cancel}" onclick="tinyMCEPopup.close();" />
|
| | | <input type="button" id="cancel" name="cancel" value="{#cancel}" onclick="tinyMCEPopup.close();" />
|
| | | </div>
|
| | | </div>
|
| | | </form>
|
New file |
| | |
| | | body, td, pre {color:#000; font-family:Verdana, Arial, Helvetica, sans-serif; font-size:10px; margin:8px;}
|
| | | body {background:#FFF;}
|
| | | body.mceForceColors {background:#FFF; color:#000;}
|
| | | h1 {font-size: 2em}
|
| | | h2 {font-size: 1.5em}
|
| | | h3 {font-size: 1.17em}
|
| | | h4 {font-size: 1em}
|
| | | h5 {font-size: .83em}
|
| | | h6 {font-size: .75em}
|
| | | .mceItemTable, .mceItemTable td, .mceItemTable th, .mceItemTable caption, .mceItemVisualAid {border: 1px dashed #BBB;}
|
| | | a.mceItemAnchor {width:12px; line-height:6px; overflow:hidden; padding-left:12px; background:url(img/items.gif) no-repeat bottom left;}
|
| | | img.mceItemAnchor {width:12px; height:12px; background:url(img/items.gif) no-repeat;}
|
| | | img {border:0;}
|
| | |
|
| | | /* IE */
|
| | | * html body {
|
| | | scrollbar-3dlight-color:#F0F0EE;
|
| | | scrollbar-arrow-color:#676662;
|
| | | scrollbar-base-color:#F0F0EE;
|
| | | scrollbar-darkshadow-color:#DDD;
|
| | | scrollbar-face-color:#E0E0DD;
|
| | | scrollbar-highlight-color:#F0F0EE;
|
| | | scrollbar-shadow-color:#F0F0EE;
|
| | | scrollbar-track-color:#F5F5F5;
|
| | | }
|
New file |
| | |
| | | /* Generic */
|
| | | body {
|
| | | font-family:Verdana, Arial, Helvetica, sans-serif; font-size:11px;
|
| | | scrollbar-3dlight-color:#F0F0EE;
|
| | | scrollbar-arrow-color:#676662;
|
| | | scrollbar-base-color:#F0F0EE;
|
| | | scrollbar-darkshadow-color:#DDDDDD;
|
| | | scrollbar-face-color:#E0E0DD;
|
| | | scrollbar-highlight-color:#F0F0EE;
|
| | | scrollbar-shadow-color:#F0F0EE;
|
| | | scrollbar-track-color:#F5F5F5;
|
| | | background:#F0F0EE;
|
| | | padding:0;
|
| | | margin:8px 8px 0 8px;
|
| | | }
|
| | |
|
| | | html {background:#F0F0EE;}
|
| | | td {font-family:Verdana, Arial, Helvetica, sans-serif; font-size:10px;}
|
| | | textarea {resize:none;outline:none;}
|
| | | a:link, a:visited {color:black;}
|
| | | a:hover {color:#2B6FB6;}
|
| | |
|
| | | /* Forms */
|
| | | fieldset {margin:0; padding:4px; border:1px solid #919B9C; font-family:Verdana, Arial; font-size:10px;}
|
| | | legend {color:#2B6FB6; font-weight:bold;}
|
| | | label.msg {display:none;}
|
| | | label.invalid {color:#EE0000; display:inline;}
|
| | | input.invalid {border:1px solid #EE0000;}
|
| | | input {background:#FFF; border:1px solid #CCC;}
|
| | | input, select, textarea {font-family:Verdana, Arial, Helvetica, sans-serif; font-size:10px;}
|
| | | input, select, textarea {border:1px solid #808080;}
|
| | | input.radio {border:1px none #000000; background:transparent; vertical-align:middle;}
|
| | | input.checkbox {border:1px none #000000; background:transparent; vertical-align:middle;}
|
| | | .input_noborder {border:0;}
|
| | |
|
| | | /* Buttons */
|
| | | #insert, #cancel, input.button, .updateButton {
|
| | | border:0; margin:0; padding:0;
|
| | | font-weight:bold;
|
| | | width:94px; height:26px;
|
| | | background:url(img/buttons.png) 0 -26px;
|
| | | cursor:pointer;
|
| | | padding-bottom:2px;
|
| | | }
|
| | |
|
| | | #insert {background:url(img/buttons.png) 0 -52px;}
|
| | | #cancel {background:url(img/buttons.png) 0 0;}
|
| | |
|
| | | /* Browse */
|
| | | a.browse span {display:block; width:20px; height:18px; background:url(../../img/icons.gif) -860px 0; border:1px solid #FFF; margin-left:1px;}
|
| | | .mceOldBoxModel a.browse span {width:22px; height:20px;}
|
| | | a.browse:hover span {border:1px solid #0A246A; background-color:#B2BBD0;}
|
| | | a.browse span.disabled {border:1px solid white; -moz-opacity:0.3; opacity:0.3; filter:progid:DXImageTransform.Microsoft.Alpha(opacity=30);}
|
| | | a.browse:hover span.disabled {border:1px solid white; background-color:transparent;}
|
| | | a.pickcolor span {display:block; width:20px; height:16px; background:url(../../img/icons.gif) -840px 0; margin-left:2px;}
|
| | | .mceOldBoxModel a.pickcolor span {width:21px; height:17px;}
|
| | | a.pickcolor:hover span {background-color:#B2BBD0;}
|
| | | a.pickcolor:hover span.disabled {}
|
| | |
|
| | | /* Charmap */
|
| | | table.charmap {border:1px solid #AAA; text-align:center}
|
| | | td.charmap, #charmap a {width:18px; height:18px; color:#000; border:1px solid #AAA; text-align:center; font-size:12px; vertical-align:middle; line-height: 18px;}
|
| | | #charmap a {display:block; color:#000; text-decoration:none; border:0}
|
| | | #charmap a:hover {background:#CCC;color:#2B6FB6}
|
| | | #charmap #codeN {font-size:10px; font-family:Arial,Helvetica,sans-serif; text-align:center}
|
| | | #charmap #codeV {font-size:40px; height:80px; border:1px solid #AAA; text-align:center}
|
| | |
|
| | | /* Source */
|
| | | .wordWrapCode {vertical-align:middle; border:1px none #000000; background:transparent;}
|
| | | .mceActionPanel {margin-top:5px;}
|
| | |
|
| | | /* Tabs classes */
|
| | | .tabs {width:100%; height:18px; line-height:normal; background:url(img/tabs.gif) repeat-x 0 -72px;}
|
| | | .tabs ul {margin:0; padding:0; list-style:none;}
|
| | | .tabs li {float:left; background:url(img/tabs.gif) no-repeat 0 0; margin:0 2px 0 0; padding:0 0 0 10px; line-height:17px; height:18px; display:block;}
|
| | | .tabs li.current {background:url(img/tabs.gif) no-repeat 0 -18px; margin-right:2px;}
|
| | | .tabs span {float:left; display:block; background:url(img/tabs.gif) no-repeat right -36px; padding:0px 10px 0 0;}
|
| | | .tabs .current span {background:url(img/tabs.gif) no-repeat right -54px;}
|
| | | .tabs a {text-decoration:none; font-family:Verdana, Arial; font-size:10px;}
|
| | | .tabs a:link, .tabs a:visited, .tabs a:hover {color:black;}
|
| | |
|
| | | /* Panels */
|
| | | .panel_wrapper div.panel {display:none;}
|
| | | .panel_wrapper div.current {display:block; width:100%; height:300px; overflow:visible;}
|
| | | .panel_wrapper {border:1px solid #919B9C; border-top:0px; padding:10px; padding-top:5px; clear:both; background:white;}
|
| | |
|
| | | /* Columns */
|
| | | .column {float:left;}
|
| | | .properties {width:100%;}
|
| | | .properties .column1 {}
|
| | | .properties .column2 {text-align:left;}
|
| | |
|
| | | /* Titles */
|
| | | h1, h2, h3, h4 {color:#2B6FB6; margin:0; padding:0; padding-top:5px;}
|
| | | h3 {font-size:14px;}
|
| | | .title {font-size:12px; font-weight:bold; color:#2B6FB6;}
|
| | |
|
| | | /* Dialog specific */
|
| | | #link .panel_wrapper, #link div.current {height:125px;}
|
| | | #image .panel_wrapper, #image div.current {height:200px;}
|
| | | #plugintable thead {font-weight:bold; background:#DDD;}
|
| | | #plugintable, #about #plugintable td {border:1px solid #919B9C;}
|
| | | #plugintable {width:96%; margin-top:10px;}
|
| | | #pluginscontainer {height:290px; overflow:auto;}
|
| | | #colorpicker #preview {float:right; width:50px; height:14px;line-height:1px; border:1px solid black; margin-left:5px;}
|
| | | #colorpicker #colors {float:left; border:1px solid gray; cursor:crosshair;}
|
| | | #colorpicker #light {border:1px solid gray; margin-left:5px; float:left;width:15px; height:150px; cursor:crosshair;}
|
| | | #colorpicker #light div {overflow:hidden;}
|
| | | #colorpicker #previewblock {float:right; padding-left:10px; height:20px;}
|
| | | #colorpicker .panel_wrapper div.current {height:175px;}
|
| | | #colorpicker #namedcolors {width:150px;}
|
| | | #colorpicker #namedcolors a {display:block; float:left; width:10px; height:10px; margin:1px 1px 0 0; overflow:hidden;}
|
| | | #colorpicker #colornamecontainer {margin-top:5px;}
|
| | | #colorpicker #picker_panel fieldset {margin:auto;width:325px;} |
New file |
| | |
| | | /* Reset */
|
| | | .defaultSkin table, .defaultSkin tbody, .defaultSkin a, .defaultSkin img, .defaultSkin tr, .defaultSkin div, .defaultSkin td, .defaultSkin iframe, .defaultSkin span, .defaultSkin *, .defaultSkin .mceText {border:0; margin:0; padding:0; background:transparent; white-space:nowrap; text-decoration:none; font-weight:normal; cursor:default; color:#000; vertical-align:baseline; width:auto; border-collapse:separate; text-align:left}
|
| | | .defaultSkin a:hover, .defaultSkin a:link, .defaultSkin a:visited, .defaultSkin a:active {text-decoration:none; font-weight:normal; cursor:default; color:#000}
|
| | | .defaultSkin table td {vertical-align:middle}
|
| | |
|
| | | /* Containers */
|
| | | .defaultSkin table {background:#F0F0EE}
|
| | | .defaultSkin iframe {display:block; background:#FFF}
|
| | | .defaultSkin .mceToolbar {height:26px}
|
| | | .defaultSkin .mceLeft {text-align:left}
|
| | | .defaultSkin .mceRight {text-align:right}
|
| | |
|
| | | /* External */
|
| | | .defaultSkin .mceExternalToolbar {position:absolute; border:1px solid #CCC; border-bottom:0; display:none;}
|
| | | .defaultSkin .mceExternalToolbar td.mceToolbar {padding-right:13px;}
|
| | | .defaultSkin .mceExternalClose {position:absolute; top:3px; right:3px; width:7px; height:7px; background:url(../../img/icons.gif) -820px 0}
|
| | |
|
| | | /* Layout */
|
| | | .defaultSkin table.mceLayout {border:0; border-left:1px solid #CCC; border-right:1px solid #CCC}
|
| | | .defaultSkin table.mceLayout tr.mceFirst td {border-top:1px solid #CCC}
|
| | | .defaultSkin table.mceLayout tr.mceLast td {border-bottom:1px solid #CCC}
|
| | | .defaultSkin table.mceToolbar, .defaultSkin tr.mceFirst .mceToolbar tr td, .defaultSkin tr.mceLast .mceToolbar tr td {border:0; margin:0; padding:0;}
|
| | | .defaultSkin td.mceToolbar {padding-top:1px; vertical-align:top}
|
| | | .defaultSkin .mceIframeContainer {border-top:1px solid #CCC; border-bottom:1px solid #CCC}
|
| | | .defaultSkin .mceStatusbar {font-family:'MS Sans Serif',sans-serif,Verdana,Arial; font-size:9pt; line-height:16px; overflow:visible; color:#000; display:block; height:20px}
|
| | | .defaultSkin .mceStatusbar div {float:left; margin:2px}
|
| | | .defaultSkin .mceStatusbar a.mceResize {display:block; float:right; background:url(../../img/icons.gif) -800px 0; width:20px; height:20px; cursor:se-resize}
|
| | | .defaultSkin .mceStatusbar a:hover {text-decoration:underline}
|
| | | .defaultSkin table.mceToolbar {margin-left:3px}
|
| | | .defaultSkin span.mceIcon, .defaultSkin img.mceIcon {display:block; width:20px; height:20px}
|
| | | .defaultSkin .mceIcon {background:url(../../img/icons.gif) no-repeat 20px 20px}
|
| | | .defaultSkin td.mceCenter {text-align:center;}
|
| | | .defaultSkin td.mceCenter table {margin:0 auto; text-align:left;}
|
| | | .defaultSkin td.mceRight table {margin:0 0 0 auto;}
|
| | |
|
| | | /* Button */
|
| | | .defaultSkin .mceButton {display:block; border:1px solid #F0F0EE; width:20px; height:20px; margin-right:1px;}
|
| | | .defaultSkin a.mceButtonEnabled:hover {border:1px solid #0A246A; background-color:#B2BBD0}
|
| | | .defaultSkin a.mceButtonActive, .defaultSkin a.mceButtonSelected {border:1px solid #0A246A; background-color:#C2CBE0}
|
| | | .defaultSkin .mceButtonDisabled .mceIcon {opacity:0.3; filter:alpha(opacity=30)}
|
| | |
|
| | | /* Separator */
|
| | | .defaultSkin .mceSeparator {display:block; background:url(../../img/icons.gif) -180px 0; width:2px; height:20px; margin:2px 2px 0 4px}
|
| | |
|
| | | /* ListBox */
|
| | | .defaultSkin .mceListBox {direction:ltr}
|
| | | .defaultSkin .mceListBox, .defaultSkin .mceListBox a {display:block}
|
| | | .defaultSkin .mceListBox .mceText {padding-left:4px; width:70px; text-align:left; border:1px solid #CCC; border-right:0; background:#FFF; font-family:Tahoma,Verdana,Arial,Helvetica; font-size:11px; height:20px; line-height:20px; overflow:hidden}
|
| | | .defaultSkin .mceListBox .mceOpen {width:9px; height:20px; background:url(../../img/icons.gif) -741px 0; margin-right:2px; border:1px solid #CCC;}
|
| | | .defaultSkin table.mceListBoxEnabled:hover .mceText, .defaultSkin .mceListBoxHover .mceText, .defaultSkin .mceListBoxSelected .mceText {border:1px solid #A2ABC0; border-right:0; background:#FFF}
|
| | | .defaultSkin table.mceListBoxEnabled:hover .mceOpen, .defaultSkin .mceListBoxHover .mceOpen, .defaultSkin .mceListBoxSelected .mceOpen {background-color:#FFF; border:1px solid #A2ABC0}
|
| | | .defaultSkin .mceListBoxDisabled a.mceText {color:gray; background-color:transparent;}
|
| | | .defaultSkin .mceListBoxMenu {overflow:auto; overflow-x:hidden}
|
| | | .defaultSkin .mceOldBoxModel .mceListBox .mceText {height:22px}
|
| | | .defaultSkin .mceOldBoxModel .mceListBox .mceOpen {width:11px; height:22px;}
|
| | | .defaultSkin select.mceNativeListBox {font-family:'MS Sans Serif',sans-serif,Verdana,Arial; font-size:7pt; background:#F0F0EE; border:1px solid gray; margin-right:2px;}
|
| | |
|
| | | /* SplitButton */
|
| | | .defaultSkin .mceSplitButton {width:32px; height:20px; direction:ltr}
|
| | | .defaultSkin .mceSplitButton a, .defaultSkin .mceSplitButton span {height:20px; display:block}
|
| | | .defaultSkin .mceSplitButton a.mceAction {width:20px; border:1px solid #F0F0EE; border-right:0;}
|
| | | .defaultSkin .mceSplitButton span.mceAction {width:20px; background:url(../../img/icons.gif) 20px 20px;}
|
| | | .defaultSkin .mceSplitButton a.mceOpen {width:9px; border:1px solid #F0F0EE;}
|
| | | .defaultSkin .mceSplitButton span.mceOpen {width:9px; background:url(../../img/icons.gif) -741px 0;}
|
| | | .defaultSkin table.mceSplitButtonEnabled:hover a.mceAction, .defaultSkin .mceSplitButtonHover a.mceAction, .defaultSkin .mceSplitButtonSelected a.mceAction {border:1px solid #0A246A; border-right:0; background-color:#B2BBD0}
|
| | | .defaultSkin table.mceSplitButtonEnabled:hover a.mceOpen, .defaultSkin .mceSplitButtonHover a.mceOpen, .defaultSkin .mceSplitButtonSelected a.mceOpen {border:1px solid #0A246A;}
|
| | | .defaultSkin table.mceSplitButtonEnabled:hover span.mceOpen, .defaultSkin .mceSplitButtonHover span.mceOpen, .defaultSkin .mceSplitButtonSelected span.mceOpen {background-color:#B2BBD0}
|
| | | .defaultSkin .mceSplitButtonDisabled .mceAction, .defaultSkin .mceSplitButtonDisabled span.mceOpen {opacity:0.3; filter:alpha(opacity=30)}
|
| | | .defaultSkin .mceSplitButtonActive a.mceAction {border:1px solid #0A246A; background-color:#C2CBE0}
|
| | | .defaultSkin .mceSplitButtonActive a.mceOpen {border-left:0;}
|
| | |
|
| | | /* ColorSplitButton */
|
| | | .defaultSkin div.mceColorSplitMenu table {background:#FFF; border:1px solid gray}
|
| | | .defaultSkin .mceColorSplitMenu td {padding:2px}
|
| | | .defaultSkin .mceColorSplitMenu a {display:block; width:9px; height:9px; overflow:hidden; border:1px solid #808080}
|
| | | .defaultSkin .mceColorSplitMenu td.mceMoreColors {padding:1px 3px 1px 1px}
|
| | | .defaultSkin .mceColorSplitMenu a.mceMoreColors {width:100%; height:auto; text-align:center; font-family:Tahoma,Verdana,Arial,Helvetica; font-size:11px; line-height:20px; border:1px solid #FFF}
|
| | | .defaultSkin .mceColorSplitMenu a.mceMoreColors:hover {border:1px solid #0A246A; background-color:#B6BDD2}
|
| | | .defaultSkin a.mceMoreColors:hover {border:1px solid #0A246A}
|
| | | .defaultSkin .mceColorPreview {margin-left:2px; width:16px; height:4px; overflow:hidden; background:#9a9b9a}
|
| | | .defaultSkin .mce_forecolor span.mceAction, .defaultSkin .mce_backcolor span.mceAction {overflow:hidden; height:16px}
|
| | |
|
| | | /* Menu */
|
| | | .defaultSkin .mceMenu {position:absolute; left:0; top:0; z-index:1000; border:1px solid #D4D0C8}
|
| | | .defaultSkin .mceNoIcons span.mceIcon {width:0;}
|
| | | .defaultSkin .mceNoIcons a .mceText {padding-left:10px}
|
| | | .defaultSkin .mceMenu table {background:#FFF}
|
| | | .defaultSkin .mceMenu a, .defaultSkin .mceMenu span, .defaultSkin .mceMenu {display:block}
|
| | | .defaultSkin .mceMenu td {height:20px}
|
| | | .defaultSkin .mceMenu a {position:relative;padding:3px 0 4px 0}
|
| | | .defaultSkin .mceMenu .mceText {position:relative; display:block; font-family:Tahoma,Verdana,Arial,Helvetica; color:#000; cursor:default; margin:0; padding:0 25px 0 25px; display:block}
|
| | | .defaultSkin .mceMenu span.mceText, .defaultSkin .mceMenu .mcePreview {font-size:11px}
|
| | | .defaultSkin .mceMenu pre.mceText {font-family:Monospace}
|
| | | .defaultSkin .mceMenu .mceIcon {position:absolute; top:0; left:0; width:22px;}
|
| | | .defaultSkin .mceMenu .mceMenuItemEnabled a:hover, .defaultSkin .mceMenu .mceMenuItemActive {background-color:#dbecf3}
|
| | | .defaultSkin td.mceMenuItemSeparator {background:#DDD; height:1px}
|
| | | .defaultSkin .mceMenuItemTitle a {border:0; background:#EEE; border-bottom:1px solid #DDD}
|
| | | .defaultSkin .mceMenuItemTitle span.mceText {color:#000; font-weight:bold; padding-left:4px}
|
| | | .defaultSkin .mceMenuItemDisabled .mceText {color:#888}
|
| | | .defaultSkin .mceMenuItemSelected .mceIcon {background:url(img/menu_check.gif)}
|
| | | .defaultSkin .mceNoIcons .mceMenuItemSelected a {background:url(img/menu_arrow.gif) no-repeat -6px center}
|
| | | .defaultSkin .mceMenu span.mceMenuLine {display:none}
|
| | | .defaultSkin .mceMenuItemSub a {background:url(img/menu_arrow.gif) no-repeat top right;}
|
| | |
|
| | | /* Progress,Resize */
|
| | | .defaultSkin .mceBlocker {position:absolute; left:0; top:0; z-index:1000; opacity:0.5; filter:alpha(opacity=50); background:#FFF}
|
| | | .defaultSkin .mceProgress {position:absolute; left:0; top:0; z-index:1001; background:url(img/progress.gif) no-repeat; width:32px; height:32px; margin:-16px 0 0 -16px}
|
| | | .defaultSkin .mcePlaceHolder {border:1px dotted gray}
|
| | |
|
| | | /* Formats */
|
| | | .defaultSkin .mce_formatPreview a {font-size:10px}
|
| | | .defaultSkin .mce_p span.mceText {}
|
| | | .defaultSkin .mce_address span.mceText {font-style:italic}
|
| | | .defaultSkin .mce_pre span.mceText {font-family:monospace}
|
| | | .defaultSkin .mce_h1 span.mceText {font-weight:bolder; font-size: 2em}
|
| | | .defaultSkin .mce_h2 span.mceText {font-weight:bolder; font-size: 1.5em}
|
| | | .defaultSkin .mce_h3 span.mceText {font-weight:bolder; font-size: 1.17em}
|
| | | .defaultSkin .mce_h4 span.mceText {font-weight:bolder; font-size: 1em}
|
| | | .defaultSkin .mce_h5 span.mceText {font-weight:bolder; font-size: .83em}
|
| | | .defaultSkin .mce_h6 span.mceText {font-weight:bolder; font-size: .75em}
|
| | |
|
| | | /* Theme */
|
| | | .defaultSkin span.mce_bold {background-position:0 0}
|
| | | .defaultSkin span.mce_italic {background-position:-60px 0}
|
| | | .defaultSkin span.mce_underline {background-position:-140px 0}
|
| | | .defaultSkin span.mce_strikethrough {background-position:-120px 0}
|
| | | .defaultSkin span.mce_undo {background-position:-160px 0}
|
| | | .defaultSkin span.mce_redo {background-position:-100px 0}
|
| | | .defaultSkin span.mce_cleanup {background-position:-40px 0}
|
| | | .defaultSkin span.mce_bullist {background-position:-20px 0}
|
| | | .defaultSkin span.mce_numlist {background-position:-80px 0}
|
| | | .defaultSkin span.mce_justifyleft {background-position:-460px 0}
|
| | | .defaultSkin span.mce_justifyright {background-position:-480px 0}
|
| | | .defaultSkin span.mce_justifycenter {background-position:-420px 0}
|
| | | .defaultSkin span.mce_justifyfull {background-position:-440px 0}
|
| | | .defaultSkin span.mce_anchor {background-position:-200px 0}
|
| | | .defaultSkin span.mce_indent {background-position:-400px 0}
|
| | | .defaultSkin span.mce_outdent {background-position:-540px 0}
|
| | | .defaultSkin span.mce_link {background-position:-500px 0}
|
| | | .defaultSkin span.mce_unlink {background-position:-640px 0}
|
| | | .defaultSkin span.mce_sub {background-position:-600px 0}
|
| | | .defaultSkin span.mce_sup {background-position:-620px 0}
|
| | | .defaultSkin span.mce_removeformat {background-position:-580px 0}
|
| | | .defaultSkin span.mce_newdocument {background-position:-520px 0}
|
| | | .defaultSkin span.mce_image {background-position:-380px 0}
|
| | | .defaultSkin span.mce_help {background-position:-340px 0}
|
| | | .defaultSkin span.mce_code {background-position:-260px 0}
|
| | | .defaultSkin span.mce_hr {background-position:-360px 0}
|
| | | .defaultSkin span.mce_visualaid {background-position:-660px 0}
|
| | | .defaultSkin span.mce_charmap {background-position:-240px 0}
|
| | | .defaultSkin span.mce_paste {background-position:-560px 0}
|
| | | .defaultSkin span.mce_copy {background-position:-700px 0}
|
| | | .defaultSkin span.mce_cut {background-position:-680px 0}
|
| | | .defaultSkin span.mce_blockquote {background-position:-220px 0}
|
| | | .defaultSkin .mce_forecolor span.mceAction {background-position:-720px 0}
|
| | | .defaultSkin .mce_backcolor span.mceAction {background-position:-760px 0}
|
| | | .defaultSkin .mce_forecolorpicker {background-position:-720px 0}
|
| | | .defaultSkin .mce_backcolorpicker {background-position:-760px 0}
|
| | |
|
| | | /* Plugins */
|
| | | .defaultSkin span.mce_advhr {background-position:-0px -20px}
|
| | | .defaultSkin span.mce_ltr {background-position:-20px -20px}
|
| | | .defaultSkin span.mce_rtl {background-position:-40px -20px}
|
| | | .defaultSkin span.mce_emotions {background-position:-60px -20px}
|
| | | .defaultSkin span.mce_fullpage {background-position:-80px -20px}
|
| | | .defaultSkin span.mce_fullscreen {background-position:-100px -20px}
|
| | | .defaultSkin span.mce_iespell {background-position:-120px -20px}
|
| | | .defaultSkin span.mce_insertdate {background-position:-140px -20px}
|
| | | .defaultSkin span.mce_inserttime {background-position:-160px -20px}
|
| | | .defaultSkin span.mce_absolute {background-position:-180px -20px}
|
| | | .defaultSkin span.mce_backward {background-position:-200px -20px}
|
| | | .defaultSkin span.mce_forward {background-position:-220px -20px}
|
| | | .defaultSkin span.mce_insert_layer {background-position:-240px -20px}
|
| | | .defaultSkin span.mce_insertlayer {background-position:-260px -20px}
|
| | | .defaultSkin span.mce_movebackward {background-position:-280px -20px}
|
| | | .defaultSkin span.mce_moveforward {background-position:-300px -20px}
|
| | | .defaultSkin span.mce_media {background-position:-320px -20px}
|
| | | .defaultSkin span.mce_nonbreaking {background-position:-340px -20px}
|
| | | .defaultSkin span.mce_pastetext {background-position:-360px -20px}
|
| | | .defaultSkin span.mce_pasteword {background-position:-380px -20px}
|
| | | .defaultSkin span.mce_selectall {background-position:-400px -20px}
|
| | | .defaultSkin span.mce_preview {background-position:-420px -20px}
|
| | | .defaultSkin span.mce_print {background-position:-440px -20px}
|
| | | .defaultSkin span.mce_cancel {background-position:-460px -20px}
|
| | | .defaultSkin span.mce_save {background-position:-480px -20px}
|
| | | .defaultSkin span.mce_replace {background-position:-500px -20px}
|
| | | .defaultSkin span.mce_search {background-position:-520px -20px}
|
| | | .defaultSkin span.mce_styleprops {background-position:-560px -20px}
|
| | | .defaultSkin span.mce_table {background-position:-580px -20px}
|
| | | .defaultSkin span.mce_cell_props {background-position:-600px -20px}
|
| | | .defaultSkin span.mce_delete_table {background-position:-620px -20px}
|
| | | .defaultSkin span.mce_delete_col {background-position:-640px -20px}
|
| | | .defaultSkin span.mce_delete_row {background-position:-660px -20px}
|
| | | .defaultSkin span.mce_col_after {background-position:-680px -20px}
|
| | | .defaultSkin span.mce_col_before {background-position:-700px -20px}
|
| | | .defaultSkin span.mce_row_after {background-position:-720px -20px}
|
| | | .defaultSkin span.mce_row_before {background-position:-740px -20px}
|
| | | .defaultSkin span.mce_merge_cells {background-position:-760px -20px}
|
| | | .defaultSkin span.mce_table_props {background-position:-980px -20px}
|
| | | .defaultSkin span.mce_row_props {background-position:-780px -20px}
|
| | | .defaultSkin span.mce_split_cells {background-position:-800px -20px}
|
| | | .defaultSkin span.mce_template {background-position:-820px -20px}
|
| | | .defaultSkin span.mce_visualchars {background-position:-840px -20px}
|
| | | .defaultSkin span.mce_abbr {background-position:-860px -20px}
|
| | | .defaultSkin span.mce_acronym {background-position:-880px -20px}
|
| | | .defaultSkin span.mce_attribs {background-position:-900px -20px}
|
| | | .defaultSkin span.mce_cite {background-position:-920px -20px}
|
| | | .defaultSkin span.mce_del {background-position:-940px -20px}
|
| | | .defaultSkin span.mce_ins {background-position:-960px -20px}
|
| | | .defaultSkin span.mce_pagebreak {background-position:0 -40px}
|
| | | .defaultSkin .mce_spellchecker span.mceAction {background-position:-540px -20px}
|
New file |
| | |
| | | body, td, pre {color:#000; font-family:Verdana, Arial, Helvetica, sans-serif; font-size:10px; margin:8px;}
|
| | | body {background:#FFF;}
|
| | | body.mceForceColors {background:#FFF; color:#000;}
|
| | | h1 {font-size: 2em}
|
| | | h2 {font-size: 1.5em}
|
| | | h3 {font-size: 1.17em}
|
| | | h4 {font-size: 1em}
|
| | | h5 {font-size: .83em}
|
| | | h6 {font-size: .75em}
|
| | | .mceItemTable, .mceItemTable td, .mceItemTable th, .mceItemTable caption, .mceItemVisualAid {border: 1px dashed #BBB;}
|
| | | a.mceItemAnchor {width:12px; line-height:6px; overflow:hidden; padding-left:12px; background:url(../default/img/items.gif) no-repeat bottom left;}
|
| | | img.mceItemAnchor {width:12px; height:12px; background:url(../default/img/items.gif) no-repeat;}
|
| | | img {border:0;}
|
| | |
|
| | | /* IE */
|
| | | * html body {
|
| | | scrollbar-3dlight-color:#F0F0EE;
|
| | | scrollbar-arrow-color:#676662;
|
| | | scrollbar-base-color:#F0F0EE;
|
| | | scrollbar-darkshadow-color:#DDD;
|
| | | scrollbar-face-color:#E0E0DD;
|
| | | scrollbar-highlight-color:#F0F0EE;
|
| | | scrollbar-shadow-color:#F0F0EE;
|
| | | scrollbar-track-color:#F5F5F5;
|
| | | }
|
New file |
| | |
| | | /* Generic */
|
| | | body {
|
| | | font-family:Verdana, Arial, Helvetica, sans-serif; font-size:11px;
|
| | | scrollbar-3dlight-color:#F0F0EE;
|
| | | scrollbar-arrow-color:#676662;
|
| | | scrollbar-base-color:#F0F0EE;
|
| | | scrollbar-darkshadow-color:#DDDDDD;
|
| | | scrollbar-face-color:#E0E0DD;
|
| | | scrollbar-highlight-color:#F0F0EE;
|
| | | scrollbar-shadow-color:#F0F0EE;
|
| | | scrollbar-track-color:#F5F5F5;
|
| | | background:#F0F0EE;
|
| | | padding:0;
|
| | | margin:8px 8px 0 8px;
|
| | | }
|
| | |
|
| | | html {background:#F0F0EE;}
|
| | | td {font-family:Verdana, Arial, Helvetica, sans-serif; font-size:10px;}
|
| | | textarea {resize:none;outline:none;}
|
| | | a:link, a:visited {color:black;}
|
| | | a:hover {color:#2B6FB6;}
|
| | |
|
| | | /* Forms */
|
| | | fieldset {margin:0; padding:4px; border:1px solid #919B9C; font-family:Verdana, Arial; font-size:10px;}
|
| | | legend {color:#2B6FB6; font-weight:bold;}
|
| | | label.msg {display:none;}
|
| | | label.invalid {color:#EE0000; display:inline;}
|
| | | input.invalid {border:1px solid #EE0000;}
|
| | | input {background:#FFF; border:1px solid #CCC;}
|
| | | input, select, textarea {font-family:Verdana, Arial, Helvetica, sans-serif; font-size:10px;}
|
| | | input, select, textarea {border:1px solid #808080;}
|
| | | input.radio {border:1px none #000000; background:transparent; vertical-align:middle;}
|
| | | input.checkbox {border:1px none #000000; background:transparent; vertical-align:middle;}
|
| | | .input_noborder {border:0;}
|
| | |
|
| | | /* Buttons */
|
| | | #insert, #cancel, input.button, .updateButton {
|
| | | border:0; margin:0; padding:0;
|
| | | font-weight:bold;
|
| | | width:94px; height:26px;
|
| | | background:url(../default/img/buttons.png) 0 -26px;
|
| | | cursor:pointer;
|
| | | padding-bottom:2px;
|
| | | }
|
| | |
|
| | | #insert {background:url(../default/img/buttons.png) 0 -52px;}
|
| | | #cancel {background:url(../default/img/buttons.png) 0 0;}
|
| | |
|
| | | /* Browse */
|
| | | a.browse span {display:block; width:20px; height:18px; background:url(../../img/icons.gif) -860px 0; border:1px solid #FFF; margin-left:1px;}
|
| | | .mceOldBoxModel a.browse span {width:22px; height:20px;}
|
| | | a.browse:hover span {border:1px solid #0A246A; background-color:#B2BBD0;}
|
| | | a.browse span.disabled {border:1px solid white; -moz-opacity:0.3; opacity:0.3; filter:progid:DXImageTransform.Microsoft.Alpha(opacity=30);}
|
| | | a.browse:hover span.disabled {border:1px solid white; background-color:transparent;}
|
| | | a.pickcolor span {display:block; width:20px; height:16px; background:url(../../img/icons.gif) -840px 0; margin-left:2px;}
|
| | | .mceOldBoxModel a.pickcolor span {width:21px; height:17px;}
|
| | | a.pickcolor:hover span {background-color:#B2BBD0;}
|
| | | a.pickcolor:hover span.disabled {}
|
| | |
|
| | | /* Charmap */
|
| | | table.charmap {border:1px solid #AAA; text-align:center}
|
| | | td.charmap, #charmap a {width:18px; height:18px; color:#000; border:1px solid #AAA; text-align:center; font-size:12px; vertical-align:middle; line-height: 18px;}
|
| | | #charmap a {display:block; color:#000; text-decoration:none; border:0}
|
| | | #charmap a:hover {background:#CCC;color:#2B6FB6}
|
| | | #charmap #codeN {font-size:10px; font-family:Arial,Helvetica,sans-serif; text-align:center}
|
| | | #charmap #codeV {font-size:40px; height:80px; border:1px solid #AAA; text-align:center}
|
| | |
|
| | | /* Source */
|
| | | .wordWrapCode {vertical-align:middle; border:1px none #000000; background:transparent;}
|
| | | .mceActionPanel {margin-top:5px;}
|
| | |
|
| | | /* Tabs classes */
|
| | | .tabs {width:100%; height:18px; line-height:normal; background:url(../default/img/tabs.gif) repeat-x 0 -72px;}
|
| | | .tabs ul {margin:0; padding:0; list-style:none;}
|
| | | .tabs li {float:left; background:url(../default/img/tabs.gif) no-repeat 0 0; margin:0 2px 0 0; padding:0 0 0 10px; line-height:17px; height:18px; display:block;}
|
| | | .tabs li.current {background:url(../default/img/tabs.gif) no-repeat 0 -18px; margin-right:2px;}
|
| | | .tabs span {float:left; display:block; background:url(../default/img/tabs.gif) no-repeat right -36px; padding:0px 10px 0 0;}
|
| | | .tabs .current span {background:url(../default/img/tabs.gif) no-repeat right -54px;}
|
| | | .tabs a {text-decoration:none; font-family:Verdana, Arial; font-size:10px;}
|
| | | .tabs a:link, .tabs a:visited, .tabs a:hover {color:black;}
|
| | |
|
| | | /* Panels */
|
| | | .panel_wrapper div.panel {display:none;}
|
| | | .panel_wrapper div.current {display:block; width:100%; height:300px; overflow:visible;}
|
| | | .panel_wrapper {border:1px solid #919B9C; border-top:0px; padding:10px; padding-top:5px; clear:both; background:white;}
|
| | |
|
| | | /* Columns */
|
| | | .column {float:left;}
|
| | | .properties {width:100%;}
|
| | | .properties .column1 {}
|
| | | .properties .column2 {text-align:left;}
|
| | |
|
| | | /* Titles */
|
| | | h1, h2, h3, h4 {color:#2B6FB6; margin:0; padding:0; padding-top:5px;}
|
| | | h3 {font-size:14px;}
|
| | | .title {font-size:12px; font-weight:bold; color:#2B6FB6;}
|
| | |
|
| | | /* Dialog specific */
|
| | | #link .panel_wrapper, #link div.current {height:125px;}
|
| | | #image .panel_wrapper, #image div.current {height:200px;}
|
| | | #plugintable thead {font-weight:bold; background:#DDD;}
|
| | | #plugintable, #about #plugintable td {border:1px solid #919B9C;}
|
| | | #plugintable {width:96%; margin-top:10px;}
|
| | | #pluginscontainer {height:290px; overflow:auto;}
|
| | | #colorpicker #preview {float:right; width:50px; height:14px;line-height:1px; border:1px solid black; margin-left:5px;}
|
| | | #colorpicker #colors {float:left; border:1px solid gray; cursor:crosshair;}
|
| | | #colorpicker #light {border:1px solid gray; margin-left:5px; float:left;width:15px; height:150px; cursor:crosshair;}
|
| | | #colorpicker #light div {overflow:hidden;}
|
| | | #colorpicker #previewblock {float:right; padding-left:10px; height:20px;}
|
| | | #colorpicker .panel_wrapper div.current {height:175px;}
|
| | | #colorpicker #namedcolors {width:150px;}
|
| | | #colorpicker #namedcolors a {display:block; float:left; width:10px; height:10px; margin:1px 1px 0 0; overflow:hidden;}
|
| | | #colorpicker #colornamecontainer {margin-top:5px;}
|
New file |
| | |
| | | /* Reset */
|
| | | .o2k7Skin table, .o2k7Skin tbody, .o2k7Skin a, .o2k7Skin img, .o2k7Skin tr, .o2k7Skin div, .o2k7Skin td, .o2k7Skin iframe, .o2k7Skin span, .o2k7Skin *, .o2k7Skin .mceText {border:0; margin:0; padding:0; background:transparent; white-space:nowrap; text-decoration:none; font-weight:normal; cursor:default; color:#000; vertical-align:baseline; width:auto; border-collapse:separate; text-align:left}
|
| | | .o2k7Skin a:hover, .o2k7Skin a:link, .o2k7Skin a:visited, .o2k7Skin a:active {text-decoration:none; font-weight:normal; cursor:default; color:#000}
|
| | | .o2k7Skin table td {vertical-align:middle}
|
| | |
|
| | | /* Containers */
|
| | | .o2k7Skin table {background:#E5EFFD}
|
| | | .o2k7Skin iframe {display:block; background:#FFF}
|
| | | .o2k7Skin .mceToolbar {height:26px}
|
| | |
|
| | | /* External */
|
| | | .o2k7Skin .mceExternalToolbar {position:absolute; border:1px solid #ABC6DD; border-bottom:0; display:none}
|
| | | .o2k7Skin .mceExternalToolbar td.mceToolbar {padding-right:13px;}
|
| | | .o2k7Skin .mceExternalClose {position:absolute; top:3px; right:3px; width:7px; height:7px; background:url(../../img/icons.gif) -820px 0}
|
| | |
|
| | | /* Layout */
|
| | | .o2k7Skin table.mceLayout {border:0; border-left:1px solid #ABC6DD; border-right:1px solid #ABC6DD}
|
| | | .o2k7Skin table.mceLayout tr.mceFirst td {border-top:1px solid #ABC6DD}
|
| | | .o2k7Skin table.mceLayout tr.mceLast td {border-bottom:1px solid #ABC6DD}
|
| | | .o2k7Skin table.mceToolbar, .o2k7Skin tr.mceFirst .mceToolbar tr td, .o2k7Skin tr.mceLast .mceToolbar tr td {border:0; margin:0; padding:0}
|
| | | .o2k7Skin .mceIframeContainer {border-top:1px solid #ABC6DD; border-bottom:1px solid #ABC6DD}
|
| | | .o2k7Skin .mceStatusbar {display:block; font-family:'MS Sans Serif',sans-serif,Verdana,Arial; font-size:9pt; line-height:16px; overflow:visible; color:#000; height:20px}
|
| | | .o2k7Skin .mceStatusbar div {float:left; padding:2px}
|
| | | .o2k7Skin .mceStatusbar a.mceResize {display:block; float:right; background:url(../../img/icons.gif) -800px 0; width:20px; height:20px; cursor:se-resize}
|
| | | .o2k7Skin .mceStatusbar a:hover {text-decoration:underline}
|
| | | .o2k7Skin table.mceToolbar {margin-left:3px}
|
| | | .o2k7Skin .mceToolbar .mceToolbarStart span {display:block; background:url(img/button_bg.png) -22px 0; width:1px; height:22px; margin-left:3px;}
|
| | | .o2k7Skin .mceToolbar td.mceFirst span {margin:0}
|
| | | .o2k7Skin .mceToolbar .mceToolbarEnd span {display:block; background:url(img/button_bg.png) -22px 0; width:1px; height:22px}
|
| | | .o2k7Skin .mceToolbar .mceToolbarEndListBox span, .o2k7Skin .mceToolbar .mceToolbarStartListBox span {display:none}
|
| | | .o2k7Skin span.mceIcon, .o2k7Skin img.mceIcon {display:block; width:20px; height:20px}
|
| | | .o2k7Skin .mceIcon {background:url(../../img/icons.gif) no-repeat 20px 20px}
|
| | | .o2k7Skin td.mceCenter {text-align:center;}
|
| | | .o2k7Skin td.mceCenter table {margin:0 auto; text-align:left;}
|
| | | .o2k7Skin td.mceRight table {margin:0 0 0 auto;}
|
| | |
|
| | | /* Button */
|
| | | .o2k7Skin .mceButton {display:block; background:url(img/button_bg.png); width:22px; height:22px}
|
| | | .o2k7Skin a.mceButton span, .o2k7Skin a.mceButton img {margin-left:1px}
|
| | | .o2k7Skin .mceOldBoxModel a.mceButton span, .o2k7Skin .mceOldBoxModel a.mceButton img {margin:0 0 0 1px}
|
| | | .o2k7Skin a.mceButtonEnabled:hover {background-color:#B2BBD0; background-position:0 -22px}
|
| | | .o2k7Skin a.mceButtonActive, .o2k7Skin a.mceButtonSelected {background-position:0 -44px}
|
| | | .o2k7Skin .mceButtonDisabled .mceIcon {opacity:0.3; filter:alpha(opacity=30)}
|
| | |
|
| | | /* Separator */
|
| | | .o2k7Skin .mceSeparator {display:block; background:url(img/button_bg.png) -22px 0; width:5px; height:22px}
|
| | |
|
| | | /* ListBox */
|
| | | .o2k7Skin .mceListBox {margin-left:3px}
|
| | | .o2k7Skin .mceListBox, .o2k7Skin .mceListBox a {display:block}
|
| | | .o2k7Skin .mceListBox .mceText {padding-left:4px; text-align:left; width:70px; border:1px solid #b3c7e1; border-right:0; background:#eaf2fb; font-family:Tahoma,Verdana,Arial,Helvetica; font-size:11px; height:20px; line-height:20px; overflow:hidden}
|
| | | .o2k7Skin .mceListBox .mceOpen {width:14px; height:22px; background:url(img/button_bg.png) -66px 0}
|
| | | .o2k7Skin table.mceListBoxEnabled:hover .mceText, .o2k7Skin .mceListBoxHover .mceText, .o2k7Skin .mceListBoxSelected .mceText {background:#FFF}
|
| | | .o2k7Skin table.mceListBoxEnabled:hover .mceOpen, .o2k7Skin .mceListBoxHover .mceOpen, .o2k7Skin .mceListBoxSelected .mceOpen {background-position:-66px -22px}
|
| | | .o2k7Skin .mceListBoxDisabled .mceText {color:gray}
|
| | | .o2k7Skin .mceListBoxMenu {overflow:auto; overflow-x:hidden}
|
| | | .o2k7Skin .mceOldBoxModel .mceListBox .mceText {height:22px}
|
| | | .o2k7Skin select.mceListBox {font-family:Tahoma,Verdana,Arial,Helvetica; font-size:12px; border:1px solid #b3c7e1; background:#FFF;}
|
| | |
|
| | | /* SplitButton */
|
| | | .o2k7Skin .mceSplitButton, .o2k7Skin .mceSplitButton a, .o2k7Skin .mceSplitButton span {display:block; height:22px}
|
| | | .o2k7Skin .mceSplitButton {background:url(img/button_bg.png)}
|
| | | .o2k7Skin .mceSplitButton a.mceAction {width:22px}
|
| | | .o2k7Skin .mceSplitButton span.mceAction {width:22px; background:url(../../img/icons.gif) 20px 20px}
|
| | | .o2k7Skin .mceSplitButton a.mceOpen {width:10px}
|
| | | .o2k7Skin .mceSplitButton span.mceOpen {width:10px; background:url(img/button_bg.png) -44px 0}
|
| | | .o2k7Skin table.mceSplitButtonEnabled:hover a.mceAction, .o2k7Skin .mceSplitButtonHover a.mceAction, .o2k7Skin .mceSplitButtonSelected {background:url(img/button_bg.png) 0 -22px}
|
| | | .o2k7Skin table.mceSplitButtonEnabled:hover span.mceOpen, .o2k7Skin .mceSplitButtonHover span.mceOpen, .o2k7Skin .mceSplitButtonSelected span.mceOpen {background-position:-44px -44px}
|
| | | .o2k7Skin .mceSplitButtonDisabled .mceAction {opacity:0.3; filter:alpha(opacity=30)}
|
| | | .o2k7Skin .mceSplitButtonActive {background-position:0 -44px}
|
| | |
|
| | | /* ColorSplitButton */
|
| | | .o2k7Skin div.mceColorSplitMenu table {background:#FFF; border:1px solid gray}
|
| | | .o2k7Skin .mceColorSplitMenu td {padding:2px}
|
| | | .o2k7Skin .mceColorSplitMenu a {display:block; width:9px; height:9px; overflow:hidden; border:1px solid #808080}
|
| | | .o2k7Skin .mceColorSplitMenu td.mceMoreColors {padding:1px 3px 1px 1px}
|
| | | .o2k7Skin .mceColorSplitMenu a.mceMoreColors {width:100%; height:auto; text-align:center; font-family:Tahoma,Verdana,Arial,Helvetica; font-size:11px; line-height:20px; border:1px solid #FFF}
|
| | | .o2k7Skin .mceColorSplitMenu a.mceMoreColors:hover {border:1px solid #0A246A; background-color:#B6BDD2}
|
| | | .o2k7Skin a.mceMoreColors:hover {border:1px solid #0A246A}
|
| | | .o2k7Skin .mceColorPreview {margin-left:2px; width:16px; height:4px; overflow:hidden; background:#9a9b9a}
|
| | | .o2k7Skin .mce_forecolor span.mceAction, .o2k7Skin .mce_backcolor span.mceAction {height:15px}
|
| | |
|
| | | /* Menu */
|
| | | .o2k7Skin .mceMenu {position:absolute; left:0; top:0; z-index:1000; border:1px solid #ABC6DD}
|
| | | .o2k7Skin .mceNoIcons span.mceIcon {width:0;}
|
| | | .o2k7Skin .mceNoIcons a .mceText {padding-left:10px}
|
| | | .o2k7Skin .mceMenu table {background:#FFF}
|
| | | .o2k7Skin .mceMenu a, .o2k7Skin .mceMenu span, .o2k7Skin .mceMenu {display:block}
|
| | | .o2k7Skin .mceMenu td {height:20px}
|
| | | .o2k7Skin .mceMenu a {position:relative;padding:3px 0 4px 0}
|
| | | .o2k7Skin .mceMenu .mceText {position:relative; display:block; font-family:Tahoma,Verdana,Arial,Helvetica; color:#000; cursor:default; margin:0; padding:0 25px 0 25px; display:block}
|
| | | .o2k7Skin .mceMenu span.mceText, .o2k7Skin .mceMenu .mcePreview {font-size:11px}
|
| | | .o2k7Skin .mceMenu pre.mceText {font-family:Monospace}
|
| | | .o2k7Skin .mceMenu .mceIcon {position:absolute; top:0; left:0; width:22px;}
|
| | | .o2k7Skin .mceMenu .mceMenuItemEnabled a:hover, .o2k7Skin .mceMenu .mceMenuItemActive {background-color:#dbecf3}
|
| | | .o2k7Skin td.mceMenuItemSeparator {background:#DDD; height:1px}
|
| | | .o2k7Skin .mceMenuItemTitle a {border:0; background:#E5EFFD; border-bottom:1px solid #ABC6DD}
|
| | | .o2k7Skin .mceMenuItemTitle span.mceText {color:#000; font-weight:bold; padding-left:4px}
|
| | | .o2k7Skin .mceMenuItemDisabled .mceText {color:#888}
|
| | | .o2k7Skin .mceMenuItemSelected .mceIcon {background:url(../default/img/menu_check.gif)}
|
| | | .o2k7Skin .mceNoIcons .mceMenuItemSelected a {background:url(../default/img/menu_arrow.gif) no-repeat -6px center}
|
| | | .o2k7Skin .mceMenu span.mceMenuLine {display:none}
|
| | | .o2k7Skin .mceMenuItemSub a {background:url(../default/img/menu_arrow.gif) no-repeat top right;}
|
| | |
|
| | | /* Progress,Resize */
|
| | | .o2k7Skin .mceBlocker {position:absolute; left:0; top:0; z-index:1000; opacity:0.5; filter:alpha(opacity=50); background:#FFF}
|
| | | .o2k7Skin .mceProgress {position:absolute; left:0; top:0; z-index:1001; background:url(../default/img/progress.gif) no-repeat; width:32px; height:32px; margin:-16px 0 0 -16px}
|
| | | .o2k7Skin .mcePlaceHolder {border:1px dotted gray}
|
| | |
|
| | | /* Formats */
|
| | | .o2k7Skin .mce_formatPreview a {font-size:10px}
|
| | | .o2k7Skin .mce_p span.mceText {}
|
| | | .o2k7Skin .mce_address span.mceText {font-style:italic}
|
| | | .o2k7Skin .mce_pre span.mceText {font-family:monospace}
|
| | | .o2k7Skin .mce_h1 span.mceText {font-weight:bolder; font-size: 2em}
|
| | | .o2k7Skin .mce_h2 span.mceText {font-weight:bolder; font-size: 1.5em}
|
| | | .o2k7Skin .mce_h3 span.mceText {font-weight:bolder; font-size: 1.17em}
|
| | | .o2k7Skin .mce_h4 span.mceText {font-weight:bolder; font-size: 1em}
|
| | | .o2k7Skin .mce_h5 span.mceText {font-weight:bolder; font-size: .83em}
|
| | | .o2k7Skin .mce_h6 span.mceText {font-weight:bolder; font-size: .75em}
|
| | |
|
| | | /* Theme */
|
| | | .o2k7Skin span.mce_bold {background-position:0 0}
|
| | | .o2k7Skin span.mce_italic {background-position:-60px 0}
|
| | | .o2k7Skin span.mce_underline {background-position:-140px 0}
|
| | | .o2k7Skin span.mce_strikethrough {background-position:-120px 0}
|
| | | .o2k7Skin span.mce_undo {background-position:-160px 0}
|
| | | .o2k7Skin span.mce_redo {background-position:-100px 0}
|
| | | .o2k7Skin span.mce_cleanup {background-position:-40px 0}
|
| | | .o2k7Skin span.mce_bullist {background-position:-20px 0}
|
| | | .o2k7Skin span.mce_numlist {background-position:-80px 0}
|
| | | .o2k7Skin span.mce_justifyleft {background-position:-460px 0}
|
| | | .o2k7Skin span.mce_justifyright {background-position:-480px 0}
|
| | | .o2k7Skin span.mce_justifycenter {background-position:-420px 0}
|
| | | .o2k7Skin span.mce_justifyfull {background-position:-440px 0}
|
| | | .o2k7Skin span.mce_anchor {background-position:-200px 0}
|
| | | .o2k7Skin span.mce_indent {background-position:-400px 0}
|
| | | .o2k7Skin span.mce_outdent {background-position:-540px 0}
|
| | | .o2k7Skin span.mce_link {background-position:-500px 0}
|
| | | .o2k7Skin span.mce_unlink {background-position:-640px 0}
|
| | | .o2k7Skin span.mce_sub {background-position:-600px 0}
|
| | | .o2k7Skin span.mce_sup {background-position:-620px 0}
|
| | | .o2k7Skin span.mce_removeformat {background-position:-580px 0}
|
| | | .o2k7Skin span.mce_newdocument {background-position:-520px 0}
|
| | | .o2k7Skin span.mce_image {background-position:-380px 0}
|
| | | .o2k7Skin span.mce_help {background-position:-340px 0}
|
| | | .o2k7Skin span.mce_code {background-position:-260px 0}
|
| | | .o2k7Skin span.mce_hr {background-position:-360px 0}
|
| | | .o2k7Skin span.mce_visualaid {background-position:-660px 0}
|
| | | .o2k7Skin span.mce_charmap {background-position:-240px 0}
|
| | | .o2k7Skin span.mce_paste {background-position:-560px 0}
|
| | | .o2k7Skin span.mce_copy {background-position:-700px 0}
|
| | | .o2k7Skin span.mce_cut {background-position:-680px 0}
|
| | | .o2k7Skin span.mce_blockquote {background-position:-220px 0}
|
| | | .o2k7Skin .mce_forecolor span.mceAction {background-position:-720px 0}
|
| | | .o2k7Skin .mce_backcolor span.mceAction {background-position:-760px 0}
|
| | | .o2k7Skin .mce_forecolorpicker {background-position:-720px 0}
|
| | | .o2k7Skin .mce_backcolorpicker {background-position:-760px 0}
|
| | |
|
| | | /* Plugins */
|
| | | .o2k7Skin span.mce_advhr {background-position:-0px -20px}
|
| | | .o2k7Skin span.mce_ltr {background-position:-20px -20px}
|
| | | .o2k7Skin span.mce_rtl {background-position:-40px -20px}
|
| | | .o2k7Skin span.mce_emotions {background-position:-60px -20px}
|
| | | .o2k7Skin span.mce_fullpage {background-position:-80px -20px}
|
| | | .o2k7Skin span.mce_fullscreen {background-position:-100px -20px}
|
| | | .o2k7Skin span.mce_iespell {background-position:-120px -20px}
|
| | | .o2k7Skin span.mce_insertdate {background-position:-140px -20px}
|
| | | .o2k7Skin span.mce_inserttime {background-position:-160px -20px}
|
| | | .o2k7Skin span.mce_absolute {background-position:-180px -20px}
|
| | | .o2k7Skin span.mce_backward {background-position:-200px -20px}
|
| | | .o2k7Skin span.mce_forward {background-position:-220px -20px}
|
| | | .o2k7Skin span.mce_insert_layer {background-position:-240px -20px}
|
| | | .o2k7Skin span.mce_insertlayer {background-position:-260px -20px}
|
| | | .o2k7Skin span.mce_movebackward {background-position:-280px -20px}
|
| | | .o2k7Skin span.mce_moveforward {background-position:-300px -20px}
|
| | | .o2k7Skin span.mce_media {background-position:-320px -20px}
|
| | | .o2k7Skin span.mce_nonbreaking {background-position:-340px -20px}
|
| | | .o2k7Skin span.mce_pastetext {background-position:-360px -20px}
|
| | | .o2k7Skin span.mce_pasteword {background-position:-380px -20px}
|
| | | .o2k7Skin span.mce_selectall {background-position:-400px -20px}
|
| | | .o2k7Skin span.mce_preview {background-position:-420px -20px}
|
| | | .o2k7Skin span.mce_print {background-position:-440px -20px}
|
| | | .o2k7Skin span.mce_cancel {background-position:-460px -20px}
|
| | | .o2k7Skin span.mce_save {background-position:-480px -20px}
|
| | | .o2k7Skin span.mce_replace {background-position:-500px -20px}
|
| | | .o2k7Skin span.mce_search {background-position:-520px -20px}
|
| | | .o2k7Skin span.mce_styleprops {background-position:-560px -20px}
|
| | | .o2k7Skin span.mce_table {background-position:-580px -20px}
|
| | | .o2k7Skin span.mce_cell_props {background-position:-600px -20px}
|
| | | .o2k7Skin span.mce_delete_table {background-position:-620px -20px}
|
| | | .o2k7Skin span.mce_delete_col {background-position:-640px -20px}
|
| | | .o2k7Skin span.mce_delete_row {background-position:-660px -20px}
|
| | | .o2k7Skin span.mce_col_after {background-position:-680px -20px}
|
| | | .o2k7Skin span.mce_col_before {background-position:-700px -20px}
|
| | | .o2k7Skin span.mce_row_after {background-position:-720px -20px}
|
| | | .o2k7Skin span.mce_row_before {background-position:-740px -20px}
|
| | | .o2k7Skin span.mce_merge_cells {background-position:-760px -20px}
|
| | | .o2k7Skin span.mce_table_props {background-position:-980px -20px}
|
| | | .o2k7Skin span.mce_row_props {background-position:-780px -20px}
|
| | | .o2k7Skin span.mce_split_cells {background-position:-800px -20px}
|
| | | .o2k7Skin span.mce_template {background-position:-820px -20px}
|
| | | .o2k7Skin span.mce_visualchars {background-position:-840px -20px}
|
| | | .o2k7Skin span.mce_abbr {background-position:-860px -20px}
|
| | | .o2k7Skin span.mce_acronym {background-position:-880px -20px}
|
| | | .o2k7Skin span.mce_attribs {background-position:-900px -20px}
|
| | | .o2k7Skin span.mce_cite {background-position:-920px -20px}
|
| | | .o2k7Skin span.mce_del {background-position:-940px -20px}
|
| | | .o2k7Skin span.mce_ins {background-position:-960px -20px}
|
| | | .o2k7Skin span.mce_pagebreak {background-position:0 -40px}
|
| | | .o2k7Skin .mce_spellchecker span.mceAction {background-position:-540px -20px}
|
New file |
| | |
| | | /* Black */
|
| | | .o2k7SkinBlack .mceToolbar .mceToolbarStart span, .o2k7SkinBlack .mceToolbar .mceToolbarEnd span, .o2k7SkinBlack .mceButton, .o2k7SkinBlack .mceSplitButton, .o2k7SkinBlack .mceSeparator, .o2k7SkinBlack .mceSplitButton span.mceOpen, .o2k7SkinBlack .mceListBox .mceOpen {background-image:url(img/button_bg_black.png)}
|
| | | .o2k7SkinBlack table, .o2k7SkinBlack .mceMenuItemTitle a, .o2k7SkinBlack .mceMenuItemTitle span.mceText, .o2k7SkinBlack .mceStatusbar div, .o2k7SkinBlack .mceStatusbar span, .o2k7SkinBlack .mceStatusbar a {background:#535353; color:#FFF}
|
| | | .o2k7SkinBlack table.mceListBoxEnabled .mceText, o2k7SkinBlack .mceListBox .mceText {background:#FFF; border:1px solid #CBCFD4; border-bottom-color:#989FA9; border-right:0}
|
| | | .o2k7SkinBlack table.mceListBoxEnabled:hover .mceText, .o2k7Skin .mceListBoxHover .mceText, .o2k7Skin .mceListBoxSelected .mceText {background:#FFF; border:1px solid #FFBD69; border-right:0}
|
| | | .o2k7SkinBlack .mceExternalToolbar, .o2k7SkinBlack .mceListBox .mceText, .o2k7SkinBlack div.mceMenu, .o2k7SkinBlack table.mceLayout, .o2k7SkinBlack .mceMenuItemTitle a, .o2k7SkinBlack table.mceLayout tr.mceFirst td, .o2k7SkinBlack table.mceLayout, .o2k7SkinBlack .mceMenuItemTitle a, .o2k7SkinBlack table.mceLayout tr.mceLast td, .o2k7SkinBlack .mceIframeContainer {border-color: #535353;}
|
| | | .o2k7SkinBlack table.mceSplitButtonEnabled:hover a.mceAction, .o2k7Skin .mceSplitButtonHover a.mceAction, .o2k7Skin .mceSplitButtonSelected {background-image:url(img/button_bg_black.png)}
|
| | | .o2k7SkinBlack .mceMenu .mceMenuItemEnabled a:hover, .o2k7Skin .mceMenu .mceMenuItemActive {background-color:#FFE7A1} |
New file |
| | |
| | | /* Silver */
|
| | | .o2k7SkinSilver .mceToolbar .mceToolbarStart span, .o2k7SkinSilver .mceButton, .o2k7SkinSilver .mceSplitButton, .o2k7SkinSilver .mceSeparator, .o2k7SkinSilver .mceSplitButton span.mceOpen, .o2k7SkinSilver .mceListBox .mceOpen {background-image:url(img/button_bg_silver.png)}
|
| | | .o2k7SkinSilver table, .o2k7SkinSilver .mceMenuItemTitle a {background:#eee}
|
| | | .o2k7SkinSilver .mceListBox .mceText {background:#FFF}
|
| | | .o2k7SkinSilver .mceExternalToolbar, .o2k7SkinSilver .mceListBox .mceText, .o2k7SkinSilver div.mceMenu, .o2k7SkinSilver table.mceLayout, .o2k7SkinSilver .mceMenuItemTitle a, .o2k7SkinSilver table.mceLayout tr.mceFirst td, .o2k7SkinSilver table.mceLayout, .o2k7SkinSilver .mceMenuItemTitle a, .o2k7SkinSilver table.mceLayout tr.mceLast td, .o2k7SkinSilver .mceIframeContainer {border-color: #bbb}
|
| | |
| | | <html xmlns="http://www.w3.org/1999/xhtml">
|
| | | <head>
|
| | | <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
|
| | | <title>{$lang_theme_code_title}</title>
|
| | | <script language="javascript" type="text/javascript" src="../../tiny_mce_popup.js"></script>
|
| | | <script language="javascript" type="text/javascript" src="jscripts/source_editor.js"></script>
|
| | | <title>{#advanced_dlg.code_title}</title>
|
| | | <script type="text/javascript" src="../../tiny_mce_popup.js"></script>
|
| | | <script type="text/javascript" src="js/source_editor.js"></script>
|
| | | <base target="_self" />
|
| | | </head>
|
| | | <body onload="tinyMCEPopup.executeOnLoad('onLoadInit();');" onresize="resizeInputs();" style="display: none">
|
| | | <form name="source" onsubmit="saveContent();" action="#">
|
| | | <div style="float: left" class="title">{$lang_theme_code_title}</div>
|
| | | <body onresize="resizeInputs();" style="display:none; overflow:hidden;">
|
| | | <form name="source" onsubmit="saveContent();return false;" action="#">
|
| | | <div style="float: left" class="title">{#advanced_dlg.code_title}</div>
|
| | |
|
| | | <div id="wrapline" style="float: right">
|
| | | <input type="checkbox" name="wraped" id="wraped" onclick="toggleWordWrap(this);" class="wordWrapCode" /><label for="wraped">{$lang_theme_code_wordwrap}</label>
|
| | | <input type="checkbox" name="wraped" id="wraped" onclick="toggleWordWrap(this);" class="wordWrapCode" /><label for="wraped">{#advanced_dlg.code_wordwrap}</label>
|
| | | </div>
|
| | |
|
| | | <br style="clear: both" />
|
| | |
|
| | | <textarea name="htmlSource" id="htmlSource" rows="15" cols="100" style="width: 100%; height: 100%; font-family: 'Courier New',Courier,monospace; font-size: 12px" dir="ltr" wrap="off"></textarea>
|
| | | <textarea name="htmlSource" id="htmlSource" rows="15" cols="100" style="width: 100%; height: 100%; font-family: 'Courier New',Courier,monospace; font-size: 12px;" dir="ltr" wrap="off" class="mceFocus"></textarea>
|
| | |
|
| | | <div class="mceActionPanel">
|
| | | <div style="float: left">
|
| | | <input type="button" name="insert" value="{$lang_update}" onclick="saveContent();" id="insert" />
|
| | | <input type="submit" name="insert" value="{#update}" id="insert" />
|
| | | </div>
|
| | |
|
| | | <div style="float: right">
|
| | | <input type="button" name="cancel" value="{$lang_cancel}" onclick="tinyMCEPopup.close();" id="cancel" />
|
| | | <input type="button" name="cancel" value="{#cancel}" onclick="tinyMCEPopup.close();" id="cancel" />
|
| | | </div>
|
| | | </div>
|
| | | </form>
|
New file |
| | |
| | | (function(){var DOM=tinymce.DOM;tinymce.ThemeManager.requireLangPack('simple');tinymce.create('tinymce.themes.SimpleTheme',{init:function(ed,url){var t=this,states=['Bold','Italic','Underline','Strikethrough','InsertUnorderedList','InsertOrderedList'],s=ed.settings;t.editor=ed;ed.onInit.add(function(){ed.onNodeChange.add(function(ed,cm){tinymce.each(states,function(c){cm.get(c.toLowerCase()).setActive(ed.queryCommandState(c));});});ed.dom.loadCSS(url+"/skins/"+s.skin+"/content.css");});DOM.loadCSS((s.editor_css?ed.baseURI.toAbsolute(s.editor_css):'')||url+"/skins/"+s.skin+"/ui.css");},renderUI:function(o){var t=this,n=o.targetNode,ic,tb,ed=t.editor,cf=ed.controlManager,sc;n=DOM.insertAfter(DOM.create('span',{id:ed.id+'_container','class':'mceEditor '+ed.settings.skin+'SimpleSkin'}),n);n=sc=DOM.add(n,'table',{cellPadding:0,cellSpacing:0,'class':'mceLayout'});n=tb=DOM.add(n,'tbody');n=DOM.add(tb,'tr');n=ic=DOM.add(DOM.add(n,'td'),'div',{'class':'mceIframeContainer'});n=DOM.add(DOM.add(tb,'tr',{'class':'last'}),'td',{'class':'mceToolbar mceLast',align:'center'});tb=t.toolbar=cf.createToolbar("tools1");tb.add(cf.createButton('bold',{title:'simple.bold_desc',cmd:'Bold'}));tb.add(cf.createButton('italic',{title:'simple.italic_desc',cmd:'Italic'}));tb.add(cf.createButton('underline',{title:'simple.underline_desc',cmd:'Underline'}));tb.add(cf.createButton('strikethrough',{title:'simple.striketrough_desc',cmd:'Strikethrough'}));tb.add(cf.createSeparator());tb.add(cf.createButton('undo',{title:'simple.undo_desc',cmd:'Undo'}));tb.add(cf.createButton('redo',{title:'simple.redo_desc',cmd:'Redo'}));tb.add(cf.createSeparator());tb.add(cf.createButton('cleanup',{title:'simple.cleanup_desc',cmd:'mceCleanup'}));tb.add(cf.createSeparator());tb.add(cf.createButton('insertunorderedlist',{title:'simple.bullist_desc',cmd:'InsertUnorderedList'}));tb.add(cf.createButton('insertorderedlist',{title:'simple.numlist_desc',cmd:'InsertOrderedList'}));tb.renderTo(n);return{iframeContainer:ic,editorContainer:ed.id+'_container',sizeContainer:sc,deltaHeight:-20};},getInfo:function(){return{longname:'Simple theme',author:'Moxiecode Systems AB',authorurl:'http://tinymce.moxiecode.com',version:tinymce.majorVersion+"."+tinymce.minorVersion}}});tinymce.ThemeManager.add('simple',tinymce.themes.SimpleTheme);})(); |
New file |
| | |
| | | /**
|
| | | * $Id: editor_template_src.js 752 2008-03-27 21:51:25Z spocke $
|
| | | *
|
| | | * This file is meant to showcase how to create a simple theme. The advanced
|
| | | * theme is more suitable for production use.
|
| | | *
|
| | | * @author Moxiecode
|
| | | * @copyright Copyright © 2004-2008, Moxiecode Systems AB, All rights reserved.
|
| | | */
|
| | |
|
| | | (function() {
|
| | | var DOM = tinymce.DOM;
|
| | |
|
| | | // Tell it to load theme specific language pack(s)
|
| | | tinymce.ThemeManager.requireLangPack('simple');
|
| | |
|
| | | tinymce.create('tinymce.themes.SimpleTheme', {
|
| | | init : function(ed, url) {
|
| | | var t = this, states = ['Bold', 'Italic', 'Underline', 'Strikethrough', 'InsertUnorderedList', 'InsertOrderedList'], s = ed.settings;
|
| | |
|
| | | t.editor = ed;
|
| | |
|
| | | ed.onInit.add(function() {
|
| | | ed.onNodeChange.add(function(ed, cm) {
|
| | | tinymce.each(states, function(c) {
|
| | | cm.get(c.toLowerCase()).setActive(ed.queryCommandState(c));
|
| | | });
|
| | | });
|
| | |
|
| | | ed.dom.loadCSS(url + "/skins/" + s.skin + "/content.css");
|
| | | });
|
| | |
|
| | | DOM.loadCSS((s.editor_css ? ed.baseURI.toAbsolute(s.editor_css) : '') || url + "/skins/" + s.skin + "/ui.css");
|
| | | },
|
| | |
|
| | | renderUI : function(o) {
|
| | | var t = this, n = o.targetNode, ic, tb, ed = t.editor, cf = ed.controlManager, sc;
|
| | |
|
| | | n = DOM.insertAfter(DOM.create('span', {id : ed.id + '_container', 'class' : 'mceEditor ' + ed.settings.skin + 'SimpleSkin'}), n);
|
| | | n = sc = DOM.add(n, 'table', {cellPadding : 0, cellSpacing : 0, 'class' : 'mceLayout'});
|
| | | n = tb = DOM.add(n, 'tbody');
|
| | |
|
| | | // Create iframe container
|
| | | n = DOM.add(tb, 'tr');
|
| | | n = ic = DOM.add(DOM.add(n, 'td'), 'div', {'class' : 'mceIframeContainer'});
|
| | |
|
| | | // Create toolbar container
|
| | | n = DOM.add(DOM.add(tb, 'tr', {'class' : 'last'}), 'td', {'class' : 'mceToolbar mceLast', align : 'center'});
|
| | |
|
| | | // Create toolbar
|
| | | tb = t.toolbar = cf.createToolbar("tools1");
|
| | | tb.add(cf.createButton('bold', {title : 'simple.bold_desc', cmd : 'Bold'}));
|
| | | tb.add(cf.createButton('italic', {title : 'simple.italic_desc', cmd : 'Italic'}));
|
| | | tb.add(cf.createButton('underline', {title : 'simple.underline_desc', cmd : 'Underline'}));
|
| | | tb.add(cf.createButton('strikethrough', {title : 'simple.striketrough_desc', cmd : 'Strikethrough'}));
|
| | | tb.add(cf.createSeparator());
|
| | | tb.add(cf.createButton('undo', {title : 'simple.undo_desc', cmd : 'Undo'}));
|
| | | tb.add(cf.createButton('redo', {title : 'simple.redo_desc', cmd : 'Redo'}));
|
| | | tb.add(cf.createSeparator());
|
| | | tb.add(cf.createButton('cleanup', {title : 'simple.cleanup_desc', cmd : 'mceCleanup'}));
|
| | | tb.add(cf.createSeparator());
|
| | | tb.add(cf.createButton('insertunorderedlist', {title : 'simple.bullist_desc', cmd : 'InsertUnorderedList'}));
|
| | | tb.add(cf.createButton('insertorderedlist', {title : 'simple.numlist_desc', cmd : 'InsertOrderedList'}));
|
| | | tb.renderTo(n);
|
| | |
|
| | | return {
|
| | | iframeContainer : ic,
|
| | | editorContainer : ed.id + '_container',
|
| | | sizeContainer : sc,
|
| | | deltaHeight : -20
|
| | | };
|
| | | },
|
| | |
|
| | | getInfo : function() {
|
| | | return {
|
| | | longname : 'Simple theme',
|
| | | author : 'Moxiecode Systems AB',
|
| | | authorurl : 'http://tinymce.moxiecode.com',
|
| | | version : tinymce.majorVersion + "." + tinymce.minorVersion
|
| | | }
|
| | | }
|
| | | });
|
| | |
|
| | | tinymce.ThemeManager.add('simple', tinymce.themes.SimpleTheme);
|
| | | })(); |
New file |
| | |
| | | tinyMCE.addI18n('en.simple',{
|
| | | bold_desc:"Bold (Ctrl+B)",
|
| | | italic_desc:"Italic (Ctrl+I)",
|
| | | underline_desc:"Underline (Ctrl+U)",
|
| | | striketrough_desc:"Strikethrough",
|
| | | bullist_desc:"Unordered list",
|
| | | numlist_desc:"Ordered list",
|
| | | undo_desc:"Undo (Ctrl+Z)",
|
| | | redo_desc:"Redo (Ctrl+Y)",
|
| | | cleanup_desc:"Cleanup messy code"
|
| | | }); |
New file |
| | |
| | | body, td, pre {
|
| | | font-family: Verdana, Arial, Helvetica, sans-serif;
|
| | | font-size: 10px;
|
| | | }
|
| | |
|
| | | body {
|
| | | background-color: #FFFFFF;
|
| | | }
|
| | |
|
| | | .mceVisualAid {
|
| | | border: 1px dashed #BBBBBB;
|
| | | }
|
| | |
|
| | | /* MSIE specific */
|
| | |
|
| | | * html body {
|
| | | scrollbar-3dlight-color: #F0F0EE;
|
| | | scrollbar-arrow-color: #676662;
|
| | | scrollbar-base-color: #F0F0EE;
|
| | | scrollbar-darkshadow-color: #DDDDDD;
|
| | | scrollbar-face-color: #E0E0DD;
|
| | | scrollbar-highlight-color: #F0F0EE;
|
| | | scrollbar-shadow-color: #F0F0EE;
|
| | | scrollbar-track-color: #F5F5F5; |
| | | }
|
New file |
| | |
| | | /* Reset */
|
| | | .defaultSimpleSkin table, .defaultSimpleSkin tbody, .defaultSimpleSkin a, .defaultSimpleSkin img, .defaultSimpleSkin tr, .defaultSimpleSkin div, .defaultSimpleSkin td, .defaultSimpleSkin iframe, .defaultSimpleSkin span, .defaultSimpleSkin * {border:0; margin:0; padding:0; background:transparent; white-space:nowrap; text-decoration:none; font-weight:normal; cursor:default; color:#000}
|
| | |
|
| | | /* Containers */
|
| | | .defaultSimpleSkin {position:relative}
|
| | | .defaultSimpleSkin table.mceLayout {background:#F0F0EE; border:1px solid #CCC;}
|
| | | .defaultSimpleSkin iframe {display:block; background:#FFF; border-bottom:1px solid #CCC;}
|
| | | .defaultSimpleSkin .mceToolbar {height:24px;}
|
| | |
|
| | | /* Layout */
|
| | | .defaultSimpleSkin span.mceIcon, .defaultSimpleSkin img.mceIcon {display:block; width:20px; height:20px}
|
| | | .defaultSimpleSkin .mceIcon {background:url(../../img/icons.gif) no-repeat 20px 20px}
|
| | |
|
| | | /* Button */
|
| | | .defaultSimpleSkin .mceButton {display:block; border:1px solid #F0F0EE; width:20px; height:20px}
|
| | | .defaultSimpleSkin a.mceButtonEnabled:hover {border:1px solid #0A246A; background-color:#B2BBD0}
|
| | | .defaultSimpleSkin a.mceButtonActive {border:1px solid #0A246A; background-color:#C2CBE0}
|
| | | .defaultSimpleSkin .mceButtonDisabled span {opacity:0.3; filter:alpha(opacity=30)}
|
| | |
|
| | | /* Separator */
|
| | | .defaultSimpleSkin .mceSeparator {display:block; background:url(../../img/icons.gif) -180px 0; width:2px; height:20px; margin:0 2px 0 4px}
|
| | |
|
| | | /* Theme */
|
| | | .defaultSimpleSkin span.mce_bold {background-position:0 0}
|
| | | .defaultSimpleSkin span.mce_italic {background-position:-60px 0}
|
| | | .defaultSimpleSkin span.mce_underline {background-position:-140px 0}
|
| | | .defaultSimpleSkin span.mce_strikethrough {background-position:-120px 0}
|
| | | .defaultSimpleSkin span.mce_undo {background-position:-160px 0}
|
| | | .defaultSimpleSkin span.mce_redo {background-position:-100px 0}
|
| | | .defaultSimpleSkin span.mce_cleanup {background-position:-40px 0}
|
| | | .defaultSimpleSkin span.mce_insertunorderedlist {background-position:-20px 0}
|
| | | .defaultSimpleSkin span.mce_insertorderedlist {background-position:-80px 0}
|
New file |
| | |
| | | body, td, pre {font-family:Verdana, Arial, Helvetica, sans-serif; font-size:10px;}
|
| | |
|
| | | body {background: #FFF;}
|
| | | .mceVisualAid {border: 1px dashed #BBB;}
|
| | |
|
| | | /* IE */
|
| | |
|
| | | * html body {
|
| | | scrollbar-3dlight-color: #F0F0EE;
|
| | | scrollbar-arrow-color: #676662;
|
| | | scrollbar-base-color: #F0F0EE;
|
| | | scrollbar-darkshadow-color: #DDDDDD;
|
| | | scrollbar-face-color: #E0E0DD;
|
| | | scrollbar-highlight-color: #F0F0EE;
|
| | | scrollbar-shadow-color: #F0F0EE;
|
| | | scrollbar-track-color: #F5F5F5; |
| | | }
|
New file |
| | |
| | | /* Reset */
|
| | | .o2k7SimpleSkin table, .o2k7SimpleSkin tbody, .o2k7SimpleSkin a, .o2k7SimpleSkin img, .o2k7SimpleSkin tr, .o2k7SimpleSkin div, .o2k7SimpleSkin td, .o2k7SimpleSkin iframe, .o2k7SimpleSkin span, .o2k7SimpleSkin * {border:0; margin:0; padding:0; background:transparent; white-space:nowrap; text-decoration:none; font-weight:normal; cursor:default; color:#000}
|
| | |
|
| | | /* Containers */
|
| | | .o2k7SimpleSkin {position:relative}
|
| | | .o2k7SimpleSkin table.mceLayout {background:#E5EFFD; border:1px solid #ABC6DD;}
|
| | | .o2k7SimpleSkin iframe {display:block; background:#FFF; border-bottom:1px solid #ABC6DD;}
|
| | | .o2k7SimpleSkin .mceToolbar {height:26px;}
|
| | |
|
| | | /* Layout */
|
| | | .o2k7SimpleSkin .mceToolbar .mceToolbarStart span {display:block; background:url(img/button_bg.png) -22px 0; width:1px; height:22px; }
|
| | | .o2k7SimpleSkin .mceToolbar .mceToolbarEnd span {display:block; background:url(img/button_bg.png) -22px 0; width:1px; height:22px}
|
| | | .o2k7SimpleSkin span.mceIcon, .o2k7SimpleSkin img.mceIcon {display:block; width:20px; height:20px}
|
| | | .o2k7SimpleSkin .mceIcon {background:url(../../img/icons.gif) no-repeat 20px 20px}
|
| | |
|
| | | /* Button */
|
| | | .o2k7SimpleSkin .mceButton {display:block; background:url(img/button_bg.png); width:22px; height:22px}
|
| | | .o2k7SimpleSkin a.mceButton span, .o2k7SimpleSkin a.mceButton img {margin:1px 0 0 1px}
|
| | | .o2k7SimpleSkin a.mceButtonEnabled:hover {background-color:#B2BBD0; background-position:0 -22px}
|
| | | .o2k7SimpleSkin a.mceButtonActive {background-position:0 -44px}
|
| | | .o2k7SimpleSkin .mceButtonDisabled span {opacity:0.3; filter:alpha(opacity=30)}
|
| | |
|
| | | /* Separator */
|
| | | .o2k7SimpleSkin .mceSeparator {display:block; background:url(img/button_bg.png) -22px 0; width:5px; height:22px}
|
| | |
|
| | | /* Theme */
|
| | | .o2k7SimpleSkin span.mce_bold {background-position:0 0}
|
| | | .o2k7SimpleSkin span.mce_italic {background-position:-60px 0}
|
| | | .o2k7SimpleSkin span.mce_underline {background-position:-140px 0}
|
| | | .o2k7SimpleSkin span.mce_strikethrough {background-position:-120px 0}
|
| | | .o2k7SimpleSkin span.mce_undo {background-position:-160px 0}
|
| | | .o2k7SimpleSkin span.mce_redo {background-position:-100px 0}
|
| | | .o2k7SimpleSkin span.mce_cleanup {background-position:-40px 0}
|
| | | .o2k7SimpleSkin span.mce_insertunorderedlist {background-position:-20px 0}
|
| | | .o2k7SimpleSkin span.mce_insertorderedlist {background-position:-80px 0}
|
| | |
| | | function TinyMCE_Engine(){var ua;this.majorVersion="2";this.minorVersion="1.3";this.releaseDate="2007-11-27";this.instances=[];this.switchClassCache=[];this.windowArgs=[];this.loadedFiles=[];this.pendingFiles=[];this.loadingIndex=0;this.configs=[];this.currentConfig=0;this.eventHandlers=[];this.log=[];this.undoLevels=[];this.undoIndex=0;this.typingUndoIndex=-1;this.settings=[];ua=navigator.userAgent;this.isMSIE=(navigator.appName=="Microsoft Internet Explorer");this.isMSIE5=this.isMSIE&&(ua.indexOf('MSIE 5')!=-1);this.isMSIE5_0=this.isMSIE&&(ua.indexOf('MSIE 5.0')!=-1);this.isMSIE7=this.isMSIE&&(ua.indexOf('MSIE 7')!=-1);this.isGecko=ua.indexOf('Gecko')!=-1;this.isSafari=ua.indexOf('Safari')!=-1;this.isOpera=window['opera']&&opera.buildNumber?true:false;this.isMac=ua.indexOf('Mac')!=-1;this.isNS7=ua.indexOf('Netscape/7')!=-1;this.isNS71=ua.indexOf('Netscape/7.1')!=-1;this.dialogCounter=0;this.plugins=[];this.themes=[];this.menus=[];this.loadedPlugins=[];this.buttonMap=[];this.isLoaded=false;if(this.isOpera){this.isMSIE=true;this.isGecko=false;this.isSafari=false}this.isIE=this.isMSIE;this.isRealIE=this.isMSIE&&!this.isOpera;this.idCounter=0};TinyMCE_Engine.prototype={init:function(settings){var theme,nl,baseHREF="",i,cssPath,entities,h,p,src,elements=[],head;if(this.isMSIE5_0)return;this.settings=settings;if(typeof(document.execCommand)=='undefined')return;if(!tinyMCE.baseURL){head=document.getElementsByTagName('head')[0];if(head){for(i=0,nl=head.getElementsByTagName('script');i<nl.length;i++)elements.push(nl[i])}for(i=0,nl=document.getElementsByTagName('script');i<nl.length;i++)elements.push(nl[i]);nl=document.getElementsByTagName('base');for(i=0;i<nl.length;i++){if(nl[i].href)baseHREF=nl[i].href}for(i=0;i<elements.length;i++){if(elements[i].src&&(elements[i].src.indexOf("tiny_mce.js")!=-1||elements[i].src.indexOf("tiny_mce_dev.js")!=-1||elements[i].src.indexOf("tiny_mce_src.js")!=-1||elements[i].src.indexOf("tiny_mce_gzip")!=-1)){src=elements[i].src;tinyMCE.srcMode=(src.indexOf('_src')!=-1||src.indexOf('_dev')!=-1)?'_src':'';tinyMCE.gzipMode=src.indexOf('_gzip')!=-1;src=src.substring(0,src.lastIndexOf('/'));if(settings.exec_mode=="src"||settings.exec_mode=="normal")tinyMCE.srcMode=settings.exec_mode=="src"?'_src':'';if(baseHREF!==''&&src.indexOf('://')==-1)tinyMCE.baseURL=baseHREF+src;else tinyMCE.baseURL=src;break}}}this.documentBasePath=document.location.href;if(this.documentBasePath.indexOf('?')!=-1)this.documentBasePath=this.documentBasePath.substring(0,this.documentBasePath.indexOf('?'));this.documentURL=this.documentBasePath;this.documentBasePath=this.documentBasePath.substring(0,this.documentBasePath.lastIndexOf('/'));if(tinyMCE.baseURL.indexOf('://')==-1&&tinyMCE.baseURL.charAt(0)!='/'){tinyMCE.baseURL=this.documentBasePath+"/"+tinyMCE.baseURL}this._def("mode","none");this._def("theme","advanced");this._def("plugins","",true);this._def("language","en");this._def("docs_language",this.settings.language);this._def("elements","");this._def("textarea_trigger","mce_editable");this._def("editor_selector","");this._def("editor_deselector","mceNoEditor");this._def("valid_elements","+a[id|style|rel|rev|charset|hreflang|dir|lang|tabindex|accesskey|type|name|href|target|title|class|onfocus|onblur|onclick|ondblclick|onmousedown|onmouseup|onmouseover|onmousemove|onmouseout|onkeypress|onkeydown|onkeyup],-strong/-b[class|style],-em/-i[class|style],-strike[class|style],-u[class|style],#p[id|style|dir|class|align],-ol[class|style],-ul[class|style],-li[class|style],br,img[id|dir|lang|longdesc|usemap|style|class|src|onmouseover|onmouseout|border|alt=|title|hspace|vspace|width|height|align],-sub[style|class],-sup[style|class],-blockquote[dir|style],-table[border=0|cellspacing|cellpadding|width|height|class|align|summary|style|dir|id|lang|bgcolor|background|bordercolor],-tr[id|lang|dir|class|rowspan|width|height|align|valign|style|bgcolor|background|bordercolor],tbody[id|class],thead[id|class],tfoot[id|class],#td[id|lang|dir|class|colspan|rowspan|width|height|align|valign|style|bgcolor|background|bordercolor|scope],-th[id|lang|dir|class|colspan|rowspan|width|height|align|valign|style|scope],caption[id|lang|dir|class|style],-div[id|dir|class|align|style],-span[style|class|align],-pre[class|align|style],address[class|align|style],-h1[id|style|dir|class|align],-h2[id|style|dir|class|align],-h3[id|style|dir|class|align],-h4[id|style|dir|class|align],-h5[id|style|dir|class|align],-h6[id|style|dir|class|align],hr[class|style],-font[face|size|style|id|class|dir|color],dd[id|class|title|style|dir|lang],dl[id|class|title|style|dir|lang],dt[id|class|title|style|dir|lang],cite[title|id|class|style|dir|lang],abbr[title|id|class|style|dir|lang],acronym[title|id|class|style|dir|lang],del[title|id|class|style|dir|lang|datetime|cite],ins[title|id|class|style|dir|lang|datetime|cite]");this._def("extended_valid_elements","");this._def("invalid_elements","");this._def("encoding","");this._def("urlconverter_callback",tinyMCE.getParam("urlconvertor_callback","TinyMCE_Engine.prototype.convertURL"));this._def("save_callback","");this._def("force_br_newlines",false);this._def("force_p_newlines",true);this._def("add_form_submit_trigger",true);this._def("relative_urls",true);this._def("remove_script_host",true);this._def("focus_alert",true);this._def("document_base_url",this.documentURL);this._def("visual",true);this._def("visual_table_class","mceVisualAid");this._def("setupcontent_callback","");this._def("fix_content_duplication",true);this._def("custom_undo_redo",true);this._def("custom_undo_redo_levels",-1);this._def("custom_undo_redo_keyboard_shortcuts",true);this._def("custom_undo_redo_restore_selection",true);this._def("custom_undo_redo_global",false);this._def("verify_html",true);this._def("apply_source_formatting",false);this._def("directionality","ltr");this._def("cleanup_on_startup",false);this._def("inline_styles",false);this._def("convert_newlines_to_brs",false);this._def("auto_reset_designmode",true);this._def("entities","39,#39,160,nbsp,161,iexcl,162,cent,163,pound,164,curren,165,yen,166,brvbar,167,sect,168,uml,169,copy,170,ordf,171,laquo,172,not,173,shy,174,reg,175,macr,176,deg,177,plusmn,178,sup2,179,sup3,180,acute,181,micro,182,para,183,middot,184,cedil,185,sup1,186,ordm,187,raquo,188,frac14,189,frac12,190,frac34,191,iquest,192,Agrave,193,Aacute,194,Acirc,195,Atilde,196,Auml,197,Aring,198,AElig,199,Ccedil,200,Egrave,201,Eacute,202,Ecirc,203,Euml,204,Igrave,205,Iacute,206,Icirc,207,Iuml,208,ETH,209,Ntilde,210,Ograve,211,Oacute,212,Ocirc,213,Otilde,214,Ouml,215,times,216,Oslash,217,Ugrave,218,Uacute,219,Ucirc,220,Uuml,221,Yacute,222,THORN,223,szlig,224,agrave,225,aacute,226,acirc,227,atilde,228,auml,229,aring,230,aelig,231,ccedil,232,egrave,233,eacute,234,ecirc,235,euml,236,igrave,237,iacute,238,icirc,239,iuml,240,eth,241,ntilde,242,ograve,243,oacute,244,ocirc,245,otilde,246,ouml,247,divide,248,oslash,249,ugrave,250,uacute,251,ucirc,252,uuml,253,yacute,254,thorn,255,yuml,402,fnof,913,Alpha,914,Beta,915,Gamma,916,Delta,917,Epsilon,918,Zeta,919,Eta,920,Theta,921,Iota,922,Kappa,923,Lambda,924,Mu,925,Nu,926,Xi,927,Omicron,928,Pi,929,Rho,931,Sigma,932,Tau,933,Upsilon,934,Phi,935,Chi,936,Psi,937,Omega,945,alpha,946,beta,947,gamma,948,delta,949,epsilon,950,zeta,951,eta,952,theta,953,iota,954,kappa,955,lambda,956,mu,957,nu,958,xi,959,omicron,960,pi,961,rho,962,sigmaf,963,sigma,964,tau,965,upsilon,966,phi,967,chi,968,psi,969,omega,977,thetasym,978,upsih,982,piv,8226,bull,8230,hellip,8242,prime,8243,Prime,8254,oline,8260,frasl,8472,weierp,8465,image,8476,real,8482,trade,8501,alefsym,8592,larr,8593,uarr,8594,rarr,8595,darr,8596,harr,8629,crarr,8656,lArr,8657,uArr,8658,rArr,8659,dArr,8660,hArr,8704,forall,8706,part,8707,exist,8709,empty,8711,nabla,8712,isin,8713,notin,8715,ni,8719,prod,8721,sum,8722,minus,8727,lowast,8730,radic,8733,prop,8734,infin,8736,ang,8743,and,8744,or,8745,cap,8746,cup,8747,int,8756,there4,8764,sim,8773,cong,8776,asymp,8800,ne,8801,equiv,8804,le,8805,ge,8834,sub,8835,sup,8836,nsub,8838,sube,8839,supe,8853,oplus,8855,otimes,8869,perp,8901,sdot,8968,lceil,8969,rceil,8970,lfloor,8971,rfloor,9001,lang,9002,rang,9674,loz,9824,spades,9827,clubs,9829,hearts,9830,diams,34,quot,38,amp,60,lt,62,gt,338,OElig,339,oelig,352,Scaron,353,scaron,376,Yuml,710,circ,732,tilde,8194,ensp,8195,emsp,8201,thinsp,8204,zwnj,8205,zwj,8206,lrm,8207,rlm,8211,ndash,8212,mdash,8216,lsquo,8217,rsquo,8218,sbquo,8220,ldquo,8221,rdquo,8222,bdquo,8224,dagger,8225,Dagger,8240,permil,8249,lsaquo,8250,rsaquo,8364,euro",true);this._def("entity_encoding","named");this._def("cleanup_callback","");this._def("add_unload_trigger",true);this._def("ask",false);this._def("nowrap",false);this._def("auto_resize",false);this._def("auto_focus",false);this._def("cleanup",true);this._def("remove_linebreaks",true);this._def("button_tile_map",false);this._def("submit_patch",true);this._def("browsers","msie,safari,gecko,opera",true);this._def("dialog_type","window");this._def("accessibility_warnings",true);this._def("accessibility_focus",true);this._def("merge_styles_invalid_parents","");this._def("force_hex_style_colors",true);this._def("trim_span_elements",true);this._def("convert_fonts_to_spans",false);this._def("doctype",'<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">');this._def("font_size_classes",'');this._def("font_size_style_values",'xx-small,x-small,small,medium,large,x-large,xx-large',true);this._def("event_elements",'a,img',true);this._def("convert_urls",true);this._def("table_inline_editing",false);this._def("object_resizing",true);this._def("custom_shortcuts",true);this._def("convert_on_click",false);this._def("content_css",'');this._def("fix_list_elements",true);this._def("fix_table_elements",false);this._def("strict_loading_mode",document.contentType=='application/xhtml+xml');this._def("hidden_tab_class",'');this._def("display_tab_class",'');this._def("gecko_spellcheck",false);this._def("hide_selects_on_submit",true);this._def("forced_root_block",false);this._def("remove_trailing_nbsp",false);this._def("save_on_tinymce_forms",false);if(this.isMSIE&&!this.isOpera)this.settings.strict_loading_mode=false;if(this.isMSIE&&this.settings.browsers.indexOf('msie')==-1)return;if(this.isGecko&&this.settings.browsers.indexOf('gecko')==-1)return;if(this.isSafari&&this.settings.browsers.indexOf('safari')==-1)return;if(this.isOpera&&this.settings.browsers.indexOf('opera')==-1)return;baseHREF=tinyMCE.settings.document_base_url;h=document.location.href;p=h.indexOf('://');if(p>0&&document.location.protocol!="file:"){p=h.indexOf('/',p+3);h=h.substring(0,p);if(baseHREF.indexOf('://')==-1)baseHREF=h+baseHREF;tinyMCE.settings.document_base_url=baseHREF;tinyMCE.settings.document_base_prefix=h}if(baseHREF.indexOf('?')!=-1)baseHREF=baseHREF.substring(0,baseHREF.indexOf('?'));this.settings.base_href=baseHREF.substring(0,baseHREF.lastIndexOf('/'))+"/";theme=this.settings.theme;this.inlineStrict='A|BR|SPAN|BDO|MAP|OBJECT|IMG|TT|I|B|BIG|SMALL|EM|STRONG|DFN|CODE|Q|SAMP|KBD|VAR|CITE|ABBR|ACRONYM|SUB|SUP|#text|#comment';this.inlineTransitional='A|BR|SPAN|BDO|OBJECT|APPLET|IMG|MAP|IFRAME|TT|I|B|U|S|STRIKE|BIG|SMALL|FONT|BASEFONT|EM|STRONG|DFN|CODE|Q|SAMP|KBD|VAR|CITE|ABBR|ACRONYM|SUB|SUP|INPUT|SELECT|TEXTAREA|LABEL|BUTTON|#text|#comment';this.blockElms='H[1-6]|P|DIV|ADDRESS|PRE|FORM|TABLE|LI|OL|UL|TD|CAPTION|BLOCKQUOTE|CENTER|DL|DT|DD|DIR|FIELDSET|FORM|NOSCRIPT|NOFRAMES|MENU|ISINDEX|SAMP';this.blockRegExp=new RegExp("^("+this.blockElms+")$","i");this.posKeyCodes=[13,45,36,35,33,34,37,38,39,40];this.uniqueURL='javascript:void(091039730);';this.uniqueTag='<div id="mceTMPElement" style="display: none">TMP</div>';this.callbacks=['onInit','getInfo','getEditorTemplate','setupContent','onChange','onPageLoad','handleNodeChange','initInstance','execCommand','getControlHTML','handleEvent','cleanup','removeInstance'];this.settings.theme_href=tinyMCE.baseURL+"/themes/"+theme;if(!tinyMCE.isIE||tinyMCE.isOpera)this.settings.force_br_newlines=false;if(tinyMCE.getParam("popups_css",false)){cssPath=tinyMCE.getParam("popups_css","");if(cssPath.indexOf('://')==-1&&cssPath.charAt(0)!='/')this.settings.popups_css=this.documentBasePath+"/"+cssPath;else this.settings.popups_css=cssPath}else this.settings.popups_css=tinyMCE.baseURL+"/themes/"+theme+"/css/editor_popup.css";if(tinyMCE.getParam("editor_css",false)){cssPath=tinyMCE.getParam("editor_css","");if(cssPath.indexOf('://')==-1&&cssPath.charAt(0)!='/')this.settings.editor_css=this.documentBasePath+"/"+cssPath;else this.settings.editor_css=cssPath}else{if(this.settings.editor_css!=='')this.settings.editor_css=tinyMCE.baseURL+"/themes/"+theme+"/css/editor_ui.css"}if(this.configs.length==0){if(typeof(TinyMCECompressed)=="undefined"){tinyMCE.addEvent(window,"DOMContentLoaded",TinyMCE_Engine.prototype.onLoad);if(tinyMCE.isRealIE){if(document.body)tinyMCE.addEvent(document.body,"readystatechange",TinyMCE_Engine.prototype.onLoad);else tinyMCE.addEvent(document,"readystatechange",TinyMCE_Engine.prototype.onLoad)}tinyMCE.addEvent(window,"load",TinyMCE_Engine.prototype.onLoad);tinyMCE._addUnloadEvents()}}this.loadScript(tinyMCE.baseURL+'/themes/'+this.settings.theme+'/editor_template'+tinyMCE.srcMode+'.js');this.loadScript(tinyMCE.baseURL+'/langs/'+this.settings.language+'.js');this.loadCSS(this.settings.editor_css);p=tinyMCE.getParam('plugins','',true,',');if(p.length>0){for(i=0;i<p.length;i++){if(p[i].charAt(0)!='-')this.loadScript(tinyMCE.baseURL+'/plugins/'+p[i]+'/editor_plugin'+tinyMCE.srcMode+'.js')}}if(tinyMCE.getParam('entity_encoding')=='named'){settings.cleanup_entities=[];entities=tinyMCE.getParam('entities','',true,',');for(i=0;i<entities.length;i+=2)settings.cleanup_entities['c'+entities[i]]=entities[i+1]}settings.index=this.configs.length;this.configs[this.configs.length]=settings;this.loadNextScript();if(this.isIE&&!this.isOpera){try{document.execCommand('BackgroundImageCache',false,true)}catch(e){}}this.xmlEncodeRe=new RegExp('[<>&"]','g')},_addUnloadEvents:function(){var st=tinyMCE.settings.add_unload_trigger;if(tinyMCE.isIE){if(st){tinyMCE.addEvent(window,"unload",TinyMCE_Engine.prototype.unloadHandler);tinyMCE.addEvent(window.document,"beforeunload",TinyMCE_Engine.prototype.unloadHandler)}}else{if(st)tinyMCE.addEvent(window,"unload",function(){tinyMCE.triggerSave(true,true)})}},_def:function(key,def_val,t){var v=tinyMCE.getParam(key,def_val);v=t?v.replace(/\s+/g,""):v;this.settings[key]=v},hasPlugin:function(n){return typeof(this.plugins[n])!="undefined"&&this.plugins[n]!=null},addPlugin:function(n,p){var op=this.plugins[n];p.baseURL=op?op.baseURL:tinyMCE.baseURL+"/plugins/"+n;this.plugins[n]=p;this.loadNextScript()},setPluginBaseURL:function(n,u){var op=this.plugins[n];if(op)op.baseURL=u;else this.plugins[n]={baseURL:u}},loadPlugin:function(n,u){u=u.indexOf('.js')!=-1?u.substring(0,u.lastIndexOf('/')):u;u=u.charAt(u.length-1)=='/'?u.substring(0,u.length-1):u;this.plugins[n]={baseURL:u};this.loadScript(u+"/editor_plugin"+(tinyMCE.srcMode?'_src':'')+".js")},hasTheme:function(n){return typeof(this.themes[n])!="undefined"&&this.themes[n]!=null},addTheme:function(n,t){this.themes[n]=t;this.loadNextScript()},addMenu:function(n,m){this.menus[n]=m},hasMenu:function(n){return typeof(this.plugins[n])!="undefined"&&this.plugins[n]!=null},loadScript:function(url){var i;for(i=0;i<this.loadedFiles.length;i++){if(this.loadedFiles[i]==url)return}if(tinyMCE.settings.strict_loading_mode)this.pendingFiles[this.pendingFiles.length]=url;else document.write('<sc'+'ript language="javascript" type="text/javascript" src="'+url+'"></script>');this.loadedFiles[this.loadedFiles.length]=url},loadNextScript:function(){var d=document,se;if(!tinyMCE.settings.strict_loading_mode)return;if(this.loadingIndex<this.pendingFiles.length){se=d.createElementNS('http://www.w3.org/1999/xhtml','script');se.setAttribute('language','javascript');se.setAttribute('type','text/javascript');se.setAttribute('src',this.pendingFiles[this.loadingIndex++]);d.getElementsByTagName("head")[0].appendChild(se)}else this.loadingIndex=-1;},loadCSS:function(url){var ar=url.replace(/\s+/,'').split(',');var lflen=0,csslen=0,skip=false;var x=0,i=0,nl,le;for(x=0,csslen=ar.length;x<csslen;x++){if(ar[x]!=null&&ar[x]!='null'&&ar[x].length>0){for(i=0,lflen=this.loadedFiles.length;i<lflen;i++){if(this.loadedFiles[i]==ar[x]){skip=true;break}}if(!skip){if(tinyMCE.settings.strict_loading_mode){nl=document.getElementsByTagName("head");le=document.createElement('link');le.setAttribute('href',ar[x]);le.setAttribute('rel','stylesheet');le.setAttribute('type','text/css');nl[0].appendChild(le)}else document.write('<link href="'+ar[x]+'" rel="stylesheet" type="text/css" />');this.loadedFiles[this.loadedFiles.length]=ar[x]}}}},importCSS:function(doc,css){var css_ary=css.replace(/\s+/,'').split(',');var csslen,elm,headArr,x,css_file;for(x=0,csslen=css_ary.length;x<csslen;x++){css_file=css_ary[x];if(css_file!=null&&css_file!='null'&&css_file.length>0){if(css_file.indexOf('://')==-1&&css_file.charAt(0)!='/')css_file=this.documentBasePath+"/"+css_file;if(typeof(doc.createStyleSheet)=="undefined"){elm=doc.createElement("link");elm.rel="stylesheet";elm.href=css_file;if((headArr=doc.getElementsByTagName("head"))!=null&&headArr.length>0)headArr[0].appendChild(elm)}else doc.createStyleSheet(css_file)}}},confirmAdd:function(e,settings){var elm=tinyMCE.isIE?event.srcElement:e.target;var elementId=elm.name?elm.name:elm.id;tinyMCE.settings=settings;if(tinyMCE.settings.convert_on_click||(!elm.getAttribute('mce_noask')&&confirm(tinyMCELang.lang_edit_confirm)))tinyMCE.addMCEControl(elm,elementId);elm.setAttribute('mce_noask','true')},updateContent:function(form_element_name){var formElement,n,inst,doc;formElement=document.getElementById(form_element_name);for(n in tinyMCE.instances){inst=tinyMCE.instances[n];if(!tinyMCE.isInstance(inst))continue;inst.switchSettings();if(inst.formElement==formElement){doc=inst.getDoc();tinyMCE._setHTML(doc,inst.formElement.value);if(!tinyMCE.isIE)doc.body.innerHTML=tinyMCE._cleanupHTML(inst,doc,this.settings,doc.body,inst.visualAid)}}},addMCEControl:function(replace_element,form_element_name,target_document){var id="mce_editor_"+tinyMCE.idCounter++;var inst=new TinyMCE_Control(tinyMCE.settings);inst.editorId=id;this.instances[id]=inst;inst._onAdd(replace_element,form_element_name,target_document)},removeInstance:function(ti){var t=[],n,i;for(n in tinyMCE.instances){i=tinyMCE.instances[n];if(tinyMCE.isInstance(i)&&ti!=i)t[n]=i}tinyMCE.instances=t;n=[];t=tinyMCE.undoLevels;for(i=0;i<t.length;i++){if(t[i]!=ti)n.push(t[i])}tinyMCE.undoLevels=n;tinyMCE.undoIndex=n.length;tinyMCE.dispatchCallback(ti,'remove_instance_callback','removeInstance',ti);return ti},removeMCEControl:function(editor_id){var inst=tinyMCE.getInstanceById(editor_id),h,re,ot,tn,n;if(inst){inst.switchSettings();editor_id=inst.editorId;h=tinyMCE.getContent(editor_id);this.removeInstance(inst);tinyMCE.selectedElement=null;tinyMCE.selectedInstance=null;tinyMCE.selectedElement=null;tinyMCE.selectedInstance=null;for(n in tinyMCE.instances){if(!tinyMCE.isInstance(tinyMCE.instances[n]))continue;tinyMCE.selectedInstance=tinyMCE.instances[n];break}re=document.getElementById(editor_id+"_parent");ot=inst.oldTargetElement;tn=ot.nodeName.toLowerCase();if(tn=="textarea"||tn=="input"){re.parentNode.removeChild(re);ot.style.display="inline";ot.value=h}else{ot.innerHTML=h;ot.style.display='block';re.parentNode.insertBefore(ot,re);re.parentNode.removeChild(re)}}},triggerSave:function(skip_cleanup,skip_callback){var inst,n;if(typeof(skip_cleanup)=="undefined")skip_cleanup=false;if(typeof(skip_callback)=="undefined")skip_callback=false;for(n in tinyMCE.instances){inst=tinyMCE.instances[n];if(!tinyMCE.isInstance(inst))continue;inst.triggerSave(skip_cleanup,skip_callback)}},resetForm:function(form_index){var i,inst,n,formObj=document.forms[form_index];for(n in tinyMCE.instances){inst=tinyMCE.instances[n];if(!tinyMCE.isInstance(inst))continue;inst.switchSettings();for(i=0;i<formObj.elements.length;i++){if(inst.formTargetElementId==formObj.elements[i].name)inst.getBody().innerHTML=inst.startContent}}},execInstanceCommand:function(editor_id,command,user_interface,value,focus){var inst=tinyMCE.getInstanceById(editor_id),r;if(inst){r=inst.selection.getRng();if(typeof(focus)=="undefined")focus=true;if(focus&&(!r||!r.item))inst.contentWindow.focus();inst.autoResetDesignMode();this.selectedElement=inst.getFocusElement();inst.select();tinyMCE.execCommand(command,user_interface,value);if(tinyMCE.isIE&&window.event!=null)tinyMCE.cancelEvent(window.event)}},execCommand:function(command,user_interface,value){var inst=tinyMCE.selectedInstance,n,pe,te;user_interface=user_interface?user_interface:false;value=value?value:null;if(inst)inst.switchSettings();switch(command){case"Undo":if(this.getParam('custom_undo_redo_global')){if(this.undoIndex>0){tinyMCE.nextUndoRedoAction='Undo';inst=this.undoLevels[--this.undoIndex];inst.select();if(!tinyMCE.nextUndoRedoInstanceId)inst.execCommand('Undo')}}else inst.execCommand('Undo');return true;case"Redo":if(this.getParam('custom_undo_redo_global')){if(this.undoIndex<=this.undoLevels.length-1){tinyMCE.nextUndoRedoAction='Redo';inst=this.undoLevels[this.undoIndex++];inst.select();if(!tinyMCE.nextUndoRedoInstanceId)inst.execCommand('Redo')}}else inst.execCommand('Redo');return true;case'mceFocus':inst=tinyMCE.getInstanceById(value);if(inst)inst.getWin().focus();return;case"mceAddControl":case"mceAddEditor":tinyMCE.addMCEControl(tinyMCE._getElementById(value),value);return;case"mceAddFrameControl":tinyMCE.addMCEControl(tinyMCE._getElementById(value.element,value.document),value.element,value.document);return;case"mceRemoveControl":case"mceRemoveEditor":tinyMCE.removeMCEControl(value);return;case"mceToggleEditor":inst=tinyMCE.getInstanceById(value);if(inst){pe=document.getElementById(inst.editorId+'_parent');te=inst.oldTargetElement;if(typeof(inst.enabled)=='undefined')inst.enabled=true;inst.enabled=!inst.enabled;if(!inst.enabled){pe.style.display='none';if(te.nodeName=='TEXTAREA'||te.nodeName=='INPUT')te.value=inst.getHTML();else te.innerHTML=inst.getHTML();te.style.display=inst.oldTargetDisplay;tinyMCE.dispatchCallback(inst,'hide_instance_callback','hideInstance',inst)}else{pe.style.display='block';te.style.display='none';if(te.nodeName=='TEXTAREA'||te.nodeName=='INPUT')inst.setHTML(te.value);else inst.setHTML(te.innerHTML);inst.useCSS=false;tinyMCE.dispatchCallback(inst,'show_instance_callback','showInstance',inst)}}else tinyMCE.addMCEControl(tinyMCE._getElementById(value),value);return;case"mceResetDesignMode":if(tinyMCE.isGecko){for(n in tinyMCE.instances){if(!tinyMCE.isInstance(tinyMCE.instances[n]))continue;try{tinyMCE.instances[n].getDoc().designMode="off";tinyMCE.instances[n].getDoc().designMode="on";tinyMCE.instances[n].useCSS=false}catch(e){}}}return}if(inst){inst.execCommand(command,user_interface,value)}else if(tinyMCE.settings.focus_alert)alert(tinyMCELang.lang_focus_alert)},_createIFrame:function(replace_element,doc,win){var iframe,id=replace_element.getAttribute("id");var aw,ah;if(typeof(doc)=="undefined")doc=document;if(typeof(win)=="undefined")win=window;iframe=doc.createElement("iframe");aw=""+tinyMCE.settings.area_width;ah=""+tinyMCE.settings.area_height;if(aw.indexOf('%')==-1){aw=parseInt(aw);aw=(isNaN(aw)||aw<0)?300:aw;aw=aw+"px"}if(ah.indexOf('%')==-1){ah=parseInt(ah);ah=(isNaN(ah)||ah<0)?240:ah;ah=ah+"px"}iframe.setAttribute("id",id);iframe.setAttribute("name",id);iframe.setAttribute("class","mceEditorIframe");iframe.setAttribute("border","0");iframe.setAttribute("frameBorder","0");iframe.setAttribute("marginWidth","0");iframe.setAttribute("marginHeight","0");iframe.setAttribute("leftMargin","0");iframe.setAttribute("topMargin","0");iframe.setAttribute("width",aw);iframe.setAttribute("height",ah);iframe.setAttribute("allowtransparency","true");iframe.className='mceEditorIframe';if(tinyMCE.settings.auto_resize)iframe.setAttribute("scrolling","no");if(tinyMCE.isRealIE)iframe.setAttribute("src",this.settings.default_document);iframe.style.width=aw;iframe.style.height=ah;if(tinyMCE.settings.strict_loading_mode)iframe.style.marginBottom='-5px';if(tinyMCE.isRealIE)replace_element.outerHTML=iframe.outerHTML;else replace_element.parentNode.replaceChild(iframe,replace_element);if(tinyMCE.isRealIE)return win.frames[id];else return iframe},setupContent:function(editor_id){var inst=tinyMCE.instances[editor_id],i,doc=inst.getDoc(),head=doc.getElementsByTagName('head').item(0);var content=inst.startContent,contentElement,body;if(tinyMCE.settings.strict_loading_mode){content=content.replace(/</g,'<');content=content.replace(/>/g,'>');content=content.replace(/"/g,'"');content=content.replace(/&/g,'&')}tinyMCE.selectedInstance=inst;inst.switchSettings();if(!tinyMCE.isIE&&tinyMCE.getParam("setupcontent_reload",false)&&doc.title!="blank_page"){try{doc.location.href=tinyMCE.baseURL+"/blank.htm"}catch(ex){}window.setTimeout("tinyMCE.setupContent('"+editor_id+"');",1000);return}if(!head||!doc.body){window.setTimeout("tinyMCE.setupContent('"+editor_id+"');",10);return}tinyMCE.importCSS(inst.getDoc(),tinyMCE.baseURL+"/themes/"+inst.settings.theme+"/css/editor_content.css");tinyMCE.importCSS(inst.getDoc(),inst.settings.content_css);tinyMCE.dispatchCallback(inst,'init_instance_callback','initInstance',inst);if(tinyMCE.getParam('custom_undo_redo_keyboard_shortcuts')){inst.addShortcut('ctrl','z','lang_undo_desc','Undo');inst.addShortcut('ctrl','y','lang_redo_desc','Redo')}for(i=1;i<=6;i++)inst.addShortcut('ctrl',''+i,'','FormatBlock',false,'<h'+i+'>');inst.addShortcut('ctrl','7','','FormatBlock',false,'<p>');inst.addShortcut('ctrl','8','','FormatBlock',false,'<div>');inst.addShortcut('ctrl','9','','FormatBlock',false,'<address>');if(tinyMCE.isGecko){inst.addShortcut('ctrl','b','lang_bold_desc','Bold');inst.addShortcut('ctrl','i','lang_italic_desc','Italic');inst.addShortcut('ctrl','u','lang_underline_desc','Underline')}if(tinyMCE.getParam("convert_fonts_to_spans"))inst.getBody().setAttribute('id','mceSpanFonts');if(tinyMCE.settings.nowrap)doc.body.style.whiteSpace="nowrap";doc.body.dir=this.settings.directionality;doc.editorId=editor_id;if(!tinyMCE.isIE)doc.documentElement.editorId=editor_id;inst.setBaseHREF(tinyMCE.settings.base_href);if(tinyMCE.settings.convert_newlines_to_brs){content=tinyMCE.regexpReplace(content,"\r\n","<br />","gi");content=tinyMCE.regexpReplace(content,"\r","<br />","gi");content=tinyMCE.regexpReplace(content,"\n","<br />","gi")}content=tinyMCE.storeAwayURLs(content);content=tinyMCE._customCleanup(inst,"insert_to_editor",content);if(tinyMCE.isIE){window.setInterval('try{tinyMCE.getCSSClasses(tinyMCE.instances["'+editor_id+'"].getDoc(), "'+editor_id+'");}catch(e){}',500);if(tinyMCE.settings.force_br_newlines)doc.styleSheets[0].addRule("p","margin: 0;");body=inst.getBody();body.editorId=editor_id}content=tinyMCE.cleanupHTMLCode(content);if(!tinyMCE.isIE){contentElement=inst.getDoc().createElement("body");doc=inst.getDoc();contentElement.innerHTML=content;if(tinyMCE.settings.cleanup_on_startup)tinyMCE.setInnerHTML(inst.getBody(),tinyMCE._cleanupHTML(inst,doc,this.settings,contentElement));else tinyMCE.setInnerHTML(inst.getBody(),content);tinyMCE.convertAllRelativeURLs(inst.getBody())}else{if(tinyMCE.settings.cleanup_on_startup){tinyMCE._setHTML(inst.getDoc(),content);try{tinyMCE.setInnerHTML(inst.getBody(),tinyMCE._cleanupHTML(inst,inst.contentDocument,this.settings,inst.getBody()))}catch(e){}}else tinyMCE._setHTML(inst.getDoc(),content)}tinyMCE.handleVisualAid(inst.getBody(),true,tinyMCE.settings.visual,inst);tinyMCE.dispatchCallback(inst,'setupcontent_callback','setupContent',editor_id,inst.getBody(),inst.getDoc());if(!tinyMCE.isIE)tinyMCE.addEventHandlers(inst);if(tinyMCE.isIE){tinyMCE.addEvent(inst.getBody(),"blur",TinyMCE_Engine.prototype._eventPatch);tinyMCE.addEvent(inst.getBody(),"beforedeactivate",TinyMCE_Engine.prototype._eventPatch);if(!tinyMCE.isOpera){tinyMCE.addEvent(doc.body,"mousemove",TinyMCE_Engine.prototype.onMouseMove);tinyMCE.addEvent(doc.body,"beforepaste",TinyMCE_Engine.prototype._eventPatch);tinyMCE.addEvent(doc.body,"drop",TinyMCE_Engine.prototype._eventPatch)}}inst.select();tinyMCE.selectedElement=inst.contentWindow.document.body;tinyMCE._customCleanup(inst,"insert_to_editor_dom",inst.getBody());tinyMCE._customCleanup(inst,"setup_content_dom",inst.getBody());tinyMCE._setEventsEnabled(inst.getBody(),false);tinyMCE.cleanupAnchors(inst.getDoc());if(tinyMCE.getParam("convert_fonts_to_spans"))tinyMCE.convertSpansToFonts(inst.getDoc());inst.startContent=tinyMCE.trim(inst.getBody().innerHTML);inst.undoRedo.add({content:inst.startContent});if(tinyMCE.isGecko){tinyMCE.selectNodes(inst.getBody(),function(n){if(n.nodeType==3||n.nodeType==8)n.nodeValue=n.nodeValue.replace(new RegExp('\\s(mce_src|mce_href)=\"[^\"]*\"','gi'),"");return false})}if(tinyMCE.isGecko)inst.getBody().spellcheck=tinyMCE.getParam("gecko_spellcheck");tinyMCE._removeInternal(inst.getBody());inst.select();tinyMCE.triggerNodeChange(false,true)},storeAwayURLs:function(s){if(!s.match(/(mce_src|mce_href)/gi,s)){s=s.replace(new RegExp('src\\s*=\\s*[\"\']([^ >\"]*)[\"\']','gi'),'src="$1" mce_src="$1"');s=s.replace(new RegExp('href\\s*=\\s*[\"\']([^ >\"]*)[\"\']','gi'),'href="$1" mce_href="$1"')}return s},_removeInternal:function(n){if(tinyMCE.isGecko){tinyMCE.selectNodes(n,function(n){if(n.nodeType==3||n.nodeType==8)n.nodeValue=n.nodeValue.replace(new RegExp('\\s(mce_src|mce_href)=\"[^\"]*\"','gi'),"");return false})}},removeTinyMCEFormElements:function(form_obj){var i,elementId;if(!tinyMCE.getParam('hide_selects_on_submit'))return;if(typeof(form_obj)=="undefined"||form_obj==null)return;if(form_obj.nodeName!="FORM"){if(form_obj.form)form_obj=form_obj.form;else form_obj=tinyMCE.getParentElement(form_obj,"form")}if(form_obj==null)return;for(i=0;i<form_obj.elements.length;i++){elementId=form_obj.elements[i].name?form_obj.elements[i].name:form_obj.elements[i].id;if(elementId.indexOf('mce_editor_')==0)form_obj.elements[i].disabled=true}},handleEvent:function(e){var inst=tinyMCE.selectedInstance,i,elm,keys;if(typeof(tinyMCE)=="undefined")return true;if(tinyMCE.executeCallback(tinyMCE.selectedInstance,'handle_event_callback','handleEvent',e))return false;switch(e.type){case"beforedeactivate":case"blur":if(tinyMCE.selectedInstance)tinyMCE.selectedInstance.execCommand('mceEndTyping');tinyMCE.hideMenus();return;case"drop":case"beforepaste":return;case"submit":tinyMCE.formSubmit(tinyMCE.isMSIE?window.event.srcElement:e.target);return;case"reset":var formObj=tinyMCE.isIE?window.event.srcElement:e.target;for(i=0;i<document.forms.length;i++){if(document.forms[i]==formObj)window.setTimeout('tinyMCE.resetForm('+i+');',10)}return;case"keypress":if(inst&&inst.handleShortcut(e))return false;if(e.target.editorId){tinyMCE.instances[e.target.editorId].select()}else{if(e.target.ownerDocument.editorId)tinyMCE.instances[e.target.ownerDocument.editorId].select()}if(tinyMCE.selectedInstance)tinyMCE.selectedInstance.switchSettings();if((tinyMCE.isGecko||tinyMCE.isOpera||tinyMCE.isSafari)&&tinyMCE.settings.force_p_newlines&&e.keyCode==13&&!e.shiftKey){if(TinyMCE_ForceParagraphs._insertPara(tinyMCE.selectedInstance,e)){tinyMCE.execCommand("mceAddUndoLevel");return tinyMCE.cancelEvent(e)}}if((tinyMCE.isGecko&&!tinyMCE.isSafari)&&tinyMCE.settings.force_p_newlines&&(e.keyCode==8||e.keyCode==46)&&!e.shiftKey){if(TinyMCE_ForceParagraphs._handleBackSpace(tinyMCE.selectedInstance,e.type)){tinyMCE.execCommand("mceAddUndoLevel");return tinyMCE.cancelEvent(e)}}if(tinyMCE.isIE&&tinyMCE.settings.force_br_newlines&&e.keyCode==13){if(e.target.editorId)tinyMCE.instances[e.target.editorId].select();if(tinyMCE.selectedInstance){var sel=tinyMCE.selectedInstance.getDoc().selection;var rng=sel.createRange();if(tinyMCE.getParentElement(rng.parentElement(),"li")!=null)return false;e.returnValue=false;e.cancelBubble=true;rng.pasteHTML("<br />");rng.collapse(false);rng.select();tinyMCE.execCommand("mceAddUndoLevel");tinyMCE.triggerNodeChange(false);return false}}if(e.keyCode==8||e.keyCode==46){tinyMCE.selectedElement=e.target;tinyMCE.linkElement=tinyMCE.getParentElement(e.target,"a");tinyMCE.imgElement=tinyMCE.getParentElement(e.target,"img");tinyMCE.triggerNodeChange(false)}return false;case"keyup":case"keydown":tinyMCE.hideMenus();tinyMCE.hasMouseMoved=false;if(inst&&inst.handleShortcut(e))return false;inst._fixRootBlocks();if(inst.settings.remove_trailing_nbsp)inst._fixTrailingNbsp();if(e.target.editorId)tinyMCE.instances[e.target.editorId].select();if(tinyMCE.selectedInstance)tinyMCE.selectedInstance.switchSettings();inst=tinyMCE.selectedInstance;if(tinyMCE.isGecko&&tinyMCE.settings.force_p_newlines&&(e.keyCode==8||e.keyCode==46)&&!e.shiftKey){if(TinyMCE_ForceParagraphs._handleBackSpace(tinyMCE.selectedInstance,e.type)){tinyMCE.execCommand("mceAddUndoLevel");e.preventDefault();return false}}tinyMCE.selectedElement=null;tinyMCE.selectedNode=null;elm=tinyMCE.selectedInstance.getFocusElement();tinyMCE.linkElement=tinyMCE.getParentElement(elm,"a");tinyMCE.imgElement=tinyMCE.getParentElement(elm,"img");tinyMCE.selectedElement=elm;if(tinyMCE.isGecko&&e.type=="keyup"&&e.keyCode==9)tinyMCE.handleVisualAid(tinyMCE.selectedInstance.getBody(),true,tinyMCE.settings.visual,tinyMCE.selectedInstance);if(tinyMCE.isIE&&e.type=="keydown"&&e.keyCode==13)tinyMCE.enterKeyElement=tinyMCE.selectedInstance.getFocusElement();if(tinyMCE.isIE&&e.type=="keyup"&&e.keyCode==13){elm=tinyMCE.enterKeyElement;if(elm){var re=new RegExp('^HR|IMG|BR$','g');var dre=new RegExp('^H[1-6]$','g');if(!elm.hasChildNodes()&&!re.test(elm.nodeName)){if(dre.test(elm.nodeName))elm.innerHTML=" ";else elm.innerHTML=" "}}}keys=tinyMCE.posKeyCodes;var posKey=false;for(i=0;i<keys.length;i++){if(keys[i]==e.keyCode){posKey=true;break}}if(tinyMCE.isIE&&tinyMCE.settings.custom_undo_redo){keys=[8,46];for(i=0;i<keys.length;i++){if(keys[i]==e.keyCode){if(e.type=="keyup")tinyMCE.triggerNodeChange(false)}}}if(e.keyCode==17)return true;if(tinyMCE.isGecko){if(!posKey&&e.type=="keyup"&&!e.ctrlKey||(e.ctrlKey&&(e.keyCode==86||e.keyCode==88)))tinyMCE.execCommand("mceStartTyping")}else{if(!posKey&&e.type=="keyup")tinyMCE.execCommand("mceStartTyping")}if(e.type=="keydown"&&(posKey||e.ctrlKey)&&inst)inst.undoBookmark=inst.selection.getBookmark();if(e.type=="keyup"&&(posKey||e.ctrlKey))tinyMCE.execCommand("mceEndTyping");if(posKey&&e.type=="keyup")tinyMCE.triggerNodeChange(false);if(tinyMCE.isIE&&e.ctrlKey)window.setTimeout('tinyMCE.triggerNodeChange(false);',1);break;case"mousedown":case"mouseup":case"click":case"dblclick":case"focus":tinyMCE.hideMenus();if(tinyMCE.selectedInstance){tinyMCE.selectedInstance.switchSettings();tinyMCE.selectedInstance.isFocused=true}var targetBody=tinyMCE.getParentElement(e.target,"html");for(var instanceName in tinyMCE.instances){if(!tinyMCE.isInstance(tinyMCE.instances[instanceName]))continue;inst=tinyMCE.instances[instanceName];inst.autoResetDesignMode();if(inst.getBody().parentNode==targetBody){inst.select();tinyMCE.selectedElement=e.target;tinyMCE.linkElement=tinyMCE.getParentElement(tinyMCE.selectedElement,"a");tinyMCE.imgElement=tinyMCE.getParentElement(tinyMCE.selectedElement,"img");break}}if(!tinyMCE.selectedInstance.undoRedo.undoLevels[0].bookmark&&(e.type=="mouseup"||e.type=="dblclick"))tinyMCE.selectedInstance.undoRedo.undoLevels[0].bookmark=tinyMCE.selectedInstance.selection.getBookmark();if(e.type!="focus")tinyMCE.selectedNode=null;tinyMCE.triggerNodeChange(false);tinyMCE.execCommand("mceEndTyping");if(e.type=="mouseup")tinyMCE.execCommand("mceAddUndoLevel");if(!tinyMCE.selectedInstance&&e.target.editorId)tinyMCE.instances[e.target.editorId].select();return false}},getButtonHTML:function(id,lang,img,cmd,ui,val){var h='',m,x,io='';cmd='tinyMCE.execInstanceCommand(\'{$editor_id}\',\''+cmd+'\'';if(typeof(ui)!="undefined"&&ui!=null)cmd+=','+ui;if(typeof(val)!="undefined"&&val!=null)cmd+=",'"+val+"'";cmd+=');';if(tinyMCE.isRealIE)io='onmouseover="tinyMCE.lastHover = this;"';if(tinyMCE.getParam('button_tile_map')&&(!tinyMCE.isIE||tinyMCE.isOpera)&&(m=this.buttonMap[id])!=null&&(tinyMCE.getParam("language")=="en"||img.indexOf('$lang')==-1)){x=0-(m*20)==0?'0':0-(m*20);h+='<a id="{$editor_id}_'+id+'" href="javascript:'+cmd+'" onclick="'+cmd+'return false;" onmousedown="return false;" '+io+' class="mceTiledButton mceButtonNormal" target="_self">';h+='<img src="{$themeurl}/images/spacer.gif" style="background-position: '+x+'px 0" alt="{$'+lang+'}" title="{$'+lang+'}" />';h+='</a>'}else{h+='<a id="{$editor_id}_'+id+'" href="javascript:'+cmd+'" onclick="'+cmd+'return false;" onmousedown="return false;" '+io+' class="mceButtonNormal" target="_self">';h+='<img src="'+img+'" alt="{$'+lang+'}" title="{$'+lang+'}" />';h+='</a>'}return h},getMenuButtonHTML:function(id,lang,img,mcmd,cmd,ui,val){var h='',m,x;mcmd='tinyMCE.execInstanceCommand(\'{$editor_id}\',\''+mcmd+'\');';cmd='tinyMCE.execInstanceCommand(\'{$editor_id}\',\''+cmd+'\'';if(typeof(ui)!="undefined"&&ui!=null)cmd+=','+ui;if(typeof(val)!="undefined"&&val!=null)cmd+=",'"+val+"'";cmd+=');';if(tinyMCE.getParam('button_tile_map')&&(!tinyMCE.isIE||tinyMCE.isOpera)&&(m=tinyMCE.buttonMap[id])!=null&&(tinyMCE.getParam("language")=="en"||img.indexOf('$lang')==-1)){x=0-(m*20)==0?'0':0-(m*20);if(tinyMCE.isRealIE)h+='<span id="{$editor_id}_'+id+'" class="mceMenuButton" onmouseover="tinyMCE._menuButtonEvent(\'over\',this);tinyMCE.lastHover = this;" onmouseout="tinyMCE._menuButtonEvent(\'out\',this);">';else h+='<span id="{$editor_id}_'+id+'" class="mceMenuButton">';h+='<a href="javascript:'+cmd+'" onclick="'+cmd+'return false;" onmousedown="return false;" class="mceTiledButton mceMenuButtonNormal" target="_self">';h+='<img src="{$themeurl}/images/spacer.gif" style="width: 20px; height: 20px; background-position: '+x+'px 0" title="{$'+lang+'}" /></a>';h+='<a href="javascript:'+mcmd+'" onclick="'+mcmd+'return false;" onmousedown="return false;"><img src="{$themeurl}/images/button_menu.gif" title="{$'+lang+'}" class="mceMenuButton" />';h+='</a></span>'}else{if(tinyMCE.isRealIE)h+='<span id="{$editor_id}_'+id+'" dir="ltr" class="mceMenuButton" onmouseover="tinyMCE._menuButtonEvent(\'over\',this);tinyMCE.lastHover = this;" onmouseout="tinyMCE._menuButtonEvent(\'out\',this);">';else h+='<span id="{$editor_id}_'+id+'" dir="ltr" class="mceMenuButton">';h+='<a href="javascript:'+cmd+'" onclick="'+cmd+'return false;" onmousedown="return false;" class="mceMenuButtonNormal" target="_self">';h+='<img src="'+img+'" title="{$'+lang+'}" /></a>';h+='<a href="javascript:'+mcmd+'" onclick="'+mcmd+'return false;" onmousedown="return false;"><img src="{$themeurl}/images/button_menu.gif" title="{$'+lang+'}" class="mceMenuButton" />';h+='</a></span>'}return h},_menuButtonEvent:function(e,o){if(o.className=='mceMenuButtonFocus')return;if(e=='over')o.className=o.className+' mceMenuHover';else o.className=o.className.replace(/\s.*$/,'')},addButtonMap:function(m){var i,a=m.replace(/\s+/,'').split(',');for(i=0;i<a.length;i++)this.buttonMap[a[i]]=i},formSubmit:function(f,p){var n,inst,found=false;if(f.form)f=f.form;if(tinyMCE.getParam('save_on_tinymce_forms')){for(n in tinyMCE.instances){inst=tinyMCE.instances[n];if(!tinyMCE.isInstance(inst))continue;if(inst.formElement){if(f==inst.formElement.form){found=true;inst.isNotDirty=true}}}}else found=true;if(found){tinyMCE.removeTinyMCEFormElements(f);tinyMCE.triggerSave()}if(f.mceOldSubmit&&p)f.mceOldSubmit()},submitPatch:function(){tinyMCE.formSubmit(this,true)},onLoad:function(){var r,i,c,mode,trigger,elements,element,settings,elementId,elm;var selector,deselector,elementRefAr,form;if(tinyMCE.settings.strict_loading_mode&&this.loadingIndex!=-1){window.setTimeout('tinyMCE.onLoad();',1);return}if(tinyMCE.isRealIE&&window.event.type=="readystatechange"&&document.readyState!="complete")return true;if(tinyMCE.isLoaded)return true;tinyMCE.isLoaded=true;if(tinyMCE.isRealIE&&document.body&&window.location.href!=window.top.location.href){r=document.body.createTextRange();r.collapse(true);r.select()}tinyMCE.dispatchCallback(null,'onpageload','onPageLoad');for(c=0;c<tinyMCE.configs.length;c++){tinyMCE.settings=tinyMCE.configs[c];selector=tinyMCE.getParam("editor_selector");deselector=tinyMCE.getParam("editor_deselector");elementRefAr=[];if(document.forms&&tinyMCE.settings.add_form_submit_trigger&&!tinyMCE.submitTriggers){for(i=0;i<document.forms.length;i++){form=document.forms[i];tinyMCE.addEvent(form,"submit",TinyMCE_Engine.prototype.handleEvent);tinyMCE.addEvent(form,"reset",TinyMCE_Engine.prototype.handleEvent);tinyMCE.submitTriggers=true;if(tinyMCE.settings.submit_patch){try{form.mceOldSubmit=form.submit;form.submit=TinyMCE_Engine.prototype.submitPatch}catch(e){}}}}mode=tinyMCE.settings.mode;switch(mode){case"exact":elements=tinyMCE.getParam('elements','',true,',');for(i=0;i<elements.length;i++){element=tinyMCE._getElementById(elements[i]);trigger=element?element.getAttribute(tinyMCE.settings.textarea_trigger):"";if(new RegExp('\\b'+deselector+'\\b').test(tinyMCE.getAttrib(element,"class")))continue;if(trigger=="false")continue;if((tinyMCE.settings.ask||tinyMCE.settings.convert_on_click)&&element){elementRefAr[elementRefAr.length]=element;continue}if(element)tinyMCE.addMCEControl(element,elements[i])}break;case"specific_textareas":case"textareas":elements=document.getElementsByTagName("textarea");for(i=0;i<elements.length;i++){elm=elements.item(i);trigger=elm.getAttribute(tinyMCE.settings.textarea_trigger);if(selector!==''&&!new RegExp('\\b'+selector+'\\b').test(tinyMCE.getAttrib(elm,"class")))continue;if(selector!=='')trigger=selector!==''?"true":"";if(new RegExp('\\b'+deselector+'\\b').test(tinyMCE.getAttrib(elm,"class")))continue;if((mode=="specific_textareas"&&trigger=="true")||(mode=="textareas"&&trigger!="false"))elementRefAr[elementRefAr.length]=elm}break}for(i=0;i<elementRefAr.length;i++){element=elementRefAr[i];elementId=element.name?element.name:element.id;if(tinyMCE.settings.ask||tinyMCE.settings.convert_on_click){if(tinyMCE.isGecko){settings=tinyMCE.settings;tinyMCE.addEvent(element,"focus",function(e){window.setTimeout(function(){TinyMCE_Engine.prototype.confirmAdd(e,settings)},10)});if(element.nodeName!="TEXTAREA"&&element.nodeName!="INPUT")tinyMCE.addEvent(element,"click",function(e){window.setTimeout(function(){TinyMCE_Engine.prototype.confirmAdd(e,settings)},10)});}else{settings=tinyMCE.settings;tinyMCE.addEvent(element,"focus",function(){TinyMCE_Engine.prototype.confirmAdd(null,settings)});tinyMCE.addEvent(element,"click",function(){TinyMCE_Engine.prototype.confirmAdd(null,settings)});}}else tinyMCE.addMCEControl(element,elementId)}if(tinyMCE.settings.auto_focus){window.setTimeout(function(){var inst=tinyMCE.getInstanceById(tinyMCE.settings.auto_focus);inst.selection.selectNode(inst.getBody(),true,true);inst.contentWindow.focus()},100)}tinyMCE.dispatchCallback(null,'oninit','onInit')}},isInstance:function(o){return o!=null&&typeof(o)=="object"&&o.isTinyMCE_Control},getParam:function(name,default_value,strip_whitespace,split_chr){var i,outArray,value=(typeof(this.settings[name])=="undefined")?default_value:this.settings[name];if(value=="true"||value=="false")return(value=="true");if(strip_whitespace)value=tinyMCE.regexpReplace(value,"[ \t\r\n]","");if(typeof(split_chr)!="undefined"&&split_chr!=null){value=value.split(split_chr);outArray=[];for(i=0;i<value.length;i++){if(value[i]&&value[i]!=='')outArray[outArray.length]=value[i]}value=outArray}return value},getLang:function(name,default_value,parse_entities,va){var v=(typeof(tinyMCELang[name])=="undefined")?default_value:tinyMCELang[name],n;if(parse_entities)v=tinyMCE.entityDecode(v);if(va){for(n in va)v=this.replaceVar(v,n,va[n])}return v},entityDecode:function(s){var e=document.createElement("div");e.innerHTML=s;return!e.firstChild?s:e.firstChild.nodeValue},addToLang:function(prefix,ar){var k;for(k in ar){if(typeof(ar[k])=='function')continue;tinyMCELang[(k.indexOf('lang_')==-1?'lang_':'')+(prefix!==''?(prefix+"_"):'')+k]=ar[k]}this.loadNextScript()},triggerNodeChange:function(focus,setup_content){var elm,inst,editorId,undoIndex=-1,undoLevels=-1,doc,anySelection,st;if(tinyMCE.selectedInstance){inst=tinyMCE.selectedInstance;elm=(typeof(setup_content)!="undefined"&&setup_content)?tinyMCE.selectedElement:inst.getFocusElement();editorId=inst.editorId;st=inst.selection.getSelectedText();if(tinyMCE.settings.auto_resize)inst.resizeToContent();if(setup_content&&tinyMCE.isGecko&&inst.isHidden())elm=inst.getBody();inst.switchSettings();anySelection=!inst.selection.isCollapsed();if(tinyMCE.settings.custom_undo_redo){undoIndex=inst.undoRedo.undoIndex;undoLevels=inst.undoRedo.undoLevels.length}tinyMCE.dispatchCallback(inst,'handle_node_change_callback','handleNodeChange',editorId,elm,undoIndex,undoLevels,inst.visualAid,anySelection,setup_content)}if(this.selectedInstance&&(typeof(focus)=="undefined"||focus))this.selectedInstance.contentWindow.focus()},_customCleanup:function(inst,type,content){var pl,po,i,customCleanup;customCleanup=tinyMCE.settings.cleanup_callback;if(customCleanup!='')content=tinyMCE.resolveDots(tinyMCE.settings.cleanup_callback,window)(type,content,inst);po=tinyMCE.themes[tinyMCE.settings.theme];if(po&&po.cleanup)content=po.cleanup(type,content,inst);pl=inst.plugins;for(i=0;i<pl.length;i++){po=tinyMCE.plugins[pl[i]];if(po&&po.cleanup)content=po.cleanup(type,content,inst)}return content},setContent:function(h){if(tinyMCE.selectedInstance){tinyMCE.selectedInstance.execCommand('mceSetContent',false,h);tinyMCE.selectedInstance.repaint()}},importThemeLanguagePack:function(name){if(typeof(name)=="undefined")name=tinyMCE.settings.theme;tinyMCE.loadScript(tinyMCE.baseURL+'/themes/'+name+'/langs/'+tinyMCE.settings.language+'.js')},importPluginLanguagePack:function(name){var b=tinyMCE.baseURL+'/plugins/'+name;if(this.plugins[name])b=this.plugins[name].baseURL;tinyMCE.loadScript(b+'/langs/'+tinyMCE.settings.language+'.js')},applyTemplate:function(h,ag){return h.replace(new RegExp('\\{\\$([a-z0-9_]+)\\}','gi'),function(m,s){if(s.indexOf('lang_')==0&&tinyMCELang[s])return tinyMCELang[s];if(ag&&ag[s])return ag[s];if(tinyMCE.settings[s])return tinyMCE.settings[s];if(m=='themeurl')return tinyMCE.themeURL;return m})},replaceVar:function(h,r,v){return h.replace(new RegExp('{\\\$'+r+'}','g'),v)},openWindow:function(template,args){var html,width,height,x,y,resizable,scrollbars,url,name,win,modal,features;args=!args?{}:args;args.mce_template_file=template.file;args.mce_width=template.width;args.mce_height=template.height;tinyMCE.windowArgs=args;html=template.html;if(!(width=parseInt(template.width)))width=320;if(!(height=parseInt(template.height)))height=200;if(tinyMCE.isIE)height+=40;else height+=20;x=parseInt(screen.width/ 2.0) - (width /2.0);y=parseInt(screen.height/ 2.0) - (height /2.0);resizable=(args&&args.resizable)?args.resizable:"no";scrollbars=(args&&args.scrollbars)?args.scrollbars:"no";if(template.file.charAt(0)!='/'&&template.file.indexOf('://')==-1)url=tinyMCE.baseURL+"/themes/"+tinyMCE.getParam("theme")+"/"+template.file;else url=template.file;for(name in args){if(typeof(args[name])=='function')continue;url=tinyMCE.replaceVar(url,name,escape(args[name]))}if(html){html=tinyMCE.replaceVar(html,"css",this.settings.popups_css);html=tinyMCE.applyTemplate(html,args);win=window.open("","mcePopup"+new Date().getTime(),"top="+y+",left="+x+",scrollbars="+scrollbars+",dialog=yes,minimizable="+resizable+",modal=yes,width="+width+",height="+height+",resizable="+resizable);if(win==null){alert(tinyMCELang.lang_popup_blocked);return}win.document.write(html);win.document.close();win.resizeTo(width,height);win.focus()}else{if((tinyMCE.isRealIE)&&resizable!='yes'&&tinyMCE.settings.dialog_type=="modal"){height+=10;features="resizable:"+resizable+";scroll:"+scrollbars+";status:yes;center:yes;help:no;dialogWidth:"+width+"px;dialogHeight:"+height+"px;";window.showModalDialog(url,window,features)}else{modal=(resizable=="yes")?"no":"yes";if(tinyMCE.isGecko&&tinyMCE.isMac)modal="no";if(template.close_previous!="no")try{tinyMCE.lastWindow.close()}catch(ex){}win=window.open(url,"mcePopup"+new Date().getTime(),"top="+y+",left="+x+",scrollbars="+scrollbars+",dialog="+modal+",minimizable="+resizable+",modal="+modal+",width="+width+",height="+height+",resizable="+resizable);if(win==null){alert(tinyMCELang.lang_popup_blocked);return}if(template.close_previous!="no")tinyMCE.lastWindow=win;try{win.resizeTo(width,height)}catch(e){}if(tinyMCE.isGecko&&win.document){if(win.document.defaultView.statusbar.visible)win.resizeBy(0,tinyMCE.isMac?10:24)}win.focus()}}},closeWindow:function(win){win.close()},getVisualAidClass:function(class_name,state){var i,classNames,ar,className,aidClass=tinyMCE.settings.visual_table_class;if(typeof(state)=="undefined")state=tinyMCE.settings.visual;classNames=[];ar=class_name.split(' ');for(i=0;i<ar.length;i++){if(ar[i]==aidClass)ar[i]="";if(ar[i]!=='')classNames[classNames.length]=ar[i]}if(state)classNames[classNames.length]=aidClass;className="";for(i=0;i<classNames.length;i++){if(i>0)className+=" ";className+=classNames[i]}return className},handleVisualAid:function(el,deep,state,inst,skip_dispatch){var i,x,y,tableElement,anchorName,oldW,oldH,bo,cn;if(!el)return;if(!skip_dispatch)tinyMCE.dispatchCallback(inst,'handle_visual_aid_callback','handleVisualAid',el,deep,state,inst);tableElement=null;switch(el.nodeName){case"TABLE":oldW=el.style.width;oldH=el.style.height;bo=tinyMCE.getAttrib(el,"border");bo=bo==''||bo=="0"?true:false;tinyMCE.setAttrib(el,"class",tinyMCE.getVisualAidClass(tinyMCE.getAttrib(el,"class"),state&&bo));el.style.width=oldW;el.style.height=oldH;for(y=0;y<el.rows.length;y++){for(x=0;x<el.rows[y].cells.length;x++){cn=tinyMCE.getVisualAidClass(tinyMCE.getAttrib(el.rows[y].cells[x],"class"),state&&bo);tinyMCE.setAttrib(el.rows[y].cells[x],"class",cn)}}break;case"A":anchorName=tinyMCE.getAttrib(el,"name");if(anchorName!==''&&state){el.title=anchorName;tinyMCE.addCSSClass(el,'mceItemAnchor')}else if(anchorName!==''&&!state)el.className='';break}if(deep&&el.hasChildNodes()){for(i=0;i<el.childNodes.length;i++)tinyMCE.handleVisualAid(el.childNodes[i],deep,state,inst,true)}},fixGeckoBaseHREFBug:function(m,e,h){var xsrc,xhref;if(tinyMCE.isGecko){if(m==1){h=h.replace(/\ssrc=/gi," mce_tsrc=");h=h.replace(/\shref=/gi," mce_thref=");return h}else{if(!new RegExp('(src|href)=','g').test(h))return h;tinyMCE.selectElements(e,'A,IMG,SELECT,AREA,IFRAME,BASE,INPUT,SCRIPT,EMBED,OBJECT,LINK',function(n){xsrc=tinyMCE.getAttrib(n,"mce_tsrc");xhref=tinyMCE.getAttrib(n,"mce_thref");if(xsrc!==''){try{n.src=tinyMCE.convertRelativeToAbsoluteURL(tinyMCE.settings.base_href,xsrc)}catch(e){}n.removeAttribute("mce_tsrc")}if(xhref!==''){try{n.href=tinyMCE.convertRelativeToAbsoluteURL(tinyMCE.settings.base_href,xhref)}catch(e){}n.removeAttribute("mce_thref")}return false});tinyMCE.selectNodes(e,function(n){if(n.nodeType==3||n.nodeType==8){n.nodeValue=n.nodeValue.replace(/\smce_tsrc=/gi," src=");n.nodeValue=n.nodeValue.replace(/\smce_thref=/gi," href=")}return false})}}return h},_setHTML:function(doc,html_content){var i,html,paras,node;html_content=tinyMCE.cleanupHTMLCode(html_content);try{tinyMCE.setInnerHTML(doc.body,html_content)}catch(e){if(this.isMSIE)doc.body.createTextRange().pasteHTML(html_content)}if(tinyMCE.isIE&&tinyMCE.settings.fix_content_duplication){paras=doc.getElementsByTagName("P");for(i=0;i<paras.length;i++){node=paras[i];while((node=node.parentNode)!=null){if(node.nodeName=="P")node.outerHTML=node.innerHTML}}html=doc.body.innerHTML;tinyMCE.setInnerHTML(doc.body,html)}tinyMCE.cleanupAnchors(doc);if(tinyMCE.getParam("convert_fonts_to_spans"))tinyMCE.convertSpansToFonts(doc)},getEditorId:function(form_element){var inst=this.getInstanceById(form_element);if(!inst)return null;return inst.editorId},getInstanceById:function(editor_id){var inst=this.instances[editor_id],n;if(!inst){for(n in tinyMCE.instances){inst=tinyMCE.instances[n];if(!tinyMCE.isInstance(inst))continue;if(inst.formTargetElementId==editor_id)return inst}}else return inst;return null},queryInstanceCommandValue:function(editor_id,command){var inst=tinyMCE.getInstanceById(editor_id);if(inst)return inst.queryCommandValue(command);return false},queryInstanceCommandState:function(editor_id,command){var inst=tinyMCE.getInstanceById(editor_id);if(inst)return inst.queryCommandState(command);return null},setWindowArg:function(n,v){this.windowArgs[n]=v},getWindowArg:function(n,d){return(typeof(this.windowArgs[n])=="undefined")?d:this.windowArgs[n]},getCSSClasses:function(editor_id,doc){var i,c,x,rule,styles,rules,csses,selectorText,inst=tinyMCE.getInstanceById(editor_id);var cssClass,addClass,p;if(!inst)inst=tinyMCE.selectedInstance;if(!inst)return[];if(!doc)doc=inst.getDoc();if(inst&&inst.cssClasses.length>0)return inst.cssClasses;if(!doc)return;styles=doc.styleSheets;if(styles&&styles.length>0){for(x=0;x<styles.length;x++){csses=null;try{csses=tinyMCE.isIE?doc.styleSheets(x).rules:styles[x].cssRules}catch(e){}if(!csses)return[];for(i=0;i<csses.length;i++){selectorText=csses[i].selectorText;if(selectorText){rules=selectorText.split(',');for(c=0;c<rules.length;c++){rule=rules[c];while(rule.indexOf(' ')==0)rule=rule.substring(1);if(rule.indexOf(' ')!=-1||rule.indexOf(':')!=-1||rule.indexOf('mceItem')!=-1)continue;if(rule.indexOf(tinyMCE.settings.visual_table_class)!=-1||rule.indexOf('mceEditable')!=-1||rule.indexOf('mceNonEditable')!=-1)continue;if(rule.indexOf('.')!=-1){cssClass=rule.substring(rule.indexOf('.')+1);addClass=true;for(p=0;p<inst.cssClasses.length&&addClass;p++){if(inst.cssClasses[p]==cssClass)addClass=false}if(addClass)inst.cssClasses[inst.cssClasses.length]=cssClass}}}}}}return inst.cssClasses},regexpReplace:function(in_str,reg_exp,replace_str,opts){var re;if(in_str==null)return in_str;if(typeof(opts)=="undefined")opts='g';re=new RegExp(reg_exp,opts);return in_str.replace(re,replace_str)},trim:function(s){return s.replace(/^\s*|\s*$/g,"")},cleanupEventStr:function(s){s=""+s;s=s.replace('function anonymous()\n{\n','');s=s.replace('\n}','');s=s.replace(/^return true;/gi,'');return s},getControlHTML:function(c){var i,l,n,o,v,rtl=tinyMCE.getLang('lang_dir')=='rtl';l=tinyMCE.plugins;for(n in l){o=l[n];if(o.getControlHTML&&(v=o.getControlHTML(c))!==''){if(rtl)return'<span dir="rtl">'+tinyMCE.replaceVar(v,"pluginurl",o.baseURL)+'</span>';return tinyMCE.replaceVar(v,"pluginurl",o.baseURL)}}o=tinyMCE.themes[tinyMCE.settings.theme];if(o.getControlHTML&&(v=o.getControlHTML(c))!==''){if(rtl)return'<span dir="rtl">'+v+'</span>';return v}return''},evalFunc:function(f,idx,a,o){o=!o?window:o;f=typeof(f)=='function'?f:o[f];return f.apply(o,Array.prototype.slice.call(a,idx))},dispatchCallback:function(i,p,n){return this.callFunc(i,p,n,0,this.dispatchCallback.arguments)},executeCallback:function(i,p,n){return this.callFunc(i,p,n,1,this.executeCallback.arguments)},execCommandCallback:function(i,p,n){return this.callFunc(i,p,n,2,this.execCommandCallback.arguments)},callFunc:function(ins,p,n,m,a){var l,i,on,o,s,v;s=m==2;l=tinyMCE.getParam(p,'');if(l!==''&&(v=tinyMCE.evalFunc(l,3,a))==s&&m>0)return true;if(ins!=null){for(i=0,l=ins.plugins;i<l.length;i++){o=tinyMCE.plugins[l[i]];if(o[n]&&(v=tinyMCE.evalFunc(n,3,a,o))==s&&m>0)return true}}l=tinyMCE.themes;for(on in l){o=l[on];if(o[n]&&(v=tinyMCE.evalFunc(n,3,a,o))==s&&m>0)return true}return false},resolveDots:function(s,o){var i;if(typeof(s)=='string'){for(i=0,s=s.split('.');i<s.length;i++)o=o[s[i]]}else o=s;return o},xmlEncode:function(s){return s?(''+s).replace(this.xmlEncodeRe,function(c,b){switch(c){case'&':return'&';case'"':return'"';case'<':return'<';case'>':return'>'}return c}):s},add:function(c,m){var n;for(n in m){if(m.hasOwnProperty(n))c.prototype[n]=m[n]}},extend:function(p,np){var o={},n;o.parent=p;for(n in p){if(p.hasOwnProperty(n))o[n]=p[n]}for(n in np){if(np.hasOwnProperty(n))o[n]=np[n]}return o},hideMenus:function(){var e=tinyMCE.lastSelectedMenuBtn;if(tinyMCE.lastMenu){tinyMCE.lastMenu.hide();tinyMCE.lastMenu=null}if(e){tinyMCE.switchClass(e,tinyMCE.lastMenuBtnClass);tinyMCE.lastSelectedMenuBtn=null}}};var TinyMCE=TinyMCE_Engine;var tinyMCE=new TinyMCE_Engine();var tinyMCELang={};function TinyMCE_Control(settings){var t,i,tos,fu,p,x,fn,fu,pn,s=settings;this.undoRedoLevel=true;this.isTinyMCE_Control=true;this.enabled=true;this.settings=s;this.settings.theme=tinyMCE.getParam("theme","default");this.settings.width=tinyMCE.getParam("width",-1);this.settings.height=tinyMCE.getParam("height",-1);this.selection=new TinyMCE_Selection(this);this.undoRedo=new TinyMCE_UndoRedo(this);this.cleanup=new TinyMCE_Cleanup();this.shortcuts=[];this.hasMouseMoved=false;this.foreColor=this.backColor="#999999";this.data={};this.cssClasses=[];this.cleanup.init({valid_elements:s.valid_elements,extended_valid_elements:s.extended_valid_elements,valid_child_elements:s.valid_child_elements,entities:s.entities,entity_encoding:s.entity_encoding,debug:s.cleanup_debug,indent:s.apply_source_formatting,invalid_elements:s.invalid_elements,verify_html:s.verify_html,fix_content_duplication:s.fix_content_duplication,convert_fonts_to_spans:s.convert_fonts_to_spans});t=this.settings.theme;if(!tinyMCE.hasTheme(t)){fn=tinyMCE.callbacks;tos={};for(i=0;i<fn.length;i++){if((fu=window['TinyMCE_'+t+"_"+fn[i]]))tos[fn[i]]=fu}tinyMCE.addTheme(t,tos)}this.plugins=[];p=tinyMCE.getParam('plugins','',true,',');if(p.length>0){for(i=0;i<p.length;i++){pn=p[i];if(pn.charAt(0)=='-')pn=pn.substring(1);if(!tinyMCE.hasPlugin(pn)){fn=tinyMCE.callbacks;tos={};for(x=0;x<fn.length;x++){if((fu=window['TinyMCE_'+pn+"_"+fn[x]]))tos[fn[x]]=fu}tinyMCE.addPlugin(pn,tos)}this.plugins[this.plugins.length]=pn}}};TinyMCE_Control.prototype={selection:null,settings:null,cleanup:null,getData:function(na){var o=this.data[na];if(!o)o=this.data[na]={};return o},hasPlugin:function(n){var i;for(i=0;i<this.plugins.length;i++){if(this.plugins[i]==n)return true}return false},addPlugin:function(n,p){if(!this.hasPlugin(n)){tinyMCE.addPlugin(n,p);this.plugins[this.plugins.length]=n}},repaint:function(){var s,b,ex;if(tinyMCE.isRealIE)return;try{s=this.selection;b=s.getBookmark(true);this.getBody().style.display='none';this.getDoc().execCommand('selectall',false,null);this.getSel().collapseToStart();this.getBody().style.display='block';s.moveToBookmark(b)}catch(ex){}},switchSettings:function(){if(tinyMCE.configs.length>1&&tinyMCE.currentConfig!=this.settings.index){tinyMCE.settings=this.settings;tinyMCE.currentConfig=this.settings.index}},select:function(){var oldInst=tinyMCE.selectedInstance;if(oldInst!=this){if(oldInst)oldInst.execCommand('mceEndTyping');tinyMCE.dispatchCallback(this,'select_instance_callback','selectInstance',this,oldInst);tinyMCE.selectedInstance=this}},getBody:function(){return this.contentBody?this.contentBody:this.getDoc().body},getDoc:function(){return this.contentWindow.document},getWin:function(){return this.contentWindow},getContainerWin:function(){return this.containerWindow?this.containerWindow:window},getViewPort:function(){return tinyMCE.getViewPort(this.getWin())},getParentNode:function(n,f){return tinyMCE.getParentNode(n,f,this.getBody())},getParentElement:function(n,na,f){return tinyMCE.getParentElement(n,na,f,this.getBody())},getParentBlockElement:function(n){return tinyMCE.getParentBlockElement(n,this.getBody())},resizeToContent:function(){var d=this.getDoc(),b=d.body,de=d.documentElement;this.iframeElement.style.height=(tinyMCE.isRealIE)?b.scrollHeight:de.offsetHeight+'px'},addShortcut:function(m,k,d,cmd,ui,va){var n=typeof(k)=="number",ie=tinyMCE.isIE,c,sc,i,scl=this.shortcuts;if(!tinyMCE.getParam('custom_shortcuts'))return false;m=m.toLowerCase();k=ie&&!n?k.toUpperCase():k;c=n?null:k.charCodeAt(0);d=d&&d.indexOf('lang_')==0?tinyMCE.getLang(d):d;sc={alt:m.indexOf('alt')!=-1,ctrl:m.indexOf('ctrl')!=-1,shift:m.indexOf('shift')!=-1,charCode:c,keyCode:n?k:(ie?c:null),desc:d,cmd:cmd,ui:ui,val:va};for(i=0;i<scl.length;i++){if(sc.alt==scl[i].alt&&sc.ctrl==scl[i].ctrl&&sc.shift==scl[i].shift&&sc.charCode==scl[i].charCode&&sc.keyCode==scl[i].keyCode){return false}}scl[scl.length]=sc;return true},handleShortcut:function(e){var i,s,o;if(!e.altKey&&!e.ctrlKey)return false;s=this.shortcuts;for(i=0;i<s.length;i++){o=s[i];if(o.alt==e.altKey&&o.ctrl==e.ctrlKey&&(o.keyCode==e.keyCode||o.charCode==e.charCode)){if(o.cmd&&(e.type=="keydown"||(e.type=="keypress"&&!tinyMCE.isOpera)))tinyMCE.execCommand(o.cmd,o.ui,o.val);tinyMCE.cancelEvent(e);return true}}return false},autoResetDesignMode:function(){if(!tinyMCE.isIE&&this.isHidden()&&tinyMCE.getParam('auto_reset_designmode'))eval('try { this.getDoc().designMode = "On"; this.useCSS = false; } catch(e) {}')},isHidden:function(){var s;if(tinyMCE.isIE)return false;s=this.getSel();return(!s||!s.rangeCount||s.rangeCount==0)},isDirty:function(){return tinyMCE.trim(this.startContent)!=tinyMCE.trim(this.getBody().innerHTML)&&!this.isNotDirty},_mergeElements:function(scmd,pa,ch,override){var st,stc,className,n;if(scmd=="removeformat"){pa.className="";pa.style.cssText="";ch.className="";ch.style.cssText="";return}st=tinyMCE.parseStyle(tinyMCE.getAttrib(pa,"style"));stc=tinyMCE.parseStyle(tinyMCE.getAttrib(ch,"style"));className=tinyMCE.getAttrib(pa,"class");className=tinyMCE.getAttrib(ch,"class");if(override){for(n in st){if(typeof(st[n])=='function')continue;stc[n]=st[n]}}else{for(n in stc){if(typeof(stc[n])=='function')continue;st[n]=stc[n]}}tinyMCE.setAttrib(pa,"style",tinyMCE.serializeStyle(st));tinyMCE.setAttrib(pa,"class",tinyMCE.trim(className));ch.className="";ch.style.cssText="";ch.removeAttribute("class");ch.removeAttribute("style")},_fixRootBlocks:function(){var rb,b,ne,be,nx,bm;rb=tinyMCE.getParam('forced_root_block');if(!rb)return;b=this.getBody();ne=b.firstChild;while(ne){nx=ne.nextSibling;if((ne.nodeType==3&&ne.nodeValue.replace(/\s+/g,'')!='')||(ne.nodeType==1&&!tinyMCE.blockRegExp.test(ne.nodeName))){if(!bm)bm=this.selection.getBookmark();if(!be){be=this.getDoc().createElement(rb);be.appendChild(ne.cloneNode(true));b.replaceChild(be,ne)}else{be.appendChild(ne.cloneNode(true));b.removeChild(ne)}}else be=null;ne=nx}if(bm)this.selection.moveToBookmark(bm)},_fixTrailingNbsp:function(){var s=this.selection,e=s.getFocusElement(),bm,v;if(e&&tinyMCE.blockRegExp.test(e.nodeName)&&e.firstChild){v=e.firstChild.nodeValue;if(v&&v.length>1&&/(^\u00a0|\u00a0$)/.test(v)){e.firstChild.nodeValue=v.replace(/(^\u00a0|\u00a0$)/,'');s.selectNode(e.firstChild,true,false,false);}}},_setUseCSS:function(b){var d=this.getDoc();try{d.execCommand("useCSS",false,!b)}catch(ex){}try{d.execCommand("styleWithCSS",false,b)}catch(ex){}if(!tinyMCE.getParam("table_inline_editing"))try{d.execCommand('enableInlineTableEditing',false,"false")}catch(ex){}if(!tinyMCE.getParam("object_resizing"))try{d.execCommand('enableObjectResizing',false,"false")}catch(ex){}},execCommand:function(command,user_interface,value){var i,x,z,align,img,div,doc=this.getDoc(),win=this.getWin(),focusElm=this.getFocusElement();if(!new RegExp('mceStartTyping|mceEndTyping|mceBeginUndoLevel|mceEndUndoLevel|mceAddUndoLevel','gi').test(command))this.undoBookmark=null;if(!tinyMCE.isIE&&!this.useCSS){this._setUseCSS(false);this.useCSS=true}this.contentDocument=doc;if(!/mceStartTyping|mceEndTyping/.test(command)){if(tinyMCE.execCommandCallback(this,'execcommand_callback','execCommand',this.editorId,this.getBody(),command,user_interface,value))return}if(focusElm&&focusElm.nodeName=="IMG"){align=focusElm.getAttribute('align');img=command=="JustifyCenter"?focusElm.cloneNode(false):focusElm;switch(command){case"JustifyLeft":if(align=='left'){img.setAttribute('align','');img.removeAttribute('align')}else img.setAttribute('align','left');div=focusElm.parentNode;if(div&&div.nodeName=="DIV"&&div.childNodes.length==1&&div.parentNode)div.parentNode.replaceChild(img,div);this.selection.selectNode(img);this.repaint();tinyMCE.triggerNodeChange();return;case"JustifyCenter":img.setAttribute('align','');img.removeAttribute('align');div=tinyMCE.getParentElement(focusElm,"div");if(div&&div.style.textAlign=="center"){if(div.nodeName=="DIV"&&div.childNodes.length==1&&div.parentNode)div.parentNode.replaceChild(img,div)}else{div=this.getDoc().createElement("div");div.style.textAlign='center';div.appendChild(img);focusElm.parentNode.replaceChild(div,focusElm)}this.selection.selectNode(img);this.repaint();tinyMCE.triggerNodeChange();return;case"JustifyRight":if(align=='right'){img.setAttribute('align','');img.removeAttribute('align')}else img.setAttribute('align','right');div=focusElm.parentNode;if(div&&div.nodeName=="DIV"&&div.childNodes.length==1&&div.parentNode)div.parentNode.replaceChild(img,div);this.selection.selectNode(img);this.repaint();tinyMCE.triggerNodeChange();return}}if(tinyMCE.settings.force_br_newlines){var alignValue="";if(doc.selection.type!="Control"){switch(command){case"JustifyLeft":alignValue="left";break;case"JustifyCenter":alignValue="center";break;case"JustifyFull":alignValue="justify";break;case"JustifyRight":alignValue="right";break}if(alignValue!==''){var rng=doc.selection.createRange();if((divElm=tinyMCE.getParentElement(rng.parentElement(),"div"))!=null)divElm.setAttribute("align",alignValue);else if(rng.pasteHTML&&rng.htmlText.length>0)rng.pasteHTML('<div align="'+alignValue+'">'+rng.htmlText+"</div>");tinyMCE.triggerNodeChange();return}}}switch(command){case"mceRepaint":this.repaint();return true;case"JustifyLeft":case"JustifyCenter":case"JustifyFull":case"JustifyRight":var el=tinyMCE.getParentNode(focusElm,function(n){return tinyMCE.getAttrib(n,'align')});if(el){el.setAttribute('align','');el.removeAttribute('align')}else this.getDoc().execCommand(command,user_interface,value);tinyMCE.triggerNodeChange();return true;case"unlink":if(tinyMCE.isGecko&&this.getSel().isCollapsed){focusElm=tinyMCE.getParentElement(focusElm,'A');if(focusElm)this.selection.selectNode(focusElm,false)}this.getDoc().execCommand(command,user_interface,value);tinyMCE.isGecko&&this.getSel().collapseToEnd();tinyMCE.triggerNodeChange();return true;case"InsertUnorderedList":case"InsertOrderedList":this.getDoc().execCommand(command,user_interface,value);tinyMCE.triggerNodeChange();break;case"Strikethrough":this.getDoc().execCommand(command,user_interface,value);tinyMCE.triggerNodeChange();break;case"mceSelectNode":this.selection.selectNode(value);tinyMCE.triggerNodeChange();tinyMCE.selectedNode=value;break;case"FormatBlock":if(value==null||value==''){var elm=tinyMCE.getParentElement(this.getFocusElement(),"p,div,h1,h2,h3,h4,h5,h6,pre,address,blockquote,dt,dl,dd,samp");if(elm)this.execCommand("mceRemoveNode",false,elm)}else{if(!this.cleanup.isValid(value))return true;if(tinyMCE.isGecko&&new RegExp('<(div|blockquote|code|dt|dd|dl|samp)>','gi').test(value))value=value.replace(/[^a-z]/gi,'');if(tinyMCE.isIE&&new RegExp('blockquote|code|samp','gi').test(value)){var b=this.selection.getBookmark();this.getDoc().execCommand("FormatBlock",false,'<p>');tinyMCE.renameElement(tinyMCE.getParentBlockElement(this.getFocusElement()),value);this.selection.moveToBookmark(b)}else this.getDoc().execCommand("FormatBlock",false,value)}tinyMCE.triggerNodeChange();break;case"mceRemoveNode":if(!value)value=tinyMCE.getParentElement(this.getFocusElement());if(tinyMCE.isIE){value.outerHTML=value.innerHTML}else{var rng=value.ownerDocument.createRange();rng.setStartBefore(value);rng.setEndAfter(value);rng.deleteContents();rng.insertNode(rng.createContextualFragment(value.innerHTML))}tinyMCE.triggerNodeChange();break;case"mceSelectNodeDepth":var parentNode=this.getFocusElement();for(i=0;parentNode;i++){if(parentNode.nodeName.toLowerCase()=="body")break;if(parentNode.nodeName.toLowerCase()=="#text"){i--;parentNode=parentNode.parentNode;continue}if(i==value){this.selection.selectNode(parentNode,false);tinyMCE.triggerNodeChange();tinyMCE.selectedNode=parentNode;return}parentNode=parentNode.parentNode}break;case"mceSetStyleInfo":case"SetStyleInfo":var rng=this.getRng();var sel=this.getSel();var scmd=value.command;var sname=value.name;var svalue=value.value==null?'':value.value;var wrapper=value.wrapper?value.wrapper:"span";var parentElm=null;var invalidRe=new RegExp("^BODY|HTML$","g");var invalidParentsRe=tinyMCE.settings.merge_styles_invalid_parents!==''?new RegExp(tinyMCE.settings.merge_styles_invalid_parents,"gi"):null;if(tinyMCE.isIE){if(rng.item)parentElm=rng.item(0);else{var pelm=rng.parentElement();var prng=doc.selection.createRange();prng.moveToElementText(pelm);if(rng.htmlText==prng.htmlText||rng.boundingWidth==0){if(invalidParentsRe==null||!invalidParentsRe.test(pelm.nodeName))parentElm=pelm}}}else{var felm=this.getFocusElement();if(sel.isCollapsed||(new RegExp('td|tr|tbody|table|img','gi').test(felm.nodeName)&&sel.anchorNode==felm.parentNode))parentElm=felm}if(parentElm&&!invalidRe.test(parentElm.nodeName)){if(scmd=="setstyle")tinyMCE.setStyleAttrib(parentElm,sname,svalue);if(scmd=="setattrib")tinyMCE.setAttrib(parentElm,sname,svalue);if(scmd=="removeformat"){parentElm.style.cssText='';tinyMCE.setAttrib(parentElm,'class','')}var ch=tinyMCE.getNodeTree(parentElm,[],1);for(z=0;z<ch.length;z++){if(ch[z]==parentElm)continue;if(scmd=="setstyle")tinyMCE.setStyleAttrib(ch[z],sname,'');if(scmd=="setattrib")tinyMCE.setAttrib(ch[z],sname,'');if(scmd=="removeformat"){ch[z].style.cssText='';tinyMCE.setAttrib(ch[z],'class','')}}}else{this._setUseCSS(false);doc.execCommand("FontName",false,"#mce_temp_font#");var elementArray=tinyMCE.getElementsByAttributeValue(this.getBody(),"font","face","#mce_temp_font#");for(x=0;x<elementArray.length;x++){elm=elementArray[x];if(elm){var spanElm=doc.createElement(wrapper);if(scmd=="setstyle")tinyMCE.setStyleAttrib(spanElm,sname,svalue);if(scmd=="setattrib")tinyMCE.setAttrib(spanElm,sname,svalue);if(scmd=="removeformat"){spanElm.style.cssText='';tinyMCE.setAttrib(spanElm,'class','')}if(elm.hasChildNodes()){for(i=0;i<elm.childNodes.length;i++)spanElm.appendChild(elm.childNodes[i].cloneNode(true))}spanElm.setAttribute("mce_new","true");elm.parentNode.replaceChild(spanElm,elm);var ch=tinyMCE.getNodeTree(spanElm,[],1);for(z=0;z<ch.length;z++){if(ch[z]==spanElm)continue;if(scmd=="setstyle")tinyMCE.setStyleAttrib(ch[z],sname,'');if(scmd=="setattrib")tinyMCE.setAttrib(ch[z],sname,'');if(scmd=="removeformat"){ch[z].style.cssText='';tinyMCE.setAttrib(ch[z],'class','')}}}}}var nodes=doc.getElementsByTagName(wrapper);for(i=nodes.length-1;i>=0;i--){var elm=nodes[i];var isNew=tinyMCE.getAttrib(elm,"mce_new")=="true";elm.removeAttribute("mce_new");if(elm.childNodes&&elm.childNodes.length==1&&elm.childNodes[0].nodeType==1){this._mergeElements(scmd,elm,elm.childNodes[0],isNew);continue}if(elm.parentNode.childNodes.length==1&&!invalidRe.test(elm.nodeName)&&!invalidRe.test(elm.parentNode.nodeName)){if(invalidParentsRe==null||!invalidParentsRe.test(elm.parentNode.nodeName))this._mergeElements(scmd,elm.parentNode,elm,false)}}var nodes=doc.getElementsByTagName(wrapper);for(i=nodes.length-1;i>=0;i--){var elm=nodes[i],isEmpty=true;var tmp=doc.createElement("body");tmp.appendChild(elm.cloneNode(false));tmp.innerHTML=tmp.innerHTML.replace(new RegExp('style=""|class=""','gi'),'');if(new RegExp('<span>','gi').test(tmp.innerHTML)){for(x=0;x<elm.childNodes.length;x++){if(elm.parentNode!=null)elm.parentNode.insertBefore(elm.childNodes[x].cloneNode(true),elm)}elm.parentNode.removeChild(elm)}}if(scmd=="removeformat")tinyMCE.handleVisualAid(this.getBody(),true,this.visualAid,this);tinyMCE.triggerNodeChange();break;case"FontName":if(value==null){var s=this.getSel();if(tinyMCE.isGecko&&s.isCollapsed){var f=tinyMCE.getParentElement(this.getFocusElement(),"font");if(f!=null)this.selection.selectNode(f,false)}this.getDoc().execCommand("RemoveFormat",false,null);if(f!=null&&tinyMCE.isGecko){var r=this.getRng().cloneRange();r.collapse(true);s.removeAllRanges();s.addRange(r)}}else this.getDoc().execCommand('FontName',false,value);if(tinyMCE.isGecko)window.setTimeout('tinyMCE.triggerNodeChange(false);',1);return;case"FontSize":this.getDoc().execCommand('FontSize',false,value);if(tinyMCE.isGecko)window.setTimeout('tinyMCE.triggerNodeChange(false);',1);return;case"forecolor":value=value==null?this.foreColor:value;value=tinyMCE.trim(value);value=value.charAt(0)!='#'?(isNaN('0x'+value)?value:'#'+value):value;this.foreColor=value;this.getDoc().execCommand('forecolor',false,value);break;case"HiliteColor":value=value==null?this.backColor:value;value=tinyMCE.trim(value);value=value.charAt(0)!='#'?(isNaN('0x'+value)?value:'#'+value):value;this.backColor=value;if(tinyMCE.isGecko||tinyMCE.isOpera){this._setUseCSS(true);this.getDoc().execCommand('hilitecolor',false,value);this._setUseCSS(false)}else this.getDoc().execCommand('BackColor',false,value);break;case"Cut":case"Copy":case"Paste":var cmdFailed=false;eval('try {this.getDoc().execCommand(command, user_interface, value);} catch (e) {cmdFailed = true;}');if(tinyMCE.isOpera&&cmdFailed)alert('Currently not supported by your browser, use keyboard shortcuts instead.');if(tinyMCE.isGecko&&cmdFailed){if(confirm(tinyMCE.entityDecode(tinyMCE.getLang('lang_clipboard_msg'))))window.open('http://www.mozilla.org/editor/midasdemo/securityprefs.html','mceExternal');return}else tinyMCE.triggerNodeChange();break;case"mceSetContent":if(!value)value="";value=tinyMCE.storeAwayURLs(value);value=tinyMCE._customCleanup(this,"insert_to_editor",value);if(this.getBody().nodeName=='BODY')tinyMCE._setHTML(doc,value);else this.getBody().innerHTML=value;tinyMCE.setInnerHTML(this.getBody(),tinyMCE._cleanupHTML(this,doc,this.settings,this.getBody(),false,false,false,true));tinyMCE.convertAllRelativeURLs(this.getBody());tinyMCE._removeInternal(this.getBody());if(tinyMCE.getParam("convert_fonts_to_spans"))tinyMCE.convertSpansToFonts(doc);tinyMCE.handleVisualAid(this.getBody(),true,this.visualAid,this);tinyMCE._setEventsEnabled(this.getBody(),false);this._addBogusBR();return true;case"mceCleanup":var b=this.selection.getBookmark();tinyMCE._setHTML(this.contentDocument,this.getBody().innerHTML);tinyMCE.setInnerHTML(this.getBody(),tinyMCE._cleanupHTML(this,this.contentDocument,this.settings,this.getBody(),this.visualAid));tinyMCE.convertAllRelativeURLs(doc.body);if(tinyMCE.getParam("convert_fonts_to_spans"))tinyMCE.convertSpansToFonts(doc);tinyMCE.handleVisualAid(this.getBody(),true,this.visualAid,this);tinyMCE._setEventsEnabled(this.getBody(),false);this._addBogusBR();this.repaint();this.selection.moveToBookmark(b);tinyMCE.triggerNodeChange();break;case"mceReplaceContent":if(!value)value='';this.getWin().focus();var selectedText="";if(tinyMCE.isIE){var rng=doc.selection.createRange();selectedText=rng.text}else selectedText=this.getSel().toString();if(selectedText.length>0){value=tinyMCE.replaceVar(value,"selection",selectedText);tinyMCE.execCommand('mceInsertContent',false,value)}this._addBogusBR();tinyMCE.triggerNodeChange();break;case"mceSetAttribute":if(typeof(value)=='object'){var targetElms=(typeof(value.targets)=="undefined")?"p,img,span,div,td,h1,h2,h3,h4,h5,h6,pre,address":value.targets;var targetNode=tinyMCE.getParentElement(this.getFocusElement(),targetElms);if(targetNode){targetNode.setAttribute(value.name,value.value);tinyMCE.triggerNodeChange()}}break;case"mceSetCSSClass":this.execCommand("mceSetStyleInfo",false,{command:"setattrib",name:"class",value:value});break;case"mceInsertRawHTML":var key='tiny_mce_marker';this.execCommand('mceBeginUndoLevel');this.execCommand('mceInsertContent',false,key);var scrollX=this.getBody().scrollLeft+this.getDoc().documentElement.scrollLeft;var scrollY=this.getBody().scrollTop+this.getDoc().documentElement.scrollTop;var html=this.getBody().innerHTML;if((pos=html.indexOf(key))!=-1)tinyMCE.setInnerHTML(this.getBody(),html.substring(0,pos)+value+html.substring(pos+key.length));this.contentWindow.scrollTo(scrollX,scrollY);this.execCommand('mceEndUndoLevel');break;case"mceInsertContent":if(!value)value='';var insertHTMLFailed=false;if(tinyMCE.isGecko||tinyMCE.isOpera){try{if(value.indexOf('<')==-1&&!value.match(/(&| |<|>)/g)){var r=this.getRng();var n=this.getDoc().createTextNode(tinyMCE.entityDecode(value));var s=this.getSel();var r2=r.cloneRange();s.removeAllRanges();r.deleteContents();r.insertNode(n);r2.selectNode(n);r2.collapse(false);s.removeAllRanges();s.addRange(r2)}else{value=tinyMCE.fixGeckoBaseHREFBug(1,this.getDoc(),value);this.getDoc().execCommand('inserthtml',false,value);tinyMCE.fixGeckoBaseHREFBug(2,this.getDoc(),value)}}catch(ex){insertHTMLFailed=true}if(!insertHTMLFailed){tinyMCE.triggerNodeChange();return}}if(!tinyMCE.isIE){var isHTML=value.indexOf('<')!=-1;var sel=this.getSel();var rng=this.getRng();if(isHTML){if(tinyMCE.isSafari){var tmpRng=this.getDoc().createRange();tmpRng.setStart(this.getBody(),0);tmpRng.setEnd(this.getBody(),0);value=tmpRng.createContextualFragment(value)}else value=rng.createContextualFragment(value)}else{value=doc.createTextNode(tinyMCE.entityDecode(value))}if(tinyMCE.isSafari&&!isHTML){this.execCommand('InsertText',false,value.nodeValue);tinyMCE.triggerNodeChange();return true}else if(tinyMCE.isSafari&&isHTML){rng.deleteContents();rng.insertNode(value);tinyMCE.triggerNodeChange();return true}rng.deleteContents();if(rng.startContainer.nodeType==3){var node=rng.startContainer.splitText(rng.startOffset);node.parentNode.insertBefore(value,node)}else rng.insertNode(value);if(!isHTML){sel.selectAllChildren(doc.body);sel.removeAllRanges();var rng=doc.createRange();rng.selectNode(value);rng.collapse(false);sel.addRange(rng)}else rng.collapse(false);tinyMCE.fixGeckoBaseHREFBug(2,this.getDoc(),value)}else{var rng=doc.selection.createRange(),tmpRng=null;var c=value.indexOf('<!--')!=-1;if(c)value=tinyMCE.uniqueTag+value;if(rng.item)rng.item(0).outerHTML=value;else rng.pasteHTML(value);if(c){var e=this.getDoc().getElementById('mceTMPElement');e.parentNode.removeChild(e)}}tinyMCE.execCommand("mceAddUndoLevel");tinyMCE.triggerNodeChange();break;case"mceStartTyping":if(tinyMCE.settings.custom_undo_redo&&this.undoRedo.typingUndoIndex==-1){this.undoRedo.typingUndoIndex=this.undoRedo.undoIndex;tinyMCE.typingUndoIndex=tinyMCE.undoIndex;this.execCommand('mceAddUndoLevel')}break;case"mceEndTyping":if(tinyMCE.settings.custom_undo_redo&&this.undoRedo.typingUndoIndex!=-1){this.execCommand('mceAddUndoLevel');this.undoRedo.typingUndoIndex=-1}tinyMCE.typingUndoIndex=-1;break;case"mceBeginUndoLevel":this.undoRedoLevel=false;break;case"mceEndUndoLevel":this.undoRedoLevel=true;this.execCommand('mceAddUndoLevel');break;case"mceAddUndoLevel":if(tinyMCE.settings.custom_undo_redo&&this.undoRedoLevel){if(this.undoRedo.add())tinyMCE.triggerNodeChange(false)}break;case"Undo":if(tinyMCE.settings.custom_undo_redo){tinyMCE.execCommand("mceEndTyping");this.undoRedo.undo();tinyMCE.triggerNodeChange()}else this.getDoc().execCommand(command,user_interface,value);break;case"Redo":if(tinyMCE.settings.custom_undo_redo){tinyMCE.execCommand("mceEndTyping");this.undoRedo.redo();tinyMCE.triggerNodeChange()}else this.getDoc().execCommand(command,user_interface,value);break;case"mceToggleVisualAid":this.visualAid=!this.visualAid;tinyMCE.handleVisualAid(this.getBody(),true,this.visualAid,this);tinyMCE.triggerNodeChange();break;case"Indent":this.getDoc().execCommand(command,user_interface,value);tinyMCE.triggerNodeChange();if(tinyMCE.isIE){var n=tinyMCE.getParentElement(this.getFocusElement(),"blockquote");do{if(n&&n.nodeName=="BLOCKQUOTE"){n.removeAttribute("dir");n.removeAttribute("style")}}while(n!=null&&(n=n.parentNode)!=null)}break;case"RemoveFormat":case"removeformat":var text=this.selection.getSelectedText();if(tinyMCE.isOpera){this.getDoc().execCommand("RemoveFormat",false,null);return}if(tinyMCE.isIE){try{var rng=doc.selection.createRange();rng.execCommand("RemoveFormat",false,null)}catch(e){}this.execCommand("mceSetStyleInfo",false,{command:"removeformat"})}else{this.getDoc().execCommand(command,user_interface,value);this.execCommand("mceSetStyleInfo",false,{command:"removeformat"})}if(text.length==0)this.execCommand("mceSetCSSClass",false,"");tinyMCE.triggerNodeChange();break;default:this.getDoc().execCommand(command,user_interface,value);if(tinyMCE.isGecko)window.setTimeout('tinyMCE.triggerNodeChange(false);',1);else tinyMCE.triggerNodeChange()}if(command!="mceAddUndoLevel"&&command!="Undo"&&command!="Redo"&&command!="mceStartTyping"&&command!="mceEndTyping")tinyMCE.execCommand("mceAddUndoLevel")},queryCommandValue:function(c){try{return this.getDoc().queryCommandValue(c)}catch(e){return null}},queryCommandState:function(c){return this.getDoc().queryCommandState(c)},_addBogusBR:function(){var b=this.getBody();if(tinyMCE.isGecko&&!b.hasChildNodes())b.innerHTML='<br _moz_editor_bogus_node="TRUE" />'},_onAdd:function(replace_element,form_element_name,target_document){var hc,th,tos,editorTemplate,targetDoc,deltaWidth,deltaHeight,html,rng,fragment;var dynamicIFrame,tElm,doc,parentElm;th=this.settings.theme;tos=tinyMCE.themes[th];targetDoc=target_document?target_document:document;this.targetDoc=targetDoc;tinyMCE.themeURL=tinyMCE.baseURL+"/themes/"+this.settings.theme;this.settings.themeurl=tinyMCE.themeURL;if(!replace_element){alert("Error: Could not find the target element.");return false}if(tos.getEditorTemplate)editorTemplate=tos.getEditorTemplate(this.settings,this.editorId);deltaWidth=editorTemplate.delta_width?editorTemplate.delta_width:0;deltaHeight=editorTemplate.delta_height?editorTemplate.delta_height:0;html='<span id="'+this.editorId+'_parent" class="mceEditorContainer">'+editorTemplate.html;html=tinyMCE.replaceVar(html,"editor_id",this.editorId);if(!this.settings.default_document)this.settings.default_document=tinyMCE.baseURL+"/blank.htm";this.settings.old_width=this.settings.width;this.settings.old_height=this.settings.height;if(this.settings.width==-1)this.settings.width=replace_element.offsetWidth;if(this.settings.height==-1)this.settings.height=replace_element.offsetHeight;if(this.settings.width==0)this.settings.width=replace_element.style.width;if(this.settings.height==0)this.settings.height=replace_element.style.height;if(this.settings.width==0)this.settings.width=320;if(this.settings.height==0)this.settings.height=240;this.settings.area_width=parseInt(this.settings.width);this.settings.area_height=parseInt(this.settings.height);this.settings.area_width+=deltaWidth;this.settings.area_height+=deltaHeight;this.settings.width_style=""+this.settings.width;this.settings.height_style=""+this.settings.height;if((""+this.settings.width).indexOf('%')!=-1)this.settings.area_width="100%";else this.settings.width_style+='px';if((""+this.settings.height).indexOf('%')!=-1)this.settings.area_height="100%";else this.settings.height_style+='px';if((""+replace_element.style.width).indexOf('%')!=-1){this.settings.width=replace_element.style.width;this.settings.area_width="100%";this.settings.width_style="100%"}if((""+replace_element.style.height).indexOf('%')!=-1){this.settings.height=replace_element.style.height;this.settings.area_height="100%";this.settings.height_style="100%"}html=tinyMCE.applyTemplate(html);this.settings.width=this.settings.old_width;this.settings.height=this.settings.old_height;this.visualAid=this.settings.visual;this.formTargetElementId=form_element_name;if(replace_element.nodeName=="TEXTAREA"||replace_element.nodeName=="INPUT")this.startContent=replace_element.value;else this.startContent=replace_element.innerHTML;if(replace_element.nodeName!="TEXTAREA"&&replace_element.nodeName!="INPUT"){this.oldTargetElement=replace_element;hc='<input type="hidden" id="'+form_element_name+'" name="'+form_element_name+'" />';this.oldTargetDisplay=tinyMCE.getStyle(this.oldTargetElement,'display','inline');this.oldTargetElement.style.display="none";html+='</span>';if(tinyMCE.isGecko)html=hc+html;else html+=hc;if(tinyMCE.isGecko){rng=replace_element.ownerDocument.createRange();rng.setStartBefore(replace_element);fragment=rng.createContextualFragment(html);tinyMCE.insertAfter(fragment,replace_element)}else replace_element.insertAdjacentHTML("beforeBegin",html)}else{html+='</span>';this.oldTargetElement=replace_element;this.oldTargetDisplay=tinyMCE.getStyle(this.oldTargetElement,'display','inline');this.oldTargetElement.style.display="none";if(tinyMCE.isGecko){rng=replace_element.ownerDocument.createRange();rng.setStartBefore(replace_element);fragment=rng.createContextualFragment(html);tinyMCE.insertAfter(fragment,replace_element)}else replace_element.insertAdjacentHTML("beforeBegin",html)}dynamicIFrame=false;tElm=targetDoc.getElementById(this.editorId);if(!tinyMCE.isIE){if(tElm&&(tElm.nodeName=="SPAN"||tElm.nodeName=="span")){tElm=tinyMCE._createIFrame(tElm,targetDoc);dynamicIFrame=true}this.targetElement=tElm;this.iframeElement=tElm;this.contentDocument=tElm.contentDocument;this.contentWindow=tElm.contentWindow;}else{if(tElm&&tElm.nodeName=="SPAN")tElm=tinyMCE._createIFrame(tElm,targetDoc,targetDoc.parentWindow);else tElm=targetDoc.frames[this.editorId];this.targetElement=tElm;this.iframeElement=targetDoc.getElementById(this.editorId);if(tinyMCE.isOpera){this.contentDocument=this.iframeElement.contentDocument;this.contentWindow=this.iframeElement.contentWindow;dynamicIFrame=true}else{this.contentDocument=tElm.window.document;this.contentWindow=tElm.window}this.getDoc().designMode="on"}doc=this.contentDocument;if(dynamicIFrame){html=tinyMCE.getParam('doctype')+'<html><head xmlns="http://www.w3.org/1999/xhtml"><base href="'+tinyMCE.settings.base_href+'" /><title>blank_page</title><meta http-equiv="Content-Type" content="text/html; charset=UTF-8"></head><body class="mceContentBody"></body></html>';try{if(!this.isHidden())this.getDoc().designMode="on";doc.open();doc.write(html);doc.close()}catch(e){this.getDoc().location.href=tinyMCE.baseURL+"/blank.htm"}}if(tinyMCE.isIE)window.setTimeout("tinyMCE.addEventHandlers(tinyMCE.instances[\""+this.editorId+"\"]);",1);parentElm=this.targetDoc.getElementById(this.editorId+'_parent');this.formElement=tinyMCE.isGecko?parentElm.previousSibling:parentElm.nextSibling;tinyMCE.setupContent(this.editorId,true);return true},setBaseHREF:function(u){var h,b,d,nl;d=this.getDoc();nl=d.getElementsByTagName("base");b=nl.length>0?nl[0]:null;if(!b){nl=d.getElementsByTagName("head");h=nl.length>0?nl[0]:null;b=d.createElement("base");b.setAttribute('href',u);h.appendChild(b)}else{if(u==''||u==null)b.parentNode.removeChild(b);else b.setAttribute('href',u)}},getHTML:function(r){var h,d=this.getDoc(),b=this.getBody();if(r)return b.innerHTML;h=tinyMCE._cleanupHTML(this,d,this.settings,b,false,true,false,true);if(tinyMCE.getParam("convert_fonts_to_spans"))tinyMCE.convertSpansToFonts(d);return h},setHTML:function(h){this.execCommand('mceSetContent',false,h);this.repaint()},getFocusElement:function(){return this.selection.getFocusElement()},getSel:function(){return this.selection.getSel()},getRng:function(){return this.selection.getRng()},triggerSave:function(skip_cleanup,skip_callback){var e,nl=[],i,s,content,htm;if(!this.enabled)return;this.switchSettings();s=tinyMCE.settings;if(tinyMCE.isRealIE){e=this.iframeElement;do{if(e.style&&e.style.display=='none'){e.style.display='block';nl[nl.length]={elm:e,type:'style'}}if(e.style&&s.hidden_tab_class.length>0&&e.className.indexOf(s.hidden_tab_class)!=-1){e.className=s.display_tab_class;nl[nl.length]={elm:e,type:'class'}}}while((e=e.parentNode)!=null)}tinyMCE.settings.preformatted=false;if(typeof(skip_cleanup)=="undefined")skip_cleanup=false;if(typeof(skip_callback)=="undefined")skip_callback=false;tinyMCE._setHTML(this.getDoc(),this.getBody().innerHTML);if(this.settings.cleanup==false){tinyMCE.handleVisualAid(this.getBody(),true,false,this);tinyMCE._setEventsEnabled(this.getBody(),true)}tinyMCE._customCleanup(this,"submit_content_dom",this.contentWindow.document.body);htm=skip_cleanup?this.getBody().innerHTML:tinyMCE._cleanupHTML(this,this.getDoc(),this.settings,this.getBody(),tinyMCE.visualAid,true,true);htm=tinyMCE._customCleanup(this,"submit_content",htm);if(!skip_callback&&tinyMCE.settings.save_callback!=='')content=tinyMCE.resolveDots(tinyMCE.settings.save_callback,window)(this.formTargetElementId,htm,this.getBody());if((typeof(content)!="undefined")&&content!=null)htm=content;htm=tinyMCE.regexpReplace(htm,"(","(","gi");htm=tinyMCE.regexpReplace(htm,")",")","gi");htm=tinyMCE.regexpReplace(htm,";",";","gi");htm=tinyMCE.regexpReplace(htm,""",""","gi");htm=tinyMCE.regexpReplace(htm,"^","^","gi");if(this.formElement)this.formElement.value=htm;if(tinyMCE.isSafari&&this.formElement)this.formElement.innerText=htm;for(i=0;i<nl.length;i++){if(nl[i].type=='style')nl[i].elm.style.display='none';else nl[i].elm.className=s.hidden_tab_class}}};tinyMCE.add(TinyMCE_Engine,{cleanupHTMLCode:function(s){s=s.replace(new RegExp('<p \\/>','gi'),'<p> </p>');s=s.replace(new RegExp('<p>\\s*<\\/p>','gi'),'<p> </p>');s=s.replace(new RegExp('<br>\\s*<\\/br>','gi'),'<br />');s=s.replace(new RegExp('<(h[1-6]|p|div|address|pre|form|table|li|ol|ul|td|b|font|em|strong|i|strike|u|span|a|ul|ol|li|blockquote)([a-z]*)([^\\\\|>]*)\\/>','gi'),'<$1$2$3></$1$2>');s=s.replace(new RegExp('\\s+></','gi'),'></');s=s.replace(new RegExp('<(img|br|hr)([^>]*)><\\/(img|br|hr)>','gi'),'<$1$2 />');if(tinyMCE.isIE)s=s.replace(new RegExp('<p><hr \\/><\\/p>','gi'),"<hr>");if(tinyMCE.isIE)s=s.replace(/<!(\s*)\/>/g,'');return s},parseStyle:function(str){var ar=[],st,i,re,pa;if(str==null)return ar;st=str.split(';');tinyMCE.clearArray(ar);for(i=0;i<st.length;i++){if(st[i]=='')continue;re=new RegExp('^\\s*([^:]*):\\s*(.*)\\s*$');pa=st[i].replace(re,'$1||$2').split('||');if(pa.length==2)ar[pa[0].toLowerCase()]=pa[1]}return ar},compressStyle:function(ar,pr,sf,res){var box=[],i,a;box[0]=ar[pr+'-top'+sf];box[1]=ar[pr+'-left'+sf];box[2]=ar[pr+'-right'+sf];box[3]=ar[pr+'-bottom'+sf];for(i=0;i<box.length;i++){if(box[i]==null)return;if(i&&box[i]!=box[i-1])return}ar[res]=box[0];ar[pr+'-top'+sf]=null;ar[pr+'-left'+sf]=null;ar[pr+'-right'+sf]=null;ar[pr+'-bottom'+sf]=null},serializeStyle:function(ar){var str="",key,val,m;tinyMCE.compressStyle(ar,"border","","border");tinyMCE.compressStyle(ar,"border","-width","border-width");tinyMCE.compressStyle(ar,"border","-color","border-color");tinyMCE.compressStyle(ar,"border","-style","border-style");tinyMCE.compressStyle(ar,"padding","","padding");tinyMCE.compressStyle(ar,"margin","","margin");for(key in ar){val=ar[key];if(typeof(val)=='function')continue;if(key.indexOf('mso-')==0)continue;if(val!=null&&val!==''){val=''+val;val=val.replace(new RegExp("url\\(\\'?([^\\']*)\\'?\\)",'gi'),"url('$1')");if(val.indexOf('url(')!=-1&&tinyMCE.getParam('convert_urls')){m=new RegExp("url\\('(.*?)'\\)").exec(val);if(m.length>1)val="url('"+eval(tinyMCE.getParam('urlconverter_callback')+"(m[1], null, true);")+"')"}if(tinyMCE.getParam("force_hex_style_colors"))val=tinyMCE.convertRGBToHex(val,true);val=val.replace(/\"/g,'\'');if(val!="url('')")str+=key.toLowerCase()+": "+val+"; "}}if(new RegExp('; $').test(str))str=str.substring(0,str.length-2);return str},convertRGBToHex:function(s,k){var re,rgb;if(s.toLowerCase().indexOf('rgb')!=-1){re=new RegExp("(.*?)rgb\\s*?\\(\\s*?([0-9]+).*?,\\s*?([0-9]+).*?,\\s*?([0-9]+).*?\\)(.*?)","gi");rgb=s.replace(re,"$1,$2,$3,$4,$5").split(',');if(rgb.length==5){r=parseInt(rgb[1]).toString(16);g=parseInt(rgb[2]).toString(16);b=parseInt(rgb[3]).toString(16);r=r.length==1?'0'+r:r;g=g.length==1?'0'+g:g;b=b.length==1?'0'+b:b;s="#"+r+g+b;if(k)s=rgb[0]+s+rgb[4]}}return s},convertHexToRGB:function(s){if(s.indexOf('#')!=-1){s=s.replace(new RegExp('[^0-9A-F]','gi'),'');return"rgb("+parseInt(s.substring(0,2),16)+","+parseInt(s.substring(2,4),16)+","+parseInt(s.substring(4,6),16)+")"}return s},convertSpansToFonts:function(doc){var s,i,size,fSize,x,fFace,fColor,sizes=tinyMCE.getParam('font_size_style_values').replace(/\s+/,'').split(',');s=tinyMCE.selectElements(doc,'span,font');for(i=0;i<s.length;i++){size=tinyMCE.trim(s[i].style.fontSize).toLowerCase();fSize=0;for(x=0;x<sizes.length;x++){if(sizes[x]==size){fSize=x+1;break}}if(fSize>0){tinyMCE.setAttrib(s[i],'size',fSize);s[i].style.fontSize=''}fFace=s[i].style.fontFamily;if(fFace!=null&&fFace!==''){tinyMCE.setAttrib(s[i],'face',fFace);s[i].style.fontFamily=''}fColor=s[i].style.color;if(fColor!=null&&fColor!==''){tinyMCE.setAttrib(s[i],'color',tinyMCE.convertRGBToHex(fColor));s[i].style.color=''}}},convertFontsToSpans:function(doc){var fsClasses,s,i,fSize,fFace,fColor,sizes=tinyMCE.getParam('font_size_style_values').replace(/\s+/,'').split(',');fsClasses=tinyMCE.getParam('font_size_classes');if(fsClasses!=='')fsClasses=fsClasses.replace(/\s+/,'').split(',');else fsClasses=null;s=tinyMCE.selectElements(doc,'span,font');for(i=0;i<s.length;i++){fSize=tinyMCE.getAttrib(s[i],'size');fFace=tinyMCE.getAttrib(s[i],'face');fColor=tinyMCE.getAttrib(s[i],'color');if(fSize!==''){fSize=parseInt(fSize);if(fSize>0&&fSize<8){if(fsClasses!=null)tinyMCE.setAttrib(s[i],'class',fsClasses[fSize-1]);else s[i].style.fontSize=sizes[fSize-1]}s[i].removeAttribute('size')}if(fFace!==''){s[i].style.fontFamily=fFace;s[i].removeAttribute('face')}if(fColor!==''){s[i].style.color=fColor;s[i].removeAttribute('color')}}},cleanupAnchors:function(doc){var i,cn,x,an=doc.getElementsByTagName("a");for(i=an.length-1;i>=0;i--){if(tinyMCE.getAttrib(an[i],"name")!==''&&tinyMCE.getAttrib(an[i],"href")==''){cn=an[i].childNodes;for(x=cn.length-1;x>=0;x--)tinyMCE.insertAfter(cn[x],an[i])}}},getContent:function(editor_id){if(typeof(editor_id)!="undefined")tinyMCE.getInstanceById(editor_id).select();if(tinyMCE.selectedInstance)return tinyMCE.selectedInstance.getHTML();return null},_fixListElements:function(d){var nl,x,a=['ol','ul'],i,n,p,r=new RegExp('^(OL|UL)$'),np;for(x=0;x<a.length;x++){nl=d.getElementsByTagName(a[x]);for(i=0;i<nl.length;i++){n=nl[i];p=n.parentNode;if(r.test(p.nodeName)){np=tinyMCE.prevNode(n,'LI');if(!np){np=d.createElement('li');np.innerHTML=' ';np.appendChild(n);p.insertBefore(np,p.firstChild)}else np.appendChild(n)}}}},_fixTables:function(d){var nl,i,n,p,np,x,t;nl=d.getElementsByTagName('table');for(i=0;i<nl.length;i++){n=nl[i];if((p=tinyMCE.getParentElement(n,'p,h1,h2,h3,h4,h5,h6'))!=null){np=p.cloneNode(false);np.removeAttribute('id');t=n;while((n=n.nextSibling))np.appendChild(n);tinyMCE.insertAfter(np,p);tinyMCE.insertAfter(t,p)}}},_cleanupHTML:function(inst,doc,config,elm,visual,on_save,on_submit,inn){var h,d,t1,t2,t3,t4,t5,c,s,nb;if(!tinyMCE.getParam('cleanup'))return elm.innerHTML;on_save=typeof(on_save)=='undefined'?false:on_save;c=inst.cleanup;s=inst.settings;d=c.settings.debug;if(d)t1=new Date().getTime();inst._fixRootBlocks();if(tinyMCE.getParam("convert_fonts_to_spans"))tinyMCE.convertFontsToSpans(doc);if(tinyMCE.getParam("fix_list_elements"))tinyMCE._fixListElements(doc);if(tinyMCE.getParam("fix_table_elements"))tinyMCE._fixTables(doc);tinyMCE._customCleanup(inst,on_save?"get_from_editor_dom":"insert_to_editor_dom",doc.body);if(d)t2=new Date().getTime();c.settings.on_save=on_save;c.idCount=0;c.serializationId++;c.serializedNodes=[];c.sourceIndex=-1;if(s.cleanup_serializer=="xml")h=c.serializeNodeAsXML(elm,inn);else h=c.serializeNodeAsHTML(elm,inn);if(d)t3=new Date().getTime();nb=tinyMCE.getParam('entity_encoding')=='numeric'?' ':' ';h=h.replace(/<\/?(body|head|html)[^>]*>/gi,'');h=h.replace(new RegExp(' (rowspan="1"|colspan="1")','g'),'');h=h.replace(/<p><hr \/><\/p>/g,'<hr />');h=h.replace(/<p>( | )<\/p><hr \/><p>( | )<\/p>/g,'<hr />');h=h.replace(/<td>\s*<br \/>\s*<\/td>/g,'<td>'+nb+'</td>');h=h.replace(/<p>\s*<br \/>\s*<\/p>/g,'<p>'+nb+'</p>');h=h.replace(/<br \/>$/,'');h=h.replace(/<br \/><\/p>/g,'</p>');h=h.replace(/<p>\s*( | )\s*<br \/>\s*( | )\s*<\/p>/g,'<p>'+nb+'</p>');h=h.replace(/<p>\s*( | )\s*<br \/>\s*<\/p>/g,'<p>'+nb+'</p>');h=h.replace(/<p>\s*<br \/>\s* \s*<\/p>/g,'<p>'+nb+'</p>');h=h.replace(new RegExp('<a>(.*?)<\\/a>','g'),'$1');h=h.replace(/<p([^>]*)>\s*<\/p>/g,'<p$1>'+nb+'</p>');if(/^\s*(<br \/>|<p> <\/p>|<p> <\/p>|<p><\/p>)\s*$/.test(h))h='';if(s.preformatted){h=h.replace(/^<pre>/,'');h=h.replace(/<\/pre>$/,'');h='<pre>'+h+'</pre>'}if(tinyMCE.isGecko){h=h.replace(/<br \/>\s*<\/li>/g,'</li>');h=h.replace(/ \s*<\/(dd|dt)>/g,'</$1>');h=h.replace(/<o:p _moz-userdefined="" \/>/g,'');h=h.replace(/<td([^>]*)>\s*<br \/>\s*<\/td>/g,'<td$1>'+nb+'</td>')}if(s.force_br_newlines)h=h.replace(/<p>( | )<\/p>/g,'<br />');h=tinyMCE._customCleanup(inst,on_save?"get_from_editor":"insert_to_editor",h);if(on_save){h=h.replace(new RegExp(' ?(mceItem[a-zA-Z0-9]*|'+s.visual_table_class+')','g'),'');h=h.replace(new RegExp(' ?class=""','g'),'')}if(s.remove_linebreaks&&!c.settings.indent)h=h.replace(/\n|\r/g,' ');if(d)t4=new Date().getTime();if(on_save&&c.settings.indent)h=c.formatHTML(h);if(on_submit&&(s.encoding=="xml"||s.encoding=="html"))h=c.xmlEncode(h);if(d)t5=new Date().getTime();if(c.settings.debug)tinyMCE.debug("Cleanup in ms: Pre="+(t2-t1)+", Serialize: "+(t3-t2)+", Post: "+(t4-t3)+", Format: "+(t5-t4)+", Sum: "+(t5-t1)+".");return h}});function TinyMCE_Cleanup(){this.isIE=(navigator.appName=="Microsoft Internet Explorer");this.rules=tinyMCE.clearArray([]);this.settings={indent_elements:'head,table,tbody,thead,tfoot,form,tr,ul,ol,blockquote,object',newline_before_elements:'h1,h2,h3,h4,h5,h6,pre,address,div,ul,ol,li,meta,option,area,title,link,base,script,td',newline_after_elements:'br,hr,p,pre,address,div,ul,ol,meta,option,area,link,base,script',newline_before_after_elements:'html,head,body,table,thead,tbody,tfoot,tr,form,ul,ol,blockquote,p,object,param,hr,div',indent_char:'\t',indent_levels:1,entity_encoding:'raw',valid_elements:'*[*]',entities:'',url_converter:'',invalid_elements:'',verify_html:false};this.vElements=tinyMCE.clearArray([]);this.vElementsRe='';this.closeElementsRe=/^(IMG|BR|HR|LINK|META|BASE|INPUT|AREA)$/;this.codeElementsRe=/^(SCRIPT|STYLE)$/;this.serializationId=0;this.mceAttribs={href:'mce_href',src:'mce_src',type:'mce_type'}}TinyMCE_Cleanup.prototype={init:function(s){var n,a,i,ir,or,st;for(n in s)this.settings[n]=s[n];s=this.settings;this.inRe=this._arrayToRe(s.indent_elements.split(','),'','^<(',')[^>]*');this.ouRe=this._arrayToRe(s.indent_elements.split(','),'','^<\\/(',')[^>]*');this.nlBeforeRe=this._arrayToRe(s.newline_before_elements.split(','),'gi','<(',')([^>]*)>');this.nlAfterRe=this._arrayToRe(s.newline_after_elements.split(','),'gi','<(',')([^>]*)>');this.nlBeforeAfterRe=this._arrayToRe(s.newline_before_after_elements.split(','),'gi','<(\\/?)(',')([^>]*)>');this.serializedNodes=[];this.serializationId=0;if(s.invalid_elements!=='')this.iveRe=this._arrayToRe(s.invalid_elements.toUpperCase().split(','),'g','^(',')$');else this.iveRe=null;st='';for(i=0;i<s.indent_levels;i++)st+=s.indent_char;this.inStr=st;if(!s.verify_html){s.valid_elements='*[*]';s.extended_valid_elements=''}this.fillStr=s.entity_encoding=="named"?" ":" ";this.idCount=0;this.xmlEncodeRe=new RegExp('[\u007F-\uFFFF<>&"]','g')},addRuleStr:function(s){var r=this.parseRuleStr(s),n;for(n in r){if(r[n])this.rules[n]=r[n]}this.vElements=tinyMCE.clearArray([]);for(n in this.rules){if(this.rules[n])this.vElements[this.vElements.length]=this.rules[n].tag}this.vElementsRe=this._arrayToRe(this.vElements,'')},isValid:function(n){if(!this.rulesDone)this._setupRules();if(!n)return true;n=n.replace(/[^a-z0-9]+/gi,'').toUpperCase();return!tinyMCE.getParam('cleanup')||this.vElementsRe.test(n)},addChildRemoveRuleStr:function(s){var x,y,p,i,t,tn,ta,cl,r;if(!s)return;ta=s.split(',');for(x=0;x<ta.length;x++){s=ta[x];p=this.split(/\[|\]/,s);if(p==null||p.length<1)t=s.toUpperCase();else t=p[0].toUpperCase();tn=this.split('/',t);for(y=0;y<tn.length;y++){r="^(";cl=this.split(/\|/,p[1]);for(i=0;i<cl.length;i++){if(cl[i]=='%istrict')r+=tinyMCE.inlineStrict;else if(cl[i]=='%itrans')r+=tinyMCE.inlineTransitional;else if(cl[i]=='%istrict_na')r+=tinyMCE.inlineStrict.substring(2);else if(cl[i]=='%itrans_na')r+=tinyMCE.inlineTransitional.substring(2);else if(cl[i]=='%btrans')r+=tinyMCE.blockElms;else if(cl[i]=='%strict')r+=tinyMCE.blockStrict;else r+=(cl[i].charAt(0)!='#'?cl[i].toUpperCase():cl[i]);r+=(i!=cl.length-1?'|':'')}r+=')$';if(this.childRules==null)this.childRules=tinyMCE.clearArray([]);this.childRules[tn[y]]=new RegExp(r);if(p.length>1)this.childRules[tn[y]].wrapTag=p[2]}}},parseRuleStr:function(s){var ta,p,r,a,i,x,px,t,tn,y,av,or=tinyMCE.clearArray([]),dv;if(s==null||s.length==0)return or;ta=s.split(',');for(x=0;x<ta.length;x++){s=ta[x];if(s.length==0)continue;p=this.split(/\[|\]/,s);if(p==null||p.length<1)t=s.toUpperCase();else t=p[0].toUpperCase();tn=this.split('/',t);for(y=0;y<tn.length;y++){r={};r.tag=tn[y];r.forceAttribs=null;r.defaultAttribs=null;r.validAttribValues=null;px=r.tag.charAt(0);r.forceOpen=px=='+';r.removeEmpty=px=='-';r.fill=px=='#';r.tag=r.tag.replace(/\+|-|#/g,'');r.oTagName=tn[0].replace(/\+|-|#/g,'').toLowerCase();r.isWild=new RegExp('\\*|\\?|\\+','g').test(r.tag);r.validRe=new RegExp(this._wildcardToRe('^'+r.tag+'$'));if(p.length>1){r.vAttribsRe='^(';a=this.split(/\|/,p[1]);for(i=0;i<a.length;i++){t=a[i];if(t.charAt(0)=='!'){a[i]=t=t.substring(1);if(!r.reqAttribsRe)r.reqAttribsRe='\\s+('+t;else r.reqAttribsRe+='|'+t}av=new RegExp('(=|:|<)(.*?)$').exec(t);t=t.replace(new RegExp('(=|:|<).*?$'),'');if(av&&av.length>0){if(av[0].charAt(0)==':'){if(!r.forceAttribs)r.forceAttribs=tinyMCE.clearArray([]);r.forceAttribs[t.toLowerCase()]=av[0].substring(1)}else if(av[0].charAt(0)=='='){if(!r.defaultAttribs)r.defaultAttribs=tinyMCE.clearArray([]);dv=av[0].substring(1);r.defaultAttribs[t.toLowerCase()]=dv==''?"mce_empty":dv}else if(av[0].charAt(0)=='<'){if(!r.validAttribValues)r.validAttribValues=tinyMCE.clearArray([]);r.validAttribValues[t.toLowerCase()]=this._arrayToRe(this.split('?',av[0].substring(1)),'i')}}r.vAttribsRe+=''+t.toLowerCase()+(i!=a.length-1?'|':'');a[i]=t.toLowerCase()}if(r.reqAttribsRe)r.reqAttribsRe=new RegExp(r.reqAttribsRe+')=\"','g');r.vAttribsRe+=')$';r.vAttribsRe=this._wildcardToRe(r.vAttribsRe);r.vAttribsReIsWild=new RegExp('\\*|\\?|\\+','g').test(r.vAttribsRe);r.vAttribsRe=new RegExp(r.vAttribsRe);r.vAttribs=a.reverse();}else{r.vAttribsRe='';r.vAttribs=tinyMCE.clearArray([]);r.vAttribsReIsWild=false}or[r.tag]=r}}return or},serializeNodeAsXML:function(n){var s,b;if(!this.xmlDoc){if(this.isIE){try{this.xmlDoc=new ActiveXObject('MSXML2.DOMDocument')}catch(e){}if(!this.xmlDoc)try{this.xmlDoc=new ActiveXObject('Microsoft.XmlDom')}catch(e){}}else this.xmlDoc=document.implementation.createDocument('','',null);if(!this.xmlDoc)alert("Error XML Parser could not be found.")}if(this.xmlDoc.firstChild)this.xmlDoc.removeChild(this.xmlDoc.firstChild);b=this.xmlDoc.createElement("html");b=this.xmlDoc.appendChild(b);this._convertToXML(n,b);if(this.isIE)return this.xmlDoc.xml;else return new XMLSerializer().serializeToString(this.xmlDoc)},_convertToXML:function(n,xn){var xd,el,i,l,cn,at,no,hc=false;if(tinyMCE.isRealIE&&this._isDuplicate(n))return;xd=this.xmlDoc;switch(n.nodeType){case 1:hc=n.hasChildNodes();el=xd.createElement(n.nodeName.toLowerCase());at=n.attributes;for(i=at.length-1;i>-1;i--){no=at[i];if(no.specified&&no.nodeValue)el.setAttribute(no.nodeName.toLowerCase(),no.nodeValue)}if(!hc&&!this.closeElementsRe.test(n.nodeName))el.appendChild(xd.createTextNode(""));xn=xn.appendChild(el);break;case 3:xn.appendChild(xd.createTextNode(n.nodeValue));return;case 8:xn.appendChild(xd.createComment(n.nodeValue));return}if(hc){cn=n.childNodes;for(i=0,l=cn.length;i<l;i++)this._convertToXML(cn[i],xn)}},serializeNodeAsHTML:function(n,inn){var en,no,h='',i,l,t,st,r,cn,va=false,f=false,at,hc,cr,nn;if(!this.rulesDone)this._setupRules();if(tinyMCE.isRealIE&&this._isDuplicate(n))return'';if(n.parentNode&&this.childRules!=null){cr=this.childRules[n.parentNode.nodeName];if(typeof(cr)!="undefined"&&!cr.test(n.nodeName)){st=true;t=null}}switch(n.nodeType){case 1:hc=n.hasChildNodes();if(st)break;nn=n.nodeName;if(tinyMCE.isRealIE){if(n.nodeName.indexOf('/')!=-1)break;if(n.scopeName&&n.scopeName!='HTML')nn=n.scopeName.toUpperCase()+':'+nn.toUpperCase()}else if(tinyMCE.isOpera&&nn.indexOf(':')>0)nn=nn.toUpperCase();if(this.settings.convert_fonts_to_spans){if(this.settings.on_save&&nn=='FONT')nn='SPAN';if(!this.settings.on_save&&nn=='SPAN')nn='FONT'}if(this.vElementsRe.test(nn)&&(!this.iveRe||!this.iveRe.test(nn))&&!inn){va=true;r=this.rules[nn];if(!r){at=this.rules;for(no in at){if(at[no]&&at[no].validRe.test(nn)){r=at[no];break}}}en=r.isWild?nn.toLowerCase():r.oTagName;f=r.fill;if(r.removeEmpty&&!hc)return"";t='<'+en;if(r.vAttribsReIsWild){at=n.attributes;for(i=at.length-1;i>-1;i--){no=at[i];if(no.specified&&r.vAttribsRe.test(no.nodeName))t+=this._serializeAttribute(n,r,no.nodeName)}}else{for(i=r.vAttribs.length-1;i>-1;i--)t+=this._serializeAttribute(n,r,r.vAttribs[i])}if(!this.settings.on_save){at=this.mceAttribs;for(no in at){if(at[no])t+=this._serializeAttribute(n,r,at[no])}}if(r.reqAttribsRe&&!t.match(r.reqAttribsRe))t=null;if(t!=null&&this.closeElementsRe.test(nn))return t+' />';if(t!=null)h+=t+'>';if(this.isIE&&this.codeElementsRe.test(nn))h+=n.innerHTML}break;case 3:if(st)break;if(n.parentNode&&this.codeElementsRe.test(n.parentNode.nodeName))return this.isIE?'':n.nodeValue;return this.xmlEncode(n.nodeValue);case 8:if(st)break;return"<!--"+this._trimComment(n.nodeValue)+"-->"}if(hc){cn=n.childNodes;for(i=0,l=cn.length;i<l;i++)h+=this.serializeNodeAsHTML(cn[i])}if(f&&!hc)h+=this.fillStr;if(t!=null&&va)h+='</'+en+'>';return h},_serializeAttribute:function(n,r,an){var av='',t,os=this.settings.on_save;if(os&&(an.indexOf('mce_')==0||an.indexOf('_moz')==0))return'';if(os&&this.mceAttribs[an])av=this._getAttrib(n,this.mceAttribs[an]);if(av.length==0)av=this._getAttrib(n,an);if(av.length==0&&r.defaultAttribs&&(t=r.defaultAttribs[an])){av=t;if(av=="mce_empty")return" "+an+'=""'}if(r.forceAttribs&&(t=r.forceAttribs[an]))av=t;if(os&&av.length!=0&&/^(src|href|longdesc)$/.test(an))av=this._urlConverter(this,n,av);if(av.length!=0&&r.validAttribValues&&r.validAttribValues[an]&&!r.validAttribValues[an].test(av))return"";if(av.length!=0&&av=="{$uid}")av="uid_"+(this.idCount++);if(av.length!=0){if(an.indexOf('on')!=0)av=this.xmlEncode(av,1);return" "+an+"="+'"'+av+'"'}return""},formatHTML:function(h){var s=this.settings,p='',i=0,li=0,o='',l;h=h.replace(/<pre([^>]*)>(.*?)<\/pre>/gi,function(a,b,c){c=c.replace(/<br\s*\/>/gi,'\n');return'<pre'+b+'>'+c+'</pre>'});h=h.replace(/\r/g,'');h='\n'+h;h=h.replace(new RegExp('\\n\\s+','gi'),'\n');h=h.replace(this.nlBeforeRe,'\n<$1$2>');h=h.replace(this.nlAfterRe,'<$1$2>\n');h=h.replace(this.nlBeforeAfterRe,'\n<$1$2$3>\n');h+='\n';while((i=h.indexOf('\n',i+1))!=-1){if((l=h.substring(li+1,i)).length!=0){if(this.ouRe.test(l)&&p.length>=s.indent_levels)p=p.substring(s.indent_levels);o+=p+l+'\n';if(this.inRe.test(l))p+=this.inStr}li=i}return o},xmlEncode:function(s){var cl=this,re=this.xmlEncodeRe;if(!this.entitiesDone)this._setupEntities();switch(this.settings.entity_encoding){case"raw":return tinyMCE.xmlEncode(s);case"named":return s.replace(re,function(c){var b=cl.entities[c.charCodeAt(0)];return b?'&'+b+';':c});case"numeric":return s.replace(re,function(c){return'&#'+c.charCodeAt(0)+';'})}return s},split:function(re,s){var i,l,o=[],c=s.split(re);for(i=0,l=c.length;i<l;i++){if(c[i]!=='')o[i]=c[i]}return o},_trimComment:function(s){s=s.replace(new RegExp('\\smce_src=\"[^\"]*\"','gi'),"");s=s.replace(new RegExp('\\smce_href=\"[^\"]*\"','gi'),"");return s},_getAttrib:function(e,n,d){var v,ex,nn;if(typeof(d)=="undefined")d="";if(!e||e.nodeType!=1)return d;try{v=e.getAttribute(n,0)}catch(ex){v=e.getAttribute(n,2)}if(n=="class"&&!v)v=e.className;if(this.isIE){if(n=="http-equiv")v=e.httpEquiv;nn=e.nodeName;if(nn=="FORM"&&n=="enctype"&&v=="application/x-www-form-urlencoded")v="";if(nn=="INPUT"&&n=="size"&&v=="20")v="";if(nn=="INPUT"&&n=="maxlength"&&v=="2147483647")v="";if(n=="width"||n=="height")v=e.getAttribute(n,2)}if(n=='style'&&v){if(!tinyMCE.isOpera)v=e.style.cssText;v=tinyMCE.serializeStyle(tinyMCE.parseStyle(v))}if(this.settings.on_save&&n.indexOf('on')!=-1&&this.settings.on_save&&v&&v!=='')v=tinyMCE.cleanupEventStr(v);return(v&&v!=='')?''+v:d},_urlConverter:function(c,n,v){if(!c.settings.on_save)return tinyMCE.convertRelativeToAbsoluteURL(tinyMCE.settings.base_href,v);else if(tinyMCE.getParam('convert_urls')){if(!this.urlConverter)this.urlConverter=eval(tinyMCE.settings.urlconverter_callback);return this.urlConverter(v,n,true)}return v},_arrayToRe:function(a,op,be,af){var i,r;op=typeof(op)=="undefined"?"gi":op;be=typeof(be)=="undefined"?"^(":be;af=typeof(af)=="undefined"?")$":af;r=be;for(i=0;i<a.length;i++)r+=this._wildcardToRe(a[i])+(i!=a.length-1?"|":"");r+=af;return new RegExp(r,op)},_wildcardToRe:function(s){s=s.replace(/\?/g,'(\\S?)');s=s.replace(/\+/g,'(\\S+)');s=s.replace(/\*/g,'(\\S*)');return s},_setupEntities:function(){var n,a,i,s=this.settings;if(s.entity_encoding=="named"){n=tinyMCE.clearArray([]);a=this.split(',',s.entities);for(i=0;i<a.length;i+=2)n[a[i]]=a[i+1];this.entities=n}this.entitiesDone=true},_setupRules:function(){var s=this.settings;this.addRuleStr(s.valid_elements);this.addRuleStr(s.extended_valid_elements);this.addChildRemoveRuleStr(s.valid_child_elements);this.rulesDone=true},_isDuplicate:function(n){var i,l,sn;if(!this.settings.fix_content_duplication)return false;if(tinyMCE.isRealIE&&n.nodeType==1){if(n.mce_serialized==this.serializationId)return true;n.setAttribute('mce_serialized',this.serializationId)}else{sn=this.serializedNodes;for(i=0,l=sn.length;i<l;i++){if(sn[i]==n)return true}sn.push(n)}return false}};tinyMCE.add(TinyMCE_Engine,{createTagHTML:function(tn,a,h){var o='',f=tinyMCE.xmlEncode,n;o='<'+tn;if(a){for(n in a){if(typeof(a[n])!='function'&&a[n]!=null)o+=' '+f(n)+'="'+f(''+a[n])+'"'}}o+=!h?' />':'>'+h+'</'+tn+'>';return o},createTag:function(d,tn,a,h){var o=d.createElement(tn),n;if(a){for(n in a){if(typeof(a[n])!='function'&&a[n]!=null)tinyMCE.setAttrib(o,n,a[n])}}if(h)o.innerHTML=h;return o},getElementByAttributeValue:function(n,e,a,v){return(n=this.getElementsByAttributeValue(n,e,a,v)).length==0?null:n[0]},getElementsByAttributeValue:function(n,e,a,v){var i,nl=n.getElementsByTagName(e),o=[];for(i=0;i<nl.length;i++){if(tinyMCE.getAttrib(nl[i],a).indexOf(v)!=-1)o[o.length]=nl[i]}return o},isBlockElement:function(n){return n!=null&&n.nodeType==1&&this.blockRegExp.test(n.nodeName)},getParentBlockElement:function(n,r){return this.getParentNode(n,function(n){return tinyMCE.isBlockElement(n)},r);return null},insertAfter:function(n,r){if(r.nextSibling)r.parentNode.insertBefore(n,r.nextSibling);else r.parentNode.appendChild(n)},setInnerHTML:function(e,h){var i,nl,n;if(tinyMCE.isGecko){h=h.replace(/<embed([^>]*)>/gi,'<tmpembed$1>');h=h.replace(/<em([^>]*)>/gi,'<i$1>');h=h.replace(/<tmpembed([^>]*)>/gi,'<embed$1>');h=h.replace(/<strong([^>]*)>/gi,'<b$1>');h=h.replace(/<\/strong>/gi,'</b>');h=h.replace(/<\/em>/gi,'</i>')}if(tinyMCE.isRealIE){h=h.replace(/\s\/>/g,'>');h=h.replace(/<p([^>]*)>\u00A0?<\/p>/gi,'<p$1 mce_keep="true"> </p>');h=h.replace(/<p([^>]*)>\s* \s*<\/p>/gi,'<p$1 mce_keep="true"> </p>');h=h.replace(/<p([^>]*)>\s+<\/p>/gi,'<p$1 mce_keep="true"> </p>');e.innerHTML=tinyMCE.uniqueTag+h;e.firstChild.removeNode(true);nl=e.getElementsByTagName("p");for(i=nl.length-1;i>=0;i--){n=nl[i];if(n.nodeName=='P'&&!n.hasChildNodes()&&!n.mce_keep)n.parentNode.removeChild(n)}}else{h=this.fixGeckoBaseHREFBug(1,e,h);e.innerHTML=h;this.fixGeckoBaseHREFBug(2,e,h)}},getOuterHTML:function(e){var d;if(tinyMCE.isIE)return e.outerHTML;d=e.ownerDocument.createElement("body");d.appendChild(e.cloneNode(true));return d.innerHTML},setOuterHTML:function(e,h,d){var d=typeof(d)=="undefined"?e.ownerDocument:d,i,nl,t;if(tinyMCE.isIE&&e.nodeType==1)e.outerHTML=h;else{t=d.createElement("body");t.innerHTML=h;for(i=0,nl=t.childNodes;i<nl.length;i++)e.parentNode.insertBefore(nl[i].cloneNode(true),e);e.parentNode.removeChild(e)}},_getElementById:function(id,d){var e,i,j,f;if(typeof(d)=="undefined")d=document;e=d.getElementById(id);if(!e){f=d.forms;for(i=0;i<f.length;i++){for(j=0;j<f[i].elements.length;j++){if(f[i].elements[j].name==id){e=f[i].elements[j];break}}}}return e},getNodeTree:function(n,na,t,nn){return this.selectNodes(n,function(n){return(!t||n.nodeType==t)&&(!nn||n.nodeName==nn)},na?na:[])},getParentElement:function(n,na,f,r){var re=na?new RegExp('^('+na.toUpperCase().replace(/,/g,'|')+')$'):0,v;if(f&&typeof(f)=='string')return this.getParentElement(n,na,function(no){return tinyMCE.getAttrib(no,f)!==''});return this.getParentNode(n,function(n){return((n.nodeType==1&&!re)||(re&&re.test(n.nodeName)))&&(!f||f(n))},r)},getParentNode:function(n,f,r){while(n){if(n==r)return null;if(f(n))return n;n=n.parentNode}return null},getAttrib:function(elm,name,dv){var v;if(typeof(dv)=="undefined")dv="";if(!elm||elm.nodeType!=1)return dv;try{v=elm.getAttribute(name,0)}catch(ex){v=elm.getAttribute(name,2)}if(name=="class"&&!v)v=elm.className;if(tinyMCE.isGecko){if(name=="src"&&elm.src!=null&&elm.src!=='')v=elm.src;if(name=="href"&&elm.href!=null&&elm.href!=='')v=elm.href}else if(tinyMCE.isIE){switch(name){case"http-equiv":v=elm.httpEquiv;break;case"width":case"height":v=elm.getAttribute(name,2);break}}if(name=="style"&&!tinyMCE.isOpera)v=elm.style.cssText;return(v&&v!=='')?v:dv},setAttrib:function(el,name,va,fix){if(typeof(va)=="number"&&va!=null)va=""+va;if(fix){if(va==null)va="";va=va.replace(/[^0-9%]/g,'')}if(name=="style")el.style.cssText=va;if(name=="class")el.className=va;if(va!=null&&va!==''&&va!=-1)el.setAttribute(name,va);else el.removeAttribute(name)},setStyleAttrib:function(e,n,v){e.style[n]=v;if(tinyMCE.isIE&&v==null||v==''){v=tinyMCE.serializeStyle(tinyMCE.parseStyle(e.style.cssText));e.style.cssText=v;e.setAttribute("style",v)}},switchClass:function(ei,c){var e;if(tinyMCE.switchClassCache[ei])e=tinyMCE.switchClassCache[ei];else e=tinyMCE.switchClassCache[ei]=document.getElementById(ei);if(e){if(tinyMCE.settings.button_tile_map&&e.className&&e.className.indexOf('mceTiledButton')==0)c='mceTiledButton '+c;e.className=c}},getAbsPosition:function(n,cn){var l=0,t=0;while(n&&n!=cn){l+=n.offsetLeft;t+=n.offsetTop;n=n.offsetParent}return{absLeft:l,absTop:t}},prevNode:function(e,n){var a=n.split(','),i;while((e=e.previousSibling)!=null){for(i=0;i<a.length;i++){if(e.nodeName==a[i])return e}}return null},nextNode:function(e,n){var a=n.split(','),i;while((e=e.nextSibling)!=null){for(i=0;i<a.length;i++){if(e.nodeName==a[i])return e}}return null},selectElements:function(n,na,f){var i,a=[],nl,x;for(x=0,na=na.split(',');x<na.length;x++)for(i=0,nl=n.getElementsByTagName(na[x]);i<nl.length;i++)(!f||f(nl[i]))&&a.push(nl[i]);return a},selectNodes:function(n,f,a){var i;if(!a)a=[];if(f(n))a[a.length]=n;if(n.hasChildNodes()){for(i=0;i<n.childNodes.length;i++)tinyMCE.selectNodes(n.childNodes[i],f,a)}return a},addCSSClass:function(e,c,b){var o=this.removeCSSClass(e,c);return e.className=b?c+(o!==''?(' '+o):''):(o!==''?(o+' '):'')+c},removeCSSClass:function(e,c){c=e.className.replace(new RegExp("(^|\\s+)"+c+"(\\s+|$)"),' ');return e.className=c!=' '?c:''},hasCSSClass:function(n,c){return new RegExp('\\b'+c+'\\b','g').test(n.className)},renameElement:function(e,n,d){var ne,i,ar;d=typeof(d)=="undefined"?tinyMCE.selectedInstance.getDoc():d;if(e){ne=d.createElement(n);ar=e.attributes;for(i=ar.length-1;i>-1;i--){if(ar[i].specified&&ar[i].nodeValue)ne.setAttribute(ar[i].nodeName.toLowerCase(),ar[i].nodeValue)}ar=e.childNodes;for(i=0;i<ar.length;i++)ne.appendChild(ar[i].cloneNode(true));e.parentNode.replaceChild(ne,e)}},getViewPort:function(w){var d=w.document,m=d.compatMode=='CSS1Compat',b=d.body,de=d.documentElement;return{left:w.pageXOffset||(m?de.scrollLeft:b.scrollLeft),top:w.pageYOffset||(m?de.scrollTop:b.scrollTop),width:w.innerWidth||(m?de.clientWidth:b.clientWidth),height:w.innerHeight||(m?de.clientHeight:b.clientHeight)}},getStyle:function(n,na,d){if(!n)return false;if(tinyMCE.isGecko&&n.ownerDocument.defaultView){try{return n.ownerDocument.defaultView.getComputedStyle(n,null).getPropertyValue(na)}catch(n){return null}}na=na.replace(/-(\D)/g,function(a,b){return b.toUpperCase()});if(n.currentStyle)return n.currentStyle[na];return false}});tinyMCE.add(TinyMCE_Engine,{parseURL:function(url_str){var urlParts=[],i,pos,lastPos,chr;if(url_str){pos=url_str.indexOf('://');if(pos!=-1){urlParts.protocol=url_str.substring(0,pos);lastPos=pos+3}for(i=lastPos;i<url_str.length;i++){chr=url_str.charAt(i);if(chr==':')break;if(chr=='/')break}pos=i;urlParts.host=url_str.substring(lastPos,pos);urlParts.port="";lastPos=pos;if(url_str.charAt(pos)==':'){pos=url_str.indexOf('/',lastPos);urlParts.port=url_str.substring(lastPos+1,pos)}lastPos=pos;pos=url_str.indexOf('?',lastPos);if(pos==-1)pos=url_str.indexOf('#',lastPos);if(pos==-1)pos=url_str.length;urlParts.path=url_str.substring(lastPos,pos);lastPos=pos;if(url_str.charAt(pos)=='?'){pos=url_str.indexOf('#');pos=(pos==-1)?url_str.length:pos;urlParts.query=url_str.substring(lastPos+1,pos)}lastPos=pos;if(url_str.charAt(pos)=='#'){pos=url_str.length;urlParts.anchor=url_str.substring(lastPos+1,pos)}}return urlParts},serializeURL:function(up){var o="";if(up.protocol)o+=up.protocol+"://";if(up.host)o+=up.host;if(up.port)o+=":"+up.port;if(up.path)o+=up.path;if(up.query)o+="?"+up.query;if(up.anchor)o+="#"+up.anchor;return o},convertAbsoluteURLToRelativeURL:function(base_url,url_to_relative){var baseURL=this.parseURL(base_url),targetURL=this.parseURL(url_to_relative);var i,strTok1,strTok2,breakPoint=0,outPath="",forceSlash=false;var fileName,pos;if(targetURL.path=='')targetURL.path="/";else forceSlash=true;base_url=baseURL.path.substring(0,baseURL.path.lastIndexOf('/'));strTok1=base_url.split('/');strTok2=targetURL.path.split('/');if(strTok1.length>=strTok2.length){for(i=0;i<strTok1.length;i++){if(i>=strTok2.length||strTok1[i]!=strTok2[i]){breakPoint=i+1;break}}}if(strTok1.length<strTok2.length){for(i=0;i<strTok2.length;i++){if(i>=strTok1.length||strTok1[i]!=strTok2[i]){breakPoint=i+1;break}}}if(breakPoint==1)return targetURL.path;for(i=0;i<(strTok1.length-(breakPoint-1));i++)outPath+="../";for(i=breakPoint-1;i<strTok2.length;i++){if(i!=(breakPoint-1))outPath+="/"+strTok2[i];else outPath+=strTok2[i]}targetURL.protocol=null;targetURL.host=null;targetURL.port=null;targetURL.path=outPath==''&&forceSlash?"/":outPath;fileName=baseURL.path;if((pos=fileName.lastIndexOf('/'))!=-1)fileName=fileName.substring(pos+1);if(fileName==targetURL.path&&targetURL.anchor!=='')targetURL.path="";if(targetURL.path==''&&!targetURL.anchor)targetURL.path=fileName!==''?fileName:"/";return this.serializeURL(targetURL)},convertRelativeToAbsoluteURL:function(base_url,relative_url){var baseURL=this.parseURL(base_url),baseURLParts,relURLParts,newRelURLParts,numBack,relURL=this.parseURL(relative_url),i;var len,absPath,start,end,newBaseURLParts;if(relative_url==''||relative_url.indexOf('://')!=-1||/^(mailto:|javascript:|#|\/)/.test(relative_url))return relative_url;baseURLParts=baseURL.path.split('/');relURLParts=relURL.path.split('/');newBaseURLParts=[];for(i=baseURLParts.length-1;i>=0;i--){if(baseURLParts[i].length==0)continue;newBaseURLParts[newBaseURLParts.length]=baseURLParts[i]}baseURLParts=newBaseURLParts.reverse();newRelURLParts=[];numBack=0;for(i=relURLParts.length-1;i>=0;i--){if(relURLParts[i].length==0||relURLParts[i]==".")continue;if(relURLParts[i]=='..'){numBack++;continue}if(numBack>0){numBack--;continue}newRelURLParts[newRelURLParts.length]=relURLParts[i]}relURLParts=newRelURLParts.reverse();len=baseURLParts.length-numBack;absPath=(len<=0?"":"/")+baseURLParts.slice(0,len).join('/')+"/"+relURLParts.join('/');start="";end="";relURL.protocol=baseURL.protocol;relURL.host=baseURL.host;relURL.port=baseURL.port;if(relURL.path.charAt(relURL.path.length-1)=="/")absPath+="/";relURL.path=absPath;return this.serializeURL(relURL)},convertURL:function(url,node,on_save){var dl=document.location,start,portPart,urlParts,baseUrlParts,tmpUrlParts,curl;var prot=dl.protocol,host=dl.hostname,port=dl.port;if(prot=="file:")return url;url=tinyMCE.regexpReplace(url,'(http|https):///','/');if(url.indexOf('mailto:')!=-1||url.indexOf('javascript:')!=-1||/^[ \t\r\n\+]*[#\?]/.test(url))return url;if(!tinyMCE.isIE&&!on_save&&url.indexOf("://")==-1&&url.charAt(0)!='/')return tinyMCE.settings.base_href+url;if(on_save&&tinyMCE.getParam('relative_urls')){curl=tinyMCE.convertRelativeToAbsoluteURL(tinyMCE.settings.base_href,url);if(curl.charAt(0)=='/')curl=tinyMCE.settings.document_base_prefix+curl;urlParts=tinyMCE.parseURL(curl);tmpUrlParts=tinyMCE.parseURL(tinyMCE.settings.document_base_url);if(urlParts.host==tmpUrlParts.host&&(urlParts.port==tmpUrlParts.port))return tinyMCE.convertAbsoluteURLToRelativeURL(tinyMCE.settings.document_base_url,curl)}if(!tinyMCE.getParam('relative_urls')){urlParts=tinyMCE.parseURL(url);baseUrlParts=tinyMCE.parseURL(tinyMCE.settings.base_href);url=tinyMCE.convertRelativeToAbsoluteURL(tinyMCE.settings.base_href,url);if(urlParts.anchor&&urlParts.path==baseUrlParts.path)return"#"+urlParts.anchor}if(tinyMCE.getParam('remove_script_host')){start="";portPart="";if(port!=='')portPart=":"+port;start=prot+"//"+host+portPart+"/";if(url.indexOf(start)==0)url=url.substring(start.length-1)}return url},convertAllRelativeURLs:function(body){var i,elms,src,href,mhref,msrc;elms=body.getElementsByTagName("img");for(i=0;i<elms.length;i++){src=tinyMCE.getAttrib(elms[i],'src');msrc=tinyMCE.getAttrib(elms[i],'mce_src');if(msrc!=='')src=msrc;if(src!==''){src=tinyMCE.convertRelativeToAbsoluteURL(tinyMCE.settings.base_href,src);elms[i].setAttribute("src",src)}}elms=body.getElementsByTagName("a");for(i=0;i<elms.length;i++){href=tinyMCE.getAttrib(elms[i],'href');mhref=tinyMCE.getAttrib(elms[i],'mce_href');if(mhref!=='')href=mhref;if(href&&href!==''){href=tinyMCE.convertRelativeToAbsoluteURL(tinyMCE.settings.base_href,href);elms[i].setAttribute("href",href)}}}});tinyMCE.add(TinyMCE_Engine,{clearArray:function(a){var n;for(n in a)a[n]=null;return a},explode:function(d,s){var ar=s.split(d),oar=[],i;for(i=0;i<ar.length;i++){if(ar[i]!=='')oar[oar.length]=ar[i]}return oar}});tinyMCE.add(TinyMCE_Engine,{_setEventsEnabled:function(node,state){var evs,x,y,elms,i,event;var events=['onfocus','onblur','onclick','ondblclick','onmousedown','onmouseup','onmouseover','onmousemove','onmouseout','onkeypress','onkeydown','onkeydown','onkeyup'];evs=tinyMCE.settings.event_elements.split(',');for(y=0;y<evs.length;y++){elms=node.getElementsByTagName(evs[y]);for(i=0;i<elms.length;i++){event="";for(x=0;x<events.length;x++){if((event=tinyMCE.getAttrib(elms[i],events[x]))!==''){event=tinyMCE.cleanupEventStr(""+event);if(!state)event="return true;"+event;else event=event.replace(/^return true;/gi,'');elms[i].removeAttribute(events[x]);elms[i].setAttribute(events[x],event)}}}}},_eventPatch:function(editor_id){var n,inst,win,e;if(typeof(tinyMCE)=="undefined")return true;try{if(tinyMCE.selectedInstance){win=tinyMCE.selectedInstance.getWin();if(win&&win.event){e=win.event;if(!e.target)e.target=e.srcElement;TinyMCE_Engine.prototype.handleEvent(e);return}}for(n in tinyMCE.instances){inst=tinyMCE.instances[n];if(!tinyMCE.isInstance(inst))continue;inst.select();win=inst.getWin();if(win&&win.event){e=win.event;if(!e.target)e.target=e.srcElement;TinyMCE_Engine.prototype.handleEvent(e);return}}}catch(ex){}},findEvent:function(e){var n,inst;if(e)return e;for(n in tinyMCE.instances){inst=tinyMCE.instances[n];if(tinyMCE.isInstance(inst)&&inst.getWin().event)return inst.getWin().event}return null},unloadHandler:function(){tinyMCE.triggerSave(true,true)},addEventHandlers:function(inst){this.setEventHandlers(inst,1)},setEventHandlers:function(inst,s){var doc=inst.getDoc(),ie,ot,i,f=s?tinyMCE.addEvent:tinyMCE.removeEvent;ie=['keypress','keyup','keydown','click','mouseup','mousedown','controlselect','dblclick'];ot=['keypress','keyup','keydown','click','mouseup','mousedown','focus','blur','dragdrop'];inst.switchSettings();if(tinyMCE.isIE){for(i=0;i<ie.length;i++)f(doc,ie[i],TinyMCE_Engine.prototype._eventPatch)}else{for(i=0;i<ot.length;i++)f(doc,ot[i],tinyMCE.handleEvent);try{doc.designMode="On"}catch(e){}}},onMouseMove:function(){var inst,lh;if(tinyMCE.lastHover){lh=tinyMCE.lastHover;if(lh.className.indexOf('mceMenu')!=-1)tinyMCE._menuButtonEvent('out',lh);else lh.className=lh.className;tinyMCE.lastHover=null}if(!tinyMCE.hasMouseMoved){inst=tinyMCE.selectedInstance;if(inst.isFocused){inst.undoBookmark=inst.selection.getBookmark();tinyMCE.hasMouseMoved=true}}},cancelEvent:function(e){if(!e)return false;if(tinyMCE.isIE){e.returnValue=false;e.cancelBubble=true}else{e.preventDefault();e.stopPropagation&&e.stopPropagation()}return false},addEvent:function(o,n,h){if(n!='unload'){function clean(){var ex;try{tinyMCE.removeEvent(o,n,h);tinyMCE.removeEvent(window,'unload',clean);o=n=h=null}catch(ex){}}tinyMCE.addEvent(window,'unload',clean)}if(o.attachEvent)o.attachEvent("on"+n,h);else o.addEventListener(n,h,false)},removeEvent:function(o,n,h){if(o.detachEvent)o.detachEvent("on"+n,h);else o.removeEventListener(n,h,false)},addSelectAccessibility:function(e,s,w){if(!s._isAccessible){s.onkeydown=tinyMCE.accessibleEventHandler;s.onblur=tinyMCE.accessibleEventHandler;s._isAccessible=true;s._win=w}return false},accessibleEventHandler:function(e){var elm,win=this._win;e=tinyMCE.isIE?win.event:e;elm=tinyMCE.isIE?e.srcElement:e.target;if(e.type=="blur"){if(elm.oldonchange){elm.onchange=elm.oldonchange;elm.oldonchange=null}return true}if(elm.nodeName=="SELECT"&&!elm.oldonchange){elm.oldonchange=elm.onchange;elm.onchange=null}if(e.keyCode==13||e.keyCode==32){elm.onchange=elm.oldonchange;elm.onchange();elm.oldonchange=null;tinyMCE.cancelEvent(e);return false}return true},_resetIframeHeight:function(){var ife;if(tinyMCE.isRealIE){ife=tinyMCE.selectedInstance.iframeElement;if(ife._oldHeight){ife.style.height=ife._oldHeight;ife.height=ife._oldHeight}}}});function TinyMCE_Selection(inst){this.instance=inst};TinyMCE_Selection.prototype={getSelectedHTML:function(){var inst=this.instance,e,r=this.getRng(),h;if(!r)return null;e=document.createElement("body");if(r.cloneContents)e.appendChild(document.importNode(r.cloneContents(),true));else if(typeof(r.item)!='undefined'||typeof(r.htmlText)!='undefined')e.innerHTML=r.item?r.item(0).outerHTML:r.htmlText;else e.innerHTML=r.toString();h=tinyMCE._cleanupHTML(inst,inst.contentDocument,inst.settings,e,e,false,true,false);return h},getSelectedText:function(){var inst=this.instance,d,r,s,t;if(tinyMCE.isIE){d=inst.getDoc();if(d.selection.type=="Text"){r=d.selection.createRange();t=r.text}else t=''}else{s=this.getSel();if(s&&s.toString)t=s.toString();else t=''}return t},getBookmark:function(simple){var inst=this.instance,rng=this.getRng(),doc=inst.getDoc(),b=inst.getBody();var trng,sx,sy,xx=-999999999,vp=inst.getViewPort();var sp,le,s,e,nl,i,si,ei,w;sx=vp.left;sy=vp.top;if(simple)return{rng:rng,scrollX:sx,scrollY:sy};if(tinyMCE.isRealIE){if(rng.item){e=rng.item(0);nl=b.getElementsByTagName(e.nodeName);for(i=0;i<nl.length;i++){if(e==nl[i]){sp=i;break}}return{tag:e.nodeName,index:sp,scrollX:sx,scrollY:sy}}else{trng=doc.body.createTextRange();trng.moveToElementText(inst.getBody());trng.collapse(true);bp=Math.abs(trng.move('character',xx));trng=rng.duplicate();trng.collapse(true);sp=Math.abs(trng.move('character',xx));trng=rng.duplicate();trng.collapse(false);le=Math.abs(trng.move('character',xx))-sp;return{start:sp-bp,length:le,scrollX:sx,scrollY:sy}}}else{s=this.getSel();e=this.getFocusElement();if(!s)return null;if(e&&e.nodeName=='IMG'){return{start:-1,end:-1,index:sp,scrollX:sx,scrollY:sy}}if(s.anchorNode==s.focusNode&&s.anchorOffset==s.focusOffset){e=this._getPosText(b,s.anchorNode,s.focusNode);if(!e)return{scrollX:sx,scrollY:sy};return{start:e.start+s.anchorOffset,end:e.end+s.focusOffset,scrollX:sx,scrollY:sy}}else{e=this._getPosText(b,rng.startContainer,rng.endContainer);if(!e)return{scrollX:sx,scrollY:sy};return{start:e.start+rng.startOffset,end:e.end+rng.endOffset,scrollX:sx,scrollY:sy}}}return null},moveToBookmark:function(bookmark){var inst=this.instance,rng,nl,i,ex,b=inst.getBody(),sd;var doc=inst.getDoc(),win=inst.getWin(),sel=this.getSel();if(!bookmark)return false;if(tinyMCE.isSafari&&bookmark.rng){sel.setBaseAndExtent(bookmark.rng.startContainer,bookmark.rng.startOffset,bookmark.rng.endContainer,bookmark.rng.endOffset);return true}if(tinyMCE.isRealIE){if(bookmark.rng){try{bookmark.rng.select()}catch(ex){}return true}win.focus();if(bookmark.tag){rng=b.createControlRange();nl=b.getElementsByTagName(bookmark.tag);if(nl.length>bookmark.index){try{rng.addElement(nl[bookmark.index])}catch(ex){}}}else{try{if(bookmark.start<0)return true;rng=inst.getSel().createRange();rng.moveToElementText(inst.getBody());rng.collapse(true);rng.moveStart('character',bookmark.start);rng.moveEnd('character',bookmark.length)}catch(ex){return true}}rng.select();win.scrollTo(bookmark.scrollX,bookmark.scrollY);return true}if(tinyMCE.isGecko||tinyMCE.isOpera){if(!sel)return false;if(bookmark.rng){sel.removeAllRanges();sel.addRange(bookmark.rng)}if(bookmark.start!=-1&&bookmark.end!=-1){try{sd=this._getTextPos(b,bookmark.start,bookmark.end);rng=doc.createRange();rng.setStart(sd.startNode,sd.startOffset);rng.setEnd(sd.endNode,sd.endOffset);sel.removeAllRanges();sel.addRange(rng);if(!tinyMCE.isOpera)win.focus()}catch(ex){}}win.scrollTo(bookmark.scrollX,bookmark.scrollY);return true}return false},_getPosText:function(r,sn,en){var w=document.createTreeWalker(r,NodeFilter.SHOW_TEXT,null,false),n,p=0,d={};while((n=w.nextNode())!=null){if(n==sn)d.start=p;if(n==en){d.end=p;return d}p+=n.nodeValue?n.nodeValue.length:0}return null},_getTextPos:function(r,sp,ep){var w=document.createTreeWalker(r,NodeFilter.SHOW_TEXT,null,false),n,p=0,d={};while((n=w.nextNode())!=null){p+=n.nodeValue?n.nodeValue.length:0;if(p>=sp&&!d.startNode){d.startNode=n;d.startOffset=sp-(p-n.nodeValue.length)}if(p>=ep){d.endNode=n;d.endOffset=ep-(p-n.nodeValue.length);return d}}return null},selectNode:function(node,collapse,select_text_node,to_start){var inst=this.instance,sel,rng,nodes;if(!node)return;if(typeof(collapse)=="undefined")collapse=true;if(typeof(select_text_node)=="undefined")select_text_node=false;if(typeof(to_start)=="undefined")to_start=true;if(inst.settings.auto_resize)inst.resizeToContent();if(tinyMCE.isRealIE){rng=inst.getDoc().body.createTextRange();try{rng.moveToElementText(node);if(collapse)rng.collapse(to_start);rng.select()}catch(e){}}else{sel=this.getSel();if(!sel)return;if(tinyMCE.isSafari){sel.setBaseAndExtent(node,0,node,node.innerText.length);if(collapse){if(to_start)sel.collapseToStart();else sel.collapseToEnd()}this.scrollToNode(node);return}rng=inst.getDoc().createRange();if(select_text_node){nodes=tinyMCE.getNodeTree(node,[],3);if(nodes.length>0)rng.selectNodeContents(nodes[0]);else rng.selectNodeContents(node)}else rng.selectNode(node);if(collapse){if(!to_start&&node.nodeType==3){rng.setStart(node,node.nodeValue.length);rng.setEnd(node,node.nodeValue.length)}else rng.collapse(to_start)}sel.removeAllRanges();sel.addRange(rng)}this.scrollToNode(node);tinyMCE.selectedElement=null;if(node.nodeType==1)tinyMCE.selectedElement=node},scrollToNode:function(node){var inst=this.instance,w=inst.getWin(),vp=inst.getViewPort(),pos=tinyMCE.getAbsPosition(node),cvp,p,cwin;if(pos.absLeft<vp.left||pos.absLeft>vp.left+vp.width||pos.absTop<vp.top||pos.absTop>vp.top+(vp.height-25))w.scrollTo(pos.absLeft,pos.absTop-vp.height+25);if(inst.settings.auto_resize){cwin=inst.getContainerWin();cvp=tinyMCE.getViewPort(cwin);p=this.getAbsPosition(node);if(p.absLeft<cvp.left||p.absLeft>cvp.left+cvp.width||p.absTop<cvp.top||p.absTop>cvp.top+cvp.height)cwin.scrollTo(p.absLeft,p.absTop-cvp.height+25)}},getAbsPosition:function(n){var pos=tinyMCE.getAbsPosition(n),ipos=tinyMCE.getAbsPosition(this.instance.iframeElement);return{absLeft:ipos.absLeft+pos.absLeft,absTop:ipos.absTop+pos.absTop}},getSel:function(){var inst=this.instance;if(tinyMCE.isRealIE)return inst.getDoc().selection;return inst.contentWindow.getSelection()},getRng:function(){var s=this.getSel();if(s==null)return null;if(tinyMCE.isRealIE)return s.createRange();if(tinyMCE.isSafari&&!s.getRangeAt)return''+window.getSelection();if(s.rangeCount>0)return s.getRangeAt(0);return null},isCollapsed:function(){var r=this.getRng();if(r.item)return false;return r.boundingWidth==0||this.getSel().isCollapsed},collapse:function(b){var r=this.getRng(),s=this.getSel();if(r.select){r.collapse(b);r.select()}else{if(b)s.collapseToStart();else s.collapseToEnd()}},getFocusElement:function(){var inst=this.instance,doc,rng,sel,elm;if(tinyMCE.isRealIE){doc=inst.getDoc();rng=doc.selection.createRange();elm=rng.item?rng.item(0):rng.parentElement()}else{if(!tinyMCE.isSafari&&inst.isHidden())return inst.getBody();sel=this.getSel();rng=this.getRng();if(!sel||!rng)return null;elm=rng.commonAncestorContainer;if(!rng.collapsed){if(rng.startContainer==rng.endContainer){if(rng.startOffset-rng.endOffset<2){if(rng.startContainer.hasChildNodes())elm=rng.startContainer.childNodes[rng.startOffset]}}}elm=tinyMCE.getParentElement(elm);}return elm}};function TinyMCE_UndoRedo(inst){this.instance=inst;this.undoLevels=[];this.undoIndex=0;this.typingUndoIndex=-1;this.undoRedo=true};TinyMCE_UndoRedo.prototype={add:function(l){var b,customUndoLevels,newHTML,inst=this.instance,i,ul,ur;if(l){this.undoLevels[this.undoLevels.length]=l;return true}if(this.typingUndoIndex!=-1){this.undoIndex=this.typingUndoIndex;if(tinyMCE.typingUndoIndex!=-1)tinyMCE.undoIndex=tinyMCE.typingUndoIndex}newHTML=tinyMCE.trim(inst.getBody().innerHTML);if(this.undoLevels[this.undoIndex]&&newHTML!=this.undoLevels[this.undoIndex].content){inst.isNotDirty=false;tinyMCE.dispatchCallback(inst,'onchange_callback','onChange',inst);customUndoLevels=tinyMCE.settings.custom_undo_redo_levels;if(customUndoLevels!=-1&&this.undoLevels.length>customUndoLevels){for(i=0;i<this.undoLevels.length-1;i++)this.undoLevels[i]=this.undoLevels[i+1];this.undoLevels.length--;this.undoIndex--;}b=inst.undoBookmark;if(!b)b=inst.selection.getBookmark();this.undoIndex++;this.undoLevels[this.undoIndex]={content:newHTML,bookmark:b};ul=tinyMCE.undoLevels;for(i=tinyMCE.undoIndex+1;i<ul.length;i++){ur=ul[i].undoRedo;if(ur.undoIndex==ur.undoLevels.length-1)ur.undoIndex--;ur.undoLevels.length--}tinyMCE.undoLevels[tinyMCE.undoIndex++]=inst;tinyMCE.undoLevels.length=tinyMCE.undoIndex;this.undoLevels.length=this.undoIndex+1;return true}return false},undo:function(){var inst=this.instance;if(this.undoIndex>0){this.undoIndex--;tinyMCE.setInnerHTML(inst.getBody(),this.undoLevels[this.undoIndex].content);inst.repaint();if(inst.settings.custom_undo_redo_restore_selection)inst.selection.moveToBookmark(this.undoLevels[this.undoIndex].bookmark)}},redo:function(){var inst=this.instance;tinyMCE.execCommand("mceEndTyping");if(this.undoIndex<(this.undoLevels.length-1)){this.undoIndex++;tinyMCE.setInnerHTML(inst.getBody(),this.undoLevels[this.undoIndex].content);inst.repaint();if(inst.settings.custom_undo_redo_restore_selection)inst.selection.moveToBookmark(this.undoLevels[this.undoIndex].bookmark)}tinyMCE.triggerNodeChange()}};var TinyMCE_ForceParagraphs={_insertPara:function(inst,e){var doc=inst.getDoc(),sel=inst.getSel(),body=inst.getBody(),win=inst.contentWindow,rng=sel.getRangeAt(0);var rootElm=doc.documentElement,blockName="P",startNode,endNode,startBlock,endBlock;var rngBefore,rngAfter,direct,startNode,startOffset,endNode,endOffset,b=tinyMCE.isOpera?inst.selection.getBookmark():null;var paraBefore,paraAfter,startChop,endChop,contents,i;function isEmpty(para){var nodes;function isEmptyHTML(html){return html.replace(new RegExp('[ \t\r\n]+','g'),'').toLowerCase()==''}if(para.getElementsByTagName("img").length>0)return false;if(para.getElementsByTagName("table").length>0)return false;if(para.getElementsByTagName("hr").length>0)return false;nodes=tinyMCE.getNodeTree(para,[],3);for(i=0;i<nodes.length;i++){if(!isEmptyHTML(nodes[i].nodeValue))return false}return true}rngBefore=doc.createRange();rngBefore.setStart(sel.anchorNode,sel.anchorOffset);rngBefore.collapse(true);rngAfter=doc.createRange();rngAfter.setStart(sel.focusNode,sel.focusOffset);rngAfter.collapse(true);direct=rngBefore.compareBoundaryPoints(rngBefore.START_TO_END,rngAfter)<0;startNode=direct?sel.anchorNode:sel.focusNode;startOffset=direct?sel.anchorOffset:sel.focusOffset;endNode=direct?sel.focusNode:sel.anchorNode;endOffset=direct?sel.focusOffset:sel.anchorOffset;startNode=startNode.nodeName=="HTML"?doc.body:startNode;startNode=startNode.nodeName=="BODY"?startNode.firstChild:startNode;endNode=endNode.nodeName=="BODY"?endNode.firstChild:endNode;startBlock=inst.getParentBlockElement(startNode);endBlock=inst.getParentBlockElement(endNode);if(startBlock&&(startBlock.nodeName=='CAPTION'||/absolute|relative|static/gi.test(startBlock.style.position)))startBlock=null;if(endBlock&&(endBlock.nodeName=='CAPTION'||/absolute|relative|static/gi.test(endBlock.style.position)))endBlock=null;if(startBlock!=null){blockName=startBlock.nodeName;if(/(TD|TABLE|TH|CAPTION)/.test(blockName)||(blockName=="DIV"&&/left|right/gi.test(startBlock.style.cssFloat)))blockName="P"}if(tinyMCE.getParentElement(startBlock,"OL,UL",null,body)!=null)return false;if((startBlock!=null&&startBlock.nodeName=="TABLE")||(endBlock!=null&&endBlock.nodeName=="TABLE"))startBlock=endBlock=null;paraBefore=(startBlock!=null&&startBlock.nodeName==blockName)?startBlock.cloneNode(false):doc.createElement(blockName);paraAfter=(endBlock!=null&&endBlock.nodeName==blockName)?endBlock.cloneNode(false):doc.createElement(blockName);if(/^(H[1-6])$/.test(blockName))paraAfter=doc.createElement("p");startChop=startNode;endChop=endNode;node=startChop;do{if(node==body||node.nodeType==9||tinyMCE.isBlockElement(node))break;startChop=node}while((node=node.previousSibling?node.previousSibling:node.parentNode));node=endChop;do{if(node==body||node.nodeType==9||tinyMCE.isBlockElement(node))break;endChop=node}while((node=node.nextSibling?node.nextSibling:node.parentNode));if(startChop.nodeName=="TD")startChop=startChop.firstChild;if(endChop.nodeName=="TD")endChop=endChop.lastChild;if(startBlock==null){rng.deleteContents();if(!tinyMCE.isSafari)sel.removeAllRanges();if(startChop!=rootElm&&endChop!=rootElm){rngBefore=rng.cloneRange();if(startChop==body)rngBefore.setStart(startChop,0);else rngBefore.setStartBefore(startChop);paraBefore.appendChild(rngBefore.cloneContents());if(endChop.parentNode.nodeName==blockName)endChop=endChop.parentNode;rng.setEndAfter(endChop);if(endChop.nodeName!="#text"&&endChop.nodeName!="BODY")rngBefore.setEndAfter(endChop);contents=rng.cloneContents();if(contents.firstChild&&(contents.firstChild.nodeName==blockName||contents.firstChild.nodeName=="BODY"))paraAfter.innerHTML=contents.firstChild.innerHTML;else paraAfter.appendChild(contents);if(isEmpty(paraBefore))paraBefore.innerHTML=" ";if(isEmpty(paraAfter))paraAfter.innerHTML=" ";rng.deleteContents();rngAfter.deleteContents();rngBefore.deleteContents();if(tinyMCE.isOpera){paraBefore.normalize();rngBefore.insertNode(paraBefore);paraAfter.normalize();rngBefore.insertNode(paraAfter)}else{paraAfter.normalize();rngBefore.insertNode(paraAfter);paraBefore.normalize();rngBefore.insertNode(paraBefore)}}else{body.innerHTML="<"+blockName+"> </"+blockName+"><"+blockName+"> </"+blockName+">";paraAfter=body.childNodes[1]}inst.selection.moveToBookmark(b);inst.selection.selectNode(paraAfter,true,true);return true}if(startChop.nodeName==blockName)rngBefore.setStart(startChop,0);else rngBefore.setStartBefore(startChop);rngBefore.setEnd(startNode,startOffset);paraBefore.appendChild(rngBefore.cloneContents());rngAfter.setEndAfter(endChop);rngAfter.setStart(endNode,endOffset);contents=rngAfter.cloneContents();if(contents.firstChild&&contents.firstChild.nodeName==blockName){paraAfter.innerHTML=contents.firstChild.innerHTML}else paraAfter.appendChild(contents);if(isEmpty(paraBefore))paraBefore.innerHTML=" ";if(isEmpty(paraAfter))paraAfter.innerHTML=" ";rng=doc.createRange();if(!startChop.previousSibling&&startChop.parentNode.nodeName.toUpperCase()==blockName){rng.setStartBefore(startChop.parentNode)}else{if(rngBefore.startContainer.nodeName.toUpperCase()==blockName&&rngBefore.startOffset==0)rng.setStartBefore(rngBefore.startContainer);else rng.setStart(rngBefore.startContainer,rngBefore.startOffset)}if(!endChop.nextSibling&&endChop.parentNode.nodeName.toUpperCase()==blockName)rng.setEndAfter(endChop.parentNode);else rng.setEnd(rngAfter.endContainer,rngAfter.endOffset);rng.deleteContents();if(tinyMCE.isOpera){rng.insertNode(paraBefore);rng.insertNode(paraAfter)}else{rng.insertNode(paraAfter);rng.insertNode(paraBefore)}paraAfter.normalize();paraBefore.normalize();inst.selection.moveToBookmark(b);inst.selection.selectNode(paraAfter,true,true);return true},_handleBackSpace:function(inst){var r=inst.getRng(),sn=r.startContainer,nv,s=false;if(sn&&sn.nextSibling&&sn.nextSibling.nodeName=="BR"&&sn.parentNode.nodeName!="BODY"){nv=sn.nodeValue;if(nv!=null&&r.startOffset==nv.length)sn.nextSibling.parentNode.removeChild(sn.nextSibling)}if(inst.settings.auto_resize)inst.resizeToContent();return s}};function TinyMCE_Layer(id,bm){this.id=id;this.blockerElement=null;this.events=false;this.element=null;this.blockMode=typeof(bm)!='undefined'?bm:true;this.doc=document};TinyMCE_Layer.prototype={moveRelativeTo:function(re,p){var rep=this.getAbsPosition(re),e=this.getElement(),x,y;var w=parseInt(re.offsetWidth),h=parseInt(re.offsetHeight);var ew=parseInt(e.offsetWidth),eh=parseInt(e.offsetHeight);switch(p){case"tl":x=rep.absLeft;y=rep.absTop;break;case"tr":x=rep.absLeft+w;y=rep.absTop;break;case"bl":x=rep.absLeft;y=rep.absTop+h;break;case"br":x=rep.absLeft+w;y=rep.absTop+h;break;case"cc":x=rep.absLeft+(w/ 2) - (ew /2);y=rep.absTop+(h/ 2) - (eh /2);break}this.moveTo(x,y)},moveBy:function(x,y){var e=this.getElement();this.moveTo(parseInt(e.style.left)+x,parseInt(e.style.top)+y)},moveTo:function(x,y){var e=this.getElement();e.style.left=x+"px";e.style.top=y+"px";this.updateBlocker()},resizeBy:function(w,h){var e=this.getElement();this.resizeTo(parseInt(e.style.width)+w,parseInt(e.style.height)+h)},resizeTo:function(w,h){var e=this.getElement();if(w!=null)e.style.width=w+"px";if(h!=null)e.style.height=h+"px";this.updateBlocker()},show:function(){var el=this.getElement();if(el){el.style.display='block';this.updateBlocker()}},hide:function(){var el=this.getElement();if(el){el.style.display='none';this.updateBlocker()}},isVisible:function(){return this.getElement().style.display=='block'},getElement:function(){if(!this.element)this.element=this.doc.getElementById(this.id);return this.element},setBlockMode:function(s){this.blockMode=s},updateBlocker:function(){var e,b,x,y,w,h;b=this.getBlocker();if(b){if(this.blockMode){e=this.getElement();x=this.parseInt(e.style.left);y=this.parseInt(e.style.top);w=this.parseInt(e.offsetWidth);h=this.parseInt(e.offsetHeight);b.style.left=x+'px';b.style.top=y+'px';b.style.width=w+'px';b.style.height=h+'px';b.style.display=e.style.display}else b.style.display='none'}},getBlocker:function(){var d,b;if(!this.blockerElement&&this.blockMode){d=this.doc;b=d.getElementById(this.id+"_blocker");if(!b){b=d.createElement("iframe");b.setAttribute('id',this.id+"_blocker");b.style.cssText='display: none; position: absolute; left: 0; top: 0';b.src='javascript:false;';b.frameBorder='0';b.scrolling='no';d.body.appendChild(b)}this.blockerElement=b}return this.blockerElement},getAbsPosition:function(n){var p={absLeft:0,absTop:0};while(n){p.absLeft+=n.offsetLeft;p.absTop+=n.offsetTop;n=n.offsetParent}return p},create:function(n,c,p,h){var d=this.doc,e=d.createElement(n);e.setAttribute('id',this.id);if(c)e.className=c;if(!p)p=d.body;if(h)e.innerHTML=h;p.appendChild(e);return this.element=e},exists:function(){return this.doc.getElementById(this.id)!=null},parseInt:function(s){if(s==null||s=='')return 0;return parseInt(s)},remove:function(){var e=this.getElement(),b=this.getBlocker();if(e)e.parentNode.removeChild(e);if(b)b.parentNode.removeChild(b)}};function TinyMCE_Menu(){var id;if(typeof(tinyMCE.menuCounter)=="undefined")tinyMCE.menuCounter=0;id="mc_menu_"+tinyMCE.menuCounter++;TinyMCE_Layer.call(this,id,true);this.id=id;this.items=[];this.needsUpdate=true};TinyMCE_Menu.prototype=tinyMCE.extend(TinyMCE_Layer.prototype,{init:function(s){var n;this.settings={separator_class:'mceMenuSeparator',title_class:'mceMenuTitle',disabled_class:'mceMenuDisabled',menu_class:'mceMenu',drop_menu:true};for(n in s)this.settings[n]=s[n];this.create('div',this.settings.menu_class)},clear:function(){this.items=[]},addTitle:function(t){this.add({type:'title',text:t})},addDisabled:function(t){this.add({type:'disabled',text:t})},addSeparator:function(){this.add({type:'separator'})},addItem:function(t,js){this.add({text:t,js:js})},add:function(mi){this.items[this.items.length]=mi;this.needsUpdate=true},update:function(){var e=this.getElement(),h='',i,t,m=this.items,s=this.settings;if(this.settings.drop_menu)h+='<span class="mceMenuLine"></span>';h+='<table border="0" cellpadding="0" cellspacing="0">';for(i=0;i<m.length;i++){t=tinyMCE.xmlEncode(m[i].text);c=m[i].class_name?' class="'+m[i].class_name+'"':'';switch(m[i].type){case'separator':h+='<tr class="'+s.separator_class+'"><td>';break;case'title':h+='<tr class="'+s.title_class+'"><td><span'+c+'>'+t+'</span>';break;case'disabled':h+='<tr class="'+s.disabled_class+'"><td><span'+c+'>'+t+'</span>';break;default:h+='<tr><td><a href="'+tinyMCE.xmlEncode(m[i].js)+'" onmousedown="'+tinyMCE.xmlEncode(m[i].js)+';return tinyMCE.cancelEvent(event);" onclick="return tinyMCE.cancelEvent(event);" onmouseup="return tinyMCE.cancelEvent(event);"><span'+c+'>'+t+'</span></a>'}h+='</td></tr>'}h+='</table>';e.innerHTML=h;this.needsUpdate=false;this.updateBlocker()},show:function(){var nl,i;if(tinyMCE.lastMenu==this)return;if(this.needsUpdate)this.update();if(tinyMCE.lastMenu&&tinyMCE.lastMenu!=this)tinyMCE.lastMenu.hide();TinyMCE_Layer.prototype.show.call(this);if(!tinyMCE.isOpera){}tinyMCE.lastMenu=this}});tinyMCE.add(TinyMCE_Engine,{debug:function(){var m="",a,i,l=tinyMCE.log.length;for(i=0,a=this.debug.arguments;i<a.length;i++){m+=a[i];if(i<a.length-1)m+=', '}if(l<1000)tinyMCE.log[l]="[debug] "+m}}); |
| | | var tinymce={majorVersion:'3',minorVersion:'0.6.2',releaseDate:'2008-04-07',_init:function(){var t=this,ua=navigator.userAgent,i,nl,n,base;t.isOpera=window.opera&&opera.buildNumber;t.isWebKit=/WebKit/.test(ua);t.isOldWebKit=t.isWebKit&&!window.getSelection().getRangeAt;t.isIE=!t.isWebKit&&!t.isOpera&&(/MSIE/gi).test(ua)&&(/Explorer/gi).test(navigator.appName);t.isIE6=t.isIE&&/MSIE [56]/.test(ua);t.isGecko=!t.isWebKit&&/Gecko/.test(ua);t.isMac=ua.indexOf('Mac')!=-1;if(window.tinyMCEPreInit){t.suffix=tinyMCEPreInit.suffix;t.baseURL=tinyMCEPreInit.base;return;}t.suffix='';nl=document.getElementsByTagName('base');for(i=0;i<nl.length;i++){if(nl[i].href)base=nl[i].href;}function getBase(n){if(n.src&&/tiny_mce(|_dev|_src|_gzip|_jquery|_prototype).js/.test(n.src)){if(/_(src|dev)\.js/g.test(n.src))t.suffix='_src';t.baseURL=n.src.substring(0,n.src.lastIndexOf('/'));if(base&&t.baseURL.indexOf('://')==-1)t.baseURL=base+t.baseURL;return t.baseURL;}return null;};nl=document.getElementsByTagName('script');for(i=0;i<nl.length;i++){if(getBase(nl[i]))return;}n=document.getElementsByTagName('head')[0];if(n){nl=n.getElementsByTagName('script');for(i=0;i<nl.length;i++){if(getBase(nl[i]))return;}}return;},is:function(o,t){var n=typeof(o);if(!t)return n!='undefined';if(t=='array'&&(o instanceof Array))return true;return n==t;},each:function(o,cb,s){var n,l;if(!o)return 0;s=s||o;if(typeof(o.length)!='undefined'){for(n=0,l=o.length;n<l;n++){if(cb.call(s,o[n],n,o)===false)return 0;}}else{for(n in o){if(o.hasOwnProperty(n)){if(cb.call(s,o[n],n,o)===false)return 0;}}}return 1;},map:function(a,f){var o=[];tinymce.each(a,function(v){o.push(f(v));});return o;},grep:function(a,f){var o=[];tinymce.each(a,function(v){if(!f||f(v))o.push(v);});return o;},inArray:function(a,v){var i,l;if(a){for(i=0,l=a.length;i<l;i++){if(a[i]===v)return i;}}return-1;},extend:function(o,e){var i,a=arguments;for(i=1;i<a.length;i++){e=a[i];tinymce.each(e,function(v,n){if(typeof(v)!=='undefined')o[n]=v;});}return o;},trim:function(s){return(s?''+s:'').replace(/^\s*|\s*$/g,'');},create:function(s,p){var t=this,sp,ns,cn,scn,c,de=0;s=/^((static) )?([\w.]+)(:([\w.]+))?/.exec(s);cn=s[3].match(/(^|\.)(\w+)$/i)[2];ns=t.createNS(s[3].replace(/\.\w+$/,''));if(ns[cn])return;if(s[2]=='static'){ns[cn]=p;if(this.onCreate)this.onCreate(s[2],s[3],ns[cn]);return;}if(!p[cn]){p[cn]=function(){};de=1;}ns[cn]=p[cn];t.extend(ns[cn].prototype,p);if(s[5]){sp=t.resolve(s[5]).prototype;scn=s[5].match(/\.(\w+)$/i)[1];c=ns[cn];if(de){ns[cn]=function(){return sp[scn].apply(this,arguments);};}else{ns[cn]=function(){this.parent=sp[scn];return c.apply(this,arguments);};}ns[cn].prototype[cn]=ns[cn];t.each(sp,function(f,n){ns[cn].prototype[n]=sp[n];});t.each(p,function(f,n){if(sp[n]){ns[cn].prototype[n]=function(){this.parent=sp[n];return f.apply(this,arguments);};}else{if(n!=cn)ns[cn].prototype[n]=f;}});}t.each(p['static'],function(f,n){ns[cn][n]=f;});if(this.onCreate)this.onCreate(s[2],s[3],ns[cn].prototype);},walk:function(o,f,n,s){s=s||this;if(o){if(n)o=o[n];tinymce.each(o,function(o,i){if(f.call(s,o,i,n)===false)return false;tinymce.walk(o,f,n,s);});}},createNS:function(n,o){var i,v;o=o||window;n=n.split('.');for(i=0;i<n.length;i++){v=n[i];if(!o[v])o[v]={};o=o[v];}return o;},resolve:function(n,o){var i,l;o=o||window;n=n.split('.');for(i=0,l=n.length;i<l;i++){o=o[n[i]];if(!o)break;}return o;},addUnload:function(f,s){var t=this,w=window,unload;f={func:f,scope:s||this};if(!t.unloads){unload=function(){var li=t.unloads,o,n;for(n in li){o=li[n];if(o&&o.func)o.func.call(o.scope,1);}if(w.detachEvent)w.detachEvent('onunload',unload);else if(w.removeEventListener)w.removeEventListener('unload',unload,false);o=li=w=unload=null;if(window.CollectGarbage)window.CollectGarbage();};if(w.attachEvent)w.attachEvent('onunload',unload);else if(w.addEventListener)w.addEventListener('unload',unload,false);t.unloads=[f];}else t.unloads.push(f);return f;},removeUnload:function(f){var u=this.unloads,r=null;tinymce.each(u,function(o,i){if(o&&o.func==f){u.splice(i,1);r=f;return false;}});return r;},explode:function(s,d){return tinymce.map(s.split(d||','),tinymce.trim);}};window.tinymce=tinymce;tinymce._init();tinymce.create('tinymce.util.Dispatcher',{scope:null,listeners:null,Dispatcher:function(s){this.scope=s||this;this.listeners=[];},add:function(cb,s){this.listeners.push({cb:cb,scope:s||this.scope});return cb;},addToTop:function(cb,s){this.listeners.unshift({cb:cb,scope:s||this.scope});return cb;},remove:function(cb){var l=this.listeners,o=null;tinymce.each(l,function(c,i){if(cb==c.cb){o=cb;l.splice(i,1);return false;}});return o;},dispatch:function(){var s,a=arguments,i,li=this.listeners,c;for(i=0;i<li.length;i++){c=li[i];s=c.cb.apply(c.scope,a);if(s===false)break;}return s;}});(function(){var each=tinymce.each;tinymce.create('tinymce.util.URI',{URI:function(u,s){var t=this,o,a,b;s=t.settings=s||{};if(/^(mailto|news|javascript|about):/i.test(u)||/^\s*#/.test(u)){t.source=u;return;}if(u.indexOf('/')===0&&u.indexOf('//')!==0)u=(s.base_uri?s.base_uri.protocol||'http':'http')+'://mce_host'+u;if(u.indexOf('://')===-1&&u.indexOf('//')!==0)u=(s.base_uri.protocol||'http')+'://mce_host'+t.toAbsPath(s.base_uri.path,u);u=u.replace(/@@/g,'(mce_at)');u=/^(?:(?![^:@]+:[^:@\/]*@)([^:\/?#.]+):)?(?:\/\/)?((?:(([^:@]*):?([^:@]*))?@)?([^:\/?#]*)(?::(\d*))?)(((\/(?:[^?#](?![^?#\/]*\.[^?#\/.]+(?:[?#]|$)))*\/?)?([^?#\/]*))(?:\?([^#]*))?(?:#(.*))?)/.exec(u);each(["source","protocol","authority","userInfo","user","password","host","port","relative","path","directory","file","query","anchor"],function(v,i){var s=u[i];if(s)s=s.replace(/\(mce_at\)/g,'@@');t[v]=s;});if(b=s.base_uri){if(!t.protocol)t.protocol=b.protocol;if(!t.userInfo)t.userInfo=b.userInfo;if(!t.port&&t.host=='mce_host')t.port=b.port;if(!t.host||t.host=='mce_host')t.host=b.host;t.source='';}},setPath:function(p){var t=this;p=/^(.*?)\/?(\w+)?$/.exec(p);t.path=p[0];t.directory=p[1];t.file=p[2];t.source='';t.getURI();},toRelative:function(u){var t=this,o;u=new tinymce.util.URI(u,{base_uri:t});if((u.host!='mce_host'&&t.host!=u.host&&u.host)||t.port!=u.port||t.protocol!=u.protocol)return u.getURI();o=t.toRelPath(t.path,u.path);if(u.query)o+='?'+u.query;if(u.anchor)o+='#'+u.anchor;return o;},toAbsolute:function(u,nh){var u=new tinymce.util.URI(u,{base_uri:this});return u.getURI(this.host==u.host?nh:0);},toRelPath:function(base,path){var items,bp=0,out='',i;base=base.substring(0,base.lastIndexOf('/'));base=base.split('/');items=path.split('/');if(base.length>=items.length){for(i=0;i<base.length;i++){if(i>=items.length||base[i]!=items[i]){bp=i+1;break;}}}if(base.length<items.length){for(i=0;i<items.length;i++){if(i>=base.length||base[i]!=items[i]){bp=i+1;break;}}}if(bp==1)return path;for(i=0;i<base.length-(bp-1);i++)out+="../";for(i=bp-1;i<items.length;i++){if(i!=bp-1)out+="/"+items[i];else out+=items[i];}return out;},toAbsPath:function(base,path){var i,nb=0,o=[];base=base.split('/');path=path.split('/');each(base,function(k){if(k)o.push(k);});base=o;for(i=path.length-1,o=[];i>=0;i--){if(path[i].length==0||path[i]==".")continue;if(path[i]=='..'){nb++;continue;}if(nb>0){nb--;continue;}o.push(path[i]);}i=base.length-nb;if(i<=0)return'/'+o.reverse().join('/');return'/'+base.slice(0,i).join('/')+'/'+o.reverse().join('/');},getURI:function(nh){var s,t=this;if(!t.source||nh){s='';if(!nh){if(t.protocol)s+=t.protocol+'://';if(t.userInfo)s+=t.userInfo+'@';if(t.host)s+=t.host;if(t.port)s+=':'+t.port;}if(t.path)s+=t.path;if(t.query)s+='?'+t.query;if(t.anchor)s+='#'+t.anchor;t.source=s;}return t.source;}});})();(function(){var each=tinymce.each;tinymce.create('static tinymce.util.Cookie',{getHash:function(n){var v=this.get(n),h;if(v){each(v.split('&'),function(v){v=v.split('=');h=h||{};h[unescape(v[0])]=unescape(v[1]);});}return h;},setHash:function(n,v,e,p,d,s){var o='';each(v,function(v,k){o+=(!o?'':'&')+escape(k)+'='+escape(v);});this.set(n,o,e,p,d,s);},get:function(n){var c=document.cookie,e,p=n+"=",b;if(!c)return;b=c.indexOf("; "+p);if(b==-1){b=c.indexOf(p);if(b!=0)return null;}else b+=2;e=c.indexOf(";",b);if(e==-1)e=c.length;return unescape(c.substring(b+p.length,e));},set:function(n,v,e,p,d,s){document.cookie=n+"="+escape(v)+((e)?"; expires="+e.toGMTString():"")+((p)?"; path="+escape(p):"")+((d)?"; domain="+d:"")+((s)?"; secure":"");},remove:function(n,p){var d=new Date();d.setTime(d.getTime()-1000);this.set(n,'',d,p,d);}});})();tinymce.create('static tinymce.util.JSON',{serialize:function(o){var i,v,s=tinymce.util.JSON.serialize,t;if(o==null)return'null';t=typeof o;if(t=='string'){v='\bb\tt\nn\ff\rr\""\'\'\\\\';return'"'+o.replace(/([\u0080-\uFFFF\x00-\x1f\"\'])/g,function(a,b){i=v.indexOf(b);if(i+1)return'\\'+v.charAt(i+1);a=b.charCodeAt().toString(16);return'\\u'+'0000'.substring(a.length)+a;})+'"';}if(t=='object'){if(o instanceof Array){for(i=0,v='[';i<o.length;i++)v+=(i>0?',':'')+s(o[i]);return v+']';}v='{';for(i in o)v+=typeof o[i]!='function'?(v.length>1?',"':'"')+i+'":'+s(o[i]):'';return v+'}';}return''+o;},parse:function(s){try{return eval('('+s+')');}catch(ex){}}});tinymce.create('static tinymce.util.XHR',{send:function(o){var x,t,w=window,c=0;o.scope=o.scope||this;o.success_scope=o.success_scope||o.scope;o.error_scope=o.error_scope||o.scope;o.async=o.async===false?false:true;o.data=o.data||'';function get(s){x=0;try{x=new ActiveXObject(s);}catch(ex){}return x;};x=w.XMLHttpRequest?new XMLHttpRequest():get('Microsoft.XMLHTTP')||get('Msxml2.XMLHTTP');if(x){if(x.overrideMimeType)x.overrideMimeType(o.content_type);x.open(o.type||(o.data?'POST':'GET'),o.url,o.async);if(o.content_type)x.setRequestHeader('Content-Type',o.content_type);x.send(o.data);t=w.setInterval(function(){if(x.readyState==4||c++>10000){w.clearInterval(t);if(o.success&&c<10000&&x.status==200)o.success.call(o.success_scope,''+x.responseText,x,o);else if(o.error)o.error.call(o.error_scope,c>10000?'TIMED_OUT':'GENERAL',x,o);x=null;}},10);}}});(function(){var extend=tinymce.extend,JSON=tinymce.util.JSON,XHR=tinymce.util.XHR;tinymce.create('tinymce.util.JSONRequest',{JSONRequest:function(s){this.settings=extend({},s);this.count=0;},send:function(o){var ecb=o.error,scb=o.success;o=extend(this.settings,o);o.success=function(c,x){c=JSON.parse(c);if(typeof(c)=='undefined'){c={error:'JSON Parse error.'};}if(c.error)ecb.call(o.error_scope||o.scope,c.error,x);else scb.call(o.success_scope||o.scope,c.result);};o.error=function(ty,x){ecb.call(o.error_scope||o.scope,ty,x);};o.data=JSON.serialize({id:o.id||'c'+(this.count++),method:o.method,params:o.params});o.content_type='application/json';XHR.send(o);},'static':{sendRPC:function(o){return new tinymce.util.JSONRequest().send(o);}}});}());(function(){var each=tinymce.each,is=tinymce.is;var isWebKit=tinymce.isWebKit,isIE=tinymce.isIE;tinymce.create('tinymce.dom.DOMUtils',{doc:null,root:null,files:null,listeners:{},pixelStyles:/^(top|left|bottom|right|width|height|borderWidth)$/,cache:{},idPattern:/^#[\w]+$/,elmPattern:/^[\w_*]+$/,elmClassPattern:/^([\w_]*)\.([\w_]+)$/,DOMUtils:function(d,s){var t=this;t.doc=d;t.win=window;t.files={};t.cssFlicker=false;t.counter=0;t.boxModel=!tinymce.isIE||d.compatMode=="CSS1Compat";t.stdMode=d.documentMode===8;this.settings=s=tinymce.extend({keep_values:false,hex_colors:1,process_html:1},s);if(tinymce.isIE6){try{d.execCommand('BackgroundImageCache',false,true);}catch(e){t.cssFlicker=true;}}tinymce.addUnload(t.destroy,t);},getRoot:function(){var t=this,s=t.settings;return(s&&t.get(s.root_element))||t.doc.body;},getViewPort:function(w){var d,b;w=!w?this.win:w;d=w.document;b=this.boxModel?d.documentElement:d.body;return{x:w.pageXOffset||b.scrollLeft,y:w.pageYOffset||b.scrollTop,w:w.innerWidth||b.clientWidth,h:w.innerHeight||b.clientHeight};},getRect:function(e){var p,t=this,w,h;e=t.get(e);p=t.getPos(e);w=t.getStyle(e,'width');h=t.getStyle(e,'height');if(w.indexOf('px')===-1)w=0;if(h.indexOf('px')===-1)h=0;return{x:p.x,y:p.y,w:parseInt(w)||e.offsetWidth||e.clientWidth,h:parseInt(h)||e.offsetHeight||e.clientHeight};},getParent:function(n,f,r){var na,se=this.settings;n=this.get(n);if(se.strict_root)r=r||this.getRoot();if(is(f,'string')){na=f.toUpperCase();f=function(n){var s=false;if(n.nodeType==1&&na==='*'){s=true;return false;}each(na.split(','),function(v){if(n.nodeType==1&&((se.strict&&n.nodeName.toUpperCase()==v)||n.nodeName==v)){s=true;return false;}});return s;};}while(n){if(n==r)return null;if(f(n))return n;n=n.parentNode;}return null;},get:function(e){var n;if(this.doc&&typeof(e)=='string'){n=e;e=this.doc.getElementById(e);if(e&&e.id!==n)return this.doc.getElementsByName(n)[1];}return e;},select:function(pa,s){var t=this,cs,c,pl,o=[],x,i,l,n;s=t.get(s)||t.doc;if(s.querySelectorAll){if(s!=t.doc){i=s.id;s.id='_mc_tmp';pa='#_mc_tmp '+pa;}l=tinymce.grep(s.querySelectorAll(pa));s.id=i;return l;}if(t.settings.strict){function get(s,n){return s.getElementsByTagName(n.toLowerCase());};}else{function get(s,n){return s.getElementsByTagName(n);};}if(t.elmPattern.test(pa)){x=get(s,pa);for(i=0,l=x.length;i<l;i++)o.push(x[i]);return o;}if(t.elmClassPattern.test(pa)){pl=t.elmClassPattern.exec(pa);x=get(s,pl[1]||'*');c=' '+pl[2]+' ';for(i=0,l=x.length;i<l;i++){n=x[i];if(n.className&&(' '+n.className+' ').indexOf(c)!==-1)o.push(n);}return o;}function collect(n){if(!n.mce_save){n.mce_save=1;o.push(n);}};function collectIE(n){if(!n.getAttribute('mce_save')){n.setAttribute('mce_save','1');o.push(n);}};function find(n,f,r){var i,l,nl=get(r,n);for(i=0,l=nl.length;i<l;i++)f(nl[i]);};each(pa.split(','),function(v,i){v=tinymce.trim(v);if(t.elmPattern.test(v)){each(get(s,v),function(n){collect(n);});return;}if(t.elmClassPattern.test(v)){x=t.elmClassPattern.exec(v);each(get(s,x[1]),function(n){if(t.hasClass(n,x[2]))collect(n);});return;}if(!(cs=t.cache[pa])){cs='x=(function(cf, s) {';pl=v.split(' ');each(pl,function(v){var p=/^([\w\\*]+)?(?:#([\w\\]+))?(?:\.([\w\\\.]+))?(?:\[\@([\w\\]+)([\^\$\*!]?=)([\w\\]+)\])?(?:\:([\w\\]+))?/i.exec(v);p[1]=p[1]||'*';cs+='find("'+p[1]+'", function(n) {';if(p[2])cs+='if (n.id !== "'+p[2]+'") return;';if(p[3]){cs+='var c = " " + n.className + " ";';cs+='if (';c='';each(p[3].split('.'),function(v){if(v)c+=(c?'||':'')+'c.indexOf(" '+v+' ") === -1';});cs+=c+') return;';}});cs+='cf(n);';for(i=pl.length-1;i>=0;i--)cs+='}, '+(i?'n':'s')+');';cs+='})';t.cache[pa]=cs=eval(cs);}cs(isIE?collectIE:collect,s);});each(o,function(n){if(isIE)n.removeAttribute('mce_save');else delete n.mce_save;});return o;},add:function(p,n,a,h,c){var t=this;return this.run(p,function(p){var e,k;e=is(n,'string')?t.doc.createElement(n):n;if(a){for(k in a){if(a.hasOwnProperty(k)&&!is(a[k],'object'))t.setAttrib(e,k,''+a[k]);}if(a.style&&!is(a.style,'string')){each(a.style,function(v,n){t.setStyle(e,n,v);});}}if(h){if(h.nodeType)e.appendChild(h);else t.setHTML(e,h);}return!c?p.appendChild(e):e;});},create:function(n,a,h){return this.add(this.doc.createElement(n),n,a,h,1);},createHTML:function(n,a,h){var o='',t=this,k;o+='<'+n;for(k in a){if(a.hasOwnProperty(k))o+=' '+k+'="'+t.encode(a[k])+'"';}if(tinymce.is(h))return o+'>'+h+'</'+n+'>';return o+' />';},remove:function(n,k){return this.run(n,function(n){var p,g;p=n.parentNode;if(!p)return null;if(k){each(n.childNodes,function(c){p.insertBefore(c.cloneNode(true),n);});}return p.removeChild(n);});},setStyle:function(n,na,v){var t=this;return t.run(n,function(e){var s,i;s=e.style;na=na.replace(/-(\D)/g,function(a,b){return b.toUpperCase();});if(t.pixelStyles.test(na)&&(tinymce.is(v,'number')||/^[\-0-9\.]+$/.test(v)))v+='px';switch(na){case'opacity':if(isIE){s.filter=v===''?'':"alpha(opacity="+(v*100)+")";if(!n.currentStyle||!n.currentStyle.hasLayout)s.display='inline-block';}s[na]=s['-moz-opacity']=s['-khtml-opacity']=v||'';break;case'float':isIE?s.styleFloat=v:s.cssFloat=v;break;default:s[na]=v||'';}if(t.settings.update_styles)t.setAttrib(e,'mce_style');});},getStyle:function(n,na,c){n=this.get(n);if(!n)return false;if(this.doc.defaultView&&c){na=na.replace(/[A-Z]/g,function(a){return'-'+a;});try{return this.doc.defaultView.getComputedStyle(n,null).getPropertyValue(na);}catch(ex){return null;}}na=na.replace(/-(\D)/g,function(a,b){return b.toUpperCase();});if(na=='float')na=isIE?'styleFloat':'cssFloat';if(n.currentStyle&&c)return n.currentStyle[na];return n.style[na];},setStyles:function(e,o){var t=this,s=t.settings,ol;ol=s.update_styles;s.update_styles=0;each(o,function(v,n){t.setStyle(e,n,v);});s.update_styles=ol;if(s.update_styles)t.setAttrib(e,s.cssText);},setAttrib:function(e,n,v){var t=this;if(t.settings.strict)n=n.toLowerCase();return this.run(e,function(e){var s=t.settings;switch(n){case"style":if(s.keep_values){if(v)e.setAttribute('mce_style',v,2);else e.removeAttribute('mce_style',2);}e.style.cssText=v;break;case"class":e.className=v||'';break;case"src":case"href":if(s.keep_values){if(s.url_converter)v=s.url_converter.call(s.url_converter_scope||t,v,n,e);t.setAttrib(e,'mce_'+n,v,2);}break;}if(is(v)&&v!==null&&v.length!==0)e.setAttribute(n,''+v,2);else e.removeAttribute(n,2);});},setAttribs:function(e,o){var t=this;return this.run(e,function(e){each(o,function(v,n){t.setAttrib(e,n,v);});});},getAttrib:function(e,n,dv){var v,t=this;e=t.get(e);if(!e)return false;if(!is(dv))dv="";if(/^(src|href|style|coords)$/.test(n)){v=e.getAttribute("mce_"+n);if(v)return v;}v=e.getAttribute(n,2);if(!v){switch(n){case'class':v=e.className;break;default:if(isIE&&n==='name'&&e.nodeName==='A'){v=e.name;break;}v=e.attributes[n];v=v&&is(v.nodeValue)?v.nodeValue:v;}}switch(n){case'style':v=v||e.style.cssText;if(v){v=t.serializeStyle(t.parseStyle(v));if(t.settings.keep_values)e.setAttribute('mce_style',v);}break;}if(isWebKit&&n==="class"&&v)v=v.replace(/(apple|webkit)\-[a-z\-]+/gi,'');if(isIE){switch(n){case'rowspan':case'colspan':if(v===1)v='';break;case'size':if(v==='+0')v='';break;case'hspace':if(v===-1)v='';break;case'tabindex':if(v===32768)v='';break;case'shape':v=v.toLowerCase();break;default:if(n.indexOf('on')===0&&v)v=(''+v).replace(/^function\s+anonymous\(\)\s+\{\s+(.*)\s+\}$/,'$1');}}return(v&&v!='')?''+v:dv;},getPos:function(n){var t=this,x=0,y=0,e,d=t.doc,r;n=t.get(n);if(n&&isIE){n=n.getBoundingClientRect();e=t.boxModel?d.documentElement:d.body;x=t.getStyle(t.select('html')[0],'borderWidth');x=(x=='medium'||t.boxModel&&!t.isIE6)&&2||x;n.top+=t.win.self!=t.win.top?2:0;return{x:n.left+e.scrollLeft-x,y:n.top+e.scrollTop-x};}r=n;while(r){x+=r.offsetLeft||0;y+=r.offsetTop||0;r=r.offsetParent;}r=n;while(r){if(!/^table-row|inline.*/i.test(t.getStyle(r,"display",1))){x-=r.scrollLeft||0;y-=r.scrollTop||0;}r=r.parentNode;if(r==d.body)break;}return{x:x,y:y};},parseStyle:function(st){var t=this,s=t.settings,o={};if(!st)return o;function compress(p,s,ot){var t,r,b,l;t=o[p+'-top'+s];if(!t)return;r=o[p+'-right'+s];if(t!=r)return;b=o[p+'-bottom'+s];if(r!=b)return;l=o[p+'-left'+s];if(b!=l)return;o[ot]=l;delete o[p+'-top'+s];delete o[p+'-right'+s];delete o[p+'-bottom'+s];delete o[p+'-left'+s];};function compress2(ta,a,b,c){var t;t=o[a];if(!t)return;t=o[b];if(!t)return;t=o[c];if(!t)return;o[ta]=o[a]+' '+o[b]+' '+o[c];delete o[a];delete o[b];delete o[c];};each(st.split(';'),function(v){var sv,ur=[];if(v){v=v.replace(/url\([^\)]+\)/g,function(v){ur.push(v);return'url('+ur.length+')';});v=v.split(':');sv=tinymce.trim(v[1]);sv=sv.replace(/url\(([^\)]+)\)/g,function(a,b){return ur[parseInt(b)-1];});sv=sv.replace(/rgb\([^\)]+\)/g,function(v){return t.toHex(v);});if(s.url_converter){sv=sv.replace(/url\([\'\"]?([^\)\'\"]+)[\'\"]?\)/g,function(x,c){return'url('+t.encode(s.url_converter.call(s.url_converter_scope||t,t.decode(c),'style',null))+')';});}o[tinymce.trim(v[0]).toLowerCase()]=sv;}});compress("border","","border");compress("border","-width","border-width");compress("border","-color","border-color");compress("border","-style","border-style");compress("padding","","padding");compress("margin","","margin");compress2('border','border-width','border-style','border-color');if(isIE){if(o.border=='medium none')o.border='';}return o;},serializeStyle:function(o){var s='';each(o,function(v,k){if(k&&v){switch(k){case'color':case'background-color':v=v.toLowerCase();break;}s+=(s?' ':'')+k+': '+v+';';}});return s;},loadCSS:function(u){var t=this,d=t.doc;if(!u)u='';each(u.split(','),function(u){if(t.files[u])return;t.files[u]=true;t.add(t.select('head')[0],'link',{rel:'stylesheet',href:u});});},addClass:function(e,c){return this.run(e,function(e){var o;if(!c)return 0;if(this.hasClass(e,c))return e.className;o=this.removeClass(e,c);return e.className=(o!=''?(o+' '):'')+c;});},removeClass:function(e,c){var t=this,re;return t.run(e,function(e){var v;if(t.hasClass(e,c)){if(!re)re=new RegExp("(^|\\s+)"+c+"(\\s+|$)","g");v=e.className.replace(re,' ');return e.className=tinymce.trim(v!=' '?v:'');}return e.className;});},hasClass:function(n,c){n=this.get(n);if(!n||!c)return false;return(' '+n.className+' ').indexOf(' '+c+' ')!==-1;},show:function(e){return this.setStyle(e,'display','block');},hide:function(e){return this.setStyle(e,'display','none');},isHidden:function(e){e=this.get(e);return e.style.display=='none'||this.getStyle(e,'display')=='none';},uniqueId:function(p){return(!p?'mce_':p)+(this.counter++);},setHTML:function(e,h){var t=this;return this.run(e,function(e){var x,i,nl,n,p,x;h=t.processHTML(h);if(isIE){function set(){try{e.innerHTML='<br />'+h;e.removeChild(e.firstChild);}catch(ex){while(e.firstChild)e.firstChild.removeNode();x=t.create('div');x.innerHTML='<br />'+h;each(x.childNodes,function(n,i){if(i)e.appendChild(n);});}};if(t.settings.fix_ie_paragraphs)h=h.replace(/<p><\/p>|<p([^>]+)><\/p>|<p[^\/+]\/>/gi,'<p$1 mce_keep="true"> </p>');set();if(t.settings.fix_ie_paragraphs){nl=e.getElementsByTagName("p");for(i=nl.length-1,x=0;i>=0;i--){n=nl[i];if(!n.hasChildNodes()){if(!n.mce_keep){x=1;break;}n.removeAttribute('mce_keep');}}}if(x){h=h.replace(/<p([^>]+)>|<p>/g,'<div$1 mce_tmp="1">');h=h.replace(/<\/p>/g,'</div>');set();if(t.settings.fix_ie_paragraphs){nl=e.getElementsByTagName("DIV");for(i=nl.length-1;i>=0;i--){n=nl[i];if(n.mce_tmp){p=t.doc.createElement('p');n.cloneNode(false).outerHTML.replace(/([a-z0-9\-_]+)=/gi,function(a,b){var v;if(b!=='mce_tmp'){v=n.getAttribute(b);if(!v&&b==='class')v=n.className;p.setAttribute(b,v);}});for(x=0;x<n.childNodes.length;x++)p.appendChild(n.childNodes[x].cloneNode(true));n.swapNode(p);}}}}}else e.innerHTML=h;return h;});},processHTML:function(h){var t=this,s=t.settings;if(!s.process_html)return h;if(tinymce.isGecko){h=h.replace(/<(\/?)strong>|<strong( [^>]+)>/gi,'<$1b$2>');h=h.replace(/<(\/?)em>|<em( [^>]+)>/gi,'<$1i$2>');}h=h.replace(/<a( )([^>]+)\/>|<a\/>/gi,'<a$1$2></a>');if(s.keep_values){if(h.indexOf('<script')!==-1){h=h.replace(/<script>/g,'<script type="text/javascript">');h=h.replace(/<script(|[^>]+)>(\s*<!--|\/\/\s*<\[CDATA\[)?[\r\n]*/g,'<mce:script$1><!--\n');h=h.replace(/\s*(\/\/\s*-->|\/\/\s*]]>)?<\/script>/g,'\n// --></mce:script>');h=h.replace(/<mce:script(|[^>]+)><!--\n\/\/ --><\/mce:script>/g,'<mce:script$1></mce:script>');}h=h.replace(/<([\w:]+) [^>]*(src|href|style|coords)[^>]*>/gi,function(a,n){function handle(m,b,c){var u=c;if(a.indexOf('mce_'+b)!=-1)return m;if(b=='style'){if(s.hex_colors){u=u.replace(/rgb\([^\)]+\)/g,function(v){return t.toHex(v);});}if(s.url_converter){u=u.replace(/url\([\'\"]?([^\)\'\"]+)\)/g,function(x,c){return'url('+t.encode(s.url_converter.call(s.url_converter_scope||t,t.decode(c),b,n))+')';});}}else if(b!='coords'){if(s.url_converter)u=t.encode(s.url_converter.call(s.url_converter_scope||t,t.decode(c),b,n));}return' '+b+'="'+c+'" mce_'+b+'="'+u+'"';};a=a.replace(/ (src|href|style|coords)=[\"]([^\"]+)[\"]/gi,handle);a=a.replace(/ (src|href|style|coords)=[\']([^\']+)[\']/gi,handle);return a.replace(/ (src|href|style|coords)=([^\s\"\'>]+)/gi,handle);});}return h;},getOuterHTML:function(e){var d;e=this.get(e);if(!e)return null;if(isIE)return e.outerHTML;d=(e.ownerDocument||this.doc).createElement("body");d.appendChild(e.cloneNode(true));return d.innerHTML;},setOuterHTML:function(e,h,d){var t=this;return this.run(e,function(e){var n,tp;e=t.get(e);d=d||e.ownerDocument||t.doc;if(isIE&&e.nodeType==1)e.outerHTML=h;else{tp=d.createElement("body");tp.innerHTML=h;n=tp.lastChild;while(n){t.insertAfter(n.cloneNode(true),e);n=n.previousSibling;}t.remove(e);}});},decode:function(s){var e;if(/&[^;]+;/.test(s)){e=this.doc.createElement("div");e.innerHTML=s;return!e.firstChild?s:e.firstChild.nodeValue;}return s;},encode:function(s){return s?(''+s).replace(/[<>&\"]/g,function(c,b){switch(c){case'&':return'&';case'"':return'"';case'<':return'<';case'>':return'>';}return c;}):s;},insertAfter:function(n,r){var t=this;r=t.get(r);return this.run(n,function(n){var p,ns;p=r.parentNode;ns=r.nextSibling;if(ns)p.insertBefore(n,ns);else p.appendChild(n);return n;});},isBlock:function(n){if(n.nodeType&&n.nodeType!==1)return false;n=n.nodeName||n;return/^(H[1-6]|HR|P|DIV|ADDRESS|PRE|FORM|TABLE|LI|OL|UL|TD|CAPTION|BLOCKQUOTE|CENTER|DL|DT|DD|DIR|FIELDSET|FORM|NOSCRIPT|NOFRAMES|MENU|ISINDEX|SAMP)$/.test(n);},replace:function(n,o,k){if(is(o,'array'))n=n.cloneNode(true);return this.run(o,function(o){if(k){each(o.childNodes,function(c){n.appendChild(c.cloneNode(true));});}if(isIE&&o.nodeType===1){o.parentNode.insertBefore(n,o);o.outerHTML='';return n;}return o.parentNode.replaceChild(n,o);});},toHex:function(s){var c=/^\s*rgb\s*?\(\s*?([0-9]+)\s*?,\s*?([0-9]+)\s*?,\s*?([0-9]+)\s*?\)\s*$/i.exec(s);function hex(s){s=parseInt(s).toString(16);return s.length>1?s:'0'+s;};if(c){s='#'+hex(c[1])+hex(c[2])+hex(c[3]);return s;}return s;},getClasses:function(){var t=this,cl=[],i,lo={},f=t.settings.class_filter,ov;if(t.classes)return t.classes;function addClasses(s){each(s.imports,function(r){addClasses(r);});each(s.cssRules||s.rules,function(r){switch(r.type||1){case 1:if(r.selectorText){each(r.selectorText.split(','),function(v){v=v.replace(/^\s*|\s*$|^\s\./g,"");if(/\.mce/.test(v)||!/\.[\w\-]+$/.test(v))return;ov=v;v=v.replace(/.*\.([a-z0-9_\-]+).*/i,'$1');if(f&&!(v=f(v,ov)))return;if(!lo[v]){cl.push({'class':v});lo[v]=1;}});}break;case 3:addClasses(r.styleSheet);break;}});};try{each(t.doc.styleSheets,addClasses);}catch(ex){}if(cl.length>0)t.classes=cl;return cl;},run:function(e,f,s){var t=this,o;if(t.doc&&typeof(e)==='string')e=t.doc.getElementById(e);if(!e)return false;s=s||this;if(!e.nodeType&&(e.length||e.length===0)){o=[];each(e,function(e,i){if(e){if(typeof(e)=='string')e=t.doc.getElementById(e);o.push(f.call(s,e,i));}});return o;}return f.call(s,e);},getAttribs:function(n){var o;n=this.get(n);if(!n)return[];if(isIE){o=[];if(n.nodeName=='OBJECT')return n.attributes;n.cloneNode(false).outerHTML.replace(/([a-z0-9\:\-_]+)=/gi,function(a,b){o.push({specified:1,nodeName:b});});return o;}return n.attributes;},destroy:function(s){var t=this;t.win=t.doc=t.root=null;if(!s)tinymce.removeUnload(t.destroy);}});tinymce.DOM=new tinymce.dom.DOMUtils(document,{process_html:0});})();(function(){var each=tinymce.each,DOM=tinymce.DOM,isIE=tinymce.isIE,isWebKit=tinymce.isWebKit,Event;tinymce.create('static tinymce.dom.Event',{inits:[],events:[],add:function(o,n,f,s){var cb,t=this,el=t.events,r;if(o&&o instanceof Array){r=[];each(o,function(o){o=DOM.get(o);r.push(t.add(o,n,f,s));});return r;}o=DOM.get(o);if(!o)return;cb=function(e){e=e||window.event;if(e&&!e.target&&isIE)e.target=e.srcElement;if(!s)return f(e);return f.call(s,e);};if(n=='unload'){tinymce.unloads.unshift({func:cb});return cb;}if(n=='init'){if(t.domLoaded)cb();else t.inits.push(cb);return cb;}el.push({obj:o,name:n,func:f,cfunc:cb,scope:s});t._add(o,n,cb);return f;},remove:function(o,n,f){var t=this,a=t.events,s=false,r;if(o&&o instanceof Array){r=[];each(o,function(o){o=DOM.get(o);r.push(t.remove(o,n,f));});return r;}o=DOM.get(o);each(a,function(e,i){if(e.obj==o&&e.name==n&&(!f||(e.func==f||e.cfunc==f))){a.splice(i,1);t._remove(o,n,e.cfunc);s=true;return false;}});return s;},clear:function(o){var t=this,a=t.events,i,e;if(o){o=DOM.get(o);for(i=a.length-1;i>=0;i--){e=a[i];if(e.obj===o){t._remove(e.obj,e.name,e.cfunc);e.obj=e.cfunc=null;a.splice(i,1);}}}},cancel:function(e){if(!e)return false;this.stop(e);return this.prevent(e);},stop:function(e){if(e.stopPropagation)e.stopPropagation();else e.cancelBubble=true;return false;},prevent:function(e){if(e.preventDefault)e.preventDefault();else e.returnValue=false;return false;},_unload:function(){var t=Event;each(t.events,function(e,i){t._remove(e.obj,e.name,e.cfunc);e.obj=e.cfunc=null;});t.events=[];t=null;},_add:function(o,n,f){if(o.attachEvent)o.attachEvent('on'+n,f);else if(o.addEventListener)o.addEventListener(n,f,false);else o['on'+n]=f;},_remove:function(o,n,f){if(o){try{if(o.detachEvent)o.detachEvent('on'+n,f);else if(o.removeEventListener)o.removeEventListener(n,f,false);else o['on'+n]=null;}catch(ex){}}},_pageInit:function(){var e=Event;e._remove(window,'DOMContentLoaded',e._pageInit);e.domLoaded=true;each(e.inits,function(c){c();});e.inits=[];},_wait:function(){var t;if(window.tinyMCE_GZ&&tinyMCE_GZ.loaded)return;if(isIE&&document.location.protocol!='https:'){document.write('<script id=__ie_onload defer src=\'javascript:""\';><\/script>');DOM.get("__ie_onload").onreadystatechange=function(){if(this.readyState=="complete"){Event._pageInit();DOM.get("__ie_onload").onreadystatechange=null;}};}else{Event._add(window,'DOMContentLoaded',Event._pageInit,Event);if(isIE||isWebKit){t=setInterval(function(){if(/loaded|complete/.test(document.readyState)){clearInterval(t);Event._pageInit();}},10);}}}});Event=tinymce.dom.Event;Event._wait();tinymce.addUnload(Event._unload);})();(function(){var each=tinymce.each;tinymce.create('tinymce.dom.Element',{Element:function(id,s){var t=this,dom,el;s=s||{};t.id=id;t.dom=dom=s.dom||tinymce.DOM;t.settings=s;if(!tinymce.isIE)el=t.dom.get(t.id);each(['getPos','getRect','getParent','add','setStyle','getStyle','setStyles','setAttrib','setAttribs','getAttrib','addClass','removeClass','hasClass','getOuterHTML','setOuterHTML','remove','show','hide','isHidden','setHTML','get'],function(k){t[k]=function(){var a=arguments,o;if(tinymce.isOpera){a=[id];each(arguments,function(v){a.push(v);});}else Array.prototype.unshift.call(a,el||id);o=dom[k].apply(dom,a);t.update(k);return o;};});},on:function(n,f,s){return tinymce.dom.Event.add(this.id,n,f,s);},getXY:function(){return{x:parseInt(this.getStyle('left')),y:parseInt(this.getStyle('top'))};},getSize:function(){var n=this.dom.get(this.id);return{w:parseInt(this.getStyle('width')||n.clientWidth),h:parseInt(this.getStyle('height')||n.clientHeight)};},moveTo:function(x,y){this.setStyles({left:x,top:y});},moveBy:function(x,y){var p=this.getXY();this.moveTo(p.x+x,p.y+y);},resizeTo:function(w,h){this.setStyles({width:w,height:h});},resizeBy:function(w,h){var s=this.getSize();this.resizeTo(s.w+w,s.h+h);},update:function(k){var t=this,b,dom=t.dom;if(tinymce.isIE6&&t.settings.blocker){k=k||'';if(k.indexOf('get')===0||k.indexOf('has')===0||k.indexOf('is')===0)return;if(k=='remove'){dom.remove(t.blocker);return;}if(!t.blocker){t.blocker=dom.uniqueId();b=dom.add(t.settings.container||dom.getRoot(),'iframe',{id:t.blocker,style:'position:absolute;',frameBorder:0,src:'javascript:""'});dom.setStyle(b,'opacity',0);}else b=dom.get(t.blocker);dom.setStyle(b,'left',t.getStyle('left',1));dom.setStyle(b,'top',t.getStyle('top',1));dom.setStyle(b,'width',t.getStyle('width',1));dom.setStyle(b,'height',t.getStyle('height',1));dom.setStyle(b,'display',t.getStyle('display',1));dom.setStyle(b,'zIndex',parseInt(t.getStyle('zIndex',1)||0)-1);}}});})();(function(){var is=tinymce.is,isIE=tinymce.isIE,each=tinymce.each;tinymce.create('tinymce.dom.Selection',{Selection:function(dom,win,serializer){var t=this;t.dom=dom;t.win=win;t.serializer=serializer;tinymce.addUnload(t.destroy,t);},getContent:function(s){var t=this,r=t.getRng(),e=t.dom.create("body"),se=t.getSel(),wb,wa,n;s=s||{};wb=wa='';s.get=true;s.format=s.format||'html';if(s.format=='text')return t.isCollapsed()?'':(r.text||(se.toString?se.toString():''));if(r.cloneContents){n=r.cloneContents();if(n)e.appendChild(n);}else if(is(r.item)||is(r.htmlText))e.innerHTML=r.item?r.item(0).outerHTML:r.htmlText;else e.innerHTML=r.toString();if(/^\s/.test(e.innerHTML))wb=' ';if(/\s+$/.test(e.innerHTML))wa=' ';s.getInner=true;return t.isCollapsed()?'':wb+t.serializer.serialize(e,s)+wa;},setContent:function(h,s){var t=this,r=t.getRng(),d;s=s||{format:'html'};s.set=true;h=t.dom.processHTML(h);if(r.insertNode){d=t.win.document;if(tinymce.isGecko&&h.indexOf('<')==-1){r.deleteContents();r.insertNode(t.getRng().createContextualFragment(h+'<span id="__caret">_</span>'));t.select(t.dom.get('__caret'));t.getRng().deleteContents();return;}try{if(d.queryCommandEnabled('InsertHTML'))return d.execCommand('InsertHTML',false,h);}catch(ex){r.deleteContents();r.insertNode(t.getRng().createContextualFragment(h));}}else{if(r.item)r.item(0).outerHTML=h;else r.pasteHTML(h);}},getStart:function(){var t=this,r=t.getRng(),e;if(isIE){if(r.item)return r.item(0);r=r.duplicate();r.collapse(1);e=r.parentElement();if(e.nodeName=='BODY')return e.firstChild;return e;}else{e=r.startContainer;if(e.nodeName=='BODY')return e.firstChild;return t.dom.getParent(e,function(n){return n.nodeType==1;});}},getEnd:function(){var t=this,r=t.getRng(),e;if(isIE){if(r.item)return r.item(0);r=r.duplicate();r.collapse(0);e=r.parentElement();if(e.nodeName=='BODY')return e.lastChild;return e;}else{e=r.endContainer;if(e.nodeName=='BODY')return e.lastChild;return t.dom.getParent(e,function(n){return n.nodeType==1;});}},getBookmark:function(si){var t=this,r=t.getRng(),tr,sx,sy,vp=t.dom.getViewPort(t.win),e,sp,bp,le,c=-0xFFFFFF,s,ro=t.dom.getRoot(),wb=0,wa=0,nv;sx=vp.x;sy=vp.y;if(si=='simple')return{rng:r,scrollX:sx,scrollY:sy};if(isIE){if(r.item){e=r.item(0);each(t.dom.select(e.nodeName),function(n,i){if(e==n){sp=i;return false;}});return{tag:e.nodeName,index:sp,scrollX:sx,scrollY:sy};}tr=t.dom.doc.body.createTextRange();tr.moveToElementText(ro);tr.collapse(true);bp=Math.abs(tr.move('character',c));tr=r.duplicate();tr.collapse(true);sp=Math.abs(tr.move('character',c));tr=r.duplicate();tr.collapse(false);le=Math.abs(tr.move('character',c))-sp;return{start:sp-bp,length:le,scrollX:sx,scrollY:sy};}e=t.getNode();s=t.getSel();if(!s)return null;if(e&&e.nodeName=='IMG'){return{scrollX:sx,scrollY:sy};}function getPos(r,sn,en){var w=t.dom.doc.createTreeWalker(r,NodeFilter.SHOW_TEXT,null,false),n,p=0,d={};while((n=w.nextNode())!=null){if(n==sn)d.start=p;if(n==en){d.end=p;return d;}p+=tinymce.trim(n.nodeValue||'').length;}return null;};if(s.anchorNode==s.focusNode&&s.anchorOffset==s.focusOffset){e=getPos(ro,s.anchorNode,s.focusNode);if(!e)return{scrollX:sx,scrollY:sy};(s.anchorNode.nodeValue||'').replace(/^\s+/,function(a){wb=a.length;});return{start:Math.max(e.start+s.anchorOffset-wb,0),end:Math.max(e.end+s.focusOffset-wb,0),scrollX:sx,scrollY:sy,beg:s.anchorOffset-wb==0};}else{e=getPos(ro,r.startContainer,r.endContainer);(r.startContainer.nodeValue||'').replace(/^\s+/,function(a){wb=a.length;});(r.endContainer.nodeValue||'').replace(/^\s+/,function(a){wa=a.length;});if(!e)return{scrollX:sx,scrollY:sy};return{start:Math.max(e.start+r.startOffset-wb,0),end:Math.max(e.end+r.endOffset-wa,0),scrollX:sx,scrollY:sy,beg:r.startOffset-wb==0};}},moveToBookmark:function(b){var t=this,r=t.getRng(),s=t.getSel(),ro=t.dom.getRoot(),sd,nvl,nv;function getPos(r,sp,ep){var w=t.dom.doc.createTreeWalker(r,NodeFilter.SHOW_TEXT,null,false),n,p=0,d={},o,v,wa,wb;while((n=w.nextNode())!=null){wa=wb=0;nv=n.nodeValue||'';nv.replace(/^\s+[^\s]/,function(a){wb=a.length-1;});nv.replace(/[^\s]\s+$/,function(a){wa=a.length-1;});nvl=tinymce.trim(nv).length;p+=nvl;if(p>=sp&&!d.startNode){o=sp-(p-nvl);if(b.beg&&o>=nvl)continue;d.startNode=n;d.startOffset=o+wb;}if(p>=ep){d.endNode=n;d.endOffset=ep-(p-nvl)+wb;return d;}}return null;};if(!b)return false;t.win.scrollTo(b.scrollX,b.scrollY);if(isIE){if(r=b.rng){try{r.select();}catch(ex){}return true;}t.win.focus();if(b.tag){r=ro.createControlRange();each(t.dom.select(b.tag),function(n,i){if(i==b.index)r.addElement(n);});}else{try{if(b.start<0)return true;r=s.createRange();r.moveToElementText(ro);r.collapse(true);r.moveStart('character',b.start);r.moveEnd('character',b.length);}catch(ex2){return true;}}try{r.select();}catch(ex){}return true;}if(!s)return false;if(b.rng){s.removeAllRanges();s.addRange(b.rng);}else{if(is(b.start)&&is(b.end)){try{sd=getPos(ro,b.start,b.end);if(sd){r=t.dom.doc.createRange();r.setStart(sd.startNode,sd.startOffset);r.setEnd(sd.endNode,sd.endOffset);s.removeAllRanges();s.addRange(r);}if(!tinymce.isOpera)t.win.focus();}catch(ex){}}}},select:function(n,c){var t=this,r=t.getRng(),s=t.getSel(),b,fn,ln,d=t.win.document;function first(n){return n?d.createTreeWalker(n,NodeFilter.SHOW_TEXT,null,false).nextNode():null;};function last(n){var c,o,w;if(!n)return null;w=d.createTreeWalker(n,NodeFilter.SHOW_TEXT,null,false);while(c=w.nextNode())o=c;return o;};if(isIE){try{b=d.body;if(/^(IMG|TABLE)$/.test(n.nodeName)){r=b.createControlRange();r.addElement(n);}else{r=b.createTextRange();r.moveToElementText(n);}r.select();}catch(ex){}}else{if(c){fn=first(n);ln=last(n);if(fn&&ln){r=d.createRange();r.setStart(fn,0);r.setEnd(ln,ln.nodeValue.length);}else r.selectNode(n);}else r.selectNode(n);t.setRng(r);}return n;},isCollapsed:function(){var t=this,r=t.getRng(),s=t.getSel();if(!r||r.item)return false;return!s||r.boundingWidth==0||s.isCollapsed;},collapse:function(b){var t=this,r=t.getRng(),n;if(r.item){n=r.item(0);r=this.win.document.body.createTextRange();r.moveToElementText(n);}r.collapse(!!b);t.setRng(r);},getSel:function(){var t=this,w=this.win;return w.getSelection?w.getSelection():w.document.selection;},getRng:function(){var t=this,s=t.getSel(),r;try{if(s)r=s.rangeCount>0?s.getRangeAt(0):(s.createRange?s.createRange():t.win.document.createRange());}catch(ex){}if(!r)r=isIE?t.win.document.body.createTextRange():t.win.document.createRange();return r;},setRng:function(r){var s;if(!isIE){s=this.getSel();if(s){s.removeAllRanges();s.addRange(r);}}else{try{r.select();}catch(ex){}}},setNode:function(n){var t=this;t.setContent(t.dom.getOuterHTML(n));return n;},getNode:function(){var t=this,r=t.getRng(),s=t.getSel(),e;if(!isIE){if(!r)return t.dom.getRoot();e=r.commonAncestorContainer;if(!r.collapsed){if(r.startContainer==r.endContainer||(tinymce.isWebKit&&r.startContainer==r.endContainer.parentNode)){if(r.startOffset-r.endOffset<2||tinymce.isWebKit){if(r.startContainer.hasChildNodes())e=r.startContainer.childNodes[r.startOffset];}}}return t.dom.getParent(e,function(n){return n.nodeType==1;});}return r.item?r.item(0):r.parentElement();},destroy:function(s){var t=this;t.win=null;if(!s)tinymce.removeUnload(t.destroy);}});})();(function(){tinymce.create('tinymce.dom.XMLWriter',{node:null,XMLWriter:function(s){function getXML(){var i=document.implementation;if(!i||!i.createDocument){try{return new ActiveXObject('MSXML2.DOMDocument');}catch(ex){}try{return new ActiveXObject('Microsoft.XmlDom');}catch(ex){}}else return i.createDocument('','',null);};this.doc=getXML();this.valid=tinymce.isOpera||tinymce.isWebKit;this.reset();},reset:function(){var t=this,d=t.doc;if(d.firstChild)d.removeChild(d.firstChild);t.node=d.appendChild(d.createElement("html"));},writeStartElement:function(n){var t=this;t.node=t.node.appendChild(t.doc.createElement(n));},writeAttribute:function(n,v){if(this.valid)v=v.replace(/>/g,'%MCGT%');this.node.setAttribute(n,v);},writeEndElement:function(){this.node=this.node.parentNode;},writeFullEndElement:function(){var t=this,n=t.node;n.appendChild(t.doc.createTextNode(""));t.node=n.parentNode;},writeText:function(v){if(this.valid)v=v.replace(/>/g,'%MCGT%');this.node.appendChild(this.doc.createTextNode(v));},writeCDATA:function(v){this.node.appendChild(this.doc.createCDATA(v));},writeComment:function(v){this.node.appendChild(this.doc.createComment(v));},getContent:function(){var h;h=this.doc.xml||new XMLSerializer().serializeToString(this.doc);h=h.replace(/<\?[^?]+\?>|<html>|<\/html>|<html\/>|<!DOCTYPE[^>]+>/g,'');h=h.replace(/ ?\/>/g,' />');if(this.valid)h=h.replace(/\%MCGT%/g,'>');return h;}});})();(function(){tinymce.create('tinymce.dom.StringWriter',{str:null,tags:null,count:0,settings:null,indent:null,StringWriter:function(s){this.settings=tinymce.extend({indent_char:' ',indentation:1},s);this.reset();},reset:function(){this.indent='';this.str="";this.tags=[];this.count=0;},writeStartElement:function(n){this._writeAttributesEnd();this.writeRaw('<'+n);this.tags.push(n);this.inAttr=true;this.count++;this.elementCount=this.count;},writeAttribute:function(n,v){var t=this;t.writeRaw(" "+t.encode(n)+'="'+t.encode(v)+'"');},writeEndElement:function(){var n;if(this.tags.length>0){n=this.tags.pop();if(this._writeAttributesEnd(1))this.writeRaw('</'+n+'>');if(this.settings.indentation>0)this.writeRaw('\n');}},writeFullEndElement:function(){if(this.tags.length>0){this._writeAttributesEnd();this.writeRaw('</'+this.tags.pop()+'>');if(this.settings.indentation>0)this.writeRaw('\n');}},writeText:function(v){this._writeAttributesEnd();this.writeRaw(this.encode(v));this.count++;},writeCDATA:function(v){this._writeAttributesEnd();this.writeRaw('<![CDATA['+v+']]>');this.count++;},writeComment:function(v){this._writeAttributesEnd();this.writeRaw('<!-- '+v+'-->');this.count++;},writeRaw:function(v){this.str+=v;},encode:function(s){return s.replace(/[<>&"]/g,function(v){switch(v){case'<':return'<';case'>':return'>';case'&':return'&';case'"':return'"';}return v;});},getContent:function(){return this.str;},_writeAttributesEnd:function(s){if(!this.inAttr)return;this.inAttr=false;if(s&&this.elementCount==this.count){this.writeRaw(' />');return false;}this.writeRaw('>');return true;}});})();(function(){var extend=tinymce.extend,each=tinymce.each,Dispatcher=tinymce.util.Dispatcher,isIE=tinymce.isIE,isGecko=tinymce.isGecko;function getIEAtts(n){var o=[];if(n.nodeName=='OBJECT')return n.attributes;n.cloneNode(false).outerHTML.replace(/([a-z0-9\:\-_]+)=/gi,function(a,b){o.push({specified:1,nodeName:b});});return o;};function wildcardToRE(s){return s.replace(/([?+*])/g,'.$1');};tinymce.create('tinymce.dom.Serializer',{Serializer:function(s){var t=this;t.key=0;t.onPreProcess=new Dispatcher(t);t.onPostProcess=new Dispatcher(t);if(tinymce.relaxedDomain&&tinymce.isGecko){t.writer=new tinymce.dom.StringWriter();}else{try{t.writer=new tinymce.dom.XMLWriter();}catch(ex){t.writer=new tinymce.dom.StringWriter();}}t.settings=s=extend({dom:tinymce.DOM,valid_nodes:0,node_filter:0,attr_filter:0,invalid_attrs:/^(mce_|_moz_)/,closed:/(br|hr|input|meta|img|link|param)/,entity_encoding:'named',entities:'160,nbsp,161,iexcl,162,cent,163,pound,164,curren,165,yen,166,brvbar,167,sect,168,uml,169,copy,170,ordf,171,laquo,172,not,173,shy,174,reg,175,macr,176,deg,177,plusmn,178,sup2,179,sup3,180,acute,181,micro,182,para,183,middot,184,cedil,185,sup1,186,ordm,187,raquo,188,frac14,189,frac12,190,frac34,191,iquest,192,Agrave,193,Aacute,194,Acirc,195,Atilde,196,Auml,197,Aring,198,AElig,199,Ccedil,200,Egrave,201,Eacute,202,Ecirc,203,Euml,204,Igrave,205,Iacute,206,Icirc,207,Iuml,208,ETH,209,Ntilde,210,Ograve,211,Oacute,212,Ocirc,213,Otilde,214,Ouml,215,times,216,Oslash,217,Ugrave,218,Uacute,219,Ucirc,220,Uuml,221,Yacute,222,THORN,223,szlig,224,agrave,225,aacute,226,acirc,227,atilde,228,auml,229,aring,230,aelig,231,ccedil,232,egrave,233,eacute,234,ecirc,235,euml,236,igrave,237,iacute,238,icirc,239,iuml,240,eth,241,ntilde,242,ograve,243,oacute,244,ocirc,245,otilde,246,ouml,247,divide,248,oslash,249,ugrave,250,uacute,251,ucirc,252,uuml,253,yacute,254,thorn,255,yuml,402,fnof,913,Alpha,914,Beta,915,Gamma,916,Delta,917,Epsilon,918,Zeta,919,Eta,920,Theta,921,Iota,922,Kappa,923,Lambda,924,Mu,925,Nu,926,Xi,927,Omicron,928,Pi,929,Rho,931,Sigma,932,Tau,933,Upsilon,934,Phi,935,Chi,936,Psi,937,Omega,945,alpha,946,beta,947,gamma,948,delta,949,epsilon,950,zeta,951,eta,952,theta,953,iota,954,kappa,955,lambda,956,mu,957,nu,958,xi,959,omicron,960,pi,961,rho,962,sigmaf,963,sigma,964,tau,965,upsilon,966,phi,967,chi,968,psi,969,omega,977,thetasym,978,upsih,982,piv,8226,bull,8230,hellip,8242,prime,8243,Prime,8254,oline,8260,frasl,8472,weierp,8465,image,8476,real,8482,trade,8501,alefsym,8592,larr,8593,uarr,8594,rarr,8595,darr,8596,harr,8629,crarr,8656,lArr,8657,uArr,8658,rArr,8659,dArr,8660,hArr,8704,forall,8706,part,8707,exist,8709,empty,8711,nabla,8712,isin,8713,notin,8715,ni,8719,prod,8721,sum,8722,minus,8727,lowast,8730,radic,8733,prop,8734,infin,8736,ang,8743,and,8744,or,8745,cap,8746,cup,8747,int,8756,there4,8764,sim,8773,cong,8776,asymp,8800,ne,8801,equiv,8804,le,8805,ge,8834,sub,8835,sup,8836,nsub,8838,sube,8839,supe,8853,oplus,8855,otimes,8869,perp,8901,sdot,8968,lceil,8969,rceil,8970,lfloor,8971,rfloor,9001,lang,9002,rang,9674,loz,9824,spades,9827,clubs,9829,hearts,9830,diams,338,OElig,339,oelig,352,Scaron,353,scaron,376,Yuml,710,circ,732,tilde,8194,ensp,8195,emsp,8201,thinsp,8204,zwnj,8205,zwj,8206,lrm,8207,rlm,8211,ndash,8212,mdash,8216,lsquo,8217,rsquo,8218,sbquo,8220,ldquo,8221,rdquo,8222,bdquo,8224,dagger,8225,Dagger,8240,permil,8249,lsaquo,8250,rsaquo,8364,euro',valid_elements:'*[*]',extended_valid_elements:0,valid_child_elements:0,invalid_elements:0,fix_table_elements:0,fix_list_elements:true,fix_content_duplication:true,convert_fonts_to_spans:false,font_size_classes:0,font_size_style_values:0,apply_source_formatting:0,indent_mode:'simple',indent_char:'\t',indent_levels:1,remove_linebreaks:1},s);t.dom=s.dom;if(s.fix_list_elements){t.onPreProcess.add(function(se,o){var nl,x,a=['ol','ul'],i,n,p,r=/^(OL|UL)$/,np;function prevNode(e,n){var a=n.split(','),i;while((e=e.previousSibling)!=null){for(i=0;i<a.length;i++){if(e.nodeName==a[i])return e;}}return null;};for(x=0;x<a.length;x++){nl=t.dom.select(a[x],o.node);for(i=0;i<nl.length;i++){n=nl[i];p=n.parentNode;if(r.test(p.nodeName)){np=prevNode(n,'LI');if(!np){np=t.dom.create('li');np.innerHTML=' ';np.appendChild(n);p.insertBefore(np,p.firstChild);}else np.appendChild(n);}}}});}if(s.fix_table_elements){t.onPreProcess.add(function(se,o){each(t.dom.select('table',o.node),function(e){var pa=t.dom.getParent(e,'H1,H2,H3,H4,H5,H6,P'),pa2,n,tm,pl=[],i,ns;if(pa){pa2=pa.cloneNode(false);pl.push(e);for(n=e;n=n.parentNode;){pl.push(n);if(n==pa)break;}tm=pa2;for(i=pl.length-1;i>=0;i--){if(i==pl.length-1){while(ns=pl[i-1].nextSibling)tm.appendChild(ns.parentNode.removeChild(ns));}else{n=pl[i].cloneNode(false);if(i!=0){while(ns=pl[i-1].nextSibling)n.appendChild(ns.parentNode.removeChild(ns));}tm=tm.appendChild(n);}}e=t.dom.insertAfter(e.parentNode.removeChild(e),pa);t.dom.insertAfter(e,pa);t.dom.insertAfter(pa2,e);}});});}},setEntities:function(s){var t=this,a,i,l={},re='',v;if(t.entityLookup)return;a=s.split(',');for(i=0;i<a.length;i+=2){v=a[i];if(v==34||v==38||v==60||v==62)continue;l[String.fromCharCode(a[i])]=a[i+1];v=parseInt(a[i]).toString(16);re+='\\u'+'0000'.substring(v.length)+v;}if(!re){t.settings.entity_encoding='raw';return;}t.entitiesRE=new RegExp('['+re+']','g');t.entityLookup=l;},setValidChildRules:function(s){this.childRules=null;this.addValidChildRules(s);},addValidChildRules:function(s){var t=this,inst,intr,bloc;if(!s)return;inst='A|BR|SPAN|BDO|MAP|OBJECT|IMG|TT|I|B|BIG|SMALL|EM|STRONG|DFN|CODE|Q|SAMP|KBD|VAR|CITE|ABBR|ACRONYM|SUB|SUP|#text|#comment';intr='A|BR|SPAN|BDO|OBJECT|APPLET|IMG|MAP|IFRAME|TT|I|B|U|S|STRIKE|BIG|SMALL|FONT|BASEFONT|EM|STRONG|DFN|CODE|Q|SAMP|KBD|VAR|CITE|ABBR|ACRONYM|SUB|SUP|INPUT|SELECT|TEXTAREA|LABEL|BUTTON|#text|#comment';bloc='H[1-6]|P|DIV|ADDRESS|PRE|FORM|TABLE|LI|OL|UL|TD|CAPTION|BLOCKQUOTE|CENTER|DL|DT|DD|DIR|FIELDSET|FORM|NOSCRIPT|NOFRAMES|MENU|ISINDEX|SAMP';each(s.split(','),function(s){var p=s.split(/\[|\]/),re;s='';each(p[1].split('|'),function(v){if(s)s+='|';switch(v){case'%itrans':v=intr;break;case'%itrans_na':v=intr.substring(2);break;case'%istrict':v=inst;break;case'%istrict_na':v=inst.substring(2);break;case'%btrans':v=bloc;break;case'%bstrict':v=bloc;break;}s+=v;});re=new RegExp('^('+s.toLowerCase()+')$','i');each(p[0].split('/'),function(s){t.childRules=t.childRules||{};t.childRules[s]=re;});});s='';each(t.childRules,function(v,k){if(s)s+='|';s+=k;});t.parentElementsRE=new RegExp('^('+s.toLowerCase()+')$','i');},setRules:function(s){var t=this;t._setup();t.rules={};t.wildRules=[];t.validElements={};return t.addRules(s);},addRules:function(s){var t=this,dr;if(!s)return;t._setup();each(s.split(','),function(s){var p=s.split(/\[|\]/),tn=p[0].split('/'),ra,at,wat,va=[];if(dr)at=tinymce.extend([],dr.attribs);if(p.length>1){each(p[1].split('|'),function(s){var ar={},i;at=at||[];s=s.replace(/::/g,'~');s=/^([!\-])?([\w*.?~_\-]+|)([=:<])?(.+)?$/.exec(s);s[2]=s[2].replace(/~/g,':');if(s[1]=='!'){ra=ra||[];ra.push(s[2]);}if(s[1]=='-'){for(i=0;i<at.length;i++){if(at[i].name==s[2]){at.splice(i,1);return;}}}switch(s[3]){case'=':ar.defaultVal=s[4]||'';break;case':':ar.forcedVal=s[4];break;case'<':ar.validVals=s[4].split('?');break;}if(/[*.?]/.test(s[2])){wat=wat||[];ar.nameRE=new RegExp('^'+wildcardToRE(s[2])+'$');wat.push(ar);}else{ar.name=s[2];at.push(ar);}va.push(s[2]);});}each(tn,function(s,i){var pr=s.charAt(0),x=1,ru={};if(dr){if(dr.noEmpty)ru.noEmpty=dr.noEmpty;if(dr.fullEnd)ru.fullEnd=dr.fullEnd;if(dr.padd)ru.padd=dr.padd;}switch(pr){case'-':ru.noEmpty=true;break;case'+':ru.fullEnd=true;break;case'#':ru.padd=true;break;default:x=0;}tn[i]=s=s.substring(x);t.validElements[s]=1;if(/[*.?]/.test(tn[0])){ru.nameRE=new RegExp('^'+wildcardToRE(tn[0])+'$');t.wildRules=t.wildRules||{};t.wildRules.push(ru);}else{ru.name=tn[0];if(tn[0]=='@')dr=ru;t.rules[s]=ru;}ru.attribs=at;if(ra)ru.requiredAttribs=ra;if(wat){s='';each(va,function(v){if(s)s+='|';s+='('+wildcardToRE(v)+')';});ru.validAttribsRE=new RegExp('^'+s.toLowerCase()+'$');ru.wildAttribs=wat;}});});s='';each(t.validElements,function(v,k){if(s)s+='|';if(k!='@')s+=k;});t.validElementsRE=new RegExp('^('+wildcardToRE(s.toLowerCase())+')$');},findRule:function(n){var t=this,rl=t.rules,i,r;t._setup();r=rl[n];if(r)return r;rl=t.wildRules;for(i=0;i<rl.length;i++){if(rl[i].nameRE.test(n))return rl[i];}return null;},findAttribRule:function(ru,n){var i,wa=ru.wildAttribs;for(i=0;i<wa.length;i++){if(wa[i].nameRE.test(n))return wa[i];}return null;},serialize:function(n,o){var h,t=this;t._setup();o=o||{};o.format=o.format||'html';t.processObj=o;n=n.cloneNode(true);t.key=''+(parseInt(t.key)+1);if(!o.no_events){o.node=n;t.onPreProcess.dispatch(t,o);}t.writer.reset();t._serializeNode(n,o.getInner);o.content=t.writer.getContent();if(!o.no_events)t.onPostProcess.dispatch(t,o);t._postProcess(o);o.node=null;return tinymce.trim(o.content);},_postProcess:function(o){var t=this,s=t.settings,h=o.content,sc=[],p,l;if(o.format=='html'){p=t._protect({content:h,patterns:[/(<script[^>]*>)(.*?)(<\/script>)/g,/(<style[^>]*>)(.*?)(<\/style>)/g,/(<pre[^>]*>)(.*?)(<\/pre>)/g]});h=p.content;if(s.entity_encoding!=='raw'){if(s.entity_encoding.indexOf('named')!=-1){t.setEntities(s.entities);l=t.entityLookup;h=h.replace(t.entitiesRE,function(a){var v;if(v=l[a])a='&'+v+';';return a;});}if(s.entity_encoding.indexOf('numeric')!=-1){h=h.replace(/[\u007E-\uFFFF]/g,function(a){return'&#'+a.charCodeAt(0)+';';});}}if(!o.set){h=h.replace(/<p>\s+<\/p>|<p([^>]+)>\s+<\/p>/g,s.entity_encoding=='numeric'?'<p$1> </p>':'<p$1> </p>');if(s.remove_linebreaks){h=h.replace(/\r?\n|\r/g,' ');h=h.replace(/(<[^>]+>)\s+/g,'$1 ');h=h.replace(/\s+(<\/[^>]+>)/g,' $1');h=h.replace(/<(p|h[1-6]|blockquote|hr|div|table|tbody|tr|td|body|head|html|title|meta|style|pre|script|link|object) ([^>]+)>\s+/g,'<$1 $2>');h=h.replace(/<(p|h[1-6]|blockquote|hr|div|table|tbody|tr|td|body|head|html|title|meta|style|pre|script|link|object)>\s+/g,'<$1>');h=h.replace(/\s+<\/(p|h[1-6]|blockquote|hr|div|table|tbody|tr|td|body|head|html|title|meta|style|pre|script|link|object)>/g,'</$1>');}if(s.apply_source_formatting&&s.indent_mode=='simple'){h=h.replace(/<(\/?)(ul|hr|table|meta|link|tbody|tr|object|body|head|html|map)(|[^>]+)>\s*/g,'\n<$1$2$3>\n');h=h.replace(/\s*<(p|h[1-6]|blockquote|div|title|style|pre|script|td|li|area)(|[^>]+)>/g,'\n<$1$2>');h=h.replace(/<\/(p|h[1-6]|blockquote|div|title|style|pre|script|td|li)>\s*/g,'</$1>\n');h=h.replace(/\n\n/g,'\n');}}h=t._unprotect(h,p);if(s.entity_encoding=='raw')h=h.replace(/<p> <\/p>|<p([^>]+)> <\/p>/g,'<p$1>\u00a0</p>');}o.content=h;},_serializeNode:function(n,inn){var t=this,s=t.settings,w=t.writer,hc,el,cn,i,l,a,at,no,v,nn,ru,ar,iv;if(!s.node_filter||s.node_filter(n)){switch(n.nodeType){case 1:if(n.hasAttribute?n.hasAttribute('mce_bogus'):n.getAttribute('mce_bogus'))return;iv=false;hc=n.hasChildNodes();nn=n.getAttribute('mce_name')||n.nodeName.toLowerCase();if(isIE){if(n.scopeName!=='HTML'&&n.scopeName!=='html')nn=n.scopeName+':'+nn;}if(nn.indexOf('mce:')===0)nn=nn.substring(4);if(!t.validElementsRE.test(nn)||(t.invalidElementsRE&&t.invalidElementsRE.test(nn))||inn){iv=true;break;}if(isIE){if(s.fix_content_duplication){if(n.mce_serialized==t.key)return;n.mce_serialized=t.key;}if(nn.charAt(0)=='/')nn=nn.substring(1);}else if(isGecko){if(n.nodeName==='BR'&&n.getAttribute('type')=='_moz')return;}if(t.childRules){if(t.parentElementsRE.test(t.elementName)){if(!t.childRules[t.elementName].test(nn)){iv=true;break;}}t.elementName=nn;}ru=t.findRule(nn);nn=ru.name||nn;if((!hc&&ru.noEmpty)||(isIE&&!nn)){iv=true;break;}if(ru.requiredAttribs){a=ru.requiredAttribs;for(i=a.length-1;i>=0;i--){if(this.dom.getAttrib(n,a[i])!=='')break;}if(i==-1){iv=true;break;}}w.writeStartElement(nn);if(ru.attribs){for(i=0,at=ru.attribs,l=at.length;i<l;i++){a=at[i];v=t._getAttrib(n,a);if(v!==null)w.writeAttribute(a.name,v);}}if(ru.validAttribsRE){at=isIE?getIEAtts(n):n.attributes;for(i=at.length-1;i>-1;i--){no=at[i];if(no.specified){a=no.nodeName.toLowerCase();if(s.invalid_attrs.test(a)||!ru.validAttribsRE.test(a))continue;ar=t.findAttribRule(ru,a);v=t._getAttrib(n,ar,a);if(v!==null)w.writeAttribute(a,v);}}}if(!hc&&ru.padd)w.writeText('\u00a0');break;case 3:if(t.childRules&&t.parentElementsRE.test(t.elementName)){if(!t.childRules[t.elementName].test(n.nodeName))return;}return w.writeText(n.nodeValue);case 4:return w.writeCDATA(n.nodeValue);case 8:return w.writeComment(n.nodeValue);}}else if(n.nodeType==1)hc=n.hasChildNodes();if(hc){cn=n.firstChild;while(cn){t._serializeNode(cn);t.elementName=nn;cn=cn.nextSibling;}}if(!iv){if(hc||!s.closed.test(nn))w.writeFullEndElement();else w.writeEndElement();}},_protect:function(o){o.items=o.items||[];function enc(s){return s.replace(/[\r\n\\]/g,function(c){if(c==='\n')return'\\n';else if(c==='\\')return'\\\\';return'\\r';});};function dec(s){return s.replace(/\\[\\rn]/g,function(c){if(c==='\\n')return'\n';else if(c==='\\\\')return'\\';return'\r';});};each(o.patterns,function(p){o.content=dec(enc(o.content).replace(p,function(x,a,b,c){o.items.push(dec(b));return a+'<!--mce:'+(o.items.length-1)+'-->'+c;}));});return o;},_unprotect:function(h,o){h=h.replace(/\<!--mce:([0-9]+)--\>/g,function(a,b){return o.items[parseInt(b)];});o.items=[];return h;},_setup:function(){var t=this,s=this.settings;if(t.done)return;t.done=1;t.setRules(s.valid_elements);t.addRules(s.extended_valid_elements);t.addValidChildRules(s.valid_child_elements);if(s.invalid_elements)t.invalidElementsRE=new RegExp('^('+wildcardToRE(s.invalid_elements.replace(',','|').toLowerCase())+')$');if(s.attrib_value_filter)t.attribValueFilter=s.attribValueFilter;},_getAttrib:function(n,a,na){var i,v;na=na||a.name;if(a.forcedVal&&(v=a.forcedVal)){if(v==='{$uid}')return this.dom.uniqueId();return v;}v=this.dom.getAttrib(n,na);switch(na){case'rowspan':case'colspan':if(v=='1')v='';break;}if(this.attribValueFilter)v=this.attribValueFilter(na,v,n);if(a.validVals){for(i=a.validVals.length-1;i>=0;i--){if(v==a.validVals[i])break;}if(i==-1)return null;}if(v===''&&typeof(a.defaultVal)!='undefined'){v=a.defaultVal;if(v==='{$uid}')return this.dom.uniqueId();return v;}else{if(na=='class'&&this.processObj.get)v=v.replace(/\s?mceItem\w+\s?/g,'');}if(v==='')return null;return v;}});})();(function(){var each=tinymce.each;tinymce.create('tinymce.dom.ScriptLoader',{ScriptLoader:function(s){this.settings=s||{};this.queue=[];this.lookup={};},isDone:function(u){return this.lookup[u]?this.lookup[u].state==2:0;},markDone:function(u){this.lookup[u]={state:2,url:u};},add:function(u,cb,s,pr){var t=this,lo=t.lookup,o;if(o=lo[u]){if(cb&&o.state==2)cb.call(s||this);return o;}o={state:0,url:u,func:cb,scope:s||this};if(pr)t.queue.unshift(o);else t.queue.push(o);lo[u]=o;return o;},load:function(u,cb,s){var t=this,o;if(o=t.lookup[u]){if(cb&&o.state==2)cb.call(s||t);return o;}function loadScript(u){if(tinymce.dom.Event.domLoaded||t.settings.strict_mode){tinymce.util.XHR.send({url:u,error:t.settings.error,async:false,success:function(co){t.eval(co);}});}else document.write('<script type="text/javascript" src="'+u+'"></script>');};if(!tinymce.is(u,'string')){each(u,function(u){loadScript(u);});if(cb)cb.call(s||t);}else{loadScript(u);if(cb)cb.call(s||t);}},loadQueue:function(cb,s){var t=this;if(!t.queueLoading){t.queueLoading=1;t.queueCallbacks=[];t.loadScripts(t.queue,function(){t.queueLoading=0;if(cb)cb.call(s||t);each(t.queueCallbacks,function(o){o.func.call(o.scope);});});}else if(cb)t.queueCallbacks.push({func:cb,scope:s||t});},eval:function(co){var w=window;if(!w.execScript){try{eval.call(w,co);}catch(ex){eval(co,w);}}else w.execScript(co);},loadScripts:function(sc,cb,s){var t=this,lo=t.lookup;function done(o){o.state=2;if(o.func)o.func.call(o.scope||t);};function allDone(){var l;l=sc.length;each(sc,function(o){o=lo[o.url];if(o.state===2){done(o);l--;}else load(o);});if(l===0&&cb){cb.call(s||t);cb=0;}};function load(o){if(o.state>0)return;o.state=1;tinymce.util.XHR.send({url:o.url,error:t.settings.error,success:function(co){t.eval(co);done(o);allDone();}});};each(sc,function(o){var u=o.url;if(!lo[u]){lo[u]=o;t.queue.push(o);}else o=lo[u];if(o.state>0)return;if(!tinymce.dom.Event.domLoaded&&!t.settings.strict_mode){var ix,ol='';if(cb||o.func){o.state=1;ix=tinymce.dom.ScriptLoader._addOnLoad(function(){done(o);allDone();});if(tinymce.isIE)ol=' onreadystatechange="';else ol=' onload="';ol+='tinymce.dom.ScriptLoader._onLoad(this,\''+u+'\','+ix+');"';}document.write('<script type="text/javascript" src="'+u+'"'+ol+'></script>');if(!o.func)done(o);}else load(o);});allDone();},'static':{_addOnLoad:function(f){var t=this;t._funcs=t._funcs||[];t._funcs.push(f);return t._funcs.length-1;},_onLoad:function(e,u,ix){if(!tinymce.isIE||e.readyState=='complete')this._funcs[ix].call(this);}}});tinymce.ScriptLoader=new tinymce.dom.ScriptLoader();})();(function(){var DOM=tinymce.DOM,is=tinymce.is;tinymce.create('tinymce.ui.Control',{Control:function(id,s){this.id=id;this.settings=s=s||{};this.rendered=false;this.onRender=new tinymce.util.Dispatcher(this);this.classPrefix='';this.scope=s.scope||this;this.disabled=0;this.active=0;},setDisabled:function(s){var e;if(s!=this.disabled){e=DOM.get(this.id);if(e&&this.settings.unavailable_prefix){if(s){this.prevTitle=e.title;e.title=this.settings.unavailable_prefix+": "+e.title;}else e.title=this.prevTitle;}this.setState('Disabled',s);this.setState('Enabled',!s);this.disabled=s;}},isDisabled:function(){return this.disabled;},setActive:function(s){if(s!=this.active){this.setState('Active',s);this.active=s;}},isActive:function(){return this.active;},setState:function(c,s){var n=DOM.get(this.id);c=this.classPrefix+c;if(s)DOM.addClass(n,c);else DOM.removeClass(n,c);},isRendered:function(){return this.rendered;},renderHTML:function(){},renderTo:function(n){DOM.setHTML(n,this.renderHTML());},postRender:function(){var t=this,b;if(is(t.disabled)){b=t.disabled;t.disabled=-1;t.setDisabled(b);}if(is(t.active)){b=t.active;t.active=-1;t.setActive(b);}},remove:function(){DOM.remove(this.id);this.destroy();},destroy:function(){tinymce.dom.Event.clear(this.id);}});})();tinymce.create('tinymce.ui.Container:tinymce.ui.Control',{Container:function(id,s){this.parent(id,s);this.controls=[];this.lookup={};},add:function(c){this.lookup[c.id]=c;this.controls.push(c);return c;},get:function(n){return this.lookup[n];}});tinymce.create('tinymce.ui.Separator:tinymce.ui.Control',{Separator:function(id,s){this.parent(id,s);this.classPrefix='mceSeparator';},renderHTML:function(){return tinymce.DOM.createHTML('span',{'class':this.classPrefix});}});(function(){var is=tinymce.is,DOM=tinymce.DOM,each=tinymce.each,walk=tinymce.walk;tinymce.create('tinymce.ui.MenuItem:tinymce.ui.Control',{MenuItem:function(id,s){this.parent(id,s);this.classPrefix='mceMenuItem';},setSelected:function(s){this.setState('Selected',s);this.selected=s;},isSelected:function(){return this.selected;},postRender:function(){var t=this;t.parent();if(is(t.selected))t.setSelected(t.selected);}});})();(function(){var is=tinymce.is,DOM=tinymce.DOM,each=tinymce.each,walk=tinymce.walk;tinymce.create('tinymce.ui.Menu:tinymce.ui.MenuItem',{Menu:function(id,s){var t=this;t.parent(id,s);t.items={};t.collapsed=false;t.menuCount=0;t.onAddItem=new tinymce.util.Dispatcher(this);},expand:function(d){var t=this;if(d){walk(t,function(o){if(o.expand)o.expand();},'items',t);}t.collapsed=false;},collapse:function(d){var t=this;if(d){walk(t,function(o){if(o.collapse)o.collapse();},'items',t);}t.collapsed=true;},isCollapsed:function(){return this.collapsed;},add:function(o){if(!o.settings)o=new tinymce.ui.MenuItem(o.id||DOM.uniqueId(),o);this.onAddItem.dispatch(this,o);return this.items[o.id]=o;},addSeparator:function(){return this.add({separator:true});},addMenu:function(o){if(!o.collapse)o=this.createMenu(o);this.menuCount++;return this.add(o);},hasMenus:function(){return this.menuCount!==0;},remove:function(o){delete this.items[o.id];},removeAll:function(){var t=this;walk(t,function(o){if(o.removeAll)o.removeAll();else o.remove();o.destroy();},'items',t);t.items={};},createMenu:function(o){var m=new tinymce.ui.Menu(o.id||DOM.uniqueId(),o);m.onAddItem.add(this.onAddItem.dispatch,this.onAddItem);return m;}});})();(function(){var is=tinymce.is,DOM=tinymce.DOM,each=tinymce.each,Event=tinymce.dom.Event,Element=tinymce.dom.Element;tinymce.create('tinymce.ui.DropMenu:tinymce.ui.Menu',{DropMenu:function(id,s){s=s||{};s.container=s.container||DOM.doc.body;s.offset_x=s.offset_x||0;s.offset_y=s.offset_y||0;s.vp_offset_x=s.vp_offset_x||0;s.vp_offset_y=s.vp_offset_y||0;if(is(s.icons)&&!s.icons)s['class']+=' mceNoIcons';this.parent(id,s);this.onShowMenu=new tinymce.util.Dispatcher(this);this.onHideMenu=new tinymce.util.Dispatcher(this);this.classPrefix='mceMenu';this.fixIE=tinymce.isIE&&DOM.win.top!=DOM.win;},createMenu:function(s){var t=this,cs=t.settings,m;s.container=s.container||cs.container;s.parent=t;s.constrain=s.constrain||cs.constrain;s['class']=s['class']||cs['class'];s.vp_offset_x=s.vp_offset_x||cs.vp_offset_x;s.vp_offset_y=s.vp_offset_y||cs.vp_offset_y;m=new tinymce.ui.DropMenu(s.id||DOM.uniqueId(),s);m.onAddItem.add(t.onAddItem.dispatch,t.onAddItem);return m;},update:function(){var t=this,s=t.settings,tb=DOM.get('menu_'+t.id+'_tbl'),co=DOM.get('menu_'+t.id+'_co'),tw,th;tw=s.max_width?Math.min(tb.clientWidth,s.max_width):tb.clientWidth;th=s.max_height?Math.min(tb.clientHeight,s.max_height):tb.clientHeight;if(!DOM.boxModel)t.element.setStyles({width:tw+2,height:th+2});else t.element.setStyles({width:tw,height:th});if(s.max_width)DOM.setStyle(co,'width',tw);if(s.max_height){DOM.setStyle(co,'height',th);if(tb.clientHeight<s.max_height)DOM.setStyle(co,'overflow','hidden');}},showMenu:function(x,y,px){var t=this,s=t.settings,co,vp=DOM.getViewPort(),w,h,mx,my,ot=2,dm,tb,cp=t.classPrefix;t.collapse(1);if(t.isMenuVisible)return;if(!t.rendered){co=DOM.add(t.settings.container,t.renderNode());each(t.items,function(o){o.postRender();});t.element=new Element('menu_'+t.id,{blocker:1,container:s.container});}else co=DOM.get('menu_'+t.id);if(!tinymce.isOpera)DOM.setStyles(co,{left:-0xFFFF,top:-0xFFFF});DOM.show(co);t.update();x+=s.offset_x||0;y+=s.offset_y||0;vp.w-=4;vp.h-=4;if(s.constrain){w=co.clientWidth-ot;h=co.clientHeight-ot;mx=vp.x+vp.w;my=vp.y+vp.h;if((x+s.vp_offset_x+w)>mx)x=px?px-w:Math.max(0,(mx-s.vp_offset_x)-w);if((y+s.vp_offset_y+h)>my)y=Math.max(0,(my-s.vp_offset_y)-h);}DOM.setStyles(co,{left:x,top:y});t.element.update();t.isMenuVisible=1;t.mouseClickFunc=Event.add(co,t.fixIE?'mousedown':'click',function(e){var m;e=e.target;if(e&&(e=DOM.getParent(e,'TR'))&&!DOM.hasClass(e,cp+'ItemSub')){m=t.items[e.id];if(m.isDisabled())return;dm=t;while(dm){if(dm.hideMenu)dm.hideMenu();dm=dm.settings.parent;}if(m.settings.onclick)m.settings.onclick(e);return Event.cancel(e);}});if(t.hasMenus()){t.mouseOverFunc=Event.add(co,'mouseover',function(e){var m,r,mi;e=e.target;if(e&&(e=DOM.getParent(e,'TR'))){m=t.items[e.id];if(t.lastMenu)t.lastMenu.collapse(1);if(m.isDisabled())return;if(e&&DOM.hasClass(e,cp+'ItemSub')){r=DOM.getRect(e);m.showMenu((r.x+r.w-ot),r.y-ot,r.x);t.lastMenu=m;DOM.addClass(DOM.get(m.id).firstChild,cp+'ItemActive');}}});}t.onShowMenu.dispatch(t);if(s.keyboard_focus){Event.add(co,'keydown',t._keyHandler,t);DOM.select('a','menu_'+t.id)[0].focus();}},hideMenu:function(c){var t=this,co=DOM.get('menu_'+t.id),e;if(!t.isMenuVisible)return;Event.remove(co,'mouseover',t.mouseOverFunc);Event.remove(co,t.fixIE?'mousedown':'click',t.mouseClickFunc);Event.remove(co,'keydown',t._keyHandler);DOM.hide(co);t.isMenuVisible=0;if(!c)t.collapse(1);if(t.element)t.element.hide();if(e=DOM.get(t.id))DOM.removeClass(e.firstChild,t.classPrefix+'ItemActive');t.onHideMenu.dispatch(t);},add:function(o){var t=this,co;o=t.parent(o);if(t.isRendered&&(co=DOM.get('menu_'+t.id)))t._add(DOM.select('tbody',co)[0],o);return o;},collapse:function(d){this.parent(d);this.hideMenu(1);},remove:function(o){DOM.remove(o.id);this.destroy();return this.parent(o);},destroy:function(){var t=this,co=DOM.get('menu_'+t.id);Event.remove(co,'mouseover',t.mouseOverFunc);Event.remove(co,'click',t.mouseClickFunc);if(t.element)t.element.remove();DOM.remove(co);},renderNode:function(){var t=this,s=t.settings,n,tb,co,w;w=DOM.create('div',{id:'menu_'+t.id,'class':s['class'],'style':'position:absolute;left:0;top:0;z-index:200000'});co=DOM.add(w,'div',{id:'menu_'+t.id+'_co','class':t.classPrefix+(s['class']?' '+s['class']:'')});t.element=new Element('menu_'+t.id,{blocker:1,container:s.container});if(s.menu_line)DOM.add(co,'span',{'class':t.classPrefix+'Line'});n=DOM.add(co,'table',{id:'menu_'+t.id+'_tbl',border:0,cellPadding:0,cellSpacing:0});tb=DOM.add(n,'tbody');each(t.items,function(o){t._add(tb,o);});t.rendered=true;return w;},_keyHandler:function(e){if(e.keyCode==27)this.hideMenu();},_add:function(tb,o){var n,s=o.settings,a,ro,it,cp=this.classPrefix;if(s.separator){ro=DOM.add(tb,'tr',{id:o.id,'class':cp+'ItemSeparator'});DOM.add(ro,'td',{'class':cp+'ItemSeparator'});if(n=ro.previousSibling)DOM.addClass(n,'mceLast');return;}n=ro=DOM.add(tb,'tr',{id:o.id,'class':cp+'Item '+cp+'ItemEnabled'});n=it=DOM.add(n,'td');n=a=DOM.add(n,'a',{href:'javascript:;',onclick:"return false;",onmousedown:'return false;'});DOM.addClass(it,s['class']);DOM.add(n,'span',{'class':'mceIcon'+(s.icon?' mce_'+s.icon:'')});n=DOM.add(n,s.element||'span',{'class':'mceText',title:o.settings.title},o.settings.title);if(o.settings.style)DOM.setAttrib(n,'style',o.settings.style);if(tb.childNodes.length==1)DOM.addClass(ro,'mceFirst');if((n=ro.previousSibling)&&DOM.hasClass(n,cp+'ItemSeparator'))DOM.addClass(ro,'mceFirst');if(o.collapse)DOM.addClass(ro,cp+'ItemSub');if(n=ro.previousSibling)DOM.removeClass(n,'mceLast');DOM.addClass(ro,'mceLast');}});})();(function(){var DOM=tinymce.DOM;tinymce.create('tinymce.ui.Button:tinymce.ui.Control',{Button:function(id,s){this.parent(id,s);this.classPrefix='mceButton';},renderHTML:function(){var cp=this.classPrefix,s=this.settings,h='<a id="'+this.id+'" href="javascript:;" class="'+cp+' '+cp+'Enabled '+s['class']+'" onmousedown="return false;" onclick="return false;" title="'+DOM.encode(s.title)+'">';if(s.image)h+='<img class="mceIcon" src="'+s.image+'" /></a>';else h+='<span class="mceIcon '+s['class']+'"></span></a>';return h;},postRender:function(){var t=this,s=t.settings;tinymce.dom.Event.add(t.id,'click',function(e){if(!t.isDisabled())return s.onclick.call(s.scope,e);});}});})();(function(){var DOM=tinymce.DOM,Event=tinymce.dom.Event,each=tinymce.each,Dispatcher=tinymce.util.Dispatcher;tinymce.create('tinymce.ui.ListBox:tinymce.ui.Control',{ListBox:function(id,s){var t=this;t.parent(id,s);t.items=[];t.onChange=new Dispatcher(t);t.onPostRender=new Dispatcher(t);t.onAdd=new Dispatcher(t);t.onRenderMenu=new tinymce.util.Dispatcher(this);t.classPrefix='mceListBox';},select:function(v){var t=this,e,fv;if(v!=t.selectedValue){e=DOM.get(t.id+'_text');t.selectedValue=v;each(t.items,function(o){if(o.value==v){DOM.setHTML(e,DOM.encode(o.title));fv=1;return false;}});if(!fv){DOM.setHTML(e,DOM.encode(t.settings.title));DOM.addClass(e,'mceTitle');e=0;return;}else DOM.removeClass(e,'mceTitle');}e=0;},add:function(n,v,o){var t=this;o=o||{};o=tinymce.extend(o,{title:n,value:v});t.items.push(o);t.onAdd.dispatch(t,o);},getLength:function(){return this.items.length;},renderHTML:function(){var h='',t=this,s=t.settings,cp=t.classPrefix;h='<table id="'+t.id+'" cellpadding="0" cellspacing="0" class="'+cp+' '+cp+'Enabled'+(s['class']?(' '+s['class']):'')+'"><tbody><tr>';h+='<td>'+DOM.createHTML('a',{id:t.id+'_text',href:'javascript:;','class':'mceText',onclick:"return false;",onmousedown:'return false;'},DOM.encode(t.settings.title))+'</td>';h+='<td>'+DOM.createHTML('a',{id:t.id+'_open',tabindex:-1,href:'javascript:;','class':'mceOpen',onclick:"return false;",onmousedown:'return false;'},'<span></span>')+'</td>';h+='</tr></tbody></table>';return h;},showMenu:function(){var t=this,p1,p2,e=DOM.get(this.id),m;if(t.isDisabled()||t.items.length==0)return;if(!t.isMenuRendered){t.renderMenu();t.isMenuRendered=true;}p1=DOM.getPos(this.settings.menu_container);p2=DOM.getPos(e);m=t.menu;m.settings.offset_x=p2.x;m.settings.offset_y=p2.y;m.settings.keyboard_focus=t._focused;if(t.oldID)m.items[t.oldID].setSelected(0);each(t.items,function(o){if(o.value===t.selectedValue){m.items[o.id].setSelected(1);t.oldID=o.id;}});m.showMenu(0,e.clientHeight);Event.add(DOM.doc,'mousedown',t.hideMenu,t);DOM.addClass(t.id,t.classPrefix+'Selected');},hideMenu:function(e){var t=this;if(!e||!DOM.getParent(e.target,function(n){return DOM.hasClass(n,'mceMenu');})){DOM.removeClass(t.id,t.classPrefix+'Selected');Event.remove(DOM.doc,'mousedown',t.hideMenu,t);if(t.menu)t.menu.hideMenu();}},renderMenu:function(){var t=this,m;m=t.settings.control_manager.createDropMenu(t.id+'_menu',{menu_line:1,'class':t.classPrefix+'Menu mceNoIcons',max_width:150,max_height:150});m.onHideMenu.add(t.hideMenu,t);m.add({title:t.settings.title,'class':'mceMenuItemTitle'}).setDisabled(1);each(t.items,function(o){o.id=DOM.uniqueId();o.onclick=function(){if(t.settings.onselect(o.value)!==false)t.select(o.value);};m.add(o);});t.onRenderMenu.dispatch(t,m);t.menu=m;},postRender:function(){var t=this,cp=t.classPrefix;Event.add(t.id,'click',t.showMenu,t);Event.add(t.id+'_text','focus',function(){t._focused=1;});Event.add(t.id+'_text','blur',function(){t._focused=0;});if(tinymce.isIE6||!DOM.boxModel){Event.add(t.id,'mouseover',function(){if(!DOM.hasClass(t.id,cp+'Disabled'))DOM.addClass(t.id,cp+'Hover');});Event.add(t.id,'mouseout',function(){if(!DOM.hasClass(t.id,cp+'Disabled'))DOM.removeClass(t.id,cp+'Hover');});}t.onPostRender.dispatch(t,DOM.get(t.id));},destroy:function(){this.parent();Event.clear(this.id+'_text');}});})();(function(){var DOM=tinymce.DOM,Event=tinymce.dom.Event,each=tinymce.each,Dispatcher=tinymce.util.Dispatcher;tinymce.create('tinymce.ui.NativeListBox:tinymce.ui.ListBox',{NativeListBox:function(id,s){this.parent(id,s);this.classPrefix='mceNativeListBox';},setDisabled:function(s){DOM.get(this.id).disabled=s;},isDisabled:function(){return DOM.get(this.id).disabled;},select:function(v){var e=DOM.get(this.id),ol=e.options;v=''+(v||'');e.selectedIndex=0;each(ol,function(o,i){if(o.value==v){e.selectedIndex=i;return false;}});},add:function(n,v,a){var o,t=this;a=a||{};a.value=v;if(t.isRendered())DOM.add(DOM.get(this.id),'option',a,n);o={title:n,value:v,attribs:a};t.items.push(o);t.onAdd.dispatch(t,o);},getLength:function(){return DOM.get(this.id).options.length-1;},renderHTML:function(){var h,t=this;h=DOM.createHTML('option',{value:''},'-- '+t.settings.title+' --');each(t.items,function(it){h+=DOM.createHTML('option',{value:it.value},it.title);});h=DOM.createHTML('select',{id:t.id,'class':'mceNativeListBox'},h);return h;},postRender:function(){var t=this,ch;t.rendered=true;function onChange(e){var v=e.target.options[e.target.selectedIndex].value;t.onChange.dispatch(t,v);if(t.settings.onselect)t.settings.onselect(v);};Event.add(t.id,'change',onChange);Event.add(t.id,'keydown',function(e){var bf;Event.remove(t.id,'change',ch);bf=Event.add(t.id,'blur',function(){Event.add(t.id,'change',onChange);Event.remove(t.id,'blur',bf);});if(e.keyCode==13||e.keyCode==32){onChange(e);return Event.cancel(e);}});t.onPostRender.dispatch(t,DOM.get(t.id));}});})();(function(){var DOM=tinymce.DOM,Event=tinymce.dom.Event,each=tinymce.each;tinymce.create('tinymce.ui.MenuButton:tinymce.ui.Button',{MenuButton:function(id,s){this.parent(id,s);this.onRenderMenu=new tinymce.util.Dispatcher(this);s.menu_container=s.menu_container||DOM.doc.body;},showMenu:function(){var t=this,p1,p2,e=DOM.get(t.id),m;if(t.isDisabled())return;if(!t.isMenuRendered){t.renderMenu();t.isMenuRendered=true;}p1=DOM.getPos(t.settings.menu_container);p2=DOM.getPos(e);m=t.menu;m.settings.offset_x=p2.x;m.settings.offset_y=p2.y;m.settings.vp_offset_x=p2.x;m.settings.vp_offset_y=p2.y;m.settings.keyboard_focus=t._focused;m.showMenu(0,e.clientHeight);Event.add(DOM.doc,'mousedown',t.hideMenu,t);t.setState('Selected',1);},renderMenu:function(){var t=this,m;m=t.settings.control_manager.createDropMenu(t.id+'_menu',{menu_line:1,'class':this.classPrefix+'Menu',icons:t.settings.icons});m.onHideMenu.add(t.hideMenu,t);t.onRenderMenu.dispatch(t,m);t.menu=m;},hideMenu:function(e){var t=this;if(!e||!DOM.getParent(e.target,function(n){return DOM.hasClass(n,'mceMenu');})){t.setState('Selected',0);Event.remove(DOM.doc,'mousedown',t.hideMenu,t);if(t.menu)t.menu.hideMenu();}},postRender:function(){var t=this,s=t.settings;Event.add(t.id,'click',function(){if(!t.isDisabled()){if(s.onclick)s.onclick(t.value);t.showMenu();}});}});})();(function(){var DOM=tinymce.DOM,Event=tinymce.dom.Event,each=tinymce.each;tinymce.create('tinymce.ui.SplitButton:tinymce.ui.MenuButton',{SplitButton:function(id,s){this.parent(id,s);this.classPrefix='mceSplitButton';},renderHTML:function(){var h,t=this,s=t.settings,h1;h='<tbody><tr>';if(s.image)h1=DOM.createHTML('img ',{src:s.image,'class':'mceAction '+s['class']});else h1=DOM.createHTML('span',{'class':'mceAction '+s['class']},'');h+='<td>'+DOM.createHTML('a',{id:t.id+'_action',href:'javascript:;','class':'mceAction '+s['class'],onclick:"return false;",onmousedown:'return false;',title:s.title},h1)+'</td>';h1=DOM.createHTML('span',{'class':'mceOpen '+s['class']});h+='<td>'+DOM.createHTML('a',{id:t.id+'_open',href:'javascript:;','class':'mceOpen '+s['class'],onclick:"return false;",onmousedown:'return false;',title:s.title},h1)+'</td>';h+='</tr></tbody>';return DOM.createHTML('table',{id:t.id,'class':'mceSplitButton mceSplitButtonEnabled '+s['class'],cellpadding:'0',cellspacing:'0',onmousedown:'return false;',title:s.title},h);},postRender:function(){var t=this,s=t.settings;if(s.onclick){Event.add(t.id+'_action','click',function(){if(!t.isDisabled())s.onclick(t.value);});}Event.add(t.id+'_open','click',t.showMenu,t);Event.add(t.id+'_open','focus',function(){t._focused=1;});Event.add(t.id+'_open','blur',function(){t._focused=0;});if(tinymce.isIE6||!DOM.boxModel){Event.add(t.id,'mouseover',function(){if(!DOM.hasClass(t.id,'mceSplitButtonDisabled'))DOM.addClass(t.id,'mceSplitButtonHover');});Event.add(t.id,'mouseout',function(){if(!DOM.hasClass(t.id,'mceSplitButtonDisabled'))DOM.removeClass(t.id,'mceSplitButtonHover');});}},destroy:function(){this.parent();Event.clear(this.id+'_action');Event.clear(this.id+'_open');}});})();(function(){var DOM=tinymce.DOM,Event=tinymce.dom.Event,is=tinymce.is,each=tinymce.each;tinymce.create('tinymce.ui.ColorSplitButton:tinymce.ui.SplitButton',{ColorSplitButton:function(id,s){var t=this;t.parent(id,s);t.settings=s=tinymce.extend({colors:'000000,993300,333300,003300,003366,000080,333399,333333,800000,FF6600,808000,008000,008080,0000FF,666699,808080,FF0000,FF9900,99CC00,339966,33CCCC,3366FF,800080,999999,FF00FF,FFCC00,FFFF00,00FF00,00FFFF,00CCFF,993366,C0C0C0,FF99CC,FFCC99,FFFF99,CCFFCC,CCFFFF,99CCFF,CC99FF,FFFFFF',grid_width:8,default_color:'#888888'},t.settings);t.value=s.default_color;},showMenu:function(){var t=this,r,p,e,p2;if(t.isDisabled())return;if(!t.isMenuRendered){t.renderMenu();t.isMenuRendered=true;}e=DOM.get(t.id);DOM.show(t.id+'_menu');DOM.addClass(e,'mceSplitButtonSelected');p2=DOM.getPos(e);DOM.setStyles(t.id+'_menu',{left:p2.x,top:p2.y+e.clientHeight,zIndex:200000});e=0;Event.add(DOM.doc,'mousedown',t.hideMenu,t);if(t._focused){t._keyHandler=Event.add(t.id+'_menu','keydown',function(e){if(e.keyCode==27)t.hideMenu();});DOM.select('a',t.id+'_menu')[0].focus();}},hideMenu:function(e){var t=this;if(!e||!DOM.getParent(e.target,function(n){return DOM.hasClass(n,'mceSplitButtonMenu');})){DOM.removeClass(t.id,'mceSplitButtonSelected');Event.remove(DOM.doc,'mousedown',t.hideMenu,t);Event.remove(t.id+'_menu','keydown',t._keyHandler);DOM.hide(t.id+'_menu');}},renderMenu:function(){var t=this,m,i=0,s=t.settings,n,tb,tr,w;w=DOM.add(s.menu_container,'div',{id:t.id+'_menu','class':s['menu_class']+' '+s['class'],style:'position:absolute;left:0;top:-1000px;'});m=DOM.add(w,'div',{'class':s['class']+' mceSplitButtonMenu'});DOM.add(m,'span',{'class':'mceMenuLine'});n=DOM.add(m,'table',{'class':'mceColorSplitMenu'});tb=DOM.add(n,'tbody');i=0;each(is(s.colors,'array')?s.colors:s.colors.split(','),function(c){c=c.replace(/^#/,'');if(!i--){tr=DOM.add(tb,'tr');i=s.grid_width-1;}n=DOM.add(tr,'td');n=DOM.add(n,'a',{href:'javascript:;',style:{backgroundColor:'#'+c},mce_color:'#'+c});});if(s.more_colors_func){n=DOM.add(tb,'tr');n=DOM.add(n,'td',{colspan:s.grid_width,'class':'mceMoreColors'});n=DOM.add(n,'a',{id:t.id+'_more',href:'javascript:;',onclick:'return false;','class':'mceMoreColors'},s.more_colors_title);Event.add(n,'click',function(e){s.more_colors_func.call(s.more_colors_scope||this);return Event.cancel(e);});}DOM.addClass(m,'mceColorSplitMenu');Event.add(t.id+'_menu','click',function(e){var c;e=e.target;if(e.nodeName=='A'&&(c=e.getAttribute('mce_color')))t.setColor(c);});return w;},setColor:function(c){var t=this;DOM.setStyle(t.id+'_preview','backgroundColor',c);t.value=c;t.hideMenu();t.settings.onselect(c);},postRender:function(){var t=this,id=t.id;t.parent();DOM.add(id+'_action','div',{id:id+'_preview','class':'mceColorPreview'});},destroy:function(){this.parent();Event.clear(this.id+'_menu');Event.clear(this.id+'_more');DOM.remove(this.id+'_menu');}});})();tinymce.create('tinymce.ui.Toolbar:tinymce.ui.Container',{renderHTML:function(){var t=this,h='',c,co,dom=tinymce.DOM,s=t.settings,i,pr,nx,cl;cl=t.controls;for(i=0;i<cl.length;i++){co=cl[i];pr=cl[i-1];nx=cl[i+1];if(i===0){c='mceToolbarStart';if(co.Button)c+=' mceToolbarStartButton';else if(co.SplitButton)c+=' mceToolbarStartSplitButton';else if(co.ListBox)c+=' mceToolbarStartListBox';h+=dom.createHTML('td',{'class':c},dom.createHTML('span',null,'<!-- IE -->'));}if(pr&&co.ListBox){if(pr.Button||pr.SplitButton)h+=dom.createHTML('td',{'class':'mceToolbarEnd'},dom.createHTML('span',null,'<!-- IE -->'));}if(dom.stdMode)h+='<td style="position: relative">'+co.renderHTML()+'</td>';else h+='<td>'+co.renderHTML()+'</td>';if(nx&&co.ListBox){if(nx.Button||nx.SplitButton)h+=dom.createHTML('td',{'class':'mceToolbarStart'},dom.createHTML('span',null,'<!-- IE -->'));}}c='mceToolbarEnd';if(co.Button)c+=' mceToolbarEndButton';else if(co.SplitButton)c+=' mceToolbarEndSplitButton';else if(co.ListBox)c+=' mceToolbarEndListBox';h+=dom.createHTML('td',{'class':c},dom.createHTML('span',null,'<!-- IE -->'));return dom.createHTML('table',{id:t.id,'class':'mceToolbar'+(s['class']?' '+s['class']:''),cellpadding:'0',cellspacing:'0',align:t.settings.align||''},'<tbody><tr>'+h+'</tr></tbody>');}});(function(){var Dispatcher=tinymce.util.Dispatcher,each=tinymce.each;tinymce.create('tinymce.AddOnManager',{items:[],urls:{},lookup:{},onAdd:new Dispatcher(this),get:function(n){return this.lookup[n];},requireLangPack:function(n){var u,s;if(tinymce.EditorManager.settings){u=this.urls[n]+'/langs/'+tinymce.EditorManager.settings.language+'.js';s=tinymce.EditorManager.settings;if(s){if(!tinymce.dom.Event.domLoaded&&!s.strict_mode)tinymce.ScriptLoader.load(u);else tinymce.ScriptLoader.add(u);}}},add:function(id,o){this.items.push(o);this.lookup[id]=o;this.onAdd.dispatch(this,id,o);return o;},load:function(n,u,cb,s){var t=this;if(t.urls[n])return;if(u.indexOf('/')!=0&&u.indexOf('://')==-1)u=tinymce.baseURL+'/'+u;t.urls[n]=u.substring(0,u.lastIndexOf('/'));tinymce.ScriptLoader.add(u,cb,s);}});tinymce.PluginManager=new tinymce.AddOnManager();tinymce.ThemeManager=new tinymce.AddOnManager();}());(function(){var each=tinymce.each,extend=tinymce.extend,DOM=tinymce.DOM,Event=tinymce.dom.Event,ThemeManager=tinymce.ThemeManager,PluginManager=tinymce.PluginManager,explode=tinymce.explode;tinymce.create('static tinymce.EditorManager',{editors:{},i18n:{},activeEditor:null,preInit:function(){var t=this,lo=window.location;tinymce.documentBaseURL=lo.href.replace(/[\?#].*$/,'').replace(/[\/\\][^\/]+$/,'');if(!/[\/\\]$/.test(tinymce.documentBaseURL))tinymce.documentBaseURL+='/';tinymce.baseURL=new tinymce.util.URI(tinymce.documentBaseURL).toAbsolute(tinymce.baseURL);tinymce.EditorManager.baseURI=new tinymce.util.URI(tinymce.baseURL);if(tinymce.EditorManager.baseURI.host!=lo.hostname&&lo.hostname)document.domain=tinymce.relaxedDomain=lo.hostname.replace(/.*\.(.+\..+)$/,'$1');t.onBeforeUnload=new tinymce.util.Dispatcher(t);Event.add(window,'beforeunload',function(e){t.onBeforeUnload.dispatch(t,e);});},init:function(s){var t=this,pl,sl=tinymce.ScriptLoader,c;function execCallback(se,n,s){var f=se[n];if(!f)return;if(tinymce.is(f,'string')){s=f.replace(/\.\w+$/,'');s=s?tinymce.resolve(s):0;f=tinymce.resolve(f);}return f.apply(s||this,Array.prototype.slice.call(arguments,2));};s=extend({theme:"simple",language:"en",strict_loading_mode:document.contentType=='application/xhtml+xml'},s);t.settings=s;if(!Event.domLoaded&&!s.strict_loading_mode){if(s.language)sl.add(tinymce.baseURL+'/langs/'+s.language+'.js');if(s.theme&&s.theme.charAt(0)!='-'&&!ThemeManager.urls[s.theme])ThemeManager.load(s.theme,'themes/'+s.theme+'/editor_template'+tinymce.suffix+'.js');if(s.plugins){pl=explode(s.plugins);if(tinymce.inArray(pl,'compat2x')!=-1)PluginManager.load('compat2x','plugins/compat2x/editor_plugin'+tinymce.suffix+'.js');each(pl,function(v){if(v&&v.charAt(0)!='-'&&!PluginManager.urls[v]){if(!tinymce.isWebKit&&v=='safari')return;PluginManager.load(v,'plugins/'+v+'/editor_plugin'+tinymce.suffix+'.js');}});}sl.loadQueue();}Event.add(document,'init',function(){var l,co;execCallback(s,'onpageload');if(s.browsers){l=false;each(explode(s.browsers),function(v){switch(v){case'ie':case'msie':if(tinymce.isIE)l=true;break;case'gecko':if(tinymce.isGecko)l=true;break;case'safari':case'webkit':if(tinymce.isWebKit)l=true;break;case'opera':if(tinymce.isOpera)l=true;break;}});if(!l)return;}switch(s.mode){case"exact":l=s.elements||'';if(l.length>0){each(explode(l),function(v){if(DOM.get(v))new tinymce.Editor(v,s).render(1);else{c=0;each(document.forms,function(f){each(f.elements,function(e){if(e.name===v){v='mce_editor_'+c;DOM.setAttrib(e,'id',v);new tinymce.Editor(v,s).render(1);}});});}});}break;case"textareas":case"specific_textareas":function hasClass(n,c){return new RegExp('\\b'+c+'\\b','g').test(n.className);};each(DOM.select('textarea'),function(v){if(s.editor_deselector&&hasClass(v,s.editor_deselector))return;if(!s.editor_selector||hasClass(v,s.editor_selector)){v.id=v.id||v.name;if(!v.id||t.get(v.id))v.id=DOM.uniqueId();new tinymce.Editor(v.id,s).render(1);}});break;}if(s.oninit){l=co=0;each(t.editors,function(ed){co++;if(!ed.initialized){ed.onInit.add(function(){l++;if(l==co)execCallback(s,'oninit');});}else l++;if(l==co)execCallback(s,'oninit');});}});},get:function(id){return this.editors[id];},getInstanceById:function(id){return this.get(id);},add:function(e){this.editors[e.id]=e;this._setActive(e);return e;},remove:function(e){var t=this;if(!t.editors[e.id])return null;delete t.editors[e.id];if(t.activeEditor==e){each(t.editors,function(e){t._setActive(e);return false;});}e.destroy();return e;},execCommand:function(c,u,v){var t=this,ed=t.get(v),w;switch(c){case"mceFocus":ed.focus();return true;case"mceAddEditor":case"mceAddControl":new tinymce.Editor(v,t.settings).render();return true;case"mceAddFrameControl":w=v.window;w.tinyMCE=tinyMCE;w.tinymce=tinymce;tinymce.DOM.doc=w.document;tinymce.DOM.win=w;ed=new tinymce.Editor(v.element_id,v);ed.render();if(tinymce.isIE){function clr(){ed.destroy();w.detachEvent('onunload',clr);w=w.tinyMCE=w.tinymce=null;};w.attachEvent('onunload',clr);}v.page_window=null;return true;case"mceRemoveEditor":case"mceRemoveControl":ed.remove();return true;case'mceToggleEditor':if(!ed){t.execCommand('mceAddControl',0,v);return true;}if(ed.isHidden())ed.show();else ed.hide();return true;}if(t.activeEditor)return t.activeEditor.execCommand(c,u,v);return false;},execInstanceCommand:function(id,c,u,v){var ed=this.get(id);if(ed)return ed.execCommand(c,u,v);return false;},triggerSave:function(){each(this.editors,function(e){e.save();});},addI18n:function(p,o){var lo,i18n=this.i18n;if(!tinymce.is(p,'string')){each(p,function(o,lc){each(o,function(o,g){each(o,function(o,k){if(g==='common')i18n[lc+'.'+k]=o;else i18n[lc+'.'+g+'.'+k]=o;});});});}else{each(o,function(o,k){i18n[p+'.'+k]=o;});}},_setActive:function(e){this.selectedInstance=this.activeEditor=e;}});tinymce.EditorManager.preInit();})();var tinyMCE=window.tinyMCE=tinymce.EditorManager;(function(){var DOM=tinymce.DOM,Event=tinymce.dom.Event,extend=tinymce.extend,Dispatcher=tinymce.util.Dispatcher;var each=tinymce.each,isGecko=tinymce.isGecko,isIE=tinymce.isIE,isWebKit=tinymce.isWebKit;var is=tinymce.is,ThemeManager=tinymce.ThemeManager,PluginManager=tinymce.PluginManager,EditorManager=tinymce.EditorManager;var inArray=tinymce.inArray,grep=tinymce.grep,explode=tinymce.explode;tinymce.create('tinymce.Editor',{Editor:function(id,s){var t=this;t.id=t.editorId=id;t.execCommands={};t.queryStateCommands={};t.queryValueCommands={};t.plugins={};each(['onPreInit','onBeforeRenderUI','onPostRender','onInit','onRemove','onActivate','onDeactivate','onClick','onEvent','onMouseUp','onMouseDown','onDblClick','onKeyDown','onKeyUp','onKeyPress','onContextMenu','onSubmit','onReset','onPaste','onPreProcess','onPostProcess','onBeforeSetContent','onBeforeGetContent','onSetContent','onGetContent','onLoadContent','onSaveContent','onNodeChange','onChange','onBeforeExecCommand','onExecCommand','onUndo','onRedo','onVisualAid','onSetProgressState'],function(e){t[e]=new Dispatcher(t);});t.settings=s=extend({id:id,language:'en',docs_language:'en',theme:'simple',skin:'default',delta_width:0,delta_height:0,popup_css:'',plugins:'',document_base_url:tinymce.documentBaseURL,add_form_submit_trigger:1,submit_patch:1,add_unload_trigger:1,convert_urls:1,relative_urls:1,remove_script_host:1,table_inline_editing:0,object_resizing:1,cleanup:1,accessibility_focus:1,custom_shortcuts:1,custom_undo_redo_keyboard_shortcuts:1,custom_undo_redo_restore_selection:1,custom_undo_redo:1,doctype:'<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">',visual_table_class:'mceItemTable',visual:1,inline_styles:true,convert_fonts_to_spans:true,font_size_style_values:'xx-small,x-small,small,medium,large,x-large,xx-large',apply_source_formatting:1,directionality:'ltr',forced_root_block:'p',valid_elements:'@[id|class|style|title|dir<ltr?rtl|lang|xml::lang|onclick|ondblclick|onmousedown|onmouseup|onmouseover|onmousemove|onmouseout|onkeypress|onkeydown|onkeyup],a[rel|rev|charset|hreflang|tabindex|accesskey|type|name|href|target|title|class|onfocus|onblur],strong/b,em/i,strike,u,#p[align],-ol[type|compact],-ul[type|compact],-li,br,img[longdesc|usemap|src|border|alt=|title|hspace|vspace|width|height|align],-sub,-sup,-blockquote,-table[border=0|cellspacing|cellpadding|width|frame|rules|height|align|summary|bgcolor|background|bordercolor],-tr[rowspan|width|height|align|valign|bgcolor|background|bordercolor],tbody,thead,tfoot,#td[colspan|rowspan|width|height|align|valign|bgcolor|background|bordercolor|scope],#th[colspan|rowspan|width|height|align|valign|scope],caption,-div,-span,-code,-pre,address,-h1,-h2,-h3,-h4,-h5,-h6,hr[size|noshade],-font[face|size|color],dd,dl,dt,cite,abbr,acronym,del[datetime|cite],ins[datetime|cite],object[classid|width|height|codebase|*],param[name|value|_value],embed[type|width|height|src|*],script[src|type],map[name],area[shape|coords|href|alt|target],bdo,button,col[align|char|charoff|span|valign|width],colgroup[align|char|charoff|span|valign|width],dfn,fieldset,form[action|accept|accept-charset|enctype|method],input[accept|alt|checked|disabled|maxlength|name|readonly|size|src|type|value],kbd,label[for],legend,noscript,optgroup[label|disabled],option[disabled|label|selected|value],q[cite],samp,select[disabled|multiple|name|size],small,textarea[cols|rows|disabled|name|readonly],tt,var,big',hidden_input:1,padd_empty_editor:1,render_ui:1,init_theme:1,force_p_newlines:1,indentation:'30px'},s);t.documentBaseURI=new tinymce.util.URI(s.document_base_url||tinymce.documentBaseURL,{base_uri:tinyMCE.baseURI});t.baseURI=EditorManager.baseURI;t.execCallback('setup',t);},render:function(nst){var t=this,s=t.settings,id=t.id,sl=tinymce.ScriptLoader;if(!Event.domLoaded){Event.add(document,'init',function(){t.render();});return;}if(!nst){s.strict_loading_mode=1;tinyMCE.settings=s;}if(!t.getElement())return;if(s.strict_loading_mode){sl.settings.strict_mode=s.strict_loading_mode;tinymce.DOM.settings.strict=1;}if(!/TEXTAREA|INPUT/i.test(t.getElement().nodeName)&&s.hidden_input&&DOM.getParent(id,'form'))DOM.insertAfter(DOM.create('input',{type:'hidden',name:id}),id);t.windowManager=new tinymce.WindowManager(t);if(s.encoding=='xml'){t.onGetContent.add(function(ed,o){if(o.get)o.content=DOM.encode(o.content);});}if(s.add_form_submit_trigger){t.onSubmit.addToTop(function(){if(t.initialized){t.save();t.isNotDirty=1;}});}if(s.add_unload_trigger){t._beforeUnload=tinyMCE.onBeforeUnload.add(function(){if(t.initialized&&!t.destroyed)t.save({format:'raw',no_events:true});});}tinymce.addUnload(t.destroy,t);if(s.submit_patch){t.onBeforeRenderUI.add(function(){var n=t.getElement().form;if(!n)return;if(n._mceOldSubmit)return;if(!n.submit.nodeType&&!n.submit.length){t.formElement=n;n._mceOldSubmit=n.submit;n.submit=function(){EditorManager.triggerSave();t.isNotDirty=1;return this._mceOldSubmit(this);};}n=null;});}function loadScripts(){if(s.language)sl.add(tinymce.baseURL+'/langs/'+s.language+'.js');if(s.theme.charAt(0)!='-'&&!ThemeManager.urls[s.theme])ThemeManager.load(s.theme,'themes/'+s.theme+'/editor_template'+tinymce.suffix+'.js');each(explode(s.plugins),function(p){if(p&&p.charAt(0)!='-'&&!PluginManager.urls[p]){if(!isWebKit&&p=='safari')return;PluginManager.load(p,'plugins/'+p+'/editor_plugin'+tinymce.suffix+'.js');}});sl.loadQueue(function(){if(s.ask){function ask(){t.windowManager.confirm(t.getLang('edit_confirm'),function(s){if(s)t.init();else Event.remove(t.id,'focus',ask);});};Event.add(t.id,'focus',ask);return;}if(!t.removed)t.init();});};if(s.plugins.indexOf('compat2x')!=-1){PluginManager.load('compat2x','plugins/compat2x/editor_plugin'+tinymce.suffix+'.js');sl.loadQueue(loadScripts);}else loadScripts();},init:function(){var n,t=this,s=t.settings,w,h,e=t.getElement(),o,ti,u,bi,bc,re;EditorManager.add(t);s.theme=s.theme.replace(/-/,'');o=ThemeManager.get(s.theme);t.theme=new o();if(t.theme.init&&s.init_theme)t.theme.init(t,ThemeManager.urls[s.theme]||tinymce.documentBaseURL.replace(/\/$/,''));each(explode(s.plugins.replace(/\-/g,'')),function(p){var c=PluginManager.get(p),u=PluginManager.urls[p]||tinymce.documentBaseURL.replace(/\/$/,''),po;if(c){po=new c(t,u);t.plugins[p]=po;if(po.init)po.init(t,u);}});if(s.popup_css)s.popup_css=t.documentBaseURI.toAbsolute(s.popup_css);else s.popup_css=t.baseURI.toAbsolute("themes/"+s.theme+"/skins/"+s.skin+"/dialog.css");if(s.popup_css_add)s.popup_css+=','+t.documentBaseURI.toAbsolute(s.popup_css_add);t.controlManager=new tinymce.ControlManager(t);t.undoManager=new tinymce.UndoManager(t);t.undoManager.onAdd.add(function(um,l){return t.onChange.dispatch(t,l,um);});t.undoManager.onUndo.add(function(um,l){return t.onUndo.dispatch(t,l,um);});t.undoManager.onRedo.add(function(um,l){return t.onRedo.dispatch(t,l,um);});if(s.custom_undo_redo){t.onExecCommand.add(function(ed,cmd,ui,val,a){if(cmd!='Undo'&&cmd!='Redo'&&cmd!='mceRepaint'&&(!a||!a.skip_undo))t.undoManager.add();});}t.onExecCommand.add(function(ed,c){if(!/^(FontName|FontSize)$/.test(c))t.nodeChanged();});if(isGecko){function repaint(a,o){if(!o||!o.initial)t.execCommand('mceRepaint');};t.onUndo.add(repaint);t.onRedo.add(repaint);t.onSetContent.add(repaint);}t.onBeforeRenderUI.dispatch(t,t.controlManager);if(s.render_ui){w=s.width||e.style.width||e.clientWidth;h=s.height||e.style.height||e.clientHeight;t.orgDisplay=e.style.display;re=/^[0-9\.]+(|px)$/i;if(re.test(''+w))w=Math.max(parseInt(w)+(o.deltaWidth||0),100);if(re.test(''+h))h=Math.max(parseInt(h)+(o.deltaHeight||0),100);o=t.theme.renderUI({targetNode:e,width:w,height:h,deltaWidth:s.delta_width,deltaHeight:s.delta_height});t.editorContainer=o.editorContainer;}DOM.setStyles(o.sizeContainer||o.editorContainer,{width:w,height:h});h=(o.iframeHeight||h)+((h+'').indexOf('%')==-1?(o.deltaHeight||0):'');if(h<100)h=100;t.iframeHTML=s.doctype+'<html><head xmlns="http://www.w3.org/1999/xhtml"><base href="'+t.documentBaseURI.getURI()+'"></base>';t.iframeHTML+='<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />';if(tinymce.relaxedDomain)t.iframeHTML+='<script type="text/javascript">document.domain = "'+tinymce.relaxedDomain+'";</script>';bi=s.body_id||'tinymce';if(bi.indexOf('=')!=-1){bi=t.getParam('body_id','','hash');bi=bi[t.id]||bi;}bc=s.body_class||'';if(bc.indexOf('=')!=-1){bc=t.getParam('body_class','','hash');bc=bc[t.id]||'';}t.iframeHTML+='</head><body id="'+bi+'" class="mceContentBody '+bc+'"></body></html>';if(tinymce.relaxedDomain){if(isIE)u='javascript:(function(){document.open();document.domain="'+document.domain+'";var ed = window.parent.tinyMCE.get("'+t.id+'");document.write(ed.iframeHTML);document.close();ed.setupIframe();})()';else if(tinymce.isOpera)u='javascript:(function(){document.open();document.domain="'+document.domain+'";document.close();ed.setupIframe();})()';}n=DOM.add(o.iframeContainer,'iframe',{id:t.id+"_ifr",src:u||'javascript:""',frameBorder:'0',style:{width:'100%',height:h}});t.contentAreaContainer=o.iframeContainer;DOM.get(o.editorContainer).style.display=t.orgDisplay;DOM.get(t.id).style.display='none';if(tinymce.isOldWebKit){Event.add(n,'load',t.setupIframe,t);n.src=tinymce.baseURL+'/plugins/safari/blank.htm';}else{if(!isIE||!tinymce.relaxedDomain)t.setupIframe();e=n=o=null;}},setupIframe:function(){var t=this,s=t.settings,e=DOM.get(t.id),d=t.getDoc(),h,b;if(!isIE||!tinymce.relaxedDomain){d.open();d.write(t.iframeHTML);d.close();}if(!isIE){try{d.designMode='On';}catch(ex){}}if(isIE){b=t.getBody();DOM.hide(b);b.contentEditable=true;DOM.show(b);}t.dom=new tinymce.DOM.DOMUtils(t.getDoc(),{keep_values:true,url_converter:t.convertURL,url_converter_scope:t,hex_colors:s.force_hex_style_colors,class_filter:s.class_filter,update_styles:1,fix_ie_paragraphs:1});t.serializer=new tinymce.dom.Serializer({entity_encoding:s.entity_encoding,entities:s.entities,valid_elements:s.verify_html===false?'*[*]':s.valid_elements,extended_valid_elements:s.extended_valid_elements,valid_child_elements:s.valid_child_elements,invalid_elements:s.invalid_elements,fix_table_elements:s.fix_table_elements,fix_list_elements:s.fix_list_elements,fix_content_duplication:s.fix_content_duplication,convert_fonts_to_spans:s.convert_fonts_to_spans,font_size_classes:s.font_size_classes,font_size_style_values:s.font_size_style_values,apply_source_formatting:s.apply_source_formatting,remove_linebreaks:s.remove_linebreaks,dom:t.dom});t.selection=new tinymce.dom.Selection(t.dom,t.getWin(),t.serializer);t.forceBlocks=new tinymce.ForceBlocks(t,{forced_root_block:s.forced_root_block});t.editorCommands=new tinymce.EditorCommands(t);t.serializer.onPreProcess.add(function(se,o){return t.onPreProcess.dispatch(t,o,se);});t.serializer.onPostProcess.add(function(se,o){return t.onPostProcess.dispatch(t,o,se);});t.onPreInit.dispatch(t);if(!s.gecko_spellcheck)t.getBody().spellcheck=0;t._addEvents();t.controlManager.onPostRender.dispatch(t,t.controlManager);t.onPostRender.dispatch(t);if(s.directionality)t.getBody().dir=s.directionality;if(s.nowrap)t.getBody().style.whiteSpace="nowrap";if(s.auto_resize)t.onNodeChange.add(t.resizeToContent,t);if(s.custom_elements){function handleCustom(ed,o){each(explode(s.custom_elements),function(v){var n;if(v.indexOf('~')===0){v=v.substring(1);n='span';}else n='div';o.content=o.content.replace(new RegExp('<('+v+')([^>]*)>','g'),'<'+n+' mce_name="$1"$2>');o.content=o.content.replace(new RegExp('</('+v+')>','g'),'</'+n+'>');});};t.onBeforeSetContent.add(handleCustom);t.onPostProcess.add(function(ed,o){if(o.set)handleCustom(ed,o)});}if(s.handle_node_change_callback){t.onNodeChange.add(function(ed,cm,n){t.execCallback('handle_node_change_callback',t.id,n,-1,-1,true,t.selection.isCollapsed());});}if(s.save_callback){t.onSaveContent.add(function(ed,o){var h=t.execCallback('save_callback',t.id,o.content,t.getBody());if(h)o.content=h;});}if(s.onchange_callback){t.onChange.add(function(ed,l){t.execCallback('onchange_callback',t,l);});}if(s.convert_newlines_to_brs){t.onBeforeSetContent.add(function(ed,o){if(o.initial)o.content=o.content.replace(/\r?\n/g,'<br />');});}if(s.fix_nesting&&isIE){t.onBeforeSetContent.add(function(ed,o){o.content=t._fixNesting(o.content);});}if(s.preformatted){t.onPostProcess.add(function(ed,o){o.content=o.content.replace(/^\s*<pre.*?>/,'');o.content=o.content.replace(/<\/pre>\s*$/,'');if(o.set)o.content='<pre class="mceItemHidden">'+o.content+'</pre>';});}if(s.verify_css_classes){t.serializer.attribValueFilter=function(n,v){var s,cl;if(n=='class'){if(!t.classesRE){cl=t.dom.getClasses();if(cl.length>0){s='';each(cl,function(o){s+=(s?'|':'')+o['class'];});t.classesRE=new RegExp('('+s+')','gi');}}return!t.classesRE||/(\bmceItem\w+\b|\bmceTemp\w+\b)/g.test(v)||t.classesRE.test(v)?v:'';}return v;};}if(s.convert_fonts_to_spans)t._convertFonts();if(s.inline_styles)t._convertInlineElements();if(s.cleanup_callback){t.onBeforeSetContent.add(function(ed,o){o.content=t.execCallback('cleanup_callback','insert_to_editor',o.content,o);});t.onPreProcess.add(function(ed,o){if(o.set)t.execCallback('cleanup_callback','insert_to_editor_dom',o.node,o);if(o.get)t.execCallback('cleanup_callback','get_from_editor_dom',o.node,o);});t.onPostProcess.add(function(ed,o){if(o.set)o.content=t.execCallback('cleanup_callback','insert_to_editor',o.content,o);if(o.get)o.content=t.execCallback('cleanup_callback','get_from_editor',o.content,o);});}if(s.save_callback){t.onGetContent.add(function(ed,o){if(o.save)o.content=t.execCallback('save_callback',t.id,o.content,t.getBody());});}if(s.handle_event_callback){t.onEvent.add(function(ed,e,o){if(t.execCallback('handle_event_callback',e,ed,o)===false)Event.cancel(e);});}t.onSetContent.add(function(){t.addVisual(t.getBody());});if(s.padd_empty_editor){t.onPostProcess.add(function(ed,o){o.content=o.content.replace(/^<p>( |#160;|\s|\u00a0)<\/p>$/,'');});}if(isGecko){try{d.designMode='Off';d.designMode='On';}catch(ex){}}setTimeout(function(){if(t.removed)return;t.load({initial:true,format:(s.cleanup_on_startup?'html':'raw')});t.startContent=t.getContent({format:'raw'});t.undoManager.add({initial:true});t.initialized=true;t.onInit.dispatch(t);t.execCallback('setupcontent_callback',t.id,t.getBody(),t.getDoc());t.execCallback('init_instance_callback',t);t.focus(true);t.nodeChanged({initial:1});if(s.content_css){tinymce.each(explode(s.content_css),function(u){t.dom.loadCSS(t.documentBaseURI.toAbsolute(u));});}if(s.auto_focus){setTimeout(function(){var ed=EditorManager.get(s.auto_focus);ed.selection.select(ed.getBody(),1);ed.selection.collapse(1);ed.getWin().focus();},100);}},1);e=null;},focus:function(sf){var oed,t=this;if(!sf){t.getWin().focus();}if(EditorManager.activeEditor!=t){if((oed=EditorManager.activeEditor)!=null)oed.onDeactivate.dispatch(oed,t);t.onActivate.dispatch(t,oed);}EditorManager._setActive(t);},execCallback:function(n){var t=this,f=t.settings[n],s;if(!f)return;if(t.callbackLookup&&(s=t.callbackLookup[n])){f=s.func;s=s.scope;}if(is(f,'string')){s=f.replace(/\.\w+$/,'');s=s?tinymce.resolve(s):0;f=tinymce.resolve(f);t.callbackLookup=t.callbackLookup||{};t.callbackLookup[n]={func:f,scope:s};}return f.apply(s||t,Array.prototype.slice.call(arguments,1));},translate:function(s){var c=this.settings.language,i18n=EditorManager.i18n;if(!s)return'';return i18n[c+'.'+s]||s.replace(/{\#([^}]+)\}/g,function(a,b){return i18n[c+'.'+b]||'{#'+b+'}';});},getLang:function(n,dv){return EditorManager.i18n[this.settings.language+'.'+n]||(is(dv)?dv:'{#'+n+'}');},getParam:function(n,dv,ty){var tr=tinymce.trim,v=is(this.settings[n])?this.settings[n]:dv,o;if(ty==='hash'){o={};if(is(v,'string')){each(v.indexOf('=')>0?v.split(/[;,](?![^=;,]*(?:[;,]|$))/):v.split(','),function(v){v=v.split('=');if(v.length>1)o[tr(v[0])]=tr(v[1]);else o[tr(v[0])]=tr(v);});}else o=v;return o;}return v;},nodeChanged:function(o){var t=this,s=t.selection,n=s.getNode()||t.getBody();if(t.initialized){t.onNodeChange.dispatch(t,o?o.controlManager||t.controlManager:t.controlManager,isIE&&n.ownerDocument!=t.getDoc()?t.getBody():n,s.isCollapsed(),o);}},addButton:function(n,s){var t=this;t.buttons=t.buttons||{};t.buttons[n]=s;},addCommand:function(n,f,s){this.execCommands[n]={func:f,scope:s||this};},addQueryStateHandler:function(n,f,s){this.queryStateCommands[n]={func:f,scope:s||this};},addQueryValueHandler:function(n,f,s){this.queryValueCommands[n]={func:f,scope:s||this};},addShortcut:function(pa,desc,cmd_func,sc){var t=this,c;if(!t.settings.custom_shortcuts)return false;t.shortcuts=t.shortcuts||{};if(is(cmd_func,'string')){c=cmd_func;cmd_func=function(){t.execCommand(c,false,null);};}if(is(cmd_func,'object')){c=cmd_func;cmd_func=function(){t.execCommand(c[0],c[1],c[2]);};}each(explode(pa),function(pa){var o={func:cmd_func,scope:sc||this,desc:desc,alt:false,ctrl:false,shift:false};each(explode(pa,'+'),function(v){switch(v){case'alt':case'ctrl':case'shift':o[v]=true;break;default:o.charCode=v.charCodeAt(0);o.keyCode=v.toUpperCase().charCodeAt(0);}});t.shortcuts[(o.ctrl?'ctrl':'')+','+(o.alt?'alt':'')+','+(o.shift?'shift':'')+','+o.keyCode]=o;});return true;},execCommand:function(cmd,ui,val,a){var t=this,s=0,o;if(!/^(mceAddUndoLevel|mceEndUndoLevel|mceBeginUndoLevel|mceRepaint|SelectAll)$/.test(cmd)&&(!a||!a.skip_focus))t.focus();o={};t.onBeforeExecCommand.dispatch(t,cmd,ui,val,o);if(o.terminate)return false;if(t.execCallback('execcommand_callback',t.id,t.selection.getNode(),cmd,ui,val)){t.onExecCommand.dispatch(t,cmd,ui,val,a);return true;}if(o=t.execCommands[cmd]){s=o.func.call(o.scope,ui,val);t.onExecCommand.dispatch(t,cmd,ui,val,a);return s;}each(t.plugins,function(p){if(p.execCommand&&p.execCommand(cmd,ui,val)){t.onExecCommand.dispatch(t,cmd,ui,val,a);s=1;return false;}});if(s)return true;if(t.theme.execCommand&&t.theme.execCommand(cmd,ui,val)){t.onExecCommand.dispatch(t,cmd,ui,val,a);return true;}if(t.editorCommands.execCommand(cmd,ui,val)){t.onExecCommand.dispatch(t,cmd,ui,val,a);return true;}t.getDoc().execCommand(cmd,ui,val);t.onExecCommand.dispatch(t,cmd,ui,val,a);},queryCommandState:function(c){var t=this,o;if(t._isHidden())return;if(o=t.queryStateCommands[c])return o.func.call(o.scope);o=t.editorCommands.queryCommandState(c);if(o!==-1)return o;try{return this.getDoc().queryCommandState(c);}catch(ex){}},queryCommandValue:function(c){var t=this,o;if(t._isHidden())return;if(o=t.queryValueCommands[c])return o.func.call(o.scope);o=t.editorCommands.queryCommandValue(c);if(is(o))return o;try{return this.getDoc().queryCommandValue(c);}catch(ex){}},show:function(){var t=this;DOM.show(t.getContainer());DOM.hide(t.id);t.load();},hide:function(){var t=this,d=t.getDoc();if(isIE&&d)d.execCommand('SelectAll');t.save();DOM.hide(t.getContainer());DOM.setStyle(t.id,'display',t.orgDisplay);},isHidden:function(){return!DOM.isHidden(this.id);},setProgressState:function(b,ti,o){this.onSetProgressState.dispatch(this,b,ti,o);return b;},resizeToContent:function(){var t=this;DOM.setStyle(t.id+"_ifr",'height',t.getBody().scrollHeight);},load:function(o){var t=this,e=t.getElement(),h;o=o||{};o.load=true;h=t.setContent(is(e.value)?e.value:e.innerHTML,o);o.element=e;if(!o.no_events)t.onLoadContent.dispatch(t,o);o.element=e=null;return h;},save:function(o){var t=this,e=t.getElement(),h,f;if(!t.initialized)return;o=o||{};o.save=true;o.element=e;h=o.content=t.getContent(o);if(!o.no_events)t.onSaveContent.dispatch(t,o);h=o.content;if(!/TEXTAREA|INPUT/i.test(e.nodeName)){e.innerHTML=h;if(f=DOM.getParent(t.id,'form')){each(f.elements,function(e){if(e.name==t.id){e.value=h;return false;}});}}else e.value=h;o.element=e=null;return h;},setContent:function(h,o){var t=this;o=o||{};o.format=o.format||'html';o.set=true;o.content=h;if(!o.no_events)t.onBeforeSetContent.dispatch(t,o);if(!tinymce.isIE&&(h.length===0||/^\s+$/.test(h))){o.content=t.dom.setHTML(t.getBody(),'<br mce_bogus="1" />',1);o.format='raw';}o.content=t.dom.setHTML(t.getBody(),tinymce.trim(o.content));if(o.format!='raw'&&t.settings.cleanup){o.getInner=true;o.content=t.dom.setHTML(t.getBody(),t.serializer.serialize(t.getBody(),o));}if(!o.no_events)t.onSetContent.dispatch(t,o);return o.content;},getContent:function(o){var t=this,h;o=o||{};o.format=o.format||'html';o.get=true;if(!o.no_events)t.onBeforeGetContent.dispatch(t,o);if(o.format!='raw'&&t.settings.cleanup){o.getInner=true;h=t.serializer.serialize(t.getBody(),o);}else h=t.getBody().innerHTML;h=h.replace(/^\s*|\s*$/g,'');o={content:h};t.onGetContent.dispatch(t,o);return o.content;},isDirty:function(){var t=this;return tinymce.trim(t.startContent)!=tinymce.trim(t.getContent({format:'raw',no_events:1}))&&!t.isNotDirty;},getContainer:function(){var t=this;if(!t.container)t.container=DOM.get(t.editorContainer||t.id+'_parent');return t.container;},getContentAreaContainer:function(){return this.contentAreaContainer;},getElement:function(){return DOM.get(this.settings.content_element||this.id);},getWin:function(){var t=this,e;if(!t.contentWindow){e=DOM.get(t.id+"_ifr");if(e)t.contentWindow=e.contentWindow;}return t.contentWindow;},getDoc:function(){var t=this,w;if(!t.contentDocument){w=t.getWin();if(w)t.contentDocument=w.document;}return t.contentDocument;},getBody:function(){return this.bodyElement||this.getDoc().body;},convertURL:function(u,n,e){var t=this,s=t.settings;if(s.urlconverter_callback)return t.execCallback('urlconverter_callback',u,e,true,n);if(!s.convert_urls||(e&&e.nodeName=='LINK')||u.indexOf('file:')===0)return u;if(s.relative_urls)return t.documentBaseURI.toRelative(u);u=t.documentBaseURI.toAbsolute(u,s.remove_script_host);return u;},addVisual:function(e){var t=this,s=t.settings;e=e||t.getBody();if(!is(t.hasVisual))t.hasVisual=s.visual;each(t.dom.select('table,a',e),function(e){var v;switch(e.nodeName){case'TABLE':v=t.dom.getAttrib(e,'border');if(!v||v=='0'){if(t.hasVisual)t.dom.addClass(e,s.visual_table_class);else t.dom.removeClass(e,s.visual_table_class);}return;case'A':v=t.dom.getAttrib(e,'name');if(v){if(t.hasVisual)t.dom.addClass(e,'mceItemAnchor');else t.dom.removeClass(e,'mceItemAnchor');}return;}});t.onVisualAid.dispatch(t,e,t.hasVisual);},remove:function(){var t=this,e=t.getContainer();t.removed=1;t.hide();t.execCallback('remove_instance_callback',t);t.onRemove.dispatch(t);t.onExecCommand.listeners=[];EditorManager.remove(t);DOM.remove(e);},destroy:function(s){var t=this;if(t.destroyed)return;if(!s){tinymce.removeUnload(t.destroy);tinyMCE.onBeforeUnload.remove(t._beforeUnload);if(t.theme.destroy)t.theme.destroy();t.controlManager.destroy();t.selection.destroy();t.dom.destroy();Event.clear(t.getWin());Event.clear(t.getDoc());Event.clear(t.getBody());Event.clear(t.formElement);}if(t.formElement){t.formElement.submit=t.formElement._mceOldSubmit;t.formElement._mceOldSubmit=null;}t.contentAreaContainer=t.formElement=t.container=t.settings.content_element=t.bodyElement=t.contentDocument=t.contentWindow=null;if(t.selection)t.selection=t.selection.win=t.selection.dom=t.selection.dom.doc=null;t.destroyed=1;},_addEvents:function(){var t=this,i,s=t.settings,lo={mouseup:'onMouseUp',mousedown:'onMouseDown',click:'onClick',keyup:'onKeyUp',keydown:'onKeyDown',keypress:'onKeyPress',submit:'onSubmit',reset:'onReset',contextmenu:'onContextMenu',dblclick:'onDblClick',paste:'onPaste'};function eventHandler(e,o){var ty=e.type;if(t.removed)return;if(t.onEvent.dispatch(t,e,o)!==false){t[lo[e.fakeType||e.type]].dispatch(t,e,o);}};each(lo,function(v,k){switch(k){case'contextmenu':if(tinymce.isOpera){Event.add(t.getDoc(),'mousedown',function(e){if(e.ctrlKey){e.fakeType='contextmenu';eventHandler(e);}});}else Event.add(t.getDoc(),k,eventHandler);break;case'paste':Event.add(t.getBody(),k,function(e){var tx,h,el,r;if(e.clipboardData)tx=e.clipboardData.getData('text/plain');else if(tinymce.isIE)tx=t.getWin().clipboardData.getData('Text');eventHandler(e,{text:tx,html:h});});break;case'submit':case'reset':Event.add(t.getElement().form||DOM.getParent(t.id,'form'),k,eventHandler);break;default:Event.add(s.content_editable?t.getBody():t.getDoc(),k,eventHandler);}});Event.add(s.content_editable?t.getBody():(isGecko?t.getDoc():t.getWin()),'focus',function(e){t.focus(true);});if(tinymce.isGecko){Event.add(t.getDoc(),'DOMNodeInserted',function(e){var v;e=e.target;if(e.nodeType===1&&e.nodeName==='IMG'&&(v=e.getAttribute('mce_src')))e.src=t.documentBaseURI.toAbsolute(v);});}if(isGecko){function setOpts(){var t=this,d=t.getDoc(),s=t.settings;if(isGecko){if(t._isHidden()){try{if(!s.content_editable)d.designMode='On';}catch(ex){}}try{d.execCommand("styleWithCSS",0,false);}catch(ex){if(!t._isHidden())d.execCommand("useCSS",0,true);}if(!s.table_inline_editing)try{d.execCommand('enableInlineTableEditing',false,false);}catch(ex){}if(!s.object_resizing)try{d.execCommand('enableObjectResizing',false,false);}catch(ex){}}};t.onBeforeExecCommand.add(setOpts);t.onMouseDown.add(setOpts);}t.onMouseUp.add(t.nodeChanged);t.onClick.add(t.nodeChanged);t.onKeyUp.add(function(ed,e){if((e.keyCode>=33&&e.keyCode<=36)||(e.keyCode>=37&&e.keyCode<=40)||e.keyCode==13||e.keyCode==45||e.keyCode==46||e.keyCode==8||e.ctrlKey)t.nodeChanged();});t.onReset.add(function(){t.setContent(t.startContent,{format:'raw'});});if(t.getParam('tab_focus')){function tabCancel(ed,e){if(e.keyCode===9)return Event.cancel(e);};function tabHandler(ed,e){var x,i,f,el,v;function find(d){f=DOM.getParent(ed.id,'form');el=f.elements;if(f){each(el,function(e,i){if(e.id==ed.id){x=i;return false;}});if(d>0){for(i=x+1;i<el.length;i++){if(el[i].type!='hidden')return el[i];}}else{for(i=x-1;i>=0;i--){if(el[i].type!='hidden')return el[i];}}}return null;};if(e.keyCode===9){v=explode(ed.getParam('tab_focus'));if(v.length==1){v[1]=v[0];v[0]=':prev';}if(e.shiftKey){if(v[0]==':prev')el=find(-1);else el=DOM.get(v[0]);}else{if(v[1]==':next')el=find(1);else el=DOM.get(v[1]);}if(el){if(ed=EditorManager.get(el.id||el.name))ed.focus();else window.setTimeout(function(){window.focus();el.focus();},10);return Event.cancel(e);}}};t.onKeyUp.add(tabCancel);if(isGecko){t.onKeyPress.add(tabHandler);t.onKeyDown.add(tabCancel);}else t.onKeyDown.add(tabHandler);}if(s.custom_shortcuts){if(s.custom_undo_redo_keyboard_shortcuts){t.addShortcut('ctrl+z',t.getLang('undo_desc'),'Undo');t.addShortcut('ctrl+y',t.getLang('redo_desc'),'Redo');}if(isGecko){t.addShortcut('ctrl+b',t.getLang('bold_desc'),'Bold');t.addShortcut('ctrl+i',t.getLang('italic_desc'),'Italic');t.addShortcut('ctrl+u',t.getLang('underline_desc'),'Underline');}for(i=1;i<=6;i++)t.addShortcut('ctrl+'+i,'',['FormatBlock',false,'<h'+i+'>']);t.addShortcut('ctrl+7','',['FormatBlock',false,'<p>']);t.addShortcut('ctrl+8','',['FormatBlock',false,'<div>']);t.addShortcut('ctrl+9','',['FormatBlock',false,'<address>']);function find(e){var v=null;if(!e.altKey&&!e.ctrlKey&&!e.metaKey)return v;each(t.shortcuts,function(o){if(o.ctrl!=e.ctrlKey&&(!tinymce.isMac||o.ctrl==e.metaKey))return;if(o.alt!=e.altKey)return;if(o.shift!=e.shiftKey)return;if(e.keyCode==o.keyCode||(e.charCode&&e.charCode==o.charCode)){v=o;return false;}});return v;};t.onKeyUp.add(function(ed,e){var o=find(e);if(o)return Event.cancel(e);});t.onKeyPress.add(function(ed,e){var o=find(e);if(o)return Event.cancel(e);});t.onKeyDown.add(function(ed,e){var o=find(e);if(o){o.func.call(o.scope);return Event.cancel(e);}});}if(tinymce.isIE){Event.add(t.getDoc(),'controlselect',function(e){var re=t.resizeInfo,cb;e=e.target;e.removeAttribute('mce_style');if(e.nodeName!=='IMG')return;if(re)Event.remove(re.node,re.ev,re.cb);if(!t.dom.hasClass(e,'mceItemNoResize')){ev='resizeend';cb=Event.add(e,ev,function(e){var v;e=e.target;if(v=t.dom.getStyle(e,'width')){t.dom.setAttrib(e,'width',v.replace(/[^0-9%]+/g,''));t.dom.setStyle(e,'width','');}if(v=t.dom.getStyle(e,'height')){t.dom.setAttrib(e,'height',v.replace(/[^0-9%]+/g,''));t.dom.setStyle(e,'height','');}});}else{ev='resizestart';cb=Event.add(e,'resizestart',Event.cancel,Event);}re=t.resizeInfo={node:e,ev:ev,cb:cb};});t.onKeyDown.add(function(ed,e){switch(e.keyCode){case 8:if(t.selection.getRng().item){t.selection.getRng().item(0).removeNode();return Event.cancel(e);}}});}if(tinymce.isOpera){t.onClick.add(function(ed,e){Event.prevent(e);});}if(s.custom_undo_redo){function addUndo(){t.undoManager.typing=0;t.undoManager.add();};if(tinymce.isIE){Event.add(t.getWin(),'blur',function(e){var n;if(t.selection){n=t.selection.getNode();if(!t.removed&&n.ownerDocument&&n.ownerDocument!=t.getDoc())addUndo();}});}else{Event.add(t.getDoc(),'blur',function(){if(t.selection&&!t.removed)addUndo();});}t.onMouseDown.add(addUndo);t.onKeyUp.add(function(ed,e){if((e.keyCode>=33&&e.keyCode<=36)||(e.keyCode>=37&&e.keyCode<=40)||e.keyCode==13||e.keyCode==45||e.ctrlKey){t.undoManager.typing=0;t.undoManager.add();}});t.onKeyDown.add(function(ed,e){if((e.keyCode>=33&&e.keyCode<=36)||(e.keyCode>=37&&e.keyCode<=40)||e.keyCode==13||e.keyCode==45){if(t.undoManager.typing){t.undoManager.add();t.undoManager.typing=0;}return;}if(!t.undoManager.typing){t.undoManager.add();t.undoManager.typing=1;}});}},_convertInlineElements:function(){var t=this,s=t.settings,dom=t.dom,v,e,na,st,sp;function convert(ed,o){if(!s.inline_styles)return;if(o.get){each(t.dom.select('table,u,strike',o.node),function(n){switch(n.nodeName){case'TABLE':if(v=dom.getAttrib(n,'height')){dom.setStyle(n,'height',v);dom.setAttrib(n,'height','');}break;case'U':case'STRIKE':sp=dom.create('span',{style:dom.getAttrib(n,'style')});sp.style.textDecoration=n.nodeName=='U'?'underline':'line-through';dom.setAttrib(sp,'mce_style','');dom.replace(sp,n,1);break;}});}else if(o.set){each(t.dom.select('table,span',o.node),function(n){if(n.nodeName=='TABLE'){if(v=dom.getStyle(n,'height'))dom.setAttrib(n,'height',v.replace(/[^0-9%]+/g,''));}else{if(n.style.textDecoration=='underline')na='u';else if(n.style.textDecoration=='line-through')na='strike';else na='';if(na){n.style.textDecoration='';dom.setAttrib(n,'mce_style','');e=dom.create(na,{style:dom.getAttrib(n,'style')});dom.replace(e,n,1);}}});}};t.onPreProcess.add(convert);if(!s.cleanup_on_startup){t.onInit.add(function(){convert(t,{node:t.getBody(),set:1});});}},_convertFonts:function(){var t=this,s=t.settings,dom=t.dom,fz,fzn,sl,cl;if(!s.inline_styles)return;fz=[8,10,12,14,18,24,36];fzn=['xx-small','x-small','small','medium','large','x-large','xx-large'];if(sl=s.font_size_style_values)sl=explode(sl);if(cl=s.font_size_classes)cl=explode(cl);function convertToFonts(no){var n,f,nl,x,i,v,st;if(tinymce.isWebKit||!s.inline_styles)return;nl=t.dom.select('span',no);for(x=nl.length-1;x>=0;x--){n=nl[x];f=dom.create('font',{color:dom.toHex(dom.getStyle(n,'color')),face:dom.getStyle(n,'fontFamily'),style:dom.getAttrib(n,'style'),'class':dom.getAttrib(n,'class')});st=f.style;if(st.color||st.fontFamily){st.color=st.fontFamily='';dom.setAttrib(f,'mce_style','');}if(sl){i=inArray(sl,dom.getStyle(n,'fontSize'));if(i!=-1){dom.setAttrib(f,'size',''+(i+1||1));f.style.fontSize='';}}else if(cl){i=inArray(cl,dom.getAttrib(n,'class'));v=dom.getStyle(n,'fontSize');if(i==-1&&v.indexOf('pt')>0)i=inArray(fz,parseInt(v));if(i==-1)i=inArray(fzn,v);if(i!=-1){dom.setAttrib(f,'size',''+(i+1||1));f.style.fontSize='';}}if(f.color||f.face||f.size){f.style.fontFamily='';dom.setAttrib(f,'mce_style','');dom.replace(f,n,1);}f=n=null;}};t.onSetContent.add(function(ed,o){convertToFonts(ed.getBody());});t.onPreProcess.add(function(ed,o){var n,sp,nl,x;if(!s.inline_styles)return;if(o.get){nl=t.dom.select('font',o.node);for(x=nl.length-1;x>=0;x--){n=nl[x];sp=dom.create('span',{style:dom.getAttrib(n,'style'),'class':dom.getAttrib(n,'class')});dom.setStyles(sp,{fontFamily:dom.getAttrib(n,'face'),color:dom.getAttrib(n,'color'),backgroundColor:n.style.backgroundColor});if(n.size){if(sl)dom.setStyle(sp,'fontSize',sl[parseInt(n.size)-1]);else dom.setAttrib(sp,'class',cl[parseInt(n.size)-1]);}dom.setAttrib(sp,'mce_style','');dom.replace(sp,n,1);}}});},_isHidden:function(){var s;if(!isGecko)return 0;s=this.selection.getSel();return(!s||!s.rangeCount||s.rangeCount==0);},_fixNesting:function(s){var d=[],i;s=s.replace(/<(\/)?([^\s>]+)[^>]*?>/g,function(a,b,c){var e;if(b==='/'){if(!d.length)return'';if(c!==d[d.length-1].tag){for(i=d.length-1;i>=0;i--){if(d[i].tag===c){d[i].close=1;break;}}return'';}else{d.pop();if(d.length&&d[d.length-1].close){a=a+'</'+d[d.length-1].tag+'>';d.pop();}}}else{if(/^(br|hr|input|meta|img|link|param)$/i.test(c))return a;if(/\/>$/.test(a))return a;d.push({tag:c});}return a;});for(i=d.length-1;i>=0;i--)s+='</'+d[i].tag+'>';return s;}});})();(function(){var each=tinymce.each,isIE=tinymce.isIE,isGecko=tinymce.isGecko,isOpera=tinymce.isOpera,isWebKit=tinymce.isWebKit;tinymce.create('tinymce.EditorCommands',{EditorCommands:function(ed){this.editor=ed;},execCommand:function(cmd,ui,val){var t=this,ed=t.editor,f;switch(cmd){case'Cut':case'Copy':case'Paste':try{ed.getDoc().execCommand(cmd,ui,val);}catch(ex){if(isGecko){ed.windowManager.confirm(ed.getLang('clipboard_msg'),function(s){if(s)window.open('http://www.mozilla.org/editor/midasdemo/securityprefs.html','mceExternal');});}else ed.windowManager.alert(ed.getLang('clipboard_no_support'));}return true;case'mceResetDesignMode':case'mceBeginUndoLevel':return true;case'unlink':t.UnLink();return true;case'JustifyLeft':case'JustifyCenter':case'JustifyRight':case'JustifyFull':t.mceJustify(cmd,cmd.substring(7).toLowerCase());return true;case'mceEndUndoLevel':case'mceAddUndoLevel':ed.undoManager.add();return true;default:f=this[cmd];if(f){f.call(this,ui,val);return true;}}return false;},Indent:function(){var ed=this.editor,d=ed.dom,s=ed.selection,e,iv,iu;iv=ed.settings.indentation;iu=/[a-z%]+$/i.exec(iv);iv=parseInt(iv);if(ed.settings.inline_styles&&(!this.queryStateInsertUnorderedList()&&!this.queryStateInsertOrderedList())){each(this._getSelectedBlocks(),function(e){d.setStyle(e,'paddingLeft',(parseInt(e.style.paddingLeft||0)+iv)+iu);});return;}ed.getDoc().execCommand('Indent',false,null);if(isIE){d.getParent(s.getNode(),function(n){if(n.nodeName=='BLOCKQUOTE'){n.dir=n.style.cssText='';}});}},Outdent:function(){var ed=this.editor,d=ed.dom,s=ed.selection,e,v,iv,iu;iv=ed.settings.indentation;iu=/[a-z%]+$/i.exec(iv);iv=parseInt(iv);if(ed.settings.inline_styles&&(!this.queryStateInsertUnorderedList()&&!this.queryStateInsertOrderedList())){each(this._getSelectedBlocks(),function(e){v=Math.max(0,parseInt(e.style.paddingLeft||0)-iv);d.setStyle(e,'paddingLeft',v?v+iu:'');});return;}ed.getDoc().execCommand('Outdent',false,null);},mceSetAttribute:function(u,v){var ed=this.editor,d=ed.dom,e;if(e=d.getParent(ed.selection.getNode(),d.isBlock))d.setAttrib(e,v.name,v.value);},mceSetContent:function(u,v){this.editor.setContent(v);},mceToggleVisualAid:function(){var ed=this.editor;ed.hasVisual=!ed.hasVisual;ed.addVisual();},mceReplaceContent:function(u,v){var s=this.editor.selection;s.setContent(v.replace(/\{\$selection\}/g,s.getContent({format:'text'})));},mceInsertLink:function(u,v){var ed=this.editor,e=ed.dom.getParent(ed.selection.getNode(),'A');if(tinymce.is(v,'string'))v={href:v};function set(e){each(v,function(v,k){ed.dom.setAttrib(e,k,v);});};if(!e){ed.execCommand('CreateLink',false,'javascript:mctmp(0);');each(ed.dom.select('a'),function(e){if(e.href=='javascript:mctmp(0);')set(e);});}else{if(v.href)set(e);else ed.dom.remove(e,1);}},UnLink:function(){var ed=this.editor,s=ed.selection;if(s.isCollapsed())s.select(s.getNode());ed.getDoc().execCommand('unlink',false,null);s.collapse(0);},FontName:function(u,v){var t=this,ed=t.editor,s=ed.selection,e;if(!v){if(s.isCollapsed())s.select(s.getNode());t.RemoveFormat();}else ed.getDoc().execCommand('FontName',false,v);},queryCommandValue:function(c){var f=this['queryValue'+c];if(f)return f.call(this,c);return false;},queryCommandState:function(cmd){var f;switch(cmd){case'JustifyLeft':case'JustifyCenter':case'JustifyRight':case'JustifyFull':return this.queryStateJustify(cmd,cmd.substring(7).toLowerCase());default:if(f=this['queryState'+cmd])return f.call(this,cmd);}return-1;},_queryState:function(c){try{return this.editor.getDoc().queryCommandState(c);}catch(ex){}},_queryVal:function(c){try{return this.editor.getDoc().queryCommandValue(c);}catch(ex){}},queryValueFontSize:function(){var ed=this.editor,v=0,p;if(isOpera||isWebKit){if(p=ed.dom.getParent(ed.selection.getNode(),'FONT'))v=p.size;return v;}return this._queryVal('FontSize');},queryValueFontName:function(){var ed=this.editor,v=0,p;if(p=ed.dom.getParent(ed.selection.getNode(),'FONT'))v=p.face;if(!v)v=this._queryVal('FontName');return v;},mceJustify:function(c,v){var ed=this.editor,se=ed.selection,n=se.getNode(),nn=n.nodeName,bl,nb,dom=ed.dom,rm;if(ed.settings.inline_styles&&this.queryStateJustify(c,v))rm=1;bl=dom.getParent(n,ed.dom.isBlock);if(nn=='IMG'){if(v=='full')return;if(rm){if(v=='center')dom.setStyle(n.parentNode,'textAlign','');dom.setStyle(n,'float','');this.mceRepaint();return;}if(v=='center'){if(/^(TD|TH)$/.test(bl.nodeName))bl=0;if(!bl||bl.childNodes.length>1){nb=dom.create('p');nb.appendChild(n.cloneNode(false));if(bl)dom.insertAfter(nb,bl);else dom.insertAfter(nb,n);dom.remove(n);n=nb.firstChild;bl=nb;}dom.setStyle(bl,'textAlign',v);dom.setStyle(n,'float','');}else{dom.setStyle(n,'float',v);dom.setStyle(n.parentNode,'textAlign','');}this.mceRepaint();return;}if(ed.settings.inline_styles&&ed.settings.forced_root_block){if(rm)v='';each(this._getSelectedBlocks(dom.getParent(se.getStart(),dom.isBlock),dom.getParent(se.getEnd(),dom.isBlock)),function(e){dom.setAttrib(e,'align','');dom.setStyle(e,'textAlign',v=='full'?'justify':v);});return;}else if(!rm)ed.getDoc().execCommand(c,false,null);if(ed.settings.inline_styles){if(rm){dom.getParent(ed.selection.getNode(),function(n){if(n.style&&n.style.textAlign)dom.setStyle(n,'textAlign','');});return;}each(dom.select('*'),function(n){var v=n.align;if(v){if(v=='full')v='justify';dom.setStyle(n,'textAlign',v);dom.setAttrib(n,'align','');}});}},mceSetCSSClass:function(u,v){this.mceSetStyleInfo(0,{command:'setattrib',name:'class',value:v});},getSelectedElement:function(){var t=this,ed=t.editor,dom=ed.dom,se=ed.selection,r=se.getRng(),r1,r2,sc,ec,so,eo,e,sp,ep,re;if(se.isCollapsed()||r.item)return se.getNode();re=ed.settings.merge_styles_invalid_parents;if(tinymce.is(re,'string'))re=new RegExp(re,'i');if(isIE){r1=r.duplicate();r1.collapse(true);sc=r1.parentElement();r2=r.duplicate();r2.collapse(false);ec=r2.parentElement();if(sc!=ec){r1.move('character',1);sc=r1.parentElement();}if(sc==ec){r1=r.duplicate();r1.moveToElementText(sc);if(r1.compareEndPoints('StartToStart',r)==0&&r1.compareEndPoints('EndToEnd',r)==0)return re&&re.test(sc.nodeName)?null:sc;}}else{function getParent(n){return dom.getParent(n,function(n){return n.nodeType==1;});};sc=r.startContainer;ec=r.endContainer;so=r.startOffset;eo=r.endOffset;if(!r.collapsed){if(sc==ec){if(so-eo<2){if(sc.hasChildNodes()){sp=sc.childNodes[so];return re&&re.test(sp.nodeName)?null:sp;}}}}if(sc.nodeType!=3||ec.nodeType!=3)return null;if(so==0){sp=getParent(sc);if(sp&&sp.firstChild!=sc)sp=null;}if(so==sc.nodeValue.length){e=sc.nextSibling;if(e&&e.nodeType==1)sp=sc.nextSibling;}if(eo==0){e=ec.previousSibling;if(e&&e.nodeType==1)ep=e;}if(eo==ec.nodeValue.length){ep=getParent(ec);if(ep&&ep.lastChild!=ec)ep=null;}if(sp==ep)return re&&sp&&re.test(sp.nodeName)?null:sp;}return null;},InsertHorizontalRule:function(){if(isGecko||isIE)this.editor.selection.setContent('<hr />');else this.editor.getDoc().execCommand('InsertHorizontalRule',false,'');},RemoveFormat:function(){var t=this,ed=t.editor,s=ed.selection,b;if(isWebKit)s.setContent(s.getContent({format:'raw'}).replace(/(<(span|b|i|strong|em|strike) [^>]+>|<(span|b|i|strong|em|strike)>|<\/(span|b|i|strong|em|strike)>|)/g,''),{format:'raw'});else ed.getDoc().execCommand('RemoveFormat',false,null);t.mceSetStyleInfo(0,{command:'removeformat'});ed.addVisual();},mceSetStyleInfo:function(u,v){var t=this,ed=t.editor,d=ed.getDoc(),dom=ed.dom,e,b,s=ed.selection,nn=v.wrapper||'span',b=s.getBookmark(),re;function set(n,e){if(n.nodeType==1){switch(v.command){case'setattrib':return dom.setAttrib(n,v.name,v.value);case'setstyle':return dom.setStyle(n,v.name,v.value);case'removeformat':return dom.setAttrib(n,'class','');}}};re=ed.settings.merge_styles_invalid_parents;if(tinymce.is(re,'string'))re=new RegExp(re,'i');if(e=t.getSelectedElement())set(e,1);else{d.execCommand('FontName',false,'__');each(isWebKit?dom.select('span'):dom.select('font'),function(n){var sp,e;if(dom.getAttrib(n,'face')=='__'||n.style.fontFamily==='__'){sp=dom.create(nn,{mce_new:'1'});set(sp);each(n.childNodes,function(n){sp.appendChild(n.cloneNode(true));});dom.replace(sp,n);}});}each(dom.select(nn).reverse(),function(n){var p=n.parentNode;if(!dom.getAttrib(n,'mce_new')){p=dom.getParent(n,function(n){return n.nodeType==1&&dom.getAttrib(n,'mce_new');});if(p)dom.remove(n,1);}});each(dom.select(nn).reverse(),function(n){var p=n.parentNode;if(!p||!dom.getAttrib(n,'mce_new'))return;if(p.nodeName==nn.toUpperCase()&&p.childNodes.length==1)return dom.remove(p,1);if(n.nodeType==1&&(!re||!re.test(p.nodeName))&&p.childNodes.length==1){set(p);dom.setAttrib(n,'class','');}});each(dom.select(nn).reverse(),function(n){if(dom.getAttrib(n,'mce_new')||(dom.getAttribs(n).length<=1&&n.className==='')){if(!dom.getAttrib(n,'class')&&!dom.getAttrib(n,'style'))return dom.remove(n,1);dom.setAttrib(n,'mce_new','');}});s.moveToBookmark(b);},queryStateJustify:function(c,v){var ed=this.editor,n=ed.selection.getNode(),dom=ed.dom;if(n&&n.nodeName=='IMG'){if(dom.getStyle(n,'float')==v)return 1;return n.parentNode.style.textAlign==v;}n=dom.getParent(ed.selection.getStart(),function(n){return n.nodeType==1&&n.style.textAlign;});if(v=='full')v='justify';if(ed.settings.inline_styles)return(n&&n.style.textAlign==v);return this._queryState(c);},HiliteColor:function(ui,val){var t=this,ed=t.editor,d=ed.getDoc();function set(s){if(!isGecko)return;try{d.execCommand("styleWithCSS",0,s);}catch(ex){d.execCommand("useCSS",0,!s);}};if(isGecko||isOpera){set(true);d.execCommand('hilitecolor',false,val);set(false);}else d.execCommand('BackColor',false,val);},Undo:function(){var ed=this.editor;if(ed.settings.custom_undo_redo){ed.undoManager.undo();ed.nodeChanged();}else ed.getDoc().execCommand('Undo',false,null);},Redo:function(){var ed=this.editor;if(ed.settings.custom_undo_redo){ed.undoManager.redo();ed.nodeChanged();}else ed.getDoc().execCommand('Redo',false,null);},FormatBlock:function(ui,val){var t=this,ed=t.editor;val=ed.settings.forced_root_block?(val||'<p>'):val;if(/^(P|DIV|H[1-6]|ADDRESS|BLOCKQUOTE|PRE)$/.test(ed.selection.getNode().nodeName))t.mceRemoveNode();if(val.indexOf('<')==-1)val='<'+val+'>';if(tinymce.isGecko)val=val.replace(/<(div|blockquote|code|dt|dd|dl|samp)>/gi,'$1');ed.getDoc().execCommand('FormatBlock',false,val);},mceCleanup:function(){var ed=this.editor,s=ed.selection,b=s.getBookmark();ed.setContent(ed.getContent());s.moveToBookmark(b);},mceRemoveNode:function(ui,val){var ed=this.editor,s=ed.selection,b,n=val||s.getNode();if(n==ed.getBody())return;b=s.getBookmark();ed.dom.remove(n,1);s.moveToBookmark(b);ed.nodeChanged();},mceSelectNodeDepth:function(ui,val){var ed=this.editor,s=ed.selection,c=0;ed.dom.getParent(s.getNode(),function(n){if(n.nodeType==1&&c++==val){s.select(n);ed.nodeChanged();return false;}},ed.getBody());},mceSelectNode:function(u,v){this.editor.selection.select(v);},mceInsertContent:function(ui,val){this.editor.selection.setContent(val);},mceInsertRawHTML:function(ui,val){var ed=this.editor;ed.selection.setContent('tiny_mce_marker');ed.setContent(ed.getContent().replace(/tiny_mce_marker/g,val));},mceRepaint:function(){var s,b,e=this.editor;if(tinymce.isGecko){try{s=e.selection;b=s.getBookmark(true);if(s.getSel())s.getSel().selectAllChildren(e.getBody());s.collapse(true);s.moveToBookmark(b);}catch(ex){}}},queryStateUnderline:function(){var ed=this.editor,n;if(n&&n.nodeName=='A')return false;return this._queryState('Underline');},queryStateOutdent:function(){var ed=this.editor,n;if(ed.settings.inline_styles){if((n=ed.dom.getParent(ed.selection.getStart(),ed.dom.isBlock))&&parseInt(n.style.paddingLeft)>0)return true;if((n=ed.dom.getParent(ed.selection.getEnd(),ed.dom.isBlock))&&parseInt(n.style.paddingLeft)>0)return true;}else return!!ed.dom.getParent(ed.selection.getNode(),'BLOCKQUOTE');return this.queryStateInsertUnorderedList()||this.queryStateInsertOrderedList();},queryStateInsertUnorderedList:function(){return this.editor.dom.getParent(this.editor.selection.getNode(),'UL');},queryStateInsertOrderedList:function(){return this.editor.dom.getParent(this.editor.selection.getNode(),'OL');},queryStatemceBlockQuote:function(){return!!this.editor.dom.getParent(this.editor.selection.getStart(),function(n){return n.nodeName==='BLOCKQUOTE';});},mceBlockQuote:function(){var t=this,ed=t.editor,s=ed.selection,dom=ed.dom,sb,eb,n,bm,bq,r,bq2,i,nl;function getBQ(e){return dom.getParent(e,function(n){return n.nodeName==='BLOCKQUOTE';});};sb=dom.getParent(s.getStart(),dom.isBlock);eb=dom.getParent(s.getEnd(),dom.isBlock);if(bq=getBQ(sb)){if(sb!=eb||sb.childNodes.length>1||(sb.childNodes.length==1&&sb.firstChild.nodeName!='BR'))bm=s.getBookmark();if(getBQ(eb)){bq2=bq.cloneNode(false);while(n=eb.nextSibling)bq2.appendChild(n.parentNode.removeChild(n));}if(bq2)dom.insertAfter(bq2,bq);nl=t._getSelectedBlocks(sb,eb);for(i=nl.length-1;i>=0;i--){dom.insertAfter(nl[i],bq);}if(/^\s*$/.test(bq.innerHTML))dom.remove(bq,1);if(bq2&&/^\s*$/.test(bq2.innerHTML))dom.remove(bq2,1);if(!bm){if(!isIE){r=ed.getDoc().createRange();r.setStart(sb,0);r.setEnd(sb,0);s.setRng(r);}else{s.select(sb);s.collapse(0);if(dom.getParent(s.getStart(),dom.isBlock)!=sb){r=s.getRng();r.move('character',-1);r.select();}}}else t.editor.selection.moveToBookmark(bm);return;}if(isIE&&!sb&&!eb){t.editor.getDoc().execCommand('Indent');n=getBQ(s.getNode());n.style.margin=n.dir='';return;}if(!sb||!eb)return;if(sb!=eb||sb.childNodes.length>1||(sb.childNodes.length==1&&sb.firstChild.nodeName!='BR'))bm=s.getBookmark();each(t._getSelectedBlocks(getBQ(s.getStart()),getBQ(s.getEnd())),function(e){if(e.nodeName=='BLOCKQUOTE'&&!bq){bq=e;return;}if(!bq){bq=dom.create('blockquote');e.parentNode.insertBefore(bq,e);}if(e.nodeName=='BLOCKQUOTE'&&bq){n=e.firstChild;while(n){bq.appendChild(n.cloneNode(true));n=n.nextSibling;}dom.remove(e);return;}bq.appendChild(dom.remove(e));});if(!bm){if(!isIE){r=ed.getDoc().createRange();r.setStart(sb,0);r.setEnd(sb,0);s.setRng(r);}else{s.select(sb);s.collapse(1);}}else s.moveToBookmark(bm);},_getSelectedBlocks:function(st,en){var ed=this.editor,dom=ed.dom,s=ed.selection,sb,eb,n,bl=[];sb=dom.getParent(st||s.getStart(),dom.isBlock);eb=dom.getParent(en||s.getEnd(),dom.isBlock);if(sb)bl.push(sb);if(sb&&eb&&sb!=eb){n=sb;while((n=n.nextSibling)&&n!=eb){if(dom.isBlock(n))bl.push(n);}}if(eb&&sb!=eb)bl.push(eb);return bl;}});})();tinymce.create('tinymce.UndoManager',{index:0,data:null,typing:0,UndoManager:function(ed){var t=this,Dispatcher=tinymce.util.Dispatcher;t.editor=ed;t.data=[];t.onAdd=new Dispatcher(this);t.onUndo=new Dispatcher(this);t.onRedo=new Dispatcher(this);},add:function(l){var t=this,i,ed=t.editor,b,s=ed.settings,la;l=l||{};l.content=l.content||ed.getContent({format:'raw',no_events:1});l.content=l.content.replace(/^\s*|\s*$/g,'');la=t.data[t.index>0?t.index-1:0];if(!l.initial&&la&&l.content==la.content)return null;if(s.custom_undo_redo_levels){if(t.data.length>s.custom_undo_redo_levels){for(i=0;i<t.data.length-1;i++)t.data[i]=t.data[i+1];t.data.length--;t.index=t.data.length;}}if(s.custom_undo_redo_restore_selection&&!l.initial)l.bookmark=b=l.bookmark||ed.selection.getBookmark();if(t.index<t.data.length&&t.data[t.index].initial)t.index++;t.data.length=t.index+1;t.data[t.index++]=l;if(l.initial)t.index=0;if(t.data.length==2&&t.data[0].initial)t.data[0].bookmark=b;t.onAdd.dispatch(t,l);ed.isNotDirty=0;return l;},undo:function(){var t=this,ed=t.editor,l=l,i;if(t.typing){t.add();t.typing=0;}if(t.index>0){if(t.index==t.data.length&&t.index>1){i=t.index;t.typing=0;if(!t.add())t.index=i;--t.index;}l=t.data[--t.index];ed.setContent(l.content,{format:'raw'});ed.selection.moveToBookmark(l.bookmark);t.onUndo.dispatch(t,l);}return l;},redo:function(){var t=this,ed=t.editor,l=null;if(t.index<t.data.length-1){l=t.data[++t.index];ed.setContent(l.content,{format:'raw'});ed.selection.moveToBookmark(l.bookmark);t.onRedo.dispatch(t,l);}return l;},clear:function(){var t=this;t.data=[];t.index=0;t.typing=0;t.add({initial:true});},hasUndo:function(){return this.index!=0||this.typing;},hasRedo:function(){return this.index<this.data.length-1;}});(function(){var Event,isIE,isGecko,isOpera,each,extend;Event=tinymce.dom.Event;isIE=tinymce.isIE;isGecko=tinymce.isGecko;isOpera=tinymce.isOpera;each=tinymce.each;extend=tinymce.extend;tinymce.create('tinymce.ForceBlocks',{ForceBlocks:function(ed){var t=this,s=ed.settings,elm;t.editor=ed;t.dom=ed.dom;elm=(s.forced_root_block||'p').toLowerCase();s.element=elm.toUpperCase();ed.onPreInit.add(t.setup,t);t.reOpera=new RegExp('(\\u00a0| | )<\/'+elm+'>','gi');t.rePadd=new RegExp('<p( )([^>]+)><\\\/p>|<p( )([^>]+)\\\/>|<p( )([^>]+)>\\s+<\\\/p>|<p><\\\/p>|<p\\\/>|<p>\\s+<\\\/p>'.replace(/p/g,elm),'gi');t.reNbsp2BR1=new RegExp('<p( )([^>]+)>[\\s\\u00a0]+<\\\/p>|<p>[\\s\\u00a0]+<\\\/p>'.replace(/p/g,elm),'gi');t.reNbsp2BR2=new RegExp('<p( )([^>]+)>( | )<\\\/p>|<p>( | )<\\\/p>'.replace(/p/g,elm),'gi');t.reBR2Nbsp=new RegExp('<p( )([^>]+)>\\s*<br \\\/>\\s*<\\\/p>|<p>\\s*<br \\\/>\\s*<\\\/p>'.replace(/p/g,elm),'gi');t.reTrailBr=new RegExp('\\s*<br \\/>\\s*<\\\/p>'.replace(/p/g,elm),'gi');function padd(ed,o){if(isOpera)o.content=o.content.replace(t.reOpera,'</'+elm+'>');o.content=o.content.replace(t.rePadd,'<'+elm+'$1$2$3$4$5$6>\u00a0</'+elm+'>');if(!isIE&&!isOpera&&o.set){o.content=o.content.replace(t.reNbsp2BR1,'<'+elm+'$1$2><br /></'+elm+'>');o.content=o.content.replace(t.reNbsp2BR2,'<'+elm+'$1$2><br /></'+elm+'>');}else{o.content=o.content.replace(t.reBR2Nbsp,'<'+elm+'$1$2>\u00a0</'+elm+'>');o.content=o.content.replace(t.reTrailBr,'</'+elm+'>');}};ed.onBeforeSetContent.add(padd);ed.onPostProcess.add(padd);if(s.forced_root_block){ed.onInit.add(t.forceRoots,t);ed.onSetContent.add(t.forceRoots,t);ed.onBeforeGetContent.add(t.forceRoots,t);}},setup:function(){var t=this,ed=t.editor,s=ed.settings;if(s.forced_root_block){ed.onKeyUp.add(t.forceRoots,t);ed.onPreProcess.add(t.forceRoots,t);}if(s.force_br_newlines){if(isIE){ed.onKeyPress.add(function(ed,e){var n,s=ed.selection;if(e.keyCode==13&&s.getNode().nodeName!='LI'){s.setContent('<br id="__" /> ',{format:'raw'});n=ed.dom.get('__');n.removeAttribute('id');s.select(n);s.collapse();return Event.cancel(e);}});}return;}if(!isIE&&s.force_p_newlines){ed.onKeyPress.add(function(ed,e){if(e.keyCode==13&&!e.shiftKey){if(!t.insertPara(e))Event.cancel(e);}});if(isGecko){ed.onKeyDown.add(function(ed,e){if((e.keyCode==8||e.keyCode==46)&&!e.shiftKey)t.backspaceDelete(e,e.keyCode==8);});}}function ren(rn,na){var ne=ed.dom.create(na);each(rn.attributes,function(a){if(a.specified&&a.nodeValue)ne.setAttribute(a.nodeName.toLowerCase(),a.nodeValue);});each(rn.childNodes,function(n){ne.appendChild(n.cloneNode(true));});rn.parentNode.replaceChild(ne,rn);return ne;};if(isIE&&s.element!='P'){ed.onKeyPress.add(function(ed,e){t.lastElm=ed.selection.getNode().nodeName;});ed.onKeyUp.add(function(ed,e){var bl,sel=ed.selection,n=sel.getNode(),b=ed.getBody();if(b.childNodes.length===1&&n.nodeName=='P'){n=ren(n,s.element);sel.select(n);sel.collapse();ed.nodeChanged();}else if(e.keyCode==13&&!e.shiftKey&&t.lastElm!='P'){bl=ed.dom.getParent(n,'P');if(bl){ren(bl,s.element);ed.nodeChanged();}}});}},find:function(n,t,s){var ed=this.editor,w=ed.getDoc().createTreeWalker(n,4,null,false),c=-1;while(n=w.nextNode()){c++;if(t==0&&n==s)return c;if(t==1&&c==s)return n;}return-1;},forceRoots:function(ed,e){var t=this,ed=t.editor,b=ed.getBody(),d=ed.getDoc(),se=ed.selection,s=se.getSel(),r=se.getRng(),si=-2,ei,so,eo,tr,c=-0xFFFFFF;var nx,bl,bp,sp,le,nl=b.childNodes,i;if(e&&e.keyCode==13)return true;for(i=nl.length-1;i>=0;i--){nx=nl[i];if(nx.nodeType==3||(!t.dom.isBlock(nx)&&nx.nodeType!=8)){if(!bl){if(nx.nodeType!=3||/[^\s]/g.test(nx.nodeValue)){if(si==-2&&r){if(!isIE){so=r.startOffset;eo=r.endOffset;si=t.find(b,0,r.startContainer);ei=t.find(b,0,r.endContainer);}else{tr=d.body.createTextRange();tr.moveToElementText(b);tr.collapse(1);bp=tr.move('character',c)*-1;tr=r.duplicate();tr.collapse(1);sp=tr.move('character',c)*-1;tr=r.duplicate();tr.collapse(0);le=(tr.move('character',c)*-1)-sp;si=sp-bp;ei=le;}}bl=ed.dom.create(ed.settings.forced_root_block);bl.appendChild(nx.cloneNode(1));nx.parentNode.replaceChild(bl,nx);}}else{if(bl.hasChildNodes())bl.insertBefore(nx,bl.firstChild);else bl.appendChild(nx);}}else bl=null;}if(si!=-2){if(!isIE){bl=d.getElementsByTagName(ed.settings.element)[0];r=d.createRange();if(si!=-1)r.setStart(t.find(b,1,si),so);else r.setStart(bl,0);if(ei!=-1)r.setEnd(t.find(b,1,ei),eo);else r.setEnd(bl,0);if(s){s.removeAllRanges();s.addRange(r);}}else{try{r=s.createRange();r.moveToElementText(b);r.collapse(1);r.moveStart('character',si);r.moveEnd('character',ei);r.select();}catch(ex){}}}},getParentBlock:function(n){var d=this.dom;return d.getParent(n,d.isBlock);},insertPara:function(e){var t=this,ed=t.editor,d=ed.getDoc(),se=ed.settings,s=ed.selection.getSel(),r=s.getRangeAt(0),b=d.body;var rb,ra,dir,sn,so,en,eo,sb,eb,bn,bef,aft,sc,ec,n,vp=ed.dom.getViewPort(ed.getWin()),y,ch;function isEmpty(n){n=n.innerHTML;n=n.replace(/<(img|hr|table)/gi,'-');n=n.replace(/<[^>]+>/g,'');return n.replace(/[ \t\r\n]+/g,'')=='';};rb=d.createRange();rb.setStart(s.anchorNode,s.anchorOffset);rb.collapse(true);ra=d.createRange();ra.setStart(s.focusNode,s.focusOffset);ra.collapse(true);dir=rb.compareBoundaryPoints(rb.START_TO_END,ra)<0;sn=dir?s.anchorNode:s.focusNode;so=dir?s.anchorOffset:s.focusOffset;en=dir?s.focusNode:s.anchorNode;eo=dir?s.focusOffset:s.anchorOffset;if(sn==b&&en==b&&b.firstChild&&ed.dom.isBlock(b.firstChild)){sn=en=sn.firstChild;so=eo=0;rb=d.createRange();rb.setStart(sn,0);ra=d.createRange();ra.setStart(en,0);}sn=sn.nodeName=="HTML"?d.body:sn;sn=sn.nodeName=="BODY"?sn.firstChild:sn;en=en.nodeName=="HTML"?d.body:en;en=en.nodeName=="BODY"?en.firstChild:en;sb=t.getParentBlock(sn);eb=t.getParentBlock(en);bn=sb?sb.nodeName:se.element;if(t.dom.getParent(sb,function(n){return/OL|UL|PRE/.test(n.nodeName);}))return true;if(sb&&(sb.nodeName=='CAPTION'||/absolute|relative|static/gi.test(sb.style.position))){bn=se.element;sb=null;}if(eb&&(eb.nodeName=='CAPTION'||/absolute|relative|static/gi.test(eb.style.position))){bn=se.element;eb=null;}if(/(TD|TABLE|TH|CAPTION)/.test(bn)||(sb&&bn=="DIV"&&/left|right/gi.test(sb.style.cssFloat))){bn=se.element;sb=eb=null;}bef=(sb&&sb.nodeName==bn)?sb.cloneNode(0):ed.dom.create(bn);aft=(eb&&eb.nodeName==bn)?eb.cloneNode(0):ed.dom.create(bn);aft.removeAttribute('id');if(/^(H[1-6])$/.test(bn)&&sn.nodeValue&&so==sn.nodeValue.length)aft=ed.dom.create(se.element);n=sc=sn;do{if(n==b||n.nodeType==9||t.dom.isBlock(n)||/(TD|TABLE|TH|CAPTION)/.test(n.nodeName))break;sc=n;}while((n=n.previousSibling?n.previousSibling:n.parentNode));n=ec=en;do{if(n==b||n.nodeType==9||t.dom.isBlock(n)||/(TD|TABLE|TH|CAPTION)/.test(n.nodeName))break;ec=n;}while((n=n.nextSibling?n.nextSibling:n.parentNode));if(sc.nodeName==bn)rb.setStart(sc,0);else rb.setStartBefore(sc);rb.setEnd(sn,so);bef.appendChild(rb.cloneContents()||d.createTextNode(''));try{ra.setEndAfter(ec);}catch(ex){}ra.setStart(en,eo);aft.appendChild(ra.cloneContents()||d.createTextNode(''));r=d.createRange();if(!sc.previousSibling&&sc.parentNode.nodeName==bn){r.setStartBefore(sc.parentNode);}else{if(rb.startContainer.nodeName==bn&&rb.startOffset==0)r.setStartBefore(rb.startContainer);else r.setStart(rb.startContainer,rb.startOffset);}if(!ec.nextSibling&&ec.parentNode.nodeName==bn)r.setEndAfter(ec.parentNode);else r.setEnd(ra.endContainer,ra.endOffset);r.deleteContents();if(isOpera)ed.getWin().scrollTo(0,vp.y);if(bef.firstChild&&bef.firstChild.nodeName==bn)bef.innerHTML=bef.firstChild.innerHTML;if(aft.firstChild&&aft.firstChild.nodeName==bn)aft.innerHTML=aft.firstChild.innerHTML;if(isEmpty(bef))bef.innerHTML='<br />';if(isEmpty(aft))aft.innerHTML=isOpera?' ':'<br />';if(isOpera){r.insertNode(bef);r.insertNode(aft);}else{r.insertNode(aft);r.insertNode(bef);}aft.normalize();bef.normalize();r=d.createRange();r.selectNodeContents(aft);r.collapse(1);s.removeAllRanges();s.addRange(r);y=ed.dom.getPos(aft).y;ch=aft.clientHeight;if(y<vp.y||y+ch>vp.y+vp.h){ed.getWin().scrollTo(0,y<vp.y?y:y-vp.h+ch);}return false;},backspaceDelete:function(e,bs){var t=this,ed=t.editor,b=ed.getBody(),n,se=ed.selection,r=se.getRng(),sc=r.startContainer,n,w,tn;if(sc&&ed.dom.isBlock(sc)&&!/^(TD|TH)$/.test(sc.nodeName)&&bs){if(sc.childNodes.length==0||(sc.childNodes.length==1&&sc.firstChild.nodeName=='BR')){n=sc;while((n=n.previousSibling)&&!ed.dom.isBlock(n));if(n){if(sc!=b.firstChild){w=ed.dom.doc.createTreeWalker(n,NodeFilter.SHOW_TEXT,null,false);while(tn=w.nextNode())n=tn;r=ed.getDoc().createRange();r.setStart(n,n.nodeValue?n.nodeValue.length:0);r.setEnd(n,n.nodeValue?n.nodeValue.length:0);se.setRng(r);ed.dom.remove(sc);}return Event.cancel(e);}}}function handler(e){e=e.target;if(e&&e.parentNode&&e.nodeName=='BR'&&(n=t.getParentBlock(e))){Event.remove(b,'DOMNodeInserted',handler);if(e.previousSibling||e.nextSibling)ed.dom.remove(e);}};Event._add(b,'DOMNodeInserted',handler);window.setTimeout(function(){Event._remove(b,'DOMNodeInserted',handler);},1);}});})();(function(){var DOM=tinymce.DOM,Event=tinymce.dom.Event,each=tinymce.each,extend=tinymce.extend;tinymce.create('tinymce.ControlManager',{ControlManager:function(ed,s){var t=this,i;s=s||{};t.editor=ed;t.controls={};t.onAdd=new tinymce.util.Dispatcher(t);t.onPostRender=new tinymce.util.Dispatcher(t);t.prefix=s.prefix||ed.id+'_';t._cls={};t.onPostRender.add(function(){each(t.controls,function(c){c.postRender();});});},get:function(id){return this.controls[this.prefix+id]||this.controls[id];},setActive:function(id,s){var c=null;if(c=this.get(id))c.setActive(s);return c;},setDisabled:function(id,s){var c=null;if(c=this.get(id))c.setDisabled(s);return c;},add:function(c){var t=this;if(c){t.controls[c.id]=c;t.onAdd.dispatch(c,t);}return c;},createControl:function(n){var c,t=this,ed=t.editor;each(ed.plugins,function(p){if(p.createControl){c=p.createControl(n,t);if(c)return false;}});switch(n){case"|":case"separator":return t.createSeparator();}if(!c&&ed.buttons&&(c=ed.buttons[n]))return t.createButton(n,c);return t.add(c);},createDropMenu:function(id,s,cc){var t=this,ed=t.editor,c,bm,v,cls;s=extend({'class':'mceDropDown',constrain:ed.settings.constrain_menus},s);s['class']=s['class']+' '+ed.getParam('skin')+'Skin';if(v=ed.getParam('skin_variant'))s['class']+=' '+ed.getParam('skin')+'Skin'+v.substring(0,1).toUpperCase()+v.substring(1);id=t.prefix+id;cls=cc||t._cls.dropmenu||tinymce.ui.DropMenu;c=t.controls[id]=new cls(id,s);c.onAddItem.add(function(c,o){var s=o.settings;s.title=ed.getLang(s.title,s.title);if(!s.onclick){s.onclick=function(v){ed.execCommand(s.cmd,s.ui||false,s.value);};}});ed.onRemove.add(function(){c.destroy();});if(tinymce.isIE){c.onShowMenu.add(function(){var s=ed.selection,n=s.getNode();if(n.nodeName=='IMG')bm=s.getBookmark();else bm=0;});c.onHideMenu.add(function(){if(bm)ed.selection.moveToBookmark(bm);});}return t.add(c);},createListBox:function(id,s,cc){var t=this,ed=t.editor,cmd,c,cls;if(t.get(id))return null;s.title=ed.translate(s.title);s.scope=s.scope||ed;if(!s.onselect){s.onselect=function(v){ed.execCommand(s.cmd,s.ui||false,v||s.value);};}s=extend({title:s.title,'class':'mce_'+id,scope:s.scope,control_manager:t},s);id=t.prefix+id;if(ed.settings.use_native_selects)c=new tinymce.ui.NativeListBox(id,s);else{cls=cc||t._cls.listbox||tinymce.ui.ListBox;c=new cls(id,s);}t.controls[id]=c;if(tinymce.isWebKit){c.onPostRender.add(function(c,n){Event.add(n,'mousedown',function(){ed.bookmark=ed.selection.getBookmark('simple');});Event.add(n,'focus',function(){ed.selection.moveToBookmark(ed.bookmark);ed.bookmark=null;});});}if(c.hideMenu)ed.onMouseDown.add(c.hideMenu,c);return t.add(c);},createButton:function(id,s,cc){var t=this,ed=t.editor,o,c,cls;if(t.get(id))return null;s.title=ed.translate(s.title);s.scope=s.scope||ed;if(!s.onclick&&!s.menu_button){s.onclick=function(){ed.execCommand(s.cmd,s.ui||false,s.value);};}s=extend({title:s.title,'class':'mce_'+id,unavailable_prefix:ed.getLang('unavailable',''),scope:s.scope,control_manager:t},s);id=t.prefix+id;if(s.menu_button){cls=cc||t._cls.menubutton||tinymce.ui.MenuButton;c=new cls(id,s);ed.onMouseDown.add(c.hideMenu,c);}else{cls=t._cls.button||tinymce.ui.Button;c=new cls(id,s);}return t.add(c);},createMenuButton:function(id,s){s=s||{};s.menu_button=1;return this.createButton(id,s);},createSplitButton:function(id,s,cc){var t=this,ed=t.editor,cmd,c,cls;if(t.get(id))return null;s.title=ed.translate(s.title);s.scope=s.scope||ed;if(!s.onclick){s.onclick=function(v){ed.execCommand(s.cmd,s.ui||false,v||s.value);};}if(!s.onselect){s.onselect=function(v){ed.execCommand(s.cmd,s.ui||false,v||s.value);};}s=extend({title:s.title,'class':'mce_'+id,scope:s.scope,control_manager:t},s);id=t.prefix+id;cls=cc||t._cls.splitbutton||tinymce.ui.SplitButton;c=t.add(new cls(id,s));ed.onMouseDown.add(c.hideMenu,c);return c;},createColorSplitButton:function(id,s,cc){var t=this,ed=t.editor,cmd,c,cls;if(t.get(id))return null;s.title=ed.translate(s.title);s.scope=s.scope||ed;if(!s.onclick){s.onclick=function(v){ed.execCommand(s.cmd,s.ui||false,v||s.value);};}if(!s.onselect){s.onselect=function(v){ed.execCommand(s.cmd,s.ui||false,v||s.value);};}s=extend({title:s.title,'class':'mce_'+id,'menu_class':ed.getParam('skin')+'Skin',scope:s.scope,more_colors_title:ed.getLang('more_colors')},s);id=t.prefix+id;cls=cc||t._cls.colorsplitbutton||tinymce.ui.ColorSplitButton;c=new cls(id,s);ed.onMouseDown.add(c.hideMenu,c);ed.onRemove.add(function(){c.destroy();});return t.add(c);},createToolbar:function(id,s,cc){var c,t=this,cls;id=t.prefix+id;cls=cc||t._cls.toolbar||tinymce.ui.Toolbar;c=new cls(id,s);if(t.get(id))return null;return t.add(c);},createSeparator:function(cc){var cls=cc||this._cls.separator||tinymce.ui.Separator;return new cls();},setControlType:function(n,c){return this._cls[n.toLowerCase()]=c;},destroy:function(){each(this.controls,function(c){c.destroy();});this.controls=null;}});})();(function(){var Dispatcher=tinymce.util.Dispatcher,each=tinymce.each,isIE=tinymce.isIE,isOpera=tinymce.isOpera;tinymce.create('tinymce.WindowManager',{WindowManager:function(ed){var t=this;t.editor=ed;t.onOpen=new Dispatcher(t);t.onClose=new Dispatcher(t);t.params={};t.features={};},open:function(s,p){var t=this,f='',x,y,mo=t.editor.settings.dialog_type=='modal',w,sw,sh,vp=tinymce.DOM.getViewPort(),u;s=s||{};p=p||{};sw=isOpera?vp.w:screen.width;sh=isOpera?vp.h:screen.height;s.name=s.name||'mc_'+new Date().getTime();s.width=parseInt(s.width||320);s.height=parseInt(s.height||240);s.resizable=true;s.left=s.left||parseInt(sw/ 2.0) - (s.width /2.0);s.top=s.top||parseInt(sh/ 2.0) - (s.height /2.0);p.inline=false;p.mce_width=s.width;p.mce_height=s.height;p.mce_auto_focus=s.auto_focus;if(mo){if(isIE){s.center=true;s.help=false;s.dialogWidth=s.width+'px';s.dialogHeight=s.height+'px';s.scroll=s.scrollbars||false;}else s.modal=s.alwaysRaised=s.dialog=s.centerscreen=s.dependent=true;}each(s,function(v,k){if(tinymce.is(v,'boolean'))v=v?'yes':'no';if(!/^(name|url)$/.test(k)){if(isIE&&mo)f+=(f?';':'')+k+':'+v;else f+=(f?',':'')+k+'='+v;}});t.features=s;t.params=p;t.onOpen.dispatch(t,s,p);u=s.url||s.file;if(tinymce.relaxedDomain)u+=(u.indexOf('?')==-1?'?':'&')+'mce_rdomain='+tinymce.relaxedDomain;try{if(isIE&&mo){w=1;window.showModalDialog(s.url||s.file,window,f);}else w=window.open(u,s.name,f);}catch(ex){}if(!w)alert(t.editor.getLang('popup_blocked'));},close:function(w){w.close();this.onClose.dispatch(this);},createInstance:function(cl,a,b,c,d,e){var f=tinymce.resolve(cl);return new f(a,b,c,d,e);},confirm:function(t,cb,s){cb.call(s||this,confirm(this._decode(this.editor.getLang(t,t))));},alert:function(tx,cb,s){var t=this;alert(t._decode(t.editor.getLang(tx,tx)));if(cb)cb.call(s||t);},_decode:function(s){return tinymce.DOM.decode(s).replace(/\\n/g,'\n');}});}()); |
| | |
| | | // Some global instances, this will be filled later |
| | | var tinyMCE = null, tinyMCELang = null; |
| | | |
| | | function TinyMCE_Popup() { |
| | | }; |
| | | |
| | | TinyMCE_Popup.prototype = { |
| | | findWin : function(w) { |
| | | var c; |
| | | |
| | | // Check parents |
| | | c = w; |
| | | while (c && (c = c.parent) != null) { |
| | | if (typeof(c.tinyMCE) != "undefined") |
| | | return c; |
| | | } |
| | | |
| | | // Check openers |
| | | c = w; |
| | | while (c && (c = c.opener) != null) { |
| | | if (typeof(c.tinyMCE) != "undefined") |
| | | return c; |
| | | } |
| | | |
| | | // Try top |
| | | if (typeof(top.tinyMCE) != "undefined") |
| | | return top; |
| | | |
| | | return null; |
| | | }, |
| | | |
| | | init : function() { |
| | | var win = window.opener ? window.opener : window.dialogArguments, c; |
| | | var inst, re, title, divElm; |
| | | |
| | | if (!win) |
| | | win = this.findWin(window); |
| | | |
| | | if (!win) { |
| | | alert("tinyMCE object reference not found from popup."); |
| | | return; |
| | | } |
| | | |
| | | window.opener = win; |
| | | this.windowOpener = win; |
| | | this.onLoadEval = ""; |
| | | |
| | | // Setup parent references |
| | | tinyMCE = win.tinyMCE; |
| | | tinyMCELang = win.tinyMCELang; |
| | | |
| | | inst = tinyMCE.selectedInstance; |
| | | this.isWindow = tinyMCE.getWindowArg('mce_inside_iframe', false) == false; |
| | | this.storeSelection = (tinyMCE.isRealIE) && !this.isWindow && tinyMCE.getWindowArg('mce_store_selection', true); |
| | | |
| | | if (this.isWindow) |
| | | window.focus(); |
| | | |
| | | // Store selection |
| | | if (this.storeSelection) |
| | | inst.selectionBookmark = inst.selection.getBookmark(true); |
| | | |
| | | // Setup dir |
| | | if (tinyMCELang.lang_dir) |
| | | document.dir = tinyMCELang.lang_dir; |
| | | |
| | | // Setup title |
| | | re = new RegExp('{|\\\$|}', 'g'); |
| | | title = document.title.replace(re, ""); |
| | | if (typeof(tinyMCELang[title]) != "undefined") { |
| | | divElm = document.createElement("div"); |
| | | divElm.innerHTML = tinyMCELang[title]; |
| | | document.title = divElm.innerHTML; |
| | | |
| | | if (typeof(tinyMCE.setWindowTitle) != 'undefined') |
| | | tinyMCE.setWindowTitle(window, divElm.innerHTML); |
| | | } |
| | | |
| | | // Output Popup CSS class |
| | | document.write('<link href="' + tinyMCE.getParam("popups_css") + '" rel="stylesheet" type="text/css">'); |
| | | |
| | | if (tinyMCE.getParam("popups_css_add")) { |
| | | c = tinyMCE.getParam("popups_css_add"); |
| | | |
| | | // Is relative |
| | | if (c.indexOf('://') == -1 && c.charAt(0) != '/') |
| | | c = tinyMCE.documentBasePath + "/" + c; |
| | | |
| | | document.write('<link href="' + c + '" rel="stylesheet" type="text/css">'); |
| | | } |
| | | |
| | | tinyMCE.addEvent(window, "load", this.onLoad); |
| | | }, |
| | | |
| | | onLoad : function() { |
| | | var dir, i, elms, body = document.body; |
| | | |
| | | if (tinyMCE.getWindowArg('mce_replacevariables', true)) |
| | | body.innerHTML = tinyMCE.applyTemplate(body.innerHTML, tinyMCE.windowArgs); |
| | | |
| | | dir = tinyMCE.selectedInstance.settings.directionality; |
| | | if (dir == "rtl" && document.forms && document.forms.length > 0) { |
| | | elms = document.forms[0].elements; |
| | | for (i=0; i<elms.length; i++) { |
| | | if ((elms[i].type == "text" || elms[i].type == "textarea") && elms[i].getAttribute("dir") != "ltr") |
| | | elms[i].dir = dir; |
| | | } |
| | | } |
| | | |
| | | if (body.style.display == 'none') |
| | | body.style.display = 'block'; |
| | | |
| | | // Execute real onload (Opera fix) |
| | | if (tinyMCEPopup.onLoadEval !== '') |
| | | eval(tinyMCEPopup.onLoadEval); |
| | | }, |
| | | |
| | | executeOnLoad : function(str) { |
| | | if (tinyMCE.isOpera && parseFloat(opera.version()) < 9.5) |
| | | this.onLoadEval = str; |
| | | else |
| | | eval(str); |
| | | }, |
| | | |
| | | resizeToInnerSize : function() { |
| | | var i, doc, body, oldMargin, wrapper, iframe, nodes, dx, dy; |
| | | |
| | | // Netscape 7.1 workaround |
| | | if (this.isWindow && tinyMCE.isNS71) { |
| | | window.resizeBy(0, 10); |
| | | return; |
| | | } |
| | | |
| | | if (this.isWindow) { |
| | | doc = document; |
| | | body = doc.body; |
| | | |
| | | if (body.style.display == 'none') |
| | | body.style.display = 'block'; |
| | | |
| | | // Remove margin |
| | | oldMargin = body.style.margin; |
| | | body.style.margin = '0'; |
| | | |
| | | // Create wrapper |
| | | wrapper = doc.createElement("div"); |
| | | wrapper.id = 'mcBodyWrapper'; |
| | | wrapper.style.display = 'none'; |
| | | wrapper.style.margin = '0'; |
| | | |
| | | // Wrap body elements |
| | | nodes = doc.body.childNodes; |
| | | for (i=nodes.length-1; i>=0; i--) { |
| | | if (wrapper.hasChildNodes()) |
| | | wrapper.insertBefore(nodes[i].cloneNode(true), wrapper.firstChild); |
| | | else |
| | | wrapper.appendChild(nodes[i].cloneNode(true)); |
| | | |
| | | nodes[i].parentNode.removeChild(nodes[i]); |
| | | } |
| | | |
| | | // Add wrapper |
| | | doc.body.appendChild(wrapper); |
| | | |
| | | // Create iframe |
| | | iframe = document.createElement("iframe"); |
| | | iframe.id = "mcWinIframe"; |
| | | iframe.src = document.location.href.toLowerCase().indexOf('https') == -1 ? "about:blank" : tinyMCE.settings.default_document; |
| | | iframe.width = "100%"; |
| | | iframe.height = "100%"; |
| | | iframe.style.margin = '0'; |
| | | |
| | | // Add iframe |
| | | doc.body.appendChild(iframe); |
| | | |
| | | // Measure iframe |
| | | iframe = document.getElementById('mcWinIframe'); |
| | | dx = tinyMCE.getWindowArg('mce_width') - iframe.clientWidth; |
| | | dy = tinyMCE.getWindowArg('mce_height') - iframe.clientHeight; |
| | | |
| | | // Resize window |
| | | // tinyMCE.debug(tinyMCE.getWindowArg('mce_width') + "," + tinyMCE.getWindowArg('mce_height') + " - " + dx + "," + dy); |
| | | window.resizeBy(dx, dy); |
| | | |
| | | // Hide iframe and show wrapper |
| | | body.style.margin = oldMargin; |
| | | iframe.style.display = 'none'; |
| | | wrapper.style.display = 'block'; |
| | | } |
| | | }, |
| | | |
| | | resizeToContent : function() { |
| | | var isMSIE = (navigator.appName == "Microsoft Internet Explorer"); |
| | | var isOpera = (navigator.userAgent.indexOf("Opera") != -1); |
| | | var elm, width, height, x, y, dx, dy; |
| | | |
| | | if (isOpera) |
| | | return; |
| | | |
| | | if (isMSIE) { |
| | | try { window.resizeTo(10, 10); } catch (e) {} |
| | | |
| | | elm = document.body; |
| | | width = elm.offsetWidth; |
| | | height = elm.offsetHeight; |
| | | dx = (elm.scrollWidth - width) + 4; |
| | | dy = elm.scrollHeight - height; |
| | | |
| | | try { window.resizeBy(dx, dy); } catch (e) {} |
| | | } else { |
| | | window.scrollBy(1000, 1000); |
| | | if (window.scrollX > 0 || window.scrollY > 0) { |
| | | window.resizeBy(window.innerWidth * 2, window.innerHeight * 2); |
| | | window.sizeToContent(); |
| | | window.scrollTo(0, 0); |
| | | x = parseInt(screen.width / 2.0) - (window.outerWidth / 2.0); |
| | | y = parseInt(screen.height / 2.0) - (window.outerHeight / 2.0); |
| | | window.moveTo(x, y); |
| | | } |
| | | } |
| | | }, |
| | | |
| | | getWindowArg : function(name, default_value) { |
| | | return tinyMCE.getWindowArg(name, default_value); |
| | | }, |
| | | |
| | | restoreSelection : function() { |
| | | var inst; |
| | | |
| | | if (this.storeSelection) { |
| | | inst = tinyMCE.selectedInstance; |
| | | |
| | | inst.getWin().focus(); |
| | | |
| | | if (inst.selectionBookmark) |
| | | inst.selection.moveToBookmark(inst.selectionBookmark); |
| | | } |
| | | }, |
| | | |
| | | execCommand : function(command, user_interface, value) { |
| | | var inst = tinyMCE.selectedInstance; |
| | | |
| | | this.restoreSelection(); |
| | | inst.execCommand(command, user_interface, value); |
| | | |
| | | // Store selection |
| | | if (this.storeSelection) |
| | | inst.selectionBookmark = inst.selection.getBookmark(true); |
| | | }, |
| | | |
| | | close : function() { |
| | | tinyMCE.closeWindow(window); |
| | | }, |
| | | |
| | | pickColor : function(e, element_id) { |
| | | tinyMCE.selectedInstance.execCommand('mceColorPicker', true, { |
| | | element_id : element_id, |
| | | document : document, |
| | | window : window, |
| | | store_selection : false |
| | | }); |
| | | }, |
| | | |
| | | openBrowser : function(element_id, type, option) { |
| | | var cb = tinyMCE.getParam(option, tinyMCE.getParam("file_browser_callback")); |
| | | var url = document.getElementById(element_id).value; |
| | | |
| | | tinyMCE.setWindowArg("window", window); |
| | | tinyMCE.setWindowArg("document", document); |
| | | |
| | | // Call to external callback |
| | | if (eval('typeof(tinyMCEPopup.windowOpener.' + cb + ')') == "undefined") |
| | | alert("Callback function: " + cb + " could not be found."); |
| | | else |
| | | eval("tinyMCEPopup.windowOpener." + cb + "(element_id, url, type, window);"); |
| | | }, |
| | | |
| | | importClass : function(c) { |
| | | var n; |
| | | |
| | | window[c] = function() {}; |
| | | |
| | | for (n in window.opener[c].prototype) |
| | | window[c].prototype[n] = window.opener[c].prototype[n]; |
| | | |
| | | window[c].constructor = window.opener[c].constructor; |
| | | } |
| | | |
| | | }; |
| | | |
| | | // Setup global instance |
| | | var tinyMCEPopup = new TinyMCE_Popup(); |
| | | |
| | | tinyMCEPopup.init(); |
| | | // Some global instances
|
| | | var tinymce = null, tinyMCEPopup, tinyMCE;
|
| | |
|
| | | tinyMCEPopup = {
|
| | | init : function() {
|
| | | var t = this, w, ti, li, q, i, it;
|
| | |
|
| | | li = ('' + document.location.search).replace(/^\?/, '').split('&');
|
| | | q = {};
|
| | | for (i=0; i<li.length; i++) {
|
| | | it = li[i].split('=');
|
| | | q[unescape(it[0])] = unescape(it[1]);
|
| | | }
|
| | |
|
| | | if (q.mce_rdomain)
|
| | | document.domain = q.mce_rdomain;
|
| | |
|
| | | // Find window & API
|
| | | w = t.getWin();
|
| | | tinymce = w.tinymce;
|
| | | tinyMCE = w.tinyMCE;
|
| | | t.editor = tinymce.EditorManager.activeEditor;
|
| | | t.params = t.editor.windowManager.params;
|
| | |
|
| | | // Setup local DOM
|
| | | t.dom = t.editor.windowManager.createInstance('tinymce.dom.DOMUtils', document);
|
| | | t.dom.loadCSS(t.editor.settings.popup_css);
|
| | |
|
| | | // Setup on init listeners
|
| | | t.listeners = [];
|
| | | t.onInit = {
|
| | | add : function(f, s) {
|
| | | t.listeners.push({func : f, scope : s});
|
| | | }
|
| | | };
|
| | |
|
| | | t.isWindow = !t.getWindowArg('mce_inline');
|
| | | t.id = t.getWindowArg('mce_window_id');
|
| | | t.editor.windowManager.onOpen.dispatch(t.editor.windowManager, window);
|
| | | },
|
| | |
|
| | | getWin : function() {
|
| | | return window.dialogArguments || opener || parent || top;
|
| | | },
|
| | |
|
| | | getWindowArg : function(n, dv) {
|
| | | var v = this.params[n];
|
| | |
|
| | | return tinymce.is(v) ? v : dv;
|
| | | },
|
| | |
|
| | | getParam : function(n, dv) {
|
| | | return this.editor.getParam(n, dv);
|
| | | },
|
| | |
|
| | | getLang : function(n, dv) {
|
| | | return this.editor.getLang(n, dv);
|
| | | },
|
| | |
|
| | | execCommand : function(cmd, ui, val, a) {
|
| | | a = a || {};
|
| | | a.skip_focus = 1;
|
| | |
|
| | | this.restoreSelection();
|
| | | return this.editor.execCommand(cmd, ui, val, a);
|
| | | },
|
| | |
|
| | | resizeToInnerSize : function() {
|
| | | var t = this, n, b = document.body, vp = t.dom.getViewPort(window), dw, dh;
|
| | |
|
| | | dw = t.getWindowArg('mce_width') - vp.w;
|
| | | dh = t.getWindowArg('mce_height') - vp.h;
|
| | |
|
| | | if (t.isWindow)
|
| | | window.resizeBy(dw, dh);
|
| | | else
|
| | | t.editor.windowManager.resizeBy(dw, dh, t.id);
|
| | | },
|
| | |
|
| | | executeOnLoad : function(s) {
|
| | | this.onInit.add(function() {
|
| | | eval(s);
|
| | | });
|
| | | },
|
| | |
|
| | | storeSelection : function() {
|
| | | this.editor.windowManager.bookmark = tinyMCEPopup.editor.selection.getBookmark('simple');
|
| | | },
|
| | |
|
| | | restoreSelection : function() {
|
| | | var t = tinyMCEPopup;
|
| | |
|
| | | if (!t.isWindow && tinymce.isIE)
|
| | | t.editor.selection.moveToBookmark(t.editor.windowManager.bookmark);
|
| | | },
|
| | |
|
| | | requireLangPack : function() {
|
| | | var u = this.getWindowArg('plugin_url') || this.getWindowArg('theme_url');
|
| | |
|
| | | if (u && this.editor.settings.language) {
|
| | | u += '/langs/' + this.editor.settings.language + '_dlg.js';
|
| | |
|
| | | if (!tinymce.ScriptLoader.isDone(u)) {
|
| | | document.write('<script type="text/javascript" src="' + u + '"></script>');
|
| | | tinymce.ScriptLoader.markDone(u);
|
| | | }
|
| | | }
|
| | | },
|
| | |
|
| | | pickColor : function(e, element_id) {
|
| | | this.execCommand('mceColorPicker', true, {
|
| | | color : document.getElementById(element_id).value,
|
| | | func : function(c) {
|
| | | document.getElementById(element_id).value = c;
|
| | |
|
| | | try {
|
| | | document.getElementById(element_id).onchange();
|
| | | } catch (ex) {
|
| | | // Try fire event, ignore errors
|
| | | }
|
| | | }
|
| | | });
|
| | | },
|
| | |
|
| | | openBrowser : function(element_id, type, option) {
|
| | | tinyMCEPopup.restoreSelection();
|
| | | this.editor.execCallback('file_browser_callback', element_id, document.getElementById(element_id).value, type, window);
|
| | | },
|
| | |
|
| | | close : function() {
|
| | | var t = this;
|
| | |
|
| | | // To avoid domain relaxing issue in Opera
|
| | | function close() {
|
| | | t.editor.windowManager.close(window, t.id);
|
| | | tinymce = tinyMCE = t.editor = t.params = t.dom = t.dom.doc = null; // Cleanup
|
| | | };
|
| | |
|
| | | if (tinymce.isOpera)
|
| | | t.getWin().setTimeout(close, 0);
|
| | | else
|
| | | close();
|
| | | },
|
| | |
|
| | | // Internal functions |
| | |
|
| | | _restoreSelection : function() {
|
| | | var e = window.event.srcElement;
|
| | |
|
| | | if (e.nodeName == 'INPUT' && (e.type == 'submit' || e.type == 'button'))
|
| | | tinyMCEPopup.restoreSelection();
|
| | | },
|
| | |
|
| | | /* _restoreSelection : function() {
|
| | | var e = window.event.srcElement;
|
| | |
|
| | | // If user focus a non text input or textarea
|
| | | if ((e.nodeName != 'INPUT' && e.nodeName != 'TEXTAREA') || e.type != 'text')
|
| | | tinyMCEPopup.restoreSelection();
|
| | | },*/
|
| | |
|
| | | _onDOMLoaded : function() {
|
| | | var t = this, ti = document.title, bm, h;
|
| | |
|
| | | // Translate page
|
| | | h = document.body.innerHTML;
|
| | |
|
| | | // Replace a=x with a="x" in IE
|
| | | if (tinymce.isIE)
|
| | | h = h.replace(/ (value|title|alt)=([^"][^\s>]+)/gi, ' $1="$2"')
|
| | |
|
| | | document.dir = t.editor.getParam('directionality','');
|
| | | document.body.innerHTML = t.editor.translate(h);
|
| | | document.title = ti = t.editor.translate(ti);
|
| | | document.body.style.display = '';
|
| | |
|
| | | // Restore selection in IE when focus is placed on a non textarea or input element of the type text
|
| | | if (tinymce.isIE)
|
| | | document.attachEvent('onmouseup', tinyMCEPopup._restoreSelection);
|
| | |
|
| | | t.restoreSelection();
|
| | | t.resizeToInnerSize();
|
| | |
|
| | | // Set inline title
|
| | | if (!t.isWindow)
|
| | | t.editor.windowManager.setTitle(ti, t.id);
|
| | | else
|
| | | window.focus();
|
| | |
|
| | | if (!tinymce.isIE && !t.isWindow) {
|
| | | tinymce.dom.Event._add(document, 'focus', function() {
|
| | | t.editor.windowManager.focus(t.id)
|
| | | });
|
| | | }
|
| | |
|
| | | // Patch for accessibility
|
| | | tinymce.each(t.dom.select('select'), function(e) {
|
| | | e.onkeydown = tinyMCEPopup._accessHandler;
|
| | | });
|
| | |
|
| | | // Call onInit
|
| | | // Init must be called before focus so the selection won't get lost by the focus call
|
| | | tinymce.each(t.listeners, function(o) {
|
| | | o.func.call(o.scope, t.editor);
|
| | | });
|
| | |
|
| | | // Move focus to window
|
| | | if (t.getWindowArg('mce_auto_focus', true)) {
|
| | | window.focus();
|
| | |
|
| | | // Focus element with mceFocus class
|
| | | tinymce.each(document.forms, function(f) {
|
| | | tinymce.each(f.elements, function(e) {
|
| | | if (t.dom.hasClass(e, 'mceFocus') && !e.disabled) {
|
| | | e.focus();
|
| | | return false; // Break loop
|
| | | }
|
| | | });
|
| | | });
|
| | | }
|
| | |
|
| | | document.onkeyup = tinyMCEPopup._closeWinKeyHandler;
|
| | | },
|
| | |
|
| | | _accessHandler : function(e) {
|
| | | e = e || window.event;
|
| | |
|
| | | if (e.keyCode == 13 || e.keyCode == 32) {
|
| | | e = e.target || e.srcElement;
|
| | |
|
| | | if (e.onchange)
|
| | | e.onchange();
|
| | |
|
| | | return tinymce.dom.Event.cancel(e);
|
| | | }
|
| | | },
|
| | |
|
| | | _closeWinKeyHandler : function(e) {
|
| | | e = e || window.event;
|
| | |
|
| | | if (e.keyCode == 27)
|
| | | tinyMCEPopup.close();
|
| | | },
|
| | |
|
| | | _wait : function() {
|
| | | var t = this, ti;
|
| | |
|
| | | if (tinymce.isIE && document.location.protocol != 'https:') {
|
| | | // Fake DOMContentLoaded on IE
|
| | | document.write('<script id=__ie_onload defer src=\'javascript:""\';><\/script>');
|
| | | document.getElementById("__ie_onload").onreadystatechange = function() {
|
| | | if (this.readyState == "complete") {
|
| | | t._onDOMLoaded();
|
| | | document.getElementById("__ie_onload").onreadystatechange = null; // Prevent leak
|
| | | }
|
| | | };
|
| | | } else {
|
| | | if (tinymce.isIE || tinymce.isWebKit) {
|
| | | ti = setInterval(function() {
|
| | | if (/loaded|complete/.test(document.readyState)) {
|
| | | clearInterval(ti);
|
| | | t._onDOMLoaded();
|
| | | }
|
| | | }, 10);
|
| | | } else {
|
| | | window.addEventListener('DOMContentLoaded', function() {
|
| | | t._onDOMLoaded();
|
| | | }, false);
|
| | | }
|
| | | }
|
| | | }
|
| | | };
|
| | |
|
| | | tinyMCEPopup.init();
|
| | | tinyMCEPopup._wait(); // Wait for DOM Content Loaded
|
| | |
| | | /** |
| | | * $Id: editable_selects.js 162 2007-01-03 16:16:52Z spocke $ |
| | | * |
| | | * Makes select boxes editable. |
| | | * |
| | | * @author Moxiecode |
| | | * @copyright Copyright © 2004-2007, Moxiecode Systems AB, All rights reserved. |
| | | */ |
| | | |
| | | var TinyMCE_EditableSelects = { |
| | | editSelectElm : null, |
| | | |
| | | init : function() { |
| | | var nl = document.getElementsByTagName("select"), i, d = document, o; |
| | | |
| | | for (i=0; i<nl.length; i++) { |
| | | if (nl[i].className.indexOf('mceEditableSelect') != -1) { |
| | | o = new Option('(value)', '__mce_add_custom__'); |
| | | |
| | | o.className = 'mceAddSelectValue'; |
| | | |
| | | nl[i].options[nl[i].options.length] = o; |
| | | nl[i].setAttribute('onchange', 'TinyMCE_EditableSelects.onChangeEditableSelect(this);'); |
| | | } |
| | | } |
| | | }, |
| | | |
| | | onChangeEditableSelect : function(se) { |
| | | var d = document, ne; |
| | | |
| | | if (se.options[se.selectedIndex].value == '__mce_add_custom__') { |
| | | ne = d.createElement("input"); |
| | | ne.id = se.id + "_custom"; |
| | | ne.name = se.name + "_custom"; |
| | | ne.type = "text"; |
| | | |
| | | ne.style.width = se.clientWidth; |
| | | se.parentNode.insertBefore(ne, se); |
| | | se.style.display = 'none'; |
| | | ne.focus(); |
| | | ne.onblur = TinyMCE_EditableSelects.onBlurEditableSelectInput; |
| | | TinyMCE_EditableSelects.editSelectElm = se; |
| | | } |
| | | }, |
| | | |
| | | onBlurEditableSelectInput : function() { |
| | | var se = TinyMCE_EditableSelects.editSelectElm; |
| | | |
| | | if (se) { |
| | | if (se.previousSibling.value != '') { |
| | | addSelectValue(document.forms[0], se.id, se.previousSibling.value, se.previousSibling.value); |
| | | selectByValue(document.forms[0], se.id, se.previousSibling.value); |
| | | } else |
| | | selectByValue(document.forms[0], se.id, ''); |
| | | |
| | | se.style.display = 'inline'; |
| | | se.parentNode.removeChild(se.previousSibling); |
| | | TinyMCE_EditableSelects.editSelectElm = null; |
| | | } |
| | | } |
| | | }; |
| | | /**
|
| | | * $Id: editable_selects.js 520 2008-01-07 16:30:32Z spocke $
|
| | | *
|
| | | * Makes select boxes editable.
|
| | | *
|
| | | * @author Moxiecode
|
| | | * @copyright Copyright © 2004-2008, Moxiecode Systems AB, All rights reserved.
|
| | | */
|
| | |
|
| | | var TinyMCE_EditableSelects = {
|
| | | editSelectElm : null,
|
| | |
|
| | | init : function() {
|
| | | var nl = document.getElementsByTagName("select"), i, d = document, o;
|
| | |
|
| | | for (i=0; i<nl.length; i++) {
|
| | | if (nl[i].className.indexOf('mceEditableSelect') != -1) {
|
| | | o = new Option('(value)', '__mce_add_custom__');
|
| | |
|
| | | o.className = 'mceAddSelectValue';
|
| | |
|
| | | nl[i].options[nl[i].options.length] = o;
|
| | | nl[i].onchange = TinyMCE_EditableSelects.onChangeEditableSelect;
|
| | | }
|
| | | }
|
| | | },
|
| | |
|
| | | onChangeEditableSelect : function(e) {
|
| | | var d = document, ne, se = window.event ? window.event.srcElement : e.target;
|
| | |
|
| | | if (se.options[se.selectedIndex].value == '__mce_add_custom__') {
|
| | | ne = d.createElement("input");
|
| | | ne.id = se.id + "_custom";
|
| | | ne.name = se.name + "_custom";
|
| | | ne.type = "text";
|
| | |
|
| | | ne.style.width = se.offsetWidth + 'px';
|
| | | se.parentNode.insertBefore(ne, se);
|
| | | se.style.display = 'none';
|
| | | ne.focus();
|
| | | ne.onblur = TinyMCE_EditableSelects.onBlurEditableSelectInput;
|
| | | TinyMCE_EditableSelects.editSelectElm = se;
|
| | | }
|
| | | },
|
| | |
|
| | | onBlurEditableSelectInput : function() {
|
| | | var se = TinyMCE_EditableSelects.editSelectElm;
|
| | |
|
| | | if (se) {
|
| | | if (se.previousSibling.value != '') {
|
| | | addSelectValue(document.forms[0], se.id, se.previousSibling.value, se.previousSibling.value);
|
| | | selectByValue(document.forms[0], se.id, se.previousSibling.value);
|
| | | } else
|
| | | selectByValue(document.forms[0], se.id, '');
|
| | |
|
| | | se.style.display = 'inline';
|
| | | se.parentNode.removeChild(se.previousSibling);
|
| | | TinyMCE_EditableSelects.editSelectElm = null;
|
| | | }
|
| | | }
|
| | | };
|
| | |
| | | /** |
| | | * $Id: form_utils.js 162 2007-01-03 16:16:52Z spocke $ |
| | | * |
| | | * Various form utilitiy functions. |
| | | * |
| | | * @author Moxiecode |
| | | * @copyright Copyright © 2004-2007, Moxiecode Systems AB, All rights reserved. |
| | | */ |
| | | |
| | | var themeBaseURL = tinyMCE.baseURL + '/themes/' + tinyMCE.getParam("theme"); |
| | | |
| | | function getColorPickerHTML(id, target_form_element) { |
| | | var h = ""; |
| | | |
| | | h += '<a id="' + id + '_link" href="javascript:void(0);" onkeydown="pickColor(event,\'' + target_form_element +'\');" onmousedown="pickColor(event,\'' + target_form_element +'\');return false;">'; |
| | | h += '<img id="' + id + '" src="' + themeBaseURL + '/images/color.gif"'; |
| | | h += ' onmouseover="this.className=\'mceButtonOver\'"'; |
| | | h += ' onmouseout="this.className=\'mceButtonNormal\'"'; |
| | | h += ' onmousedown="this.className=\'mceButtonDown\'"'; |
| | | h += ' width="20" height="16" border="0" title="' + tinyMCE.getLang('lang_browse') + '"'; |
| | | h += ' class="mceButtonNormal" alt="' + tinyMCE.getLang('lang_browse') + '" /></a>'; |
| | | |
| | | return h; |
| | | } |
| | | |
| | | function pickColor(e, target_form_element) { |
| | | if ((e.keyCode == 32 || e.keyCode == 13) || e.type == "mousedown") |
| | | tinyMCEPopup.pickColor(e, target_form_element); |
| | | } |
| | | |
| | | function updateColor(img_id, form_element_id) { |
| | | document.getElementById(img_id).style.backgroundColor = document.forms[0].elements[form_element_id].value; |
| | | } |
| | | |
| | | function setBrowserDisabled(id, state) { |
| | | var img = document.getElementById(id); |
| | | var lnk = document.getElementById(id + "_link"); |
| | | |
| | | if (lnk) { |
| | | if (state) { |
| | | lnk.setAttribute("realhref", lnk.getAttribute("href")); |
| | | lnk.removeAttribute("href"); |
| | | tinyMCE.switchClass(img, 'mceButtonDisabled', true); |
| | | } else { |
| | | lnk.setAttribute("href", lnk.getAttribute("realhref")); |
| | | tinyMCE.switchClass(img, 'mceButtonNormal', false); |
| | | } |
| | | } |
| | | } |
| | | |
| | | function getBrowserHTML(id, target_form_element, type, prefix) { |
| | | var option = prefix + "_" + type + "_browser_callback"; |
| | | var cb = tinyMCE.getParam(option, tinyMCE.getParam("file_browser_callback")); |
| | | if (cb == null) |
| | | return ""; |
| | | |
| | | var html = ""; |
| | | |
| | | html += '<a id="' + id + '_link" href="javascript:openBrower(\'' + id + '\',\'' + target_form_element + '\', \'' + type + '\',\'' + option + '\');" onmousedown="return false;">'; |
| | | html += '<img id="' + id + '" src="' + themeBaseURL + '/images/browse.gif"'; |
| | | html += ' onmouseover="this.className=\'mceButtonOver\';"'; |
| | | html += ' onmouseout="this.className=\'mceButtonNormal\';"'; |
| | | html += ' onmousedown="this.className=\'mceButtonDown\';"'; |
| | | html += ' width="20" height="18" border="0" title="' + tinyMCE.getLang('lang_browse') + '"'; |
| | | html += ' class="mceButtonNormal" alt="' + tinyMCE.getLang('lang_browse') + '" /></a>'; |
| | | |
| | | return html; |
| | | } |
| | | |
| | | function openBrower(img_id, target_form_element, type, option) { |
| | | var img = document.getElementById(img_id); |
| | | |
| | | if (img.className != "mceButtonDisabled") |
| | | tinyMCEPopup.openBrowser(target_form_element, type, option); |
| | | } |
| | | |
| | | function selectByValue(form_obj, field_name, value, add_custom, ignore_case) { |
| | | if (!form_obj || !form_obj.elements[field_name]) |
| | | return; |
| | | |
| | | var sel = form_obj.elements[field_name]; |
| | | |
| | | var found = false; |
| | | for (var i=0; i<sel.options.length; i++) { |
| | | var option = sel.options[i]; |
| | | |
| | | if (option.value == value || (ignore_case && option.value.toLowerCase() == value.toLowerCase())) { |
| | | option.selected = true; |
| | | found = true; |
| | | } else |
| | | option.selected = false; |
| | | } |
| | | |
| | | if (!found && add_custom && value != '') { |
| | | var option = new Option(value, value); |
| | | option.selected = true; |
| | | sel.options[sel.options.length] = option; |
| | | sel.selectedIndex = sel.options.length - 1; |
| | | } |
| | | |
| | | return found; |
| | | } |
| | | |
| | | function getSelectValue(form_obj, field_name) { |
| | | var elm = form_obj.elements[field_name]; |
| | | |
| | | if (elm == null || elm.options == null) |
| | | return ""; |
| | | |
| | | return elm.options[elm.selectedIndex].value; |
| | | } |
| | | |
| | | function addSelectValue(form_obj, field_name, name, value) { |
| | | var s = form_obj.elements[field_name]; |
| | | var o = new Option(name, value); |
| | | s.options[s.options.length] = o; |
| | | } |
| | | |
| | | function addClassesToList(list_id, specific_option) { |
| | | // Setup class droplist |
| | | var styleSelectElm = document.getElementById(list_id); |
| | | var styles = tinyMCE.getParam('theme_advanced_styles', false); |
| | | styles = tinyMCE.getParam(specific_option, styles); |
| | | |
| | | if (styles) { |
| | | var stylesAr = styles.split(';'); |
| | | |
| | | for (var i=0; i<stylesAr.length; i++) { |
| | | if (stylesAr != "") { |
| | | var key, value; |
| | | |
| | | key = stylesAr[i].split('=')[0]; |
| | | value = stylesAr[i].split('=')[1]; |
| | | |
| | | styleSelectElm.options[styleSelectElm.length] = new Option(key, value); |
| | | } |
| | | } |
| | | } else { |
| | | // Use auto impored classes |
| | | var csses = tinyMCE.getCSSClasses(tinyMCE.getWindowArg('editor_id')); |
| | | for (var i=0; i<csses.length; i++) |
| | | styleSelectElm.options[styleSelectElm.length] = new Option(csses[i], csses[i]); |
| | | } |
| | | } |
| | | |
| | | function isVisible(element_id) { |
| | | var elm = document.getElementById(element_id); |
| | | |
| | | return elm && elm.style.display != "none"; |
| | | } |
| | | |
| | | function convertRGBToHex(col) { |
| | | var re = new RegExp("rgb\\s*\\(\\s*([0-9]+).*,\\s*([0-9]+).*,\\s*([0-9]+).*\\)", "gi"); |
| | | |
| | | var rgb = col.replace(re, "$1,$2,$3").split(','); |
| | | if (rgb.length == 3) { |
| | | r = parseInt(rgb[0]).toString(16); |
| | | g = parseInt(rgb[1]).toString(16); |
| | | b = parseInt(rgb[2]).toString(16); |
| | | |
| | | r = r.length == 1 ? '0' + r : r; |
| | | g = g.length == 1 ? '0' + g : g; |
| | | b = b.length == 1 ? '0' + b : b; |
| | | |
| | | return "#" + r + g + b; |
| | | } |
| | | |
| | | return col; |
| | | } |
| | | |
| | | function convertHexToRGB(col) { |
| | | if (col.indexOf('#') != -1) { |
| | | col = col.replace(new RegExp('[^0-9A-F]', 'gi'), ''); |
| | | |
| | | r = parseInt(col.substring(0, 2), 16); |
| | | g = parseInt(col.substring(2, 4), 16); |
| | | b = parseInt(col.substring(4, 6), 16); |
| | | |
| | | return "rgb(" + r + "," + g + "," + b + ")"; |
| | | } |
| | | |
| | | return col; |
| | | } |
| | | |
| | | function trimSize(size) { |
| | | return size.replace(new RegExp('[^0-9%]', 'gi'), ''); |
| | | } |
| | | |
| | | function getCSSSize(size) { |
| | | size = trimSize(size); |
| | | |
| | | if (size == "") |
| | | return ""; |
| | | |
| | | return size.indexOf('%') != -1 ? size : size + "px"; |
| | | } |
| | | |
| | | function getStyle(elm, attrib, style) { |
| | | var val = tinyMCE.getAttrib(elm, attrib); |
| | | |
| | | if (val != '') |
| | | return '' + val; |
| | | |
| | | if (typeof(style) == 'undefined') |
| | | style = attrib; |
| | | |
| | | val = eval('elm.style.' + style); |
| | | |
| | | return val == null ? '' : '' + val; |
| | | } |
| | | /**
|
| | | * $Id: form_utils.js 673 2008-03-06 13:26:20Z spocke $
|
| | | *
|
| | | * Various form utilitiy functions.
|
| | | *
|
| | | * @author Moxiecode
|
| | | * @copyright Copyright © 2004-2008, Moxiecode Systems AB, All rights reserved.
|
| | | */
|
| | |
|
| | | var themeBaseURL = tinyMCEPopup.editor.baseURI.toAbsolute('themes/' + tinyMCEPopup.getParam("theme"));
|
| | |
|
| | | function getColorPickerHTML(id, target_form_element) {
|
| | | var h = "";
|
| | |
|
| | | h += '<a id="' + id + '_link" href="javascript:;" onclick="tinyMCEPopup.pickColor(event,\'' + target_form_element +'\');" onmousedown="return false;" class="pickcolor">';
|
| | | h += '<span id="' + id + '" title="' + tinyMCEPopup.getLang('browse') + '"></span></a>';
|
| | |
|
| | | return h;
|
| | | }
|
| | |
|
| | | function updateColor(img_id, form_element_id) {
|
| | | document.getElementById(img_id).style.backgroundColor = document.forms[0].elements[form_element_id].value;
|
| | | }
|
| | |
|
| | | function setBrowserDisabled(id, state) {
|
| | | var img = document.getElementById(id);
|
| | | var lnk = document.getElementById(id + "_link");
|
| | |
|
| | | if (lnk) {
|
| | | if (state) {
|
| | | lnk.setAttribute("realhref", lnk.getAttribute("href"));
|
| | | lnk.removeAttribute("href");
|
| | | tinyMCEPopup.dom.addClass(img, 'disabled');
|
| | | } else {
|
| | | if (lnk.getAttribute("realhref"))
|
| | | lnk.setAttribute("href", lnk.getAttribute("realhref"));
|
| | |
|
| | | tinyMCEPopup.dom.removeClass(img, 'disabled');
|
| | | }
|
| | | }
|
| | | }
|
| | |
|
| | | function getBrowserHTML(id, target_form_element, type, prefix) {
|
| | | var option = prefix + "_" + type + "_browser_callback", cb, html;
|
| | |
|
| | | cb = tinyMCEPopup.getParam(option, tinyMCEPopup.getParam("file_browser_callback"));
|
| | |
|
| | | if (!cb)
|
| | | return "";
|
| | |
|
| | | html = "";
|
| | | html += '<a id="' + id + '_link" href="javascript:openBrowser(\'' + id + '\',\'' + target_form_element + '\', \'' + type + '\',\'' + option + '\');" onmousedown="return false;" class="browse">';
|
| | | html += '<span id="' + id + '" title="' + tinyMCEPopup.getLang('browse') + '"></span></a>';
|
| | |
|
| | | return html;
|
| | | }
|
| | |
|
| | | function openBrowser(img_id, target_form_element, type, option) {
|
| | | var img = document.getElementById(img_id);
|
| | |
|
| | | if (img.className != "mceButtonDisabled")
|
| | | tinyMCEPopup.openBrowser(target_form_element, type, option);
|
| | | }
|
| | |
|
| | | function selectByValue(form_obj, field_name, value, add_custom, ignore_case) {
|
| | | if (!form_obj || !form_obj.elements[field_name])
|
| | | return;
|
| | |
|
| | | var sel = form_obj.elements[field_name];
|
| | |
|
| | | var found = false;
|
| | | for (var i=0; i<sel.options.length; i++) {
|
| | | var option = sel.options[i];
|
| | |
|
| | | if (option.value == value || (ignore_case && option.value.toLowerCase() == value.toLowerCase())) {
|
| | | option.selected = true;
|
| | | found = true;
|
| | | } else
|
| | | option.selected = false;
|
| | | }
|
| | |
|
| | | if (!found && add_custom && value != '') {
|
| | | var option = new Option(value, value);
|
| | | option.selected = true;
|
| | | sel.options[sel.options.length] = option;
|
| | | sel.selectedIndex = sel.options.length - 1;
|
| | | }
|
| | |
|
| | | return found;
|
| | | }
|
| | |
|
| | | function getSelectValue(form_obj, field_name) {
|
| | | var elm = form_obj.elements[field_name];
|
| | |
|
| | | if (elm == null || elm.options == null)
|
| | | return "";
|
| | |
|
| | | return elm.options[elm.selectedIndex].value;
|
| | | }
|
| | |
|
| | | function addSelectValue(form_obj, field_name, name, value) {
|
| | | var s = form_obj.elements[field_name];
|
| | | var o = new Option(name, value);
|
| | | s.options[s.options.length] = o;
|
| | | }
|
| | |
|
| | | function addClassesToList(list_id, specific_option) {
|
| | | // Setup class droplist
|
| | | var styleSelectElm = document.getElementById(list_id);
|
| | | var styles = tinyMCEPopup.getParam('theme_advanced_styles', false);
|
| | | styles = tinyMCEPopup.getParam(specific_option, styles);
|
| | |
|
| | | if (styles) {
|
| | | var stylesAr = styles.split(';');
|
| | |
|
| | | for (var i=0; i<stylesAr.length; i++) {
|
| | | if (stylesAr != "") {
|
| | | var key, value;
|
| | |
|
| | | key = stylesAr[i].split('=')[0];
|
| | | value = stylesAr[i].split('=')[1];
|
| | |
|
| | | styleSelectElm.options[styleSelectElm.length] = new Option(key, value);
|
| | | }
|
| | | }
|
| | | } else {
|
| | | tinymce.each(tinyMCEPopup.editor.dom.getClasses(), function(o) {
|
| | | styleSelectElm.options[styleSelectElm.length] = new Option(o.title || o['class'], o['class']);
|
| | | });
|
| | | }
|
| | | }
|
| | |
|
| | | function isVisible(element_id) {
|
| | | var elm = document.getElementById(element_id);
|
| | |
|
| | | return elm && elm.style.display != "none";
|
| | | }
|
| | |
|
| | | function convertRGBToHex(col) {
|
| | | var re = new RegExp("rgb\\s*\\(\\s*([0-9]+).*,\\s*([0-9]+).*,\\s*([0-9]+).*\\)", "gi");
|
| | |
|
| | | var rgb = col.replace(re, "$1,$2,$3").split(',');
|
| | | if (rgb.length == 3) {
|
| | | r = parseInt(rgb[0]).toString(16);
|
| | | g = parseInt(rgb[1]).toString(16);
|
| | | b = parseInt(rgb[2]).toString(16);
|
| | |
|
| | | r = r.length == 1 ? '0' + r : r;
|
| | | g = g.length == 1 ? '0' + g : g;
|
| | | b = b.length == 1 ? '0' + b : b;
|
| | |
|
| | | return "#" + r + g + b;
|
| | | }
|
| | |
|
| | | return col;
|
| | | }
|
| | |
|
| | | function convertHexToRGB(col) {
|
| | | if (col.indexOf('#') != -1) {
|
| | | col = col.replace(new RegExp('[^0-9A-F]', 'gi'), '');
|
| | |
|
| | | r = parseInt(col.substring(0, 2), 16);
|
| | | g = parseInt(col.substring(2, 4), 16);
|
| | | b = parseInt(col.substring(4, 6), 16);
|
| | |
|
| | | return "rgb(" + r + "," + g + "," + b + ")";
|
| | | }
|
| | |
|
| | | return col;
|
| | | }
|
| | |
|
| | | function trimSize(size) {
|
| | | return size.replace(/([0-9\.]+)px|(%|in|cm|mm|em|ex|pt|pc)/, '$1$2');
|
| | | }
|
| | |
|
| | | function getCSSSize(size) {
|
| | | size = trimSize(size);
|
| | |
|
| | | if (size == "")
|
| | | return "";
|
| | |
|
| | | // Add px
|
| | | if (/^[0-9]+$/.test(size))
|
| | | size += 'px';
|
| | |
|
| | | return size;
|
| | | }
|
| | |
|
| | | function getStyle(elm, attrib, style) {
|
| | | var val = tinyMCEPopup.dom.getAttrib(elm, attrib);
|
| | |
|
| | | if (val != '')
|
| | | return '' + val;
|
| | |
|
| | | if (typeof(style) == 'undefined')
|
| | | style = attrib;
|
| | |
|
| | | return tinyMCEPopup.dom.getStyle(elm, style);
|
| | | }
|
| | |
| | | /** |
| | | * $Id: mctabs.js 162 2007-01-03 16:16:52Z spocke $ |
| | | * |
| | | * Moxiecode DHTML Tabs script. |
| | | * |
| | | * @author Moxiecode |
| | | * @copyright Copyright © 2004-2007, Moxiecode Systems AB, All rights reserved. |
| | | */ |
| | | |
| | | function MCTabs() { |
| | | this.settings = new Array(); |
| | | }; |
| | | |
| | | MCTabs.prototype.init = function(settings) { |
| | | this.settings = settings; |
| | | }; |
| | | |
| | | MCTabs.prototype.getParam = function(name, default_value) { |
| | | var value = null; |
| | | |
| | | value = (typeof(this.settings[name]) == "undefined") ? default_value : this.settings[name]; |
| | | |
| | | // Fix bool values |
| | | if (value == "true" || value == "false") |
| | | return (value == "true"); |
| | | |
| | | return value; |
| | | }; |
| | | |
| | | MCTabs.prototype.displayTab = function(tab_id, panel_id) { |
| | | var panelElm = document.getElementById(panel_id); |
| | | var panelContainerElm = panelElm ? panelElm.parentNode : null; |
| | | var tabElm = document.getElementById(tab_id); |
| | | var tabContainerElm = tabElm ? tabElm.parentNode : null; |
| | | var selectionClass = this.getParam('selection_class', 'current'); |
| | | |
| | | if (tabElm && tabContainerElm) { |
| | | var nodes = tabContainerElm.childNodes; |
| | | |
| | | // Hide all other tabs |
| | | for (var i=0; i<nodes.length; i++) { |
| | | if (nodes[i].nodeName == "LI") |
| | | nodes[i].className = ''; |
| | | } |
| | | |
| | | // Show selected tab |
| | | tabElm.className = 'current'; |
| | | } |
| | | |
| | | if (panelElm && panelContainerElm) { |
| | | var nodes = panelContainerElm.childNodes; |
| | | |
| | | // Hide all other panels |
| | | for (var i=0; i<nodes.length; i++) { |
| | | if (nodes[i].nodeName == "DIV") |
| | | nodes[i].className = 'panel'; |
| | | } |
| | | |
| | | // Show selected panel |
| | | panelElm.className = 'current'; |
| | | } |
| | | }; |
| | | |
| | | MCTabs.prototype.getAnchor = function() { |
| | | var pos, url = document.location.href; |
| | | |
| | | if ((pos = url.lastIndexOf('#')) != -1) |
| | | return url.substring(pos + 1); |
| | | |
| | | return ""; |
| | | }; |
| | | |
| | | // Global instance |
| | | var mcTabs = new MCTabs(); |
| | | /**
|
| | | * $Id: mctabs.js 758 2008-03-30 13:53:29Z spocke $
|
| | | *
|
| | | * Moxiecode DHTML Tabs script.
|
| | | *
|
| | | * @author Moxiecode
|
| | | * @copyright Copyright © 2004-2008, Moxiecode Systems AB, All rights reserved.
|
| | | */
|
| | |
|
| | | function MCTabs() {
|
| | | this.settings = [];
|
| | | };
|
| | |
|
| | | MCTabs.prototype.init = function(settings) {
|
| | | this.settings = settings;
|
| | | };
|
| | |
|
| | | MCTabs.prototype.getParam = function(name, default_value) {
|
| | | var value = null;
|
| | |
|
| | | value = (typeof(this.settings[name]) == "undefined") ? default_value : this.settings[name];
|
| | |
|
| | | // Fix bool values
|
| | | if (value == "true" || value == "false")
|
| | | return (value == "true");
|
| | |
|
| | | return value;
|
| | | };
|
| | |
|
| | | MCTabs.prototype.displayTab = function(tab_id, panel_id) {
|
| | | var panelElm, panelContainerElm, tabElm, tabContainerElm, selectionClass, nodes, i;
|
| | |
|
| | | panelElm= document.getElementById(panel_id);
|
| | | panelContainerElm = panelElm ? panelElm.parentNode : null;
|
| | | tabElm = document.getElementById(tab_id);
|
| | | tabContainerElm = tabElm ? tabElm.parentNode : null;
|
| | | selectionClass = this.getParam('selection_class', 'current');
|
| | |
|
| | | if (tabElm && tabContainerElm) {
|
| | | nodes = tabContainerElm.childNodes;
|
| | |
|
| | | // Hide all other tabs
|
| | | for (i = 0; i < nodes.length; i++) {
|
| | | if (nodes[i].nodeName == "LI")
|
| | | nodes[i].className = '';
|
| | | }
|
| | |
|
| | | // Show selected tab
|
| | | tabElm.className = 'current';
|
| | | }
|
| | |
|
| | | if (panelElm && panelContainerElm) {
|
| | | nodes = panelContainerElm.childNodes;
|
| | |
|
| | | // Hide all other panels
|
| | | for (i = 0; i < nodes.length; i++) {
|
| | | if (nodes[i].nodeName == "DIV")
|
| | | nodes[i].className = 'panel';
|
| | | }
|
| | |
|
| | | // Show selected panel
|
| | | panelElm.className = 'current';
|
| | | }
|
| | | };
|
| | |
|
| | | MCTabs.prototype.getAnchor = function() {
|
| | | var pos, url = document.location.href;
|
| | |
|
| | | if ((pos = url.lastIndexOf('#')) != -1)
|
| | | return url.substring(pos + 1);
|
| | |
|
| | | return "";
|
| | | };
|
| | |
|
| | | // Global instance
|
| | | var mcTabs = new MCTabs();
|
| | |
| | | /** |
| | | * $Id: validate.js 162 2007-01-03 16:16:52Z spocke $ |
| | | * |
| | | * Various form validation methods. |
| | | * |
| | | * @author Moxiecode |
| | | * @copyright Copyright © 2004-2007, Moxiecode Systems AB, All rights reserved. |
| | | */ |
| | | |
| | | /** |
| | | // String validation: |
| | | |
| | | if (!Validator.isEmail('myemail')) |
| | | alert('Invalid email.'); |
| | | |
| | | // Form validation: |
| | | |
| | | var f = document.forms['myform']; |
| | | |
| | | if (!Validator.isEmail(f.myemail)) |
| | | alert('Invalid email.'); |
| | | */ |
| | | |
| | | var Validator = { |
| | | isEmail : function(s) { |
| | | return this.test(s, '^[-!#$%&\'*+\\./0-9=?A-Z^_`a-z{|}~]+@[-!#$%&\'*+\\/0-9=?A-Z^_`a-z{|}~]+\.[-!#$%&\'*+\\./0-9=?A-Z^_`a-z{|}~]+$'); |
| | | }, |
| | | |
| | | isAbsUrl : function(s) { |
| | | return this.test(s, '^(news|telnet|nttp|file|http|ftp|https)://[-A-Za-z0-9\\.]+\\/?.*$'); |
| | | }, |
| | | |
| | | isSize : function(s) { |
| | | return this.test(s, '^[0-9]+(px|%)?$'); |
| | | }, |
| | | |
| | | isId : function(s) { |
| | | return this.test(s, '^[A-Za-z_]([A-Za-z0-9_])*$'); |
| | | }, |
| | | |
| | | isEmpty : function(s) { |
| | | var nl, i; |
| | | |
| | | if (s.nodeName == 'SELECT' && s.selectedIndex < 1) |
| | | return true; |
| | | |
| | | if (s.type == 'checkbox' && !s.checked) |
| | | return true; |
| | | |
| | | if (s.type == 'radio') { |
| | | for (i=0, nl = s.form.elements; i<nl.length; i++) { |
| | | if (nl[i].type == "radio" && nl[i].name == s.name && nl[i].checked) |
| | | return false; |
| | | } |
| | | |
| | | return true; |
| | | } |
| | | |
| | | return new RegExp('^\\s*$').test(s.nodeType == 1 ? s.value : s); |
| | | }, |
| | | |
| | | isNumber : function(s, d) { |
| | | return !isNaN(s.nodeType == 1 ? s.value : s) && (!d || !this.test(s, '^-?[0-9]*\\.[0-9]*$')); |
| | | }, |
| | | |
| | | test : function(s, p) { |
| | | s = s.nodeType == 1 ? s.value : s; |
| | | |
| | | return s == '' || new RegExp(p).test(s); |
| | | } |
| | | }; |
| | | |
| | | var AutoValidator = { |
| | | settings : { |
| | | id_cls : 'id', |
| | | int_cls : 'int', |
| | | url_cls : 'url', |
| | | number_cls : 'number', |
| | | email_cls : 'email', |
| | | size_cls : 'size', |
| | | required_cls : 'required', |
| | | invalid_cls : 'invalid', |
| | | min_cls : 'min', |
| | | max_cls : 'max' |
| | | }, |
| | | |
| | | init : function(s) { |
| | | var n; |
| | | |
| | | for (n in s) |
| | | this.settings[n] = s[n]; |
| | | }, |
| | | |
| | | validate : function(f) { |
| | | var i, nl, s = this.settings, c = 0; |
| | | |
| | | nl = this.tags(f, 'label'); |
| | | for (i=0; i<nl.length; i++) |
| | | this.removeClass(nl[i], s.invalid_cls); |
| | | |
| | | c += this.validateElms(f, 'input'); |
| | | c += this.validateElms(f, 'select'); |
| | | c += this.validateElms(f, 'textarea'); |
| | | |
| | | return c == 3; |
| | | }, |
| | | |
| | | invalidate : function(n) { |
| | | this.mark(n.form, n); |
| | | }, |
| | | |
| | | reset : function(e) { |
| | | var t = new Array('label', 'input', 'select', 'textarea'); |
| | | var i, j, nl, s = this.settings; |
| | | |
| | | if (e == null) |
| | | return; |
| | | |
| | | for (i=0; i<t.length; i++) { |
| | | nl = this.tags(e.form ? e.form : e, t[i]); |
| | | for (j=0; j<nl.length; j++) |
| | | this.removeClass(nl[j], s.invalid_cls); |
| | | } |
| | | }, |
| | | |
| | | validateElms : function(f, e) { |
| | | var nl, i, n, s = this.settings, st = true, va = Validator, v; |
| | | |
| | | nl = this.tags(f, e); |
| | | for (i=0; i<nl.length; i++) { |
| | | n = nl[i]; |
| | | |
| | | this.removeClass(n, s.invalid_cls); |
| | | |
| | | if (this.hasClass(n, s.required_cls) && va.isEmpty(n)) |
| | | st = this.mark(f, n); |
| | | |
| | | if (this.hasClass(n, s.number_cls) && !va.isNumber(n)) |
| | | st = this.mark(f, n); |
| | | |
| | | if (this.hasClass(n, s.int_cls) && !va.isNumber(n, true)) |
| | | st = this.mark(f, n); |
| | | |
| | | if (this.hasClass(n, s.url_cls) && !va.isAbsUrl(n)) |
| | | st = this.mark(f, n); |
| | | |
| | | if (this.hasClass(n, s.email_cls) && !va.isEmail(n)) |
| | | st = this.mark(f, n); |
| | | |
| | | if (this.hasClass(n, s.size_cls) && !va.isSize(n)) |
| | | st = this.mark(f, n); |
| | | |
| | | if (this.hasClass(n, s.id_cls) && !va.isId(n)) |
| | | st = this.mark(f, n); |
| | | |
| | | if (this.hasClass(n, s.min_cls, true)) { |
| | | v = this.getNum(n, s.min_cls); |
| | | |
| | | if (isNaN(v) || parseInt(n.value) < parseInt(v)) |
| | | st = this.mark(f, n); |
| | | } |
| | | |
| | | if (this.hasClass(n, s.max_cls, true)) { |
| | | v = this.getNum(n, s.max_cls); |
| | | |
| | | if (isNaN(v) || parseInt(n.value) > parseInt(v)) |
| | | st = this.mark(f, n); |
| | | } |
| | | } |
| | | |
| | | return st; |
| | | }, |
| | | |
| | | hasClass : function(n, c, d) { |
| | | return new RegExp('\\b' + c + (d ? '[0-9]+' : '') + '\\b', 'g').test(n.className); |
| | | }, |
| | | |
| | | getNum : function(n, c) { |
| | | c = n.className.match(new RegExp('\\b' + c + '([0-9]+)\\b', 'g'))[0]; |
| | | c = c.replace(/[^0-9]/g, ''); |
| | | |
| | | return c; |
| | | }, |
| | | |
| | | addClass : function(n, c, b) { |
| | | var o = this.removeClass(n, c); |
| | | n.className = b ? c + (o != '' ? (' ' + o) : '') : (o != '' ? (o + ' ') : '') + c; |
| | | }, |
| | | |
| | | removeClass : function(n, c) { |
| | | c = n.className.replace(new RegExp("(^|\\s+)" + c + "(\\s+|$)"), ' '); |
| | | return n.className = c != ' ' ? c : ''; |
| | | }, |
| | | |
| | | tags : function(f, s) { |
| | | return f.getElementsByTagName(s); |
| | | }, |
| | | |
| | | mark : function(f, n) { |
| | | var s = this.settings; |
| | | |
| | | this.addClass(n, s.invalid_cls); |
| | | this.markLabels(f, n, s.invalid_cls); |
| | | |
| | | return false; |
| | | }, |
| | | |
| | | markLabels : function(f, n, ic) { |
| | | var nl, i; |
| | | |
| | | nl = this.tags(f, "label"); |
| | | for (i=0; i<nl.length; i++) { |
| | | if (nl[i].getAttribute("for") == n.id || nl[i].htmlFor == n.id) |
| | | this.addClass(nl[i], ic); |
| | | } |
| | | |
| | | return null; |
| | | } |
| | | }; |
| | | /**
|
| | | * $Id: validate.js 758 2008-03-30 13:53:29Z spocke $
|
| | | *
|
| | | * Various form validation methods.
|
| | | *
|
| | | * @author Moxiecode
|
| | | * @copyright Copyright © 2004-2008, Moxiecode Systems AB, All rights reserved.
|
| | | */
|
| | |
|
| | | /**
|
| | | // String validation:
|
| | |
|
| | | if (!Validator.isEmail('myemail'))
|
| | | alert('Invalid email.');
|
| | |
|
| | | // Form validation:
|
| | |
|
| | | var f = document.forms['myform'];
|
| | |
|
| | | if (!Validator.isEmail(f.myemail))
|
| | | alert('Invalid email.');
|
| | | */
|
| | |
|
| | | var Validator = {
|
| | | isEmail : function(s) {
|
| | | return this.test(s, '^[-!#$%&\'*+\\./0-9=?A-Z^_`a-z{|}~]+@[-!#$%&\'*+\\/0-9=?A-Z^_`a-z{|}~]+\.[-!#$%&\'*+\\./0-9=?A-Z^_`a-z{|}~]+$');
|
| | | },
|
| | |
|
| | | isAbsUrl : function(s) {
|
| | | return this.test(s, '^(news|telnet|nttp|file|http|ftp|https)://[-A-Za-z0-9\\.]+\\/?.*$');
|
| | | },
|
| | |
|
| | | isSize : function(s) {
|
| | | return this.test(s, '^[0-9]+(%|in|cm|mm|em|ex|pt|pc|px)?$');
|
| | | },
|
| | |
|
| | | isId : function(s) {
|
| | | return this.test(s, '^[A-Za-z_]([A-Za-z0-9_])*$');
|
| | | },
|
| | |
|
| | | isEmpty : function(s) {
|
| | | var nl, i;
|
| | |
|
| | | if (s.nodeName == 'SELECT' && s.selectedIndex < 1)
|
| | | return true;
|
| | |
|
| | | if (s.type == 'checkbox' && !s.checked)
|
| | | return true;
|
| | |
|
| | | if (s.type == 'radio') {
|
| | | for (i=0, nl = s.form.elements; i<nl.length; i++) {
|
| | | if (nl[i].type == "radio" && nl[i].name == s.name && nl[i].checked)
|
| | | return false;
|
| | | }
|
| | |
|
| | | return true;
|
| | | }
|
| | |
|
| | | return new RegExp('^\\s*$').test(s.nodeType == 1 ? s.value : s);
|
| | | },
|
| | |
|
| | | isNumber : function(s, d) {
|
| | | return !isNaN(s.nodeType == 1 ? s.value : s) && (!d || !this.test(s, '^-?[0-9]*\\.[0-9]*$'));
|
| | | },
|
| | |
|
| | | test : function(s, p) {
|
| | | s = s.nodeType == 1 ? s.value : s;
|
| | |
|
| | | return s == '' || new RegExp(p).test(s);
|
| | | }
|
| | | };
|
| | |
|
| | | var AutoValidator = {
|
| | | settings : {
|
| | | id_cls : 'id',
|
| | | int_cls : 'int',
|
| | | url_cls : 'url',
|
| | | number_cls : 'number',
|
| | | email_cls : 'email',
|
| | | size_cls : 'size',
|
| | | required_cls : 'required',
|
| | | invalid_cls : 'invalid',
|
| | | min_cls : 'min',
|
| | | max_cls : 'max'
|
| | | },
|
| | |
|
| | | init : function(s) {
|
| | | var n;
|
| | |
|
| | | for (n in s)
|
| | | this.settings[n] = s[n];
|
| | | },
|
| | |
|
| | | validate : function(f) {
|
| | | var i, nl, s = this.settings, c = 0;
|
| | |
|
| | | nl = this.tags(f, 'label');
|
| | | for (i=0; i<nl.length; i++)
|
| | | this.removeClass(nl[i], s.invalid_cls);
|
| | |
|
| | | c += this.validateElms(f, 'input');
|
| | | c += this.validateElms(f, 'select');
|
| | | c += this.validateElms(f, 'textarea');
|
| | |
|
| | | return c == 3;
|
| | | },
|
| | |
|
| | | invalidate : function(n) {
|
| | | this.mark(n.form, n);
|
| | | },
|
| | |
|
| | | reset : function(e) {
|
| | | var t = ['label', 'input', 'select', 'textarea'];
|
| | | var i, j, nl, s = this.settings;
|
| | |
|
| | | if (e == null)
|
| | | return;
|
| | |
|
| | | for (i=0; i<t.length; i++) {
|
| | | nl = this.tags(e.form ? e.form : e, t[i]);
|
| | | for (j=0; j<nl.length; j++)
|
| | | this.removeClass(nl[j], s.invalid_cls);
|
| | | }
|
| | | },
|
| | |
|
| | | validateElms : function(f, e) {
|
| | | var nl, i, n, s = this.settings, st = true, va = Validator, v;
|
| | |
|
| | | nl = this.tags(f, e);
|
| | | for (i=0; i<nl.length; i++) {
|
| | | n = nl[i];
|
| | |
|
| | | this.removeClass(n, s.invalid_cls);
|
| | |
|
| | | if (this.hasClass(n, s.required_cls) && va.isEmpty(n))
|
| | | st = this.mark(f, n);
|
| | |
|
| | | if (this.hasClass(n, s.number_cls) && !va.isNumber(n))
|
| | | st = this.mark(f, n);
|
| | |
|
| | | if (this.hasClass(n, s.int_cls) && !va.isNumber(n, true))
|
| | | st = this.mark(f, n);
|
| | |
|
| | | if (this.hasClass(n, s.url_cls) && !va.isAbsUrl(n))
|
| | | st = this.mark(f, n);
|
| | |
|
| | | if (this.hasClass(n, s.email_cls) && !va.isEmail(n))
|
| | | st = this.mark(f, n);
|
| | |
|
| | | if (this.hasClass(n, s.size_cls) && !va.isSize(n))
|
| | | st = this.mark(f, n);
|
| | |
|
| | | if (this.hasClass(n, s.id_cls) && !va.isId(n))
|
| | | st = this.mark(f, n);
|
| | |
|
| | | if (this.hasClass(n, s.min_cls, true)) {
|
| | | v = this.getNum(n, s.min_cls);
|
| | |
|
| | | if (isNaN(v) || parseInt(n.value) < parseInt(v))
|
| | | st = this.mark(f, n);
|
| | | }
|
| | |
|
| | | if (this.hasClass(n, s.max_cls, true)) {
|
| | | v = this.getNum(n, s.max_cls);
|
| | |
|
| | | if (isNaN(v) || parseInt(n.value) > parseInt(v))
|
| | | st = this.mark(f, n);
|
| | | }
|
| | | }
|
| | |
|
| | | return st;
|
| | | },
|
| | |
|
| | | hasClass : function(n, c, d) {
|
| | | return new RegExp('\\b' + c + (d ? '[0-9]+' : '') + '\\b', 'g').test(n.className);
|
| | | },
|
| | |
|
| | | getNum : function(n, c) {
|
| | | c = n.className.match(new RegExp('\\b' + c + '([0-9]+)\\b', 'g'))[0];
|
| | | c = c.replace(/[^0-9]/g, '');
|
| | |
|
| | | return c;
|
| | | },
|
| | |
|
| | | addClass : function(n, c, b) {
|
| | | var o = this.removeClass(n, c);
|
| | | n.className = b ? c + (o != '' ? (' ' + o) : '') : (o != '' ? (o + ' ') : '') + c;
|
| | | },
|
| | |
|
| | | removeClass : function(n, c) {
|
| | | c = n.className.replace(new RegExp("(^|\\s+)" + c + "(\\s+|$)"), ' ');
|
| | | return n.className = c != ' ' ? c : '';
|
| | | },
|
| | |
|
| | | tags : function(f, s) {
|
| | | return f.getElementsByTagName(s);
|
| | | },
|
| | |
|
| | | mark : function(f, n) {
|
| | | var s = this.settings;
|
| | |
|
| | | this.addClass(n, s.invalid_cls);
|
| | | this.markLabels(f, n, s.invalid_cls);
|
| | |
|
| | | return false;
|
| | | },
|
| | |
|
| | | markLabels : function(f, n, ic) {
|
| | | var nl, i;
|
| | |
|
| | | nl = this.tags(f, "label");
|
| | | for (i=0; i<nl.length; i++) {
|
| | | if (nl[i].getAttribute("for") == n.id || nl[i].htmlFor == n.id)
|
| | | this.addClass(nl[i], ic);
|
| | | }
|
| | |
|
| | | return null;
|
| | | }
|
| | | };
|
| | |
| | | $out .= $msgtype->show(); |
| | | |
| | | // If desired, set this text area to be editable by TinyMCE |
| | | if ($isHtml) |
| | | $attrib['mce_editable'] = "true"; |
| | | if ($isHtml) $attrib['class'] = "mce_editor"; |
| | | $textarea = new html_textarea($attrib); |
| | | $out .= $textarea->show($body); |
| | | $out .= $form_end ? "\n$form_end" : ''; |
| | |
| | | |
| | | // determine whether HTML or plain text should be checked |
| | | if ($CONFIG['htmleditor']) |
| | | { |
| | | $useHtml = true; |
| | | } |
| | | else |
| | | { |
| | | $useHtml = false; |
| | | } |
| | | |
| | | if ($compose_mode == RCUBE_COMPOSE_REPLY || |
| | | $compose_mode == RCUBE_COMPOSE_FORWARD || |
| | |
| | | $useHtml = ($hasHtml && $CONFIG['htmleditor']); |
| | | } |
| | | |
| | | $chosenvalue = $useHtml ? 'html' : 'plain'; |
| | | |
| | | $selector = ''; |
| | | |
| | | $attrib['name'] = '_editorSelect'; |
| | | $attrib['onchange'] = 'return rcmail_toggle_editor(this)'; |
| | | foreach ($choices as $value => $text) |
| | | { |
| | | $checked = ''; |
| | | if ((($value == 'html') && $useHtml) || |
| | | (($value != 'html') && !$useHtml)) |
| | | $attrib['checked'] = 'true'; |
| | | else |
| | | unset($attrib['checked']); |
| | | |
| | | $attrib['id'] = '_' . $value; |
| | | $attrib['value'] = $value; |
| | | $rb = new html_radiobutton($attrib); |
| | | $selector .= sprintf("%s<label for=\"%s\">%s</label>", |
| | | $rb->show($value), |
| | | $rb->show($chosenvalue), |
| | | $attrib['id'], |
| | | rcube_label($text)); |
| | | } |
| | |
| | | $OUTPUT->set_env('contacts', $a_contacts); |
| | | } |
| | | $OUTPUT->send('compose'); |
| | | ?> |
| | | ?> |
program/steps/settings/edit_identity.inc |