update to v1.1

This commit is contained in:
vanilla thunder 2013-07-25 23:50:43 +02:00
parent 5eb9b9ef3c
commit 1d62931720
541 changed files with 83750 additions and 43069 deletions

View File

@ -1,31 +1,24 @@
# TinyMCE 3.5.8 for OXID eShop CE 4.6+
# TinyMCE 4.0.1 for OXID eShop CE 4.7+
TinyMCE is a platform independent web based Javascript HTML WYSIWYG editor control released as Open Source under LGPL.
More information here: http://www.tinymce.com/
and here: https://github.com/tinymce
## module version 1.0.2 from 2012-12-20
## module version 1.1.0 from 2013-07-11
### changelog
* bugfix: changed text haven't been saved without toggling editor
* updated to TinyMCE version 4.0.1
* popup size applied to backend frameset
## INSTALLATION
### upload over ftp/ssh:
copy the content of the "copy_this" folder into the shop root directory
**if you are uploading files via ftp, switch to the binary transfer mode**
### ssh shell + git client:
navigate into the modules directory and create a "hdi" directory with a "vendormetadata.php" file inside it (can be empty yet)
clone remote git repo and switch to the "module" branch.
this commands works for debian and centos:
<pre>mkdir hdi
cd hdi/
wget https://raw.github.com/vanilla-thunder/hdi-tinymce/master/copy_this/modules/hdi/vendormetadata.php
git clone -b module git://github.com/vanilla-thunder/hdi-tinymce.git
</pre>
## LICENSE AGREEMENT
HDI TinyMCE
Copyright (C) 2012 HEINER DIRECT GmbH & Co. KG
info: info@heiner-direct.com
Copyright (C) 2012-2013 HEINER DIRECT GmbH & Co. KG
info: oxid@heiner-direct.com
This program is free software;
you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation;

0
copy_this/modules/hdi/hdi-tinymce/hdi.png Normal file → Executable file
View File

Before

Width:  |  Height:  |  Size: 3.9 KiB

After

Width:  |  Height:  |  Size: 3.9 KiB

169
copy_this/modules/hdi/hdi-tinymce/metadata.php Normal file → Executable file
View File

@ -1,84 +1,97 @@
<?php
/**
* HDI TinyMCE
* Copyright (C) 2012 HEINER DIRECT GmbH & Co. KG
* info: info@heiner-direct.com
*
* This program is free software;
* you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation;
* either version 3 of the License, or (at your option) any later version.
*
* This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY;
* without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.
* You should have received a copy of the GNU General Public License along with this program; if not, see <http://www.gnu.org/licenses/>
*/
$sMetadataVersion = '1.0';
$aModule = array(
'id' => 'hdi-tinymce',
'title' => '<strong style="color:#006a8c;border: 1px solid #e30061;padding: 0 2px;background:white;">HDI</strong> <strong>TinyMCE 3.5.8</strong>',
'description' => 'backend implementation of TinyMCE Editor<br/>visit <a href="http://www.tinymce.com/" target="_blank">http://www.tinymce.com/</a> for more details',
'thumbnail' => 'hdi.png',
'version' => '1.0.2 (2012-12-20)</dd><dt>newest version</dt><dd><img src="https://raw.github.com/vanilla-thunder/hdi-tinymce/module/version.jpg" /><br/>
<a style="display: inline-block; padding: 1px 15px; background: #f0f0f0; border: 1px solid gray" href="https://github.com/vanilla-thunder/hdi-tinymce/" target="_blank">info</a> <a style="display: inline-block; padding: 1px 15px; background: #f0f0f0; border: 1px solid gray" href="https://github.com/vanilla-thunder/hdi-tinymce/archive/master.zip">download</a>',
'author' => 'Marat Bedoev, HEINER DIRECT GmbH & Co. KG',
'email' => 'info@heiner-direct.com',
'url' => 'http://www.heiner-direct.com',
'extend' => array(
'article_main' => 'hdi/hdi-tinymce/tinymce',
'category_text' => 'hdi/hdi-tinymce/tinymce',
'content_main' => 'hdi/hdi-tinymce/tinymce',
'newsletter_main' => 'hdi/hdi-tinymce/tinymce',
'news_text' => 'hdi/hdi-tinymce/tinymce'
/**
* HDI TinyMCE
* Copyright (C) 2012-2013 HEINER DIRECT GmbH & Co. KG
* info: oxid@heiner-direct.com
*
* This program is free software;
* you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation;
* either version 3 of the License, or (at your option) any later version.
*
* This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY;
* without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.
* You should have received a copy of the GNU General Public License along with this program; if not, see <http://www.gnu.org/licenses/>
*/
$sMetadataVersion = '1.1';
$aModule = array(
'id' => 'hdi-tinymce',
'title' => '<strong style="color:#006a8c;border: 1px solid #e30061;padding: 0 2px;background:white;">HDI</strong> <strong>TinyMCE 4.0.1</strong>',
'description' => 'backend implementation of TinyMCE Editor<br/>visit <a href="http://www.tinymce.com/" target="_blank">http://www.tinymce.com/</a> for demo and more details',
'thumbnail' => 'hdi.png',
'version' => '1.1.0 (2013-07-10) / newest version: <img src="https://raw.github.com/vanilla-thunder/hdi-tinymce/master/copy_this/modules/hdi/hdi-tinymce/version.jpg" style="float:right;"/><br/>
<a style="display: inline-block; padding: 1px 25px; background: dodgerblue; border: 1px solid #585858; color: white;" href="https://github.com/vanilla-thunder/hdi-tinymce/" target="_blank">info</a>&nbsp;
<a style="display: inline-block; padding: 1px 25px; background: forestgreen; border: 1px solid #585858; color: white;" href="https://github.com/vanilla-thunder/hdi-tinymce/archive/master.zip">download</a>',
'author' => 'Marat Bedoev, HEINER DIRECT GmbH & Co. KG',
'email' => 'oxid@heiner-direct.com',
'url' => 'http://www.heiner-direct.com',
'extend' => array(
'article_main' => 'hdi/hdi-tinymce/tinymce',
'category_text' => 'hdi/hdi-tinymce/tinymce',
'content_main' => 'hdi/hdi-tinymce/tinymce',
'newsletter_main' => 'hdi/hdi-tinymce/tinymce',
'news_text' => 'hdi/hdi-tinymce/tinymce'
//'oxAdminDetails' => 'hdi/hdi-tinymce/tinymce'
),
'templates' => array(
'tinymce.tpl' => 'hdi/hdi-tinymce/out/tpl/tinymce.tpl',
'templates' => array(
'tinymce.tpl' => 'hdi/hdi-tinymce/views/tinymce.tpl',
),
'blocks' => array(
array('template' => 'bottomnaviitem.tpl', 'block' => 'admin_bottomnaviitem', 'file' => 'admin_bottomnaviitem.tpl')
'blocks' => array(
array('template' => 'bottomnaviitem.tpl', 'block' => 'admin_bottomnaviitem', 'file' => '/views/blocks/admin_bottomnaviitem.tpl')
),
'settings' => array(
/* enabling tinyMCE for this classes */
array('group' => 'tinyMceMain', 'name' => 'bTinyMCE_article_main', 'type' => 'bool', 'value' => true, 'position' => 1),
array('group' => 'tinyMceMain', 'name' => 'bTinyMCE_category_text', 'type' => 'bool', 'value' => true, 'position' => 2),
array('group' => 'tinyMceMain', 'name' => 'bTinyMCE_content_main', 'type' => 'bool', 'value' => true, 'position' => 3),
array('group' => 'tinyMceMain', 'name' => 'bTinyMCE_newsletter_main', 'type' => 'bool', 'value' => true, 'position' => 4),
array('group' => 'tinyMceMain', 'name' => 'bTinyMCE_news_text', 'type' => 'bool', 'value' => true, 'position' => 5),
/* TinyMCE Settings */
array('group' => 'tinyMceSettings', 'name' => 'sTinyMCE_height', 'type' => 'str', 'value' => '400', 'position' => 1),
array('group' => 'tinyMceSettings', 'name' => 'bTinyMCE_relative_urls', 'type' => 'bool', 'value' => true, 'position' => 2),
/* plugins */
array('group' => 'tinyMcePlugins', 'name' => 'bTinyMCE_autolink', 'type' => 'bool', 'value' => true, 'position' => 1),
array('group' => 'tinyMcePlugins', 'name' => 'bTinyMCE_ists', 'type' => 'bool', 'value' => true, 'position' => 2),
array('group' => 'tinyMcePlugins', 'name' => 'bTinyMCE_pagebreak', 'type' => 'bool', 'value' => true, 'position' => 3),
array('group' => 'tinyMcePlugins', 'name' => 'bTinyMCE_style', 'type' => 'bool', 'value' => true, 'position' => 4),
array('group' => 'tinyMcePlugins', 'name' => 'bTinyMCE_layer', 'type' => 'bool', 'value' => true, 'position' => 5),
array('group' => 'tinyMcePlugins', 'name' => 'bTinyMCE_table', 'type' => 'bool', 'value' => true, 'position' => 6),
array('group' => 'tinyMcePlugins', 'name' => 'bTinyMCE_save', 'type' => 'bool', 'value' => true, 'position' => 7),
array('group' => 'tinyMcePlugins', 'name' => 'bTinyMCE_advhr', 'type' => 'bool', 'value' => true, 'position' => 8),
array('group' => 'tinyMcePlugins', 'name' => 'bTinyMCE_advimage', 'type' => 'bool', 'value' => true, 'position' => 9),
array('group' => 'tinyMcePlugins', 'name' => 'bTinyMCE_advlink', 'type' => 'bool', 'value' => true, 'position' => 10),
array('group' => 'tinyMcePlugins', 'name' => 'bTinyMCE_emotions', 'type' => 'bool', 'value' => true, 'position' => 11),
array('group' => 'tinyMcePlugins', 'name' => 'bTinyMCE_iespell', 'type' => 'bool', 'value' => true, 'position' => 12),
array('group' => 'tinyMcePlugins', 'name' => 'bTinyMCE_inlinepopups', 'type' => 'bool', 'value' => true, 'position' => 13),
array('group' => 'tinyMcePlugins', 'name' => 'bTinyMCE_insertdatetime', 'type' => 'bool', 'value' => true, 'position' => 14),
array('group' => 'tinyMcePlugins', 'name' => 'bTinyMCE_preview', 'type' => 'bool', 'value' => true, 'position' => 15),
array('group' => 'tinyMcePlugins', 'name' => 'bTinyMCE_media', 'type' => 'bool', 'value' => true, 'position' => 16),
array('group' => 'tinyMcePlugins', 'name' => 'bTinyMCE_searchreplace', 'type' => 'bool', 'value' => true, 'position' => 17),
array('group' => 'tinyMcePlugins', 'name' => 'bTinyMCE_print', 'type' => 'bool', 'value' => true, 'position' => 18),
array('group' => 'tinyMcePlugins', 'name' => 'bTinyMCE_contextmenu', 'type' => 'bool', 'value' => true, 'position' => 19),
array('group' => 'tinyMcePlugins', 'name' => 'bTinyMCE_paste', 'type' => 'bool', 'value' => true, 'position' => 20),
array('group' => 'tinyMcePlugins', 'name' => 'bTinyMCE_directionality', 'type' => 'bool', 'value' => true, 'position' => 21),
array('group' => 'tinyMcePlugins', 'name' => 'bTinyMCE_fullscreen', 'type' => 'bool', 'value' => true, 'position' => 22),
array('group' => 'tinyMcePlugins', 'name' => 'bTinyMCE_noneditable', 'type' => 'bool', 'value' => true, 'position' => 23),
array('group' => 'tinyMcePlugins', 'name' => 'bTinyMCE_visualchars', 'type' => 'bool', 'value' => true, 'position' => 24),
array('group' => 'tinyMcePlugins', 'name' => 'bTinyMCE_nonbreaking', 'type' => 'bool', 'value' => true, 'position' => 25),
array('group' => 'tinyMcePlugins', 'name' => 'bTinyMCE_xhtmlxtras', 'type' => 'bool', 'value' => true, 'position' => 26),
array('group' => 'tinyMcePlugins', 'name' => 'bTinyMCE_template', 'type' => 'bool', 'value' => true, 'position' => 27),
array('group' => 'tinyMcePlugins', 'name' => 'bTinyMCE_wordcount', 'type' => 'bool', 'value' => true, 'position' => 28),
array('group' => 'tinyMcePlugins', 'name' => 'bTinyMCE_advlist', 'type' => 'bool', 'value' => true, 'position' => 29),
array('group' => 'tinyMcePlugins', 'name' => 'bTinyMCE_autosave', 'type' => 'bool', 'value' => true, 'position' => 30),
array('group' => 'tinyMcePlugins', 'name' => 'bTinyMCE_visualblocks', 'type' => 'bool', 'value' => true, 'position' => 31),
array('group' => 'tinyMcePlugins', 'name' => 'sTinyMCE_customplugins', 'type' => 'str', 'value' => "", 'position' => 32)
'settings' => array(
/* enabling tinyMCE for this classes */
array('group' => 'tinyMceMain', 'name' => 'aTinyMCE_classes', 'type' => 'arr', 'value' => array("article_main", "category_text","content_main","newsletter_main","news_text"), 'position' => 1),
array('group' => 'tinyMceMain', 'name' => 'sTinyMCE_height', 'type' => 'str', 'value' => '300', 'position' => 2),
array('group' => 'tinyMceMain', 'name' => 'sTinyMCE_cssfile', 'type' => 'str', 'value' => '/weiss/ich/noch/nicht.css', 'position' => 3),
/* TinyMCE Settings */
array('group' => 'tinyMceSettings', 'name' => 'bTinyMCE_relative_urls', 'type' => 'bool', 'value' => true, 'position' => 0),
array('group' => 'tinyMceSettings', 'name' => 'bTinyMCE_browser_spellcheck', 'type' => 'bool', 'value' => true, 'position' => 1),
array('group' => 'tinyMceSettings', 'name' => 'bTinyMCE_autolink', 'type' => 'bool', 'value' => true, 'position' => 1),
array('group' => 'tinyMceSettings', 'name' => 'bTinyMCE_advlist', 'type' => 'bool', 'value' => true, 'position' => 2),
array('group' => 'tinyMceSettings', 'name' => 'bTinyMCE_anchor', 'type' => 'bool', 'value' => true, 'position' => 3),
array('group' => 'tinyMceSettings', 'name' => 'bTinyMCE_autolink', 'type' => 'bool', 'value' => true, 'position' => 4),
//array('group' => 'tinyMceSettings', 'name' => 'bTinyMCE_autoresize', 'type' => 'bool', 'value' => true, 'position' => 5), // autoresizing editor. causes problems with the height
array('group' => 'tinyMceSettings', 'name' => 'bTinyMCE_autosave', 'type' => 'bool', 'value' => false, 'position' => 6),
array('group' => 'tinyMceSettings', 'name' => 'bTinyMCE_bbcode', 'type' => 'bool', 'value' => false, 'position' => 7),
array('group' => 'tinyMceSettings', 'name' => 'bTinyMCE_charmap', 'type' => 'bool', 'value' => true, 'position' => 8),
array('group' => 'tinyMceSettings', 'name' => 'bTinyMCE_code', 'type' => 'bool', 'value' => true, 'position' => 9),
//array('group' => 'tinyMceSettings', 'name' => 'bTinyMCE_compat3x', 'type' => 'bool', 'value' => true, 'position' => 10), //bug
array('group' => 'tinyMceSettings', 'name' => 'bTinyMCE_contextmenu', 'type' => 'bool', 'value' => true, 'position' => 11),
//array('group' => 'tinyMceSettings', 'name' => 'bTinyMCE_directionality', 'type' => 'bool', 'value' => true, 'position' => 12), // rtl support
array('group' => 'tinyMceSettings', 'name' => 'bTinyMCE_emoticons', 'type' => 'bool', 'value' => false, 'position' => 13),
//array('group' => 'tinyMceSettings', 'name' => 'bTinyMCE_example', 'type' => 'bool', 'value' => true, 'position' => 14), // example plugin
//array('group' => 'tinyMceSettings', 'name' => 'bTinyMCE_example_dependency', 'type' => 'bool', 'value' => true, 'position' => 15), // example plugin
//array('group' => 'tinyMceSettings', 'name' => 'bTinyMCE_fullpage', 'type' => 'bool', 'value' => true, 'position' => 16), // adds doctype, html,head, body and other page tags
array('group' => 'tinyMceSettings', 'name' => 'bTinyMCE_fullscreen', 'type' => 'bool', 'value' => true, 'position' => 17),
array('group' => 'tinyMceSettings', 'name' => 'bTinyMCE_hr', 'type' => 'bool', 'value' => true, 'position' => 18),
array('group' => 'tinyMceSettings', 'name' => 'bTinyMCE_image', 'type' => 'bool', 'value' => true, 'position' => 19),
array('group' => 'tinyMceSettings', 'name' => 'bTinyMCE_insertdatetime', 'type' => 'bool', 'value' => true, 'position' => 20),
//array('group' => 'tinyMceSettings', 'name' => 'bTinyMCE_layer', 'type' => 'bool', 'value' => true, 'position' => 21), // doenst really works, gonna be removed in the future
array('group' => 'tinyMceSettings', 'name' => 'bTinyMCE_legacyoutput', 'type' => 'bool', 'value' => true, 'position' => 22),
array('group' => 'tinyMceSettings', 'name' => 'bTinyMCE_link', 'type' => 'bool', 'value' => true, 'position' => 23),
array('group' => 'tinyMceSettings', 'name' => 'bTinyMCE_lists', 'type' => 'bool', 'value' => true, 'position' => 24),
array('group' => 'tinyMceSettings', 'name' => 'bTinyMCE_media', 'type' => 'bool', 'value' => true, 'position' => 25),
array('group' => 'tinyMceSettings', 'name' => 'bTinyMCE_nonbreaking', 'type' => 'bool', 'value' => true, 'position' => 26),
array('group' => 'tinyMceSettings', 'name' => 'bTinyMCE_noneditable', 'type' => 'bool', 'value' => true, 'position' => 27),
array('group' => 'tinyMceSettings', 'name' => 'bTinyMCE_pagebreak', 'type' => 'bool', 'value' => true, 'position' => 28),
array('group' => 'tinyMceSettings', 'name' => 'bTinyMCE_paste', 'type' => 'bool', 'value' => true, 'position' => 29),
array('group' => 'tinyMceSettings', 'name' => 'bTinyMCE_preview', 'type' => 'bool', 'value' => true, 'position' => 30),
array('group' => 'tinyMceSettings', 'name' => 'bTinyMCE_print', 'type' => 'bool', 'value' => false, 'position' => 31),
array('group' => 'tinyMceSettings', 'name' => 'bTinyMCE_save', 'type' => 'bool', 'value' => false, 'position' => 32),
array('group' => 'tinyMceSettings', 'name' => 'bTinyMCE_searchreplace', 'type' => 'bool', 'value' => true, 'position' => 33),
array('group' => 'tinyMceSettings', 'name' => 'bTinyMCE_spellchecker', 'type' => 'bool', 'value' => true, 'position' => 34),
array('group' => 'tinyMceSettings', 'name' => 'bTinyMCE_tabfocus', 'type' => 'bool', 'value' => true, 'position' => 35),
array('group' => 'tinyMceSettings', 'name' => 'bTinyMCE_table', 'type' => 'bool', 'value' => true, 'position' => 36),
array('group' => 'tinyMceSettings', 'name' => 'bTinyMCE_template', 'type' => 'bool', 'value' => false, 'position' => 37),
array('group' => 'tinyMceSettings', 'name' => 'bTinyMCE_textcolor', 'type' => 'bool', 'value' => true, 'position' => 38),
array('group' => 'tinyMceSettings', 'name' => 'bTinyMCE_visualblocks', 'type' => 'bool', 'value' => true, 'position' => 39),
array('group' => 'tinyMceSettings', 'name' => 'bTinyMCE_visualchars', 'type' => 'bool', 'value' => true, 'position' => 40),
array('group' => 'tinyMceSettings', 'name' => 'bTinyMCE_wordcount', 'type' => 'bool', 'value' => true, 'position' => 41),
/* external plugins */
array('group' => 'tinyMceExtPlugins', 'name' => 'aTinyMCE_external_plugins', 'type' => 'aarr', 'value' => '', 'position' => 0),
array('group' => 'tinyMceExtPlugins', 'name' => 'sTinyMCE_external_controls', 'type' => 'str', 'value' => '', 'position' => 1),
)
);
);

View File

@ -1,61 +0,0 @@
<?php
/**
* HDI MiniBanner
* Copyright (C) 2012 HEINER DIRECT GmbH & Co. KG
* info: info@heiner-direct.com
*
* This program is free software;
* you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation;
* either version 3 of the License, or (at your option) any later version.
*
* This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY;
* without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.
* You should have received a copy of the GNU General Public License along with this program; if not, see <http://www.gnu.org/licenses/>
*/
$sLangName = 'Deutsch';
$aLang = array(
'charset' => 'UTF-8',
'SHOP_MODULE_GROUP_tinyMceMain' => '<style type="text/css">.groupExp a.rc b {font-size: medium; color: #ff3600; }.groupExp dt input.txt { width: 200px !important} .groupExp dl { display: block !important; } input.confinput {position: fixed; top: 20px; right: 70px; background: #008B2D; padding: 5px 20px; color: white; border: 1px solid black; cursor:pointer; font-size: 125%; } input.confinput:hover {outline: 3px solid #ff3600;}</style>Moduleinstellungen',
'SHOP_MODULE_bTinyMCE_article_main' => 'TinyMCE für die Artikelbeschreibung benutzen',
'SHOP_MODULE_bTinyMCE_category_text' => 'TinyMCE für die Kategorienbeschreibung benutzen',
'SHOP_MODULE_bTinyMCE_content_main' => 'TinyMCE für die CMS Seiten benutzen',
'SHOP_MODULE_bTinyMCE_newsletter_main' => 'TinyMCE für die Newsletter benutzen',
'SHOP_MODULE_bTinyMCE_news_text' => 'TinyMCE für die News benutzen',
'SHOP_MODULE_GROUP_tinyMceSettings' => 'Editor Einxtellungen',
'SHOP_MODULE_sTinyMCE_height'=>'Höhe des Editors (eine reine Zahl ohne Einheiten)',
'SHOP_MODULE_bTinyMCE_relative_urls'=>'relative Urls verwenden',
'SHOP_MODULE_GROUP_tinyMcePlugins' => 'TinyMCE Plugins</b></a>&nbsp;&nbsp;&nbsp;<a href="http://www.tinymce.com/wiki.php/Plugins" target="_blank" title="mehr Infos"><b>( ? )',
'SHOP_MODULE_bTinyMCE_autolink' => 'autolink',
'SHOP_MODULE_bTinyMCE_ists' => 'ists',
'SHOP_MODULE_bTinyMCE_pagebreak' => 'pagebreak',
'SHOP_MODULE_bTinyMCE_style' => 'style',
'SHOP_MODULE_bTinyMCE_layer' => 'layer',
'SHOP_MODULE_bTinyMCE_table' => 'table',
'SHOP_MODULE_bTinyMCE_save' => 'save',
'SHOP_MODULE_bTinyMCE_advhr' => 'advhr',
'SHOP_MODULE_bTinyMCE_advimage' => 'advimage',
'SHOP_MODULE_bTinyMCE_advlink' => 'advlink',
'SHOP_MODULE_bTinyMCE_emotions' => 'emotions',
'SHOP_MODULE_bTinyMCE_iespell' => 'iespell',
'SHOP_MODULE_bTinyMCE_inlinepopups' => 'inlinepopups',
'SHOP_MODULE_bTinyMCE_insertdatetime' => 'insertdatetime',
'SHOP_MODULE_bTinyMCE_preview' => 'preview',
'SHOP_MODULE_bTinyMCE_media' => 'media',
'SHOP_MODULE_bTinyMCE_searchreplace' => 'searchreplace',
'SHOP_MODULE_bTinyMCE_print' => 'print',
'SHOP_MODULE_bTinyMCE_contextmenu' => 'contextmenu',
'SHOP_MODULE_bTinyMCE_paste' => 'paste',
'SHOP_MODULE_bTinyMCE_directionality' => 'directionality',
'SHOP_MODULE_bTinyMCE_fullscreen' => 'fullscreen',
'SHOP_MODULE_bTinyMCE_noneditable' => 'noneditable',
'SHOP_MODULE_bTinyMCE_visualchars' => 'visualchars',
'SHOP_MODULE_bTinyMCE_nonbreaking' => 'nonbreaking',
'SHOP_MODULE_bTinyMCE_xhtmlxtras' => 'xhtmlxtras',
'SHOP_MODULE_bTinyMCE_template' => 'template',
'SHOP_MODULE_bTinyMCE_wordcount' => 'wordcount',
'SHOP_MODULE_bTinyMCE_advlist' => 'advlist',
'SHOP_MODULE_bTinyMCE_autosave' => 'autosave',
'SHOP_MODULE_bTinyMCE_visualblocks' => 'visualblocks',
'SHOP_MODULE_sTinyMCE_customplugins' => 'eigene Plugins'
);

View File

@ -1,67 +0,0 @@
<!-- TinyMCE -->
<script type="text/javascript">
var tinyMCE = null;
function copyLongDescFromTinyMCE(sIdent) {
var editor = tinyMCE.activeEditor;
if (editor && editor.isHidden() !== true) {
content = editor.getContent({format : 'raw'});
if (content !== null) {
// restore smarty code that has been masked by htmlentities:
var aSmartyParts = content.split("[" + "{");
if (aSmartyParts.length > 1) {
for (var i = 0; i < aSmartyParts.length; i++) {
aSubParts = aSmartyParts[i].split("}" + "]");
if (aSubParts.length > 1)
aSubParts[0] = aSubParts[0].replace(/&gt;/gi, ">").replace(/&lt;/gi, "<").replace(/&amp;/gi, "&").replace(/&quot;/gi, '"');
aSmartyParts[i] = aSubParts.join("}" + "]");
}
content = aSmartyParts.join("[" + "{");
}
document.getElementsByName('editval[' + sIdent + ']').item(0).value = content;
return true;
}
}
return false;
}
var origCopyLongDesc = copyLongDesc;
copyLongDesc = function(sIdent) {
if ( copyLongDescFromTinyMCE( sIdent ) ) return;
origCopyLongDesc( sIdent );
}
</script>
<script type="text/javascript" src="[{$oViewConf->getModuleUrl('hdi-tinymce','tiny_mce/tiny_mce.js') }]"></script>
<script type="text/javascript">
tinyMCE.init({
// General options
height: '[{$cfg->getConfigParam("sTinyMCE_height")}]',
relative_urls: [{if $cfg->getConfigParam("bTinyMCE_relative_urls") == 1}]true[{else}]false[{/if}],
remove_script_host: false,
document_base_url: '[{$oViewConf->getBaseDir()}]',
mode: "textareas",
theme: "advanced",
plugins: "[{if $cfg->getConfigParam("bTinyMCE_autolink")}]autolink,[{/if}][{if $cfg->getConfigParam("bTinyMCE_lists")}]lists,[{/if}][{if $cfg->getConfigParam("bTinyMCE_pagebreak")}]pagebreak,[{/if}][{if $cfg->getConfigParam("bTinyMCE_style")}]style,[{/if}][{if $cfg->getConfigParam("bTinyMCE_layer")}]layer,[{/if}][{if $cfg->getConfigParam("bTinyMCE_table")}]table,[{/if}][{if $cfg->getConfigParam("bTinyMCE_save")}]save,[{/if}][{if $cfg->getConfigParam("bTinyMCE_advhr")}]advhr,[{/if}][{if $cfg->getConfigParam("bTinyMCE_advimage")}]advimage,[{/if}][{if $cfg->getConfigParam("bTinyMCE_advlink")}]advlink,[{/if}][{if $cfg->getConfigParam("bTinyMCE_emotions")}]emotions,[{/if}][{if $cfg->getConfigParam("bTinyMCE_iespell")}]iespell,[{/if}][{if $cfg->getConfigParam("bTinyMCE_inlinepopups")}]inlinepopups,[{/if}][{if $cfg->getConfigParam("bTinyMCE_insertdatetime")}]insertdatetime,[{/if}][{if $cfg->getConfigParam("bTinyMCE_preview")}]preview,[{/if}][{if $cfg->getConfigParam("bTinyMCE_media")}]media,[{/if}][{if $cfg->getConfigParam("bTinyMCE_searchreplace")}]searchreplace,[{/if}][{if $cfg->getConfigParam("bTinyMCE_print")}]print,[{/if}][{if $cfg->getConfigParam("bTinyMCE_contextmenu")}]contextmenu,[{/if}][{if $cfg->getConfigParam("bTinyMCE_paste")}]paste,[{/if}][{if $cfg->getConfigParam("bTinyMCE_directionality")}]directionality,[{/if}][{if $cfg->getConfigParam("bTinyMCE_fullscreen")}]fullscreen,[{/if}][{if $cfg->getConfigParam("bTinyMCE_noneditable")}]noneditable,[{/if}][{if $cfg->getConfigParam("bTinyMCE_visualchars")}]visualchars,[{/if}][{if $cfg->getConfigParam("bTinyMCE_nonbreaking")}]nonbreaking,[{/if}][{if $cfg->getConfigParam("bTinyMCE_xhtmlxtras")}]xhtmlxtras,[{/if}][{if $cfg->getConfigParam("bTinyMCE_template")}]template,[{/if}][{if $cfg->getConfigParam("bTinyMCE_wordcount")}]wordcount,[{/if}][{if $cfg->getConfigParam("bTinyMCE_advlist")}]advlist,[{/if}][{if $cfg->getConfigParam("bTinyMCE_autosave")}]autosave,[{/if}][{if $cfg->getConfigParam("bTinyMCE_visualblocks")}]visualblocks[{/if}][{if $cfg->getConfigParam("sTinyMCE_customplugins")}][{$cfg->getConfigParam("sTinyMCE_customplugins")}][{/if}]",
// Theme options
theme_advanced_buttons1: "newdocument,|,bold,italic,underline,strikethrough,|,justifyleft,justifycenter,justifyright,justifyfull,styleselect,formatselect",
theme_advanced_buttons2: "cut,copy,paste,pastetext,pasteword,|,search,replace,|,bullist,numlist,|,outdent,indent,blockquote,|,undo,redo,|,link,unlink,anchor,cleanup,help,code,|,insertdate,inserttime,preview,|,forecolor,backcolor",
theme_advanced_buttons3: "tablecontrols,|,hr,removeformat,visualaid,|,sub,sup,|,charmap,emotions,iespell,media,advhr,|,print,|,ltr,rtl,|,fullscreen",
theme_advanced_buttons4: "insertlayer,moveforward,movebackward,absolute,|,styleprops,|,cite,abbr,acronym,del,ins,attribs,|,visualchars,nonbreaking,template,pagebreak,restoredraft,visualblocks,|,image,insertimage,|,dDesc",
theme_advanced_toolbar_location: "top",
theme_advanced_toolbar_align: "left",
theme_advanced_statusbar_location: "bottom",
theme_advanced_resizing: true,
// Example content CSS (should be your site CSS)
//content_css : "modules/tinymce/style.css",
// Drop lists for link/image/media/template dialogs
//template_external_list_url : "lists/template_list.js",
//external_link_list_url : "lists/link_list.js",
//external_image_list_url : "lists/image_list.js",
//media_external_list_url : "lists/media_list.js",
});
</script>
<textarea id='editor_[{$sField}]' name="content" style='width:[{$iWidth}]; height:[{$iHeight}];'>[{$sContent}]</textarea>
[{assign var=tinyMCE value=1 }]
<!-- /TinyMCE -->

View File

@ -1,2 +0,0 @@
.red { color:#843047; }
.blue { color:#00adee; }

File diff suppressed because one or more lines are too long

View File

@ -1,5 +0,0 @@
input.radio {border:1px none #000; background:transparent; vertical-align:middle;}
.panel_wrapper div.current {height:80px;}
#width {width:50px; vertical-align:middle;}
#width2 {width:50px; vertical-align:middle;}
#size {width:100px;}

View File

@ -1 +0,0 @@
(function(){tinymce.create("tinymce.plugins.AdvancedHRPlugin",{init:function(a,b){a.addCommand("mceAdvancedHr",function(){a.windowManager.open({file:b+"/rule.htm",width:250+parseInt(a.getLang("advhr.delta_width",0)),height:160+parseInt(a.getLang("advhr.delta_height",0)),inline:1},{plugin_url:b})});a.addButton("advhr",{title:"advhr.advhr_desc",cmd:"mceAdvancedHr"});a.onNodeChange.add(function(d,c,e){c.setActive("advhr",e.nodeName=="HR")});a.onClick.add(function(c,d){d=d.target;if(d.nodeName==="HR"){c.selection.select(d)}})},getInfo:function(){return{longname:"Advanced HR",author:"Moxiecode Systems AB",authorurl:"http://tinymce.moxiecode.com",infourl:"http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/advhr",version:tinymce.majorVersion+"."+tinymce.minorVersion}}});tinymce.PluginManager.add("advhr",tinymce.plugins.AdvancedHRPlugin)})();

View File

@ -1,57 +0,0 @@
/**
* editor_plugin_src.js
*
* Copyright 2009, Moxiecode Systems AB
* Released under LGPL License.
*
* License: http://tinymce.moxiecode.com/license
* Contributing: http://tinymce.moxiecode.com/contributing
*/
(function() {
tinymce.create('tinymce.plugins.AdvancedHRPlugin', {
init : function(ed, url) {
// Register commands
ed.addCommand('mceAdvancedHr', function() {
ed.windowManager.open({
file : url + '/rule.htm',
width : 250 + parseInt(ed.getLang('advhr.delta_width', 0)),
height : 160 + parseInt(ed.getLang('advhr.delta_height', 0)),
inline : 1
}, {
plugin_url : url
});
});
// Register buttons
ed.addButton('advhr', {
title : 'advhr.advhr_desc',
cmd : 'mceAdvancedHr'
});
ed.onNodeChange.add(function(ed, cm, n) {
cm.setActive('advhr', n.nodeName == 'HR');
});
ed.onClick.add(function(ed, e) {
e = e.target;
if (e.nodeName === 'HR')
ed.selection.select(e);
});
},
getInfo : function() {
return {
longname : 'Advanced HR',
author : 'Moxiecode Systems AB',
authorurl : 'http://tinymce.moxiecode.com',
infourl : 'http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/advhr',
version : tinymce.majorVersion + "." + tinymce.minorVersion
};
}
});
// Register plugin
tinymce.PluginManager.add('advhr', tinymce.plugins.AdvancedHRPlugin);
})();

View File

@ -1,43 +0,0 @@
var AdvHRDialog = {
init : function(ed) {
var dom = ed.dom, f = document.forms[0], n = ed.selection.getNode(), w;
w = dom.getAttrib(n, 'width');
f.width.value = w ? parseInt(w) : (dom.getStyle('width') || '');
f.size.value = dom.getAttrib(n, 'size') || parseInt(dom.getStyle('height')) || '';
f.noshade.checked = !!dom.getAttrib(n, 'noshade') || !!dom.getStyle('border-width');
selectByValue(f, 'width2', w.indexOf('%') != -1 ? '%' : 'px');
},
update : function() {
var ed = tinyMCEPopup.editor, h, f = document.forms[0], st = '';
h = '<hr';
if (f.size.value) {
h += ' size="' + f.size.value + '"';
st += ' height:' + f.size.value + 'px;';
}
if (f.width.value) {
h += ' width="' + f.width.value + (f.width2.value == '%' ? '%' : '') + '"';
st += ' width:' + f.width.value + (f.width2.value == '%' ? '%' : 'px') + ';';
}
if (f.noshade.checked) {
h += ' noshade="noshade"';
st += ' border-width: 1px; border-style: solid; border-color: #CCCCCC; color: #ffffff;';
}
if (ed.settings.inline_styles)
h += ' style="' + tinymce.trim(st) + '"';
h += ' />';
ed.execCommand("mceInsertContent", false, h);
tinyMCEPopup.close();
}
};
tinyMCEPopup.requireLangPack();
tinyMCEPopup.onInit.add(AdvHRDialog.init, AdvHRDialog);

View File

@ -1 +0,0 @@
tinyMCE.addI18n('en.advhr_dlg',{size:"Height",noshade:"No Shadow",width:"Width",normal:"Normal",widthunits:"Units"});

View File

@ -1,58 +0,0 @@
<!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>{#advhr.advhr_desc}</title>
<script type="text/javascript" src="../../tiny_mce_popup.js"></script>
<script type="text/javascript" src="js/rule.js"></script>
<script type="text/javascript" src="../../utils/mctabs.js"></script>
<script type="text/javascript" src="../../utils/form_utils.js"></script>
<link href="css/advhr.css" rel="stylesheet" type="text/css" />
</head>
<body role="application">
<form onsubmit="AdvHRDialog.update();return false;" action="#">
<div class="tabs">
<ul>
<li id="general_tab" class="current" aria-controls="general_panel"><span><a href="javascript:mcTabs.displayTab('general_tab','general_panel');" onmousedown="return false;">{#advhr.advhr_desc}</a></span></li>
</ul>
</div>
<div class="panel_wrapper">
<div id="general_panel" class="panel current">
<table role="presentation" border="0" cellpadding="4" cellspacing="0">
<tr role="group" aria-labelledby="width_label">
<td><label id="width_label" for="width">{#advhr_dlg.width}</label></td>
<td class="nowrap">
<input id="width" name="width" type="text" value="" class="mceFocus" />
<span style="display:none;" id="width_unit_label">{#advhr_dlg.widthunits}</span>
<select name="width2" id="width2" aria-labelledby="width_unit_label">
<option value="">px</option>
<option value="%">%</option>
</select>
</td>
</tr>
<tr>
<td><label for="size">{#advhr_dlg.size}</label></td>
<td><select id="size" name="size">
<option value="">{#advhr_dlg.normal}</option>
<option value="1">1</option>
<option value="2">2</option>
<option value="3">3</option>
<option value="4">4</option>
<option value="5">5</option>
</select></td>
</tr>
<tr>
<td><label for="noshade">{#advhr_dlg.noshade}</label></td>
<td><input type="checkbox" name="noshade" id="noshade" class="radio" /></td>
</tr>
</table>
</div>
</div>
<div class="mceActionPanel">
<input type="submit" id="insert" name="insert" value="{#insert}" />
<input type="button" id="cancel" name="cancel" value="{#cancel}" onclick="tinyMCEPopup.close();" />
</div>
</form>
</body>
</html>

View File

@ -1,13 +0,0 @@
#src_list, #over_list, #out_list {width:280px;}
.mceActionPanel {margin-top:7px;}
.alignPreview {border:1px solid #000; width:140px; height:140px; overflow:hidden; padding:5px;}
.checkbox {border:0;}
.panel_wrapper div.current {height:305px;}
#prev {margin:0; border:1px solid #000; width:428px; height:150px; overflow:auto;}
#align, #classlist {width:150px;}
#width, #height {vertical-align:middle; width:50px; text-align:center;}
#vspace, #hspace, #border {vertical-align:middle; width:30px; text-align:center;}
#class_list {width:180px;}
input {width: 280px;}
#constrain, #onmousemovecheck {width:auto;}
#id, #dir, #lang, #usemap, #longdesc {width:200px;}

View File

@ -1 +0,0 @@
(function(){tinymce.create("tinymce.plugins.AdvancedImagePlugin",{init:function(a,b){a.addCommand("mceAdvImage",function(){if(a.dom.getAttrib(a.selection.getNode(),"class","").indexOf("mceItem")!=-1){return}a.windowManager.open({file:b+"/image.htm",width:480+parseInt(a.getLang("advimage.delta_width",0)),height:385+parseInt(a.getLang("advimage.delta_height",0)),inline:1},{plugin_url:b})});a.addButton("image",{title:"advimage.image_desc",cmd:"mceAdvImage"})},getInfo:function(){return{longname:"Advanced image",author:"Moxiecode Systems AB",authorurl:"http://tinymce.moxiecode.com",infourl:"http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/advimage",version:tinymce.majorVersion+"."+tinymce.minorVersion}}});tinymce.PluginManager.add("advimage",tinymce.plugins.AdvancedImagePlugin)})();

View File

@ -1,50 +0,0 @@
/**
* editor_plugin_src.js
*
* Copyright 2009, Moxiecode Systems AB
* Released under LGPL License.
*
* License: http://tinymce.moxiecode.com/license
* Contributing: http://tinymce.moxiecode.com/contributing
*/
(function() {
tinymce.create('tinymce.plugins.AdvancedImagePlugin', {
init : function(ed, url) {
// Register commands
ed.addCommand('mceAdvImage', function() {
// Internal image object like a flash placeholder
if (ed.dom.getAttrib(ed.selection.getNode(), 'class', '').indexOf('mceItem') != -1)
return;
ed.windowManager.open({
file : url + '/image.htm',
width : 480 + parseInt(ed.getLang('advimage.delta_width', 0)),
height : 385 + parseInt(ed.getLang('advimage.delta_height', 0)),
inline : 1
}, {
plugin_url : url
});
});
// Register buttons
ed.addButton('image', {
title : 'advimage.image_desc',
cmd : 'mceAdvImage'
});
},
getInfo : function() {
return {
longname : 'Advanced image',
author : 'Moxiecode Systems AB',
authorurl : 'http://tinymce.moxiecode.com',
infourl : 'http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/advimage',
version : tinymce.majorVersion + "." + tinymce.minorVersion
};
}
});
// Register plugin
tinymce.PluginManager.add('advimage', tinymce.plugins.AdvancedImagePlugin);
})();

View File

@ -1,235 +0,0 @@
<!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>{#advimage_dlg.dialog_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/image.js"></script>
<link href="css/advimage.css" rel="stylesheet" type="text/css" />
</head>
<body id="advimage" style="display: none" role="application" aria-labelledby="app_title">
<span id="app_title" style="display:none">{#advimage_dlg.dialog_title}</span>
<form onsubmit="ImageDialog.insert();return false;" action="#">
<div class="tabs">
<ul>
<li id="general_tab" class="current" aria-controls="general_panel"><span><a href="javascript:mcTabs.displayTab('general_tab','general_panel');" onmousedown="return false;">{#advimage_dlg.tab_general}</a></span></li>
<li id="appearance_tab" aria-controls="appearance_panel"><span><a href="javascript:mcTabs.displayTab('appearance_tab','appearance_panel');" onmousedown="return false;">{#advimage_dlg.tab_appearance}</a></span></li>
<li id="advanced_tab" aria-controls="advanced_panel"><span><a href="javascript:mcTabs.displayTab('advanced_tab','advanced_panel');" onmousedown="return false;">{#advimage_dlg.tab_advanced}</a></span></li>
</ul>
</div>
<div class="panel_wrapper">
<div id="general_panel" class="panel current">
<fieldset>
<legend>{#advimage_dlg.general}</legend>
<table role="presentation" class="properties">
<tr>
<td class="column1"><label id="srclabel" for="src">{#advimage_dlg.src}</label></td>
<td colspan="2"><table role="presentation" border="0" cellspacing="0" cellpadding="0">
<tr>
<td><input name="src" type="text" id="src" value="" class="mceFocus" onchange="ImageDialog.showPreviewImage(this.value);" aria-required="true" /></td>
<td id="srcbrowsercontainer">&nbsp;</td>
</tr>
</table></td>
</tr>
<tr>
<td><label for="src_list">{#advimage_dlg.image_list}</label></td>
<td><select id="src_list" name="src_list" onchange="document.getElementById('src').value=this.options[this.selectedIndex].value;document.getElementById('alt').value=this.options[this.selectedIndex].text;document.getElementById('title').value=this.options[this.selectedIndex].text;ImageDialog.showPreviewImage(this.options[this.selectedIndex].value);"><option value=""></option></select></td>
</tr>
<tr>
<td class="column1"><label id="altlabel" for="alt">{#advimage_dlg.alt}</label></td>
<td colspan="2"><input id="alt" name="alt" type="text" value="" /></td>
</tr>
<tr>
<td class="column1"><label id="titlelabel" for="title">{#advimage_dlg.title}</label></td>
<td colspan="2"><input id="title" name="title" type="text" value="" /></td>
</tr>
</table>
</fieldset>
<fieldset>
<legend>{#advimage_dlg.preview}</legend>
<div id="prev"></div>
</fieldset>
</div>
<div id="appearance_panel" class="panel">
<fieldset>
<legend>{#advimage_dlg.tab_appearance}</legend>
<table role="presentation" border="0" cellpadding="4" cellspacing="0">
<tr>
<td class="column1"><label id="alignlabel" for="align">{#advimage_dlg.align}</label></td>
<td><select id="align" name="align" onchange="ImageDialog.updateStyle('align');ImageDialog.changeAppearance();">
<option value="">{#not_set}</option>
<option value="baseline">{#advimage_dlg.align_baseline}</option>
<option value="top">{#advimage_dlg.align_top}</option>
<option value="middle">{#advimage_dlg.align_middle}</option>
<option value="bottom">{#advimage_dlg.align_bottom}</option>
<option value="text-top">{#advimage_dlg.align_texttop}</option>
<option value="text-bottom">{#advimage_dlg.align_textbottom}</option>
<option value="left">{#advimage_dlg.align_left}</option>
<option value="right">{#advimage_dlg.align_right}</option>
</select>
</td>
<td rowspan="6" valign="top">
<div class="alignPreview">
<img id="alignSampleImg" src="img/sample.gif" alt="{#advimage_dlg.example_img}" />
Lorem ipsum, Dolor sit amet, consectetuer adipiscing loreum ipsum edipiscing elit, sed diam
nonummy nibh euismod tincidunt ut laoreet dolore magna aliquam erat volutpat.Loreum ipsum
edipiscing elit, sed diam nonummy nibh euismod tincidunt ut laoreet dolore magna aliquam
erat volutpat.
</div>
</td>
</tr>
<tr role="group" aria-labelledby="widthlabel">
<td class="column1"><label id="widthlabel" for="width">{#advimage_dlg.dimensions}</label></td>
<td class="nowrap">
<span style="display:none" id="width_voiceLabel">{#advimage_dlg.width}</span>
<input name="width" type="text" id="width" value="" size="5" maxlength="5" class="size" onchange="ImageDialog.changeHeight();" aria-labelledby="width_voiceLabel" /> x
<span style="display:none" id="height_voiceLabel">{#advimage_dlg.height}</span>
<input name="height" type="text" id="height" value="" size="5" maxlength="5" class="size" onchange="ImageDialog.changeWidth();" aria-labelledby="height_voiceLabel" /> px
</td>
</tr>
<tr>
<td>&nbsp;</td>
<td><table role="presentation" border="0" cellpadding="0" cellspacing="0">
<tr>
<td><input id="constrain" type="checkbox" name="constrain" class="checkbox" /></td>
<td><label id="constrainlabel" for="constrain">{#advimage_dlg.constrain_proportions}</label></td>
</tr>
</table></td>
</tr>
<tr>
<td class="column1"><label id="vspacelabel" for="vspace">{#advimage_dlg.vspace}</label></td>
<td><input name="vspace" type="text" id="vspace" value="" size="3" maxlength="3" class="number" onchange="ImageDialog.updateStyle('vspace');ImageDialog.changeAppearance();" onblur="ImageDialog.updateStyle('vspace');ImageDialog.changeAppearance();" />
</td>
</tr>
<tr>
<td class="column1"><label id="hspacelabel" for="hspace">{#advimage_dlg.hspace}</label></td>
<td><input name="hspace" type="text" id="hspace" value="" size="3" maxlength="3" class="number" onchange="ImageDialog.updateStyle('hspace');ImageDialog.changeAppearance();" onblur="ImageDialog.updateStyle('hspace');ImageDialog.changeAppearance();" /></td>
</tr>
<tr>
<td class="column1"><label id="borderlabel" for="border">{#advimage_dlg.border}</label></td>
<td><input id="border" name="border" type="text" value="" size="3" maxlength="3" class="number" onchange="ImageDialog.updateStyle('border');ImageDialog.changeAppearance();" onblur="ImageDialog.updateStyle('border');ImageDialog.changeAppearance();" /></td>
</tr>
<tr>
<td><label for="class_list">{#class_name}</label></td>
<td colspan="2"><select id="class_list" name="class_list" class="mceEditableSelect"><option value=""></option></select></td>
</tr>
<tr>
<td class="column1"><label id="stylelabel" for="style">{#advimage_dlg.style}</label></td>
<td colspan="2"><input id="style" name="style" type="text" value="" onchange="ImageDialog.changeAppearance();" /></td>
</tr>
<!-- <tr>
<td class="column1"><label id="classeslabel" for="classes">{#advimage_dlg.classes}</label></td>
<td colspan="2"><input id="classes" name="classes" type="text" value="" onchange="selectByValue(this.form,'classlist',this.value,true);" /></td>
</tr> -->
</table>
</fieldset>
</div>
<div id="advanced_panel" class="panel">
<fieldset>
<legend>{#advimage_dlg.swap_image}</legend>
<input type="checkbox" id="onmousemovecheck" name="onmousemovecheck" class="checkbox" onclick="ImageDialog.setSwapImage(this.checked);" aria-controls="onmouseoversrc onmouseoutsrc" />
<label id="onmousemovechecklabel" for="onmousemovecheck">{#advimage_dlg.alt_image}</label>
<table role="presentation" border="0" cellpadding="4" cellspacing="0" width="100%">
<tr>
<td class="column1"><label id="onmouseoversrclabel" for="onmouseoversrc">{#advimage_dlg.mouseover}</label></td>
<td><table role="presentation" border="0" cellspacing="0" cellpadding="0">
<tr>
<td><input id="onmouseoversrc" name="onmouseoversrc" type="text" value="" /></td>
<td id="onmouseoversrccontainer">&nbsp;</td>
</tr>
</table></td>
</tr>
<tr>
<td><label for="over_list">{#advimage_dlg.image_list}</label></td>
<td><select id="over_list" name="over_list" onchange="document.getElementById('onmouseoversrc').value=this.options[this.selectedIndex].value;"><option value=""></option></select></td>
</tr>
<tr>
<td class="column1"><label id="onmouseoutsrclabel" for="onmouseoutsrc">{#advimage_dlg.mouseout}</label></td>
<td class="column2"><table role="presentation" border="0" cellspacing="0" cellpadding="0">
<tr>
<td><input id="onmouseoutsrc" name="onmouseoutsrc" type="text" value="" /></td>
<td id="onmouseoutsrccontainer">&nbsp;</td>
</tr>
</table></td>
</tr>
<tr>
<td><label for="out_list">{#advimage_dlg.image_list}</label></td>
<td><select id="out_list" name="out_list" onchange="document.getElementById('onmouseoutsrc').value=this.options[this.selectedIndex].value;"><option value=""></option></select></td>
</tr>
</table>
</fieldset>
<fieldset>
<legend>{#advimage_dlg.misc}</legend>
<table role="presentation" border="0" cellpadding="4" cellspacing="0">
<tr>
<td class="column1"><label id="idlabel" for="id">{#advimage_dlg.id}</label></td>
<td><input id="id" name="id" type="text" value="" /></td>
</tr>
<tr>
<td class="column1"><label id="dirlabel" for="dir">{#advimage_dlg.langdir}</label></td>
<td>
<select id="dir" name="dir" onchange="ImageDialog.changeAppearance();">
<option value="">{#not_set}</option>
<option value="ltr">{#advimage_dlg.ltr}</option>
<option value="rtl">{#advimage_dlg.rtl}</option>
</select>
</td>
</tr>
<tr>
<td class="column1"><label id="langlabel" for="lang">{#advimage_dlg.langcode}</label></td>
<td>
<input id="lang" name="lang" type="text" value="" />
</td>
</tr>
<tr>
<td class="column1"><label id="usemaplabel" for="usemap">{#advimage_dlg.map}</label></td>
<td>
<input id="usemap" name="usemap" type="text" value="" />
</td>
</tr>
<tr>
<td class="column1"><label id="longdesclabel" for="longdesc">{#advimage_dlg.long_desc}</label></td>
<td><table role="presentation" border="0" cellspacing="0" cellpadding="0">
<tr>
<td><input id="longdesc" name="longdesc" type="text" value="" /></td>
<td id="longdesccontainer">&nbsp;</td>
</tr>
</table></td>
</tr>
</table>
</fieldset>
</div>
</div>
<div class="mceActionPanel">
<input type="submit" id="insert" name="insert" value="{#insert}" />
<input type="button" id="cancel" name="cancel" value="{#cancel}" onclick="tinyMCEPopup.close();" />
</div>
</form>
</body>
</html>

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.6 KiB

View File

@ -1,464 +0,0 @@
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(ed) {
var f = document.forms[0], nl = f.elements, ed = tinyMCEPopup.editor, dom = ed.dom, n = ed.selection.getNode(), fl = tinyMCEPopup.getParam('external_image_list', 'tinyMCEImageList');
tinyMCEPopup.resizeToInnerSize();
this.fillClassList('class_list');
this.fillFileList('src_list', fl);
this.fillFileList('over_list', fl);
this.fillFileList('out_list', fl);
TinyMCE_EditableSelects.init();
if (n.nodeName == 'IMG') {
nl.src.value = dom.getAttrib(n, 'src');
nl.width.value = dom.getAttrib(n, 'width');
nl.height.value = dom.getAttrib(n, 'height');
nl.alt.value = dom.getAttrib(n, 'alt');
nl.title.value = dom.getAttrib(n, 'title');
nl.vspace.value = this.getAttrib(n, 'vspace');
nl.hspace.value = this.getAttrib(n, 'hspace');
nl.border.value = this.getAttrib(n, 'border');
selectByValue(f, 'align', this.getAttrib(n, 'align'));
selectByValue(f, 'class_list', dom.getAttrib(n, 'class'), true, true);
nl.style.value = dom.getAttrib(n, 'style');
nl.id.value = dom.getAttrib(n, 'id');
nl.dir.value = dom.getAttrib(n, 'dir');
nl.lang.value = dom.getAttrib(n, 'lang');
nl.usemap.value = dom.getAttrib(n, 'usemap');
nl.longdesc.value = dom.getAttrib(n, 'longdesc');
nl.insert.value = ed.getLang('update');
if (/^\s*this.src\s*=\s*\'([^\']+)\';?\s*$/.test(dom.getAttrib(n, 'onmouseover')))
nl.onmouseoversrc.value = dom.getAttrib(n, 'onmouseover').replace(/^\s*this.src\s*=\s*\'([^\']+)\';?\s*$/, '$1');
if (/^\s*this.src\s*=\s*\'([^\']+)\';?\s*$/.test(dom.getAttrib(n, 'onmouseout')))
nl.onmouseoutsrc.value = dom.getAttrib(n, 'onmouseout').replace(/^\s*this.src\s*=\s*\'([^\']+)\';?\s*$/, '$1');
if (ed.settings.inline_styles) {
// Move attribs to styles
if (dom.getAttrib(n, 'align'))
this.updateStyle('align');
if (dom.getAttrib(n, 'hspace'))
this.updateStyle('hspace');
if (dom.getAttrib(n, 'border'))
this.updateStyle('border');
if (dom.getAttrib(n, 'vspace'))
this.updateStyle('vspace');
}
}
// Setup browse button
document.getElementById('srcbrowsercontainer').innerHTML = getBrowserHTML('srcbrowser','src','image','theme_advanced_image');
if (isVisible('srcbrowser'))
document.getElementById('src').style.width = '260px';
// Setup browse button
document.getElementById('onmouseoversrccontainer').innerHTML = getBrowserHTML('overbrowser','onmouseoversrc','image','theme_advanced_image');
if (isVisible('overbrowser'))
document.getElementById('onmouseoversrc').style.width = '260px';
// Setup browse button
document.getElementById('onmouseoutsrccontainer').innerHTML = getBrowserHTML('outbrowser','onmouseoutsrc','image','theme_advanced_image');
if (isVisible('outbrowser'))
document.getElementById('onmouseoutsrc').style.width = '260px';
// If option enabled default contrain proportions to checked
if (ed.getParam("advimage_constrain_proportions", true))
f.constrain.checked = true;
// Check swap image if valid data
if (nl.onmouseoversrc.value || nl.onmouseoutsrc.value)
this.setSwapImage(true);
else
this.setSwapImage(false);
this.changeAppearance();
this.showPreviewImage(nl.src.value, 1);
},
insert : function(file, title) {
var ed = tinyMCEPopup.editor, t = this, f = document.forms[0];
if (f.src.value === '') {
if (ed.selection.getNode().nodeName == 'IMG') {
ed.dom.remove(ed.selection.getNode());
ed.execCommand('mceRepaint');
}
tinyMCEPopup.close();
return;
}
if (tinyMCEPopup.getParam("accessibility_warnings", 1)) {
if (!f.alt.value) {
tinyMCEPopup.confirm(tinyMCEPopup.getLang('advimage_dlg.missing_alt'), function(s) {
if (s)
t.insertAndClose();
});
return;
}
}
t.insertAndClose();
},
insertAndClose : function() {
var ed = tinyMCEPopup.editor, f = document.forms[0], nl = f.elements, v, args = {}, el;
tinyMCEPopup.restoreSelection();
// Fixes crash in Safari
if (tinymce.isWebKit)
ed.getWin().focus();
if (!ed.settings.inline_styles) {
args = {
vspace : nl.vspace.value,
hspace : nl.hspace.value,
border : nl.border.value,
align : getSelectValue(f, 'align')
};
} else {
// Remove deprecated values
args = {
vspace : '',
hspace : '',
border : '',
align : ''
};
}
tinymce.extend(args, {
src : nl.src.value.replace(/ /g, '%20'),
width : nl.width.value,
height : nl.height.value,
alt : nl.alt.value,
title : nl.title.value,
'class' : getSelectValue(f, 'class_list'),
style : nl.style.value,
id : nl.id.value,
dir : nl.dir.value,
lang : nl.lang.value,
usemap : nl.usemap.value,
longdesc : nl.longdesc.value
});
args.onmouseover = args.onmouseout = '';
if (f.onmousemovecheck.checked) {
if (nl.onmouseoversrc.value)
args.onmouseover = "this.src='" + nl.onmouseoversrc.value + "';";
if (nl.onmouseoutsrc.value)
args.onmouseout = "this.src='" + nl.onmouseoutsrc.value + "';";
}
el = ed.selection.getNode();
if (el && el.nodeName == 'IMG') {
ed.dom.setAttribs(el, args);
} else {
tinymce.each(args, function(value, name) {
if (value === "") {
delete args[name];
}
});
ed.execCommand('mceInsertContent', false, tinyMCEPopup.editor.dom.createHTML('img', args), {skip_undo : 1});
ed.undoManager.add();
}
tinyMCEPopup.editor.execCommand('mceRepaint');
tinyMCEPopup.editor.focus();
tinyMCEPopup.close();
},
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 '';
},
setSwapImage : function(st) {
var f = document.forms[0];
f.onmousemovecheck.checked = st;
setBrowserDisabled('overbrowser', !st);
setBrowserDisabled('outbrowser', !st);
if (f.over_list)
f.over_list.disabled = !st;
if (f.out_list)
f.out_list.disabled = !st;
f.onmouseoversrc.disabled = !st;
f.onmouseoutsrc.disabled = !st;
},
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.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'));
},
fillFileList : function(id, l) {
var dom = tinyMCEPopup.dom, lst = dom.get(id), v, cl;
l = typeof(l) === 'function' ? l() : window[l];
lst.options.length = 0;
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'));
},
resetImageData : function() {
var f = document.forms[0];
f.elements.width.value = f.elements.height.value = '';
},
updateImageData : function(img, st) {
var f = document.forms[0];
if (!st) {
f.elements.width.value = img.width;
f.elements.height.value = img.height;
}
this.preloadImg = img;
},
changeAppearance : function() {
var ed = tinyMCEPopup.editor, f = document.forms[0], img = document.getElementById('alignSampleImg');
if (img) {
if (ed.getParam('inline_styles')) {
ed.dom.setAttrib(img, 'style', f.style.value);
} else {
img.align = f.align.value;
img.border = f.border.value;
img.hspace = f.hspace.value;
img.vspace = f.vspace.value;
}
}
},
changeHeight : function() {
var f = document.forms[0], tp, t = this;
if (!f.constrain.checked || !t.preloadImg) {
return;
}
if (f.width.value == "" || f.height.value == "")
return;
tp = (parseInt(f.width.value) / parseInt(t.preloadImg.width)) * t.preloadImg.height;
f.height.value = tp.toFixed(0);
},
changeWidth : function() {
var f = document.forms[0], tp, t = this;
if (!f.constrain.checked || !t.preloadImg) {
return;
}
if (f.width.value == "" || f.height.value == "")
return;
tp = (parseInt(f.height.value) / parseInt(t.preloadImg.height)) * t.preloadImg.width;
f.width.value = tp.toFixed(0);
},
updateStyle : function(ty) {
var dom = tinyMCEPopup.dom, b, bStyle, bColor, v, isIE = tinymce.isIE, f = document.forms[0], img = dom.create('img', {style : dom.get('style').value});
if (tinyMCEPopup.editor.settings.inline_styles) {
// Handle align
if (ty == 'align') {
dom.setStyle(img, 'float', '');
dom.setStyle(img, 'vertical-align', '');
v = getSelectValue(f, 'align');
if (v) {
if (v == 'left' || v == 'right')
dom.setStyle(img, 'float', v);
else
img.style.verticalAlign = v;
}
}
// Handle border
if (ty == 'border') {
b = img.style.border ? img.style.border.split(' ') : [];
bStyle = dom.getStyle(img, 'border-style');
bColor = dom.getStyle(img, 'border-color');
dom.setStyle(img, 'border', '');
v = f.border.value;
if (v || v == '0') {
if (v == '0')
img.style.border = isIE ? '0' : '0 none none';
else {
var isOldIE = tinymce.isIE && (!document.documentMode || document.documentMode < 9);
if (b.length == 3 && b[isOldIE ? 2 : 1])
bStyle = b[isOldIE ? 2 : 1];
else if (!bStyle || bStyle == 'none')
bStyle = 'solid';
if (b.length == 3 && b[isIE ? 0 : 2])
bColor = b[isOldIE ? 0 : 2];
else if (!bColor || bColor == 'none')
bColor = 'black';
img.style.border = v + 'px ' + bStyle + ' ' + bColor;
}
}
}
// Handle hspace
if (ty == 'hspace') {
dom.setStyle(img, 'marginLeft', '');
dom.setStyle(img, 'marginRight', '');
v = f.hspace.value;
if (v) {
img.style.marginLeft = v + 'px';
img.style.marginRight = v + 'px';
}
}
// Handle vspace
if (ty == 'vspace') {
dom.setStyle(img, 'marginTop', '');
dom.setStyle(img, 'marginBottom', '');
v = f.vspace.value;
if (v) {
img.style.marginTop = v + 'px';
img.style.marginBottom = v + 'px';
}
}
// Merge
dom.get('style').value = dom.serializeStyle(dom.parseStyle(img.style.cssText), 'img');
}
},
changeMouseMove : function() {
},
showPreviewImage : function(u, st) {
if (!u) {
tinyMCEPopup.dom.setHTML('prev', '');
return;
}
if (!st && tinyMCEPopup.getParam("advimage_update_dimensions_onchange", true))
this.resetImageData();
u = tinyMCEPopup.editor.documentBaseURI.toAbsolute(u);
if (!st)
tinyMCEPopup.dom.setHTML('prev', '<img id="previewImg" src="' + u + '" border="0" onload="ImageDialog.updateImageData(this);" onerror="ImageDialog.resetImageData();" />');
else
tinyMCEPopup.dom.setHTML('prev', '<img id="previewImg" src="' + u + '" border="0" onload="ImageDialog.updateImageData(this, 1);" />');
}
};
ImageDialog.preInit();
tinyMCEPopup.onInit.add(ImageDialog.init, ImageDialog);

View File

@ -1 +0,0 @@
tinyMCE.addI18n('en.advimage_dlg',{"image_list":"Image List","align_right":"Right","align_left":"Left","align_textbottom":"Text Bottom","align_texttop":"Text Top","align_bottom":"Bottom","align_middle":"Middle","align_top":"Top","align_baseline":"Baseline",align:"Alignment",hspace:"Horizontal Space",vspace:"Vertical Space",dimensions:"Dimensions",border:"Border",list:"Image List",alt:"Image Description",src:"Image URL","dialog_title":"Insert/Edit Image","missing_alt":"Are you sure you want to continue without including an Image Description? Without it the image may not be accessible to some users with disabilities, or to those using a text browser, or browsing the Web with images turned off.","example_img":"Appearance Preview Image",misc:"Miscellaneous",mouseout:"For Mouse Out",mouseover:"For Mouse Over","alt_image":"Alternative Image","swap_image":"Swap Image",map:"Image Map",id:"ID",rtl:"Right to Left",ltr:"Left to Right",classes:"Classes",style:"Style","long_desc":"Long Description Link",langcode:"Language Code",langdir:"Language Direction","constrain_proportions":"Constrain Proportions",preview:"Preview",title:"Title",general:"General","tab_advanced":"Advanced","tab_appearance":"Appearance","tab_general":"General",width:"Width",height:"Height"});

View File

@ -1,8 +0,0 @@
.mceLinkList, .mceAnchorList, #targetlist {width:280px;}
.mceActionPanel {margin-top:7px;}
.panel_wrapper div.current {height:320px;}
#classlist, #title, #href {width:280px;}
#popupurl, #popupname {width:200px;}
#popupwidth, #popupheight, #popupleft, #popuptop {width:30px;vertical-align:middle;text-align:center;}
#id, #style, #classes, #target, #dir, #hreflang, #lang, #charset, #type, #rel, #rev, #tabindex, #accesskey {width:200px;}
#events_panel input {width:200px;}

View File

@ -1 +0,0 @@
(function(){tinymce.create("tinymce.plugins.AdvancedLinkPlugin",{init:function(a,b){this.editor=a;a.addCommand("mceAdvLink",function(){var c=a.selection;if(c.isCollapsed()&&!a.dom.getParent(c.getNode(),"A")){return}a.windowManager.open({file:b+"/link.htm",width:480+parseInt(a.getLang("advlink.delta_width",0)),height:400+parseInt(a.getLang("advlink.delta_height",0)),inline:1},{plugin_url:b})});a.addButton("link",{title:"advlink.link_desc",cmd:"mceAdvLink"});a.addShortcut("ctrl+k","advlink.advlink_desc","mceAdvLink");a.onNodeChange.add(function(d,c,f,e){c.setDisabled("link",e&&f.nodeName!="A");c.setActive("link",f.nodeName=="A"&&!f.name)})},getInfo:function(){return{longname:"Advanced link",author:"Moxiecode Systems AB",authorurl:"http://tinymce.moxiecode.com",infourl:"http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/advlink",version:tinymce.majorVersion+"."+tinymce.minorVersion}}});tinymce.PluginManager.add("advlink",tinymce.plugins.AdvancedLinkPlugin)})();

View File

@ -1,61 +0,0 @@
/**
* editor_plugin_src.js
*
* Copyright 2009, Moxiecode Systems AB
* Released under LGPL License.
*
* License: http://tinymce.moxiecode.com/license
* Contributing: http://tinymce.moxiecode.com/contributing
*/
(function() {
tinymce.create('tinymce.plugins.AdvancedLinkPlugin', {
init : function(ed, url) {
this.editor = ed;
// Register commands
ed.addCommand('mceAdvLink', function() {
var se = ed.selection;
// No selection and not in link
if (se.isCollapsed() && !ed.dom.getParent(se.getNode(), 'A'))
return;
ed.windowManager.open({
file : url + '/link.htm',
width : 480 + parseInt(ed.getLang('advlink.delta_width', 0)),
height : 400 + parseInt(ed.getLang('advlink.delta_height', 0)),
inline : 1
}, {
plugin_url : url
});
});
// Register buttons
ed.addButton('link', {
title : 'advlink.link_desc',
cmd : 'mceAdvLink'
});
ed.addShortcut('ctrl+k', 'advlink.advlink_desc', 'mceAdvLink');
ed.onNodeChange.add(function(ed, cm, n, co) {
cm.setDisabled('link', co && n.nodeName != 'A');
cm.setActive('link', n.nodeName == 'A' && !n.name);
});
},
getInfo : function() {
return {
longname : 'Advanced link',
author : 'Moxiecode Systems AB',
authorurl : 'http://tinymce.moxiecode.com',
infourl : 'http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/advlink',
version : tinymce.majorVersion + "." + tinymce.minorVersion
};
}
});
// Register plugin
tinymce.PluginManager.add('advlink', tinymce.plugins.AdvancedLinkPlugin);
})();

View File

@ -1,543 +0,0 @@
/* Functions for the advlink plugin popup */
tinyMCEPopup.requireLangPack();
var templates = {
"window.open" : "window.open('${url}','${target}','${options}')"
};
function preinit() {
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>');
}
function changeClass() {
var f = document.forms[0];
f.classes.value = getSelectValue(f, 'classlist');
}
function init() {
tinyMCEPopup.resizeToInnerSize();
var formObj = document.forms[0];
var inst = tinyMCEPopup.editor;
var elm = inst.selection.getNode();
var action = "insert";
var html;
document.getElementById('hrefbrowsercontainer').innerHTML = getBrowserHTML('hrefbrowser','href','file','advlink');
document.getElementById('popupurlbrowsercontainer').innerHTML = getBrowserHTML('popupurlbrowser','popupurl','file','advlink');
document.getElementById('targetlistcontainer').innerHTML = getTargetListHTML('targetlist','target');
// Link list
html = getLinkListHTML('linklisthref','href');
if (html == "")
document.getElementById("linklisthrefrow").style.display = 'none';
else
document.getElementById("linklisthrefcontainer").innerHTML = html;
// Anchor list
html = getAnchorListHTML('anchorlist','href');
if (html == "")
document.getElementById("anchorlistrow").style.display = 'none';
else
document.getElementById("anchorlistcontainer").innerHTML = html;
// Resize some elements
if (isVisible('hrefbrowser'))
document.getElementById('href').style.width = '260px';
if (isVisible('popupurlbrowser'))
document.getElementById('popupurl').style.width = '180px';
elm = inst.dom.getParent(elm, "A");
if (elm == null) {
var prospect = inst.dom.create("p", null, inst.selection.getContent());
if (prospect.childNodes.length === 1) {
elm = prospect.firstChild;
}
}
if (elm != null && elm.nodeName == "A")
action = "update";
formObj.insert.value = tinyMCEPopup.getLang(action, 'Insert', true);
setPopupControlsDisabled(true);
if (action == "update") {
var href = inst.dom.getAttrib(elm, 'href');
var onclick = inst.dom.getAttrib(elm, 'onclick');
var linkTarget = inst.dom.getAttrib(elm, 'target') ? inst.dom.getAttrib(elm, 'target') : "_self";
// Setup form data
setFormValue('href', href);
setFormValue('title', inst.dom.getAttrib(elm, 'title'));
setFormValue('id', inst.dom.getAttrib(elm, 'id'));
setFormValue('style', inst.dom.getAttrib(elm, "style"));
setFormValue('rel', inst.dom.getAttrib(elm, 'rel'));
setFormValue('rev', inst.dom.getAttrib(elm, 'rev'));
setFormValue('charset', inst.dom.getAttrib(elm, 'charset'));
setFormValue('hreflang', inst.dom.getAttrib(elm, 'hreflang'));
setFormValue('dir', inst.dom.getAttrib(elm, 'dir'));
setFormValue('lang', inst.dom.getAttrib(elm, 'lang'));
setFormValue('tabindex', inst.dom.getAttrib(elm, 'tabindex', typeof(elm.tabindex) != "undefined" ? elm.tabindex : ""));
setFormValue('accesskey', inst.dom.getAttrib(elm, 'accesskey', typeof(elm.accesskey) != "undefined" ? elm.accesskey : ""));
setFormValue('type', inst.dom.getAttrib(elm, 'type'));
setFormValue('onfocus', inst.dom.getAttrib(elm, 'onfocus'));
setFormValue('onblur', inst.dom.getAttrib(elm, 'onblur'));
setFormValue('onclick', onclick);
setFormValue('ondblclick', inst.dom.getAttrib(elm, 'ondblclick'));
setFormValue('onmousedown', inst.dom.getAttrib(elm, 'onmousedown'));
setFormValue('onmouseup', inst.dom.getAttrib(elm, 'onmouseup'));
setFormValue('onmouseover', inst.dom.getAttrib(elm, 'onmouseover'));
setFormValue('onmousemove', inst.dom.getAttrib(elm, 'onmousemove'));
setFormValue('onmouseout', inst.dom.getAttrib(elm, 'onmouseout'));
setFormValue('onkeypress', inst.dom.getAttrib(elm, 'onkeypress'));
setFormValue('onkeydown', inst.dom.getAttrib(elm, 'onkeydown'));
setFormValue('onkeyup', inst.dom.getAttrib(elm, 'onkeyup'));
setFormValue('target', linkTarget);
setFormValue('classes', inst.dom.getAttrib(elm, 'class'));
// Parse onclick data
if (onclick != null && onclick.indexOf('window.open') != -1)
parseWindowOpen(onclick);
else
parseFunction(onclick);
// Select by the values
selectByValue(formObj, 'dir', inst.dom.getAttrib(elm, 'dir'));
selectByValue(formObj, 'rel', inst.dom.getAttrib(elm, 'rel'));
selectByValue(formObj, 'rev', inst.dom.getAttrib(elm, 'rev'));
selectByValue(formObj, 'linklisthref', href);
if (href.charAt(0) == '#')
selectByValue(formObj, 'anchorlist', href);
addClassesToList('classlist', 'advlink_styles');
selectByValue(formObj, 'classlist', inst.dom.getAttrib(elm, 'class'), true);
selectByValue(formObj, 'targetlist', linkTarget, true);
} else
addClassesToList('classlist', 'advlink_styles');
}
function checkPrefix(n) {
if (n.value && Validator.isEmail(n) && !/^\s*mailto:/i.test(n.value) && confirm(tinyMCEPopup.getLang('advlink_dlg.is_email')))
n.value = 'mailto:' + n.value;
if (/^\s*www\./i.test(n.value) && confirm(tinyMCEPopup.getLang('advlink_dlg.is_external')))
n.value = 'http://' + n.value;
}
function setFormValue(name, value) {
document.forms[0].elements[name].value = value;
}
function parseWindowOpen(onclick) {
var formObj = document.forms[0];
// Preprocess center code
if (onclick.indexOf('return false;') != -1) {
formObj.popupreturn.checked = true;
onclick = onclick.replace('return false;', '');
} else
formObj.popupreturn.checked = false;
var onClickData = parseLink(onclick);
if (onClickData != null) {
formObj.ispopup.checked = true;
setPopupControlsDisabled(false);
var onClickWindowOptions = parseOptions(onClickData['options']);
var url = onClickData['url'];
formObj.popupname.value = onClickData['target'];
formObj.popupurl.value = url;
formObj.popupwidth.value = getOption(onClickWindowOptions, 'width');
formObj.popupheight.value = getOption(onClickWindowOptions, 'height');
formObj.popupleft.value = getOption(onClickWindowOptions, 'left');
formObj.popuptop.value = getOption(onClickWindowOptions, 'top');
if (formObj.popupleft.value.indexOf('screen') != -1)
formObj.popupleft.value = "c";
if (formObj.popuptop.value.indexOf('screen') != -1)
formObj.popuptop.value = "c";
formObj.popuplocation.checked = getOption(onClickWindowOptions, 'location') == "yes";
formObj.popupscrollbars.checked = getOption(onClickWindowOptions, 'scrollbars') == "yes";
formObj.popupmenubar.checked = getOption(onClickWindowOptions, 'menubar') == "yes";
formObj.popupresizable.checked = getOption(onClickWindowOptions, 'resizable') == "yes";
formObj.popuptoolbar.checked = getOption(onClickWindowOptions, 'toolbar') == "yes";
formObj.popupstatus.checked = getOption(onClickWindowOptions, 'status') == "yes";
formObj.popupdependent.checked = getOption(onClickWindowOptions, 'dependent') == "yes";
buildOnClick();
}
}
function parseFunction(onclick) {
var formObj = document.forms[0];
var onClickData = parseLink(onclick);
// TODO: Add stuff here
}
function getOption(opts, name) {
return typeof(opts[name]) == "undefined" ? "" : opts[name];
}
function setPopupControlsDisabled(state) {
var formObj = document.forms[0];
formObj.popupname.disabled = state;
formObj.popupurl.disabled = state;
formObj.popupwidth.disabled = state;
formObj.popupheight.disabled = state;
formObj.popupleft.disabled = state;
formObj.popuptop.disabled = state;
formObj.popuplocation.disabled = state;
formObj.popupscrollbars.disabled = state;
formObj.popupmenubar.disabled = state;
formObj.popupresizable.disabled = state;
formObj.popuptoolbar.disabled = state;
formObj.popupstatus.disabled = state;
formObj.popupreturn.disabled = state;
formObj.popupdependent.disabled = state;
setBrowserDisabled('popupurlbrowser', state);
}
function parseLink(link) {
link = link.replace(new RegExp('&#39;', 'g'), "'");
var fnName = link.replace(new RegExp("\\s*([A-Za-z0-9\.]*)\\s*\\(.*", "gi"), "$1");
// Is function name a template function
var template = templates[fnName];
if (template) {
// Build regexp
var variableNames = template.match(new RegExp("'?\\$\\{[A-Za-z0-9\.]*\\}'?", "gi"));
var regExp = "\\s*[A-Za-z0-9\.]*\\s*\\(";
var replaceStr = "";
for (var i=0; i<variableNames.length; i++) {
// Is string value
if (variableNames[i].indexOf("'${") != -1)
regExp += "'(.*)'";
else // Number value
regExp += "([0-9]*)";
replaceStr += "$" + (i+1);
// Cleanup variable name
variableNames[i] = variableNames[i].replace(new RegExp("[^A-Za-z0-9]", "gi"), "");
if (i != variableNames.length-1) {
regExp += "\\s*,\\s*";
replaceStr += "<delim>";
} else
regExp += ".*";
}
regExp += "\\);?";
// Build variable array
var variables = [];
variables["_function"] = fnName;
var variableValues = link.replace(new RegExp(regExp, "gi"), replaceStr).split('<delim>');
for (var i=0; i<variableNames.length; i++)
variables[variableNames[i]] = variableValues[i];
return variables;
}
return null;
}
function parseOptions(opts) {
if (opts == null || opts == "")
return [];
// Cleanup the options
opts = opts.toLowerCase();
opts = opts.replace(/;/g, ",");
opts = opts.replace(/[^0-9a-z=,]/g, "");
var optionChunks = opts.split(',');
var options = [];
for (var i=0; i<optionChunks.length; i++) {
var parts = optionChunks[i].split('=');
if (parts.length == 2)
options[parts[0]] = parts[1];
}
return options;
}
function buildOnClick() {
var formObj = document.forms[0];
if (!formObj.ispopup.checked) {
formObj.onclick.value = "";
return;
}
var onclick = "window.open('";
var url = formObj.popupurl.value;
onclick += url + "','";
onclick += formObj.popupname.value + "','";
if (formObj.popuplocation.checked)
onclick += "location=yes,";
if (formObj.popupscrollbars.checked)
onclick += "scrollbars=yes,";
if (formObj.popupmenubar.checked)
onclick += "menubar=yes,";
if (formObj.popupresizable.checked)
onclick += "resizable=yes,";
if (formObj.popuptoolbar.checked)
onclick += "toolbar=yes,";
if (formObj.popupstatus.checked)
onclick += "status=yes,";
if (formObj.popupdependent.checked)
onclick += "dependent=yes,";
if (formObj.popupwidth.value != "")
onclick += "width=" + formObj.popupwidth.value + ",";
if (formObj.popupheight.value != "")
onclick += "height=" + formObj.popupheight.value + ",";
if (formObj.popupleft.value != "") {
if (formObj.popupleft.value != "c")
onclick += "left=" + formObj.popupleft.value + ",";
else
onclick += "left='+(screen.availWidth/2-" + (formObj.popupwidth.value/2) + ")+',";
}
if (formObj.popuptop.value != "") {
if (formObj.popuptop.value != "c")
onclick += "top=" + formObj.popuptop.value + ",";
else
onclick += "top='+(screen.availHeight/2-" + (formObj.popupheight.value/2) + ")+',";
}
if (onclick.charAt(onclick.length-1) == ',')
onclick = onclick.substring(0, onclick.length-1);
onclick += "');";
if (formObj.popupreturn.checked)
onclick += "return false;";
// tinyMCE.debug(onclick);
formObj.onclick.value = onclick;
if (formObj.href.value == "")
formObj.href.value = url;
}
function setAttrib(elm, attrib, value) {
var formObj = document.forms[0];
var valueElm = formObj.elements[attrib.toLowerCase()];
var dom = tinyMCEPopup.editor.dom;
if (typeof(value) == "undefined" || value == null) {
value = "";
if (valueElm)
value = valueElm.value;
}
// Clean up the style
if (attrib == 'style')
value = dom.serializeStyle(dom.parseStyle(value), 'a');
dom.setAttrib(elm, attrib, value);
}
function getAnchorListHTML(id, target) {
var ed = tinyMCEPopup.editor, nodes = ed.dom.select('a'), name, i, len, html = "";
for (i=0, len=nodes.length; i<len; i++) {
if ((name = ed.dom.getAttrib(nodes[i], "name")) != "")
html += '<option value="#' + name + '">' + name + '</option>';
if ((name = nodes[i].id) != "" && !nodes[i].href)
html += '<option value="#' + name + '">' + name + '</option>';
}
if (html == "")
return "";
html = '<select id="' + id + '" name="' + id + '" class="mceAnchorList"'
+ ' onchange="this.form.' + target + '.value=this.options[this.selectedIndex].value"'
+ '>'
+ '<option value="">---</option>'
+ html
+ '</select>';
return html;
}
function insertAction() {
var inst = tinyMCEPopup.editor;
var elm, elementArray, i;
elm = inst.selection.getNode();
checkPrefix(document.forms[0].href);
elm = inst.dom.getParent(elm, "A");
// Remove element if there is no href
if (!document.forms[0].href.value) {
i = inst.selection.getBookmark();
inst.dom.remove(elm, 1);
inst.selection.moveToBookmark(i);
tinyMCEPopup.execCommand("mceEndUndoLevel");
tinyMCEPopup.close();
return;
}
// Create new anchor elements
if (elm == null) {
inst.getDoc().execCommand("unlink", false, null);
tinyMCEPopup.execCommand("mceInsertLink", false, "#mce_temp_url#", {skip_undo : 1});
elementArray = tinymce.grep(inst.dom.select("a"), function(n) {return inst.dom.getAttrib(n, 'href') == '#mce_temp_url#';});
for (i=0; i<elementArray.length; i++)
setAllAttribs(elm = elementArray[i]);
} else
setAllAttribs(elm);
// Don't move caret if selection was image
if (elm.childNodes.length != 1 || elm.firstChild.nodeName != 'IMG') {
inst.focus();
inst.selection.select(elm);
inst.selection.collapse(0);
tinyMCEPopup.storeSelection();
}
tinyMCEPopup.execCommand("mceEndUndoLevel");
tinyMCEPopup.close();
}
function setAllAttribs(elm) {
var formObj = document.forms[0];
var href = formObj.href.value.replace(/ /g, '%20');
var target = getSelectValue(formObj, 'targetlist');
setAttrib(elm, 'href', href);
setAttrib(elm, 'title');
setAttrib(elm, 'target', target == '_self' ? '' : target);
setAttrib(elm, 'id');
setAttrib(elm, 'style');
setAttrib(elm, 'class', getSelectValue(formObj, 'classlist'));
setAttrib(elm, 'rel');
setAttrib(elm, 'rev');
setAttrib(elm, 'charset');
setAttrib(elm, 'hreflang');
setAttrib(elm, 'dir');
setAttrib(elm, 'lang');
setAttrib(elm, 'tabindex');
setAttrib(elm, 'accesskey');
setAttrib(elm, 'type');
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 getSelectValue(form_obj, field_name) {
var elm = form_obj.elements[field_name];
if (!elm || elm.options == null || elm.selectedIndex == -1)
return "";
return elm.options[elm.selectedIndex].value;
}
function getLinkListHTML(elm_id, target_form_element, onchange_func) {
if (typeof(tinyMCELinkList) == "undefined" || tinyMCELinkList.length == 0)
return "";
var html = "";
html += '<select id="' + elm_id + '" name="' + elm_id + '"';
html += ' class="mceLinkList" onchange="this.form.' + target_form_element + '.value=';
html += 'this.options[this.selectedIndex].value;';
if (typeof(onchange_func) != "undefined")
html += onchange_func + '(\'' + target_form_element + '\',this.options[this.selectedIndex].text,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>';
return html;
// tinyMCE.debug('-- image list start --', html, '-- image list end --');
}
function getTargetListHTML(elm_id, target_form_element) {
var targets = tinyMCEPopup.getParam('theme_advanced_link_targets', '').split(';');
var html = '';
html += '<select id="' + elm_id + '" name="' + elm_id + '" onchange="this.form.' + target_form_element + '.value=';
html += 'this.options[this.selectedIndex].value;">';
html += '<option value="_self">' + tinyMCEPopup.getLang('advlink_dlg.target_same') + '</option>';
html += '<option value="_blank">' + tinyMCEPopup.getLang('advlink_dlg.target_blank') + ' (_blank)</option>';
html += '<option value="_parent">' + tinyMCEPopup.getLang('advlink_dlg.target_parent') + ' (_parent)</option>';
html += '<option value="_top">' + tinyMCEPopup.getLang('advlink_dlg.target_top') + ' (_top)</option>';
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="' + key + '">' + value + ' (' + key + ')</option>';
}
html += '</select>';
return html;
}
// While loading
preinit();
tinyMCEPopup.onInit.add(init);

View File

@ -1 +0,0 @@
tinyMCE.addI18n('en.advlink_dlg',{"target_name":"Target Name",classes:"Classes",style:"Style",id:"ID","popup_position":"Position (X/Y)",langdir:"Language Direction","popup_size":"Size","popup_dependent":"Dependent (Mozilla/Firefox Only)","popup_resizable":"Make Window Resizable","popup_location":"Show Location Bar","popup_menubar":"Show Menu Bar","popup_toolbar":"Show Toolbars","popup_statusbar":"Show Status Bar","popup_scrollbars":"Show Scrollbars","popup_return":"Insert \'return false\'","popup_name":"Window Name","popup_url":"Popup URL",popup:"JavaScript Popup","target_blank":"Open in New Window","target_top":"Open in Top Frame (Replaces All Frames)","target_parent":"Open in Parent Window/Frame","target_same":"Open in This Window/Frame","anchor_names":"Anchors","popup_opts":"Options","advanced_props":"Advanced Properties","event_props":"Events","popup_props":"Popup Properties","general_props":"General Properties","advanced_tab":"Advanced","events_tab":"Events","popup_tab":"Popup","general_tab":"General",list:"Link List","is_external":"The URL you entered seems to be an external link. Do you want to add the required http:// prefix?","is_email":"The URL you entered seems to be an email address. Do you want to add the required mailto: prefix?",titlefield:"Title",target:"Target",url:"Link URL",title:"Insert/Edit Link","link_list":"Link List",rtl:"Right to Left",ltr:"Left to Right",accesskey:"AccessKey",tabindex:"TabIndex",rev:"Relationship Target to Page",rel:"Relationship Page to Target",mime:"Target MIME Type",encoding:"Target Character Encoding",langcode:"Language Code","target_langcode":"Target Language",width:"Width",height:"Height"});

View File

@ -1,338 +0,0 @@
<!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>{#advlink_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="js/advlink.js"></script>
<link href="css/advlink.css" rel="stylesheet" type="text/css" />
</head>
<body id="advlink" style="display: none" role="application" onload="javascript:mcTabs.displayTab('general_tab','general_panel', true);" aria-labelledby="app_label">
<span class="mceVoiceLabel" id="app_label" style="display:none;">{#advlink_dlg.title}</span>
<form onsubmit="insertAction();return false;" action="#">
<div class="tabs" role="presentation">
<ul>
<li id="general_tab" class="current" aria-controls="general_panel" ><span><a href="javascript:mcTabs.displayTab('general_tab','general_panel');" onmousedown="return false;">{#advlink_dlg.general_tab}</a></span></li>
<li id="popup_tab" aria-controls="popup_panel" ><span><a href="javascript:mcTabs.displayTab('popup_tab','popup_panel');" onmousedown="return false;">{#advlink_dlg.popup_tab}</a></span></li>
<li id="events_tab" aria-controls="events_panel"><span><a href="javascript:mcTabs.displayTab('events_tab','events_panel');" onmousedown="return false;">{#advlink_dlg.events_tab}</a></span></li>
<li id="advanced_tab" aria-controls="advanced_panel"><span><a href="javascript:mcTabs.displayTab('advanced_tab','advanced_panel');" onmousedown="return false;">{#advlink_dlg.advanced_tab}</a></span></li>
</ul>
</div>
<div class="panel_wrapper" role="presentation">
<div id="general_panel" class="panel current">
<fieldset>
<legend>{#advlink_dlg.general_props}</legend>
<table border="0" cellpadding="4" cellspacing="0" role="presentation">
<tr>
<td class="nowrap"><label id="hreflabel" for="href">{#advlink_dlg.url}</label></td>
<td><table border="0" cellspacing="0" cellpadding="0">
<tr>
<td><input id="href" name="href" type="text" class="mceFocus" value="" onchange="selectByValue(this.form,'linklisthref',this.value);" aria-required="true" /></td>
<td id="hrefbrowsercontainer">&nbsp;</td>
</tr>
</table></td>
</tr>
<tr id="linklisthrefrow">
<td class="column1"><label for="linklisthref">{#advlink_dlg.list}</label></td>
<td colspan="2" id="linklisthrefcontainer"><select id="linklisthref"><option value=""></option></select></td>
</tr>
<tr id="anchorlistrow">
<td class="column1"><label for="anchorlist">{#advlink_dlg.anchor_names}</label></td>
<td colspan="2" id="anchorlistcontainer"><select id="anchorlist"><option value=""></option></select></td>
</tr>
<tr>
<td><label id="targetlistlabel" for="targetlist">{#advlink_dlg.target}</label></td>
<td id="targetlistcontainer"><select id="targetlist"><option value=""></option></select></td>
</tr>
<tr>
<td class="nowrap"><label id="titlelabel" for="title">{#advlink_dlg.titlefield}</label></td>
<td><input id="title" name="title" type="text" value="" /></td>
</tr>
<tr>
<td><label id="classlabel" for="classlist">{#class_name}</label></td>
<td>
<select id="classlist" name="classlist" onchange="changeClass();">
<option value="" selected="selected">{#not_set}</option>
</select>
</td>
</tr>
</table>
</fieldset>
</div>
<div id="popup_panel" class="panel">
<fieldset>
<legend>{#advlink_dlg.popup_props}</legend>
<input type="checkbox" id="ispopup" name="ispopup" class="radio" onclick="setPopupControlsDisabled(!this.checked);buildOnClick();" />
<label id="ispopuplabel" for="ispopup">{#advlink_dlg.popup}</label>
<table border="0" cellpadding="0" cellspacing="4" role="presentation" >
<tr>
<td class="nowrap"><label for="popupurl">{#advlink_dlg.popup_url}</label>&nbsp;</td>
<td>
<table border="0" cellspacing="0" cellpadding="0">
<tr>
<td><input type="text" name="popupurl" id="popupurl" value="" onchange="buildOnClick();" /></td>
<td id="popupurlbrowsercontainer">&nbsp;</td>
</tr>
</table>
</td>
</tr>
<tr>
<td class="nowrap"><label for="popupname">{#advlink_dlg.popup_name}</label>&nbsp;</td>
<td><input type="text" name="popupname" id="popupname" value="" onchange="buildOnClick();" /></td>
</tr>
<tr role="group" aria-labelledby="popup_size_label">
<td class="nowrap"><label id="popup_size_label">{#advlink_dlg.popup_size}</label>&nbsp;</td>
<td class="nowrap">
<span style="display:none" id="width_voiceLabel">{#advlink_dlg.width}</span>
<input type="text" id="popupwidth" name="popupwidth" value="" onchange="buildOnClick();" aria-labelledby="width_voiceLabel" /> x
<span style="display:none" id="height_voiceLabel">{#advlink_dlg.height}</span>
<input type="text" id="popupheight" name="popupheight" value="" onchange="buildOnClick();" aria-labelledby="height_voiceLabel" /> px
</td>
</tr>
<tr role="group" aria-labelledby="popup_position_label center_hint">
<td class="nowrap" id="labelleft"><label id="popup_position_label">{#advlink_dlg.popup_position}</label>&nbsp;</td>
<td class="nowrap">
<span style="display:none" id="x_voiceLabel">X</span>
<input type="text" id="popupleft" name="popupleft" value="" onchange="buildOnClick();" aria-labelledby="x_voiceLabel" /> /
<span style="display:none" id="y_voiceLabel">Y</span>
<input type="text" id="popuptop" name="popuptop" value="" onchange="buildOnClick();" aria-labelledby="y_voiceLabel" /> <span id="center_hint">(c /c = center)</span>
</td>
</tr>
</table>
<fieldset>
<legend>{#advlink_dlg.popup_opts}</legend>
<table border="0" cellpadding="0" cellspacing="4" role="presentation" >
<tr>
<td><input type="checkbox" id="popuplocation" name="popuplocation" class="checkbox" onchange="buildOnClick();" /></td>
<td class="nowrap"><label id="popuplocationlabel" for="popuplocation">{#advlink_dlg.popup_location}</label></td>
<td><input type="checkbox" id="popupscrollbars" name="popupscrollbars" class="checkbox" onchange="buildOnClick();" /></td>
<td class="nowrap"><label id="popupscrollbarslabel" for="popupscrollbars">{#advlink_dlg.popup_scrollbars}</label></td>
</tr>
<tr>
<td><input type="checkbox" id="popupmenubar" name="popupmenubar" class="checkbox" onchange="buildOnClick();" /></td>
<td class="nowrap"><label id="popupmenubarlabel" for="popupmenubar">{#advlink_dlg.popup_menubar}</label></td>
<td><input type="checkbox" id="popupresizable" name="popupresizable" class="checkbox" onchange="buildOnClick();" /></td>
<td class="nowrap"><label id="popupresizablelabel" for="popupresizable">{#advlink_dlg.popup_resizable}</label></td>
</tr>
<tr>
<td><input type="checkbox" id="popuptoolbar" name="popuptoolbar" class="checkbox" onchange="buildOnClick();" /></td>
<td class="nowrap"><label id="popuptoolbarlabel" for="popuptoolbar">{#advlink_dlg.popup_toolbar}</label></td>
<td><input type="checkbox" id="popupdependent" name="popupdependent" class="checkbox" onchange="buildOnClick();" /></td>
<td class="nowrap"><label id="popupdependentlabel" for="popupdependent">{#advlink_dlg.popup_dependent}</label></td>
</tr>
<tr>
<td><input type="checkbox" id="popupstatus" name="popupstatus" class="checkbox" onchange="buildOnClick();" /></td>
<td class="nowrap"><label id="popupstatuslabel" for="popupstatus">{#advlink_dlg.popup_statusbar}</label></td>
<td><input type="checkbox" id="popupreturn" name="popupreturn" class="checkbox" onchange="buildOnClick();" checked="checked" /></td>
<td class="nowrap"><label id="popupreturnlabel" for="popupreturn">{#advlink_dlg.popup_return}</label></td>
</tr>
</table>
</fieldset>
</fieldset>
</div>
<div id="advanced_panel" class="panel">
<fieldset>
<legend>{#advlink_dlg.advanced_props}</legend>
<table border="0" cellpadding="0" cellspacing="4" role="presentation" >
<tr>
<td class="column1"><label id="idlabel" for="id">{#advlink_dlg.id}</label></td>
<td><input id="id" name="id" type="text" value="" /></td>
</tr>
<tr>
<td><label id="stylelabel" for="style">{#advlink_dlg.style}</label></td>
<td><input type="text" id="style" name="style" value="" /></td>
</tr>
<tr>
<td><label id="classeslabel" for="classes">{#advlink_dlg.classes}</label></td>
<td><input type="text" id="classes" name="classes" value="" onchange="selectByValue(this.form,'classlist',this.value,true);" /></td>
</tr>
<tr>
<td><label id="targetlabel" for="target">{#advlink_dlg.target_name}</label></td>
<td><input type="text" id="target" name="target" value="" onchange="selectByValue(this.form,'targetlist',this.value,true);" /></td>
</tr>
<tr>
<td class="column1"><label id="dirlabel" for="dir">{#advlink_dlg.langdir}</label></td>
<td>
<select id="dir" name="dir">
<option value="">{#not_set}</option>
<option value="ltr">{#advlink_dlg.ltr}</option>
<option value="rtl">{#advlink_dlg.rtl}</option>
</select>
</td>
</tr>
<tr>
<td><label id="hreflanglabel" for="hreflang">{#advlink_dlg.target_langcode}</label></td>
<td><input type="text" id="hreflang" name="hreflang" value="" /></td>
</tr>
<tr>
<td class="column1"><label id="langlabel" for="lang">{#advlink_dlg.langcode}</label></td>
<td>
<input id="lang" name="lang" type="text" value="" />
</td>
</tr>
<tr>
<td><label id="charsetlabel" for="charset">{#advlink_dlg.encoding}</label></td>
<td><input type="text" id="charset" name="charset" value="" /></td>
</tr>
<tr>
<td><label id="typelabel" for="type">{#advlink_dlg.mime}</label></td>
<td><input type="text" id="type" name="type" value="" /></td>
</tr>
<tr>
<td><label id="rellabel" for="rel">{#advlink_dlg.rel}</label></td>
<td><select id="rel" name="rel">
<option value="">{#not_set}</option>
<option value="lightbox">Lightbox</option>
<option value="alternate">Alternate</option>
<option value="designates">Designates</option>
<option value="stylesheet">Stylesheet</option>
<option value="start">Start</option>
<option value="next">Next</option>
<option value="prev">Prev</option>
<option value="contents">Contents</option>
<option value="index">Index</option>
<option value="glossary">Glossary</option>
<option value="copyright">Copyright</option>
<option value="chapter">Chapter</option>
<option value="subsection">Subsection</option>
<option value="appendix">Appendix</option>
<option value="help">Help</option>
<option value="bookmark">Bookmark</option>
<option value="nofollow">No Follow</option>
<option value="tag">Tag</option>
</select>
</td>
</tr>
<tr>
<td><label id="revlabel" for="rev">{#advlink_dlg.rev}</label></td>
<td><select id="rev" name="rev">
<option value="">{#not_set}</option>
<option value="alternate">Alternate</option>
<option value="designates">Designates</option>
<option value="stylesheet">Stylesheet</option>
<option value="start">Start</option>
<option value="next">Next</option>
<option value="prev">Prev</option>
<option value="contents">Contents</option>
<option value="index">Index</option>
<option value="glossary">Glossary</option>
<option value="copyright">Copyright</option>
<option value="chapter">Chapter</option>
<option value="subsection">Subsection</option>
<option value="appendix">Appendix</option>
<option value="help">Help</option>
<option value="bookmark">Bookmark</option>
</select>
</td>
</tr>
<tr>
<td><label id="tabindexlabel" for="tabindex">{#advlink_dlg.tabindex}</label></td>
<td><input type="text" id="tabindex" name="tabindex" value="" /></td>
</tr>
<tr>
<td><label id="accesskeylabel" for="accesskey">{#advlink_dlg.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>{#advlink_dlg.event_props}</legend>
<table border="0" cellpadding="0" cellspacing="4" role="presentation" >
<tr>
<td class="column1"><label for="onfocus">onfocus</label></td>
<td><input id="onfocus" name="onfocus" type="text" value="" /></td>
</tr>
<tr>
<td class="column1"><label for="onblur">onblur</label></td>
<td><input id="onblur" name="onblur" type="text" value="" /></td>
</tr>
<tr>
<td class="column1"><label for="onclick">onclick</label></td>
<td><input id="onclick" name="onclick" type="text" value="" /></td>
</tr>
<tr>
<td class="column1"><label for="ondblclick">ondblclick</label></td>
<td><input id="ondblclick" name="ondblclick" type="text" value="" /></td>
</tr>
<tr>
<td class="column1"><label for="onmousedown">onmousedown</label></td>
<td><input id="onmousedown" name="onmousedown" type="text" value="" /></td>
</tr>
<tr>
<td class="column1"><label for="onmouseup">onmouseup</label></td>
<td><input id="onmouseup" name="onmouseup" type="text" value="" /></td>
</tr>
<tr>
<td class="column1"><label for="onmouseover">onmouseover</label></td>
<td><input id="onmouseover" name="onmouseover" type="text" value="" /></td>
</tr>
<tr>
<td class="column1"><label for="onmousemove">onmousemove</label></td>
<td><input id="onmousemove" name="onmousemove" type="text" value="" /></td>
</tr>
<tr>
<td class="column1"><label for="onmouseout">onmouseout</label></td>
<td><input id="onmouseout" name="onmouseout" type="text" value="" /></td>
</tr>
<tr>
<td class="column1"><label for="onkeypress">onkeypress</label></td>
<td><input id="onkeypress" name="onkeypress" type="text" value="" /></td>
</tr>
<tr>
<td class="column1"><label for="onkeydown">onkeydown</label></td>
<td><input id="onkeydown" name="onkeydown" type="text" value="" /></td>
</tr>
<tr>
<td class="column1"><label for="onkeyup">onkeyup</label></td>
<td><input id="onkeyup" name="onkeyup" type="text" value="" /></td>
</tr>
</table>
</fieldset>
</div>
</div>
<div class="mceActionPanel">
<input type="submit" id="insert" name="insert" value="{#insert}" />
<input type="button" id="cancel" name="cancel" value="{#cancel}" onclick="tinyMCEPopup.close();" />
</div>
</form>
</body>
</html>

View File

@ -1 +0,0 @@
(function(){var a=tinymce.each;tinymce.create("tinymce.plugins.AdvListPlugin",{init:function(b,c){var d=this;d.editor=b;function e(g){var f=[];a(g.split(/,/),function(h){f.push({title:"advlist."+(h=="default"?"def":h.replace(/-/g,"_")),styles:{listStyleType:h=="default"?"":h}})});return f}d.numlist=b.getParam("advlist_number_styles")||e("default,lower-alpha,lower-greek,lower-roman,upper-alpha,upper-roman");d.bullist=b.getParam("advlist_bullet_styles")||e("default,circle,disc,square");if(tinymce.isIE&&/MSIE [2-7]/.test(navigator.userAgent)){d.isIE7=true}},createControl:function(d,b){var f=this,e,i,g=f.editor;if(d=="numlist"||d=="bullist"){if(f[d][0].title=="advlist.def"){i=f[d][0]}function c(j,l){var k=true;a(l.styles,function(n,m){if(g.dom.getStyle(j,m)!=n){k=false;return false}});return k}function h(){var k,l=g.dom,j=g.selection;k=l.getParent(j.getNode(),"ol,ul");if(!k||k.nodeName==(d=="bullist"?"OL":"UL")||c(k,i)){g.execCommand(d=="bullist"?"InsertUnorderedList":"InsertOrderedList")}if(i){k=l.getParent(j.getNode(),"ol,ul");if(k){l.setStyles(k,i.styles);k.removeAttribute("data-mce-style")}}g.focus()}e=b.createSplitButton(d,{title:"advanced."+d+"_desc","class":"mce_"+d,onclick:function(){h()}});e.onRenderMenu.add(function(j,k){k.onHideMenu.add(function(){if(f.bookmark){g.selection.moveToBookmark(f.bookmark);f.bookmark=0}});k.onShowMenu.add(function(){var n=g.dom,m=n.getParent(g.selection.getNode(),"ol,ul"),l;if(m||i){l=f[d];a(k.items,function(o){var p=true;o.setSelected(0);if(m&&!o.isDisabled()){a(l,function(q){if(q.id==o.id){if(!c(m,q)){p=false;return false}}});if(p){o.setSelected(1)}}});if(!m){k.items[i.id].setSelected(1)}}g.focus();if(tinymce.isIE){f.bookmark=g.selection.getBookmark(1)}});k.add({id:g.dom.uniqueId(),title:"advlist.types","class":"mceMenuItemTitle",titleItem:true}).setDisabled(1);a(f[d],function(l){if(f.isIE7&&l.styles.listStyleType=="lower-greek"){return}l.id=g.dom.uniqueId();k.add({id:l.id,title:l.title,onclick:function(){i=l;h()}})})});return e}},getInfo:function(){return{longname:"Advanced lists",author:"Moxiecode Systems AB",authorurl:"http://tinymce.moxiecode.com",infourl:"http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/advlist",version:tinymce.majorVersion+"."+tinymce.minorVersion}}});tinymce.PluginManager.add("advlist",tinymce.plugins.AdvListPlugin)})();

View File

@ -1,176 +0,0 @@
/**
* editor_plugin_src.js
*
* Copyright 2009, Moxiecode Systems AB
* Released under LGPL License.
*
* License: http://tinymce.moxiecode.com/license
* Contributing: http://tinymce.moxiecode.com/contributing
*/
(function() {
var each = tinymce.each;
tinymce.create('tinymce.plugins.AdvListPlugin', {
init : function(ed, url) {
var t = this;
t.editor = ed;
function buildFormats(str) {
var formats = [];
each(str.split(/,/), function(type) {
formats.push({
title : 'advlist.' + (type == 'default' ? 'def' : type.replace(/-/g, '_')),
styles : {
listStyleType : type == 'default' ? '' : type
}
});
});
return formats;
};
// Setup number formats from config or default
t.numlist = ed.getParam("advlist_number_styles") || buildFormats("default,lower-alpha,lower-greek,lower-roman,upper-alpha,upper-roman");
t.bullist = ed.getParam("advlist_bullet_styles") || buildFormats("default,circle,disc,square");
if (tinymce.isIE && /MSIE [2-7]/.test(navigator.userAgent))
t.isIE7 = true;
},
createControl: function(name, cm) {
var t = this, btn, format, editor = t.editor;
if (name == 'numlist' || name == 'bullist') {
// Default to first item if it's a default item
if (t[name][0].title == 'advlist.def')
format = t[name][0];
function hasFormat(node, format) {
var state = true;
each(format.styles, function(value, name) {
// Format doesn't match
if (editor.dom.getStyle(node, name) != value) {
state = false;
return false;
}
});
return state;
};
function applyListFormat() {
var list, dom = editor.dom, sel = editor.selection;
// Check for existing list element
list = dom.getParent(sel.getNode(), 'ol,ul');
// Switch/add list type if needed
if (!list || list.nodeName == (name == 'bullist' ? 'OL' : 'UL') || hasFormat(list, format))
editor.execCommand(name == 'bullist' ? 'InsertUnorderedList' : 'InsertOrderedList');
// Append styles to new list element
if (format) {
list = dom.getParent(sel.getNode(), 'ol,ul');
if (list) {
dom.setStyles(list, format.styles);
list.removeAttribute('data-mce-style');
}
}
editor.focus();
};
btn = cm.createSplitButton(name, {
title : 'advanced.' + name + '_desc',
'class' : 'mce_' + name,
onclick : function() {
applyListFormat();
}
});
btn.onRenderMenu.add(function(btn, menu) {
menu.onHideMenu.add(function() {
if (t.bookmark) {
editor.selection.moveToBookmark(t.bookmark);
t.bookmark = 0;
}
});
menu.onShowMenu.add(function() {
var dom = editor.dom, list = dom.getParent(editor.selection.getNode(), 'ol,ul'), fmtList;
if (list || format) {
fmtList = t[name];
// Unselect existing items
each(menu.items, function(item) {
var state = true;
item.setSelected(0);
if (list && !item.isDisabled()) {
each(fmtList, function(fmt) {
if (fmt.id == item.id) {
if (!hasFormat(list, fmt)) {
state = false;
return false;
}
}
});
if (state)
item.setSelected(1);
}
});
// Select the current format
if (!list)
menu.items[format.id].setSelected(1);
}
editor.focus();
// IE looses it's selection so store it away and restore it later
if (tinymce.isIE) {
t.bookmark = editor.selection.getBookmark(1);
}
});
menu.add({id : editor.dom.uniqueId(), title : 'advlist.types', 'class' : 'mceMenuItemTitle', titleItem: true}).setDisabled(1);
each(t[name], function(item) {
// IE<8 doesn't support lower-greek, skip it
if (t.isIE7 && item.styles.listStyleType == 'lower-greek')
return;
item.id = editor.dom.uniqueId();
menu.add({id : item.id, title : item.title, onclick : function() {
format = item;
applyListFormat();
}});
});
});
return btn;
}
},
getInfo : function() {
return {
longname : 'Advanced lists',
author : 'Moxiecode Systems AB',
authorurl : 'http://tinymce.moxiecode.com',
infourl : 'http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/advlist',
version : tinymce.majorVersion + "." + tinymce.minorVersion
};
}
});
// Register plugin
tinymce.PluginManager.add('advlist', tinymce.plugins.AdvListPlugin);
})();

View File

@ -1 +0,0 @@
(function(){tinymce.create("tinymce.plugins.AutolinkPlugin",{init:function(a,b){var c=this;a.onKeyDown.addToTop(function(d,f){if(f.keyCode==13){return c.handleEnter(d)}});if(tinyMCE.isIE){return}a.onKeyPress.add(function(d,f){if(f.which==41){return c.handleEclipse(d)}});a.onKeyUp.add(function(d,f){if(f.keyCode==32){return c.handleSpacebar(d)}})},handleEclipse:function(a){this.parseCurrentLine(a,-1,"(",true)},handleSpacebar:function(a){this.parseCurrentLine(a,0,"",true)},handleEnter:function(a){this.parseCurrentLine(a,-1,"",false)},parseCurrentLine:function(i,d,b,g){var a,f,c,n,k,m,h,e,j;a=i.selection.getRng(true).cloneRange();if(a.startOffset<5){e=a.endContainer.previousSibling;if(e==null){if(a.endContainer.firstChild==null||a.endContainer.firstChild.nextSibling==null){return}e=a.endContainer.firstChild.nextSibling}j=e.length;a.setStart(e,j);a.setEnd(e,j);if(a.endOffset<5){return}f=a.endOffset;n=e}else{n=a.endContainer;if(n.nodeType!=3&&n.firstChild){while(n.nodeType!=3&&n.firstChild){n=n.firstChild}if(n.nodeType==3){a.setStart(n,0);a.setEnd(n,n.nodeValue.length)}}if(a.endOffset==1){f=2}else{f=a.endOffset-1-d}}c=f;do{a.setStart(n,f>=2?f-2:0);a.setEnd(n,f>=1?f-1:0);f-=1}while(a.toString()!=" "&&a.toString()!=""&&a.toString().charCodeAt(0)!=160&&(f-2)>=0&&a.toString()!=b);if(a.toString()==b||a.toString().charCodeAt(0)==160){a.setStart(n,f);a.setEnd(n,c);f+=1}else{if(a.startOffset==0){a.setStart(n,0);a.setEnd(n,c)}else{a.setStart(n,f);a.setEnd(n,c)}}var m=a.toString();if(m.charAt(m.length-1)=="."){a.setEnd(n,c-1)}m=a.toString();h=m.match(/^(https?:\/\/|ssh:\/\/|ftp:\/\/|file:\/|www\.|(?:mailto:)?[A-Z0-9._%+-]+@)(.+)$/i);if(h){if(h[1]=="www."){h[1]="http://www."}else{if(/@$/.test(h[1])&&!/^mailto:/.test(h[1])){h[1]="mailto:"+h[1]}}k=i.selection.getBookmark();i.selection.setRng(a);tinyMCE.execCommand("createlink",false,h[1]+h[2]);i.selection.moveToBookmark(k);i.nodeChanged();if(tinyMCE.isWebKit){i.selection.collapse(false);var l=Math.min(n.length,c+1);a.setStart(n,l);a.setEnd(n,l);i.selection.setRng(a)}}},getInfo:function(){return{longname:"Autolink",author:"Moxiecode Systems AB",authorurl:"http://tinymce.moxiecode.com",infourl:"http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/autolink",version:tinymce.majorVersion+"."+tinymce.minorVersion}}});tinymce.PluginManager.add("autolink",tinymce.plugins.AutolinkPlugin)})();

View File

@ -1,184 +0,0 @@
/**
* editor_plugin_src.js
*
* Copyright 2011, Moxiecode Systems AB
* Released under LGPL License.
*
* License: http://tinymce.moxiecode.com/license
* Contributing: http://tinymce.moxiecode.com/contributing
*/
(function() {
tinymce.create('tinymce.plugins.AutolinkPlugin', {
/**
* Initializes the plugin, this will be executed after the plugin has been created.
* This call is done before the editor instance has finished it's initialization so use the onInit event
* of the editor instance to intercept that event.
*
* @param {tinymce.Editor} ed Editor instance that the plugin is initialized in.
* @param {string} url Absolute URL to where the plugin is located.
*/
init : function(ed, url) {
var t = this;
// Add a key down handler
ed.onKeyDown.addToTop(function(ed, e) {
if (e.keyCode == 13)
return t.handleEnter(ed);
});
// Internet Explorer has built-in automatic linking for most cases
if (tinyMCE.isIE)
return;
ed.onKeyPress.add(function(ed, e) {
if (e.which == 41)
return t.handleEclipse(ed);
});
// Add a key up handler
ed.onKeyUp.add(function(ed, e) {
if (e.keyCode == 32)
return t.handleSpacebar(ed);
});
},
handleEclipse : function(ed) {
this.parseCurrentLine(ed, -1, '(', true);
},
handleSpacebar : function(ed) {
this.parseCurrentLine(ed, 0, '', true);
},
handleEnter : function(ed) {
this.parseCurrentLine(ed, -1, '', false);
},
parseCurrentLine : function(ed, end_offset, delimiter, goback) {
var r, end, start, endContainer, bookmark, text, matches, prev, len;
// We need at least five characters to form a URL,
// hence, at minimum, five characters from the beginning of the line.
r = ed.selection.getRng(true).cloneRange();
if (r.startOffset < 5) {
// During testing, the caret is placed inbetween two text nodes.
// The previous text node contains the URL.
prev = r.endContainer.previousSibling;
if (prev == null) {
if (r.endContainer.firstChild == null || r.endContainer.firstChild.nextSibling == null)
return;
prev = r.endContainer.firstChild.nextSibling;
}
len = prev.length;
r.setStart(prev, len);
r.setEnd(prev, len);
if (r.endOffset < 5)
return;
end = r.endOffset;
endContainer = prev;
} else {
endContainer = r.endContainer;
// Get a text node
if (endContainer.nodeType != 3 && endContainer.firstChild) {
while (endContainer.nodeType != 3 && endContainer.firstChild)
endContainer = endContainer.firstChild;
// Move range to text node
if (endContainer.nodeType == 3) {
r.setStart(endContainer, 0);
r.setEnd(endContainer, endContainer.nodeValue.length);
}
}
if (r.endOffset == 1)
end = 2;
else
end = r.endOffset - 1 - end_offset;
}
start = end;
do
{
// Move the selection one character backwards.
r.setStart(endContainer, end >= 2 ? end - 2 : 0);
r.setEnd(endContainer, end >= 1 ? end - 1 : 0);
end -= 1;
// Loop until one of the following is found: a blank space, &nbsp;, delimeter, (end-2) >= 0
} while (r.toString() != ' ' && r.toString() != '' && r.toString().charCodeAt(0) != 160 && (end -2) >= 0 && r.toString() != delimiter);
if (r.toString() == delimiter || r.toString().charCodeAt(0) == 160) {
r.setStart(endContainer, end);
r.setEnd(endContainer, start);
end += 1;
} else if (r.startOffset == 0) {
r.setStart(endContainer, 0);
r.setEnd(endContainer, start);
}
else {
r.setStart(endContainer, end);
r.setEnd(endContainer, start);
}
// Exclude last . from word like "www.site.com."
var text = r.toString();
if (text.charAt(text.length - 1) == '.') {
r.setEnd(endContainer, start - 1);
}
text = r.toString();
matches = text.match(/^(https?:\/\/|ssh:\/\/|ftp:\/\/|file:\/|www\.|(?:mailto:)?[A-Z0-9._%+-]+@)(.+)$/i);
if (matches) {
if (matches[1] == 'www.') {
matches[1] = 'http://www.';
} else if (/@$/.test(matches[1]) && !/^mailto:/.test(matches[1])) {
matches[1] = 'mailto:' + matches[1];
}
bookmark = ed.selection.getBookmark();
ed.selection.setRng(r);
tinyMCE.execCommand('createlink',false, matches[1] + matches[2]);
ed.selection.moveToBookmark(bookmark);
ed.nodeChanged();
// TODO: Determine if this is still needed.
if (tinyMCE.isWebKit) {
// move the caret to its original position
ed.selection.collapse(false);
var max = Math.min(endContainer.length, start + 1);
r.setStart(endContainer, max);
r.setEnd(endContainer, max);
ed.selection.setRng(r);
}
}
},
/**
* Returns information about the plugin as a name/value array.
* The current keys are longname, author, authorurl, infourl and version.
*
* @return {Object} Name/value array containing information about the plugin.
*/
getInfo : function() {
return {
longname : 'Autolink',
author : 'Moxiecode Systems AB',
authorurl : 'http://tinymce.moxiecode.com',
infourl : 'http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/autolink',
version : tinymce.majorVersion + "." + tinymce.minorVersion
};
}
});
// Register plugin
tinymce.PluginManager.add('autolink', tinymce.plugins.AutolinkPlugin);
})();

View File

@ -1 +0,0 @@
(function(){tinymce.create("tinymce.plugins.AutoResizePlugin",{init:function(a,c){var d=this,e=0;if(a.getParam("fullscreen_is_enabled")){return}function b(){var j,i=a.getDoc(),f=i.body,l=i.documentElement,h=tinymce.DOM,k=d.autoresize_min_height,g;g=tinymce.isIE?f.scrollHeight:(tinymce.isWebKit&&f.clientHeight==0?0:f.offsetHeight);if(g>d.autoresize_min_height){k=g}if(d.autoresize_max_height&&g>d.autoresize_max_height){k=d.autoresize_max_height;f.style.overflowY="auto";l.style.overflowY="auto"}else{f.style.overflowY="hidden";l.style.overflowY="hidden";f.scrollTop=0}if(k!==e){j=k-e;h.setStyle(h.get(a.id+"_ifr"),"height",k+"px");e=k;if(tinymce.isWebKit&&j<0){b()}}}d.editor=a;d.autoresize_min_height=parseInt(a.getParam("autoresize_min_height",a.getElement().offsetHeight));d.autoresize_max_height=parseInt(a.getParam("autoresize_max_height",0));a.onInit.add(function(f){f.dom.setStyle(f.getBody(),"paddingBottom",f.getParam("autoresize_bottom_margin",50)+"px")});a.onChange.add(b);a.onSetContent.add(b);a.onPaste.add(b);a.onKeyUp.add(b);a.onPostRender.add(b);if(a.getParam("autoresize_on_init",true)){a.onLoad.add(b);a.onLoadContent.add(b)}a.addCommand("mceAutoResize",b)},getInfo:function(){return{longname:"Auto Resize",author:"Moxiecode Systems AB",authorurl:"http://tinymce.moxiecode.com",infourl:"http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/autoresize",version:tinymce.majorVersion+"."+tinymce.minorVersion}}});tinymce.PluginManager.add("autoresize",tinymce.plugins.AutoResizePlugin)})();

View File

@ -1,119 +0,0 @@
/**
* editor_plugin_src.js
*
* Copyright 2009, Moxiecode Systems AB
* Released under LGPL License.
*
* License: http://tinymce.moxiecode.com/license
* Contributing: http://tinymce.moxiecode.com/contributing
*/
(function() {
/**
* Auto Resize
*
* This plugin automatically resizes the content area to fit its content height.
* It will retain a minimum height, which is the height of the content area when
* it's initialized.
*/
tinymce.create('tinymce.plugins.AutoResizePlugin', {
/**
* Initializes the plugin, this will be executed after the plugin has been created.
* This call is done before the editor instance has finished it's initialization so use the onInit event
* of the editor instance to intercept that event.
*
* @param {tinymce.Editor} ed Editor instance that the plugin is initialized in.
* @param {string} url Absolute URL to where the plugin is located.
*/
init : function(ed, url) {
var t = this, oldSize = 0;
if (ed.getParam('fullscreen_is_enabled'))
return;
/**
* This method gets executed each time the editor needs to resize.
*/
function resize() {
var deltaSize, d = ed.getDoc(), body = d.body, de = d.documentElement, DOM = tinymce.DOM, resizeHeight = t.autoresize_min_height, myHeight;
// Get height differently depending on the browser used
myHeight = tinymce.isIE ? body.scrollHeight : (tinymce.isWebKit && body.clientHeight == 0 ? 0 : body.offsetHeight);
// Don't make it smaller than the minimum height
if (myHeight > t.autoresize_min_height)
resizeHeight = myHeight;
// If a maximum height has been defined don't exceed this height
if (t.autoresize_max_height && myHeight > t.autoresize_max_height) {
resizeHeight = t.autoresize_max_height;
body.style.overflowY = "auto";
de.style.overflowY = "auto"; // Old IE
} else {
body.style.overflowY = "hidden";
de.style.overflowY = "hidden"; // Old IE
body.scrollTop = 0;
}
// Resize content element
if (resizeHeight !== oldSize) {
deltaSize = resizeHeight - oldSize;
DOM.setStyle(DOM.get(ed.id + '_ifr'), 'height', resizeHeight + 'px');
oldSize = resizeHeight;
// WebKit doesn't decrease the size of the body element until the iframe gets resized
// So we need to continue to resize the iframe down until the size gets fixed
if (tinymce.isWebKit && deltaSize < 0)
resize();
}
};
t.editor = ed;
// Define minimum height
t.autoresize_min_height = parseInt(ed.getParam('autoresize_min_height', ed.getElement().offsetHeight));
// Define maximum height
t.autoresize_max_height = parseInt(ed.getParam('autoresize_max_height', 0));
// Add padding at the bottom for better UX
ed.onInit.add(function(ed){
ed.dom.setStyle(ed.getBody(), 'paddingBottom', ed.getParam('autoresize_bottom_margin', 50) + 'px');
});
// Add appropriate listeners for resizing content area
ed.onChange.add(resize);
ed.onSetContent.add(resize);
ed.onPaste.add(resize);
ed.onKeyUp.add(resize);
ed.onPostRender.add(resize);
if (ed.getParam('autoresize_on_init', true)) {
ed.onLoad.add(resize);
ed.onLoadContent.add(resize);
}
// Register the command so that it can be invoked by using tinyMCE.activeEditor.execCommand('mceExample');
ed.addCommand('mceAutoResize', resize);
},
/**
* Returns information about the plugin as a name/value array.
* The current keys are longname, author, authorurl, infourl and version.
*
* @return {Object} Name/value array containing information about the plugin.
*/
getInfo : function() {
return {
longname : 'Auto Resize',
author : 'Moxiecode Systems AB',
authorurl : 'http://tinymce.moxiecode.com',
infourl : 'http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/autoresize',
version : tinymce.majorVersion + "." + tinymce.minorVersion
};
}
});
// Register plugin
tinymce.PluginManager.add('autoresize', tinymce.plugins.AutoResizePlugin);
})();

View File

@ -1 +0,0 @@
(function(e){var c="autosave",g="restoredraft",b=true,f,d,a=e.util.Dispatcher;e.create("tinymce.plugins.AutoSave",{init:function(i,j){var h=this,l=i.settings;h.editor=i;function k(n){var m={s:1000,m:60000};n=/^(\d+)([ms]?)$/.exec(""+n);return(n[2]?m[n[2]]:1)*parseInt(n)}e.each({ask_before_unload:b,interval:"30s",retention:"20m",minlength:50},function(n,m){m=c+"_"+m;if(l[m]===f){l[m]=n}});l.autosave_interval=k(l.autosave_interval);l.autosave_retention=k(l.autosave_retention);i.addButton(g,{title:c+".restore_content",onclick:function(){if(i.getContent({draft:true}).replace(/\s|&nbsp;|<\/?p[^>]*>|<br[^>]*>/gi,"").length>0){i.windowManager.confirm(c+".warning_message",function(m){if(m){h.restoreDraft()}})}else{h.restoreDraft()}}});i.onNodeChange.add(function(){var m=i.controlManager;if(m.get(g)){m.setDisabled(g,!h.hasDraft())}});i.onInit.add(function(){if(i.controlManager.get(g)){h.setupStorage(i);setInterval(function(){if(!i.removed){h.storeDraft();i.nodeChanged()}},l.autosave_interval)}});h.onStoreDraft=new a(h);h.onRestoreDraft=new a(h);h.onRemoveDraft=new a(h);if(!d){window.onbeforeunload=e.plugins.AutoSave._beforeUnloadHandler;d=b}},getInfo:function(){return{longname:"Auto save",author:"Moxiecode Systems AB",authorurl:"http://tinymce.moxiecode.com",infourl:"http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/autosave",version:e.majorVersion+"."+e.minorVersion}},getExpDate:function(){return new Date(new Date().getTime()+this.editor.settings.autosave_retention).toUTCString()},setupStorage:function(i){var h=this,k=c+"_test",j="OK";h.key=c+i.id;e.each([function(){if(localStorage){localStorage.setItem(k,j);if(localStorage.getItem(k)===j){localStorage.removeItem(k);return localStorage}}},function(){if(sessionStorage){sessionStorage.setItem(k,j);if(sessionStorage.getItem(k)===j){sessionStorage.removeItem(k);return sessionStorage}}},function(){if(e.isIE){i.getElement().style.behavior="url('#default#userData')";return{autoExpires:b,setItem:function(l,n){var m=i.getElement();m.setAttribute(l,n);m.expires=h.getExpDate();try{m.save("TinyMCE")}catch(o){}},getItem:function(l){var m=i.getElement();try{m.load("TinyMCE");return m.getAttribute(l)}catch(n){return null}},removeItem:function(l){i.getElement().removeAttribute(l)}}}},],function(l){try{h.storage=l();if(h.storage){return false}}catch(m){}})},storeDraft:function(){var i=this,l=i.storage,j=i.editor,h,k;if(l){if(!l.getItem(i.key)&&!j.isDirty()){return}k=j.getContent({draft:true});if(k.length>j.settings.autosave_minlength){h=i.getExpDate();if(!i.storage.autoExpires){i.storage.setItem(i.key+"_expires",h)}i.storage.setItem(i.key,k);i.onStoreDraft.dispatch(i,{expires:h,content:k})}}},restoreDraft:function(){var h=this,j=h.storage,i;if(j){i=j.getItem(h.key);if(i){h.editor.setContent(i);h.onRestoreDraft.dispatch(h,{content:i})}}},hasDraft:function(){var h=this,k=h.storage,i,j;if(k){j=!!k.getItem(h.key);if(j){if(!h.storage.autoExpires){i=new Date(k.getItem(h.key+"_expires"));if(new Date().getTime()<i.getTime()){return b}h.removeDraft()}else{return b}}}return false},removeDraft:function(){var h=this,k=h.storage,i=h.key,j;if(k){j=k.getItem(i);k.removeItem(i);k.removeItem(i+"_expires");if(j){h.onRemoveDraft.dispatch(h,{content:j})}}},"static":{_beforeUnloadHandler:function(h){var i;e.each(tinyMCE.editors,function(j){if(j.plugins.autosave){j.plugins.autosave.storeDraft()}if(j.getParam("fullscreen_is_enabled")){return}if(!i&&j.isDirty()&&j.getParam("autosave_ask_before_unload")){i=j.getLang("autosave.unload_msg")}});return i}}});e.PluginManager.add("autosave",e.plugins.AutoSave)})(tinymce);

View File

@ -1,433 +0,0 @@
/**
* editor_plugin_src.js
*
* Copyright 2009, Moxiecode Systems AB
* Released under LGPL License.
*
* License: http://tinymce.moxiecode.com/license
* Contributing: http://tinymce.moxiecode.com/contributing
*
* Adds auto-save capability to the TinyMCE text editor to rescue content
* inadvertently lost. This plugin was originally developed by Speednet
* and that project can be found here: http://code.google.com/p/tinyautosave/
*
* TECHNOLOGY DISCUSSION:
*
* The plugin attempts to use the most advanced features available in the current browser to save
* as much content as possible. There are a total of four different methods used to autosave the
* content. In order of preference, they are:
*
* 1. localStorage - A new feature of HTML 5, localStorage can store megabytes of data per domain
* on the client computer. Data stored in the localStorage area has no expiration date, so we must
* manage expiring the data ourselves. localStorage is fully supported by IE8, and it is supposed
* to be working in Firefox 3 and Safari 3.2, but in reality is is flaky in those browsers. As
* HTML 5 gets wider support, the AutoSave plugin will use it automatically. In Windows Vista/7,
* localStorage is stored in the following folder:
* C:\Users\[username]\AppData\Local\Microsoft\Internet Explorer\DOMStore\[tempFolder]
*
* 2. sessionStorage - A new feature of HTML 5, sessionStorage works similarly to localStorage,
* except it is designed to expire after a certain amount of time. Because the specification
* around expiration date/time is very loosely-described, it is preferrable to use locaStorage and
* manage the expiration ourselves. sessionStorage has similar storage characteristics to
* localStorage, although it seems to have better support by Firefox 3 at the moment. (That will
* certainly change as Firefox continues getting better at HTML 5 adoption.)
*
* 3. UserData - A very under-exploited feature of Microsoft Internet Explorer, UserData is a
* way to store up to 128K of data per "document", or up to 1MB of data per domain, on the client
* computer. The feature is available for IE 5+, which makes it available for every version of IE
* supported by TinyMCE. The content is persistent across browser restarts and expires on the
* date/time specified, just like a cookie. However, the data is not cleared when the user clears
* cookies on the browser, which makes it well-suited for rescuing autosaved content. UserData,
* like other Microsoft IE browser technologies, is implemented as a behavior attached to a
* specific DOM object, so in this case we attach the behavior to the same DOM element that the
* TinyMCE editor instance is attached to.
*/
(function(tinymce) {
// Setup constants to help the compressor to reduce script size
var PLUGIN_NAME = 'autosave',
RESTORE_DRAFT = 'restoredraft',
TRUE = true,
undefined,
unloadHandlerAdded,
Dispatcher = tinymce.util.Dispatcher;
/**
* This plugin adds auto-save capability to the TinyMCE text editor to rescue content
* inadvertently lost. By using localStorage.
*
* @class tinymce.plugins.AutoSave
*/
tinymce.create('tinymce.plugins.AutoSave', {
/**
* Initializes the plugin, this will be executed after the plugin has been created.
* This call is done before the editor instance has finished it's initialization so use the onInit event
* of the editor instance to intercept that event.
*
* @method init
* @param {tinymce.Editor} ed Editor instance that the plugin is initialized in.
* @param {string} url Absolute URL to where the plugin is located.
*/
init : function(ed, url) {
var self = this, settings = ed.settings;
self.editor = ed;
// Parses the specified time string into a milisecond number 10m, 10s etc.
function parseTime(time) {
var multipels = {
s : 1000,
m : 60000
};
time = /^(\d+)([ms]?)$/.exec('' + time);
return (time[2] ? multipels[time[2]] : 1) * parseInt(time);
};
// Default config
tinymce.each({
ask_before_unload : TRUE,
interval : '30s',
retention : '20m',
minlength : 50
}, function(value, key) {
key = PLUGIN_NAME + '_' + key;
if (settings[key] === undefined)
settings[key] = value;
});
// Parse times
settings.autosave_interval = parseTime(settings.autosave_interval);
settings.autosave_retention = parseTime(settings.autosave_retention);
// Register restore button
ed.addButton(RESTORE_DRAFT, {
title : PLUGIN_NAME + ".restore_content",
onclick : function() {
if (ed.getContent({draft: true}).replace(/\s|&nbsp;|<\/?p[^>]*>|<br[^>]*>/gi, "").length > 0) {
// Show confirm dialog if the editor isn't empty
ed.windowManager.confirm(
PLUGIN_NAME + ".warning_message",
function(ok) {
if (ok)
self.restoreDraft();
}
);
} else
self.restoreDraft();
}
});
// Enable/disable restoredraft button depending on if there is a draft stored or not
ed.onNodeChange.add(function() {
var controlManager = ed.controlManager;
if (controlManager.get(RESTORE_DRAFT))
controlManager.setDisabled(RESTORE_DRAFT, !self.hasDraft());
});
ed.onInit.add(function() {
// Check if the user added the restore button, then setup auto storage logic
if (ed.controlManager.get(RESTORE_DRAFT)) {
// Setup storage engine
self.setupStorage(ed);
// Auto save contents each interval time
setInterval(function() {
if (!ed.removed) {
self.storeDraft();
ed.nodeChanged();
}
}, settings.autosave_interval);
}
});
/**
* This event gets fired when a draft is stored to local storage.
*
* @event onStoreDraft
* @param {tinymce.plugins.AutoSave} sender Plugin instance sending the event.
* @param {Object} draft Draft object containing the HTML contents of the editor.
*/
self.onStoreDraft = new Dispatcher(self);
/**
* This event gets fired when a draft is restored from local storage.
*
* @event onStoreDraft
* @param {tinymce.plugins.AutoSave} sender Plugin instance sending the event.
* @param {Object} draft Draft object containing the HTML contents of the editor.
*/
self.onRestoreDraft = new Dispatcher(self);
/**
* This event gets fired when a draft removed/expired.
*
* @event onRemoveDraft
* @param {tinymce.plugins.AutoSave} sender Plugin instance sending the event.
* @param {Object} draft Draft object containing the HTML contents of the editor.
*/
self.onRemoveDraft = new Dispatcher(self);
// Add ask before unload dialog only add one unload handler
if (!unloadHandlerAdded) {
window.onbeforeunload = tinymce.plugins.AutoSave._beforeUnloadHandler;
unloadHandlerAdded = TRUE;
}
},
/**
* Returns information about the plugin as a name/value array.
* The current keys are longname, author, authorurl, infourl and version.
*
* @method getInfo
* @return {Object} Name/value array containing information about the plugin.
*/
getInfo : function() {
return {
longname : 'Auto save',
author : 'Moxiecode Systems AB',
authorurl : 'http://tinymce.moxiecode.com',
infourl : 'http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/autosave',
version : tinymce.majorVersion + "." + tinymce.minorVersion
};
},
/**
* Returns an expiration date UTC string.
*
* @method getExpDate
* @return {String} Expiration date UTC string.
*/
getExpDate : function() {
return new Date(
new Date().getTime() + this.editor.settings.autosave_retention
).toUTCString();
},
/**
* This method will setup the storage engine. If the browser has support for it.
*
* @method setupStorage
*/
setupStorage : function(ed) {
var self = this, testKey = PLUGIN_NAME + '_test', testVal = "OK";
self.key = PLUGIN_NAME + ed.id;
// Loop though each storage engine type until we find one that works
tinymce.each([
function() {
// Try HTML5 Local Storage
if (localStorage) {
localStorage.setItem(testKey, testVal);
if (localStorage.getItem(testKey) === testVal) {
localStorage.removeItem(testKey);
return localStorage;
}
}
},
function() {
// Try HTML5 Session Storage
if (sessionStorage) {
sessionStorage.setItem(testKey, testVal);
if (sessionStorage.getItem(testKey) === testVal) {
sessionStorage.removeItem(testKey);
return sessionStorage;
}
}
},
function() {
// Try IE userData
if (tinymce.isIE) {
ed.getElement().style.behavior = "url('#default#userData')";
// Fake localStorage on old IE
return {
autoExpires : TRUE,
setItem : function(key, value) {
var userDataElement = ed.getElement();
userDataElement.setAttribute(key, value);
userDataElement.expires = self.getExpDate();
try {
userDataElement.save("TinyMCE");
} catch (e) {
// Ignore, saving might fail if "Userdata Persistence" is disabled in IE
}
},
getItem : function(key) {
var userDataElement = ed.getElement();
try {
userDataElement.load("TinyMCE");
return userDataElement.getAttribute(key);
} catch (e) {
// Ignore, loading might fail if "Userdata Persistence" is disabled in IE
return null;
}
},
removeItem : function(key) {
ed.getElement().removeAttribute(key);
}
};
}
},
], function(setup) {
// Try executing each function to find a suitable storage engine
try {
self.storage = setup();
if (self.storage)
return false;
} catch (e) {
// Ignore
}
});
},
/**
* This method will store the current contents in the the storage engine.
*
* @method storeDraft
*/
storeDraft : function() {
var self = this, storage = self.storage, editor = self.editor, expires, content;
// Is the contents dirty
if (storage) {
// If there is no existing key and the contents hasn't been changed since
// it's original value then there is no point in saving a draft
if (!storage.getItem(self.key) && !editor.isDirty())
return;
// Store contents if the contents if longer than the minlength of characters
content = editor.getContent({draft: true});
if (content.length > editor.settings.autosave_minlength) {
expires = self.getExpDate();
// Store expiration date if needed IE userData has auto expire built in
if (!self.storage.autoExpires)
self.storage.setItem(self.key + "_expires", expires);
self.storage.setItem(self.key, content);
self.onStoreDraft.dispatch(self, {
expires : expires,
content : content
});
}
}
},
/**
* This method will restore the contents from the storage engine back to the editor.
*
* @method restoreDraft
*/
restoreDraft : function() {
var self = this, storage = self.storage, content;
if (storage) {
content = storage.getItem(self.key);
if (content) {
self.editor.setContent(content);
self.onRestoreDraft.dispatch(self, {
content : content
});
}
}
},
/**
* This method will return true/false if there is a local storage draft available.
*
* @method hasDraft
* @return {boolean} true/false state if there is a local draft.
*/
hasDraft : function() {
var self = this, storage = self.storage, expDate, exists;
if (storage) {
// Does the item exist at all
exists = !!storage.getItem(self.key);
if (exists) {
// Storage needs autoexpire
if (!self.storage.autoExpires) {
expDate = new Date(storage.getItem(self.key + "_expires"));
// Contents hasn't expired
if (new Date().getTime() < expDate.getTime())
return TRUE;
// Remove it if it has
self.removeDraft();
} else
return TRUE;
}
}
return false;
},
/**
* Removes the currently stored draft.
*
* @method removeDraft
*/
removeDraft : function() {
var self = this, storage = self.storage, key = self.key, content;
if (storage) {
// Get current contents and remove the existing draft
content = storage.getItem(key);
storage.removeItem(key);
storage.removeItem(key + "_expires");
// Dispatch remove event if we had any contents
if (content) {
self.onRemoveDraft.dispatch(self, {
content : content
});
}
}
},
"static" : {
// Internal unload handler will be called before the page is unloaded
_beforeUnloadHandler : function(e) {
var msg;
tinymce.each(tinyMCE.editors, function(ed) {
// Store a draft for each editor instance
if (ed.plugins.autosave)
ed.plugins.autosave.storeDraft();
// Never ask in fullscreen mode
if (ed.getParam("fullscreen_is_enabled"))
return;
// Setup a return message if the editor is dirty
if (!msg && ed.isDirty() && ed.getParam("autosave_ask_before_unload"))
msg = ed.getLang("autosave.unload_msg");
});
return msg;
}
}
});
tinymce.PluginManager.add('autosave', tinymce.plugins.AutoSave);
})(tinymce);

View File

@ -1 +0,0 @@
(function(){tinymce.create("tinymce.plugins.BBCodePlugin",{init:function(a,b){var d=this,c=a.getParam("bbcode_dialect","punbb").toLowerCase();a.onBeforeSetContent.add(function(e,f){f.content=d["_"+c+"_bbcode2html"](f.content)});a.onPostProcess.add(function(e,f){if(f.set){f.content=d["_"+c+"_bbcode2html"](f.content)}if(f.get){f.content=d["_"+c+"_html2bbcode"](f.content)}})},getInfo:function(){return{longname:"BBCode Plugin",author:"Moxiecode Systems AB",authorurl:"http://tinymce.moxiecode.com",infourl:"http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/bbcode",version:tinymce.majorVersion+"."+tinymce.minorVersion}},_punbb_html2bbcode:function(a){a=tinymce.trim(a);function b(c,d){a=a.replace(c,d)}b(/<a.*?href=\"(.*?)\".*?>(.*?)<\/a>/gi,"[url=$1]$2[/url]");b(/<font.*?color=\"(.*?)\".*?class=\"codeStyle\".*?>(.*?)<\/font>/gi,"[code][color=$1]$2[/color][/code]");b(/<font.*?color=\"(.*?)\".*?class=\"quoteStyle\".*?>(.*?)<\/font>/gi,"[quote][color=$1]$2[/color][/quote]");b(/<font.*?class=\"codeStyle\".*?color=\"(.*?)\".*?>(.*?)<\/font>/gi,"[code][color=$1]$2[/color][/code]");b(/<font.*?class=\"quoteStyle\".*?color=\"(.*?)\".*?>(.*?)<\/font>/gi,"[quote][color=$1]$2[/color][/quote]");b(/<span style=\"color: ?(.*?);\">(.*?)<\/span>/gi,"[color=$1]$2[/color]");b(/<font.*?color=\"(.*?)\".*?>(.*?)<\/font>/gi,"[color=$1]$2[/color]");b(/<span style=\"font-size:(.*?);\">(.*?)<\/span>/gi,"[size=$1]$2[/size]");b(/<font>(.*?)<\/font>/gi,"$1");b(/<img.*?src=\"(.*?)\".*?\/>/gi,"[img]$1[/img]");b(/<span class=\"codeStyle\">(.*?)<\/span>/gi,"[code]$1[/code]");b(/<span class=\"quoteStyle\">(.*?)<\/span>/gi,"[quote]$1[/quote]");b(/<strong class=\"codeStyle\">(.*?)<\/strong>/gi,"[code][b]$1[/b][/code]");b(/<strong class=\"quoteStyle\">(.*?)<\/strong>/gi,"[quote][b]$1[/b][/quote]");b(/<em class=\"codeStyle\">(.*?)<\/em>/gi,"[code][i]$1[/i][/code]");b(/<em class=\"quoteStyle\">(.*?)<\/em>/gi,"[quote][i]$1[/i][/quote]");b(/<u class=\"codeStyle\">(.*?)<\/u>/gi,"[code][u]$1[/u][/code]");b(/<u class=\"quoteStyle\">(.*?)<\/u>/gi,"[quote][u]$1[/u][/quote]");b(/<\/(strong|b)>/gi,"[/b]");b(/<(strong|b)>/gi,"[b]");b(/<\/(em|i)>/gi,"[/i]");b(/<(em|i)>/gi,"[i]");b(/<\/u>/gi,"[/u]");b(/<span style=\"text-decoration: ?underline;\">(.*?)<\/span>/gi,"[u]$1[/u]");b(/<u>/gi,"[u]");b(/<blockquote[^>]*>/gi,"[quote]");b(/<\/blockquote>/gi,"[/quote]");b(/<br \/>/gi,"\n");b(/<br\/>/gi,"\n");b(/<br>/gi,"\n");b(/<p>/gi,"");b(/<\/p>/gi,"\n");b(/&nbsp;|\u00a0/gi," ");b(/&quot;/gi,'"');b(/&lt;/gi,"<");b(/&gt;/gi,">");b(/&amp;/gi,"&");return a},_punbb_bbcode2html:function(a){a=tinymce.trim(a);function b(c,d){a=a.replace(c,d)}b(/\n/gi,"<br />");b(/\[b\]/gi,"<strong>");b(/\[\/b\]/gi,"</strong>");b(/\[i\]/gi,"<em>");b(/\[\/i\]/gi,"</em>");b(/\[u\]/gi,"<u>");b(/\[\/u\]/gi,"</u>");b(/\[url=([^\]]+)\](.*?)\[\/url\]/gi,'<a href="$1">$2</a>');b(/\[url\](.*?)\[\/url\]/gi,'<a href="$1">$1</a>');b(/\[img\](.*?)\[\/img\]/gi,'<img src="$1" />');b(/\[color=(.*?)\](.*?)\[\/color\]/gi,'<font color="$1">$2</font>');b(/\[code\](.*?)\[\/code\]/gi,'<span class="codeStyle">$1</span>&nbsp;');b(/\[quote.*?\](.*?)\[\/quote\]/gi,'<span class="quoteStyle">$1</span>&nbsp;');return a}});tinymce.PluginManager.add("bbcode",tinymce.plugins.BBCodePlugin)})();

View File

@ -1 +0,0 @@
(function(){var a=tinymce.dom.Event,c=tinymce.each,b=tinymce.DOM;tinymce.create("tinymce.plugins.ContextMenu",{init:function(f){var i=this,g,d,j,e;i.editor=f;d=f.settings.contextmenu_never_use_native;i.onContextMenu=new tinymce.util.Dispatcher(this);e=function(k){h(f,k)};g=f.onContextMenu.add(function(k,l){if((j!==0?j:l.ctrlKey)&&!d){return}a.cancel(l);if(l.target.nodeName=="IMG"){k.selection.select(l.target)}i._getMenu(k).showMenu(l.clientX||l.pageX,l.clientY||l.pageY);a.add(k.getDoc(),"click",e);k.nodeChanged()});f.onRemove.add(function(){if(i._menu){i._menu.removeAll()}});function h(k,l){j=0;if(l&&l.button==2){j=l.ctrlKey;return}if(i._menu){i._menu.removeAll();i._menu.destroy();a.remove(k.getDoc(),"click",e);i._menu=null}}f.onMouseDown.add(h);f.onKeyDown.add(h);f.onKeyDown.add(function(k,l){if(l.shiftKey&&!l.ctrlKey&&!l.altKey&&l.keyCode===121){a.cancel(l);g(k,l)}})},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(e){var g=this,d=g._menu,j=e.selection,f=j.isCollapsed(),h=j.getNode()||e.getBody(),i,k;if(d){d.removeAll();d.destroy()}k=b.getPos(e.getContentAreaContainer());d=e.controlManager.createDropMenu("contextmenu",{offset_x:k.x+e.getParam("contextmenu_offset_x",0),offset_y:k.y+e.getParam("contextmenu_offset_y",0),constrain:1,keyboard_focus:true});g._menu=d;d.add({title:"advanced.cut_desc",icon:"cut",cmd:"Cut"}).setDisabled(f);d.add({title:"advanced.copy_desc",icon:"copy",cmd:"Copy"}).setDisabled(f);d.add({title:"advanced.paste_desc",icon:"paste",cmd:"Paste"});if((h.nodeName=="A"&&!e.dom.getAttrib(h,"name"))||!f){d.addSeparator();d.add({title:"advanced.link_desc",icon:"link",cmd:e.plugins.advlink?"mceAdvLink":"mceLink",ui:true});d.add({title:"advanced.unlink_desc",icon:"unlink",cmd:"UnLink"})}d.addSeparator();d.add({title:"advanced.image_desc",icon:"image",cmd:e.plugins.advimage?"mceAdvImage":"mceImage",ui:true});d.addSeparator();i=d.addMenu({title:"contextmenu.align"});i.add({title:"contextmenu.left",icon:"justifyleft",cmd:"JustifyLeft"});i.add({title:"contextmenu.center",icon:"justifycenter",cmd:"JustifyCenter"});i.add({title:"contextmenu.right",icon:"justifyright",cmd:"JustifyRight"});i.add({title:"contextmenu.full",icon:"justifyfull",cmd:"JustifyFull"});g.onContextMenu.dispatch(g,d,h,f);return d}});tinymce.PluginManager.add("contextmenu",tinymce.plugins.ContextMenu)})();

View File

@ -1,163 +0,0 @@
/**
* editor_plugin_src.js
*
* Copyright 2009, Moxiecode Systems AB
* Released under LGPL License.
*
* License: http://tinymce.moxiecode.com/license
* Contributing: http://tinymce.moxiecode.com/contributing
*/
(function() {
var Event = tinymce.dom.Event, each = tinymce.each, DOM = tinymce.DOM;
/**
* This plugin a context menu to TinyMCE editor instances.
*
* @class tinymce.plugins.ContextMenu
*/
tinymce.create('tinymce.plugins.ContextMenu', {
/**
* Initializes the plugin, this will be executed after the plugin has been created.
* This call is done before the editor instance has finished it's initialization so use the onInit event
* of the editor instance to intercept that event.
*
* @method init
* @param {tinymce.Editor} ed Editor instance that the plugin is initialized in.
* @param {string} url Absolute URL to where the plugin is located.
*/
init : function(ed) {
var t = this, showMenu, contextmenuNeverUseNative, realCtrlKey, hideMenu;
t.editor = ed;
contextmenuNeverUseNative = ed.settings.contextmenu_never_use_native;
/**
* This event gets fired when the context menu is shown.
*
* @event onContextMenu
* @param {tinymce.plugins.ContextMenu} sender Plugin instance sending the event.
* @param {tinymce.ui.DropMenu} menu Drop down menu to fill with more items if needed.
*/
t.onContextMenu = new tinymce.util.Dispatcher(this);
hideMenu = function(e) {
hide(ed, e);
};
showMenu = ed.onContextMenu.add(function(ed, e) {
// Block TinyMCE menu on ctrlKey and work around Safari issue
if ((realCtrlKey !== 0 ? realCtrlKey : e.ctrlKey) && !contextmenuNeverUseNative)
return;
Event.cancel(e);
// Select the image if it's clicked. WebKit would other wise expand the selection
if (e.target.nodeName == 'IMG')
ed.selection.select(e.target);
t._getMenu(ed).showMenu(e.clientX || e.pageX, e.clientY || e.pageY);
Event.add(ed.getDoc(), 'click', hideMenu);
ed.nodeChanged();
});
ed.onRemove.add(function() {
if (t._menu)
t._menu.removeAll();
});
function hide(ed, e) {
realCtrlKey = 0;
// Since the contextmenu event moves
// the selection we need to store it away
if (e && e.button == 2) {
realCtrlKey = e.ctrlKey;
return;
}
if (t._menu) {
t._menu.removeAll();
t._menu.destroy();
Event.remove(ed.getDoc(), 'click', hideMenu);
t._menu = null;
}
};
ed.onMouseDown.add(hide);
ed.onKeyDown.add(hide);
ed.onKeyDown.add(function(ed, e) {
if (e.shiftKey && !e.ctrlKey && !e.altKey && e.keyCode === 121) {
Event.cancel(e);
showMenu(ed, e);
}
});
},
/**
* Returns information about the plugin as a name/value array.
* The current keys are longname, author, authorurl, infourl and version.
*
* @method getInfo
* @return {Object} Name/value array containing information about the plugin.
*/
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, p;
if (m) {
m.removeAll();
m.destroy();
}
p = DOM.getPos(ed.getContentAreaContainer());
m = ed.controlManager.createDropMenu('contextmenu', {
offset_x : p.x + ed.getParam('contextmenu_offset_x', 0),
offset_y : p.y + ed.getParam('contextmenu_offset_y', 0),
constrain : 1,
keyboard_focus: true
});
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);
})();

View File

@ -1 +0,0 @@
(function(){tinymce.create("tinymce.plugins.Directionality",{init:function(b,c){var d=this;d.editor=b;function a(e){var h=b.dom,g,f=b.selection.getSelectedBlocks();if(f.length){g=h.getAttrib(f[0],"dir");tinymce.each(f,function(i){if(!h.getParent(i.parentNode,"*[dir='"+e+"']",h.getRoot())){if(g!=e){h.setAttrib(i,"dir",e)}else{h.setAttrib(i,"dir",null)}}});b.nodeChanged()}}b.addCommand("mceDirectionLTR",function(){a("ltr")});b.addCommand("mceDirectionRTL",function(){a("rtl")});b.addButton("ltr",{title:"directionality.ltr_desc",cmd:"mceDirectionLTR"});b.addButton("rtl",{title:"directionality.rtl_desc",cmd:"mceDirectionRTL"});b.onNodeChange.add(d._nodeChange,d)},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(b,a,e){var d=b.dom,c;e=d.getParent(e,d.isBlock);if(!e){a.setDisabled("ltr",1);a.setDisabled("rtl",1);return}c=d.getAttrib(e,"dir");a.setActive("ltr",c=="ltr");a.setDisabled("ltr",0);a.setActive("rtl",c=="rtl");a.setDisabled("rtl",0)}});tinymce.PluginManager.add("directionality",tinymce.plugins.Directionality)})();

View File

@ -1,85 +0,0 @@
/**
* editor_plugin_src.js
*
* Copyright 2009, Moxiecode Systems AB
* Released under LGPL License.
*
* License: http://tinymce.moxiecode.com/license
* Contributing: http://tinymce.moxiecode.com/contributing
*/
(function() {
tinymce.create('tinymce.plugins.Directionality', {
init : function(ed, url) {
var t = this;
t.editor = ed;
function setDir(dir) {
var dom = ed.dom, curDir, blocks = ed.selection.getSelectedBlocks();
if (blocks.length) {
curDir = dom.getAttrib(blocks[0], "dir");
tinymce.each(blocks, function(block) {
// Add dir to block if the parent block doesn't already have that dir
if (!dom.getParent(block.parentNode, "*[dir='" + dir + "']", dom.getRoot())) {
if (curDir != dir) {
dom.setAttrib(block, "dir", dir);
} else {
dom.setAttrib(block, "dir", null);
}
}
});
ed.nodeChanged();
}
}
ed.addCommand('mceDirectionLTR', function() {
setDir("ltr");
});
ed.addCommand('mceDirectionRTL', function() {
setDir("rtl");
});
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);
})();

View File

@ -1 +0,0 @@
(function(a){a.create("tinymce.plugins.EmotionsPlugin",{init:function(b,c){b.addCommand("mceEmotion",function(){b.windowManager.open({file:c+"/emotions.htm",width:250+parseInt(b.getLang("emotions.delta_width",0)),height:160+parseInt(b.getLang("emotions.delta_height",0)),inline:1},{plugin_url:c})});b.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:a.majorVersion+"."+a.minorVersion}}});a.PluginManager.add("emotions",a.plugins.EmotionsPlugin)})(tinymce);

View File

@ -1,43 +0,0 @@
/**
* editor_plugin_src.js
*
* Copyright 2009, Moxiecode Systems AB
* Released under LGPL License.
*
* License: http://tinymce.moxiecode.com/license
* Contributing: http://tinymce.moxiecode.com/contributing
*/
(function(tinymce) {
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
});
});
// Register buttons
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
};
}
});
// Register plugin
tinymce.PluginManager.add('emotions', tinymce.plugins.EmotionsPlugin);
})(tinymce);

View File

@ -1,42 +0,0 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>{#emotions_dlg.title}</title>
<script type="text/javascript" src="../../tiny_mce_popup.js"></script>
<script type="text/javascript" src="js/emotions.js"></script>
</head>
<body style="display: none" role="application" aria-labelledby="app_title">
<span style="display:none;" id="app_title">{#emotions_dlg.title}</span>
<div align="center">
<div class="title">{#emotions_dlg.title}:<br /><br /></div>
<table id="emoticon_table" role="presentation" border="0" cellspacing="0" cellpadding="4">
<tr>
<td><a class="emoticon_link" role="button" title="{#emotions_dlg.cool}. {#emotions_dlg.usage}" 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}. {#emotions_dlg.usage}" /></a></td>
<td><a class="emoticon_link" role="button" title="{#emotions_dlg.cry}. {#emotions_dlg.usage}" 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}. {#emotions_dlg.usage}" /></a></td>
<td><a class="emoticon_link" role="button" title="{#emotions_dlg.embarassed}. {#emotions_dlg.usage}" 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}. {#emotions_dlg.usage}" /></a></td>
<td><a class="emoticon_link" role="button" title="{#emotions_dlg.foot_in_mouth}. {#emotions_dlg.usage}" 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}. {#emotions_dlg.usage}" /></a></td>
</tr>
<tr>
<td><a class="emoticon_link" role="button" title="{#emotions_dlg.frown}. {#emotions_dlg.usage}" 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}. {#emotions_dlg.usage}" /></a></td>
<td><a class="emoticon_link" role="button" title="{#emotions_dlg.innocent}. {#emotions_dlg.usage}" 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}. {#emotions_dlg.usage}" /></a></td>
<td><a class="emoticon_link" role="button" title="{#emotions_dlg.kiss}. {#emotions_dlg.usage}" 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}. {#emotions_dlg.usage}" /></a></td>
<td><a class="emoticon_link" role="button" title="{#emotions_dlg.laughing}. {#emotions_dlg.usage}" 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}. {#emotions_dlg.usage}" /></a></td>
</tr>
<tr>
<td><a class="emoticon_link" role="button" title="{#emotions_dlg.money_mouth}. {#emotions_dlg.usage}" 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}. {#emotions_dlg.usage}"/></a></td>
<td><a class="emoticon_link" role="button" title="{#emotions_dlg.sealed}. {#emotions_dlg.usage}" 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}. {#emotions_dlg.usage}" /></a></td>
<td><a class="emoticon_link" role="button" title="{#emotions_dlg.smile}. {#emotions_dlg.usage}" 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}. {#emotions_dlg.usage}" /></a></td>
<td><a class="emoticon_link" role="button" title="{#emotions_dlg.surprised}. {#emotions_dlg.usage}" 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}. {#emotions_dlg.usage}" /></a></td>
</tr>
<tr>
<td><a class="emoticon_link" role="button" title="{#emotions_dlg.tongue_out}. {#emotions_dlg.usage}" 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}. {#emotions_dlg.usage}" /></a></td>
<td><a class="emoticon_link" role="button" title="{#emotions_dlg.undecided}. {#emotions_dlg.usage}" 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}. {#emotions_dlg.usage}" /></a></td>
<td><a class="emoticon_link" role="button" title="{#emotions_dlg.wink}. {#emotions_dlg.usage}" 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}. {#emotions_dlg.usage}" /></a></td>
<td><a class="emoticon_link" role="button" title="{#emotions_dlg.yell}. {#emotions_dlg.usage}" 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}. {#emotions_dlg.usage}" /></a></td>
</tr>
</table>
<div>{#emotions_dlg.usage}</div>
</div>
</body>
</html>

View File

@ -1,43 +0,0 @@
tinyMCEPopup.requireLangPack();
var EmotionsDialog = {
addKeyboardNavigation: function(){
var tableElm, cells, settings;
cells = tinyMCEPopup.dom.select("a.emoticon_link", "emoticon_table");
settings ={
root: "emoticon_table",
items: cells
};
cells[0].tabindex=0;
tinyMCEPopup.dom.addClass(cells[0], "mceFocus");
if (tinymce.isGecko) {
cells[0].focus();
} else {
setTimeout(function(){
cells[0].focus();
}, 100);
}
tinyMCEPopup.editor.windowManager.createInstance('tinymce.ui.KeyboardNavigation', settings, tinyMCEPopup.dom);
},
init : function(ed) {
tinyMCEPopup.resizeToInnerSize();
this.addKeyboardNavigation();
},
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);

View File

@ -1 +0,0 @@
tinyMCE.addI18n('en.emotions_dlg',{cry:"Cry",cool:"Cool",desc:"Emotions",title:"Insert Emotion",usage:"Use left and right arrows to navigate.",yell:"Yell",wink:"Wink",undecided:"Undecided","tongue_out":"Tongue Out",surprised:"Surprised",smile:"Smile",sealed:"Sealed","money_mouth":"Money Mouth",laughing:"Laughing",kiss:"Kiss",innocent:"Innocent",frown:"Frown","foot_in_mouth":"Foot in Mouth",embarassed:"Embarassed"});

View File

@ -1,22 +0,0 @@
<!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>{#example_dlg.title}</title>
<script type="text/javascript" src="../../tiny_mce_popup.js"></script>
<script type="text/javascript" src="js/dialog.js"></script>
</head>
<body>
<form onsubmit="ExampleDialog.insert();return false;" action="#">
<p>Here is a example dialog.</p>
<p>Selected text: <input id="someval" name="someval" type="text" class="text" /></p>
<p>Custom arg: <input id="somearg" name="somearg" type="text" class="text" /></p>
<div class="mceActionPanel">
<input type="button" id="insert" name="insert" value="{#insert}" onclick="ExampleDialog.insert();" />
<input type="button" id="cancel" name="cancel" value="{#cancel}" onclick="tinyMCEPopup.close();" />
</div>
</form>
</body>
</html>

View File

@ -1 +0,0 @@
(function(){tinymce.PluginManager.requireLangPack("example");tinymce.create("tinymce.plugins.ExamplePlugin",{init:function(a,b){a.addCommand("mceExample",function(){a.windowManager.open({file:b+"/dialog.htm",width:320+parseInt(a.getLang("example.delta_width",0)),height:120+parseInt(a.getLang("example.delta_height",0)),inline:1},{plugin_url:b,some_custom_arg:"custom arg"})});a.addButton("example",{title:"example.desc",cmd:"mceExample",image:b+"/img/example.gif"});a.onNodeChange.add(function(d,c,e){c.setActive("example",e.nodeName=="IMG")})},createControl:function(b,a){return null},getInfo:function(){return{longname:"Example plugin",author:"Some author",authorurl:"http://tinymce.moxiecode.com",infourl:"http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/example",version:"1.0"}}});tinymce.PluginManager.add("example",tinymce.plugins.ExamplePlugin)})();

View File

@ -1,84 +0,0 @@
/**
* editor_plugin_src.js
*
* Copyright 2009, Moxiecode Systems AB
* Released under LGPL License.
*
* License: http://tinymce.moxiecode.com/license
* Contributing: http://tinymce.moxiecode.com/contributing
*/
(function() {
// Load plugin specific language pack
tinymce.PluginManager.requireLangPack('example');
tinymce.create('tinymce.plugins.ExamplePlugin', {
/**
* Initializes the plugin, this will be executed after the plugin has been created.
* This call is done before the editor instance has finished it's initialization so use the onInit event
* of the editor instance to intercept that event.
*
* @param {tinymce.Editor} ed Editor instance that the plugin is initialized in.
* @param {string} url Absolute URL to where the plugin is located.
*/
init : function(ed, url) {
// Register the command so that it can be invoked by using tinyMCE.activeEditor.execCommand('mceExample');
ed.addCommand('mceExample', function() {
ed.windowManager.open({
file : url + '/dialog.htm',
width : 320 + parseInt(ed.getLang('example.delta_width', 0)),
height : 120 + parseInt(ed.getLang('example.delta_height', 0)),
inline : 1
}, {
plugin_url : url, // Plugin absolute URL
some_custom_arg : 'custom arg' // Custom argument
});
});
// Register example button
ed.addButton('example', {
title : 'example.desc',
cmd : 'mceExample',
image : url + '/img/example.gif'
});
// Add a node change handler, selects the button in the UI when a image is selected
ed.onNodeChange.add(function(ed, cm, n) {
cm.setActive('example', n.nodeName == 'IMG');
});
},
/**
* Creates control instances based in the incomming name. This method is normally not
* needed since the addButton method of the tinymce.Editor class is a more easy way of adding buttons
* but you sometimes need to create more complex controls like listboxes, split buttons etc then this
* method can be used to create those.
*
* @param {String} n Name of the control to create.
* @param {tinymce.ControlManager} cm Control manager to use inorder to create new control.
* @return {tinymce.ui.Control} New control instance or null if no control was created.
*/
createControl : function(n, cm) {
return null;
},
/**
* Returns information about the plugin as a name/value array.
* The current keys are longname, author, authorurl, infourl and version.
*
* @return {Object} Name/value array containing information about the plugin.
*/
getInfo : function() {
return {
longname : 'Example plugin',
author : 'Some author',
authorurl : 'http://tinymce.moxiecode.com',
infourl : 'http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/example',
version : "1.0"
};
}
});
// Register plugin
tinymce.PluginManager.add('example', tinymce.plugins.ExamplePlugin);
})();

Binary file not shown.

Before

Width:  |  Height:  |  Size: 87 B

View File

@ -1,19 +0,0 @@
tinyMCEPopup.requireLangPack();
var ExampleDialog = {
init : function() {
var f = document.forms[0];
// Get the selected contents as text and place it in the input
f.someval.value = tinyMCEPopup.editor.selection.getContent({format : 'text'});
f.somearg.value = tinyMCEPopup.getWindowArg('some_custom_arg');
},
insert : function() {
// Insert the contents from the input into the document
tinyMCEPopup.editor.execCommand('mceInsertContent', false, document.forms[0].someval.value);
tinyMCEPopup.close();
}
};
tinyMCEPopup.onInit.add(ExampleDialog.init, ExampleDialog);

View File

@ -1,3 +0,0 @@
tinyMCE.addI18n('en.example',{
desc : 'This is just a template button'
});

View File

@ -1,3 +0,0 @@
tinyMCE.addI18n('en.example_dlg',{
title : 'This is just a example title'
});

View File

@ -1 +0,0 @@
(function(){tinymce.create("tinymce.plugins.ExampleDependencyPlugin",{init:function(a,b){},getInfo:function(){return{longname:"Example Dependency plugin",author:"Some author",authorurl:"http://tinymce.moxiecode.com",infourl:"http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/example_dependency",version:"1.0"}}});tinymce.PluginManager.add("example_dependency",tinymce.plugins.ExampleDependencyPlugin,["example"])})();

View File

@ -1,50 +0,0 @@
/**
* editor_plugin_src.js
*
* Copyright 2009, Moxiecode Systems AB
* Released under LGPL License.
*
* License: http://tinymce.moxiecode.com/license
* Contributing: http://tinymce.moxiecode.com/contributing
*/
(function() {
tinymce.create('tinymce.plugins.ExampleDependencyPlugin', {
/**
* Initializes the plugin, this will be executed after the plugin has been created.
* This call is done before the editor instance has finished it's initialization so use the onInit event
* of the editor instance to intercept that event.
*
* @param {tinymce.Editor} ed Editor instance that the plugin is initialized in.
* @param {string} url Absolute URL to where the plugin is located.
*/
init : function(ed, url) {
},
/**
* Returns information about the plugin as a name/value array.
* The current keys are longname, author, authorurl, infourl and version.
*
* @return {Object} Name/value array containing information about the plugin.
*/
getInfo : function() {
return {
longname : 'Example Dependency plugin',
author : 'Some author',
authorurl : 'http://tinymce.moxiecode.com',
infourl : 'http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/example_dependency',
version : "1.0"
};
}
});
/**
* Register the plugin, specifying the list of the plugins that this plugin depends on. They are specified in a list, with the list loaded in order.
* plugins in this list will be initialised when this plugin is initialized. (before the init method is called).
* plugins in a depends list should typically be specified using the short name). If neccesary this can be done
* with an object which has the url to the plugin and the shortname.
*/
tinymce.PluginManager.add('example_dependency', tinymce.plugins.ExampleDependencyPlugin, ['example']);
})();

View File

@ -1,143 +0,0 @@
/* Hide the advanced tab */
#advanced_tab {
display: none;
}
#metatitle, #metakeywords, #metadescription, #metaauthor, #metacopyright {
width: 280px;
}
#doctype, #docencoding {
width: 200px;
}
#langcode {
width: 30px;
}
#bgimage {
width: 220px;
}
#fontface {
width: 240px;
}
#leftmargin, #rightmargin, #topmargin, #bottommargin {
width: 50px;
}
.panel_wrapper div.current {
height: 400px;
}
#stylesheet, #style {
width: 240px;
}
#doctypes {
width: 200px;
}
/* Head list classes */
.headlistwrapper {
width: 100%;
}
.selected {
border: 1px solid #0A246A;
background-color: #B6BDD2;
}
.toolbar {
width: 100%;
}
#headlist {
width: 100%;
margin-top: 3px;
font-size: 11px;
}
#info, #title_element, #meta_element, #script_element, #style_element, #base_element, #link_element, #comment_element, #unknown_element {
display: none;
}
#addmenu {
position: absolute;
border: 1px solid gray;
display: none;
z-index: 100;
background-color: white;
}
#addmenu a {
display: block;
width: 100%;
line-height: 20px;
text-decoration: none;
background-color: white;
}
#addmenu a:hover {
background-color: #B6BDD2;
color: black;
}
#addmenu span {
padding-left: 10px;
padding-right: 10px;
}
#updateElementPanel {
display: none;
}
#script_element .panel_wrapper div.current {
height: 108px;
}
#style_element .panel_wrapper div.current {
height: 108px;
}
#link_element .panel_wrapper div.current {
height: 140px;
}
#element_script_value {
width: 100%;
height: 100px;
}
#element_comment_value {
width: 100%;
height: 120px;
}
#element_style_value {
width: 100%;
height: 100px;
}
#element_title, #element_script_src, #element_meta_name, #element_meta_content, #element_base_href, #element_link_href, #element_link_title {
width: 250px;
}
.updateElementButton {
margin-top: 3px;
}
/* MSIE specific styles */
* html .addbutton, * html .removebutton, * html .moveupbutton, * html .movedownbutton {
width: 22px;
height: 22px;
}
textarea {
height: 55px;
}
.panel_wrapper div.current {height:420px;}

File diff suppressed because one or more lines are too long

View File

@ -1,405 +0,0 @@
/**
* editor_plugin_src.js
*
* Copyright 2009, Moxiecode Systems AB
* Released under LGPL License.
*
* License: http://tinymce.moxiecode.com/license
* Contributing: http://tinymce.moxiecode.com/contributing
*/
(function() {
var each = tinymce.each, Node = tinymce.html.Node;
tinymce.create('tinymce.plugins.FullPagePlugin', {
init : function(ed, url) {
var t = this;
t.editor = ed;
// Register commands
ed.addCommand('mceFullPageProperties', function() {
ed.windowManager.open({
file : url + '/fullpage.htm',
width : 430 + parseInt(ed.getLang('fullpage.delta_width', 0)),
height : 495 + parseInt(ed.getLang('fullpage.delta_height', 0)),
inline : 1
}, {
plugin_url : url,
data : t._htmlToData()
});
});
// Register buttons
ed.addButton('fullpage', {title : 'fullpage.desc', cmd : 'mceFullPageProperties'});
ed.onBeforeSetContent.add(t._setContent, t);
ed.onGetContent.add(t._getContent, t);
},
getInfo : function() {
return {
longname : 'Fullpage',
author : 'Moxiecode Systems AB',
authorurl : 'http://tinymce.moxiecode.com',
infourl : 'http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/fullpage',
version : tinymce.majorVersion + "." + tinymce.minorVersion
};
},
// Private plugin internal methods
_htmlToData : function() {
var headerFragment = this._parseHeader(), data = {}, nodes, elm, matches, editor = this.editor;
function getAttr(elm, name) {
var value = elm.attr(name);
return value || '';
};
// Default some values
data.fontface = editor.getParam("fullpage_default_fontface", "");
data.fontsize = editor.getParam("fullpage_default_fontsize", "");
// Parse XML PI
elm = headerFragment.firstChild;
if (elm.type == 7) {
data.xml_pi = true;
matches = /encoding="([^"]+)"/.exec(elm.value);
if (matches)
data.docencoding = matches[1];
}
// Parse doctype
elm = headerFragment.getAll('#doctype')[0];
if (elm)
data.doctype = '<!DOCTYPE' + elm.value + ">";
// Parse title element
elm = headerFragment.getAll('title')[0];
if (elm && elm.firstChild) {
data.metatitle = elm.firstChild.value;
}
// Parse meta elements
each(headerFragment.getAll('meta'), function(meta) {
var name = meta.attr('name'), httpEquiv = meta.attr('http-equiv'), matches;
if (name)
data['meta' + name.toLowerCase()] = meta.attr('content');
else if (httpEquiv == "Content-Type") {
matches = /charset\s*=\s*(.*)\s*/gi.exec(meta.attr('content'));
if (matches)
data.docencoding = matches[1];
}
});
// Parse html attribs
elm = headerFragment.getAll('html')[0];
if (elm)
data.langcode = getAttr(elm, 'lang') || getAttr(elm, 'xml:lang');
// Parse stylesheet
elm = headerFragment.getAll('link')[0];
if (elm && elm.attr('rel') == 'stylesheet')
data.stylesheet = elm.attr('href');
// Parse body parts
elm = headerFragment.getAll('body')[0];
if (elm) {
data.langdir = getAttr(elm, 'dir');
data.style = getAttr(elm, 'style');
data.visited_color = getAttr(elm, 'vlink');
data.link_color = getAttr(elm, 'link');
data.active_color = getAttr(elm, 'alink');
}
return data;
},
_dataToHtml : function(data) {
var headerFragment, headElement, html, elm, value, dom = this.editor.dom;
function setAttr(elm, name, value) {
elm.attr(name, value ? value : undefined);
};
function addHeadNode(node) {
if (headElement.firstChild)
headElement.insert(node, headElement.firstChild);
else
headElement.append(node);
};
headerFragment = this._parseHeader();
headElement = headerFragment.getAll('head')[0];
if (!headElement) {
elm = headerFragment.getAll('html')[0];
headElement = new Node('head', 1);
if (elm.firstChild)
elm.insert(headElement, elm.firstChild, true);
else
elm.append(headElement);
}
// Add/update/remove XML-PI
elm = headerFragment.firstChild;
if (data.xml_pi) {
value = 'version="1.0"';
if (data.docencoding)
value += ' encoding="' + data.docencoding + '"';
if (elm.type != 7) {
elm = new Node('xml', 7);
headerFragment.insert(elm, headerFragment.firstChild, true);
}
elm.value = value;
} else if (elm && elm.type == 7)
elm.remove();
// Add/update/remove doctype
elm = headerFragment.getAll('#doctype')[0];
if (data.doctype) {
if (!elm) {
elm = new Node('#doctype', 10);
if (data.xml_pi)
headerFragment.insert(elm, headerFragment.firstChild);
else
addHeadNode(elm);
}
elm.value = data.doctype.substring(9, data.doctype.length - 1);
} else if (elm)
elm.remove();
// Add/update/remove title
elm = headerFragment.getAll('title')[0];
if (data.metatitle) {
if (!elm) {
elm = new Node('title', 1);
elm.append(new Node('#text', 3)).value = data.metatitle;
addHeadNode(elm);
}
}
// Add meta encoding
if (data.docencoding) {
elm = null;
each(headerFragment.getAll('meta'), function(meta) {
if (meta.attr('http-equiv') == 'Content-Type')
elm = meta;
});
if (!elm) {
elm = new Node('meta', 1);
elm.attr('http-equiv', 'Content-Type');
elm.shortEnded = true;
addHeadNode(elm);
}
elm.attr('content', 'text/html; charset=' + data.docencoding);
}
// Add/update/remove meta
each('keywords,description,author,copyright,robots'.split(','), function(name) {
var nodes = headerFragment.getAll('meta'), i, meta, value = data['meta' + name];
for (i = 0; i < nodes.length; i++) {
meta = nodes[i];
if (meta.attr('name') == name) {
if (value)
meta.attr('content', value);
else
meta.remove();
return;
}
}
if (value) {
elm = new Node('meta', 1);
elm.attr('name', name);
elm.attr('content', value);
elm.shortEnded = true;
addHeadNode(elm);
}
});
// Add/update/delete link
elm = headerFragment.getAll('link')[0];
if (elm && elm.attr('rel') == 'stylesheet') {
if (data.stylesheet)
elm.attr('href', data.stylesheet);
else
elm.remove();
} else if (data.stylesheet) {
elm = new Node('link', 1);
elm.attr({
rel : 'stylesheet',
text : 'text/css',
href : data.stylesheet
});
elm.shortEnded = true;
addHeadNode(elm);
}
// Update body attributes
elm = headerFragment.getAll('body')[0];
if (elm) {
setAttr(elm, 'dir', data.langdir);
setAttr(elm, 'style', data.style);
setAttr(elm, 'vlink', data.visited_color);
setAttr(elm, 'link', data.link_color);
setAttr(elm, 'alink', data.active_color);
// Update iframe body as well
dom.setAttribs(this.editor.getBody(), {
style : data.style,
dir : data.dir,
vLink : data.visited_color,
link : data.link_color,
aLink : data.active_color
});
}
// Set html attributes
elm = headerFragment.getAll('html')[0];
if (elm) {
setAttr(elm, 'lang', data.langcode);
setAttr(elm, 'xml:lang', data.langcode);
}
// Serialize header fragment and crop away body part
html = new tinymce.html.Serializer({
validate: false,
indent: true,
apply_source_formatting : true,
indent_before: 'head,html,body,meta,title,script,link,style',
indent_after: 'head,html,body,meta,title,script,link,style'
}).serialize(headerFragment);
this.head = html.substring(0, html.indexOf('</body>'));
},
_parseHeader : function() {
// Parse the contents with a DOM parser
return new tinymce.html.DomParser({
validate: false,
root_name: '#document'
}).parse(this.head);
},
_setContent : function(ed, o) {
var self = this, startPos, endPos, content = o.content, headerFragment, styles = '', dom = self.editor.dom, elm;
function low(s) {
return s.replace(/<\/?[A-Z]+/g, function(a) {
return a.toLowerCase();
})
};
// Ignore raw updated if we already have a head, this will fix issues with undo/redo keeping the head/foot separate
if (o.format == 'raw' && self.head)
return;
if (o.source_view && ed.getParam('fullpage_hide_in_source_view'))
return;
// Parse out head, body and footer
content = content.replace(/<(\/?)BODY/gi, '<$1body');
startPos = content.indexOf('<body');
if (startPos != -1) {
startPos = content.indexOf('>', startPos);
self.head = low(content.substring(0, startPos + 1));
endPos = content.indexOf('</body', startPos);
if (endPos == -1)
endPos = content.length;
o.content = content.substring(startPos + 1, endPos);
self.foot = low(content.substring(endPos));
} else {
self.head = this._getDefaultHeader();
self.foot = '\n</body>\n</html>';
}
// Parse header and update iframe
headerFragment = self._parseHeader();
each(headerFragment.getAll('style'), function(node) {
if (node.firstChild)
styles += node.firstChild.value;
});
elm = headerFragment.getAll('body')[0];
if (elm) {
dom.setAttribs(self.editor.getBody(), {
style : elm.attr('style') || '',
dir : elm.attr('dir') || '',
vLink : elm.attr('vlink') || '',
link : elm.attr('link') || '',
aLink : elm.attr('alink') || ''
});
}
dom.remove('fullpage_styles');
if (styles) {
dom.add(self.editor.getDoc().getElementsByTagName('head')[0], 'style', {id : 'fullpage_styles'}, styles);
// Needed for IE 6/7
elm = dom.get('fullpage_styles');
if (elm.styleSheet)
elm.styleSheet.cssText = styles;
}
},
_getDefaultHeader : function() {
var header = '', editor = this.editor, value, styles = '';
if (editor.getParam('fullpage_default_xml_pi'))
header += '<?xml version="1.0" encoding="' + editor.getParam('fullpage_default_encoding', 'ISO-8859-1') + '" ?>\n';
header += editor.getParam('fullpage_default_doctype', '<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">');
header += '\n<html>\n<head>\n';
if (value = editor.getParam('fullpage_default_title'))
header += '<title>' + value + '</title>\n';
if (value = editor.getParam('fullpage_default_encoding'))
header += '<meta http-equiv="Content-Type" content="text/html; charset=' + value + '" />\n';
if (value = editor.getParam('fullpage_default_font_family'))
styles += 'font-family: ' + value + ';';
if (value = editor.getParam('fullpage_default_font_size'))
styles += 'font-size: ' + value + ';';
if (value = editor.getParam('fullpage_default_text_color'))
styles += 'color: ' + value + ';';
header += '</head>\n<body' + (styles ? ' style="' + styles + '"' : '') + '>\n';
return header;
},
_getContent : function(ed, o) {
var self = this;
if (!o.source_view || !ed.getParam('fullpage_hide_in_source_view'))
o.content = tinymce.trim(self.head) + '\n' + tinymce.trim(o.content) + '\n' + tinymce.trim(self.foot);
}
});
// Register plugin
tinymce.PluginManager.add('fullpage', tinymce.plugins.FullPagePlugin);
})();

View File

@ -1,259 +0,0 @@
<!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>{#fullpage_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="js/fullpage.js"></script>
<link href="css/fullpage.css" rel="stylesheet" type="text/css" />
</head>
<body id="fullpage" style="display: none">
<form onsubmit="FullPageDialog.update();return false;" name="fullpage" action="#">
<div class="tabs">
<ul>
<li id="meta_tab" class="current"><span><a href="javascript:mcTabs.displayTab('meta_tab','meta_panel');" onmousedown="return false;">{#fullpage_dlg.meta_tab}</a></span></li>
<li id="appearance_tab"><span><a href="javascript:mcTabs.displayTab('appearance_tab','appearance_panel');" onmousedown="return false;">{#fullpage_dlg.appearance_tab}</a></span></li>
</ul>
</div>
<div class="panel_wrapper">
<div id="meta_panel" class="panel current">
<fieldset>
<legend>{#fullpage_dlg.meta_props}</legend>
<table border="0" cellpadding="4" cellspacing="0">
<tr>
<td class="nowrap"><label for="metatitle">{#fullpage_dlg.meta_title}</label>&nbsp;</td>
<td><input type="text" id="metatitle" name="metatitle" value="" class="mceFocus" /></td>
</tr>
<tr>
<td class="nowrap"><label for="metakeywords">{#fullpage_dlg.meta_keywords}</label>&nbsp;</td>
<td><textarea id="metakeywords" name="metakeywords" rows="4"></textarea></td>
</tr>
<tr>
<td class="nowrap"><label for="metadescription">{#fullpage_dlg.meta_description}</label>&nbsp;</td>
<td><textarea id="metadescription" name="metadescription" rows="4"></textarea></td>
</tr>
<tr>
<td class="nowrap"><label for="metaauthor">{#fullpage_dlg.author}</label>&nbsp;</td>
<td><input type="text" id="metaauthor" name="metaauthor" value="" /></td>
</tr>
<tr>
<td class="nowrap"><label for="metacopyright">{#fullpage_dlg.copyright}</label>&nbsp;</td>
<td><input type="text" id="metacopyright" name="metacopyright" value="" /></td>
</tr>
<tr>
<td class="nowrap"><label for="metarobots">{#fullpage_dlg.meta_robots}</label>&nbsp;</td>
<td>
<select id="metarobots" name="metarobots">
<option value="">{#not_set}</option>
<option value="index,follow">{#fullpage_dlg.meta_index_follow}</option>
<option value="index,nofollow">{#fullpage_dlg.meta_index_nofollow}</option>
<option value="noindex,follow">{#fullpage_dlg.meta_noindex_follow}</option>
<option value="noindex,nofollow">{#fullpage_dlg.meta_noindex_nofollow}</option>
</select>
</td>
</tr>
</table>
</fieldset>
<fieldset>
<legend>{#fullpage_dlg.langprops}</legend>
<table border="0" cellpadding="4" cellspacing="0">
<tr>
<td class="column1"><label for="docencoding">{#fullpage_dlg.encoding}</label></td>
<td>
<select id="docencoding" name="docencoding">
<option value="">{#not_set}</option>
</select>
</td>
</tr>
<tr>
<td class="nowrap"><label for="doctype">{#fullpage_dlg.doctypes}</label>&nbsp;</td>
<td>
<select id="doctype" name="doctype">
<option value="">{#not_set}</option>
</select>
</td>
</tr>
<tr>
<td class="nowrap"><label for="langcode">{#fullpage_dlg.langcode}</label>&nbsp;</td>
<td><input type="text" id="langcode" name="langcode" value="" /></td>
</tr>
<tr>
<td class="column1"><label for="langdir">{#fullpage_dlg.langdir}</label></td>
<td>
<select id="langdir" name="langdir">
<option value="">{#not_set}</option>
<option value="ltr">{#fullpage_dlg.ltr}</option>
<option value="rtl">{#fullpage_dlg.rtl}</option>
</select>
</td>
</tr>
<tr>
<td class="nowrap"><label for="xml_pi">{#fullpage_dlg.xml_pi}</label>&nbsp;</td>
<td><input type="checkbox" id="xml_pi" name="xml_pi" class="checkbox" /></td>
</tr>
</table>
</fieldset>
</div>
<div id="appearance_panel" class="panel">
<fieldset>
<legend>{#fullpage_dlg.appearance_textprops}</legend>
<table border="0" cellpadding="4" cellspacing="0">
<tr>
<td class="column1"><label for="fontface">{#fullpage_dlg.fontface}</label></td>
<td>
<select id="fontface" name="fontface" onchange="FullPageDialog.changedStyleProp();">
<option value="">{#not_set}</option>
</select>
</td>
</tr>
<tr>
<td class="column1"><label for="fontsize">{#fullpage_dlg.fontsize}</label></td>
<td>
<select id="fontsize" name="fontsize" onchange="FullPageDialog.changedStyleProp();">
<option value="">{#not_set}</option>
</select>
</td>
</tr>
<tr>
<td class="column1"><label for="textcolor">{#fullpage_dlg.textcolor}</label></td>
<td>
<table border="0" cellpadding="0" cellspacing="0">
<tr>
<td><input id="textcolor" name="textcolor" type="text" value="" size="9" onchange="updateColor('textcolor_pick','textcolor');FullPageDialog.changedStyleProp();" /></td>
<td id="textcolor_pickcontainer">&nbsp;</td>
</tr>
</table>
</td>
</tr>
</table>
</fieldset>
<fieldset>
<legend>{#fullpage_dlg.appearance_bgprops}</legend>
<table border="0" cellpadding="4" cellspacing="0">
<tr>
<td class="column1"><label for="bgimage">{#fullpage_dlg.bgimage}</label></td>
<td>
<table border="0" cellpadding="0" cellspacing="0">
<tr>
<td><input id="bgimage" name="bgimage" type="text" value="" onchange="FullPageDialog.changedStyleProp();" /></td>
<td id="bgimage_pickcontainer">&nbsp;</td>
</tr>
</table>
</td>
</tr>
<tr>
<td class="column1"><label for="bgcolor">{#fullpage_dlg.bgcolor}</label></td>
<td>
<table border="0" cellpadding="0" cellspacing="0">
<tr>
<td><input id="bgcolor" name="bgcolor" type="text" value="" size="9" onchange="updateColor('bgcolor_pick','bgcolor');FullPageDialog.changedStyleProp();" /></td>
<td id="bgcolor_pickcontainer">&nbsp;</td>
</tr>
</table>
</td>
</tr>
</table>
</fieldset>
<fieldset>
<legend>{#fullpage_dlg.appearance_marginprops}</legend>
<table border="0" cellpadding="4" cellspacing="0">
<tr>
<td class="column1"><label for="leftmargin">{#fullpage_dlg.left_margin}</label></td>
<td><input id="leftmargin" name="leftmargin" type="text" value="" onchange="FullPageDialog.changedStyleProp();" /></td>
<td class="column1"><label for="rightmargin">{#fullpage_dlg.right_margin}</label></td>
<td><input id="rightmargin" name="rightmargin" type="text" value="" onchange="FullPageDialog.changedStyleProp();" /></td>
</tr>
<tr>
<td class="column1"><label for="topmargin">{#fullpage_dlg.top_margin}</label></td>
<td><input id="topmargin" name="topmargin" type="text" value="" onchange="FullPageDialog.changedStyleProp();" /></td>
<td class="column1"><label for="bottommargin">{#fullpage_dlg.bottom_margin}</label></td>
<td><input id="bottommargin" name="bottommargin" type="text" value="" onchange="FullPageDialog.changedStyleProp();" /></td>
</tr>
</table>
</fieldset>
<fieldset>
<legend>{#fullpage_dlg.appearance_linkprops}</legend>
<table border="0" cellpadding="4" cellspacing="0">
<tr>
<td class="column1"><label for="link_color">{#fullpage_dlg.link_color}</label></td>
<td>
<table border="0" cellpadding="0" cellspacing="0">
<tr>
<td><input id="link_color" name="link_color" type="text" value="" size="9" onchange="updateColor('link_color_pick','link_color');FullPageDialog.changedStyleProp();" /></td>
<td id="link_color_pickcontainer">&nbsp;</td>
</tr>
</table>
</td>
<td class="column1"><label for="visited_color">{#fullpage_dlg.visited_color}</label></td>
<td>
<table border="0" cellpadding="0" cellspacing="0">
<tr>
<td><input id="visited_color" name="visited_color" type="text" value="" size="9" onchange="updateColor('visited_color_pick','visited_color');FullPageDialog.changedStyleProp();" /></td>
<td id="visited_color_pickcontainer">&nbsp;</td>
</tr>
</table>
</td>
</tr>
<tr>
<td class="column1"><label for="active_color">{#fullpage_dlg.active_color}</label></td>
<td>
<table border="0" cellpadding="0" cellspacing="0">
<tr>
<td><input id="active_color" name="active_color" type="text" value="" size="9" onchange="updateColor('active_color_pick','active_color');FullPageDialog.changedStyleProp();" /></td>
<td id="active_color_pickcontainer">&nbsp;</td>
</tr>
</table>
</td>
<td>&nbsp;</td>
<td>&nbsp;</td>
</tr>
</table>
</fieldset>
<fieldset>
<legend>{#fullpage_dlg.appearance_style}</legend>
<table border="0" cellpadding="4" cellspacing="0">
<tr>
<td class="column1"><label for="stylesheet">{#fullpage_dlg.stylesheet}</label></td>
<td><table border="0" cellpadding="0" cellspacing="0">
<tr>
<td><input id="stylesheet" name="stylesheet" type="text" value="" /></td>
<td id="stylesheet_browsercontainer">&nbsp;</td>
</tr>
</table></td>
</tr>
<tr>
<td class="column1"><label for="style">{#fullpage_dlg.style}</label></td>
<td><input id="style" name="style" type="text" value="" onchange="FullPageDialog.changedStyle();" /></td>
</tr>
</table>
</fieldset>
</div>
</div>
<div class="mceActionPanel">
<input type="submit" id="insert" name="update" value="{#update}" />
<input type="button" id="cancel" name="cancel" value="{#cancel}" onclick="tinyMCEPopup.close();" />
</div>
</form>
</body>
</html>

View File

@ -1,232 +0,0 @@
/**
* fullpage.js
*
* Copyright 2009, Moxiecode Systems AB
* Released under LGPL License.
*
* License: http://tinymce.moxiecode.com/license
* Contributing: http://tinymce.moxiecode.com/contributing
*/
(function() {
tinyMCEPopup.requireLangPack();
var defaultDocTypes =
'XHTML 1.0 Transitional=<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">,' +
'XHTML 1.0 Frameset=<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Frameset//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-frameset.dtd">,' +
'XHTML 1.0 Strict=<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">,' +
'XHTML 1.1=<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">,' +
'HTML 4.01 Transitional=<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">,' +
'HTML 4.01 Strict=<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">,' +
'HTML 4.01 Frameset=<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Frameset//EN" "http://www.w3.org/TR/html4/frameset.dtd">';
var defaultEncodings =
'Western european (iso-8859-1)=iso-8859-1,' +
'Central European (iso-8859-2)=iso-8859-2,' +
'Unicode (UTF-8)=utf-8,' +
'Chinese traditional (Big5)=big5,' +
'Cyrillic (iso-8859-5)=iso-8859-5,' +
'Japanese (iso-2022-jp)=iso-2022-jp,' +
'Greek (iso-8859-7)=iso-8859-7,' +
'Korean (iso-2022-kr)=iso-2022-kr,' +
'ASCII (us-ascii)=us-ascii';
var defaultFontNames = '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 defaultFontSizes = '10px,11px,12px,13px,14px,15px,16px';
function setVal(id, value) {
var elm = document.getElementById(id);
if (elm) {
value = value || '';
if (elm.nodeName == "SELECT")
selectByValue(document.forms[0], id, value);
else if (elm.type == "checkbox")
elm.checked = !!value;
else
elm.value = value;
}
};
function getVal(id) {
var elm = document.getElementById(id);
if (elm.nodeName == "SELECT")
return elm.options[elm.selectedIndex].value;
if (elm.type == "checkbox")
return elm.checked;
return elm.value;
};
window.FullPageDialog = {
changedStyle : function() {
var val, styles = tinyMCEPopup.editor.dom.parseStyle(getVal('style'));
setVal('fontface', styles['font-face']);
setVal('fontsize', styles['font-size']);
setVal('textcolor', styles['color']);
if (val = styles['background-image'])
setVal('bgimage', val.replace(new RegExp("url\\('?([^']*)'?\\)", 'gi'), "$1"));
else
setVal('bgimage', '');
setVal('bgcolor', styles['background-color']);
// Reset margin form elements
setVal('topmargin', '');
setVal('rightmargin', '');
setVal('bottommargin', '');
setVal('leftmargin', '');
// Expand margin
if (val = styles['margin']) {
val = val.split(' ');
styles['margin-top'] = val[0] || '';
styles['margin-right'] = val[1] || val[0] || '';
styles['margin-bottom'] = val[2] || val[0] || '';
styles['margin-left'] = val[3] || val[0] || '';
}
if (val = styles['margin-top'])
setVal('topmargin', val.replace(/px/, ''));
if (val = styles['margin-right'])
setVal('rightmargin', val.replace(/px/, ''));
if (val = styles['margin-bottom'])
setVal('bottommargin', val.replace(/px/, ''));
if (val = styles['margin-left'])
setVal('leftmargin', val.replace(/px/, ''));
updateColor('bgcolor_pick', 'bgcolor');
updateColor('textcolor_pick', 'textcolor');
},
changedStyleProp : function() {
var val, dom = tinyMCEPopup.editor.dom, styles = dom.parseStyle(getVal('style'));
styles['font-face'] = getVal('fontface');
styles['font-size'] = getVal('fontsize');
styles['color'] = getVal('textcolor');
styles['background-color'] = getVal('bgcolor');
if (val = getVal('bgimage'))
styles['background-image'] = "url('" + val + "')";
else
styles['background-image'] = '';
delete styles['margin'];
if (val = getVal('topmargin'))
styles['margin-top'] = val + "px";
else
styles['margin-top'] = '';
if (val = getVal('rightmargin'))
styles['margin-right'] = val + "px";
else
styles['margin-right'] = '';
if (val = getVal('bottommargin'))
styles['margin-bottom'] = val + "px";
else
styles['margin-bottom'] = '';
if (val = getVal('leftmargin'))
styles['margin-left'] = val + "px";
else
styles['margin-left'] = '';
// Serialize, parse and reserialize this will compress redundant styles
setVal('style', dom.serializeStyle(dom.parseStyle(dom.serializeStyle(styles))));
this.changedStyle();
},
update : function() {
var data = {};
tinymce.each(tinyMCEPopup.dom.select('select,input,textarea'), function(node) {
data[node.id] = getVal(node.id);
});
tinyMCEPopup.editor.plugins.fullpage._dataToHtml(data);
tinyMCEPopup.close();
}
};
function init() {
var form = document.forms[0], i, item, list, editor = tinyMCEPopup.editor;
// Setup doctype select box
list = editor.getParam("fullpage_doctypes", defaultDocTypes).split(',');
for (i = 0; i < list.length; i++) {
item = list[i].split('=');
if (item.length > 1)
addSelectValue(form, 'doctype', item[0], item[1]);
}
// Setup fonts select box
list = editor.getParam("fullpage_fonts", defaultFontNames).split(';');
for (i = 0; i < list.length; i++) {
item = list[i].split('=');
if (item.length > 1)
addSelectValue(form, 'fontface', item[0], item[1]);
}
// Setup fontsize select box
list = editor.getParam("fullpage_fontsizes", defaultFontSizes).split(',');
for (i = 0; i < list.length; i++)
addSelectValue(form, 'fontsize', list[i], list[i]);
// Setup encodings select box
list = editor.getParam("fullpage_encodings", defaultEncodings).split(',');
for (i = 0; i < list.length; i++) {
item = list[i].split('=');
if (item.length > 1)
addSelectValue(form, 'docencoding', item[0], item[1]);
}
// Setup color pickers
document.getElementById('bgcolor_pickcontainer').innerHTML = getColorPickerHTML('bgcolor_pick','bgcolor');
document.getElementById('link_color_pickcontainer').innerHTML = getColorPickerHTML('link_color_pick','link_color');
document.getElementById('visited_color_pickcontainer').innerHTML = getColorPickerHTML('visited_color_pick','visited_color');
document.getElementById('active_color_pickcontainer').innerHTML = getColorPickerHTML('active_color_pick','active_color');
document.getElementById('textcolor_pickcontainer').innerHTML = getColorPickerHTML('textcolor_pick','textcolor');
document.getElementById('stylesheet_browsercontainer').innerHTML = getBrowserHTML('stylesheetbrowser','stylesheet','file','fullpage');
document.getElementById('bgimage_pickcontainer').innerHTML = getBrowserHTML('bgimage_browser','bgimage','image','fullpage');
// Resize some elements
if (isVisible('stylesheetbrowser'))
document.getElementById('stylesheet').style.width = '220px';
if (isVisible('link_href_browser'))
document.getElementById('element_link_href').style.width = '230px';
if (isVisible('bgimage_browser'))
document.getElementById('bgimage').style.width = '210px';
// Update form
tinymce.each(tinyMCEPopup.getWindowArg('data'), function(value, key) {
setVal(key, value);
});
FullPageDialog.changedStyle();
// Update colors
updateColor('textcolor_pick', 'textcolor');
updateColor('bgcolor_pick', 'bgcolor');
updateColor('visited_color_pick', 'visited_color');
updateColor('active_color_pick', 'active_color');
updateColor('link_color_pick', 'link_color');
};
tinyMCEPopup.onInit.add(init);
})();

View File

@ -1 +0,0 @@
tinyMCE.addI18n('en.fullpage_dlg',{title:"Document Properties","meta_tab":"General","appearance_tab":"Appearance","advanced_tab":"Advanced","meta_props":"Meta Information",langprops:"Language and Encoding","meta_title":"Title","meta_keywords":"Keywords","meta_description":"Description","meta_robots":"Robots",doctypes:"Doctype",langcode:"Language Code",langdir:"Language Direction",ltr:"Left to Right",rtl:"Right to Left","xml_pi":"XML Declaration",encoding:"Character Encoding","appearance_bgprops":"Background Properties","appearance_marginprops":"Body Margins","appearance_linkprops":"Link Colors","appearance_textprops":"Text Properties",bgcolor:"Background Color",bgimage:"Background Image","left_margin":"Left Margin","right_margin":"Right Margin","top_margin":"Top Margin","bottom_margin":"Bottom Margin","text_color":"Text Color","font_size":"Font Size","font_face":"Font Face","link_color":"Link Color","hover_color":"Hover Color","visited_color":"Visited Color","active_color":"Active Color",textcolor:"Color",fontsize:"Font Size",fontface:"Font Family","meta_index_follow":"Index and Follow the Links","meta_index_nofollow":"Index and Don\'t Follow the Links","meta_noindex_follow":"Do Not Index but Follow the Links","meta_noindex_nofollow":"Do Not Index and Don\'t Follow the Links","appearance_style":"Stylesheet and Style Properties",stylesheet:"Stylesheet",style:"Style",author:"Author",copyright:"Copyright",add:"Add New Element",remove:"Remove Selected Element",moveup:"Move Selected Element Up",movedown:"Move Selected Element Down","head_elements":"Head Elements",info:"Information","add_title":"Title Element","add_meta":"Meta Element","add_script":"Script Element","add_style":"Style Element","add_link":"Link Element","add_base":"Base Element","add_comment":"Comment Node","title_element":"Title Element","script_element":"Script Element","style_element":"Style Element","base_element":"Base Element","link_element":"Link Element","meta_element":"Meta Element","comment_element":"Comment",src:"Source",language:"Language",href:"HREF",target:"Target",type:"Type",charset:"Charset",defer:"Defer",media:"Media",properties:"Properties",name:"Name",value:"Value",content:"Content",rel:"Rel",rev:"Rev",hreflang:"HREF Lang","general_props":"General","advanced_props":"Advanced"});

View File

@ -1 +0,0 @@
(function(){var a=tinymce.DOM;tinymce.create("tinymce.plugins.FullScreenPlugin",{init:function(d,e){var f=this,g={},c,b;f.editor=d;d.addCommand("mceFullScreen",function(){var i,j=a.doc.documentElement;if(d.getParam("fullscreen_is_enabled")){if(d.getParam("fullscreen_new_window")){closeFullscreen()}else{a.win.setTimeout(function(){tinymce.dom.Event.remove(a.win,"resize",f.resizeFunc);tinyMCE.get(d.getParam("fullscreen_editor_id")).setContent(d.getContent());tinyMCE.remove(d);a.remove("mce_fullscreen_container");j.style.overflow=d.getParam("fullscreen_html_overflow");a.setStyle(a.doc.body,"overflow",d.getParam("fullscreen_overflow"));a.win.scrollTo(d.getParam("fullscreen_scrollx"),d.getParam("fullscreen_scrolly"));tinyMCE.settings=tinyMCE.oldSettings},10)}return}if(d.getParam("fullscreen_new_window")){i=a.win.open(e+"/fullscreen.htm","mceFullScreenPopup","fullscreen=yes,menubar=no,toolbar=no,scrollbars=no,resizable=yes,left=0,top=0,width="+screen.availWidth+",height="+screen.availHeight);try{i.resizeTo(screen.availWidth,screen.availHeight)}catch(h){}}else{tinyMCE.oldSettings=tinyMCE.settings;g.fullscreen_overflow=a.getStyle(a.doc.body,"overflow",1)||"auto";g.fullscreen_html_overflow=a.getStyle(j,"overflow",1);c=a.getViewPort();g.fullscreen_scrollx=c.x;g.fullscreen_scrolly=c.y;if(tinymce.isOpera&&g.fullscreen_overflow=="visible"){g.fullscreen_overflow="auto"}if(tinymce.isIE&&g.fullscreen_overflow=="scroll"){g.fullscreen_overflow="auto"}if(tinymce.isIE&&(g.fullscreen_html_overflow=="visible"||g.fullscreen_html_overflow=="scroll")){g.fullscreen_html_overflow="auto"}if(g.fullscreen_overflow=="0px"){g.fullscreen_overflow=""}a.setStyle(a.doc.body,"overflow","hidden");j.style.overflow="hidden";c=a.getViewPort();a.win.scrollTo(0,0);if(tinymce.isIE){c.h-=1}if(tinymce.isIE6||document.compatMode=="BackCompat"){b="absolute;top:"+c.y}else{b="fixed;top:0"}n=a.add(a.doc.body,"div",{id:"mce_fullscreen_container",style:"position:"+b+";left:0;width:"+c.w+"px;height:"+c.h+"px;z-index:200000;"});a.add(n,"div",{id:"mce_fullscreen"});tinymce.each(d.settings,function(k,l){g[l]=k});g.id="mce_fullscreen";g.width=n.clientWidth;g.height=n.clientHeight-15;g.fullscreen_is_enabled=true;g.fullscreen_editor_id=d.id;g.theme_advanced_resizing=false;g.save_onsavecallback=function(){d.setContent(tinyMCE.get(g.id).getContent());d.execCommand("mceSave")};tinymce.each(d.getParam("fullscreen_settings"),function(m,l){g[l]=m});if(g.theme_advanced_toolbar_location==="external"){g.theme_advanced_toolbar_location="top"}f.fullscreenEditor=new tinymce.Editor("mce_fullscreen",g);f.fullscreenEditor.onInit.add(function(){f.fullscreenEditor.setContent(d.getContent());f.fullscreenEditor.focus()});f.fullscreenEditor.render();f.fullscreenElement=new tinymce.dom.Element("mce_fullscreen_container");f.fullscreenElement.update();f.resizeFunc=tinymce.dom.Event.add(a.win,"resize",function(){var o=tinymce.DOM.getViewPort(),l=f.fullscreenEditor,k,m;k=l.dom.getSize(l.getContainer().getElementsByTagName("table")[0]);m=l.dom.getSize(l.getContainer().getElementsByTagName("iframe")[0]);l.theme.resizeTo(o.w-k.w+m.w,o.h-k.h+m.h)})}});d.addButton("fullscreen",{title:"fullscreen.desc",cmd:"mceFullScreen"});d.onNodeChange.add(function(i,h){h.setActive("fullscreen",i.getParam("fullscreen_is_enabled"))})},getInfo:function(){return{longname:"Fullscreen",author:"Moxiecode Systems AB",authorurl:"http://tinymce.moxiecode.com",infourl:"http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/fullscreen",version:tinymce.majorVersion+"."+tinymce.minorVersion}}});tinymce.PluginManager.add("fullscreen",tinymce.plugins.FullScreenPlugin)})();

View File

@ -1,159 +0,0 @@
/**
* editor_plugin_src.js
*
* Copyright 2009, Moxiecode Systems AB
* Released under LGPL License.
*
* License: http://tinymce.moxiecode.com/license
* Contributing: http://tinymce.moxiecode.com/contributing
*/
(function() {
var DOM = tinymce.DOM;
tinymce.create('tinymce.plugins.FullScreenPlugin', {
init : function(ed, url) {
var t = this, s = {}, vp, posCss;
t.editor = ed;
// Register commands
ed.addCommand('mceFullScreen', function() {
var win, de = DOM.doc.documentElement;
if (ed.getParam('fullscreen_is_enabled')) {
if (ed.getParam('fullscreen_new_window'))
closeFullscreen(); // Call to close in new window
else {
DOM.win.setTimeout(function() {
tinymce.dom.Event.remove(DOM.win, 'resize', t.resizeFunc);
tinyMCE.get(ed.getParam('fullscreen_editor_id')).setContent(ed.getContent());
tinyMCE.remove(ed);
DOM.remove('mce_fullscreen_container');
de.style.overflow = ed.getParam('fullscreen_html_overflow');
DOM.setStyle(DOM.doc.body, 'overflow', ed.getParam('fullscreen_overflow'));
DOM.win.scrollTo(ed.getParam('fullscreen_scrollx'), ed.getParam('fullscreen_scrolly'));
tinyMCE.settings = tinyMCE.oldSettings; // Restore old settings
}, 10);
}
return;
}
if (ed.getParam('fullscreen_new_window')) {
win = DOM.win.open(url + "/fullscreen.htm", "mceFullScreenPopup", "fullscreen=yes,menubar=no,toolbar=no,scrollbars=no,resizable=yes,left=0,top=0,width=" + screen.availWidth + ",height=" + screen.availHeight);
try {
win.resizeTo(screen.availWidth, screen.availHeight);
} catch (e) {
// Ignore
}
} else {
tinyMCE.oldSettings = tinyMCE.settings; // Store old settings
s.fullscreen_overflow = DOM.getStyle(DOM.doc.body, 'overflow', 1) || 'auto';
s.fullscreen_html_overflow = DOM.getStyle(de, 'overflow', 1);
vp = DOM.getViewPort();
s.fullscreen_scrollx = vp.x;
s.fullscreen_scrolly = vp.y;
// Fixes an Opera bug where the scrollbars doesn't reappear
if (tinymce.isOpera && s.fullscreen_overflow == 'visible')
s.fullscreen_overflow = 'auto';
// Fixes an IE bug where horizontal scrollbars would appear
if (tinymce.isIE && s.fullscreen_overflow == 'scroll')
s.fullscreen_overflow = 'auto';
// Fixes an IE bug where the scrollbars doesn't reappear
if (tinymce.isIE && (s.fullscreen_html_overflow == 'visible' || s.fullscreen_html_overflow == 'scroll'))
s.fullscreen_html_overflow = 'auto';
if (s.fullscreen_overflow == '0px')
s.fullscreen_overflow = '';
DOM.setStyle(DOM.doc.body, 'overflow', 'hidden');
de.style.overflow = 'hidden'; //Fix for IE6/7
vp = DOM.getViewPort();
DOM.win.scrollTo(0, 0);
if (tinymce.isIE)
vp.h -= 1;
// Use fixed position if it exists
if (tinymce.isIE6 || document.compatMode == 'BackCompat')
posCss = 'absolute;top:' + vp.y;
else
posCss = 'fixed;top:0';
n = DOM.add(DOM.doc.body, 'div', {
id : 'mce_fullscreen_container',
style : 'position:' + posCss + ';left:0;width:' + vp.w + 'px;height:' + vp.h + 'px;z-index:200000;'});
DOM.add(n, 'div', {id : 'mce_fullscreen'});
tinymce.each(ed.settings, function(v, n) {
s[n] = v;
});
s.id = 'mce_fullscreen';
s.width = n.clientWidth;
s.height = n.clientHeight - 15;
s.fullscreen_is_enabled = true;
s.fullscreen_editor_id = ed.id;
s.theme_advanced_resizing = false;
s.save_onsavecallback = function() {
ed.setContent(tinyMCE.get(s.id).getContent());
ed.execCommand('mceSave');
};
tinymce.each(ed.getParam('fullscreen_settings'), function(v, k) {
s[k] = v;
});
if (s.theme_advanced_toolbar_location === 'external')
s.theme_advanced_toolbar_location = 'top';
t.fullscreenEditor = new tinymce.Editor('mce_fullscreen', s);
t.fullscreenEditor.onInit.add(function() {
t.fullscreenEditor.setContent(ed.getContent());
t.fullscreenEditor.focus();
});
t.fullscreenEditor.render();
t.fullscreenElement = new tinymce.dom.Element('mce_fullscreen_container');
t.fullscreenElement.update();
//document.body.overflow = 'hidden';
t.resizeFunc = tinymce.dom.Event.add(DOM.win, 'resize', function() {
var vp = tinymce.DOM.getViewPort(), fed = t.fullscreenEditor, outerSize, innerSize;
// Get outer/inner size to get a delta size that can be used to calc the new iframe size
outerSize = fed.dom.getSize(fed.getContainer().getElementsByTagName('table')[0]);
innerSize = fed.dom.getSize(fed.getContainer().getElementsByTagName('iframe')[0]);
fed.theme.resizeTo(vp.w - outerSize.w + innerSize.w, vp.h - outerSize.h + innerSize.h);
});
}
});
// Register buttons
ed.addButton('fullscreen', {title : 'fullscreen.desc', cmd : 'mceFullScreen'});
ed.onNodeChange.add(function(ed, cm) {
cm.setActive('fullscreen', ed.getParam('fullscreen_is_enabled'));
});
},
getInfo : function() {
return {
longname : 'Fullscreen',
author : 'Moxiecode Systems AB',
authorurl : 'http://tinymce.moxiecode.com',
infourl : 'http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/fullscreen',
version : tinymce.majorVersion + "." + tinymce.minorVersion
};
}
});
// Register plugin
tinymce.PluginManager.add('fullscreen', tinymce.plugins.FullScreenPlugin);
})();

View File

@ -1,110 +0,0 @@
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title></title>
<meta http-equiv="X-UA-Compatible" content="IE=edge" />
<script type="text/javascript" src="../../tiny_mce.js"></script>
<script type="text/javascript">
function patchCallback(settings, key) {
if (settings[key])
settings[key] = "window.opener." + settings[key];
}
var settings = {}, paSe = window.opener.tinyMCE.activeEditor.settings, oeID = window.opener.tinyMCE.activeEditor.id;
// Clone array
for (var n in paSe)
settings[n] = paSe[n];
// Override options for fullscreen
for (var n in paSe.fullscreen_settings)
settings[n] = paSe.fullscreen_settings[n];
// Patch callbacks, make them point to window.opener
patchCallback(settings, 'urlconverter_callback');
patchCallback(settings, 'insertlink_callback');
patchCallback(settings, 'insertimage_callback');
patchCallback(settings, 'setupcontent_callback');
patchCallback(settings, 'save_callback');
patchCallback(settings, 'onchange_callback');
patchCallback(settings, 'init_instance_callback');
patchCallback(settings, 'file_browser_callback');
patchCallback(settings, 'cleanup_callback');
patchCallback(settings, 'execcommand_callback');
patchCallback(settings, 'oninit');
// Set options
delete settings.id;
settings['mode'] = 'exact';
settings['elements'] = 'fullscreenarea';
settings['add_unload_trigger'] = false;
settings['ask'] = false;
settings['document_base_url'] = window.opener.tinyMCE.activeEditor.documentBaseURI.getURI();
settings['fullscreen_is_enabled'] = true;
settings['fullscreen_editor_id'] = oeID;
settings['theme_advanced_resizing'] = false;
settings['strict_loading_mode'] = true;
settings.save_onsavecallback = function() {
window.opener.tinyMCE.get(oeID).setContent(tinyMCE.get('fullscreenarea').getContent({format : 'raw'}), {format : 'raw'});
window.opener.tinyMCE.get(oeID).execCommand('mceSave');
window.close();
};
function unloadHandler(e) {
moveContent();
}
function moveContent() {
window.opener.tinyMCE.get(oeID).setContent(tinyMCE.activeEditor.getContent());
}
function closeFullscreen() {
moveContent();
window.close();
}
function doParentSubmit() {
moveContent();
if (window.opener.tinyMCE.selectedInstance.formElement.form)
window.opener.tinyMCE.selectedInstance.formElement.form.submit();
window.close();
return false;
}
function render() {
var e = document.getElementById('fullscreenarea'), vp, ed, ow, oh, dom = tinymce.DOM;
e.value = window.opener.tinyMCE.get(oeID).getContent();
vp = dom.getViewPort();
settings.width = vp.w;
settings.height = vp.h - 15;
tinymce.dom.Event.add(window, 'resize', function() {
var vp = dom.getViewPort();
tinyMCE.activeEditor.theme.resizeTo(vp.w, vp.h);
});
tinyMCE.init(settings);
}
// Add onunload
tinymce.dom.Event.add(window, "beforeunload", unloadHandler);
</script>
</head>
<body style="margin:0;overflow:hidden;width:100%;height:100%" scrolling="no" scroll="no">
<form onsubmit="doParentSubmit();">
<textarea id="fullscreenarea" style="width:100%; height:100%"></textarea>
</form>
<script type="text/javascript">
render();
</script>
</body>
</html>

View File

@ -1 +0,0 @@
(function(){tinymce.create("tinymce.plugins.IESpell",{init:function(a,b){var c=this,d;if(!tinymce.isIE){return}c.editor=a;a.addCommand("mceIESpell",function(){try{d=new ActiveXObject("ieSpell.ieSpellExtension");d.CheckDocumentNode(a.getDoc().documentElement)}catch(f){if(f.number==-2146827859){a.windowManager.confirm(a.getLang("iespell.download"),function(e){if(e){window.open("http://www.iespell.com/download.php","ieSpellDownload","")}})}else{a.windowManager.alert("Error Loading ieSpell: Exception "+f.number)}}});a.addButton("iespell",{title:"iespell.iespell_desc",cmd:"mceIESpell"})},getInfo:function(){return{longname:"IESpell (IE Only)",author:"Moxiecode Systems AB",authorurl:"http://tinymce.moxiecode.com",infourl:"http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/iespell",version:tinymce.majorVersion+"."+tinymce.minorVersion}}});tinymce.PluginManager.add("iespell",tinymce.plugins.IESpell)})();

View File

@ -1,54 +0,0 @@
/**
* editor_plugin_src.js
*
* Copyright 2009, Moxiecode Systems AB
* Released under LGPL License.
*
* License: http://tinymce.moxiecode.com/license
* Contributing: http://tinymce.moxiecode.com/contributing
*/
(function() {
tinymce.create('tinymce.plugins.IESpell', {
init : function(ed, url) {
var t = this, sp;
if (!tinymce.isIE)
return;
t.editor = ed;
// Register commands
ed.addCommand('mceIESpell', function() {
try {
sp = new ActiveXObject("ieSpell.ieSpellExtension");
sp.CheckDocumentNode(ed.getDoc().documentElement);
} catch (e) {
if (e.number == -2146827859) {
ed.windowManager.confirm(ed.getLang("iespell.download"), function(s) {
if (s)
window.open('http://www.iespell.com/download.php', 'ieSpellDownload', '');
});
} else
ed.windowManager.alert("Error Loading ieSpell: Exception " + e.number);
}
});
// Register buttons
ed.addButton('iespell', {title : 'iespell.iespell_desc', cmd : 'mceIESpell'});
},
getInfo : function() {
return {
longname : 'IESpell (IE Only)',
author : 'Moxiecode Systems AB',
authorurl : 'http://tinymce.moxiecode.com',
infourl : 'http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/iespell',
version : tinymce.majorVersion + "." + tinymce.minorVersion
};
}
});
// Register plugin
tinymce.PluginManager.add('iespell', tinymce.plugins.IESpell);
})();

File diff suppressed because one or more lines are too long

View File

@ -1,699 +0,0 @@
/**
* editor_plugin_src.js
*
* Copyright 2009, Moxiecode Systems AB
* Released under LGPL License.
*
* License: http://tinymce.moxiecode.com/license
* Contributing: http://tinymce.moxiecode.com/contributing
*/
(function() {
var DOM = tinymce.DOM, Element = tinymce.dom.Element, Event = tinymce.dom.Event, each = tinymce.each, is = tinymce.is;
tinymce.create('tinymce.plugins.InlinePopups', {
init : function(ed, url) {
// Replace window manager
ed.onBeforeRenderUI.add(function() {
ed.windowManager = new tinymce.InlineWindowManager(ed);
DOM.loadCSS(url + '/skins/' + (ed.settings.inlinepopups_skin || 'clearlooks2') + "/window.css");
});
},
getInfo : function() {
return {
longname : 'InlinePopups',
author : 'Moxiecode Systems AB',
authorurl : 'http://tinymce.moxiecode.com',
infourl : 'http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/inlinepopups',
version : tinymce.majorVersion + "." + tinymce.minorVersion
};
}
});
tinymce.create('tinymce.InlineWindowManager:tinymce.WindowManager', {
InlineWindowManager : function(ed) {
var t = this;
t.parent(ed);
t.zIndex = 300000;
t.count = 0;
t.windows = {};
},
open : function(f, p) {
var t = this, id, opt = '', ed = t.editor, dw = 0, dh = 0, vp, po, mdf, clf, we, w, u, parentWindow;
f = f || {};
p = p || {};
// Run native windows
if (!f.inline)
return t.parent(f, p);
parentWindow = t._frontWindow();
if (parentWindow && DOM.get(parentWindow.id + '_ifr')) {
parentWindow.focussedElement = DOM.get(parentWindow.id + '_ifr').contentWindow.document.activeElement;
}
// Only store selection if the type is a normal window
if (!f.type)
t.bookmark = ed.selection.getBookmark(1);
id = DOM.uniqueId();
vp = DOM.getViewPort();
f.width = parseInt(f.width || 320);
f.height = parseInt(f.height || 240) + (tinymce.isIE ? 8 : 0);
f.min_width = parseInt(f.min_width || 150);
f.min_height = parseInt(f.min_height || 100);
f.max_width = parseInt(f.max_width || 2000);
f.max_height = parseInt(f.max_height || 2000);
f.left = f.left || Math.round(Math.max(vp.x, vp.x + (vp.w / 2.0) - (f.width / 2.0)));
f.top = f.top || Math.round(Math.max(vp.y, vp.y + (vp.h / 2.0) - (f.height / 2.0)));
f.movable = f.resizable = true;
p.mce_width = f.width;
p.mce_height = f.height;
p.mce_inline = true;
p.mce_window_id = id;
p.mce_auto_focus = f.auto_focus;
// Transpose
// po = DOM.getPos(ed.getContainer());
// f.left -= po.x;
// f.top -= po.y;
t.features = f;
t.params = p;
t.onOpen.dispatch(t, f, p);
if (f.type) {
opt += ' mceModal';
if (f.type)
opt += ' mce' + f.type.substring(0, 1).toUpperCase() + f.type.substring(1);
f.resizable = false;
}
if (f.statusbar)
opt += ' mceStatusbar';
if (f.resizable)
opt += ' mceResizable';
if (f.minimizable)
opt += ' mceMinimizable';
if (f.maximizable)
opt += ' mceMaximizable';
if (f.movable)
opt += ' mceMovable';
// Create DOM objects
t._addAll(DOM.doc.body,
['div', {id : id, role : 'dialog', 'aria-labelledby': f.type ? id + '_content' : id + '_title', 'class' : (ed.settings.inlinepopups_skin || 'clearlooks2') + (tinymce.isIE && window.getSelection ? ' ie9' : ''), style : 'width:100px;height:100px'},
['div', {id : id + '_wrapper', 'class' : 'mceWrapper' + opt},
['div', {id : id + '_top', 'class' : 'mceTop'},
['div', {'class' : 'mceLeft'}],
['div', {'class' : 'mceCenter'}],
['div', {'class' : 'mceRight'}],
['span', {id : id + '_title'}, f.title || '']
],
['div', {id : id + '_middle', 'class' : 'mceMiddle'},
['div', {id : id + '_left', 'class' : 'mceLeft', tabindex : '0'}],
['span', {id : id + '_content'}],
['div', {id : id + '_right', 'class' : 'mceRight', tabindex : '0'}]
],
['div', {id : id + '_bottom', 'class' : 'mceBottom'},
['div', {'class' : 'mceLeft'}],
['div', {'class' : 'mceCenter'}],
['div', {'class' : 'mceRight'}],
['span', {id : id + '_status'}, 'Content']
],
['a', {'class' : 'mceMove', tabindex : '-1', href : 'javascript:;'}],
['a', {'class' : 'mceMin', tabindex : '-1', href : 'javascript:;', onmousedown : 'return false;'}],
['a', {'class' : 'mceMax', tabindex : '-1', href : 'javascript:;', onmousedown : 'return false;'}],
['a', {'class' : 'mceMed', tabindex : '-1', href : 'javascript:;', onmousedown : 'return false;'}],
['a', {'class' : 'mceClose', tabindex : '-1', href : 'javascript:;', onmousedown : 'return false;'}],
['a', {id : id + '_resize_n', 'class' : 'mceResize mceResizeN', tabindex : '-1', href : 'javascript:;'}],
['a', {id : id + '_resize_s', 'class' : 'mceResize mceResizeS', tabindex : '-1', href : 'javascript:;'}],
['a', {id : id + '_resize_w', 'class' : 'mceResize mceResizeW', tabindex : '-1', href : 'javascript:;'}],
['a', {id : id + '_resize_e', 'class' : 'mceResize mceResizeE', tabindex : '-1', href : 'javascript:;'}],
['a', {id : id + '_resize_nw', 'class' : 'mceResize mceResizeNW', tabindex : '-1', href : 'javascript:;'}],
['a', {id : id + '_resize_ne', 'class' : 'mceResize mceResizeNE', tabindex : '-1', href : 'javascript:;'}],
['a', {id : id + '_resize_sw', 'class' : 'mceResize mceResizeSW', tabindex : '-1', href : 'javascript:;'}],
['a', {id : id + '_resize_se', 'class' : 'mceResize mceResizeSE', tabindex : '-1', href : 'javascript:;'}]
]
]
);
DOM.setStyles(id, {top : -10000, left : -10000});
// Fix gecko rendering bug, where the editors iframe messed with window contents
if (tinymce.isGecko)
DOM.setStyle(id, 'overflow', 'auto');
// Measure borders
if (!f.type) {
dw += DOM.get(id + '_left').clientWidth;
dw += DOM.get(id + '_right').clientWidth;
dh += DOM.get(id + '_top').clientHeight;
dh += DOM.get(id + '_bottom').clientHeight;
}
// Resize window
DOM.setStyles(id, {top : f.top, left : f.left, width : f.width + dw, height : f.height + dh});
u = f.url || f.file;
if (u) {
if (tinymce.relaxedDomain)
u += (u.indexOf('?') == -1 ? '?' : '&') + 'mce_rdomain=' + tinymce.relaxedDomain;
u = tinymce._addVer(u);
}
if (!f.type) {
DOM.add(id + '_content', 'iframe', {id : id + '_ifr', src : 'javascript:""', frameBorder : 0, style : 'border:0;width:10px;height:10px'});
DOM.setStyles(id + '_ifr', {width : f.width, height : f.height});
DOM.setAttrib(id + '_ifr', 'src', u);
} else {
DOM.add(id + '_wrapper', 'a', {id : id + '_ok', 'class' : 'mceButton mceOk', href : 'javascript:;', onmousedown : 'return false;'}, 'Ok');
if (f.type == 'confirm')
DOM.add(id + '_wrapper', 'a', {'class' : 'mceButton mceCancel', href : 'javascript:;', onmousedown : 'return false;'}, 'Cancel');
DOM.add(id + '_middle', 'div', {'class' : 'mceIcon'});
DOM.setHTML(id + '_content', f.content.replace('\n', '<br />'));
Event.add(id, 'keyup', function(evt) {
var VK_ESCAPE = 27;
if (evt.keyCode === VK_ESCAPE) {
f.button_func(false);
return Event.cancel(evt);
}
});
Event.add(id, 'keydown', function(evt) {
var cancelButton, VK_TAB = 9;
if (evt.keyCode === VK_TAB) {
cancelButton = DOM.select('a.mceCancel', id + '_wrapper')[0];
if (cancelButton && cancelButton !== evt.target) {
cancelButton.focus();
} else {
DOM.get(id + '_ok').focus();
}
return Event.cancel(evt);
}
});
}
// Register events
mdf = Event.add(id, 'mousedown', function(e) {
var n = e.target, w, vp;
w = t.windows[id];
t.focus(id);
if (n.nodeName == 'A' || n.nodeName == 'a') {
if (n.className == 'mceClose') {
t.close(null, id);
return Event.cancel(e);
} else if (n.className == 'mceMax') {
w.oldPos = w.element.getXY();
w.oldSize = w.element.getSize();
vp = DOM.getViewPort();
// Reduce viewport size to avoid scrollbars
vp.w -= 2;
vp.h -= 2;
w.element.moveTo(vp.x, vp.y);
w.element.resizeTo(vp.w, vp.h);
DOM.setStyles(id + '_ifr', {width : vp.w - w.deltaWidth, height : vp.h - w.deltaHeight});
DOM.addClass(id + '_wrapper', 'mceMaximized');
} else if (n.className == 'mceMed') {
// Reset to old size
w.element.moveTo(w.oldPos.x, w.oldPos.y);
w.element.resizeTo(w.oldSize.w, w.oldSize.h);
w.iframeElement.resizeTo(w.oldSize.w - w.deltaWidth, w.oldSize.h - w.deltaHeight);
DOM.removeClass(id + '_wrapper', 'mceMaximized');
} else if (n.className == 'mceMove')
return t._startDrag(id, e, n.className);
else if (DOM.hasClass(n, 'mceResize'))
return t._startDrag(id, e, n.className.substring(13));
}
});
clf = Event.add(id, 'click', function(e) {
var n = e.target;
t.focus(id);
if (n.nodeName == 'A' || n.nodeName == 'a') {
switch (n.className) {
case 'mceClose':
t.close(null, id);
return Event.cancel(e);
case 'mceButton mceOk':
case 'mceButton mceCancel':
f.button_func(n.className == 'mceButton mceOk');
return Event.cancel(e);
}
}
});
// Make sure the tab order loops within the dialog.
Event.add([id + '_left', id + '_right'], 'focus', function(evt) {
var iframe = DOM.get(id + '_ifr');
if (iframe) {
var body = iframe.contentWindow.document.body;
var focusable = DOM.select(':input:enabled,*[tabindex=0]', body);
if (evt.target.id === (id + '_left')) {
focusable[focusable.length - 1].focus();
} else {
focusable[0].focus();
}
} else {
DOM.get(id + '_ok').focus();
}
});
// Add window
w = t.windows[id] = {
id : id,
mousedown_func : mdf,
click_func : clf,
element : new Element(id, {blocker : 1, container : ed.getContainer()}),
iframeElement : new Element(id + '_ifr'),
features : f,
deltaWidth : dw,
deltaHeight : dh
};
w.iframeElement.on('focus', function() {
t.focus(id);
});
// Setup blocker
if (t.count == 0 && t.editor.getParam('dialog_type', 'modal') == 'modal') {
DOM.add(DOM.doc.body, 'div', {
id : 'mceModalBlocker',
'class' : (t.editor.settings.inlinepopups_skin || 'clearlooks2') + '_modalBlocker',
style : {zIndex : t.zIndex - 1}
});
DOM.show('mceModalBlocker'); // Reduces flicker in IE
DOM.setAttrib(DOM.doc.body, 'aria-hidden', 'true');
} else
DOM.setStyle('mceModalBlocker', 'z-index', t.zIndex - 1);
if (tinymce.isIE6 || /Firefox\/2\./.test(navigator.userAgent) || (tinymce.isIE && !DOM.boxModel))
DOM.setStyles('mceModalBlocker', {position : 'absolute', left : vp.x, top : vp.y, width : vp.w - 2, height : vp.h - 2});
DOM.setAttrib(id, 'aria-hidden', 'false');
t.focus(id);
t._fixIELayout(id, 1);
// Focus ok button
if (DOM.get(id + '_ok'))
DOM.get(id + '_ok').focus();
t.count++;
return w;
},
focus : function(id) {
var t = this, w;
if (w = t.windows[id]) {
w.zIndex = this.zIndex++;
w.element.setStyle('zIndex', w.zIndex);
w.element.update();
id = id + '_wrapper';
DOM.removeClass(t.lastId, 'mceFocus');
DOM.addClass(id, 'mceFocus');
t.lastId = id;
if (w.focussedElement) {
w.focussedElement.focus();
} else if (DOM.get(id + '_ok')) {
DOM.get(w.id + '_ok').focus();
} else if (DOM.get(w.id + '_ifr')) {
DOM.get(w.id + '_ifr').focus();
}
}
},
_addAll : function(te, ne) {
var i, n, t = this, dom = tinymce.DOM;
if (is(ne, 'string'))
te.appendChild(dom.doc.createTextNode(ne));
else if (ne.length) {
te = te.appendChild(dom.create(ne[0], ne[1]));
for (i=2; i<ne.length; i++)
t._addAll(te, ne[i]);
}
},
_startDrag : function(id, se, ac) {
var t = this, mu, mm, d = DOM.doc, eb, w = t.windows[id], we = w.element, sp = we.getXY(), p, sz, ph, cp, vp, sx, sy, sex, sey, dx, dy, dw, dh;
// Get positons and sizes
// cp = DOM.getPos(t.editor.getContainer());
cp = {x : 0, y : 0};
vp = DOM.getViewPort();
// Reduce viewport size to avoid scrollbars while dragging
vp.w -= 2;
vp.h -= 2;
sex = se.screenX;
sey = se.screenY;
dx = dy = dw = dh = 0;
// Handle mouse up
mu = Event.add(d, 'mouseup', function(e) {
Event.remove(d, 'mouseup', mu);
Event.remove(d, 'mousemove', mm);
if (eb)
eb.remove();
we.moveBy(dx, dy);
we.resizeBy(dw, dh);
sz = we.getSize();
DOM.setStyles(id + '_ifr', {width : sz.w - w.deltaWidth, height : sz.h - w.deltaHeight});
t._fixIELayout(id, 1);
return Event.cancel(e);
});
if (ac != 'Move')
startMove();
function startMove() {
if (eb)
return;
t._fixIELayout(id, 0);
// Setup event blocker
DOM.add(d.body, 'div', {
id : 'mceEventBlocker',
'class' : 'mceEventBlocker ' + (t.editor.settings.inlinepopups_skin || 'clearlooks2'),
style : {zIndex : t.zIndex + 1}
});
if (tinymce.isIE6 || (tinymce.isIE && !DOM.boxModel))
DOM.setStyles('mceEventBlocker', {position : 'absolute', left : vp.x, top : vp.y, width : vp.w - 2, height : vp.h - 2});
eb = new Element('mceEventBlocker');
eb.update();
// Setup placeholder
p = we.getXY();
sz = we.getSize();
sx = cp.x + p.x - vp.x;
sy = cp.y + p.y - vp.y;
DOM.add(eb.get(), 'div', {id : 'mcePlaceHolder', 'class' : 'mcePlaceHolder', style : {left : sx, top : sy, width : sz.w, height : sz.h}});
ph = new Element('mcePlaceHolder');
};
// Handle mouse move/drag
mm = Event.add(d, 'mousemove', function(e) {
var x, y, v;
startMove();
x = e.screenX - sex;
y = e.screenY - sey;
switch (ac) {
case 'ResizeW':
dx = x;
dw = 0 - x;
break;
case 'ResizeE':
dw = x;
break;
case 'ResizeN':
case 'ResizeNW':
case 'ResizeNE':
if (ac == "ResizeNW") {
dx = x;
dw = 0 - x;
} else if (ac == "ResizeNE")
dw = x;
dy = y;
dh = 0 - y;
break;
case 'ResizeS':
case 'ResizeSW':
case 'ResizeSE':
if (ac == "ResizeSW") {
dx = x;
dw = 0 - x;
} else if (ac == "ResizeSE")
dw = x;
dh = y;
break;
case 'mceMove':
dx = x;
dy = y;
break;
}
// Boundary check
if (dw < (v = w.features.min_width - sz.w)) {
if (dx !== 0)
dx += dw - v;
dw = v;
}
if (dh < (v = w.features.min_height - sz.h)) {
if (dy !== 0)
dy += dh - v;
dh = v;
}
dw = Math.min(dw, w.features.max_width - sz.w);
dh = Math.min(dh, w.features.max_height - sz.h);
dx = Math.max(dx, vp.x - (sx + vp.x));
dy = Math.max(dy, vp.y - (sy + vp.y));
dx = Math.min(dx, (vp.w + vp.x) - (sx + sz.w + vp.x));
dy = Math.min(dy, (vp.h + vp.y) - (sy + sz.h + vp.y));
// Move if needed
if (dx + dy !== 0) {
if (sx + dx < 0)
dx = 0;
if (sy + dy < 0)
dy = 0;
ph.moveTo(sx + dx, sy + dy);
}
// Resize if needed
if (dw + dh !== 0)
ph.resizeTo(sz.w + dw, sz.h + dh);
return Event.cancel(e);
});
return Event.cancel(se);
},
resizeBy : function(dw, dh, id) {
var w = this.windows[id];
if (w) {
w.element.resizeBy(dw, dh);
w.iframeElement.resizeBy(dw, dh);
}
},
close : function(win, id) {
var t = this, w, d = DOM.doc, fw, id;
id = t._findId(id || win);
// Probably not inline
if (!t.windows[id]) {
t.parent(win);
return;
}
t.count--;
if (t.count == 0) {
DOM.remove('mceModalBlocker');
DOM.setAttrib(DOM.doc.body, 'aria-hidden', 'false');
t.editor.focus();
}
if (w = t.windows[id]) {
t.onClose.dispatch(t);
Event.remove(d, 'mousedown', w.mousedownFunc);
Event.remove(d, 'click', w.clickFunc);
Event.clear(id);
Event.clear(id + '_ifr');
DOM.setAttrib(id + '_ifr', 'src', 'javascript:""'); // Prevent leak
w.element.remove();
delete t.windows[id];
fw = t._frontWindow();
if (fw)
t.focus(fw.id);
}
},
// Find front most window
_frontWindow : function() {
var fw, ix = 0;
// Find front most window and focus that
each (this.windows, function(w) {
if (w.zIndex > ix) {
fw = w;
ix = w.zIndex;
}
});
return fw;
},
setTitle : function(w, ti) {
var e;
w = this._findId(w);
if (e = DOM.get(w + '_title'))
e.innerHTML = DOM.encode(ti);
},
alert : function(txt, cb, s) {
var t = this, w;
w = t.open({
title : t,
type : 'alert',
button_func : function(s) {
if (cb)
cb.call(s || t, s);
t.close(null, w.id);
},
content : DOM.encode(t.editor.getLang(txt, txt)),
inline : 1,
width : 400,
height : 130
});
},
confirm : function(txt, cb, s) {
var t = this, w;
w = t.open({
title : t,
type : 'confirm',
button_func : function(s) {
if (cb)
cb.call(s || t, s);
t.close(null, w.id);
},
content : DOM.encode(t.editor.getLang(txt, txt)),
inline : 1,
width : 400,
height : 130
});
},
// Internal functions
_findId : function(w) {
var t = this;
if (typeof(w) == 'string')
return w;
each(t.windows, function(wo) {
var ifr = DOM.get(wo.id + '_ifr');
if (ifr && w == ifr.contentWindow) {
w = wo.id;
return false;
}
});
return w;
},
_fixIELayout : function(id, s) {
var w, img;
if (!tinymce.isIE6)
return;
// Fixes the bug where hover flickers and does odd things in IE6
each(['n','s','w','e','nw','ne','sw','se'], function(v) {
var e = DOM.get(id + '_resize_' + v);
DOM.setStyles(e, {
width : s ? e.clientWidth : '',
height : s ? e.clientHeight : '',
cursor : DOM.getStyle(e, 'cursor', 1)
});
DOM.setStyle(id + "_bottom", 'bottom', '-1px');
e = 0;
});
// Fixes graphics glitch
if (w = this.windows[id]) {
// Fixes rendering bug after resize
w.element.hide();
w.element.show();
// Forced a repaint of the window
//DOM.get(id).style.filter = '';
// IE has a bug where images used in CSS won't get loaded
// sometimes when the cache in the browser is disabled
// This fix tries to solve it by loading the images using the image object
each(DOM.select('div,a', id), function(e, i) {
if (e.currentStyle.backgroundImage != 'none') {
img = new Image();
img.src = e.currentStyle.backgroundImage.replace(/url\(\"(.+)\"\)/, '$1');
}
});
DOM.get(id).style.filter = '';
}
}
});
// Register plugin
tinymce.PluginManager.add('inlinepopups', tinymce.plugins.InlinePopups);
})();

Binary file not shown.

Before

Width:  |  Height:  |  Size: 810 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 272 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.2 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 907 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 909 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 769 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 84 B

View File

@ -1,90 +0,0 @@
/* Clearlooks 2 */
/* Reset */
.clearlooks2, .clearlooks2 div, .clearlooks2 span, .clearlooks2 a {vertical-align:baseline; text-align:left; position:absolute; border:0; padding:0; margin:0; background:transparent; font-family:Arial,Verdana; font-size:11px; color:#000; text-decoration:none; font-weight:normal; width:auto; height:auto; overflow:hidden; display:block}
/* General */
.clearlooks2 {position:absolute; direction:ltr}
.clearlooks2 .mceWrapper {position:static}
.mceEventBlocker {position:fixed; left:0; top:0; background:url(img/horizontal.gif) no-repeat 0 -75px; width:100%; height:100%}
.clearlooks2 .mcePlaceHolder {border:1px solid #000; background:#888; top:0; left:0; opacity:0.5; -ms-filter:'alpha(opacity=50)'; filter:alpha(opacity=50)}
.clearlooks2_modalBlocker {position:fixed; left:0; top:0; width:100%; height:100%; background:#FFF; opacity:0.6; -ms-filter:'alpha(opacity=60)'; filter:alpha(opacity=60); display:none}
/* Top */
.clearlooks2 .mceTop, .clearlooks2 .mceTop div {top:0; width:100%; height:23px}
.clearlooks2 .mceTop .mceLeft {width:6px; background:url(img/corners.gif)}
.clearlooks2 .mceTop .mceCenter {right:6px; width:100%; height:23px; background:url(img/horizontal.gif) 12px 0; clip:rect(auto auto auto 12px)}
.clearlooks2 .mceTop .mceRight {right:0; width:6px; height:23px; background:url(img/corners.gif) -12px 0}
.clearlooks2 .mceTop span {width:100%; text-align:center; vertical-align:middle; line-height:23px; font-weight:bold}
.clearlooks2 .mceFocus .mceTop .mceLeft {background:url(img/corners.gif) -6px 0}
.clearlooks2 .mceFocus .mceTop .mceCenter {background:url(img/horizontal.gif) 0 -23px}
.clearlooks2 .mceFocus .mceTop .mceRight {background:url(img/corners.gif) -18px 0}
.clearlooks2 .mceFocus .mceTop span {color:#FFF}
/* Middle */
.clearlooks2 .mceMiddle, .clearlooks2 .mceMiddle div {top:0}
.clearlooks2 .mceMiddle {width:100%; height:100%; clip:rect(23px auto auto auto)}
.clearlooks2 .mceMiddle .mceLeft {left:0; width:5px; height:100%; background:url(img/vertical.gif) -5px 0}
.clearlooks2 .mceMiddle span {top:23px; left:5px; width:100%; height:100%; background:#FFF}
.clearlooks2 .mceMiddle .mceRight {right:0; width:5px; height:100%; background:url(img/vertical.gif)}
/* Bottom */
.clearlooks2 .mceBottom, .clearlooks2 .mceBottom div {height:6px}
.clearlooks2 .mceBottom {left:0; bottom:0; width:100%}
.clearlooks2 .mceBottom div {top:0}
.clearlooks2 .mceBottom .mceLeft {left:0; width:5px; background:url(img/corners.gif) -34px -6px}
.clearlooks2 .mceBottom .mceCenter {left:5px; width:100%; background:url(img/horizontal.gif) 0 -46px}
.clearlooks2 .mceBottom .mceRight {right:0; width:5px; background: url(img/corners.gif) -34px 0}
.clearlooks2 .mceBottom span {display:none}
.clearlooks2 .mceStatusbar .mceBottom, .clearlooks2 .mceStatusbar .mceBottom div {height:23px}
.clearlooks2 .mceStatusbar .mceBottom .mceLeft {background:url(img/corners.gif) -29px 0}
.clearlooks2 .mceStatusbar .mceBottom .mceCenter {background:url(img/horizontal.gif) 0 -52px}
.clearlooks2 .mceStatusbar .mceBottom .mceRight {background:url(img/corners.gif) -24px 0}
.clearlooks2 .mceStatusbar .mceBottom span {display:block; left:7px; font-family:Arial, Verdana; font-size:11px; line-height:23px}
/* Actions */
.clearlooks2 a {width:29px; height:16px; top:3px;}
.clearlooks2 .mceClose {right:6px; background:url(img/buttons.gif) -87px 0}
.clearlooks2 .mceMin {display:none; right:68px; background:url(img/buttons.gif) 0 0}
.clearlooks2 .mceMed {display:none; right:37px; background:url(img/buttons.gif) -29px 0}
.clearlooks2 .mceMax {display:none; right:37px; background:url(img/buttons.gif) -58px 0}
.clearlooks2 .mceMove {display:none;width:100%;cursor:move;background:url(img/corners.gif) no-repeat -100px -100px}
.clearlooks2 .mceMovable .mceMove {display:block}
.clearlooks2 .mceFocus .mceClose {right:6px; background:url(img/buttons.gif) -87px -16px}
.clearlooks2 .mceFocus .mceMin {right:68px; background:url(img/buttons.gif) 0 -16px}
.clearlooks2 .mceFocus .mceMed {right:37px; background:url(img/buttons.gif) -29px -16px}
.clearlooks2 .mceFocus .mceMax {right:37px; background:url(img/buttons.gif) -58px -16px}
.clearlooks2 .mceFocus .mceClose:hover {right:6px; background:url(img/buttons.gif) -87px -32px}
.clearlooks2 .mceFocus .mceClose:hover {right:6px; background:url(img/buttons.gif) -87px -32px}
.clearlooks2 .mceFocus .mceMin:hover {right:68px; background:url(img/buttons.gif) 0 -32px}
.clearlooks2 .mceFocus .mceMed:hover {right:37px; background:url(img/buttons.gif) -29px -32px}
.clearlooks2 .mceFocus .mceMax:hover {right:37px; background:url(img/buttons.gif) -58px -32px}
/* Resize */
.clearlooks2 .mceResize {top:auto; left:auto; display:none; width:5px; height:5px; background:url(img/horizontal.gif) no-repeat 0 -75px}
.clearlooks2 .mceResizable .mceResize {display:block}
.clearlooks2 .mceResizable .mceMin, .clearlooks2 .mceMax {display:none}
.clearlooks2 .mceMinimizable .mceMin {display:block}
.clearlooks2 .mceMaximizable .mceMax {display:block}
.clearlooks2 .mceMaximized .mceMed {display:block}
.clearlooks2 .mceMaximized .mceMax {display:none}
.clearlooks2 a.mceResizeN {top:0; left:0; width:100%; cursor:n-resize}
.clearlooks2 a.mceResizeNW {top:0; left:0; cursor:nw-resize}
.clearlooks2 a.mceResizeNE {top:0; right:0; cursor:ne-resize}
.clearlooks2 a.mceResizeW {top:0; left:0; height:100%; cursor:w-resize;}
.clearlooks2 a.mceResizeE {top:0; right:0; height:100%; cursor:e-resize}
.clearlooks2 a.mceResizeS {bottom:0; left:0; width:100%; cursor:s-resize}
.clearlooks2 a.mceResizeSW {bottom:0; left:0; cursor:sw-resize}
.clearlooks2 a.mceResizeSE {bottom:0; right:0; cursor:se-resize}
/* Alert/Confirm */
.clearlooks2 .mceButton {font-weight:bold; bottom:10px; width:80px; height:30px; background:url(img/button.gif); line-height:30px; vertical-align:middle; text-align:center; outline:0}
.clearlooks2 .mceMiddle .mceIcon {left:15px; top:35px; width:32px; height:32px}
.clearlooks2 .mceAlert .mceMiddle span, .clearlooks2 .mceConfirm .mceMiddle span {background:transparent;left:60px; top:35px; width:320px; height:50px; font-weight:bold; overflow:auto; white-space:normal}
.clearlooks2 a:hover {font-weight:bold;}
.clearlooks2 .mceAlert .mceMiddle, .clearlooks2 .mceConfirm .mceMiddle {background:#D6D7D5}
.clearlooks2 .mceAlert .mceOk {left:50%; top:auto; margin-left: -40px}
.clearlooks2 .mceAlert .mceIcon {background:url(img/alert.gif)}
.clearlooks2 .mceConfirm .mceOk {left:50%; top:auto; margin-left: -90px}
.clearlooks2 .mceConfirm .mceCancel {left:50%; top:auto}
.clearlooks2 .mceConfirm .mceIcon {background:url(img/confirm.gif)}

View File

@ -1,387 +0,0 @@
<!-- <!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>Template for dialogs</title>
<link rel="stylesheet" type="text/css" href="skins/clearlooks2/window.css" />
</head>
<body>
<div class="mceEditor">
<div class="clearlooks2" style="width:400px; height:100px; left:10px;">
<div class="mceWrapper">
<div class="mceTop">
<div class="mceLeft"></div>
<div class="mceCenter"></div>
<div class="mceRight"></div>
<span>Blured</span>
</div>
<div class="mceMiddle">
<div class="mceLeft"></div>
<span>Content</span>
<div class="mceRight"></div>
</div>
<div class="mceBottom">
<div class="mceLeft"></div>
<div class="mceCenter"></div>
<div class="mceRight"></div>
<span>Statusbar text.</span>
</div>
<a class="mceMove" href="#"></a>
<a class="mceMin" href="#"></a>
<a class="mceMax" href="#"></a>
<a class="mceMed" href="#"></a>
<a class="mceClose" href="#"></a>
<a class="mceResize mceResizeN" href="#"></a>
<a class="mceResize mceResizeS" href="#"></a>
<a class="mceResize mceResizeW" href="#"></a>
<a class="mceResize mceResizeE" href="#"></a>
<a class="mceResize mceResizeNW" href="#"></a>
<a class="mceResize mceResizeNE" href="#"></a>
<a class="mceResize mceResizeSW" href="#"></a>
<a class="mceResize mceResizeSE" href="#"></a>
</div>
</div>
<div class="clearlooks2" style="width:400px; height:100px; left:420px;">
<div class="mceWrapper mceMovable mceFocus">
<div class="mceTop">
<div class="mceLeft"></div>
<div class="mceCenter"></div>
<div class="mceRight"></div>
<span>Focused</span>
</div>
<div class="mceMiddle">
<div class="mceLeft"></div>
<span>Content</span>
<div class="mceRight"></div>
</div>
<div class="mceBottom">
<div class="mceLeft"></div>
<div class="mceCenter"></div>
<div class="mceRight"></div>
<span>Statusbar text.</span>
</div>
<a class="mceMove" href="#"></a>
<a class="mceMin" href="#"></a>
<a class="mceMax" href="#"></a>
<a class="mceMed" href="#"></a>
<a class="mceClose" href="#"></a>
<a class="mceResize mceResizeN" href="#"></a>
<a class="mceResize mceResizeS" href="#"></a>
<a class="mceResize mceResizeW" href="#"></a>
<a class="mceResize mceResizeE" href="#"></a>
<a class="mceResize mceResizeNW" href="#"></a>
<a class="mceResize mceResizeNE" href="#"></a>
<a class="mceResize mceResizeSW" href="#"></a>
<a class="mceResize mceResizeSE" href="#"></a>
</div>
</div>
<div class="clearlooks2" style="width:400px; height:100px; left:10px; top:120px;">
<div class="mceWrapper mceMovable mceFocus mceStatusbar">
<div class="mceTop">
<div class="mceLeft"></div>
<div class="mceCenter"></div>
<div class="mceRight"></div>
<span>Statusbar</span>
</div>
<div class="mceMiddle">
<div class="mceLeft"></div>
<span>Content</span>
<div class="mceRight"></div>
</div>
<div class="mceBottom">
<div class="mceLeft"></div>
<div class="mceCenter"></div>
<div class="mceRight"></div>
<span>Statusbar text.</span>
</div>
<a class="mceMove" href="#"></a>
<a class="mceMin" href="#"></a>
<a class="mceMax" href="#"></a>
<a class="mceMed" href="#"></a>
<a class="mceClose" href="#"></a>
<a class="mceResize mceResizeN" href="#"></a>
<a class="mceResize mceResizeS" href="#"></a>
<a class="mceResize mceResizeW" href="#"></a>
<a class="mceResize mceResizeE" href="#"></a>
<a class="mceResize mceResizeNW" href="#"></a>
<a class="mceResize mceResizeNE" href="#"></a>
<a class="mceResize mceResizeSW" href="#"></a>
<a class="mceResize mceResizeSE" href="#"></a>
</div>
</div>
<div class="clearlooks2" style="width:400px; height:100px; left:420px; top:120px;">
<div class="mceWrapper mceMovable mceFocus mceStatusbar mceResizable">
<div class="mceTop">
<div class="mceLeft"></div>
<div class="mceCenter"></div>
<div class="mceRight"></div>
<span>Statusbar, Resizable</span>
</div>
<div class="mceMiddle">
<div class="mceLeft"></div>
<span>Content</span>
<div class="mceRight"></div>
</div>
<div class="mceBottom">
<div class="mceLeft"></div>
<div class="mceCenter"></div>
<div class="mceRight"></div>
<span>Statusbar text.</span>
</div>
<a class="mceMove" href="#"></a>
<a class="mceMin" href="#"></a>
<a class="mceMax" href="#"></a>
<a class="mceMed" href="#"></a>
<a class="mceClose" href="#"></a>
<a class="mceResize mceResizeN" href="#"></a>
<a class="mceResize mceResizeS" href="#"></a>
<a class="mceResize mceResizeW" href="#"></a>
<a class="mceResize mceResizeE" href="#"></a>
<a class="mceResize mceResizeNW" href="#"></a>
<a class="mceResize mceResizeNE" href="#"></a>
<a class="mceResize mceResizeSW" href="#"></a>
<a class="mceResize mceResizeSE" href="#"></a>
</div>
</div>
<div class="clearlooks2" style="width:400px; height:100px; left:10px; top:230px;">
<div class="mceWrapper mceMovable mceFocus mceResizable mceMaximizable">
<div class="mceTop">
<div class="mceLeft"></div>
<div class="mceCenter"></div>
<div class="mceRight"></div>
<span>Resizable, Maximizable</span>
</div>
<div class="mceMiddle">
<div class="mceLeft"></div>
<span>Content</span>
<div class="mceRight"></div>
</div>
<div class="mceBottom">
<div class="mceLeft"></div>
<div class="mceCenter"></div>
<div class="mceRight"></div>
<span>Statusbar text.</span>
</div>
<a class="mceMove" href="#"></a>
<a class="mceMin" href="#"></a>
<a class="mceMax" href="#"></a>
<a class="mceMed" href="#"></a>
<a class="mceClose" href="#"></a>
<a class="mceResize mceResizeN" href="#"></a>
<a class="mceResize mceResizeS" href="#"></a>
<a class="mceResize mceResizeW" href="#"></a>
<a class="mceResize mceResizeE" href="#"></a>
<a class="mceResize mceResizeNW" href="#"></a>
<a class="mceResize mceResizeNE" href="#"></a>
<a class="mceResize mceResizeSW" href="#"></a>
<a class="mceResize mceResizeSE" href="#"></a>
</div>
</div>
<div class="clearlooks2" style="width:400px; height:100px; left:420px; top:230px;">
<div class="mceWrapper mceMovable mceStatusbar mceResizable mceMaximizable">
<div class="mceTop">
<div class="mceLeft"></div>
<div class="mceCenter"></div>
<div class="mceRight"></div>
<span>Blurred, Maximizable, Statusbar, Resizable</span>
</div>
<div class="mceMiddle">
<div class="mceLeft"></div>
<span>Content</span>
<div class="mceRight"></div>
</div>
<div class="mceBottom">
<div class="mceLeft"></div>
<div class="mceCenter"></div>
<div class="mceRight"></div>
<span>Statusbar text.</span>
</div>
<a class="mceMove" href="#"></a>
<a class="mceMin" href="#"></a>
<a class="mceMax" href="#"></a>
<a class="mceMed" href="#"></a>
<a class="mceClose" href="#"></a>
<a class="mceResize mceResizeN" href="#"></a>
<a class="mceResize mceResizeS" href="#"></a>
<a class="mceResize mceResizeW" href="#"></a>
<a class="mceResize mceResizeE" href="#"></a>
<a class="mceResize mceResizeNW" href="#"></a>
<a class="mceResize mceResizeNE" href="#"></a>
<a class="mceResize mceResizeSW" href="#"></a>
<a class="mceResize mceResizeSE" href="#"></a>
</div>
</div>
<div class="clearlooks2" style="width:400px; height:100px; left:10px; top:340px;">
<div class="mceWrapper mceMovable mceFocus mceResizable mceMaximized mceMinimizable mceMaximizable">
<div class="mceTop">
<div class="mceLeft"></div>
<div class="mceCenter"></div>
<div class="mceRight"></div>
<span>Maximized, Maximizable, Minimizable</span>
</div>
<div class="mceMiddle">
<div class="mceLeft"></div>
<span>Content</span>
<div class="mceRight"></div>
</div>
<div class="mceBottom">
<div class="mceLeft"></div>
<div class="mceCenter"></div>
<div class="mceRight"></div>
<span>Statusbar text.</span>
</div>
<a class="mceMove" href="#"></a>
<a class="mceMin" href="#"></a>
<a class="mceMax" href="#"></a>
<a class="mceMed" href="#"></a>
<a class="mceClose" href="#"></a>
<a class="mceResize mceResizeN" href="#"></a>
<a class="mceResize mceResizeS" href="#"></a>
<a class="mceResize mceResizeW" href="#"></a>
<a class="mceResize mceResizeE" href="#"></a>
<a class="mceResize mceResizeNW" href="#"></a>
<a class="mceResize mceResizeNE" href="#"></a>
<a class="mceResize mceResizeSW" href="#"></a>
<a class="mceResize mceResizeSE" href="#"></a>
</div>
</div>
<div class="clearlooks2" style="width:400px; height:100px; left:420px; top:340px;">
<div class="mceWrapper mceMovable mceStatusbar mceResizable mceMaximized mceMinimizable mceMaximizable">
<div class="mceTop">
<div class="mceLeft"></div>
<div class="mceCenter"></div>
<div class="mceRight"></div>
<span>Blured</span>
</div>
<div class="mceMiddle">
<div class="mceLeft"></div>
<span>Content</span>
<div class="mceRight"></div>
</div>
<div class="mceBottom">
<div class="mceLeft"></div>
<div class="mceCenter"></div>
<div class="mceRight"></div>
<span>Statusbar text.</span>
</div>
<a class="mceMove" href="#"></a>
<a class="mceMin" href="#"></a>
<a class="mceMax" href="#"></a>
<a class="mceMed" href="#"></a>
<a class="mceClose" href="#"></a>
<a class="mceResize mceResizeN" href="#"></a>
<a class="mceResize mceResizeS" href="#"></a>
<a class="mceResize mceResizeW" href="#"></a>
<a class="mceResize mceResizeE" href="#"></a>
<a class="mceResize mceResizeNW" href="#"></a>
<a class="mceResize mceResizeNE" href="#"></a>
<a class="mceResize mceResizeSW" href="#"></a>
<a class="mceResize mceResizeSE" href="#"></a>
</div>
</div>
<div class="clearlooks2" style="width:400px; height:130px; left:10px; top:450px;">
<div class="mceWrapper mceMovable mceFocus mceModal mceAlert">
<div class="mceTop">
<div class="mceLeft"></div>
<div class="mceCenter"></div>
<div class="mceRight"></div>
<span>Alert</span>
</div>
<div class="mceMiddle">
<div class="mceLeft"></div>
<span>
This is a very long error message. This is a very long error message.
This is a very long error message. This is a very long error message.
This is a very long error message. This is a very long error message.
This is a very long error message. This is a very long error message.
This is a very long error message. This is a very long error message.
This is a very long error message. This is a very long error message.
</span>
<div class="mceRight"></div>
<div class="mceIcon"></div>
</div>
<div class="mceBottom">
<div class="mceLeft"></div>
<div class="mceCenter"></div>
<div class="mceRight"></div>
</div>
<a class="mceMove" href="#"></a>
<a class="mceButton mceOk" href="#">Ok</a>
<a class="mceClose" href="#"></a>
</div>
</div>
<div class="clearlooks2" style="width:400px; height:130px; left:420px; top:450px;">
<div class="mceWrapper mceMovable mceFocus mceModal mceConfirm">
<div class="mceTop">
<div class="mceLeft"></div>
<div class="mceCenter"></div>
<div class="mceRight"></div>
<span>Confirm</span>
</div>
<div class="mceMiddle">
<div class="mceLeft"></div>
<span>
This is a very long error message. This is a very long error message.
This is a very long error message. This is a very long error message.
This is a very long error message. This is a very long error message.
This is a very long error message. This is a very long error message.
This is a very long error message. This is a very long error message.
This is a very long error message. This is a very long error message.
</span>
<div class="mceRight"></div>
<div class="mceIcon"></div>
</div>
<div class="mceBottom">
<div class="mceLeft"></div>
<div class="mceCenter"></div>
<div class="mceRight"></div>
</div>
<a class="mceMove" href="#"></a>
<a class="mceButton mceOk" href="#">Ok</a>
<a class="mceButton mceCancel" href="#">Cancel</a>
<a class="mceClose" href="#"></a>
</div>
</div>
</div>
</body>
</html>

View File

@ -1 +0,0 @@
(function(){tinymce.create("tinymce.plugins.InsertDateTime",{init:function(a,b){var c=this;c.editor=a;a.addCommand("mceInsertDate",function(){var d=c._getDateTime(new Date(),a.getParam("plugin_insertdate_dateFormat",a.getLang("insertdatetime.date_fmt")));a.execCommand("mceInsertContent",false,d)});a.addCommand("mceInsertTime",function(){var d=c._getDateTime(new Date(),a.getParam("plugin_insertdate_timeFormat",a.getLang("insertdatetime.time_fmt")));a.execCommand("mceInsertContent",false,d)});a.addButton("insertdate",{title:"insertdatetime.insertdate_desc",cmd:"mceInsertDate"});a.addButton("inserttime",{title:"insertdatetime.inserttime_desc",cmd:"mceInsertTime"})},getInfo:function(){return{longname:"Insert date/time",author:"Moxiecode Systems AB",authorurl:"http://tinymce.moxiecode.com",infourl:"http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/insertdatetime",version:tinymce.majorVersion+"."+tinymce.minorVersion}},_getDateTime:function(e,a){var c=this.editor;function b(g,d){g=""+g;if(g.length<d){for(var f=0;f<(d-g.length);f++){g="0"+g}}return g}a=a.replace("%D","%m/%d/%y");a=a.replace("%r","%I:%M:%S %p");a=a.replace("%Y",""+e.getFullYear());a=a.replace("%y",""+e.getYear());a=a.replace("%m",b(e.getMonth()+1,2));a=a.replace("%d",b(e.getDate(),2));a=a.replace("%H",""+b(e.getHours(),2));a=a.replace("%M",""+b(e.getMinutes(),2));a=a.replace("%S",""+b(e.getSeconds(),2));a=a.replace("%I",""+((e.getHours()+11)%12+1));a=a.replace("%p",""+(e.getHours()<12?"AM":"PM"));a=a.replace("%B",""+c.getLang("insertdatetime.months_long").split(",")[e.getMonth()]);a=a.replace("%b",""+c.getLang("insertdatetime.months_short").split(",")[e.getMonth()]);a=a.replace("%A",""+c.getLang("insertdatetime.day_long").split(",")[e.getDay()]);a=a.replace("%a",""+c.getLang("insertdatetime.day_short").split(",")[e.getDay()]);a=a.replace("%%","%");return a}});tinymce.PluginManager.add("insertdatetime",tinymce.plugins.InsertDateTime)})();

View File

@ -1,83 +0,0 @@
/**
* editor_plugin_src.js
*
* Copyright 2009, Moxiecode Systems AB
* Released under LGPL License.
*
* License: http://tinymce.moxiecode.com/license
* Contributing: http://tinymce.moxiecode.com/contributing
*/
(function() {
tinymce.create('tinymce.plugins.InsertDateTime', {
init : function(ed, url) {
var t = this;
t.editor = ed;
ed.addCommand('mceInsertDate', function() {
var str = t._getDateTime(new Date(), ed.getParam("plugin_insertdate_dateFormat", ed.getLang('insertdatetime.date_fmt')));
ed.execCommand('mceInsertContent', false, str);
});
ed.addCommand('mceInsertTime', function() {
var str = t._getDateTime(new Date(), ed.getParam("plugin_insertdate_timeFormat", ed.getLang('insertdatetime.time_fmt')));
ed.execCommand('mceInsertContent', false, str);
});
ed.addButton('insertdate', {title : 'insertdatetime.insertdate_desc', cmd : 'mceInsertDate'});
ed.addButton('inserttime', {title : 'insertdatetime.inserttime_desc', cmd : 'mceInsertTime'});
},
getInfo : function() {
return {
longname : 'Insert date/time',
author : 'Moxiecode Systems AB',
authorurl : 'http://tinymce.moxiecode.com',
infourl : 'http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/insertdatetime',
version : tinymce.majorVersion + "." + tinymce.minorVersion
};
},
// Private methods
_getDateTime : function(d, fmt) {
var ed = this.editor;
function addZeros(value, len) {
value = "" + value;
if (value.length < len) {
for (var i=0; i<(len-value.length); i++)
value = "0" + value;
}
return value;
};
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("%B", "" + ed.getLang("insertdatetime.months_long").split(',')[d.getMonth()]);
fmt = fmt.replace("%b", "" + ed.getLang("insertdatetime.months_short").split(',')[d.getMonth()]);
fmt = fmt.replace("%A", "" + ed.getLang("insertdatetime.day_long").split(',')[d.getDay()]);
fmt = fmt.replace("%a", "" + ed.getLang("insertdatetime.day_short").split(',')[d.getDay()]);
fmt = fmt.replace("%%", "%");
return fmt;
}
});
// Register plugin
tinymce.PluginManager.add('insertdatetime', tinymce.plugins.InsertDateTime);
})();

View File

@ -1 +0,0 @@
(function(){function a(b){do{if(b.className&&b.className.indexOf("mceItemLayer")!=-1){return b}}while(b=b.parentNode)}tinymce.create("tinymce.plugins.Layer",{init:function(b,c){var d=this;d.editor=b;b.addCommand("mceInsertLayer",d._insertLayer,d);b.addCommand("mceMoveForward",function(){d._move(1)});b.addCommand("mceMoveBackward",function(){d._move(-1)});b.addCommand("mceMakeAbsolute",function(){d._toggleAbsolute()});b.addButton("moveforward",{title:"layer.forward_desc",cmd:"mceMoveForward"});b.addButton("movebackward",{title:"layer.backward_desc",cmd:"mceMoveBackward"});b.addButton("absolute",{title:"layer.absolute_desc",cmd:"mceMakeAbsolute"});b.addButton("insertlayer",{title:"layer.insertlayer_desc",cmd:"mceInsertLayer"});b.onInit.add(function(){var e=b.dom;if(tinymce.isIE){b.getDoc().execCommand("2D-Position",false,true)}});b.onMouseUp.add(function(f,h){var g=a(h.target);if(g){f.dom.setAttrib(g,"data-mce-style","")}});b.onMouseDown.add(function(f,j){var h=j.target,i=f.getDoc(),g;if(tinymce.isGecko){if(a(h)){if(i.designMode!=="on"){i.designMode="on";h=i.body;g=h.parentNode;g.removeChild(h);g.appendChild(h)}}else{if(i.designMode=="on"){i.designMode="off"}}}});b.onNodeChange.add(d._nodeChange,d);b.onVisualAid.add(d._visualAid,d)},getInfo:function(){return{longname:"Layer",author:"Moxiecode Systems AB",authorurl:"http://tinymce.moxiecode.com",infourl:"http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/layer",version:tinymce.majorVersion+"."+tinymce.minorVersion}},_nodeChange:function(c,b,f){var d,e;d=this._getParentLayer(f);e=c.dom.getParent(f,"DIV,P,IMG");if(!e){b.setDisabled("absolute",1);b.setDisabled("moveforward",1);b.setDisabled("movebackward",1)}else{b.setDisabled("absolute",0);b.setDisabled("moveforward",!d);b.setDisabled("movebackward",!d);b.setActive("absolute",d&&d.style.position.toLowerCase()=="absolute")}},_visualAid:function(b,d,c){var f=b.dom;tinymce.each(f.select("div,p",d),function(g){if(/^(absolute|relative|fixed)$/i.test(g.style.position)){if(c){f.addClass(g,"mceItemVisualAid")}else{f.removeClass(g,"mceItemVisualAid")}f.addClass(g,"mceItemLayer")}})},_move:function(j){var c=this.editor,g,h=[],f=this._getParentLayer(c.selection.getNode()),e=-1,k=-1,b;b=[];tinymce.walk(c.getBody(),function(d){if(d.nodeType==1&&/^(absolute|relative|static)$/i.test(d.style.position)){b.push(d)}},"childNodes");for(g=0;g<b.length;g++){h[g]=b[g].style.zIndex?parseInt(b[g].style.zIndex):0;if(e<0&&b[g]==f){e=g}}if(j<0){for(g=0;g<h.length;g++){if(h[g]<h[e]){k=g;break}}if(k>-1){b[e].style.zIndex=h[k];b[k].style.zIndex=h[e]}else{if(h[e]>0){b[e].style.zIndex=h[e]-1}}}else{for(g=0;g<h.length;g++){if(h[g]>h[e]){k=g;break}}if(k>-1){b[e].style.zIndex=h[k];b[k].style.zIndex=h[e]}else{b[e].style.zIndex=h[e]+1}}c.execCommand("mceRepaint")},_getParentLayer:function(b){return this.editor.dom.getParent(b,function(c){return c.nodeType==1&&/^(absolute|relative|static)$/i.test(c.style.position)})},_insertLayer:function(){var c=this.editor,e=c.dom,d=e.getPos(e.getParent(c.selection.getNode(),"*")),b=c.getBody();c.dom.add(b,"div",{style:{position:"absolute",left:d.x,top:(d.y>20?d.y:20),width:100,height:100},"class":"mceItemVisualAid mceItemLayer"},c.selection.getContent()||c.getLang("layer.content"));if(tinymce.isIE){e.setHTML(b,b.innerHTML)}},_toggleAbsolute:function(){var b=this.editor,c=this._getParentLayer(b.selection.getNode());if(!c){c=b.dom.getParent(b.selection.getNode(),"DIV,P,IMG")}if(c){if(c.style.position.toLowerCase()=="absolute"){b.dom.setStyles(c,{position:"",left:"",top:"",width:"",height:""});b.dom.removeClass(c,"mceItemVisualAid");b.dom.removeClass(c,"mceItemLayer")}else{if(c.style.left==""){c.style.left=20+"px"}if(c.style.top==""){c.style.top=20+"px"}if(c.style.width==""){c.style.width=c.width?(c.width+"px"):"100px"}if(c.style.height==""){c.style.height=c.height?(c.height+"px"):"100px"}c.style.position="absolute";b.dom.setAttrib(c,"data-mce-style","");b.addVisual(b.getBody())}b.execCommand("mceRepaint");b.nodeChanged()}}});tinymce.PluginManager.add("layer",tinymce.plugins.Layer)})();

View File

@ -1,262 +0,0 @@
/**
* editor_plugin_src.js
*
* Copyright 2009, Moxiecode Systems AB
* Released under LGPL License.
*
* License: http://tinymce.moxiecode.com/license
* Contributing: http://tinymce.moxiecode.com/contributing
*/
(function() {
function findParentLayer(node) {
do {
if (node.className && node.className.indexOf('mceItemLayer') != -1) {
return node;
}
} while (node = node.parentNode);
};
tinymce.create('tinymce.plugins.Layer', {
init : function(ed, url) {
var t = this;
t.editor = ed;
// Register commands
ed.addCommand('mceInsertLayer', t._insertLayer, t);
ed.addCommand('mceMoveForward', function() {
t._move(1);
});
ed.addCommand('mceMoveBackward', function() {
t._move(-1);
});
ed.addCommand('mceMakeAbsolute', function() {
t._toggleAbsolute();
});
// Register buttons
ed.addButton('moveforward', {title : 'layer.forward_desc', cmd : 'mceMoveForward'});
ed.addButton('movebackward', {title : 'layer.backward_desc', cmd : 'mceMoveBackward'});
ed.addButton('absolute', {title : 'layer.absolute_desc', cmd : 'mceMakeAbsolute'});
ed.addButton('insertlayer', {title : 'layer.insertlayer_desc', cmd : 'mceInsertLayer'});
ed.onInit.add(function() {
var dom = ed.dom;
if (tinymce.isIE)
ed.getDoc().execCommand('2D-Position', false, true);
});
// Remove serialized styles when selecting a layer since it might be changed by a drag operation
ed.onMouseUp.add(function(ed, e) {
var layer = findParentLayer(e.target);
if (layer) {
ed.dom.setAttrib(layer, 'data-mce-style', '');
}
});
// Fixes edit focus issues with layers on Gecko
// This will enable designMode while inside a layer and disable it when outside
ed.onMouseDown.add(function(ed, e) {
var node = e.target, doc = ed.getDoc(), parent;
if (tinymce.isGecko) {
if (findParentLayer(node)) {
if (doc.designMode !== 'on') {
doc.designMode = 'on';
// Repaint caret
node = doc.body;
parent = node.parentNode;
parent.removeChild(node);
parent.appendChild(node);
}
} else if (doc.designMode == 'on') {
doc.designMode = 'off';
}
}
});
ed.onNodeChange.add(t._nodeChange, t);
ed.onVisualAid.add(t._visualAid, t);
},
getInfo : function() {
return {
longname : 'Layer',
author : 'Moxiecode Systems AB',
authorurl : 'http://tinymce.moxiecode.com',
infourl : 'http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/layer',
version : tinymce.majorVersion + "." + tinymce.minorVersion
};
},
// Private methods
_nodeChange : function(ed, cm, n) {
var le, p;
le = this._getParentLayer(n);
p = ed.dom.getParent(n, 'DIV,P,IMG');
if (!p) {
cm.setDisabled('absolute', 1);
cm.setDisabled('moveforward', 1);
cm.setDisabled('movebackward', 1);
} else {
cm.setDisabled('absolute', 0);
cm.setDisabled('moveforward', !le);
cm.setDisabled('movebackward', !le);
cm.setActive('absolute', le && le.style.position.toLowerCase() == "absolute");
}
},
// Private methods
_visualAid : function(ed, e, s) {
var dom = ed.dom;
tinymce.each(dom.select('div,p', e), function(e) {
if (/^(absolute|relative|fixed)$/i.test(e.style.position)) {
if (s)
dom.addClass(e, 'mceItemVisualAid');
else
dom.removeClass(e, 'mceItemVisualAid');
dom.addClass(e, 'mceItemLayer');
}
});
},
_move : function(d) {
var ed = this.editor, i, z = [], le = this._getParentLayer(ed.selection.getNode()), ci = -1, fi = -1, nl;
nl = [];
tinymce.walk(ed.getBody(), function(n) {
if (n.nodeType == 1 && /^(absolute|relative|static)$/i.test(n.style.position))
nl.push(n);
}, 'childNodes');
// Find z-indexes
for (i=0; i<nl.length; i++) {
z[i] = nl[i].style.zIndex ? parseInt(nl[i].style.zIndex) : 0;
if (ci < 0 && nl[i] == le)
ci = i;
}
if (d < 0) {
// Move back
// Try find a lower one
for (i=0; i<z.length; i++) {
if (z[i] < z[ci]) {
fi = i;
break;
}
}
if (fi > -1) {
nl[ci].style.zIndex = z[fi];
nl[fi].style.zIndex = z[ci];
} else {
if (z[ci] > 0)
nl[ci].style.zIndex = z[ci] - 1;
}
} else {
// Move forward
// Try find a higher one
for (i=0; i<z.length; i++) {
if (z[i] > z[ci]) {
fi = i;
break;
}
}
if (fi > -1) {
nl[ci].style.zIndex = z[fi];
nl[fi].style.zIndex = z[ci];
} else
nl[ci].style.zIndex = z[ci] + 1;
}
ed.execCommand('mceRepaint');
},
_getParentLayer : function(n) {
return this.editor.dom.getParent(n, function(n) {
return n.nodeType == 1 && /^(absolute|relative|static)$/i.test(n.style.position);
});
},
_insertLayer : function() {
var ed = this.editor, dom = ed.dom, p = dom.getPos(dom.getParent(ed.selection.getNode(), '*')), body = ed.getBody();
ed.dom.add(body, 'div', {
style : {
position : 'absolute',
left : p.x,
top : (p.y > 20 ? p.y : 20),
width : 100,
height : 100
},
'class' : 'mceItemVisualAid mceItemLayer'
}, ed.selection.getContent() || ed.getLang('layer.content'));
// Workaround for IE where it messes up the JS engine if you insert a layer on IE 6,7
if (tinymce.isIE)
dom.setHTML(body, body.innerHTML);
},
_toggleAbsolute : function() {
var ed = this.editor, le = this._getParentLayer(ed.selection.getNode());
if (!le)
le = ed.dom.getParent(ed.selection.getNode(), 'DIV,P,IMG');
if (le) {
if (le.style.position.toLowerCase() == "absolute") {
ed.dom.setStyles(le, {
position : '',
left : '',
top : '',
width : '',
height : ''
});
ed.dom.removeClass(le, 'mceItemVisualAid');
ed.dom.removeClass(le, 'mceItemLayer');
} else {
if (le.style.left == "")
le.style.left = 20 + 'px';
if (le.style.top == "")
le.style.top = 20 + 'px';
if (le.style.width == "")
le.style.width = le.width ? (le.width + 'px') : '100px';
if (le.style.height == "")
le.style.height = le.height ? (le.height + 'px') : '100px';
le.style.position = "absolute";
ed.dom.setAttrib(le, 'data-mce-style', '');
ed.addVisual(ed.getBody());
}
ed.execCommand('mceRepaint');
ed.nodeChanged();
}
}
});
// Register plugin
tinymce.PluginManager.add('layer', tinymce.plugins.Layer);
})();

View File

@ -1 +0,0 @@
(function(a){a.onAddEditor.addToTop(function(c,b){b.settings.inline_styles=false});a.create("tinymce.plugins.LegacyOutput",{init:function(b){b.onInit.add(function(){var c="p,h1,h2,h3,h4,h5,h6,td,th,div,ul,ol,li,table,img",e=a.explode(b.settings.font_size_style_values),d=b.schema;b.formatter.register({alignleft:{selector:c,attributes:{align:"left"}},aligncenter:{selector:c,attributes:{align:"center"}},alignright:{selector:c,attributes:{align:"right"}},alignfull:{selector:c,attributes:{align:"justify"}},bold:[{inline:"b",remove:"all"},{inline:"strong",remove:"all"},{inline:"span",styles:{fontWeight:"bold"}}],italic:[{inline:"i",remove:"all"},{inline:"em",remove:"all"},{inline:"span",styles:{fontStyle:"italic"}}],underline:[{inline:"u",remove:"all"},{inline:"span",styles:{textDecoration:"underline"},exact:true}],strikethrough:[{inline:"strike",remove:"all"},{inline:"span",styles:{textDecoration:"line-through"},exact:true}],fontname:{inline:"font",attributes:{face:"%value"}},fontsize:{inline:"font",attributes:{size:function(f){return a.inArray(e,f.value)+1}}},forecolor:{inline:"font",attributes:{color:"%value"}},hilitecolor:{inline:"font",styles:{backgroundColor:"%value"}}});a.each("b,i,u,strike".split(","),function(f){d.addValidElements(f+"[*]")});if(!d.getElementRule("font")){d.addValidElements("font[face|size|color|style]")}a.each(c.split(","),function(f){var h=d.getElementRule(f),g;if(h){if(!h.attributes.align){h.attributes.align={};h.attributesOrder.push("align")}}});b.onNodeChange.add(function(g,k){var j,f,h,i;f=g.dom.getParent(g.selection.getNode(),"font");if(f){h=f.face;i=f.size}if(j=k.get("fontselect")){j.select(function(l){return l==h})}if(j=k.get("fontsizeselect")){j.select(function(m){var l=a.inArray(e,m.fontSize);return l+1==i})}})})},getInfo:function(){return{longname:"LegacyOutput",author:"Moxiecode Systems AB",authorurl:"http://tinymce.moxiecode.com",infourl:"http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/legacyoutput",version:a.majorVersion+"."+a.minorVersion}}});a.PluginManager.add("legacyoutput",a.plugins.LegacyOutput)})(tinymce);

View File

@ -1,139 +0,0 @@
/**
* editor_plugin_src.js
*
* Copyright 2009, Moxiecode Systems AB
* Released under LGPL License.
*
* License: http://tinymce.moxiecode.com/license
* Contributing: http://tinymce.moxiecode.com/contributing
*
* This plugin will force TinyMCE to produce deprecated legacy output such as font elements, u elements, align
* attributes and so forth. There are a few cases where these old items might be needed for example in email applications or with Flash
*
* However you should NOT use this plugin if you are building some system that produces web contents such as a CMS. All these elements are
* not apart of the newer specifications for HTML and XHTML.
*/
(function(tinymce) {
// Override inline_styles setting to force TinyMCE to produce deprecated contents
tinymce.onAddEditor.addToTop(function(tinymce, editor) {
editor.settings.inline_styles = false;
});
// Create the legacy ouput plugin
tinymce.create('tinymce.plugins.LegacyOutput', {
init : function(editor) {
editor.onInit.add(function() {
var alignElements = 'p,h1,h2,h3,h4,h5,h6,td,th,div,ul,ol,li,table,img',
fontSizes = tinymce.explode(editor.settings.font_size_style_values),
schema = editor.schema;
// Override some internal formats to produce legacy elements and attributes
editor.formatter.register({
// Change alignment formats to use the deprecated align attribute
alignleft : {selector : alignElements, attributes : {align : 'left'}},
aligncenter : {selector : alignElements, attributes : {align : 'center'}},
alignright : {selector : alignElements, attributes : {align : 'right'}},
alignfull : {selector : alignElements, attributes : {align : 'justify'}},
// Change the basic formatting elements to use deprecated element types
bold : [
{inline : 'b', remove : 'all'},
{inline : 'strong', remove : 'all'},
{inline : 'span', styles : {fontWeight : 'bold'}}
],
italic : [
{inline : 'i', remove : 'all'},
{inline : 'em', remove : 'all'},
{inline : 'span', styles : {fontStyle : 'italic'}}
],
underline : [
{inline : 'u', remove : 'all'},
{inline : 'span', styles : {textDecoration : 'underline'}, exact : true}
],
strikethrough : [
{inline : 'strike', remove : 'all'},
{inline : 'span', styles : {textDecoration: 'line-through'}, exact : true}
],
// Change font size and font family to use the deprecated font element
fontname : {inline : 'font', attributes : {face : '%value'}},
fontsize : {
inline : 'font',
attributes : {
size : function(vars) {
return tinymce.inArray(fontSizes, vars.value) + 1;
}
}
},
// Setup font elements for colors as well
forecolor : {inline : 'font', attributes : {color : '%value'}},
hilitecolor : {inline : 'font', styles : {backgroundColor : '%value'}}
});
// Check that deprecated elements are allowed if not add them
tinymce.each('b,i,u,strike'.split(','), function(name) {
schema.addValidElements(name + '[*]');
});
// Add font element if it's missing
if (!schema.getElementRule("font"))
schema.addValidElements("font[face|size|color|style]");
// Add the missing and depreacted align attribute for the serialization engine
tinymce.each(alignElements.split(','), function(name) {
var rule = schema.getElementRule(name), found;
if (rule) {
if (!rule.attributes.align) {
rule.attributes.align = {};
rule.attributesOrder.push('align');
}
}
});
// Listen for the onNodeChange event so that we can do special logic for the font size and font name drop boxes
editor.onNodeChange.add(function(editor, control_manager) {
var control, fontElm, fontName, fontSize;
// Find font element get it's name and size
fontElm = editor.dom.getParent(editor.selection.getNode(), 'font');
if (fontElm) {
fontName = fontElm.face;
fontSize = fontElm.size;
}
// Select/unselect the font name in droplist
if (control = control_manager.get('fontselect')) {
control.select(function(value) {
return value == fontName;
});
}
// Select/unselect the font size in droplist
if (control = control_manager.get('fontsizeselect')) {
control.select(function(value) {
var index = tinymce.inArray(fontSizes, value.fontSize);
return index + 1 == fontSize;
});
}
});
});
},
getInfo : function() {
return {
longname : 'LegacyOutput',
author : 'Moxiecode Systems AB',
authorurl : 'http://tinymce.moxiecode.com',
infourl : 'http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/legacyoutput',
version : tinymce.majorVersion + "." + tinymce.minorVersion
};
}
});
// Register plugin
tinymce.PluginManager.add('legacyoutput', tinymce.plugins.LegacyOutput);
})(tinymce);

File diff suppressed because one or more lines are too long

View File

@ -1,955 +0,0 @@
/**
* editor_plugin_src.js
*
* Copyright 2011, Moxiecode Systems AB
* Released under LGPL License.
*
* License: http://tinymce.moxiecode.com/license
* Contributing: http://tinymce.moxiecode.com/contributing
*/
(function() {
var each = tinymce.each, Event = tinymce.dom.Event, bookmark;
// Skips text nodes that only contain whitespace since they aren't semantically important.
function skipWhitespaceNodes(e, next) {
while (e && (e.nodeType === 8 || (e.nodeType === 3 && /^[ \t\n\r]*$/.test(e.nodeValue)))) {
e = next(e);
}
return e;
}
function skipWhitespaceNodesBackwards(e) {
return skipWhitespaceNodes(e, function(e) {
return e.previousSibling;
});
}
function skipWhitespaceNodesForwards(e) {
return skipWhitespaceNodes(e, function(e) {
return e.nextSibling;
});
}
function hasParentInList(ed, e, list) {
return ed.dom.getParent(e, function(p) {
return tinymce.inArray(list, p) !== -1;
});
}
function isList(e) {
return e && (e.tagName === 'OL' || e.tagName === 'UL');
}
function splitNestedLists(element, dom) {
var tmp, nested, wrapItem;
tmp = skipWhitespaceNodesBackwards(element.lastChild);
while (isList(tmp)) {
nested = tmp;
tmp = skipWhitespaceNodesBackwards(nested.previousSibling);
}
if (nested) {
wrapItem = dom.create('li', { style: 'list-style-type: none;'});
dom.split(element, nested);
dom.insertAfter(wrapItem, nested);
wrapItem.appendChild(nested);
wrapItem.appendChild(nested);
element = wrapItem.previousSibling;
}
return element;
}
function attemptMergeWithAdjacent(e, allowDifferentListStyles, mergeParagraphs) {
e = attemptMergeWithPrevious(e, allowDifferentListStyles, mergeParagraphs);
return attemptMergeWithNext(e, allowDifferentListStyles, mergeParagraphs);
}
function attemptMergeWithPrevious(e, allowDifferentListStyles, mergeParagraphs) {
var prev = skipWhitespaceNodesBackwards(e.previousSibling);
if (prev) {
return attemptMerge(prev, e, allowDifferentListStyles ? prev : false, mergeParagraphs);
} else {
return e;
}
}
function attemptMergeWithNext(e, allowDifferentListStyles, mergeParagraphs) {
var next = skipWhitespaceNodesForwards(e.nextSibling);
if (next) {
return attemptMerge(e, next, allowDifferentListStyles ? next : false, mergeParagraphs);
} else {
return e;
}
}
function attemptMerge(e1, e2, differentStylesMasterElement, mergeParagraphs) {
if (canMerge(e1, e2, !!differentStylesMasterElement, mergeParagraphs)) {
return merge(e1, e2, differentStylesMasterElement);
} else if (e1 && e1.tagName === 'LI' && isList(e2)) {
// Fix invalidly nested lists.
e1.appendChild(e2);
}
return e2;
}
function canMerge(e1, e2, allowDifferentListStyles, mergeParagraphs) {
if (!e1 || !e2) {
return false;
} else if (e1.tagName === 'LI' && e2.tagName === 'LI') {
return e2.style.listStyleType === 'none' || containsOnlyAList(e2);
} else if (isList(e1)) {
return (e1.tagName === e2.tagName && (allowDifferentListStyles || e1.style.listStyleType === e2.style.listStyleType)) || isListForIndent(e2);
} else return mergeParagraphs && e1.tagName === 'P' && e2.tagName === 'P';
}
function isListForIndent(e) {
var firstLI = skipWhitespaceNodesForwards(e.firstChild), lastLI = skipWhitespaceNodesBackwards(e.lastChild);
return firstLI && lastLI && isList(e) && firstLI === lastLI && (isList(firstLI) || firstLI.style.listStyleType === 'none' || containsOnlyAList(firstLI));
}
function containsOnlyAList(e) {
var firstChild = skipWhitespaceNodesForwards(e.firstChild), lastChild = skipWhitespaceNodesBackwards(e.lastChild);
return firstChild && lastChild && firstChild === lastChild && isList(firstChild);
}
function merge(e1, e2, masterElement) {
var lastOriginal = skipWhitespaceNodesBackwards(e1.lastChild), firstNew = skipWhitespaceNodesForwards(e2.firstChild);
if (e1.tagName === 'P') {
e1.appendChild(e1.ownerDocument.createElement('br'));
}
while (e2.firstChild) {
e1.appendChild(e2.firstChild);
}
if (masterElement) {
e1.style.listStyleType = masterElement.style.listStyleType;
}
e2.parentNode.removeChild(e2);
attemptMerge(lastOriginal, firstNew, false);
return e1;
}
function findItemToOperateOn(e, dom) {
var item;
if (!dom.is(e, 'li,ol,ul')) {
item = dom.getParent(e, 'li');
if (item) {
e = item;
}
}
return e;
}
tinymce.create('tinymce.plugins.Lists', {
init: function(ed) {
var LIST_TABBING = 'TABBING';
var LIST_EMPTY_ITEM = 'EMPTY';
var LIST_ESCAPE = 'ESCAPE';
var LIST_PARAGRAPH = 'PARAGRAPH';
var LIST_UNKNOWN = 'UNKNOWN';
var state = LIST_UNKNOWN;
function isTabInList(e) {
// Don't indent on Ctrl+Tab or Alt+Tab
return e.keyCode === tinymce.VK.TAB && !(e.altKey || e.ctrlKey) &&
(ed.queryCommandState('InsertUnorderedList') || ed.queryCommandState('InsertOrderedList'));
}
function isOnLastListItem() {
var li = getLi();
var grandParent = li.parentNode.parentNode;
var isLastItem = li.parentNode.lastChild === li;
return isLastItem && !isNestedList(grandParent) && isEmptyListItem(li);
}
function isNestedList(grandParent) {
if (isList(grandParent)) {
return grandParent.parentNode && grandParent.parentNode.tagName === 'LI';
} else {
return grandParent.tagName === 'LI';
}
}
function isInEmptyListItem() {
return ed.selection.isCollapsed() && isEmptyListItem(getLi());
}
function getLi() {
var n = ed.selection.getStart();
// Get start will return BR if the LI only contains a BR or an empty element as we use these to fix caret position
return ((n.tagName == 'BR' || n.tagName == '') && n.parentNode.tagName == 'LI') ? n.parentNode : n;
}
function isEmptyListItem(li) {
var numChildren = li.childNodes.length;
if (li.tagName === 'LI') {
return numChildren == 0 ? true : numChildren == 1 && (li.firstChild.tagName == '' || li.firstChild.tagName == 'BR' || isEmptyIE9Li(li));
}
return false;
}
function isEmptyIE9Li(li) {
// only consider this to be last item if there is no list item content or that content is nbsp or space since IE9 creates these
var lis = tinymce.grep(li.parentNode.childNodes, function(n) {return n.tagName == 'LI'});
var isLastLi = li == lis[lis.length - 1];
var child = li.firstChild;
return tinymce.isIE9 && isLastLi && (child.nodeValue == String.fromCharCode(160) || child.nodeValue == String.fromCharCode(32));
}
function isEnter(e) {
return e.keyCode === tinymce.VK.ENTER;
}
function isEnterWithoutShift(e) {
return isEnter(e) && !e.shiftKey;
}
function getListKeyState(e) {
if (isTabInList(e)) {
return LIST_TABBING;
} else if (isEnterWithoutShift(e) && isOnLastListItem()) {
// Returns LIST_UNKNOWN since breaking out of lists is handled by the EnterKey.js logic now
//return LIST_ESCAPE;
return LIST_UNKNOWN;
} else if (isEnterWithoutShift(e) && isInEmptyListItem()) {
return LIST_EMPTY_ITEM;
} else {
return LIST_UNKNOWN;
}
}
function cancelDefaultEvents(ed, e) {
// list escape is done manually using outdent as it does not create paragraphs correctly in td's
if (state == LIST_TABBING || state == LIST_EMPTY_ITEM || tinymce.isGecko && state == LIST_ESCAPE) {
Event.cancel(e);
}
}
function isCursorAtEndOfContainer() {
var range = ed.selection.getRng(true);
var startContainer = range.startContainer;
if (startContainer.nodeType == 3) {
var value = startContainer.nodeValue;
if (tinymce.isIE9 && value.length > 1 && value.charCodeAt(value.length-1) == 32) {
// IE9 places a space on the end of the text in some cases so ignore last char
return (range.endOffset == value.length-1);
} else {
return (range.endOffset == value.length);
}
} else if (startContainer.nodeType == 1) {
return range.endOffset == startContainer.childNodes.length;
}
return false;
}
/*
If we are at the end of a list item surrounded with an element, pressing enter should create a
new list item instead without splitting the element e.g. don't want to create new P or H1 tag
*/
function isEndOfListItem() {
var node = ed.selection.getNode();
var validElements = 'h1,h2,h3,h4,h5,h6,p,div';
var isLastParagraphOfLi = ed.dom.is(node, validElements) && node.parentNode.tagName === 'LI' && node.parentNode.lastChild === node;
return ed.selection.isCollapsed() && isLastParagraphOfLi && isCursorAtEndOfContainer();
}
// Creates a new list item after the current selection's list item parent
function createNewLi(ed, e) {
if (isEnterWithoutShift(e) && isEndOfListItem()) {
var node = ed.selection.getNode();
var li = ed.dom.create("li");
var parentLi = ed.dom.getParent(node, 'li');
ed.dom.insertAfter(li, parentLi);
// Move caret to new list element.
if (tinymce.isIE6 || tinymce.isIE7 || tinyMCE.isIE8) {
// Removed this line since it would create an odd <&nbsp;> tag and placing the caret inside an empty LI is handled and should be handled by the selection logic
//li.appendChild(ed.dom.create("&nbsp;")); // IE needs an element within the bullet point
ed.selection.setCursorLocation(li, 1);
} else {
ed.selection.setCursorLocation(li, 0);
}
e.preventDefault();
}
}
function imageJoiningListItem(ed, e) {
var prevSibling;
if (!tinymce.isGecko)
return;
var n = ed.selection.getStart();
if (e.keyCode != tinymce.VK.BACKSPACE || n.tagName !== 'IMG')
return;
function lastLI(node) {
var child = node.firstChild;
var li = null;
do {
if (!child)
break;
if (child.tagName === 'LI')
li = child;
} while (child = child.nextSibling);
return li;
}
function addChildren(parentNode, destination) {
while (parentNode.childNodes.length > 0)
destination.appendChild(parentNode.childNodes[0]);
}
// Check if there is a previous sibling
prevSibling = n.parentNode.previousSibling;
if (!prevSibling)
return;
var ul;
if (prevSibling.tagName === 'UL' || prevSibling.tagName === 'OL')
ul = prevSibling;
else if (prevSibling.previousSibling && (prevSibling.previousSibling.tagName === 'UL' || prevSibling.previousSibling.tagName === 'OL'))
ul = prevSibling.previousSibling;
else
return;
var li = lastLI(ul);
// move the caret to the end of the list item
var rng = ed.dom.createRng();
rng.setStart(li, 1);
rng.setEnd(li, 1);
ed.selection.setRng(rng);
ed.selection.collapse(true);
// save a bookmark at the end of the list item
var bookmark = ed.selection.getBookmark();
// copy the image an its text to the list item
var clone = n.parentNode.cloneNode(true);
if (clone.tagName === 'P' || clone.tagName === 'DIV')
addChildren(clone, li);
else
li.appendChild(clone);
// remove the old copy of the image
n.parentNode.parentNode.removeChild(n.parentNode);
// move the caret where we saved the bookmark
ed.selection.moveToBookmark(bookmark);
}
// fix the cursor position to ensure it is correct in IE
function setCursorPositionToOriginalLi(li) {
var list = ed.dom.getParent(li, 'ol,ul');
if (list != null) {
var lastLi = list.lastChild;
// Removed this line since IE9 would report an DOM character error and placing the caret inside an empty LI is handled and should be handled by the selection logic
//lastLi.appendChild(ed.getDoc().createElement(''));
ed.selection.setCursorLocation(lastLi, 0);
}
}
this.ed = ed;
ed.addCommand('Indent', this.indent, this);
ed.addCommand('Outdent', this.outdent, this);
ed.addCommand('InsertUnorderedList', function() {
this.applyList('UL', 'OL');
}, this);
ed.addCommand('InsertOrderedList', function() {
this.applyList('OL', 'UL');
}, this);
ed.onInit.add(function() {
ed.editorCommands.addCommands({
'outdent': function() {
var sel = ed.selection, dom = ed.dom;
function hasStyleIndent(n) {
n = dom.getParent(n, dom.isBlock);
return n && (parseInt(ed.dom.getStyle(n, 'margin-left') || 0, 10) + parseInt(ed.dom.getStyle(n, 'padding-left') || 0, 10)) > 0;
}
return hasStyleIndent(sel.getStart()) || hasStyleIndent(sel.getEnd()) || ed.queryCommandState('InsertOrderedList') || ed.queryCommandState('InsertUnorderedList');
}
}, 'state');
});
ed.onKeyUp.add(function(ed, e) {
if (state == LIST_TABBING) {
ed.execCommand(e.shiftKey ? 'Outdent' : 'Indent', true, null);
state = LIST_UNKNOWN;
return Event.cancel(e);
} else if (state == LIST_EMPTY_ITEM) {
var li = getLi();
var shouldOutdent = ed.settings.list_outdent_on_enter === true || e.shiftKey;
ed.execCommand(shouldOutdent ? 'Outdent' : 'Indent', true, null);
if (tinymce.isIE) {
setCursorPositionToOriginalLi(li);
}
return Event.cancel(e);
} else if (state == LIST_ESCAPE) {
if (tinymce.isIE6 || tinymce.isIE7 || tinymce.isIE8) {
// append a zero sized nbsp so that caret is positioned correctly in IE after escaping and applying formatting.
// if there is no text then applying formatting for e.g a H1 to the P tag immediately following list after
// escaping from it will cause the caret to be positioned on the last li instead of staying the in P tag.
var n = ed.getDoc().createTextNode('\uFEFF');
ed.selection.getNode().appendChild(n);
} else if (tinymce.isIE9 || tinymce.isGecko) {
// IE9 does not escape the list so we use outdent to do this and cancel the default behaviour
// Gecko does not create a paragraph outdenting inside a TD so default behaviour is cancelled and we outdent ourselves
ed.execCommand('Outdent');
return Event.cancel(e);
}
}
});
function fixListItem(parent, reference) {
// a zero-sized non-breaking space is placed in the empty list item so that the nested list is
// displayed on the below line instead of next to it
var n = ed.getDoc().createTextNode('\uFEFF');
parent.insertBefore(n, reference);
ed.selection.setCursorLocation(n, 0);
// repaint to remove rendering artifact. only visible when creating new list
ed.execCommand('mceRepaint');
}
function fixIndentedListItemForGecko(ed, e) {
if (isEnter(e)) {
var li = getLi();
if (li) {
var parent = li.parentNode;
var grandParent = parent && parent.parentNode;
if (grandParent && grandParent.nodeName == 'LI' && grandParent.firstChild == parent && li == parent.firstChild) {
fixListItem(grandParent, parent);
}
}
}
}
function fixIndentedListItemForIE8(ed, e) {
if (isEnter(e)) {
var li = getLi();
if (ed.dom.select('ul li', li).length === 1) {
var list = li.firstChild;
fixListItem(li, list);
}
}
}
function fixDeletingFirstCharOfList(ed, e) {
function listElements(li) {
var elements = [];
var walker = new tinymce.dom.TreeWalker(li.firstChild, li);
for (var node = walker.current(); node; node = walker.next()) {
if (ed.dom.is(node, 'ol,ul,li')) {
elements.push(node);
}
}
return elements;
}
if (e.keyCode == tinymce.VK.BACKSPACE) {
var li = getLi();
if (li) {
var list = ed.dom.getParent(li, 'ol,ul'),
rng = ed.selection.getRng();
if (list && list.firstChild === li && rng.startOffset == 0) {
var elements = listElements(li);
elements.unshift(li);
ed.execCommand("Outdent", false, elements);
ed.undoManager.add();
return Event.cancel(e);
}
}
}
}
function fixDeletingEmptyLiInWebkit(ed, e) {
var li = getLi();
if (e.keyCode === tinymce.VK.BACKSPACE && ed.dom.is(li, 'li') && li.parentNode.firstChild!==li) {
if (ed.dom.select('ul,ol', li).length === 1) {
var prevLi = li.previousSibling;
ed.dom.remove(ed.dom.select('br', li));
ed.dom.remove(li, true);
var textNodes = tinymce.grep(prevLi.childNodes, function(n){ return n.nodeType === 3 });
if (textNodes.length === 1) {
var textNode = textNodes[0];
ed.selection.setCursorLocation(textNode, textNode.length);
}
ed.undoManager.add();
return Event.cancel(e);
}
}
}
ed.onKeyDown.add(function(_, e) { state = getListKeyState(e); });
ed.onKeyDown.add(cancelDefaultEvents);
ed.onKeyDown.add(imageJoiningListItem);
ed.onKeyDown.add(createNewLi);
if (tinymce.isGecko) {
ed.onKeyUp.add(fixIndentedListItemForGecko);
}
if (tinymce.isIE8) {
ed.onKeyUp.add(fixIndentedListItemForIE8);
}
if (tinymce.isGecko || tinymce.isWebKit) {
ed.onKeyDown.add(fixDeletingFirstCharOfList);
}
if (tinymce.isWebKit) {
ed.onKeyDown.add(fixDeletingEmptyLiInWebkit);
}
},
applyList: function(targetListType, oppositeListType) {
var t = this, ed = t.ed, dom = ed.dom, applied = [], hasSameType = false, hasOppositeType = false, hasNonList = false, actions,
selectedBlocks = ed.selection.getSelectedBlocks();
function cleanupBr(e) {
if (e && e.tagName === 'BR') {
dom.remove(e);
}
}
function makeList(element) {
var list = dom.create(targetListType), li;
function adjustIndentForNewList(element) {
// If there's a margin-left, outdent one level to account for the extra list margin.
if (element.style.marginLeft || element.style.paddingLeft) {
t.adjustPaddingFunction(false)(element);
}
}
if (element.tagName === 'LI') {
// No change required.
} else if (element.tagName === 'P' || element.tagName === 'DIV' || element.tagName === 'BODY') {
processBrs(element, function(startSection, br) {
doWrapList(startSection, br, element.tagName === 'BODY' ? null : startSection.parentNode);
li = startSection.parentNode;
adjustIndentForNewList(li);
cleanupBr(br);
});
if (li) {
if (li.tagName === 'LI' && (element.tagName === 'P' || selectedBlocks.length > 1)) {
dom.split(li.parentNode.parentNode, li.parentNode);
}
attemptMergeWithAdjacent(li.parentNode, true);
}
return;
} else {
// Put the list around the element.
li = dom.create('li');
dom.insertAfter(li, element);
li.appendChild(element);
adjustIndentForNewList(element);
element = li;
}
dom.insertAfter(list, element);
list.appendChild(element);
attemptMergeWithAdjacent(list, true);
applied.push(element);
}
function doWrapList(start, end, template) {
var li, n = start, tmp;
while (!dom.isBlock(start.parentNode) && start.parentNode !== dom.getRoot()) {
start = dom.split(start.parentNode, start.previousSibling);
start = start.nextSibling;
n = start;
}
if (template) {
li = template.cloneNode(true);
start.parentNode.insertBefore(li, start);
while (li.firstChild) dom.remove(li.firstChild);
li = dom.rename(li, 'li');
} else {
li = dom.create('li');
start.parentNode.insertBefore(li, start);
}
while (n && n != end) {
tmp = n.nextSibling;
li.appendChild(n);
n = tmp;
}
if (li.childNodes.length === 0) {
li.innerHTML = '<br _mce_bogus="1" />';
}
makeList(li);
}
function processBrs(element, callback) {
var startSection, previousBR, END_TO_START = 3, START_TO_END = 1,
breakElements = 'br,ul,ol,p,div,h1,h2,h3,h4,h5,h6,table,blockquote,address,pre,form,center,dl';
function isAnyPartSelected(start, end) {
var r = dom.createRng(), sel;
bookmark.keep = true;
ed.selection.moveToBookmark(bookmark);
bookmark.keep = false;
sel = ed.selection.getRng(true);
if (!end) {
end = start.parentNode.lastChild;
}
r.setStartBefore(start);
r.setEndAfter(end);
return !(r.compareBoundaryPoints(END_TO_START, sel) > 0 || r.compareBoundaryPoints(START_TO_END, sel) <= 0);
}
function nextLeaf(br) {
if (br.nextSibling)
return br.nextSibling;
if (!dom.isBlock(br.parentNode) && br.parentNode !== dom.getRoot())
return nextLeaf(br.parentNode);
}
// Split on BRs within the range and process those.
startSection = element.firstChild;
// First mark the BRs that have any part of the previous section selected.
var trailingContentSelected = false;
each(dom.select(breakElements, element), function(br) {
if (br.hasAttribute && br.hasAttribute('_mce_bogus')) {
return true; // Skip the bogus Brs that are put in to appease Firefox and Safari.
}
if (isAnyPartSelected(startSection, br)) {
dom.addClass(br, '_mce_tagged_br');
startSection = nextLeaf(br);
}
});
trailingContentSelected = (startSection && isAnyPartSelected(startSection, undefined));
startSection = element.firstChild;
each(dom.select(breakElements, element), function(br) {
// Got a section from start to br.
var tmp = nextLeaf(br);
if (br.hasAttribute && br.hasAttribute('_mce_bogus')) {
return true; // Skip the bogus Brs that are put in to appease Firefox and Safari.
}
if (dom.hasClass(br, '_mce_tagged_br')) {
callback(startSection, br, previousBR);
previousBR = null;
} else {
previousBR = br;
}
startSection = tmp;
});
if (trailingContentSelected) {
callback(startSection, undefined, previousBR);
}
}
function wrapList(element) {
processBrs(element, function(startSection, br, previousBR) {
// Need to indent this part
doWrapList(startSection, br);
cleanupBr(br);
cleanupBr(previousBR);
});
}
function changeList(element) {
if (tinymce.inArray(applied, element) !== -1) {
return;
}
if (element.parentNode.tagName === oppositeListType) {
dom.split(element.parentNode, element);
makeList(element);
attemptMergeWithNext(element.parentNode, false);
}
applied.push(element);
}
function convertListItemToParagraph(element) {
var child, nextChild, mergedElement, splitLast;
if (tinymce.inArray(applied, element) !== -1) {
return;
}
element = splitNestedLists(element, dom);
while (dom.is(element.parentNode, 'ol,ul,li')) {
dom.split(element.parentNode, element);
}
// Push the original element we have from the selection, not the renamed one.
applied.push(element);
element = dom.rename(element, 'p');
mergedElement = attemptMergeWithAdjacent(element, false, ed.settings.force_br_newlines);
if (mergedElement === element) {
// Now split out any block elements that can't be contained within a P.
// Manually iterate to ensure we handle modifications correctly (doesn't work with tinymce.each)
child = element.firstChild;
while (child) {
if (dom.isBlock(child)) {
child = dom.split(child.parentNode, child);
splitLast = true;
nextChild = child.nextSibling && child.nextSibling.firstChild;
} else {
nextChild = child.nextSibling;
if (splitLast && child.tagName === 'BR') {
dom.remove(child);
}
splitLast = false;
}
child = nextChild;
}
}
}
each(selectedBlocks, function(e) {
e = findItemToOperateOn(e, dom);
if (e.tagName === oppositeListType || (e.tagName === 'LI' && e.parentNode.tagName === oppositeListType)) {
hasOppositeType = true;
} else if (e.tagName === targetListType || (e.tagName === 'LI' && e.parentNode.tagName === targetListType)) {
hasSameType = true;
} else {
hasNonList = true;
}
});
if (hasNonList &&!hasSameType || hasOppositeType || selectedBlocks.length === 0) {
actions = {
'LI': changeList,
'H1': makeList,
'H2': makeList,
'H3': makeList,
'H4': makeList,
'H5': makeList,
'H6': makeList,
'P': makeList,
'BODY': makeList,
'DIV': selectedBlocks.length > 1 ? makeList : wrapList,
defaultAction: wrapList,
elements: this.selectedBlocks()
};
} else {
actions = {
defaultAction: convertListItemToParagraph,
elements: this.selectedBlocks(),
processEvenIfEmpty: true
};
}
this.process(actions);
},
indent: function() {
var ed = this.ed, dom = ed.dom, indented = [];
function createWrapItem(element) {
var wrapItem = dom.create('li', { style: 'list-style-type: none;'});
dom.insertAfter(wrapItem, element);
return wrapItem;
}
function createWrapList(element) {
var wrapItem = createWrapItem(element),
list = dom.getParent(element, 'ol,ul'),
listType = list.tagName,
listStyle = dom.getStyle(list, 'list-style-type'),
attrs = {},
wrapList;
if (listStyle !== '') {
attrs.style = 'list-style-type: ' + listStyle + ';';
}
wrapList = dom.create(listType, attrs);
wrapItem.appendChild(wrapList);
return wrapList;
}
function indentLI(element) {
if (!hasParentInList(ed, element, indented)) {
element = splitNestedLists(element, dom);
var wrapList = createWrapList(element);
wrapList.appendChild(element);
attemptMergeWithAdjacent(wrapList.parentNode, false);
attemptMergeWithAdjacent(wrapList, false);
indented.push(element);
}
}
this.process({
'LI': indentLI,
defaultAction: this.adjustPaddingFunction(true),
elements: this.selectedBlocks()
});
},
outdent: function(ui, elements) {
var t = this, ed = t.ed, dom = ed.dom, outdented = [];
function outdentLI(element) {
var listElement, targetParent, align;
if (!hasParentInList(ed, element, outdented)) {
if (dom.getStyle(element, 'margin-left') !== '' || dom.getStyle(element, 'padding-left') !== '') {
return t.adjustPaddingFunction(false)(element);
}
align = dom.getStyle(element, 'text-align', true);
if (align === 'center' || align === 'right') {
dom.setStyle(element, 'text-align', 'left');
return;
}
element = splitNestedLists(element, dom);
listElement = element.parentNode;
targetParent = element.parentNode.parentNode;
if (targetParent.tagName === 'P') {
dom.split(targetParent, element.parentNode);
} else {
dom.split(listElement, element);
if (targetParent.tagName === 'LI') {
// Nested list, need to split the LI and go back out to the OL/UL element.
dom.split(targetParent, element);
} else if (!dom.is(targetParent, 'ol,ul')) {
dom.rename(element, 'p');
}
}
outdented.push(element);
}
}
var listElements = elements && tinymce.is(elements, 'array') ? elements : this.selectedBlocks();
this.process({
'LI': outdentLI,
defaultAction: this.adjustPaddingFunction(false),
elements: listElements
});
each(outdented, attemptMergeWithAdjacent);
},
process: function(actions) {
var t = this, sel = t.ed.selection, dom = t.ed.dom, selectedBlocks, r;
function isEmptyElement(element) {
var excludeBrsAndBookmarks = tinymce.grep(element.childNodes, function(n) {
return !(n.nodeName === 'BR' || n.nodeName === 'SPAN' && dom.getAttrib(n, 'data-mce-type') == 'bookmark'
|| n.nodeType == 3 && (n.nodeValue == String.fromCharCode(160) || n.nodeValue == ''));
});
return excludeBrsAndBookmarks.length === 0;
}
function processElement(element) {
dom.removeClass(element, '_mce_act_on');
if (!element || element.nodeType !== 1 || ! actions.processEvenIfEmpty && selectedBlocks.length > 1 && isEmptyElement(element)) {
return;
}
element = findItemToOperateOn(element, dom);
var action = actions[element.tagName];
if (!action) {
action = actions.defaultAction;
}
action(element);
}
function recurse(element) {
t.splitSafeEach(element.childNodes, processElement, true);
}
function brAtEdgeOfSelection(container, offset) {
return offset >= 0 && container.hasChildNodes() && offset < container.childNodes.length &&
container.childNodes[offset].tagName === 'BR';
}
function isInTable() {
var n = sel.getNode();
var p = dom.getParent(n, 'td');
return p !== null;
}
selectedBlocks = actions.elements;
r = sel.getRng(true);
if (!r.collapsed) {
if (brAtEdgeOfSelection(r.endContainer, r.endOffset - 1)) {
r.setEnd(r.endContainer, r.endOffset - 1);
sel.setRng(r);
}
if (brAtEdgeOfSelection(r.startContainer, r.startOffset)) {
r.setStart(r.startContainer, r.startOffset + 1);
sel.setRng(r);
}
}
if (tinymce.isIE8) {
// append a zero sized nbsp so that caret is restored correctly using bookmark
var s = t.ed.selection.getNode();
if (s.tagName === 'LI' && !(s.parentNode.lastChild === s)) {
var i = t.ed.getDoc().createTextNode('\uFEFF');
s.appendChild(i);
}
}
bookmark = sel.getBookmark();
actions.OL = actions.UL = recurse;
t.splitSafeEach(selectedBlocks, processElement);
sel.moveToBookmark(bookmark);
bookmark = null;
// we avoid doing repaint in a table as this will move the caret out of the table in Firefox 3.6
if (!isInTable()) {
// Avoids table or image handles being left behind in Firefox.
t.ed.execCommand('mceRepaint');
}
},
splitSafeEach: function(elements, f, forceClassBase) {
if (forceClassBase ||
(tinymce.isGecko &&
(/Firefox\/[12]\.[0-9]/.test(navigator.userAgent) ||
/Firefox\/3\.[0-4]/.test(navigator.userAgent)))) {
this.classBasedEach(elements, f);
} else {
each(elements, f);
}
},
classBasedEach: function(elements, f) {
var dom = this.ed.dom, nodes, element;
// Mark nodes
each(elements, function(element) {
dom.addClass(element, '_mce_act_on');
});
nodes = dom.select('._mce_act_on');
while (nodes.length > 0) {
element = nodes.shift();
dom.removeClass(element, '_mce_act_on');
f(element);
nodes = dom.select('._mce_act_on');
}
},
adjustPaddingFunction: function(isIndent) {
var indentAmount, indentUnits, ed = this.ed;
indentAmount = ed.settings.indentation;
indentUnits = /[a-z%]+/i.exec(indentAmount);
indentAmount = parseInt(indentAmount, 10);
return function(element) {
var currentIndent, newIndentAmount;
currentIndent = parseInt(ed.dom.getStyle(element, 'margin-left') || 0, 10) + parseInt(ed.dom.getStyle(element, 'padding-left') || 0, 10);
if (isIndent) {
newIndentAmount = currentIndent + indentAmount;
} else {
newIndentAmount = currentIndent - indentAmount;
}
ed.dom.setStyle(element, 'padding-left', '');
ed.dom.setStyle(element, 'margin-left', newIndentAmount > 0 ? newIndentAmount + indentUnits : '');
};
},
selectedBlocks: function() {
var ed = this.ed, selectedBlocks = ed.selection.getSelectedBlocks();
return selectedBlocks.length == 0 ? [ ed.dom.getRoot() ] : selectedBlocks;
},
getInfo: function() {
return {
longname : 'Lists',
author : 'Moxiecode Systems AB',
authorurl : 'http://tinymce.moxiecode.com',
infourl : 'http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/lists',
version : tinymce.majorVersion + "." + tinymce.minorVersion
};
}
});
tinymce.PluginManager.add("lists", tinymce.plugins.Lists);
}());

View File

@ -1,17 +0,0 @@
#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, #html5_altsource1, #html5_altsource2, #html5_poster { width: 240px }
#width, #height { width: 40px }
#src, #media_type { width: 250px }
#class { width: 120px }
#prev { margin: 0; border: 1px solid black; width: 380px; height: 260px; overflow: auto }
.panel_wrapper div.current { height: 420px; 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 }
iframe {border: 1px solid gray}

File diff suppressed because one or more lines are too long

View File

@ -1,898 +0,0 @@
/**
* editor_plugin_src.js
*
* Copyright 2009, Moxiecode Systems AB
* Released under LGPL License.
*
* License: http://tinymce.moxiecode.com/license
* Contributing: http://tinymce.moxiecode.com/contributing
*/
(function() {
var rootAttributes = tinymce.explode('id,name,width,height,style,align,class,hspace,vspace,bgcolor,type'), excludedAttrs = tinymce.makeMap(rootAttributes.join(',')), Node = tinymce.html.Node,
mediaTypes, scriptRegExp, JSON = tinymce.util.JSON, mimeTypes;
// Media types supported by this plugin
mediaTypes = [
// Type, clsid:s, mime types, codebase
["Flash", "d27cdb6e-ae6d-11cf-96b8-444553540000", "application/x-shockwave-flash", "http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,40,0"],
["ShockWave", "166b1bca-3f9c-11cf-8075-444553540000", "application/x-director", "http://download.macromedia.com/pub/shockwave/cabs/director/sw.cab#version=8,5,1,0"],
["WindowsMedia", "6bf52a52-394a-11d3-b153-00c04f79faa6,22d6f312-b0f6-11d0-94ab-0080c74c7e95,05589fa1-c356-11ce-bf01-00aa0055595a", "application/x-mplayer2", "http://activex.microsoft.com/activex/controls/mplayer/en/nsmp2inf.cab#Version=5,1,52,701"],
["QuickTime", "02bf25d5-8c17-4b23-bc80-d3488abddc6b", "video/quicktime", "http://www.apple.com/qtactivex/qtplugin.cab#version=6,0,2,0"],
["RealMedia", "cfcdaa03-8be4-11cf-b84b-0020afbbccfa", "audio/x-pn-realaudio-plugin", "http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,40,0"],
["Java", "8ad9c840-044e-11d1-b3e9-00805f499d93", "application/x-java-applet", "http://java.sun.com/products/plugin/autodl/jinstall-1_5_0-windows-i586.cab#Version=1,5,0,0"],
["Silverlight", "dfeaf541-f3e1-4c24-acac-99c30715084a", "application/x-silverlight-2"],
["Iframe"],
["Video"],
["EmbeddedAudio"],
["Audio"]
];
function normalizeSize(size) {
return typeof(size) == "string" ? size.replace(/[^0-9%]/g, '') : size;
}
function toArray(obj) {
var undef, out, i;
if (obj && !obj.splice) {
out = [];
for (i = 0; true; i++) {
if (obj[i])
out[i] = obj[i];
else
break;
}
return out;
}
return obj;
};
tinymce.create('tinymce.plugins.MediaPlugin', {
init : function(ed, url) {
var self = this, lookup = {}, i, y, item, name;
function isMediaImg(node) {
return node && node.nodeName === 'IMG' && ed.dom.hasClass(node, 'mceItemMedia');
};
self.editor = ed;
self.url = url;
// Parse media types into a lookup table
scriptRegExp = '';
for (i = 0; i < mediaTypes.length; i++) {
name = mediaTypes[i][0];
item = {
name : name,
clsids : tinymce.explode(mediaTypes[i][1] || ''),
mimes : tinymce.explode(mediaTypes[i][2] || ''),
codebase : mediaTypes[i][3]
};
for (y = 0; y < item.clsids.length; y++)
lookup['clsid:' + item.clsids[y]] = item;
for (y = 0; y < item.mimes.length; y++)
lookup[item.mimes[y]] = item;
lookup['mceItem' + name] = item;
lookup[name.toLowerCase()] = item;
scriptRegExp += (scriptRegExp ? '|' : '') + name;
}
// Handle the media_types setting
tinymce.each(ed.getParam("media_types",
"video=mp4,m4v,ogv,webm;" +
"silverlight=xap;" +
"flash=swf,flv;" +
"shockwave=dcr;" +
"quicktime=mov,qt,mpg,mpeg;" +
"shockwave=dcr;" +
"windowsmedia=avi,wmv,wm,asf,asx,wmx,wvx;" +
"realmedia=rm,ra,ram;" +
"java=jar;" +
"audio=mp3,ogg"
).split(';'), function(item) {
var i, extensions, type;
item = item.split(/=/);
extensions = tinymce.explode(item[1].toLowerCase());
for (i = 0; i < extensions.length; i++) {
type = lookup[item[0].toLowerCase()];
if (type)
lookup[extensions[i]] = type;
}
});
scriptRegExp = new RegExp('write(' + scriptRegExp + ')\\(([^)]+)\\)');
self.lookup = lookup;
ed.onPreInit.add(function() {
// Allow video elements
ed.schema.addValidElements('object[id|style|width|height|classid|codebase|*],param[name|value],embed[id|style|width|height|type|src|*],video[*],audio[*],source[*]');
// Convert video elements to image placeholder
ed.parser.addNodeFilter('object,embed,video,audio,script,iframe', function(nodes) {
var i = nodes.length;
while (i--)
self.objectToImg(nodes[i]);
});
// Convert image placeholders to video elements
ed.serializer.addNodeFilter('img', function(nodes, name, args) {
var i = nodes.length, node;
while (i--) {
node = nodes[i];
if ((node.attr('class') || '').indexOf('mceItemMedia') !== -1)
self.imgToObject(node, args);
}
});
});
ed.onInit.add(function() {
// Display "media" instead of "img" in element path
if (ed.theme && ed.theme.onResolveName) {
ed.theme.onResolveName.add(function(theme, path_object) {
if (path_object.name === 'img' && ed.dom.hasClass(path_object.node, 'mceItemMedia'))
path_object.name = 'media';
});
}
// Add contect menu if it's loaded
if (ed && ed.plugins.contextmenu) {
ed.plugins.contextmenu.onContextMenu.add(function(plugin, menu, element) {
if (element.nodeName === 'IMG' && element.className.indexOf('mceItemMedia') !== -1)
menu.add({title : 'media.edit', icon : 'media', cmd : 'mceMedia'});
});
}
});
// Register commands
ed.addCommand('mceMedia', function() {
var data, img;
img = ed.selection.getNode();
if (isMediaImg(img)) {
data = ed.dom.getAttrib(img, 'data-mce-json');
if (data) {
data = JSON.parse(data);
// Add some extra properties to the data object
tinymce.each(rootAttributes, function(name) {
var value = ed.dom.getAttrib(img, name);
if (value)
data[name] = value;
});
data.type = self.getType(img.className).name.toLowerCase();
}
}
if (!data) {
data = {
type : 'flash',
video: {sources:[]},
params: {}
};
}
ed.windowManager.open({
file : url + '/media.htm',
width : 430 + parseInt(ed.getLang('media.delta_width', 0)),
height : 500 + parseInt(ed.getLang('media.delta_height', 0)),
inline : 1
}, {
plugin_url : url,
data : data
});
});
// Register buttons
ed.addButton('media', {title : 'media.desc', cmd : 'mceMedia'});
// Update media selection status
ed.onNodeChange.add(function(ed, cm, node) {
cm.setActive('media', isMediaImg(node));
});
},
convertUrl : function(url, force_absolute) {
var self = this, editor = self.editor, settings = editor.settings,
urlConverter = settings.url_converter,
urlConverterScope = settings.url_converter_scope || self;
if (!url)
return url;
if (force_absolute)
return editor.documentBaseURI.toAbsolute(url);
return urlConverter.call(urlConverterScope, url, 'src', 'object');
},
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
};
},
/**
* Converts the JSON data object to an img node.
*/
dataToImg : function(data, force_absolute) {
var self = this, editor = self.editor, baseUri = editor.documentBaseURI, sources, attrs, img, i;
data.params.src = self.convertUrl(data.params.src, force_absolute);
attrs = data.video.attrs;
if (attrs)
attrs.src = self.convertUrl(attrs.src, force_absolute);
if (attrs)
attrs.poster = self.convertUrl(attrs.poster, force_absolute);
sources = toArray(data.video.sources);
if (sources) {
for (i = 0; i < sources.length; i++)
sources[i].src = self.convertUrl(sources[i].src, force_absolute);
}
img = self.editor.dom.create('img', {
id : data.id,
style : data.style,
align : data.align,
hspace : data.hspace,
vspace : data.vspace,
src : self.editor.theme.url + '/img/trans.gif',
'class' : 'mceItemMedia mceItem' + self.getType(data.type).name,
'data-mce-json' : JSON.serialize(data, "'")
});
img.width = data.width = normalizeSize(data.width || (data.type == 'audio' ? "300" : "320"));
img.height = data.height = normalizeSize(data.height || (data.type == 'audio' ? "32" : "240"));
return img;
},
/**
* Converts the JSON data object to a HTML string.
*/
dataToHtml : function(data, force_absolute) {
return this.editor.serializer.serialize(this.dataToImg(data, force_absolute), {forced_root_block : '', force_absolute : force_absolute});
},
/**
* Converts the JSON data object to a HTML string.
*/
htmlToData : function(html) {
var fragment, img, data;
data = {
type : 'flash',
video: {sources:[]},
params: {}
};
fragment = this.editor.parser.parse(html);
img = fragment.getAll('img')[0];
if (img) {
data = JSON.parse(img.attr('data-mce-json'));
data.type = this.getType(img.attr('class')).name.toLowerCase();
// Add some extra properties to the data object
tinymce.each(rootAttributes, function(name) {
var value = img.attr(name);
if (value)
data[name] = value;
});
}
return data;
},
/**
* Get type item by extension, class, clsid or mime type.
*
* @method getType
* @param {String} value Value to get type item by.
* @return {Object} Type item object or undefined.
*/
getType : function(value) {
var i, values, typeItem;
// Find type by checking the classes
values = tinymce.explode(value, ' ');
for (i = 0; i < values.length; i++) {
typeItem = this.lookup[values[i]];
if (typeItem)
return typeItem;
}
},
/**
* Converts a tinymce.html.Node image element to video/object/embed.
*/
imgToObject : function(node, args) {
var self = this, editor = self.editor, video, object, embed, iframe, name, value, data,
source, sources, params, param, typeItem, i, item, mp4Source, replacement,
posterSrc, style, audio;
// Adds the flash player
function addPlayer(video_src, poster_src) {
var baseUri, flashVars, flashVarsOutput, params, flashPlayer;
flashPlayer = editor.getParam('flash_video_player_url', self.convertUrl(self.url + '/moxieplayer.swf'));
if (flashPlayer) {
baseUri = editor.documentBaseURI;
data.params.src = flashPlayer;
// Convert the movie url to absolute urls
if (editor.getParam('flash_video_player_absvideourl', true)) {
video_src = baseUri.toAbsolute(video_src || '', true);
poster_src = baseUri.toAbsolute(poster_src || '', true);
}
// Generate flash vars
flashVarsOutput = '';
flashVars = editor.getParam('flash_video_player_flashvars', {url : '$url', poster : '$poster'});
tinymce.each(flashVars, function(value, name) {
// Replace $url and $poster variables in flashvars value
value = value.replace(/\$url/, video_src || '');
value = value.replace(/\$poster/, poster_src || '');
if (value.length > 0)
flashVarsOutput += (flashVarsOutput ? '&' : '') + name + '=' + escape(value);
});
if (flashVarsOutput.length)
data.params.flashvars = flashVarsOutput;
params = editor.getParam('flash_video_player_params', {
allowfullscreen: true,
allowscriptaccess: true
});
tinymce.each(params, function(value, name) {
data.params[name] = "" + value;
});
}
};
data = node.attr('data-mce-json');
if (!data)
return;
data = JSON.parse(data);
typeItem = this.getType(node.attr('class'));
style = node.attr('data-mce-style');
if (!style) {
style = node.attr('style');
if (style)
style = editor.dom.serializeStyle(editor.dom.parseStyle(style, 'img'));
}
// Use node width/height to override the data width/height when the placeholder is resized
data.width = node.attr('width') || data.width;
data.height = node.attr('height') || data.height;
// Handle iframe
if (typeItem.name === 'Iframe') {
replacement = new Node('iframe', 1);
tinymce.each(rootAttributes, function(name) {
var value = node.attr(name);
if (name == 'class' && value)
value = value.replace(/mceItem.+ ?/g, '');
if (value && value.length > 0)
replacement.attr(name, value);
});
for (name in data.params)
replacement.attr(name, data.params[name]);
replacement.attr({
style: style,
src: data.params.src
});
node.replace(replacement);
return;
}
// Handle scripts
if (this.editor.settings.media_use_script) {
replacement = new Node('script', 1).attr('type', 'text/javascript');
value = new Node('#text', 3);
value.value = 'write' + typeItem.name + '(' + JSON.serialize(tinymce.extend(data.params, {
width: node.attr('width'),
height: node.attr('height')
})) + ');';
replacement.append(value);
node.replace(replacement);
return;
}
// Add HTML5 video element
if (typeItem.name === 'Video' && data.video.sources[0]) {
// Create new object element
video = new Node('video', 1).attr(tinymce.extend({
id : node.attr('id'),
width: normalizeSize(node.attr('width')),
height: normalizeSize(node.attr('height')),
style : style
}, data.video.attrs));
// Get poster source and use that for flash fallback
if (data.video.attrs)
posterSrc = data.video.attrs.poster;
sources = data.video.sources = toArray(data.video.sources);
for (i = 0; i < sources.length; i++) {
if (/\.mp4$/.test(sources[i].src))
mp4Source = sources[i].src;
}
if (!sources[0].type) {
video.attr('src', sources[0].src);
sources.splice(0, 1);
}
for (i = 0; i < sources.length; i++) {
source = new Node('source', 1).attr(sources[i]);
source.shortEnded = true;
video.append(source);
}
// Create flash fallback for video if we have a mp4 source
if (mp4Source) {
addPlayer(mp4Source, posterSrc);
typeItem = self.getType('flash');
} else
data.params.src = '';
}
// Add HTML5 audio element
if (typeItem.name === 'Audio' && data.video.sources[0]) {
// Create new object element
audio = new Node('audio', 1).attr(tinymce.extend({
id : node.attr('id'),
width: normalizeSize(node.attr('width')),
height: normalizeSize(node.attr('height')),
style : style
}, data.video.attrs));
// Get poster source and use that for flash fallback
if (data.video.attrs)
posterSrc = data.video.attrs.poster;
sources = data.video.sources = toArray(data.video.sources);
if (!sources[0].type) {
audio.attr('src', sources[0].src);
sources.splice(0, 1);
}
for (i = 0; i < sources.length; i++) {
source = new Node('source', 1).attr(sources[i]);
source.shortEnded = true;
audio.append(source);
}
data.params.src = '';
}
if (typeItem.name === 'EmbeddedAudio') {
embed = new Node('embed', 1);
embed.shortEnded = true;
embed.attr({
id: node.attr('id'),
width: normalizeSize(node.attr('width')),
height: normalizeSize(node.attr('height')),
style : style,
type: node.attr('type')
});
for (name in data.params)
embed.attr(name, data.params[name]);
tinymce.each(rootAttributes, function(name) {
if (data[name] && name != 'type')
embed.attr(name, data[name]);
});
data.params.src = '';
}
// Do we have a params src then we can generate object
if (data.params.src) {
// Is flv movie add player for it
if (/\.flv$/i.test(data.params.src))
addPlayer(data.params.src, '');
if (args && args.force_absolute)
data.params.src = editor.documentBaseURI.toAbsolute(data.params.src);
// Create new object element
object = new Node('object', 1).attr({
id : node.attr('id'),
width: normalizeSize(node.attr('width')),
height: normalizeSize(node.attr('height')),
style : style
});
tinymce.each(rootAttributes, function(name) {
var value = data[name];
if (name == 'class' && value)
value = value.replace(/mceItem.+ ?/g, '');
if (value && name != 'type')
object.attr(name, value);
});
// Add params
for (name in data.params) {
param = new Node('param', 1);
param.shortEnded = true;
value = data.params[name];
// Windows media needs to use url instead of src for the media URL
if (name === 'src' && typeItem.name === 'WindowsMedia')
name = 'url';
param.attr({name: name, value: value});
object.append(param);
}
// Setup add type and classid if strict is disabled
if (this.editor.getParam('media_strict', true)) {
object.attr({
data: data.params.src,
type: typeItem.mimes[0]
});
} else {
object.attr({
classid: "clsid:" + typeItem.clsids[0],
codebase: typeItem.codebase
});
embed = new Node('embed', 1);
embed.shortEnded = true;
embed.attr({
id: node.attr('id'),
width: normalizeSize(node.attr('width')),
height: normalizeSize(node.attr('height')),
style : style,
type: typeItem.mimes[0]
});
for (name in data.params)
embed.attr(name, data.params[name]);
tinymce.each(rootAttributes, function(name) {
if (data[name] && name != 'type')
embed.attr(name, data[name]);
});
object.append(embed);
}
// Insert raw HTML
if (data.object_html) {
value = new Node('#text', 3);
value.raw = true;
value.value = data.object_html;
object.append(value);
}
// Append object to video element if it exists
if (video)
video.append(object);
}
if (video) {
// Insert raw HTML
if (data.video_html) {
value = new Node('#text', 3);
value.raw = true;
value.value = data.video_html;
video.append(value);
}
}
if (audio) {
// Insert raw HTML
if (data.video_html) {
value = new Node('#text', 3);
value.raw = true;
value.value = data.video_html;
audio.append(value);
}
}
var n = video || audio || object || embed;
if (n)
node.replace(n);
else
node.remove();
},
/**
* Converts a tinymce.html.Node video/object/embed to an img element.
*
* The video/object/embed will be converted into an image placeholder with a JSON data attribute like this:
* <img class="mceItemMedia mceItemFlash" width="100" height="100" data-mce-json="{..}" />
*
* The JSON structure will be like this:
* {'params':{'flashvars':'something','quality':'high','src':'someurl'}, 'video':{'sources':[{src: 'someurl', type: 'video/mp4'}]}}
*/
objectToImg : function(node) {
var object, embed, video, iframe, img, name, id, width, height, style, i, html,
param, params, source, sources, data, type, lookup = this.lookup,
matches, attrs, urlConverter = this.editor.settings.url_converter,
urlConverterScope = this.editor.settings.url_converter_scope,
hspace, vspace, align, bgcolor;
function getInnerHTML(node) {
return new tinymce.html.Serializer({
inner: true,
validate: false
}).serialize(node);
};
function lookupAttribute(o, attr) {
return lookup[(o.attr(attr) || '').toLowerCase()];
}
function lookupExtension(src) {
var ext = src.replace(/^.*\.([^.]+)$/, '$1');
return lookup[ext.toLowerCase() || ''];
}
// If node isn't in document
if (!node.parent)
return;
// Handle media scripts
if (node.name === 'script') {
if (node.firstChild)
matches = scriptRegExp.exec(node.firstChild.value);
if (!matches)
return;
type = matches[1];
data = {video : {}, params : JSON.parse(matches[2])};
width = data.params.width;
height = data.params.height;
}
// Setup data objects
data = data || {
video : {},
params : {}
};
// Setup new image object
img = new Node('img', 1);
img.attr({
src : this.editor.theme.url + '/img/trans.gif'
});
// Video element
name = node.name;
if (name === 'video' || name == 'audio') {
video = node;
object = node.getAll('object')[0];
embed = node.getAll('embed')[0];
width = video.attr('width');
height = video.attr('height');
id = video.attr('id');
data.video = {attrs : {}, sources : []};
// Get all video attributes
attrs = data.video.attrs;
for (name in video.attributes.map)
attrs[name] = video.attributes.map[name];
source = node.attr('src');
if (source)
data.video.sources.push({src : urlConverter.call(urlConverterScope, source, 'src', node.name)});
// Get all sources
sources = video.getAll("source");
for (i = 0; i < sources.length; i++) {
source = sources[i].remove();
data.video.sources.push({
src: urlConverter.call(urlConverterScope, source.attr('src'), 'src', 'source'),
type: source.attr('type'),
media: source.attr('media')
});
}
// Convert the poster URL
if (attrs.poster)
attrs.poster = urlConverter.call(urlConverterScope, attrs.poster, 'poster', node.name);
}
// Object element
if (node.name === 'object') {
object = node;
embed = node.getAll('embed')[0];
}
// Embed element
if (node.name === 'embed')
embed = node;
// Iframe element
if (node.name === 'iframe') {
iframe = node;
type = 'Iframe';
}
if (object) {
// Get width/height
width = width || object.attr('width');
height = height || object.attr('height');
style = style || object.attr('style');
id = id || object.attr('id');
hspace = hspace || object.attr('hspace');
vspace = vspace || object.attr('vspace');
align = align || object.attr('align');
bgcolor = bgcolor || object.attr('bgcolor');
data.name = object.attr('name');
// Get all object params
params = object.getAll("param");
for (i = 0; i < params.length; i++) {
param = params[i];
name = param.remove().attr('name');
if (!excludedAttrs[name])
data.params[name] = param.attr('value');
}
data.params.src = data.params.src || object.attr('data');
}
if (embed) {
// Get width/height
width = width || embed.attr('width');
height = height || embed.attr('height');
style = style || embed.attr('style');
id = id || embed.attr('id');
hspace = hspace || embed.attr('hspace');
vspace = vspace || embed.attr('vspace');
align = align || embed.attr('align');
bgcolor = bgcolor || embed.attr('bgcolor');
// Get all embed attributes
for (name in embed.attributes.map) {
if (!excludedAttrs[name] && !data.params[name])
data.params[name] = embed.attributes.map[name];
}
}
if (iframe) {
// Get width/height
width = normalizeSize(iframe.attr('width'));
height = normalizeSize(iframe.attr('height'));
style = style || iframe.attr('style');
id = iframe.attr('id');
hspace = iframe.attr('hspace');
vspace = iframe.attr('vspace');
align = iframe.attr('align');
bgcolor = iframe.attr('bgcolor');
tinymce.each(rootAttributes, function(name) {
img.attr(name, iframe.attr(name));
});
// Get all iframe attributes
for (name in iframe.attributes.map) {
if (!excludedAttrs[name] && !data.params[name])
data.params[name] = iframe.attributes.map[name];
}
}
// Use src not movie
if (data.params.movie) {
data.params.src = data.params.src || data.params.movie;
delete data.params.movie;
}
// Convert the URL to relative/absolute depending on configuration
if (data.params.src)
data.params.src = urlConverter.call(urlConverterScope, data.params.src, 'src', 'object');
if (video) {
if (node.name === 'video')
type = lookup.video.name;
else if (node.name === 'audio')
type = lookup.audio.name;
}
if (object && !type)
type = (lookupAttribute(object, 'clsid') || lookupAttribute(object, 'classid') || lookupAttribute(object, 'type') || {}).name;
if (embed && !type)
type = (lookupAttribute(embed, 'type') || lookupExtension(data.params.src) || {}).name;
// for embedded audio we preserve the original specified type
if (embed && type == 'EmbeddedAudio') {
data.params.type = embed.attr('type');
}
// Replace the video/object/embed element with a placeholder image containing the data
node.replace(img);
// Remove embed
if (embed)
embed.remove();
// Serialize the inner HTML of the object element
if (object) {
html = getInnerHTML(object.remove());
if (html)
data.object_html = html;
}
// Serialize the inner HTML of the video element
if (video) {
html = getInnerHTML(video.remove());
if (html)
data.video_html = html;
}
data.hspace = hspace;
data.vspace = vspace;
data.align = align;
data.bgcolor = bgcolor;
// Set width/height of placeholder
img.attr({
id : id,
'class' : 'mceItemMedia mceItem' + (type || 'Flash'),
style : style,
width : width || (node.name == 'audio' ? "300" : "320"),
height : height || (node.name == 'audio' ? "32" : "240"),
hspace : hspace,
vspace : vspace,
align : align,
bgcolor : bgcolor,
"data-mce-json" : JSON.serialize(data, "'")
});
}
});
// Register plugin
tinymce.PluginManager.add('media', tinymce.plugins.MediaPlugin);
})();

View File

@ -1,73 +0,0 @@
/**
* 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);
}

View File

@ -1,513 +0,0 @@
(function() {
var 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 get(id) {
return document.getElementById(id);
}
function clone(obj) {
var i, len, copy, attr;
if (null == obj || "object" != typeof obj)
return obj;
// Handle Array
if ('length' in obj) {
copy = [];
for (i = 0, len = obj.length; i < len; ++i) {
copy[i] = clone(obj[i]);
}
return copy;
}
// Handle Object
copy = {};
for (attr in obj) {
if (obj.hasOwnProperty(attr))
copy[attr] = clone(obj[attr]);
}
return copy;
}
function getVal(id) {
var elm = get(id);
if (elm.nodeName == "SELECT")
return elm.options[elm.selectedIndex].value;
if (elm.type == "checkbox")
return elm.checked;
return elm.value;
}
function setVal(id, value, name) {
if (typeof(value) != 'undefined' && value != null) {
var elm = get(id);
if (elm.nodeName == "SELECT")
selectByValue(document.forms[0], id, value);
else if (elm.type == "checkbox") {
if (typeof(value) == 'string') {
value = value.toLowerCase();
value = (!name && value === 'true') || (name && value === name.toLowerCase());
}
elm.checked = !!value;
} else
elm.value = value;
}
}
window.Media = {
init : function() {
var html, editor, self = this;
self.editor = editor = tinyMCEPopup.editor;
// Setup file browsers and color pickers
get('filebrowsercontainer').innerHTML = getBrowserHTML('filebrowser','src','media','media');
get('qtsrcfilebrowsercontainer').innerHTML = getBrowserHTML('qtsrcfilebrowser','quicktime_qtsrc','media','media');
get('bgcolor_pickcontainer').innerHTML = getColorPickerHTML('bgcolor_pick','bgcolor');
get('video_altsource1_filebrowser').innerHTML = getBrowserHTML('video_filebrowser_altsource1','video_altsource1','media','media');
get('video_altsource2_filebrowser').innerHTML = getBrowserHTML('video_filebrowser_altsource2','video_altsource2','media','media');
get('audio_altsource1_filebrowser').innerHTML = getBrowserHTML('audio_filebrowser_altsource1','audio_altsource1','media','media');
get('audio_altsource2_filebrowser').innerHTML = getBrowserHTML('audio_filebrowser_altsource2','audio_altsource2','media','media');
get('video_poster_filebrowser').innerHTML = getBrowserHTML('filebrowser_poster','video_poster','image','media');
html = self.getMediaListHTML('medialist', 'src', 'media', 'media');
if (html == "")
get("linklistrow").style.display = 'none';
else
get("linklistcontainer").innerHTML = html;
if (isVisible('filebrowser'))
get('src').style.width = '230px';
if (isVisible('video_filebrowser_altsource1'))
get('video_altsource1').style.width = '220px';
if (isVisible('video_filebrowser_altsource2'))
get('video_altsource2').style.width = '220px';
if (isVisible('audio_filebrowser_altsource1'))
get('audio_altsource1').style.width = '220px';
if (isVisible('audio_filebrowser_altsource2'))
get('audio_altsource2').style.width = '220px';
if (isVisible('filebrowser_poster'))
get('video_poster').style.width = '220px';
editor.dom.setOuterHTML(get('media_type'), self.getMediaTypeHTML(editor));
self.setDefaultDialogSettings(editor);
self.data = clone(tinyMCEPopup.getWindowArg('data'));
self.dataToForm();
self.preview();
updateColor('bgcolor_pick', 'bgcolor');
},
insert : function() {
var editor = tinyMCEPopup.editor;
this.formToData();
editor.execCommand('mceRepaint');
tinyMCEPopup.restoreSelection();
editor.selection.setNode(editor.plugins.media.dataToImg(this.data));
tinyMCEPopup.close();
},
preview : function() {
get('prev').innerHTML = this.editor.plugins.media.dataToHtml(this.data, true);
},
moveStates : function(to_form, field) {
var data = this.data, editor = this.editor,
mediaPlugin = editor.plugins.media, ext, src, typeInfo, defaultStates, src;
defaultStates = {
// QuickTime
quicktime_autoplay : true,
quicktime_controller : true,
// Flash
flash_play : true,
flash_loop : true,
flash_menu : true,
// WindowsMedia
windowsmedia_autostart : true,
windowsmedia_enablecontextmenu : true,
windowsmedia_invokeurls : true,
// RealMedia
realmedia_autogotourl : true,
realmedia_imagestatus : true
};
function parseQueryParams(str) {
var out = {};
if (str) {
tinymce.each(str.split('&'), function(item) {
var parts = item.split('=');
out[unescape(parts[0])] = unescape(parts[1]);
});
}
return out;
};
function setOptions(type, names) {
var i, name, formItemName, value, list;
if (type == data.type || type == 'global') {
names = tinymce.explode(names);
for (i = 0; i < names.length; i++) {
name = names[i];
formItemName = type == 'global' ? name : type + '_' + name;
if (type == 'global')
list = data;
else if (type == 'video' || type == 'audio') {
list = data.video.attrs;
if (!list && !to_form)
data.video.attrs = list = {};
} else
list = data.params;
if (list) {
if (to_form) {
setVal(formItemName, list[name], type == 'video' || type == 'audio' ? name : '');
} else {
delete list[name];
value = getVal(formItemName);
if ((type == 'video' || type == 'audio') && value === true)
value = name;
if (defaultStates[formItemName]) {
if (value !== defaultStates[formItemName]) {
value = "" + value;
list[name] = value;
}
} else if (value) {
value = "" + value;
list[name] = value;
}
}
}
}
}
}
if (!to_form) {
data.type = get('media_type').options[get('media_type').selectedIndex].value;
data.width = getVal('width');
data.height = getVal('height');
// Switch type based on extension
src = getVal('src');
if (field == 'src') {
ext = src.replace(/^.*\.([^.]+)$/, '$1');
if (typeInfo = mediaPlugin.getType(ext))
data.type = typeInfo.name.toLowerCase();
setVal('media_type', data.type);
}
if (data.type == "video" || data.type == "audio") {
if (!data.video.sources)
data.video.sources = [];
data.video.sources[0] = {src: getVal('src')};
}
}
// Hide all fieldsets and show the one active
get('video_options').style.display = 'none';
get('audio_options').style.display = 'none';
get('flash_options').style.display = 'none';
get('quicktime_options').style.display = 'none';
get('shockwave_options').style.display = 'none';
get('windowsmedia_options').style.display = 'none';
get('realmedia_options').style.display = 'none';
get('embeddedaudio_options').style.display = 'none';
if (get(data.type + '_options'))
get(data.type + '_options').style.display = 'block';
setVal('media_type', data.type);
setOptions('flash', 'play,loop,menu,swliveconnect,quality,scale,salign,wmode,base,flashvars');
setOptions('quicktime', 'loop,autoplay,cache,controller,correction,enablejavascript,kioskmode,autohref,playeveryframe,targetcache,scale,starttime,endtime,target,qtsrcchokespeed,volume,qtsrc');
setOptions('shockwave', 'sound,progress,autostart,swliveconnect,swvolume,swstretchstyle,swstretchhalign,swstretchvalign');
setOptions('windowsmedia', 'autostart,enabled,enablecontextmenu,fullscreen,invokeurls,mute,stretchtofit,windowlessvideo,balance,baseurl,captioningid,currentmarker,currentposition,defaultframe,playcount,rate,uimode,volume');
setOptions('realmedia', 'autostart,loop,autogotourl,center,imagestatus,maintainaspect,nojava,prefetch,shuffle,console,controls,numloop,scriptcallbacks');
setOptions('video', 'poster,autoplay,loop,muted,preload,controls');
setOptions('audio', 'autoplay,loop,preload,controls');
setOptions('embeddedaudio', 'autoplay,loop,controls');
setOptions('global', 'id,name,vspace,hspace,bgcolor,align,width,height');
if (to_form) {
if (data.type == 'video') {
if (data.video.sources[0])
setVal('src', data.video.sources[0].src);
src = data.video.sources[1];
if (src)
setVal('video_altsource1', src.src);
src = data.video.sources[2];
if (src)
setVal('video_altsource2', src.src);
} else if (data.type == 'audio') {
if (data.video.sources[0])
setVal('src', data.video.sources[0].src);
src = data.video.sources[1];
if (src)
setVal('audio_altsource1', src.src);
src = data.video.sources[2];
if (src)
setVal('audio_altsource2', src.src);
} else {
// Check flash vars
if (data.type == 'flash') {
tinymce.each(editor.getParam('flash_video_player_flashvars', {url : '$url', poster : '$poster'}), function(value, name) {
if (value == '$url')
data.params.src = parseQueryParams(data.params.flashvars)[name] || data.params.src || '';
});
}
setVal('src', data.params.src);
}
} else {
src = getVal("src");
// YouTube Embed
if (src.match(/youtube\.com\/embed\/\w+/)) {
data.width = 425;
data.height = 350;
data.params.frameborder = '0';
data.type = 'iframe';
setVal('src', src);
setVal('media_type', data.type);
} else {
// YouTube *NEW*
if (src.match(/youtu\.be\/[a-z1-9.-_]+/)) {
data.width = 425;
data.height = 350;
data.params.frameborder = '0';
data.type = 'iframe';
src = 'http://www.youtube.com/embed/' + src.match(/youtu.be\/([a-z1-9.-_]+)/)[1];
setVal('src', src);
setVal('media_type', data.type);
}
// YouTube
if (src.match(/youtube\.com(.+)v=([^&]+)/)) {
data.width = 425;
data.height = 350;
data.params.frameborder = '0';
data.type = 'iframe';
src = 'http://www.youtube.com/embed/' + src.match(/v=([^&]+)/)[1];
setVal('src', src);
setVal('media_type', data.type);
}
}
// Google video
if (src.match(/video\.google\.com(.+)docid=([^&]+)/)) {
data.width = 425;
data.height = 326;
data.type = 'flash';
src = 'http://video.google.com/googleplayer.swf?docId=' + src.match(/docid=([^&]+)/)[1] + '&hl=en';
setVal('src', src);
setVal('media_type', data.type);
}
// Vimeo
if (src.match(/vimeo\.com\/([0-9]+)/)) {
data.width = 425;
data.height = 350;
data.params.frameborder = '0';
data.type = 'iframe';
src = 'http://player.vimeo.com/video/' + src.match(/vimeo.com\/([0-9]+)/)[1];
setVal('src', src);
setVal('media_type', data.type);
}
// stream.cz
if (src.match(/stream\.cz\/((?!object).)*\/([0-9]+)/)) {
data.width = 425;
data.height = 350;
data.params.frameborder = '0';
data.type = 'iframe';
src = 'http://www.stream.cz/object/' + src.match(/stream.cz\/[^/]+\/([0-9]+)/)[1];
setVal('src', src);
setVal('media_type', data.type);
}
// Google maps
if (src.match(/maps\.google\.([a-z]{2,3})\/maps\/(.+)msid=(.+)/)) {
data.width = 425;
data.height = 350;
data.params.frameborder = '0';
data.type = 'iframe';
src = 'http://maps.google.com/maps/ms?msid=' + src.match(/msid=(.+)/)[1] + "&output=embed";
setVal('src', src);
setVal('media_type', data.type);
}
if (data.type == 'video') {
if (!data.video.sources)
data.video.sources = [];
data.video.sources[0] = {src : src};
src = getVal("video_altsource1");
if (src)
data.video.sources[1] = {src : src};
src = getVal("video_altsource2");
if (src)
data.video.sources[2] = {src : src};
} else if (data.type == 'audio') {
if (!data.video.sources)
data.video.sources = [];
data.video.sources[0] = {src : src};
src = getVal("audio_altsource1");
if (src)
data.video.sources[1] = {src : src};
src = getVal("audio_altsource2");
if (src)
data.video.sources[2] = {src : src};
} else
data.params.src = src;
// Set default size
setVal('width', data.width || (data.type == 'audio' ? 300 : 320));
setVal('height', data.height || (data.type == 'audio' ? 32 : 240));
}
},
dataToForm : function() {
this.moveStates(true);
},
formToData : function(field) {
if (field == "width" || field == "height")
this.changeSize(field);
if (field == 'source') {
this.moveStates(false, field);
setVal('source', this.editor.plugins.media.dataToHtml(this.data));
this.panel = 'source';
} else {
if (this.panel == 'source') {
this.data = clone(this.editor.plugins.media.htmlToData(getVal('source')));
this.dataToForm();
this.panel = '';
}
this.moveStates(false, field);
this.preview();
}
},
beforeResize : function() {
this.width = parseInt(getVal('width') || (this.data.type == 'audio' ? "300" : "320"), 10);
this.height = parseInt(getVal('height') || (this.data.type == 'audio' ? "32" : "240"), 10);
},
changeSize : function(type) {
var width, height, scale, size;
if (get('constrain').checked) {
width = parseInt(getVal('width') || (this.data.type == 'audio' ? "300" : "320"), 10);
height = parseInt(getVal('height') || (this.data.type == 'audio' ? "32" : "240"), 10);
if (type == 'width') {
this.height = Math.round((width / this.width) * height);
setVal('height', this.height);
} else {
this.width = Math.round((height / this.height) * width);
setVal('width', this.width);
}
}
},
getMediaListHTML : function() {
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;Media.formToData(\'src\');">';
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 "";
},
getMediaTypeHTML : function(editor) {
function option(media_type, element) {
if (!editor.schema.getElementRule(element || media_type)) {
return '';
}
return '<option value="'+media_type+'">'+tinyMCEPopup.editor.translate("media_dlg."+media_type)+'</option>'
}
var html = "";
html += '<select id="media_type" name="media_type" onchange="Media.formToData(\'type\');">';
html += option("video");
html += option("audio");
html += option("flash", "object");
html += option("quicktime", "object");
html += option("shockwave", "object");
html += option("windowsmedia", "object");
html += option("realmedia", "object");
html += option("iframe");
if (editor.getParam('media_embedded_audio', false)) {
html += option('embeddedaudio', "object");
}
html += '</select>';
return html;
},
setDefaultDialogSettings : function(editor) {
var defaultDialogSettings = editor.getParam("media_dialog_defaults", {});
tinymce.each(defaultDialogSettings, function(v, k) {
setVal(k, v);
});
}
};
tinyMCEPopup.requireLangPack();
tinyMCEPopup.onInit.add(function() {
Media.init();
});
})();

View File

@ -1 +0,0 @@
tinyMCE.addI18n('en.media_dlg',{list:"List",file:"File/URL",advanced:"Advanced",general:"General",title:"Insert/Edit Embedded Media","align_top_left":"Top Left","align_center":"Center","align_left":"Left","align_bottom":"Bottom","align_right":"Right","align_top":"Top","qt_stream_warn":"Streamed RTSP resources should be added to the QT Source field under the Advanced tab.\nYou should also add a non-streamed version to the Source field.",qtsrc:"QT Source",progress:"Progress",sound:"Sound",swstretchvalign:"Stretch V-Align",swstretchhalign:"Stretch H-Align",swstretchstyle:"Stretch Style",scriptcallbacks:"Script Callbacks","align_top_right":"Top Right",uimode:"UI Mode",rate:"Rate",playcount:"Play Count",defaultframe:"Default Frame",currentposition:"Current Position",currentmarker:"Current Marker",captioningid:"Captioning ID",baseurl:"Base URL",balance:"Balance",windowlessvideo:"Windowless Video",stretchtofit:"Stretch to Fit",mute:"Mute",invokeurls:"Invoke URLs",fullscreen:"Full Screen",enabled:"Enabled",autostart:"Auto Start",volume:"Volume",target:"Target",qtsrcchokespeed:"Choke Speed",href:"HREF",endtime:"End Time",starttime:"Start Time",enablejavascript:"Enable JavaScript",correction:"No Correction",targetcache:"Target Cache",playeveryframe:"Play Every Frame",kioskmode:"Kiosk Mode",controller:"Controller",menu:"Show Menu",loop:"Loop",play:"Auto Play",hspace:"H-Space",vspace:"V-Space","class_name":"Class",name:"Name",id:"ID",type:"Type",size:"Dimensions",preview:"Preview","constrain_proportions":"Constrain Proportions",controls:"Controls",numloop:"Num Loops",console:"Console",cache:"Cache",autohref:"Auto HREF",liveconnect:"SWLiveConnect",flashvars:"Flash Vars",base:"Base",bgcolor:"Background",wmode:"WMode",salign:"SAlign",align:"Align",scale:"Scale",quality:"Quality",shuffle:"Shuffle",prefetch:"Prefetch",nojava:"No Java",maintainaspect:"Maintain Aspect",imagestatus:"Image Status",center:"Center",autogotourl:"Auto Goto URL","shockwave_options":"Shockwave Options","rmp_options":"Real Media Player Options","wmp_options":"Windows Media Player Options","qt_options":"QuickTime Options","flash_options":"Flash Options",hidden:"Hidden","align_bottom_left":"Bottom Left","align_bottom_right":"Bottom Right","html5_video_options":"HTML5 Video Options",altsource1:"Alternative source 1",altsource2:"Alternative source 2",preload:"Preload",poster:"Poster",source:"Source","html5_audio_options":"Audio Options","preload_none":"Don\'t Preload","preload_metadata":"Preload video metadata","preload_auto":"Let user\'s browser decide", "embedded_audio_options":"Embedded Audio Options", video:"HTML5 Video", audio:"HTML5 Audio", flash:"Flash", quicktime:"QuickTime", shockwave:"Shockwave", windowsmedia:"Windows Media", realmedia:"Real Media", iframe:"Iframe", embeddedaudio:"Embedded Audio" });

View File

@ -1,922 +0,0 @@
<!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>{#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" />
</head>
<body style="display: none" role="application">
<form onsubmit="Media.insert();return false;" action="#">
<div class="tabs" role="presentation">
<ul>
<li id="general_tab" class="current" aria-controls="general_panel"><span><a href="javascript:mcTabs.displayTab('general_tab','general_panel');Media.formToData();" onmousedown="return false;">{#media_dlg.general}</a></span></li>
<li id="advanced_tab" aria-controls="advanced_panel"><span><a href="javascript:mcTabs.displayTab('advanced_tab','advanced_panel');Media.formToData();" onmousedown="return false;">{#media_dlg.advanced}</a></span></li>
<li id="source_tab" aria-controls="source_panel"><span><a href="javascript:mcTabs.displayTab('source_tab','source_panel');Media.formToData('source');" onmousedown="return false;">{#media_dlg.source}</a></span></li>
</ul>
</div>
<div class="panel_wrapper">
<div id="general_panel" class="panel current">
<fieldset>
<legend>{#media_dlg.general}</legend>
<table role="presentation" border="0" cellpadding="4" cellspacing="0">
<tr>
<td><label for="media_type">{#media_dlg.type}</label></td>
<td>
<select id="media_type"></select>
</td>
</tr>
<tr>
<td><label for="src">{#media_dlg.file}</label></td>
<td>
<table role="presentation" border="0" cellspacing="0" cellpadding="0">
<tr>
<td><input id="src" name="src" type="text" value="" class="mceFocus" onchange="Media.formToData();" /></td>
<td id="filebrowsercontainer">&nbsp;</td>
</tr>
</table>
</td>
</tr>
<tr id="linklistrow">
<td><label for="linklist">{#media_dlg.list}</label></td>
<td id="linklistcontainer"><select id="linklist"><option value=""></option></select></td>
</tr>
<tr>
<td><label for="width">{#media_dlg.size}</label></td>
<td>
<table role="presentation" border="0" cellpadding="0" cellspacing="0">
<tr>
<td><input type="text" id="width" name="width" value="" class="size" onchange="Media.formToData('width');" onfocus="Media.beforeResize();" /> x <input type="text" id="height" name="height" value="" class="size" onfocus="Media.beforeResize();" onchange="Media.formToData('height');" /></td>
<td>&nbsp;&nbsp;<input id="constrain" type="checkbox" name="constrain" class="checkbox" checked="checked" /></td>
<td><label id="constrainlabel" for="constrain">{#media_dlg.constrain_proportions}</label></td>
</tr>
</table>
</td>
</tr>
</table>
</fieldset>
<fieldset>
<legend>{#media_dlg.preview}</legend>
<div id="prev"></div>
</fieldset>
</div>
<div id="advanced_panel" class="panel">
<fieldset>
<legend>{#media_dlg.advanced}</legend>
<table role="presentation" border="0" cellpadding="4" cellspacing="0" width="100%">
<tr>
<td><label for="id">{#media_dlg.id}</label></td>
<td><input type="text" id="id" name="id" onchange="Media.formToData();" /></td>
<td><label for="name">{#media_dlg.name}</label></td>
<td><input type="text" id="name" name="name" onchange="Media.formToData();" /></td>
</tr>
<tr>
<td><label for="align">{#media_dlg.align}</label></td>
<td>
<select id="align" name="align" onchange="Media.formToData();">
<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">{#media_dlg.bgcolor}</label></td>
<td>
<table role="presentation" border="0" cellpadding="0" cellspacing="0">
<tr>
<td><input id="bgcolor" name="bgcolor" type="text" value="" size="9" onchange="updateColor('bgcolor_pick','bgcolor');Media.formToData();" /></td>
<td id="bgcolor_pickcontainer">&nbsp;</td>
</tr>
</table>
</td>
</tr>
<tr>
<td><label for="vspace">{#media_dlg.vspace}</label></td>
<td><input type="text" id="vspace" name="vspace" class="number" onchange="Media.formToData();" /></td>
<td><label for="hspace">{#media_dlg.hspace}</label></td>
<td><input type="text" id="hspace" name="hspace" class="number" onchange="Media.formToData();" /></td>
</tr>
</table>
</fieldset>
<fieldset id="video_options">
<legend>{#media_dlg.html5_video_options}</legend>
<table role="presentation">
<tr>
<td><label for="video_altsource1">{#media_dlg.altsource1}</label></td>
<td>
<table role="presentation" border="0" cellspacing="0" cellpadding="0">
<tr>
<td><input type="text" id="video_altsource1" name="video_altsource1" onchange="Media.formToData();" style="width: 240px" /></td>
<td id="video_altsource1_filebrowser">&nbsp;</td>
</tr>
</table>
</td>
</tr>
<tr>
<td><label for="video_altsource2">{#media_dlg.altsource2}</label></td>
<td>
<table role="presentation" border="0" cellspacing="0" cellpadding="0">
<tr>
<td><input type="text" id="video_altsource2" name="video_altsource2" onchange="Media.formToData();" style="width: 240px" /></td>
<td id="video_altsource2_filebrowser">&nbsp;</td>
</tr>
</table>
</td>
</tr>
<tr>
<td><label for="video_poster">{#media_dlg.poster}</label></td>
<td>
<table role="presentation" border="0" cellspacing="0" cellpadding="0">
<tr>
<td><input type="text" id="video_poster" name="video_poster" onchange="Media.formToData();" style="width: 240px" /></td>
<td id="video_poster_filebrowser">&nbsp;</td>
</tr>
</table>
</td>
</tr>
<tr>
<td><label for="video_preload">{#media_dlg.preload}</label></td>
<td>
<select id="video_preload" name="video_preload" onchange="Media.formToData();">
<option value="none">{#media_dlg.preload_none}</option>
<option value="metadata">{#media_dlg.preload_metadata}</option>
<option value="auto">{#media_dlg.preload_auto}</option>
</select>
</td>
</tr>
</table>
<table role="presentation" border="0" cellpadding="4" cellspacing="0">
<tr>
<td>
<table role="presentation" border="0" cellpadding="0" cellspacing="0">
<tr>
<td><input type="checkbox" class="checkbox" id="video_autoplay" name="video_autoplay" onchange="Media.formToData();" /></td>
<td><label for="video_autoplay">{#media_dlg.play}</label></td>
</tr>
</table>
</td>
<td>
<table role="presentation" border="0" cellpadding="0" cellspacing="0">
<tr>
<td><input type="checkbox" class="checkbox" id="video_muted" name="video_muted" onchange="Media.formToData();" /></td>
<td><label for="video_muted">{#media_dlg.mute}</label></td>
</tr>
</table>
</td>
<td>
<table role="presentation" border="0" cellpadding="0" cellspacing="0">
<tr>
<td><input type="checkbox" class="checkbox" id="video_loop" name="video_loop" onchange="Media.formToData();" /></td>
<td><label for="video_loop">{#media_dlg.loop}</label></td>
</tr>
</table>
</td>
<td>
<table role="presentation" border="0" cellpadding="0" cellspacing="0">
<tr>
<td><input type="checkbox" class="checkbox" id="video_controls" name="video_controls" onchange="Media.formToData();" /></td>
<td><label for="video_controls">{#media_dlg.controls}</label></td>
</tr>
</table>
</td>
</tr>
</table>
</fieldset>
<fieldset id="embeddedaudio_options">
<legend>{#media_dlg.embedded_audio_options}</legend>
<table role="presentation" border="0" cellpadding="4" cellspacing="0">
<tr>
<td>
<table role="presentation" border="0" cellpadding="0" cellspacing="0">
<tr>
<td><input type="checkbox" class="checkbox" id="embeddedaudio_autoplay" name="audio_autoplay" onchange="Media.formToData();" /></td>
<td><label for="audio_autoplay">{#media_dlg.play}</label></td>
</tr>
</table>
</td>
<td>
<table role="presentation" border="0" cellpadding="0" cellspacing="0">
<tr>
<td><input type="checkbox" class="checkbox" id="embeddedaudio_loop" name="audio_loop" onchange="Media.formToData();" /></td>
<td><label for="audio_loop">{#media_dlg.loop}</label></td>
</tr>
</table>
</td>
<td>
<table role="presentation" border="0" cellpadding="0" cellspacing="0">
<tr>
<td><input type="checkbox" class="checkbox" id="embeddedaudio_controls" name="audio_controls" onchange="Media.formToData();" /></td>
<td><label for="audio_controls">{#media_dlg.controls}</label></td>
</tr>
</table>
</td>
</tr>
</table>
</fieldset>
<fieldset id="audio_options">
<legend>{#media_dlg.html5_audio_options}</legend>
<table role="presentation">
<tr>
<td><label for="audio_altsource1">{#media_dlg.altsource1}</label></td>
<td>
<table role="presentation" border="0" cellspacing="0" cellpadding="0">
<tr>
<td><input type="text" id="audio_altsource1" name="audio_altsource1" onchange="Media.formToData();" style="width: 240px" /></td>
<td id="audio_altsource1_filebrowser">&nbsp;</td>
</tr>
</table>
</td>
</tr>
<tr>
<td><label for="audio_altsource2">{#media_dlg.altsource2}</label></td>
<td>
<table role="presentation" border="0" cellspacing="0" cellpadding="0">
<tr>
<td><input type="text" id="audio_altsource2" name="audio_altsource2" onchange="Media.formToData();" style="width: 240px" /></td>
<td id="audio_altsource2_filebrowser">&nbsp;</td>
</tr>
</table>
</td>
</tr>
<tr>
<td><label for="audio_preload">{#media_dlg.preload}</label></td>
<td>
<select id="audio_preload" name="audio_preload" onchange="Media.formToData();">
<option value="none">{#media_dlg.preload_none}</option>
<option value="metadata">{#media_dlg.preload_metadata}</option>
<option value="auto">{#media_dlg.preload_auto}</option>
</select>
</td>
</tr>
</table>
<table role="presentation" border="0" cellpadding="4" cellspacing="0">
<tr>
<td>
<table role="presentation" border="0" cellpadding="0" cellspacing="0">
<tr>
<td><input type="checkbox" class="checkbox" id="audio_autoplay" name="audio_autoplay" onchange="Media.formToData();" /></td>
<td><label for="audio_autoplay">{#media_dlg.play}</label></td>
</tr>
</table>
</td>
<td>
<table role="presentation" border="0" cellpadding="0" cellspacing="0">
<tr>
<td><input type="checkbox" class="checkbox" id="audio_loop" name="audio_loop" onchange="Media.formToData();" /></td>
<td><label for="audio_loop">{#media_dlg.loop}</label></td>
</tr>
</table>
</td>
<td>
<table role="presentation" border="0" cellpadding="0" cellspacing="0">
<tr>
<td><input type="checkbox" class="checkbox" id="audio_controls" name="audio_controls" onchange="Media.formToData();" /></td>
<td><label for="audio_controls">{#media_dlg.controls}</label></td>
</tr>
</table>
</td>
</tr>
</table>
</fieldset>
<fieldset id="flash_options">
<legend>{#media_dlg.flash_options}</legend>
<table role="presentation" border="0" cellpadding="4" cellspacing="0">
<tr>
<td><label for="flash_quality">{#media_dlg.quality}</label></td>
<td>
<select id="flash_quality" name="flash_quality" onchange="Media.formToData();">
<option value="">{#not_set}</option>
<option value="high">high</option>
<option value="low">low</option>
<option value="autolow">autolow</option>
<option value="autohigh">autohigh</option>
<option value="best">best</option>
</select>
</td>
<td><label for="flash_scale">{#media_dlg.scale}</label></td>
<td>
<select id="flash_scale" name="flash_scale" onchange="Media.formToData();">
<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">{#media_dlg.wmode}</label></td>
<td>
<select id="flash_wmode" name="flash_wmode" onchange="Media.formToData();">
<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">{#media_dlg.salign}</label></td>
<td>
<select id="flash_salign" name="flash_salign" onchange="Media.formToData();">
<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>
<tr>
<td colspan="2">
<table role="presentation" border="0" cellpadding="0" cellspacing="0">
<tr>
<td><input type="checkbox" class="checkbox" id="flash_play" name="flash_play" checked="checked" onchange="Media.formToData();" /></td>
<td><label for="flash_play">{#media_dlg.play}</label></td>
</tr>
</table>
</td>
<td colspan="2">
<table role="presentation" border="0" cellpadding="0" cellspacing="0">
<tr>
<td><input type="checkbox" class="checkbox" id="flash_loop" name="flash_loop" checked="checked" onchange="Media.formToData();" /></td>
<td><label for="flash_loop">{#media_dlg.loop}</label></td>
</tr>
</table>
</td>
</tr>
<tr>
<td colspan="2">
<table role="presentation" border="0" cellpadding="0" cellspacing="0">
<tr>
<td><input type="checkbox" class="checkbox" id="flash_menu" name="flash_menu" checked="checked" onchange="Media.formToData();" /></td>
<td><label for="flash_menu">{#media_dlg.menu}</label></td>
</tr>
</table>
</td>
<td colspan="2">
<table role="presentation" border="0" cellpadding="0" cellspacing="0">
<tr>
<td><input type="checkbox" class="checkbox" id="flash_swliveconnect" name="flash_swliveconnect" onchange="Media.formToData();" /></td>
<td><label for="flash_swliveconnect">{#media_dlg.liveconnect}</label></td>
</tr>
</table>
</td>
</tr>
</table>
<table role="presentation">
<tr>
<td><label for="flash_base">{#media_dlg.base}</label></td>
<td><input type="text" id="flash_base" name="flash_base" onchange="Media.formToData();" /></td>
</tr>
<tr>
<td><label for="flash_flashvars">{#media_dlg.flashvars}</label></td>
<td><input type="text" id="flash_flashvars" name="flash_flashvars" onchange="Media.formToData();" /></td>
</tr>
</table>
</fieldset>
<fieldset id="quicktime_options">
<legend>{#media_dlg.qt_options}</legend>
<table role="presentation" border="0" cellpadding="4" cellspacing="0">
<tr>
<td colspan="2">
<table role="presentation" border="0" cellpadding="0" cellspacing="0">
<tr>
<td><input type="checkbox" class="checkbox" id="quicktime_loop" name="quicktime_loop" onchange="Media.formToData();" /></td>
<td><label for="quicktime_loop">{#media_dlg.loop}</label></td>
</tr>
</table>
</td>
<td colspan="2">
<table role="presentation" border="0" cellpadding="0" cellspacing="0">
<tr>
<td><input type="checkbox" class="checkbox" id="quicktime_autoplay" name="quicktime_autoplay" checked="checked" onchange="Media.formToData();" /></td>
<td><label for="quicktime_autoplay">{#media_dlg.play}</label></td>
</tr>
</table>
</td>
</tr>
<tr>
<td colspan="2">
<table role="presentation" border="0" cellpadding="0" cellspacing="0">
<tr>
<td><input type="checkbox" class="checkbox" id="quicktime_cache" name="quicktime_cache" onchange="Media.formToData();" /></td>
<td><label for="quicktime_cache">{#media_dlg.cache}</label></td>
</tr>
</table>
</td>
<td colspan="2">
<table role="presentation" border="0" cellpadding="0" cellspacing="0">
<tr>
<td><input type="checkbox" class="checkbox" id="quicktime_controller" name="quicktime_controller" checked="checked" onchange="Media.formToData();" /></td>
<td><label for="quicktime_controller">{#media_dlg.controller}</label></td>
</tr>
</table>
</td>
</tr>
<tr>
<td colspan="2">
<table role="presentation" border="0" cellpadding="0" cellspacing="0">
<tr>
<td><input type="checkbox" class="checkbox" id="quicktime_correction" name="quicktime_correction" onchange="Media.formToData();" /></td>
<td><label for="quicktime_correction">{#media_dlg.correction}</label></td>
</tr>
</table>
</td>
<td colspan="2">
<table role="presentation" border="0" cellpadding="0" cellspacing="0">
<tr>
<td><input type="checkbox" class="checkbox" id="quicktime_enablejavascript" name="quicktime_enablejavascript" onchange="Media.formToData();" /></td>
<td><label for="quicktime_enablejavascript">{#media_dlg.enablejavascript}</label></td>
</tr>
</table>
</td>
</tr>
<tr>
<td colspan="2">
<table role="presentation" border="0" cellpadding="0" cellspacing="0">
<tr>
<td><input type="checkbox" class="checkbox" id="quicktime_kioskmode" name="quicktime_kioskmode" onchange="Media.formToData();" /></td>
<td><label for="quicktime_kioskmode">{#media_dlg.kioskmode}</label></td>
</tr>
</table>
</td>
<td colspan="2">
<table role="presentation" border="0" cellpadding="0" cellspacing="0">
<tr>
<td><input type="checkbox" class="checkbox" id="quicktime_autohref" name="quicktime_autohref" onchange="Media.formToData();" /></td>
<td><label for="quicktime_autohref">{#media_dlg.autohref}</label></td>
</tr>
</table>
</td>
</tr>
<tr>
<td colspan="2">
<table role="presentation" border="0" cellpadding="0" cellspacing="0">
<tr>
<td><input type="checkbox" class="checkbox" id="quicktime_playeveryframe" name="quicktime_playeveryframe" onchange="Media.formToData();" /></td>
<td><label for="quicktime_playeveryframe">{#media_dlg.playeveryframe}</label></td>
</tr>
</table>
</td>
<td colspan="2">
<table role="presentation" border="0" cellpadding="0" cellspacing="0">
<tr>
<td><input type="checkbox" class="checkbox" id="quicktime_targetcache" name="quicktime_targetcache" onchange="Media.formToData();" /></td>
<td><label for="quicktime_targetcache">{#media_dlg.targetcache}</label></td>
</tr>
</table>
</td>
</tr>
<tr>
<td><label for="quicktime_scale">{#media_dlg.scale}</label></td>
<td><select id="quicktime_scale" name="quicktime_scale" class="mceEditableSelect" onchange="Media.formToData();">
<option value="">{#not_set}</option>
<option value="tofit">tofit</option>
<option value="aspect">aspect</option>
</select>
</td>
<td colspan="2">&nbsp;</td>
</tr>
<tr>
<td><label for="quicktime_starttime">{#media_dlg.starttime}</label></td>
<td><input type="text" id="quicktime_starttime" name="quicktime_starttime" onchange="Media.formToData();" /></td>
<td><label for="quicktime_endtime">{#media_dlg.endtime}</label></td>
<td><input type="text" id="quicktime_endtime" name="quicktime_endtime" onchange="Media.formToData();" /></td>
</tr>
<tr>
<td><label for="quicktime_target">{#media_dlg.target}</label></td>
<td><input type="text" id="quicktime_target" name="quicktime_target" onchange="Media.formToData();" /></td>
<td><label for="quicktime_href">{#media_dlg.href}</label></td>
<td><input type="text" id="quicktime_href" name="quicktime_href" onchange="Media.formToData();" /></td>
</tr>
<tr>
<td><label for="quicktime_qtsrcchokespeed">{#media_dlg.qtsrcchokespeed}</label></td>
<td><input type="text" id="quicktime_qtsrcchokespeed" name="quicktime_qtsrcchokespeed" onchange="Media.formToData();" /></td>
<td><label for="quicktime_volume">{#media_dlg.volume}</label></td>
<td><input type="text" id="quicktime_volume" name="quicktime_volume" onchange="Media.formToData();" /></td>
</tr>
<tr>
<td><label for="quicktime_qtsrc">{#media_dlg.qtsrc}</label></td>
<td colspan="4">
<table role="presentation" border="0" cellspacing="0" cellpadding="0">
<tr>
<td><input type="text" id="quicktime_qtsrc" name="quicktime_qtsrc" onchange="Media.formToData();" /></td>
<td id="qtsrcfilebrowsercontainer">&nbsp;</td>
</tr>
</table>
</td>
</tr>
</table>
</fieldset>
<fieldset id="windowsmedia_options">
<legend>{#media_dlg.wmp_options}</legend>
<table role="presentation" border="0" cellpadding="4" cellspacing="0">
<tr>
<td colspan="2">
<table role="presentation" border="0" cellpadding="0" cellspacing="0">
<tr>
<td><input type="checkbox" class="checkbox" id="windowsmedia_autostart" name="windowsmedia_autostart" checked="checked" onchange="Media.formToData();" /></td>
<td><label for="windowsmedia_autostart">{#media_dlg.autostart}</label></td>
</tr>
</table>
</td>
<td colspan="2">
<table role="presentation" border="0" cellpadding="0" cellspacing="0">
<tr>
<td><input type="checkbox" class="checkbox" id="windowsmedia_enabled" name="windowsmedia_enabled" onchange="Media.formToData();" /></td>
<td><label for="windowsmedia_enabled">{#media_dlg.enabled}</label></td>
</tr>
</table>
</td>
</tr>
<tr>
<td colspan="2">
<table role="presentation" border="0" cellpadding="0" cellspacing="0">
<tr>
<td><input type="checkbox" class="checkbox" id="windowsmedia_enablecontextmenu" name="windowsmedia_enablecontextmenu" checked="checked" onchange="Media.formToData();" /></td>
<td><label for="windowsmedia_enablecontextmenu">{#media_dlg.menu}</label></td>
</tr>
</table>
</td>
<td colspan="2">
<table role="presentation" border="0" cellpadding="0" cellspacing="0">
<tr>
<td><input type="checkbox" class="checkbox" id="windowsmedia_fullscreen" name="windowsmedia_fullscreen" onchange="Media.formToData();" /></td>
<td><label for="windowsmedia_fullscreen">{#media_dlg.fullscreen}</label></td>
</tr>
</table>
</td>
</tr>
<tr>
<td colspan="2">
<table role="presentation" border="0" cellpadding="0" cellspacing="0">
<tr>
<td><input type="checkbox" class="checkbox" id="windowsmedia_invokeurls" name="windowsmedia_invokeurls" checked="checked" onchange="Media.formToData();" /></td>
<td><label for="windowsmedia_invokeurls">{#media_dlg.invokeurls}</label></td>
</tr>
</table>
</td>
<td colspan="2">
<table role="presentation" border="0" cellpadding="0" cellspacing="0">
<tr>
<td><input type="checkbox" class="checkbox" id="windowsmedia_mute" name="windowsmedia_mute" onchange="Media.formToData();" /></td>
<td><label for="windowsmedia_mute">{#media_dlg.mute}</label></td>
</tr>
</table>
</td>
</tr>
<tr>
<td colspan="2">
<table role="presentation" border="0" cellpadding="0" cellspacing="0">
<tr>
<td><input type="checkbox" class="checkbox" id="windowsmedia_stretchtofit" name="windowsmedia_stretchtofit" onchange="Media.formToData();" /></td>
<td><label for="windowsmedia_stretchtofit">{#media_dlg.stretchtofit}</label></td>
</tr>
</table>
</td>
<td colspan="2">
<table role="presentation" border="0" cellpadding="0" cellspacing="0">
<tr>
<td><input type="checkbox" class="checkbox" id="windowsmedia_windowlessvideo" name="windowsmedia_windowlessvideo" onchange="Media.formToData();" /></td>
<td><label for="windowsmedia_windowlessvideo">{#media_dlg.windowlessvideo}</label></td>
</tr>
</table>
</td>
</tr>
<tr>
<td><label for="windowsmedia_balance">{#media_dlg.balance}</label></td>
<td><input type="text" id="windowsmedia_balance" name="windowsmedia_balance" onchange="Media.formToData();" /></td>
<td><label for="windowsmedia_baseurl">{#media_dlg.baseurl}</label></td>
<td><input type="text" id="windowsmedia_baseurl" name="windowsmedia_baseurl" onchange="Media.formToData();" /></td>
</tr>
<tr>
<td><label for="windowsmedia_captioningid">{#media_dlg.captioningid}</label></td>
<td><input type="text" id="windowsmedia_captioningid" name="windowsmedia_captioningid" onchange="Media.formToData();" /></td>
<td><label for="windowsmedia_currentmarker">{#media_dlg.currentmarker}</label></td>
<td><input type="text" id="windowsmedia_currentmarker" name="windowsmedia_currentmarker" onchange="Media.formToData();" /></td>
</tr>
<tr>
<td><label for="windowsmedia_currentposition">{#media_dlg.currentposition}</label></td>
<td><input type="text" id="windowsmedia_currentposition" name="windowsmedia_currentposition" onchange="Media.formToData();" /></td>
<td><label for="windowsmedia_defaultframe">{#media_dlg.defaultframe}</label></td>
<td><input type="text" id="windowsmedia_defaultframe" name="windowsmedia_defaultframe" onchange="Media.formToData();" /></td>
</tr>
<tr>
<td><label for="windowsmedia_playcount">{#media_dlg.playcount}</label></td>
<td><input type="text" id="windowsmedia_playcount" name="windowsmedia_playcount" onchange="Media.formToData();" /></td>
<td><label for="windowsmedia_rate">{#media_dlg.rate}</label></td>
<td><input type="text" id="windowsmedia_rate" name="windowsmedia_rate" onchange="Media.formToData();" /></td>
</tr>
<tr>
<td><label for="windowsmedia_uimode">{#media_dlg.uimode}</label></td>
<td><input type="text" id="windowsmedia_uimode" name="windowsmedia_uimode" onchange="Media.formToData();" /></td>
<td><label for="windowsmedia_volume">{#media_dlg.volume}</label></td>
<td><input type="text" id="windowsmedia_volume" name="windowsmedia_volume" onchange="Media.formToData();" /></td>
</tr>
</table>
</fieldset>
<fieldset id="realmedia_options">
<legend>{#media_dlg.rmp_options}</legend>
<table role="presentation" border="0" cellpadding="4" cellspacing="0">
<tr>
<td colspan="2">
<table role="presentation" border="0" cellpadding="0" cellspacing="0">
<tr>
<td><input type="checkbox" class="checkbox" id="realmedia_autostart" name="realmedia_autostart" onchange="Media.formToData();" /></td>
<td><label for="realmedia_autostart">{#media_dlg.autostart}</label></td>
</tr>
</table>
</td>
<td colspan="2">
<table role="presentation" border="0" cellpadding="0" cellspacing="0">
<tr>
<td><input type="checkbox" class="checkbox" id="realmedia_loop" name="realmedia_loop" onchange="Media.formToData();" /></td>
<td><label for="realmedia_loop">{#media_dlg.loop}</label></td>
</tr>
</table>
</td>
</tr>
<tr>
<td colspan="2">
<table role="presentation" border="0" cellpadding="0" cellspacing="0">
<tr>
<td><input type="checkbox" class="checkbox" id="realmedia_autogotourl" name="realmedia_autogotourl" checked="checked" onchange="Media.formToData();" /></td>
<td><label for="realmedia_autogotourl">{#media_dlg.autogotourl}</label></td>
</tr>
</table>
</td>
<td colspan="2">
<table role="presentation" border="0" cellpadding="0" cellspacing="0">
<tr>
<td><input type="checkbox" class="checkbox" id="realmedia_center" name="realmedia_center" onchange="Media.formToData();" /></td>
<td><label for="realmedia_center">{#media_dlg.center}</label></td>
</tr>
</table>
</td>
</tr>
<tr>
<td colspan="2">
<table role="presentation" border="0" cellpadding="0" cellspacing="0">
<tr>
<td><input type="checkbox" class="checkbox" id="realmedia_imagestatus" name="realmedia_imagestatus" checked="checked" onchange="Media.formToData();" /></td>
<td><label for="realmedia_imagestatus">{#media_dlg.imagestatus}</label></td>
</tr>
</table>
</td>
<td colspan="2">
<table role="presentation" border="0" cellpadding="0" cellspacing="0">
<tr>
<td><input type="checkbox" class="checkbox" id="realmedia_maintainaspect" name="realmedia_maintainaspect" onchange="Media.formToData();" /></td>
<td><label for="realmedia_maintainaspect">{#media_dlg.maintainaspect}</label></td>
</tr>
</table>
</td>
</tr>
<tr>
<td colspan="2">
<table role="presentation" border="0" cellpadding="0" cellspacing="0">
<tr>
<td><input type="checkbox" class="checkbox" id="realmedia_nojava" name="realmedia_nojava" onchange="Media.formToData();" /></td>
<td><label for="realmedia_nojava">{#media_dlg.nojava}</label></td>
</tr>
</table>
</td>
<td colspan="2">
<table role="presentation" border="0" cellpadding="0" cellspacing="0">
<tr>
<td><input type="checkbox" class="checkbox" id="realmedia_prefetch" name="realmedia_prefetch" onchange="Media.formToData();" /></td>
<td><label for="realmedia_prefetch">{#media_dlg.prefetch}</label></td>
</tr>
</table>
</td>
</tr>
<tr>
<td colspan="2">
<table role="presentation" border="0" cellpadding="0" cellspacing="0">
<tr>
<td><input type="checkbox" class="checkbox" id="realmedia_shuffle" name="realmedia_shuffle" onchange="Media.formToData();" /></td>
<td><label for="realmedia_shuffle">{#media_dlg.shuffle}</label></td>
</tr>
</table>
</td>
<td colspan="2">
&nbsp;
</td>
</tr>
<tr>
<td><label for="realmedia_console">{#media_dlg.console}</label></td>
<td><input type="text" id="realmedia_console" name="realmedia_console" onchange="Media.formToData();" /></td>
<td><label for="realmedia_controls">{#media_dlg.controls}</label></td>
<td><input type="text" id="realmedia_controls" name="realmedia_controls" onchange="Media.formToData();" /></td>
</tr>
<tr>
<td><label for="realmedia_numloop">{#media_dlg.numloop}</label></td>
<td><input type="text" id="realmedia_numloop" name="realmedia_numloop" onchange="Media.formToData();" /></td>
<td><label for="realmedia_scriptcallbacks">{#media_dlg.scriptcallbacks}</label></td>
<td><input type="text" id="realmedia_scriptcallbacks" name="realmedia_scriptcallbacks" onchange="Media.formToData();" /></td>
</tr>
</table>
</fieldset>
<fieldset id="shockwave_options">
<legend>{#media_dlg.shockwave_options}</legend>
<table role="presentation" border="0" cellpadding="4" cellspacing="0">
<tr>
<td><label for="shockwave_swstretchstyle">{#media_dlg.swstretchstyle}</label></td>
<td>
<select id="shockwave_swstretchstyle" name="shockwave_swstretchstyle" onchange="Media.formToData();">
<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">{#media_dlg.volume}</label></td>
<td><input type="text" id="shockwave_swvolume" name="shockwave_swvolume" onchange="Media.formToData();" /></td>
</tr>
<tr>
<td><label for="shockwave_swstretchhalign">{#media_dlg.swstretchhalign}</label></td>
<td>
<select id="shockwave_swstretchhalign" name="shockwave_swstretchhalign" onchange="Media.formToData();">
<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">{#media_dlg.swstretchvalign}</label></td>
<td>
<select id="shockwave_swstretchvalign" name="shockwave_swstretchvalign" onchange="Media.formToData();">
<option value="none">{#not_set}</option>
<option value="meet">Meet</option>
<option value="fill">Fill</option>
<option value="stage">Stage</option>
</select>
</td>
</tr>
<tr>
<td colspan="2">
<table role="presentation" border="0" cellpadding="0" cellspacing="0">
<tr>
<td><input type="checkbox" class="checkbox" id="shockwave_autostart" name="shockwave_autostart" onchange="Media.formToData();" checked="checked" /></td>
<td><label for="shockwave_autostart">{#media_dlg.autostart}</label></td>
</tr>
</table>
</td>
<td colspan="2">
<table role="presentation" border="0" cellpadding="0" cellspacing="0">
<tr>
<td><input type="checkbox" class="checkbox" id="shockwave_sound" name="shockwave_sound" onchange="Media.formToData();" checked="checked" /></td>
<td><label for="shockwave_sound">{#media_dlg.sound}</label></td>
</tr>
</table>
</td>
</tr>
<tr>
<td colspan="2">
<table role="presentation" border="0" cellpadding="0" cellspacing="0">
<tr>
<td><input type="checkbox" class="checkbox" id="shockwave_swliveconnect" name="shockwave_swliveconnect" onchange="Media.formToData();" /></td>
<td><label for="shockwave_swliveconnect">{#media_dlg.liveconnect}</label></td>
</tr>
</table>
</td>
<td colspan="2">
<table role="presentation" border="0" cellpadding="0" cellspacing="0">
<tr>
<td><input type="checkbox" class="checkbox" id="shockwave_progress" name="shockwave_progress" onchange="Media.formToData();" checked="checked" /></td>
<td><label for="shockwave_progress">{#media_dlg.progress}</label></td>
</tr>
</table>
</td>
</tr>
</table>
</fieldset>
</div>
<div id="source_panel" class="panel">
<fieldset>
<legend>{#media_dlg.source}</legend>
<textarea id="source" style="width: 99%; height: 390px"></textarea>
</fieldset>
</div>
</div>
<div class="mceActionPanel">
<input type="submit" id="insert" name="insert" value="{#insert}" />
<input type="button" id="cancel" name="cancel" value="{#cancel}" onclick="tinyMCEPopup.close();" />
</div>
</form>
</body>
</html>

View File

@ -1 +0,0 @@
(function(){tinymce.create("tinymce.plugins.Nonbreaking",{init:function(a,b){var c=this;c.editor=a;a.addCommand("mceNonBreaking",function(){a.execCommand("mceInsertContent",false,(a.plugins.visualchars&&a.plugins.visualchars.state)?'<span data-mce-bogus="1" class="mceItemHidden mceItemNbsp">&nbsp;</span>':"&nbsp;")});a.addButton("nonbreaking",{title:"nonbreaking.nonbreaking_desc",cmd:"mceNonBreaking"});if(a.getParam("nonbreaking_force_tab")){a.onKeyDown.add(function(d,f){if(f.keyCode==9){f.preventDefault();d.execCommand("mceNonBreaking");d.execCommand("mceNonBreaking");d.execCommand("mceNonBreaking")}})}},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)})();

View File

@ -1,54 +0,0 @@
/**
* editor_plugin_src.js
*
* Copyright 2009, Moxiecode Systems AB
* Released under LGPL License.
*
* License: http://tinymce.moxiecode.com/license
* Contributing: http://tinymce.moxiecode.com/contributing
*/
(function() {
tinymce.create('tinymce.plugins.Nonbreaking', {
init : function(ed, url) {
var t = this;
t.editor = ed;
// Register commands
ed.addCommand('mceNonBreaking', function() {
ed.execCommand('mceInsertContent', false, (ed.plugins.visualchars && ed.plugins.visualchars.state) ? '<span data-mce-bogus="1" class="mceItemHidden mceItemNbsp">&nbsp;</span>' : '&nbsp;');
});
// Register buttons
ed.addButton('nonbreaking', {title : 'nonbreaking.nonbreaking_desc', cmd : 'mceNonBreaking'});
if (ed.getParam('nonbreaking_force_tab')) {
ed.onKeyDown.add(function(ed, e) {
if (e.keyCode == 9) {
e.preventDefault();
ed.execCommand('mceNonBreaking');
ed.execCommand('mceNonBreaking');
ed.execCommand('mceNonBreaking');
}
});
}
},
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
};
}
// Private methods
});
// Register plugin
tinymce.PluginManager.add('nonbreaking', tinymce.plugins.Nonbreaking);
})();

File diff suppressed because one or more lines are too long

View File

@ -1 +0,0 @@
(function(){tinymce.create("tinymce.plugins.PageBreakPlugin",{init:function(b,d){var f='<img src="'+b.theme.url+'/img/trans.gif" class="mcePageBreak mceItemNoResize" />',a="mcePageBreak",c=b.getParam("pagebreak_separator","<!-- pagebreak -->"),e;e=new RegExp(c.replace(/[\?\.\*\[\]\(\)\{\}\+\^\$\:]/g,function(g){return"\\"+g}),"g");b.addCommand("mcePageBreak",function(){b.execCommand("mceInsertContent",0,f)});b.addButton("pagebreak",{title:"pagebreak.desc",cmd:a});b.onInit.add(function(){if(b.theme.onResolveName){b.theme.onResolveName.add(function(g,h){if(h.node.nodeName=="IMG"&&b.dom.hasClass(h.node,a)){h.name="pagebreak"}})}});b.onClick.add(function(g,h){h=h.target;if(h.nodeName==="IMG"&&g.dom.hasClass(h,a)){g.selection.select(h)}});b.onNodeChange.add(function(h,g,i){g.setActive("pagebreak",i.nodeName==="IMG"&&h.dom.hasClass(i,a))});b.onBeforeSetContent.add(function(g,h){h.content=h.content.replace(e,f)});b.onPostProcess.add(function(g,h){if(h.get){h.content=h.content.replace(/<img[^>]+>/g,function(i){if(i.indexOf('class="mcePageBreak')!==-1){i=c}return i})}})},getInfo:function(){return{longname:"PageBreak",author:"Moxiecode Systems AB",authorurl:"http://tinymce.moxiecode.com",infourl:"http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/pagebreak",version:tinymce.majorVersion+"."+tinymce.minorVersion}}});tinymce.PluginManager.add("pagebreak",tinymce.plugins.PageBreakPlugin)})();

View File

@ -1,74 +0,0 @@
/**
* editor_plugin_src.js
*
* Copyright 2009, Moxiecode Systems AB
* Released under LGPL License.
*
* License: http://tinymce.moxiecode.com/license
* Contributing: http://tinymce.moxiecode.com/contributing
*/
(function() {
tinymce.create('tinymce.plugins.PageBreakPlugin', {
init : function(ed, url) {
var pb = '<img src="' + ed.theme.url + '/img/trans.gif" class="mcePageBreak mceItemNoResize" />', cls = 'mcePageBreak', sep = ed.getParam('pagebreak_separator', '<!-- pagebreak -->'), pbRE;
pbRE = new RegExp(sep.replace(/[\?\.\*\[\]\(\)\{\}\+\^\$\:]/g, function(a) {return '\\' + a;}), 'g');
// Register commands
ed.addCommand('mcePageBreak', function() {
ed.execCommand('mceInsertContent', 0, pb);
});
// Register buttons
ed.addButton('pagebreak', {title : 'pagebreak.desc', cmd : cls});
ed.onInit.add(function() {
if (ed.theme.onResolveName) {
ed.theme.onResolveName.add(function(th, o) {
if (o.node.nodeName == 'IMG' && ed.dom.hasClass(o.node, cls))
o.name = 'pagebreak';
});
}
});
ed.onClick.add(function(ed, e) {
e = e.target;
if (e.nodeName === 'IMG' && ed.dom.hasClass(e, cls))
ed.selection.select(e);
});
ed.onNodeChange.add(function(ed, cm, n) {
cm.setActive('pagebreak', n.nodeName === 'IMG' && ed.dom.hasClass(n, cls));
});
ed.onBeforeSetContent.add(function(ed, o) {
o.content = o.content.replace(pbRE, pb);
});
ed.onPostProcess.add(function(ed, o) {
if (o.get)
o.content = o.content.replace(/<img[^>]+>/g, function(im) {
if (im.indexOf('class="mcePageBreak') !== -1)
im = sep;
return im;
});
});
},
getInfo : function() {
return {
longname : 'PageBreak',
author : 'Moxiecode Systems AB',
authorurl : 'http://tinymce.moxiecode.com',
infourl : 'http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/pagebreak',
version : tinymce.majorVersion + "." + tinymce.minorVersion
};
}
});
// Register plugin
tinymce.PluginManager.add('pagebreak', tinymce.plugins.PageBreakPlugin);
})();

File diff suppressed because one or more lines are too long

View File

@ -1,885 +0,0 @@
/**
* editor_plugin_src.js
*
* Copyright 2009, Moxiecode Systems AB
* Released under LGPL License.
*
* License: http://tinymce.moxiecode.com/license
* Contributing: http://tinymce.moxiecode.com/contributing
*/
(function() {
var each = tinymce.each,
defs = {
paste_auto_cleanup_on_paste : true,
paste_enable_default_filters : true,
paste_block_drop : false,
paste_retain_style_properties : "none",
paste_strip_class_attributes : "mso",
paste_remove_spans : false,
paste_remove_styles : false,
paste_remove_styles_if_webkit : true,
paste_convert_middot_lists : true,
paste_convert_headers_to_strong : false,
paste_dialog_width : "450",
paste_dialog_height : "400",
paste_max_consecutive_linebreaks: 2,
paste_text_use_dialog : false,
paste_text_sticky : false,
paste_text_sticky_default : false,
paste_text_notifyalways : false,
paste_text_linebreaktype : "combined",
paste_text_replacements : [
[/\u2026/g, "..."],
[/[\x93\x94\u201c\u201d]/g, '"'],
[/[\x60\x91\x92\u2018\u2019]/g, "'"]
]
};
function getParam(ed, name) {
return ed.getParam(name, defs[name]);
}
tinymce.create('tinymce.plugins.PastePlugin', {
init : function(ed, url) {
var t = this;
t.editor = ed;
t.url = url;
// Setup plugin events
t.onPreProcess = new tinymce.util.Dispatcher(t);
t.onPostProcess = new tinymce.util.Dispatcher(t);
// Register default handlers
t.onPreProcess.add(t._preProcess);
t.onPostProcess.add(t._postProcess);
// Register optional preprocess handler
t.onPreProcess.add(function(pl, o) {
ed.execCallback('paste_preprocess', pl, o);
});
// Register optional postprocess
t.onPostProcess.add(function(pl, o) {
ed.execCallback('paste_postprocess', pl, o);
});
ed.onKeyDown.addToTop(function(ed, e) {
// Block ctrl+v from adding an undo level since the default logic in tinymce.Editor will add that
if (((tinymce.isMac ? e.metaKey : e.ctrlKey) && e.keyCode == 86) || (e.shiftKey && e.keyCode == 45))
return false; // Stop other listeners
});
// Initialize plain text flag
ed.pasteAsPlainText = getParam(ed, 'paste_text_sticky_default');
// This function executes the process handlers and inserts the contents
// force_rich overrides plain text mode set by user, important for pasting with execCommand
function process(o, force_rich) {
var dom = ed.dom, rng;
// Execute pre process handlers
t.onPreProcess.dispatch(t, o);
// Create DOM structure
o.node = dom.create('div', 0, o.content);
// If pasting inside the same element and the contents is only one block
// remove the block and keep the text since Firefox will copy parts of pre and h1-h6 as a pre element
if (tinymce.isGecko) {
rng = ed.selection.getRng(true);
if (rng.startContainer == rng.endContainer && rng.startContainer.nodeType == 3) {
// Is only one block node and it doesn't contain word stuff
if (o.node.childNodes.length === 1 && /^(p|h[1-6]|pre)$/i.test(o.node.firstChild.nodeName) && o.content.indexOf('__MCE_ITEM__') === -1)
dom.remove(o.node.firstChild, true);
}
}
// Execute post process handlers
t.onPostProcess.dispatch(t, o);
// Serialize content
o.content = ed.serializer.serialize(o.node, {getInner : 1, forced_root_block : ''});
// Plain text option active?
if ((!force_rich) && (ed.pasteAsPlainText)) {
t._insertPlainText(o.content);
if (!getParam(ed, "paste_text_sticky")) {
ed.pasteAsPlainText = false;
ed.controlManager.setActive("pastetext", false);
}
} else {
t._insert(o.content);
}
}
// Add command for external usage
ed.addCommand('mceInsertClipboardContent', function(u, o) {
process(o, true);
});
if (!getParam(ed, "paste_text_use_dialog")) {
ed.addCommand('mcePasteText', function(u, v) {
var cookie = tinymce.util.Cookie;
ed.pasteAsPlainText = !ed.pasteAsPlainText;
ed.controlManager.setActive('pastetext', ed.pasteAsPlainText);
if ((ed.pasteAsPlainText) && (!cookie.get("tinymcePasteText"))) {
if (getParam(ed, "paste_text_sticky")) {
ed.windowManager.alert(ed.translate('paste.plaintext_mode_sticky'));
} else {
ed.windowManager.alert(ed.translate('paste.plaintext_mode'));
}
if (!getParam(ed, "paste_text_notifyalways")) {
cookie.set("tinymcePasteText", "1", new Date(new Date().getFullYear() + 1, 12, 31))
}
}
});
}
ed.addButton('pastetext', {title: 'paste.paste_text_desc', cmd: 'mcePasteText'});
ed.addButton('selectall', {title: 'paste.selectall_desc', cmd: 'selectall'});
// This function grabs the contents from the clipboard by adding a
// hidden div and placing the caret inside it and after the browser paste
// is done it grabs that contents and processes that
function grabContent(e) {
var n, or, rng, oldRng, sel = ed.selection, dom = ed.dom, body = ed.getBody(), posY, textContent;
// Check if browser supports direct plaintext access
if (e.clipboardData || dom.doc.dataTransfer) {
textContent = (e.clipboardData || dom.doc.dataTransfer).getData('Text');
if (ed.pasteAsPlainText) {
e.preventDefault();
process({content : dom.encode(textContent).replace(/\r?\n/g, '<br />')});
return;
}
}
if (dom.get('_mcePaste'))
return;
// Create container to paste into
n = dom.add(body, 'div', {id : '_mcePaste', 'class' : 'mcePaste', 'data-mce-bogus' : '1'}, '\uFEFF\uFEFF');
// If contentEditable mode we need to find out the position of the closest element
if (body != ed.getDoc().body)
posY = dom.getPos(ed.selection.getStart(), body).y;
else
posY = body.scrollTop + dom.getViewPort(ed.getWin()).y;
// Styles needs to be applied after the element is added to the document since WebKit will otherwise remove all styles
// If also needs to be in view on IE or the paste would fail
dom.setStyles(n, {
position : 'absolute',
left : tinymce.isGecko ? -40 : 0, // Need to move it out of site on Gecko since it will othewise display a ghost resize rect for the div
top : posY - 25,
width : 1,
height : 1,
overflow : 'hidden'
});
if (tinymce.isIE) {
// Store away the old range
oldRng = sel.getRng();
// Select the container
rng = dom.doc.body.createTextRange();
rng.moveToElementText(n);
rng.execCommand('Paste');
// Remove container
dom.remove(n);
// Check if the contents was changed, if it wasn't then clipboard extraction failed probably due
// to IE security settings so we pass the junk though better than nothing right
if (n.innerHTML === '\uFEFF\uFEFF') {
ed.execCommand('mcePasteWord');
e.preventDefault();
return;
}
// Restore the old range and clear the contents before pasting
sel.setRng(oldRng);
sel.setContent('');
// For some odd reason we need to detach the the mceInsertContent call from the paste event
// It's like IE has a reference to the parent element that you paste in and the selection gets messed up
// when it tries to restore the selection
setTimeout(function() {
// Process contents
process({content : n.innerHTML});
}, 0);
// Block the real paste event
return tinymce.dom.Event.cancel(e);
} else {
function block(e) {
e.preventDefault();
};
// Block mousedown and click to prevent selection change
dom.bind(ed.getDoc(), 'mousedown', block);
dom.bind(ed.getDoc(), 'keydown', block);
or = ed.selection.getRng();
// Move select contents inside DIV
n = n.firstChild;
rng = ed.getDoc().createRange();
rng.setStart(n, 0);
rng.setEnd(n, 2);
sel.setRng(rng);
// Wait a while and grab the pasted contents
window.setTimeout(function() {
var h = '', nl;
// Paste divs duplicated in paste divs seems to happen when you paste plain text so lets first look for that broken behavior in WebKit
if (!dom.select('div.mcePaste > div.mcePaste').length) {
nl = dom.select('div.mcePaste');
// WebKit will split the div into multiple ones so this will loop through then all and join them to get the whole HTML string
each(nl, function(n) {
var child = n.firstChild;
// WebKit inserts a DIV container with lots of odd styles
if (child && child.nodeName == 'DIV' && child.style.marginTop && child.style.backgroundColor) {
dom.remove(child, 1);
}
// Remove apply style spans
each(dom.select('span.Apple-style-span', n), function(n) {
dom.remove(n, 1);
});
// Remove bogus br elements
each(dom.select('br[data-mce-bogus]', n), function(n) {
dom.remove(n);
});
// WebKit will make a copy of the DIV for each line of plain text pasted and insert them into the DIV
if (n.parentNode.className != 'mcePaste')
h += n.innerHTML;
});
} else {
// Found WebKit weirdness so force the content into paragraphs this seems to happen when you paste plain text from Nodepad etc
// So this logic will replace double enter with paragraphs and single enter with br so it kind of looks the same
h = '<p>' + dom.encode(textContent).replace(/\r?\n\r?\n/g, '</p><p>').replace(/\r?\n/g, '<br />') + '</p>';
}
// Remove the nodes
each(dom.select('div.mcePaste'), function(n) {
dom.remove(n);
});
// Restore the old selection
if (or)
sel.setRng(or);
process({content : h});
// Unblock events ones we got the contents
dom.unbind(ed.getDoc(), 'mousedown', block);
dom.unbind(ed.getDoc(), 'keydown', block);
}, 0);
}
}
// Check if we should use the new auto process method
if (getParam(ed, "paste_auto_cleanup_on_paste")) {
// Is it's Opera or older FF use key handler
if (tinymce.isOpera || /Firefox\/2/.test(navigator.userAgent)) {
ed.onKeyDown.addToTop(function(ed, e) {
if (((tinymce.isMac ? e.metaKey : e.ctrlKey) && e.keyCode == 86) || (e.shiftKey && e.keyCode == 45))
grabContent(e);
});
} else {
// Grab contents on paste event on Gecko and WebKit
ed.onPaste.addToTop(function(ed, e) {
return grabContent(e);
});
}
}
ed.onInit.add(function() {
ed.controlManager.setActive("pastetext", ed.pasteAsPlainText);
// Block all drag/drop events
if (getParam(ed, "paste_block_drop")) {
ed.dom.bind(ed.getBody(), ['dragend', 'dragover', 'draggesture', 'dragdrop', 'drop', 'drag'], function(e) {
e.preventDefault();
e.stopPropagation();
return false;
});
}
});
// Add legacy support
t._legacySupport();
},
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
};
},
_preProcess : function(pl, o) {
var ed = this.editor,
h = o.content,
grep = tinymce.grep,
explode = tinymce.explode,
trim = tinymce.trim,
len, stripClass;
//console.log('Before preprocess:' + o.content);
function process(items) {
each(items, function(v) {
// Remove or replace
if (v.constructor == RegExp)
h = h.replace(v, '');
else
h = h.replace(v[0], v[1]);
});
}
if (ed.settings.paste_enable_default_filters == false) {
return;
}
// IE9 adds BRs before/after block elements when contents is pasted from word or for example another browser
if (tinymce.isIE && document.documentMode >= 9 && /<(h[1-6r]|p|div|address|pre|form|table|tbody|thead|tfoot|th|tr|td|li|ol|ul|caption|blockquote|center|dl|dt|dd|dir|fieldset)/.test(o.content)) {
// IE9 adds BRs before/after block elements when contents is pasted from word or for example another browser
process([[/(?:<br>&nbsp;[\s\r\n]+|<br>)*(<\/?(h[1-6r]|p|div|address|pre|form|table|tbody|thead|tfoot|th|tr|td|li|ol|ul|caption|blockquote|center|dl|dt|dd|dir|fieldset)[^>]*>)(?:<br>&nbsp;[\s\r\n]+|<br>)*/g, '$1']]);
// IE9 also adds an extra BR element for each soft-linefeed and it also adds a BR for each word wrap break
process([
[/<br><br>/g, '<BR><BR>'], // Replace multiple BR elements with uppercase BR to keep them intact
[/<br>/g, ' '], // Replace single br elements with space since they are word wrap BR:s
[/<BR><BR>/g, '<br>'] // Replace back the double brs but into a single BR
]);
}
// Detect Word content and process it more aggressive
if (/class="?Mso|style="[^"]*\bmso-|w:WordDocument/i.test(h) || o.wordContent) {
o.wordContent = true; // Mark the pasted contents as word specific content
//console.log('Word contents detected.');
// Process away some basic content
process([
/^\s*(&nbsp;)+/gi, // &nbsp; entities at the start of contents
/(&nbsp;|<br[^>]*>)+\s*$/gi // &nbsp; entities at the end of contents
]);
if (getParam(ed, "paste_convert_headers_to_strong")) {
h = h.replace(/<p [^>]*class="?MsoHeading"?[^>]*>(.*?)<\/p>/gi, "<p><strong>$1</strong></p>");
}
if (getParam(ed, "paste_convert_middot_lists")) {
process([
[/<!--\[if !supportLists\]-->/gi, '$&__MCE_ITEM__'], // Convert supportLists to a list item marker
[/(<span[^>]+(?:mso-list:|:\s*symbol)[^>]+>)/gi, '$1__MCE_ITEM__'], // Convert mso-list and symbol spans to item markers
[/(<p[^>]+(?:MsoListParagraph)[^>]+>)/gi, '$1__MCE_ITEM__'] // Convert mso-list and symbol paragraphs to item markers (FF)
]);
}
process([
// Word comments like conditional comments etc
/<!--[\s\S]+?-->/gi,
// Remove comments, scripts (e.g., msoShowComment), XML tag, VML content, MS Office namespaced tags, and a few other tags
/<(!|script[^>]*>.*?<\/script(?=[>\s])|\/?(\?xml(:\w+)?|img|meta|link|style|\w:\w+)(?=[\s\/>]))[^>]*>/gi,
// Convert <s> into <strike> for line-though
[/<(\/?)s>/gi, "<$1strike>"],
// Replace nsbp entites to char since it's easier to handle
[/&nbsp;/gi, "\u00a0"]
]);
// Remove bad attributes, with or without quotes, ensuring that attribute text is really inside a tag.
// If JavaScript had a RegExp look-behind, we could have integrated this with the last process() array and got rid of the loop. But alas, it does not, so we cannot.
do {
len = h.length;
h = h.replace(/(<[a-z][^>]*\s)(?:id|name|language|type|on\w+|\w+:\w+)=(?:"[^"]*"|\w+)\s?/gi, "$1");
} while (len != h.length);
// Remove all spans if no styles is to be retained
if (getParam(ed, "paste_retain_style_properties").replace(/^none$/i, "").length == 0) {
h = h.replace(/<\/?span[^>]*>/gi, "");
} else {
// We're keeping styles, so at least clean them up.
// CSS Reference: http://msdn.microsoft.com/en-us/library/aa155477.aspx
process([
// Convert <span style="mso-spacerun:yes">___</span> to string of alternating breaking/non-breaking spaces of same length
[/<span\s+style\s*=\s*"\s*mso-spacerun\s*:\s*yes\s*;?\s*"\s*>([\s\u00a0]*)<\/span>/gi,
function(str, spaces) {
return (spaces.length > 0)? spaces.replace(/./, " ").slice(Math.floor(spaces.length/2)).split("").join("\u00a0") : "";
}
],
// Examine all styles: delete junk, transform some, and keep the rest
[/(<[a-z][^>]*)\sstyle="([^"]*)"/gi,
function(str, tag, style) {
var n = [],
i = 0,
s = explode(trim(style).replace(/&quot;/gi, "'"), ";");
// Examine each style definition within the tag's style attribute
each(s, function(v) {
var name, value,
parts = explode(v, ":");
function ensureUnits(v) {
return v + ((v !== "0") && (/\d$/.test(v)))? "px" : "";
}
if (parts.length == 2) {
name = parts[0].toLowerCase();
value = parts[1].toLowerCase();
// Translate certain MS Office styles into their CSS equivalents
switch (name) {
case "mso-padding-alt":
case "mso-padding-top-alt":
case "mso-padding-right-alt":
case "mso-padding-bottom-alt":
case "mso-padding-left-alt":
case "mso-margin-alt":
case "mso-margin-top-alt":
case "mso-margin-right-alt":
case "mso-margin-bottom-alt":
case "mso-margin-left-alt":
case "mso-table-layout-alt":
case "mso-height":
case "mso-width":
case "mso-vertical-align-alt":
n[i++] = name.replace(/^mso-|-alt$/g, "") + ":" + ensureUnits(value);
return;
case "horiz-align":
n[i++] = "text-align:" + value;
return;
case "vert-align":
n[i++] = "vertical-align:" + value;
return;
case "font-color":
case "mso-foreground":
n[i++] = "color:" + value;
return;
case "mso-background":
case "mso-highlight":
n[i++] = "background:" + value;
return;
case "mso-default-height":
n[i++] = "min-height:" + ensureUnits(value);
return;
case "mso-default-width":
n[i++] = "min-width:" + ensureUnits(value);
return;
case "mso-padding-between-alt":
n[i++] = "border-collapse:separate;border-spacing:" + ensureUnits(value);
return;
case "text-line-through":
if ((value == "single") || (value == "double")) {
n[i++] = "text-decoration:line-through";
}
return;
case "mso-zero-height":
if (value == "yes") {
n[i++] = "display:none";
}
return;
}
// Eliminate all MS Office style definitions that have no CSS equivalent by examining the first characters in the name
if (/^(mso|column|font-emph|lang|layout|line-break|list-image|nav|panose|punct|row|ruby|sep|size|src|tab-|table-border|text-(?!align|decor|indent|trans)|top-bar|version|vnd|word-break)/.test(name)) {
return;
}
// If it reached this point, it must be a valid CSS style
n[i++] = name + ":" + parts[1]; // Lower-case name, but keep value case
}
});
// If style attribute contained any valid styles the re-write it; otherwise delete style attribute.
if (i > 0) {
return tag + ' style="' + n.join(';') + '"';
} else {
return tag;
}
}
]
]);
}
}
// Replace headers with <strong>
if (getParam(ed, "paste_convert_headers_to_strong")) {
process([
[/<h[1-6][^>]*>/gi, "<p><strong>"],
[/<\/h[1-6][^>]*>/gi, "</strong></p>"]
]);
}
process([
// Copy paste from Java like Open Office will produce this junk on FF
[/Version:[\d.]+\nStartHTML:\d+\nEndHTML:\d+\nStartFragment:\d+\nEndFragment:\d+/gi, '']
]);
// Class attribute options are: leave all as-is ("none"), remove all ("all"), or remove only those starting with mso ("mso").
// Note:- paste_strip_class_attributes: "none", verify_css_classes: true is also a good variation.
stripClass = getParam(ed, "paste_strip_class_attributes");
if (stripClass !== "none") {
function removeClasses(match, g1) {
if (stripClass === "all")
return '';
var cls = grep(explode(g1.replace(/^(["'])(.*)\1$/, "$2"), " "),
function(v) {
return (/^(?!mso)/i.test(v));
}
);
return cls.length ? ' class="' + cls.join(" ") + '"' : '';
};
h = h.replace(/ class="([^"]+)"/gi, removeClasses);
h = h.replace(/ class=([\-\w]+)/gi, removeClasses);
}
// Remove spans option
if (getParam(ed, "paste_remove_spans")) {
h = h.replace(/<\/?span[^>]*>/gi, "");
}
//console.log('After preprocess:' + h);
o.content = h;
},
/**
* Various post process items.
*/
_postProcess : function(pl, o) {
var t = this, ed = t.editor, dom = ed.dom, styleProps;
if (ed.settings.paste_enable_default_filters == false) {
return;
}
if (o.wordContent) {
// Remove named anchors or TOC links
each(dom.select('a', o.node), function(a) {
if (!a.href || a.href.indexOf('#_Toc') != -1)
dom.remove(a, 1);
});
if (getParam(ed, "paste_convert_middot_lists")) {
t._convertLists(pl, o);
}
// Process styles
styleProps = getParam(ed, "paste_retain_style_properties"); // retained properties
// Process only if a string was specified and not equal to "all" or "*"
if ((tinymce.is(styleProps, "string")) && (styleProps !== "all") && (styleProps !== "*")) {
styleProps = tinymce.explode(styleProps.replace(/^none$/i, ""));
// Retains some style properties
each(dom.select('*', o.node), function(el) {
var newStyle = {}, npc = 0, i, sp, sv;
// Store a subset of the existing styles
if (styleProps) {
for (i = 0; i < styleProps.length; i++) {
sp = styleProps[i];
sv = dom.getStyle(el, sp);
if (sv) {
newStyle[sp] = sv;
npc++;
}
}
}
// Remove all of the existing styles
dom.setAttrib(el, 'style', '');
if (styleProps && npc > 0)
dom.setStyles(el, newStyle); // Add back the stored subset of styles
else // Remove empty span tags that do not have class attributes
if (el.nodeName == 'SPAN' && !el.className)
dom.remove(el, true);
});
}
}
// Remove all style information or only specifically on WebKit to avoid the style bug on that browser
if (getParam(ed, "paste_remove_styles") || (getParam(ed, "paste_remove_styles_if_webkit") && tinymce.isWebKit)) {
each(dom.select('*[style]', o.node), function(el) {
el.removeAttribute('style');
el.removeAttribute('data-mce-style');
});
} else {
if (tinymce.isWebKit) {
// We need to compress the styles on WebKit since if you paste <img border="0" /> it will become <img border="0" style="... lots of junk ..." />
// Removing the mce_style that contains the real value will force the Serializer engine to compress the styles
each(dom.select('*', o.node), function(el) {
el.removeAttribute('data-mce-style');
});
}
}
},
/**
* Converts the most common bullet and number formats in Office into a real semantic UL/LI list.
*/
_convertLists : function(pl, o) {
var dom = pl.editor.dom, listElm, li, lastMargin = -1, margin, levels = [], lastType, html;
// Convert middot lists into real semantic lists
each(dom.select('p', o.node), function(p) {
var sib, val = '', type, html, idx, parents;
// Get text node value at beginning of paragraph
for (sib = p.firstChild; sib && sib.nodeType == 3; sib = sib.nextSibling)
val += sib.nodeValue;
val = p.innerHTML.replace(/<\/?\w+[^>]*>/gi, '').replace(/&nbsp;/g, '\u00a0');
// Detect unordered lists look for bullets
if (/^(__MCE_ITEM__)+[\u2022\u00b7\u00a7\u00d8o\u25CF]\s*\u00a0*/.test(val))
type = 'ul';
// Detect ordered lists 1., a. or ixv.
if (/^__MCE_ITEM__\s*\w+\.\s*\u00a0+/.test(val))
type = 'ol';
// Check if node value matches the list pattern: o&nbsp;&nbsp;
if (type) {
margin = parseFloat(p.style.marginLeft || 0);
if (margin > lastMargin)
levels.push(margin);
if (!listElm || type != lastType) {
listElm = dom.create(type);
dom.insertAfter(listElm, p);
} else {
// Nested list element
if (margin > lastMargin) {
listElm = li.appendChild(dom.create(type));
} else if (margin < lastMargin) {
// Find parent level based on margin value
idx = tinymce.inArray(levels, margin);
parents = dom.getParents(listElm.parentNode, type);
listElm = parents[parents.length - 1 - idx] || listElm;
}
}
// Remove middot or number spans if they exists
each(dom.select('span', p), function(span) {
var html = span.innerHTML.replace(/<\/?\w+[^>]*>/gi, '');
// Remove span with the middot or the number
if (type == 'ul' && /^__MCE_ITEM__[\u2022\u00b7\u00a7\u00d8o\u25CF]/.test(html))
dom.remove(span);
else if (/^__MCE_ITEM__[\s\S]*\w+\.(&nbsp;|\u00a0)*\s*/.test(html))
dom.remove(span);
});
html = p.innerHTML;
// Remove middot/list items
if (type == 'ul')
html = p.innerHTML.replace(/__MCE_ITEM__/g, '').replace(/^[\u2022\u00b7\u00a7\u00d8o\u25CF]\s*(&nbsp;|\u00a0)+\s*/, '');
else
html = p.innerHTML.replace(/__MCE_ITEM__/g, '').replace(/^\s*\w+\.(&nbsp;|\u00a0)+\s*/, '');
// Create li and add paragraph data into the new li
li = listElm.appendChild(dom.create('li', 0, html));
dom.remove(p);
lastMargin = margin;
lastType = type;
} else
listElm = lastMargin = 0; // End list element
});
// Remove any left over makers
html = o.node.innerHTML;
if (html.indexOf('__MCE_ITEM__') != -1)
o.node.innerHTML = html.replace(/__MCE_ITEM__/g, '');
},
/**
* Inserts the specified contents at the caret position.
*/
_insert : function(h, skip_undo) {
var ed = this.editor, r = ed.selection.getRng();
// First delete the contents seems to work better on WebKit when the selection spans multiple list items or multiple table cells.
if (!ed.selection.isCollapsed() && r.startContainer != r.endContainer)
ed.getDoc().execCommand('Delete', false, null);
ed.execCommand('mceInsertContent', false, h, {skip_undo : skip_undo});
},
/**
* Instead of the old plain text method which tried to re-create a paste operation, the
* new approach adds a plain text mode toggle switch that changes the behavior of paste.
* This function is passed the same input that the regular paste plugin produces.
* It performs additional scrubbing and produces (and inserts) the plain text.
* This approach leverages all of the great existing functionality in the paste
* plugin, and requires minimal changes to add the new functionality.
* Speednet - June 2009
*/
_insertPlainText : function(content) {
var ed = this.editor,
linebr = getParam(ed, "paste_text_linebreaktype"),
rl = getParam(ed, "paste_text_replacements"),
is = tinymce.is;
function process(items) {
each(items, function(v) {
if (v.constructor == RegExp)
content = content.replace(v, "");
else
content = content.replace(v[0], v[1]);
});
};
if ((typeof(content) === "string") && (content.length > 0)) {
// If HTML content with line-breaking tags, then remove all cr/lf chars because only tags will break a line
if (/<(?:p|br|h[1-6]|ul|ol|dl|table|t[rdh]|div|blockquote|fieldset|pre|address|center)[^>]*>/i.test(content)) {
process([
/[\n\r]+/g
]);
} else {
// Otherwise just get rid of carriage returns (only need linefeeds)
process([
/\r+/g
]);
}
process([
[/<\/(?:p|h[1-6]|ul|ol|dl|table|div|blockquote|fieldset|pre|address|center)>/gi, "\n\n"], // Block tags get a blank line after them
[/<br[^>]*>|<\/tr>/gi, "\n"], // Single linebreak for <br /> tags and table rows
[/<\/t[dh]>\s*<t[dh][^>]*>/gi, "\t"], // Table cells get tabs betweem them
/<[a-z!\/?][^>]*>/gi, // Delete all remaining tags
[/&nbsp;/gi, " "], // Convert non-break spaces to regular spaces (remember, *plain text*)
[/(?:(?!\n)\s)*(\n+)(?:(?!\n)\s)*/gi, "$1"] // Cool little RegExp deletes whitespace around linebreak chars.
]);
var maxLinebreaks = Number(getParam(ed, "paste_max_consecutive_linebreaks"));
if (maxLinebreaks > -1) {
var maxLinebreaksRegex = new RegExp("\n{" + (maxLinebreaks + 1) + ",}", "g");
var linebreakReplacement = "";
while (linebreakReplacement.length < maxLinebreaks) {
linebreakReplacement += "\n";
}
process([
[maxLinebreaksRegex, linebreakReplacement] // Limit max consecutive linebreaks
]);
}
content = ed.dom.decode(tinymce.html.Entities.encodeRaw(content));
// Perform default or custom replacements
if (is(rl, "array")) {
process(rl);
} else if (is(rl, "string")) {
process(new RegExp(rl, "gi"));
}
// Treat paragraphs as specified in the config
if (linebr == "none") {
// Convert all line breaks to space
process([
[/\n+/g, " "]
]);
} else if (linebr == "br") {
// Convert all line breaks to <br />
process([
[/\n/g, "<br />"]
]);
} else if (linebr == "p") {
// Convert all line breaks to <p>...</p>
process([
[/\n+/g, "</p><p>"],
[/^(.*<\/p>)(<p>)$/, '<p>$1']
]);
} else {
// defaults to "combined"
// Convert single line breaks to <br /> and double line breaks to <p>...</p>
process([
[/\n\n/g, "</p><p>"],
[/^(.*<\/p>)(<p>)$/, '<p>$1'],
[/\n/g, "<br />"]
]);
}
ed.execCommand('mceInsertContent', false, content);
}
},
/**
* This method will open the old style paste dialogs. Some users might want the old behavior but still use the new cleanup engine.
*/
_legacySupport : function() {
var t = this, ed = t.editor;
// Register command(s) for backwards compatibility
ed.addCommand("mcePasteWord", function() {
ed.windowManager.open({
file: t.url + "/pasteword.htm",
width: parseInt(getParam(ed, "paste_dialog_width")),
height: parseInt(getParam(ed, "paste_dialog_height")),
inline: 1
});
});
if (getParam(ed, "paste_text_use_dialog")) {
ed.addCommand("mcePasteText", function() {
ed.windowManager.open({
file : t.url + "/pastetext.htm",
width: parseInt(getParam(ed, "paste_dialog_width")),
height: parseInt(getParam(ed, "paste_dialog_height")),
inline : 1
});
});
}
// Register button for backwards compatibility
ed.addButton("pasteword", {title : "paste.paste_word_desc", cmd : "mcePasteWord"});
}
});
// Register plugin
tinymce.PluginManager.add("paste", tinymce.plugins.PastePlugin);
})();

View File

@ -1,36 +0,0 @@
tinyMCEPopup.requireLangPack();
var PasteTextDialog = {
init : function() {
this.resize();
},
insert : function() {
var h = tinyMCEPopup.dom.encode(document.getElementById('content').value), lines;
// Convert linebreaks into paragraphs
if (document.getElementById('linebreaks').checked) {
lines = h.split(/\r?\n/);
if (lines.length > 1) {
h = '';
tinymce.each(lines, function(row) {
h += '<p>' + row + '</p>';
});
}
}
tinyMCEPopup.editor.execCommand('mceInsertClipboardContent', false, {content : h});
tinyMCEPopup.close();
},
resize : function() {
var vp = tinyMCEPopup.dom.getViewPort(window), el;
el = document.getElementById('content');
el.style.width = (vp.w - 20) + 'px';
el.style.height = (vp.h - 90) + 'px';
}
};
tinyMCEPopup.onInit.add(PasteTextDialog.init, PasteTextDialog);

View File

@ -1,51 +0,0 @@
tinyMCEPopup.requireLangPack();
var PasteWordDialog = {
init : function() {
var ed = tinyMCEPopup.editor, el = document.getElementById('iframecontainer'), ifr, doc, css, cssHTML = '';
// Create iframe
el.innerHTML = '<iframe id="iframe" src="javascript:\'\';" frameBorder="0" style="border: 1px solid gray"></iframe>';
ifr = document.getElementById('iframe');
doc = ifr.contentWindow.document;
// Force absolute CSS urls
css = [ed.baseURI.toAbsolute("themes/" + ed.settings.theme + "/skins/" + ed.settings.skin + "/content.css")];
css = css.concat(tinymce.explode(ed.settings.content_css) || []);
tinymce.each(css, function(u) {
cssHTML += '<link href="' + ed.documentBaseURI.toAbsolute('' + u) + '" rel="stylesheet" type="text/css" />';
});
// Write content into iframe
doc.open();
doc.write('<html><head>' + cssHTML + '</head><body class="mceContentBody" spellcheck="false"></body></html>');
doc.close();
doc.designMode = 'on';
this.resize();
window.setTimeout(function() {
ifr.contentWindow.focus();
}, 10);
},
insert : function() {
var h = document.getElementById('iframe').contentWindow.document.body.innerHTML;
tinyMCEPopup.editor.execCommand('mceInsertClipboardContent', false, {content : h, wordContent : true});
tinyMCEPopup.close();
},
resize : function() {
var vp = tinyMCEPopup.dom.getViewPort(window), el;
el = document.getElementById('iframe');
if (el) {
el.style.width = (vp.w - 20) + 'px';
el.style.height = (vp.h - 90) + 'px';
}
}
};
tinyMCEPopup.onInit.add(PasteWordDialog.init, PasteWordDialog);

Some files were not shown because too many files have changed in this diff Show More