update tinymce to 3.5b2 to fix issues with FF 11 and pasting into code blocks
258
library/mcefixes/plugins.bbcode.editor_plugin_src.js
Executable file
|
|
@ -0,0 +1,258 @@
|
|||
/**
|
||||
* 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
|
||||
*/
|
||||
|
||||
/* Macgirvin Aug-2010 changed from punbb to dfrn dialect */
|
||||
|
||||
(function() {
|
||||
tinymce.create('tinymce.plugins.BBCodePlugin', {
|
||||
init : function(ed, url) {
|
||||
var t = this, dialect = ed.getParam('bbcode_dialect', 'dfrn').toLowerCase();
|
||||
|
||||
ed.onBeforeSetContent.add(function(ed, o) {
|
||||
o.content = t['_' + dialect + '_bbcode2html'](o.content);
|
||||
});
|
||||
|
||||
ed.onPostProcess.add(function(ed, o) {
|
||||
if (o.set)
|
||||
o.content = t['_' + dialect + '_bbcode2html'](o.content);
|
||||
|
||||
if (o.get)
|
||||
o.content = t['_' + dialect + '_html2bbcode'](o.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
|
||||
};
|
||||
},
|
||||
|
||||
// Private methods
|
||||
|
||||
// HTML -> BBCode in DFRN dialect
|
||||
_dfrn_html2bbcode : function(s) {
|
||||
s = tinymce.trim(s);
|
||||
|
||||
function rep(re, str) {
|
||||
|
||||
//modify code to keep stuff intact within [code][/code] blocks
|
||||
//Waitman Gobble NO WARRANTY
|
||||
|
||||
|
||||
var o = new Array();
|
||||
var x = s.split("[code]");
|
||||
var i = 0;
|
||||
|
||||
var si = "";
|
||||
si = x.shift();
|
||||
si = si.replace(re,str);
|
||||
o.push(si);
|
||||
|
||||
for (i = 0; i < x.length; i++) {
|
||||
var no = new Array();
|
||||
var j = x.shift();
|
||||
var g = j.split("[/code]");
|
||||
no.push(g.shift());
|
||||
si = g.shift();
|
||||
si = si.replace(re,str);
|
||||
no.push(si);
|
||||
o.push(no.join("[/code]"));
|
||||
}
|
||||
|
||||
s = o.join("[code]");
|
||||
|
||||
};
|
||||
|
||||
|
||||
|
||||
|
||||
/* oembed */
|
||||
function _h2b_cb(match) {
|
||||
/*
|
||||
function s_h2b(data) {
|
||||
match = data;
|
||||
}
|
||||
$.ajax({
|
||||
type:"POST",
|
||||
url: 'oembed/h2b',
|
||||
data: {text: match},
|
||||
async: false,
|
||||
success: s_h2b,
|
||||
dataType: 'html'
|
||||
});
|
||||
*/
|
||||
|
||||
var f, g, tof = [], tor = [];
|
||||
var find_spanc = /<span [^>]*class *= *[\"'](?:[^\"']* )*oembed(?: [^\"']*)*[\"'][^>]*>(.*?(?:<span[^>]*>(.*?)<\/span *>)*.*?)<\/span *>/ig;
|
||||
while (f = find_spanc.exec(match)) {
|
||||
var find_a = /<a([^>]* rel=[\"']oembed[\"'][^>]*)>.*?<\/a *>/ig;
|
||||
if (g = find_a.exec(f[1])) {
|
||||
var find_href = /href=[\"']([^\"']*)[\"']/ig;
|
||||
var m2 = find_href.exec(g[1]);
|
||||
if (m2[1]) {
|
||||
tof.push(f[0]);
|
||||
tor.push("[EMBED]" + m2[1] + "[/EMBED]");
|
||||
}
|
||||
}
|
||||
}
|
||||
for (var i = 0; i < tof.length; i++) match = match.replace(tof[i], tor[i]);
|
||||
|
||||
return match;
|
||||
}
|
||||
if (s.indexOf('class="oembed')>=0){
|
||||
//alert("request oembed html2bbcode");
|
||||
s = _h2b_cb(s);
|
||||
}
|
||||
|
||||
/* /oembed */
|
||||
|
||||
|
||||
// example: <strong> to [b]
|
||||
rep(/<a class=\"bookmark\" href=\"(.*?)\".*?>(.*?)<\/a>/gi,"[bookmark=$1]$2[/bookmark]");
|
||||
rep(/<a.*?href=\"(.*?)\".*?>(.*?)<\/a>/gi,"[url=$1]$2[/url]");
|
||||
rep(/<span style=\"font-size:(.*?);\">(.*?)<\/span>/gi,"[size=$1]$2[/size]");
|
||||
rep(/<span style=\"color:(.*?);\">(.*?)<\/span>/gi,"[color=$1]$2[/color]");
|
||||
rep(/<font>(.*?)<\/font>/gi,"$1");
|
||||
rep(/<img.*?width=\"(.*?)\".*?height=\"(.*?)\".*?src=\"(.*?)\".*?\/>/gi,"[img=$1x$2]$3[/img]");
|
||||
rep(/<img.*?height=\"(.*?)\".*?width=\"(.*?)\".*?src=\"(.*?)\".*?\/>/gi,"[img=$2x$1]$3[/img]");
|
||||
rep(/<img.*?src=\"(.*?)\".*?height=\"(.*?)\".*?width=\"(.*?)\".*?\/>/gi,"[img=$3x$2]$1[/img]");
|
||||
rep(/<img.*?src=\"(.*?)\".*?width=\"(.*?)\".*?height=\"(.*?)\".*?\/>/gi,"[img=$2x$3]$1[/img]");
|
||||
rep(/<img.*?src=\"(.*?)\".*?\/>/gi,"[img]$1[/img]");
|
||||
|
||||
rep(/<ul class=\"listbullet\" style=\"list-style-type\: circle\;\">(.*?)<\/ul>/gi,"[list]$1[/list]");
|
||||
rep(/<ul class=\"listnone\" style=\"list-style-type\: none\;\">(.*?)<\/ul>/gi,"[list=]$1[/list]");
|
||||
rep(/<ul class=\"listdecimal\" style=\"list-style-type\: decimal\;\">(.*?)<\/ul>/gi,"[list=1]$1[/list]");
|
||||
rep(/<ul class=\"listlowerroman\" style=\"list-style-type\: lower-roman\;\">(.*?)<\/ul>/gi,"[list=i]$1[/list]");
|
||||
rep(/<ul class=\"listupperroman\" style=\"list-style-type\: upper-roman\;\">(.*?)<\/ul>/gi,"[list=I]$1[/list]");
|
||||
rep(/<ul class=\"listloweralpha\" style=\"list-style-type\: lower-alpha\;\">(.*?)<\/ul>/gi,"[list=a]$1[/list]");
|
||||
rep(/<ul class=\"listupperalpha\" style=\"list-style-type\: upper-alpha\;\">(.*?)<\/ul>/gi,"[list=A]$1[/list]");
|
||||
rep(/<li>(.*?)<\/li>/gi,'[li]$1[/li]');
|
||||
|
||||
rep(/<code>(.*?)<\/code>/gi,"[code]$1[/code]");
|
||||
rep(/<\/(strong|b)>/gi,"[/b]");
|
||||
rep(/<(strong|b)>/gi,"[b]");
|
||||
rep(/<\/(em|i)>/gi,"[/i]");
|
||||
rep(/<(em|i)>/gi,"[i]");
|
||||
rep(/<\/u>/gi,"[/u]");
|
||||
rep(/<span style=\"text-decoration: ?underline;\">(.*?)<\/span>/gi,"[u]$1[/u]");
|
||||
rep(/<u>/gi,"[u]");
|
||||
rep(/<blockquote[^>]*>/gi,"[quote]");
|
||||
rep(/<\/blockquote>/gi,"[/quote]");
|
||||
rep(/<hr \/>/gi,"[hr]");
|
||||
rep(/<br \/>/gi,"\n\n");
|
||||
rep(/<br\/>/gi,"\n\n");
|
||||
rep(/<br>/gi,"\n");
|
||||
rep(/<p>/gi,"");
|
||||
rep(/<\/p>/gi,"\n");
|
||||
rep(/ /gi," ");
|
||||
rep(/"/gi,"\"");
|
||||
rep(/</gi,"<");
|
||||
rep(/>/gi,">");
|
||||
rep(/&/gi,"&");
|
||||
|
||||
return s;
|
||||
},
|
||||
|
||||
// BBCode -> HTML from DFRN dialect
|
||||
_dfrn_bbcode2html : function(s) {
|
||||
s = tinymce.trim(s);
|
||||
|
||||
|
||||
function rep(re, str) {
|
||||
|
||||
//modify code to keep stuff intact within [code][/code] blocks
|
||||
//Waitman Gobble NO WARRANTY
|
||||
|
||||
|
||||
var o = new Array();
|
||||
var x = s.split("[code]");
|
||||
var i = 0;
|
||||
|
||||
var si = "";
|
||||
si = x.shift();
|
||||
si = si.replace(re,str);
|
||||
o.push(si);
|
||||
|
||||
for (i = 0; i < x.length; i++) {
|
||||
var no = new Array();
|
||||
var j = x.shift();
|
||||
var g = j.split("[/code]");
|
||||
no.push(g.shift());
|
||||
si = g.shift();
|
||||
si = si.replace(re,str);
|
||||
no.push(si);
|
||||
o.push(no.join("[/code]"));
|
||||
}
|
||||
|
||||
s = o.join("[code]");
|
||||
|
||||
};
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
// example: [b] to <strong>
|
||||
rep(/\n/gi,"<br />");
|
||||
rep(/\[b\]/gi,"<strong>");
|
||||
rep(/\[\/b\]/gi,"</strong>");
|
||||
rep(/\[i\]/gi,"<em>");
|
||||
rep(/\[\/i\]/gi,"</em>");
|
||||
rep(/\[u\]/gi,"<u>");
|
||||
rep(/\[\/u\]/gi,"</u>");
|
||||
rep(/\[hr\]/gi,"<hr />");
|
||||
rep(/\[bookmark=([^\]]+)\](.*?)\[\/bookmark\]/gi,"<a class=\"bookmark\" href=\"$1\">$2</a>");
|
||||
rep(/\[url=([^\]]+)\](.*?)\[\/url\]/gi,"<a href=\"$1\">$2</a>");
|
||||
rep(/\[url\](.*?)\[\/url\]/gi,"<a href=\"$1\">$1</a>");
|
||||
rep(/\[img=(.*?)x(.*?)\](.*?)\[\/img\]/gi,"<img width=\"$1\" height=\"$2\" src=\"$3\" />");
|
||||
rep(/\[img\](.*?)\[\/img\]/gi,"<img src=\"$1\" />");
|
||||
|
||||
rep(/\[list\](.*?)\[\/list\]/gi, '<ul class="listbullet" style="list-style-type: circle;">$1</ul>');
|
||||
rep(/\[list=\](.*?)\[\/list\]/gi, '<ul class="listnone" style="list-style-type: none;">$1</ul>');
|
||||
rep(/\[list=1\](.*?)\[\/list\]/gi, '<ul class="listdecimal" style="list-style-type: decimal;">$1</ul>');
|
||||
rep(/\[list=i\](.*?)\[\/list\]/gi,'<ul class="listlowerroman" style="list-style-type: lower-roman;">$1</ul>');
|
||||
rep(/\[list=I\](.*?)\[\/list\]/gi, '<ul class="listupperroman" style="list-style-type: upper-roman;">$1</ul>');
|
||||
rep(/\[list=a\](.*?)\[\/list\]/gi, '<ul class="listloweralpha" style="list-style-type: lower-alpha;">$1</ul>');
|
||||
rep(/\[list=A\](.*?)\[\/list\]/gi, '<ul class="listupperalpha" style="list-style-type: upper-alpha;">$1</ul>');
|
||||
rep(/\[li\](.*?)\[\/li\]/gi, '<li>$1</li>');
|
||||
rep(/\[color=(.*?)\](.*?)\[\/color\]/gi,"<span style=\"color: $1;\">$2</span>");
|
||||
rep(/\[size=(.*?)\](.*?)\[\/size\]/gi,"<span style=\"font-size: $1;\">$2</span>");
|
||||
rep(/\[code\](.*?)\[\/code\]/gi,"<code>$1</code>");
|
||||
rep(/\[quote.*?\](.*?)\[\/quote\]/gi,"<blockquote>$1</blockquote>");
|
||||
|
||||
/* oembed */
|
||||
function _b2h_cb(match, url) {
|
||||
url = bin2hex(url);
|
||||
function s_b2h(data) {
|
||||
match = data;
|
||||
}
|
||||
$.ajax({
|
||||
url: 'oembed/b2h?url=' + url,
|
||||
async: false,
|
||||
success: s_b2h,
|
||||
dataType: 'html'
|
||||
});
|
||||
return match;
|
||||
}
|
||||
s = s.replace(/\[embed\](.*?)\[\/embed\]/gi, _b2h_cb);
|
||||
|
||||
/* /oembed */
|
||||
|
||||
return s;
|
||||
}
|
||||
});
|
||||
|
||||
// Register plugin
|
||||
tinymce.PluginManager.add('bbcode', tinymce.plugins.BBCodePlugin);
|
||||
})();
|
||||
BIN
library/mcefixes/themes.advanced.img.icons.gif
Executable file
|
After Width: | Height: | Size: 12 KiB |
117
library/mcefixes/themes.advanced.skins.default.dialog.css
Executable file
|
|
@ -0,0 +1,117 @@
|
|||
/* Generic */
|
||||
body {
|
||||
font-family:Verdana, Arial, Helvetica, sans-serif; font-size:11px;
|
||||
scrollbar-3dlight-color:#F0F0EE;
|
||||
scrollbar-arrow-color:#676662;
|
||||
scrollbar-base-color:#F0F0EE;
|
||||
scrollbar-darkshadow-color:#DDDDDD;
|
||||
scrollbar-face-color:#E0E0DD;
|
||||
scrollbar-highlight-color:#F0F0EE;
|
||||
scrollbar-shadow-color:#F0F0EE;
|
||||
scrollbar-track-color:#F5F5F5;
|
||||
background:#F0F0EE;
|
||||
padding:0;
|
||||
margin:8px 8px 0 8px;
|
||||
}
|
||||
|
||||
html {background:#F0F0EE;}
|
||||
td {font-family:Verdana, Arial, Helvetica, sans-serif; font-size:10px;}
|
||||
textarea {resize:none;outline:none;}
|
||||
a:link, a:visited {color:black;}
|
||||
a:hover {color:#2B6FB6;}
|
||||
.nowrap {white-space: nowrap}
|
||||
|
||||
/* Forms */
|
||||
fieldset {margin:0; padding:4px; border:1px solid #919B9C; font-family:Verdana, Arial; font-size:10px;}
|
||||
legend {color:#2B6FB6; font-weight:bold;}
|
||||
label.msg {display:none;}
|
||||
label.invalid {color:#EE0000; display:inline;}
|
||||
input.invalid {border:1px solid #EE0000;}
|
||||
input {background:#FFF; border:1px solid #CCC;}
|
||||
input, select, textarea {font-family:Verdana, Arial, Helvetica, sans-serif; font-size:10px;}
|
||||
input, select, textarea {border:1px solid #808080;}
|
||||
input.radio {border:1px none #000000; background:transparent; vertical-align:middle;}
|
||||
input.checkbox {border:1px none #000000; background:transparent; vertical-align:middle;}
|
||||
.input_noborder {border:0;}
|
||||
|
||||
/* Buttons */
|
||||
#insert, #cancel, input.button, .updateButton {
|
||||
border:0; margin:0; padding:0;
|
||||
font-weight:bold;
|
||||
width:94px; height:26px;
|
||||
background:url(img/buttons.png) 0 -26px;
|
||||
cursor:pointer;
|
||||
padding-bottom:2px;
|
||||
float:left;
|
||||
}
|
||||
|
||||
#insert {background:url(img/buttons.png) 0 -52px}
|
||||
#cancel {background:url(img/buttons.png) 0 0; float:right}
|
||||
|
||||
/* Browse */
|
||||
a.pickcolor, a.browse {text-decoration:none}
|
||||
a.browse span {display:block; width:20px; height:18px; background:url(../../img/icons.gif) -860px 0; border:1px solid #FFF; margin-left:1px;}
|
||||
.mceOldBoxModel a.browse span {width:22px; height:20px;}
|
||||
a.browse:hover span {border:1px solid #0A246A; background-color:#B2BBD0;}
|
||||
a.browse span.disabled {border:1px solid white; opacity:0.3; -ms-filter:'alpha(opacity=30)'; filter:alpha(opacity=30)}
|
||||
a.browse:hover span.disabled {border:1px solid white; background-color:transparent;}
|
||||
a.pickcolor span {display:block; width:20px; height:16px; background:url(../../img/icons.gif) -840px 0; margin-left:2px;}
|
||||
.mceOldBoxModel a.pickcolor span {width:21px; height:17px;}
|
||||
a.pickcolor:hover span {background-color:#B2BBD0;}
|
||||
a.pickcolor:hover span.disabled {}
|
||||
|
||||
/* Charmap */
|
||||
table.charmap {border:1px solid #AAA; text-align:center}
|
||||
td.charmap, #charmap a {width:18px; height:18px; color:#000; border:1px solid #AAA; text-align:center; font-size:12px; vertical-align:middle; line-height: 18px;}
|
||||
#charmap a {display:block; color:#000; text-decoration:none; border:0}
|
||||
#charmap a:hover {background:#CCC;color:#2B6FB6}
|
||||
#charmap #codeN {font-size:10px; font-family:Arial,Helvetica,sans-serif; text-align:center}
|
||||
#charmap #codeV {font-size:40px; height:80px; border:1px solid #AAA; text-align:center}
|
||||
|
||||
/* Source */
|
||||
.wordWrapCode {vertical-align:middle; border:1px none #000000; background:transparent;}
|
||||
.mceActionPanel {margin-top:5px;}
|
||||
|
||||
/* Tabs classes */
|
||||
.tabs {width:100%; height:18px; line-height:normal; background:url(img/tabs.gif) repeat-x 0 -72px;}
|
||||
.tabs ul {margin:0; padding:0; list-style:none;}
|
||||
.tabs li {float:left; background:url(img/tabs.gif) no-repeat 0 0; margin:0 2px 0 0; padding:0 0 0 10px; line-height:17px; height:18px; display:block;}
|
||||
.tabs li.current {background:url(img/tabs.gif) no-repeat 0 -18px; margin-right:2px;}
|
||||
.tabs span {float:left; display:block; background:url(img/tabs.gif) no-repeat right -36px; padding:0px 10px 0 0;}
|
||||
.tabs .current span {background:url(img/tabs.gif) no-repeat right -54px;}
|
||||
.tabs a {text-decoration:none; font-family:Verdana, Arial; font-size:10px;}
|
||||
.tabs a:link, .tabs a:visited, .tabs a:hover {color:black;}
|
||||
|
||||
/* Panels */
|
||||
.panel_wrapper div.panel {display:none;}
|
||||
.panel_wrapper div.current {display:block; width:100%; height:300px; overflow:visible;}
|
||||
.panel_wrapper {border:1px solid #919B9C; border-top:0px; padding:10px; padding-top:5px; clear:both; background:white;}
|
||||
|
||||
/* Columns */
|
||||
.column {float:left;}
|
||||
.properties {width:100%;}
|
||||
.properties .column1 {}
|
||||
.properties .column2 {text-align:left;}
|
||||
|
||||
/* Titles */
|
||||
h1, h2, h3, h4 {color:#2B6FB6; margin:0; padding:0; padding-top:5px;}
|
||||
h3 {font-size:14px;}
|
||||
.title {font-size:12px; font-weight:bold; color:#2B6FB6;}
|
||||
|
||||
/* Dialog specific */
|
||||
#link .panel_wrapper, #link div.current {height:125px;}
|
||||
#image .panel_wrapper, #image div.current {height:200px;}
|
||||
#plugintable thead {font-weight:bold; background:#DDD;}
|
||||
#plugintable, #about #plugintable td {border:1px solid #919B9C;}
|
||||
#plugintable {width:96%; margin-top:10px;}
|
||||
#pluginscontainer {height:290px; overflow:auto;}
|
||||
#colorpicker #preview {float:right; width:50px; height:14px;line-height:1px; border:1px solid black; margin-left:5px;}
|
||||
#colorpicker #colors {float:left; border:1px solid gray; cursor:crosshair;}
|
||||
#colorpicker #light {border:1px solid gray; margin-left:5px; float:left;width:15px; height:150px; cursor:crosshair;}
|
||||
#colorpicker #light div {overflow:hidden;}
|
||||
#colorpicker #previewblock {float:right; padding-left:10px; height:20px;}
|
||||
#colorpicker .panel_wrapper div.current {height:175px;}
|
||||
#colorpicker #namedcolors {width:150px;}
|
||||
#colorpicker #namedcolors a {display:block; float:left; width:10px; height:10px; margin:1px 1px 0 0; overflow:hidden;}
|
||||
#colorpicker #colornamecontainer {margin-top:5px;}
|
||||
#colorpicker #picker_panel fieldset {margin:auto;width:325px;}
|
||||
213
library/mcefixes/themes.advanced.skins.default.ui.css
Executable file
|
|
@ -0,0 +1,213 @@
|
|||
/* Reset */
|
||||
.defaultSkin table, .defaultSkin tbody, .defaultSkin a, .defaultSkin img, .defaultSkin tr, .defaultSkin div, .defaultSkin td, .defaultSkin iframe, .defaultSkin span, .defaultSkin *, .defaultSkin .mceText {border:0; margin:0; padding:0; background:transparent; white-space:nowrap; text-decoration:none; font-weight:normal; cursor:default; color:#000; vertical-align:baseline; width:auto; border-collapse:separate; text-align:left}
|
||||
.defaultSkin a:hover, .defaultSkin a:link, .defaultSkin a:visited, .defaultSkin a:active {text-decoration:none; font-weight:normal; cursor:default; color:#000}
|
||||
.defaultSkin table td {vertical-align:middle}
|
||||
|
||||
/* Containers */
|
||||
.defaultSkin table {direction:ltr; background:#FFF}
|
||||
.defaultSkin iframe {display:block; background:#FFF}
|
||||
.defaultSkin .mceToolbar {height:26px}
|
||||
.defaultSkin .mceLeft {text-align:left}
|
||||
.defaultSkin .mceRight {text-align:right}
|
||||
|
||||
/* External */
|
||||
.defaultSkin .mceExternalToolbar {position:absolute; border:2px solid #CCC; border-bottom:0; display:none;}
|
||||
.defaultSkin .mceExternalToolbar td.mceToolbar {padding-right:13px;}
|
||||
.defaultSkin .mceExternalClose {position:absolute; top:3px; right:3px; width:7px; height:7px; background:url(../../img/icons.gif) -820px 0}
|
||||
|
||||
/* Layout */
|
||||
.defaultSkin table.mceLayout {border:0; border-left:1px solid #CCC; border-right:1px solid #CCC}
|
||||
.defaultSkin table.mceLayout tr.mceFirst td {border-top:1px solid #CCC}
|
||||
.defaultSkin table.mceLayout tr.mceLast td {border-bottom:1px solid #CCC}
|
||||
.defaultSkin table.mceToolbar, .defaultSkin tr.mceFirst .mceToolbar tr td, .defaultSkin tr.mceLast .mceToolbar tr td {border:0; margin:0; padding:0;}
|
||||
.defaultSkin td.mceToolbar {padding-top:1px; vertical-align:top}
|
||||
.defaultSkin .mceIframeContainer { /*border-top:1px solid #CCC; border-bottom:1px solid #CCC */ border: none;}
|
||||
.defaultSkin .mceStatusbar {font-family:'MS Sans Serif',sans-serif,Verdana,Arial; font-size:9pt; line-height:16px; overflow:visible; color:#000; display:block; height:20px}
|
||||
.defaultSkin .mceStatusbar div {float:left; margin:2px}
|
||||
.defaultSkin .mceStatusbar a.mceResize {display:block; float:right; background:url(../../img/icons.gif) -800px 0; width:20px; height:20px; cursor:se-resize; outline:0}
|
||||
.defaultSkin .mceStatusbar a:hover {text-decoration:underline}
|
||||
.defaultSkin table.mceToolbar {margin-left:3px}
|
||||
.defaultSkin span.mceIcon, .defaultSkin img.mceIcon {display:block; width:20px; height:20px}
|
||||
.defaultSkin .mceIcon {background:url(../../img/icons.gif) no-repeat 20px 20px}
|
||||
.defaultSkin td.mceCenter {text-align:center;}
|
||||
.defaultSkin td.mceCenter table {margin:0 auto; text-align:left;}
|
||||
.defaultSkin td.mceRight table {margin:0 0 0 auto;}
|
||||
|
||||
/* Button */
|
||||
.defaultSkin .mceButton {display:block; border:1px solid #F0F0EE; width:20px; height:20px; margin-right:10px}
|
||||
.defaultSkin a.mceButtonEnabled:hover {border:1px solid #0A246A; background-color:#B2BBD0}
|
||||
.defaultSkin a.mceButtonActive, .defaultSkin a.mceButtonSelected {border:1px solid #0A246A; background-color:#C2CBE0}
|
||||
.defaultSkin .mceButtonDisabled .mceIcon {opacity:0.3; -ms-filter:'alpha(opacity=30)'; filter:alpha(opacity=30)}
|
||||
.defaultSkin .mceButtonLabeled {width:auto}
|
||||
.defaultSkin .mceButtonLabeled span.mceIcon {float:left}
|
||||
.defaultSkin span.mceButtonLabel {display:block; font-size:10px; padding:4px 6px 0 22px; font-family:Tahoma,Verdana,Arial,Helvetica}
|
||||
.defaultSkin .mceButtonDisabled .mceButtonLabel {color:#888}
|
||||
|
||||
/* Separator */
|
||||
.defaultSkin .mceSeparator {display:block; background:url(../../img/icons.gif) -180px 0; width:2px; height:20px; margin:2px 2px 0 4px}
|
||||
|
||||
/* ListBox */
|
||||
.defaultSkin .mceListBox, .defaultSkin .mceListBox a {display:block}
|
||||
.defaultSkin .mceListBox .mceText {padding-left:4px; width:70px; text-align:left; border:1px solid #CCC; border-right:0; background:#FFF; font-family:Tahoma,Verdana,Arial,Helvetica; font-size:11px; height:20px; line-height:20px; overflow:hidden}
|
||||
.defaultSkin .mceListBox .mceOpen {width:9px; height:20px; background:url(../../img/icons.gif) -741px 0; margin-right:2px; border:1px solid #CCC;}
|
||||
.defaultSkin table.mceListBoxEnabled:hover .mceText, .defaultSkin .mceListBoxHover .mceText, .defaultSkin .mceListBoxSelected .mceText {border:1px solid #A2ABC0; border-right:0; background:#FFF}
|
||||
.defaultSkin table.mceListBoxEnabled:hover .mceOpen, .defaultSkin .mceListBoxHover .mceOpen, .defaultSkin .mceListBoxSelected .mceOpen {background-color:#FFF; border:1px solid #A2ABC0}
|
||||
.defaultSkin .mceListBoxDisabled a.mceText {color:gray; background-color:transparent;}
|
||||
.defaultSkin .mceListBoxMenu {overflow:auto; overflow-x:hidden}
|
||||
.defaultSkin .mceOldBoxModel .mceListBox .mceText {height:22px}
|
||||
.defaultSkin .mceOldBoxModel .mceListBox .mceOpen {width:11px; height:22px;}
|
||||
.defaultSkin select.mceNativeListBox {font-family:'MS Sans Serif',sans-serif,Verdana,Arial; font-size:7pt; background:#F0F0EE; border:1px solid gray; margin-right:2px;}
|
||||
|
||||
/* SplitButton */
|
||||
.defaultSkin .mceSplitButton {width:32px; height:20px; direction:ltr}
|
||||
.defaultSkin .mceSplitButton a, .defaultSkin .mceSplitButton span {height:20px; display:block}
|
||||
.defaultSkin .mceSplitButton a.mceAction {width:20px; border:1px solid #F0F0EE; border-right:0;}
|
||||
.defaultSkin .mceSplitButton span.mceAction {width:20px; background-image:url(../../img/icons.gif);}
|
||||
.defaultSkin .mceSplitButton a.mceOpen {width:9px; background:url(../../img/icons.gif) -741px 0; border:1px solid #F0F0EE;}
|
||||
.defaultSkin .mceSplitButton span.mceOpen {display:none}
|
||||
.defaultSkin table.mceSplitButtonEnabled:hover a.mceAction, .defaultSkin .mceSplitButtonHover a.mceAction, .defaultSkin .mceSplitButtonSelected a.mceAction {border:1px solid #0A246A; border-right:0; background-color:#B2BBD0}
|
||||
.defaultSkin table.mceSplitButtonEnabled:hover a.mceOpen, .defaultSkin .mceSplitButtonHover a.mceOpen, .defaultSkin .mceSplitButtonSelected a.mceOpen {background-color:#B2BBD0; border:1px solid #0A246A;}
|
||||
.defaultSkin .mceSplitButtonDisabled .mceAction, .defaultSkin .mceSplitButtonDisabled a.mceOpen {opacity:0.3; -ms-filter:'alpha(opacity=30)'; filter:alpha(opacity=30)}
|
||||
.defaultSkin .mceSplitButtonActive a.mceAction {border:1px solid #0A246A; background-color:#C2CBE0}
|
||||
.defaultSkin .mceSplitButtonActive a.mceOpen {border-left:0;}
|
||||
|
||||
/* ColorSplitButton */
|
||||
.defaultSkin div.mceColorSplitMenu table {background:#FFF; border:1px solid gray}
|
||||
.defaultSkin .mceColorSplitMenu td {padding:2px}
|
||||
.defaultSkin .mceColorSplitMenu a {display:block; width:9px; height:9px; overflow:hidden; border:1px solid #808080}
|
||||
.defaultSkin .mceColorSplitMenu td.mceMoreColors {padding:1px 3px 1px 1px}
|
||||
.defaultSkin .mceColorSplitMenu a.mceMoreColors {width:100%; height:auto; text-align:center; font-family:Tahoma,Verdana,Arial,Helvetica; font-size:11px; line-height:20px; border:1px solid #FFF}
|
||||
.defaultSkin .mceColorSplitMenu a.mceMoreColors:hover {border:1px solid #0A246A; background-color:#B6BDD2}
|
||||
.defaultSkin a.mceMoreColors:hover {border:1px solid #0A246A}
|
||||
.defaultSkin .mceColorPreview {margin-left:2px; width:16px; height:4px; overflow:hidden; background:#9a9b9a}
|
||||
.defaultSkin .mce_forecolor span.mceAction, .defaultSkin .mce_backcolor span.mceAction {overflow:hidden; height:16px}
|
||||
|
||||
/* Menu */
|
||||
.defaultSkin .mceMenu {position:absolute; left:0; top:0; z-index:1000; border:1px solid #D4D0C8}
|
||||
.defaultSkin .mceNoIcons span.mceIcon {width:0;}
|
||||
.defaultSkin .mceNoIcons a .mceText {padding-left:10px}
|
||||
.defaultSkin .mceMenu table {background:#FFF}
|
||||
.defaultSkin .mceMenu a, .defaultSkin .mceMenu span, .defaultSkin .mceMenu {display:block}
|
||||
.defaultSkin .mceMenu td {height:20px}
|
||||
.defaultSkin .mceMenu a {position:relative;padding:3px 0 4px 0}
|
||||
.defaultSkin .mceMenu .mceText {position:relative; display:block; font-family:Tahoma,Verdana,Arial,Helvetica; color:#000; cursor:default; margin:0; padding:0 25px 0 25px; display:block}
|
||||
.defaultSkin .mceMenu span.mceText, .defaultSkin .mceMenu .mcePreview {font-size:11px}
|
||||
.defaultSkin .mceMenu pre.mceText {font-family:Monospace}
|
||||
.defaultSkin .mceMenu .mceIcon {position:absolute; top:0; left:0; width:22px;}
|
||||
.defaultSkin .mceMenu .mceMenuItemEnabled a:hover, .defaultSkin .mceMenu .mceMenuItemActive {background-color:#dbecf3}
|
||||
.defaultSkin td.mceMenuItemSeparator {background:#DDD; height:1px}
|
||||
.defaultSkin .mceMenuItemTitle a {border:0; background:#EEE; border-bottom:1px solid #DDD}
|
||||
.defaultSkin .mceMenuItemTitle span.mceText {color:#000; font-weight:bold; padding-left:4px}
|
||||
.defaultSkin .mceMenuItemDisabled .mceText {color:#888}
|
||||
.defaultSkin .mceMenuItemSelected .mceIcon {background:url(img/menu_check.gif)}
|
||||
.defaultSkin .mceNoIcons .mceMenuItemSelected a {background:url(img/menu_arrow.gif) no-repeat -6px center}
|
||||
.defaultSkin .mceMenu span.mceMenuLine {display:none}
|
||||
.defaultSkin .mceMenuItemSub a {background:url(img/menu_arrow.gif) no-repeat top right;}
|
||||
|
||||
/* Progress,Resize */
|
||||
.defaultSkin .mceBlocker {position:absolute; left:0; top:0; z-index:1000; opacity:0.5; -ms-filter:'alpha(opacity=50)'; filter:alpha(opacity=50); background:#FFF}
|
||||
.defaultSkin .mceProgress {position:absolute; left:0; top:0; z-index:1001; background:url(img/progress.gif) no-repeat; width:32px; height:32px; margin:-16px 0 0 -16px}
|
||||
|
||||
/* Formats */
|
||||
.defaultSkin .mce_formatPreview a {font-size:10px}
|
||||
.defaultSkin .mce_p span.mceText {}
|
||||
.defaultSkin .mce_address span.mceText {font-style:italic}
|
||||
.defaultSkin .mce_pre span.mceText {font-family:monospace}
|
||||
.defaultSkin .mce_h1 span.mceText {font-weight:bolder; font-size: 2em}
|
||||
.defaultSkin .mce_h2 span.mceText {font-weight:bolder; font-size: 1.5em}
|
||||
.defaultSkin .mce_h3 span.mceText {font-weight:bolder; font-size: 1.17em}
|
||||
.defaultSkin .mce_h4 span.mceText {font-weight:bolder; font-size: 1em}
|
||||
.defaultSkin .mce_h5 span.mceText {font-weight:bolder; font-size: .83em}
|
||||
.defaultSkin .mce_h6 span.mceText {font-weight:bolder; font-size: .75em}
|
||||
|
||||
/* Theme */
|
||||
.defaultSkin span.mce_bold {background-position:0 0}
|
||||
.defaultSkin span.mce_italic {background-position:-60px 0}
|
||||
.defaultSkin span.mce_underline {background-position:-140px 0}
|
||||
.defaultSkin span.mce_strikethrough {background-position:-120px 0}
|
||||
.defaultSkin span.mce_undo {background-position:-160px 0}
|
||||
.defaultSkin span.mce_redo {background-position:-100px 0}
|
||||
.defaultSkin span.mce_cleanup {background-position:-40px 0}
|
||||
.defaultSkin span.mce_bullist {background-position:-20px 0}
|
||||
.defaultSkin span.mce_numlist {background-position:-80px 0}
|
||||
.defaultSkin span.mce_justifyleft {background-position:-460px 0}
|
||||
.defaultSkin span.mce_justifyright {background-position:-480px 0}
|
||||
.defaultSkin span.mce_justifycenter {background-position:-420px 0}
|
||||
.defaultSkin span.mce_justifyfull {background-position:-440px 0}
|
||||
.defaultSkin span.mce_anchor {background-position:-200px 0}
|
||||
.defaultSkin span.mce_indent {background-position:-400px 0}
|
||||
.defaultSkin span.mce_outdent {background-position:-540px 0}
|
||||
.defaultSkin span.mce_link {background-position:-500px 0}
|
||||
.defaultSkin span.mce_unlink {background-position:-640px 0}
|
||||
.defaultSkin span.mce_sub {background-position:-600px 0}
|
||||
.defaultSkin span.mce_sup {background-position:-620px 0}
|
||||
.defaultSkin span.mce_removeformat {background-position:-580px 0}
|
||||
.defaultSkin span.mce_newdocument {background-position:-520px 0}
|
||||
.defaultSkin span.mce_image {background-position:-380px 0}
|
||||
.defaultSkin span.mce_help {background-position:-340px 0}
|
||||
.defaultSkin span.mce_code {background-position:-260px 0}
|
||||
.defaultSkin span.mce_hr {background-position:-360px 0}
|
||||
.defaultSkin span.mce_visualaid {background-position:-660px 0}
|
||||
.defaultSkin span.mce_charmap {background-position:-240px 0}
|
||||
.defaultSkin span.mce_paste {background-position:-560px 0}
|
||||
.defaultSkin span.mce_copy {background-position:-700px 0}
|
||||
.defaultSkin span.mce_cut {background-position:-680px 0}
|
||||
.defaultSkin span.mce_blockquote {background-position:-220px 0}
|
||||
.defaultSkin .mce_forecolor span.mceAction {background-position:-720px 0}
|
||||
.defaultSkin .mce_backcolor span.mceAction {background-position:-760px 0}
|
||||
.defaultSkin span.mce_forecolorpicker {background-position:-720px 0}
|
||||
.defaultSkin span.mce_backcolorpicker {background-position:-760px 0}
|
||||
|
||||
/* Plugins */
|
||||
.defaultSkin span.mce_advhr {background-position:-0px -20px}
|
||||
.defaultSkin span.mce_ltr {background-position:-20px -20px}
|
||||
.defaultSkin span.mce_rtl {background-position:-40px -20px}
|
||||
.defaultSkin span.mce_emotions {background-position:-60px -20px}
|
||||
.defaultSkin span.mce_fullpage {background-position:-80px -20px}
|
||||
.defaultSkin span.mce_fullscreen {background-position:-100px -20px}
|
||||
.defaultSkin span.mce_iespell {background-position:-120px -20px}
|
||||
.defaultSkin span.mce_insertdate {background-position:-140px -20px}
|
||||
.defaultSkin span.mce_inserttime {background-position:-160px -20px}
|
||||
.defaultSkin span.mce_absolute {background-position:-180px -20px}
|
||||
.defaultSkin span.mce_backward {background-position:-200px -20px}
|
||||
.defaultSkin span.mce_forward {background-position:-220px -20px}
|
||||
.defaultSkin span.mce_insert_layer {background-position:-240px -20px}
|
||||
.defaultSkin span.mce_insertlayer {background-position:-260px -20px}
|
||||
.defaultSkin span.mce_movebackward {background-position:-280px -20px}
|
||||
.defaultSkin span.mce_moveforward {background-position:-300px -20px}
|
||||
.defaultSkin span.mce_media {background-position:-320px -20px}
|
||||
.defaultSkin span.mce_nonbreaking {background-position:-340px -20px}
|
||||
.defaultSkin span.mce_pastetext {background-position:-360px -20px}
|
||||
.defaultSkin span.mce_pasteword {background-position:-380px -20px}
|
||||
.defaultSkin span.mce_selectall {background-position:-400px -20px}
|
||||
.defaultSkin span.mce_preview {background-position:-420px -20px}
|
||||
.defaultSkin span.mce_print {background-position:-440px -20px}
|
||||
.defaultSkin span.mce_cancel {background-position:-460px -20px}
|
||||
.defaultSkin span.mce_save {background-position:-480px -20px}
|
||||
.defaultSkin span.mce_replace {background-position:-500px -20px}
|
||||
.defaultSkin span.mce_search {background-position:-520px -20px}
|
||||
.defaultSkin span.mce_styleprops {background-position:-560px -20px}
|
||||
.defaultSkin span.mce_table {background-position:-580px -20px}
|
||||
.defaultSkin span.mce_cell_props {background-position:-600px -20px}
|
||||
.defaultSkin span.mce_delete_table {background-position:-620px -20px}
|
||||
.defaultSkin span.mce_delete_col {background-position:-640px -20px}
|
||||
.defaultSkin span.mce_delete_row {background-position:-660px -20px}
|
||||
.defaultSkin span.mce_col_after {background-position:-680px -20px}
|
||||
.defaultSkin span.mce_col_before {background-position:-700px -20px}
|
||||
.defaultSkin span.mce_row_after {background-position:-720px -20px}
|
||||
.defaultSkin span.mce_row_before {background-position:-740px -20px}
|
||||
.defaultSkin span.mce_merge_cells {background-position:-760px -20px}
|
||||
.defaultSkin span.mce_table_props {background-position:-980px -20px}
|
||||
.defaultSkin span.mce_row_props {background-position:-780px -20px}
|
||||
.defaultSkin span.mce_split_cells {background-position:-800px -20px}
|
||||
.defaultSkin span.mce_template {background-position:-820px -20px}
|
||||
.defaultSkin span.mce_visualchars {background-position:-840px -20px}
|
||||
.defaultSkin span.mce_abbr {background-position:-860px -20px}
|
||||
.defaultSkin span.mce_acronym {background-position:-880px -20px}
|
||||
.defaultSkin span.mce_attribs {background-position:-900px -20px}
|
||||
.defaultSkin span.mce_cite {background-position:-920px -20px}
|
||||
.defaultSkin span.mce_del {background-position:-940px -20px}
|
||||
.defaultSkin span.mce_ins {background-position:-960px -20px}
|
||||
.defaultSkin span.mce_pagebreak {background-position:0 -40px}
|
||||
.defaultSkin span.mce_restoredraft {background-position:-20px -40px}
|
||||
.defaultSkin span.mce_spellchecker {background-position:-540px -20px}
|
||||
453
library/tinymce/changelog.txt
Executable file → Normal file
|
|
@ -1,3 +1,456 @@
|
|||
Version 3.5b2 (2012-03-15)
|
||||
Rewrote the enter key logic to normalize browser behavior.
|
||||
Fixed so enter within PRE elements produces a BR and shift+enter breaks/end the PRE. Can be disabled using the br_in_pre option.
|
||||
Fixed bug where the selection wouldn't be correct after applying formatting and having the caret at the end of the new format node.
|
||||
Fixed bug where the noneditable plugin would process contents on raw input calls for example on undo/redo calls.
|
||||
Fixed bug where WebKit could produce an exception when a bookmark was requested when there wasn't a proper selection.
|
||||
Fixed bug where WebKit would fail to open the image dialog since it would be returning false for a class name instead of a string.
|
||||
Fixed so alignment and indentation works properly when forced_root_blocks is set to false. It will produce a DIV by default.
|
||||
Version 3.5b1 (2012-03-08)
|
||||
Added new event class that is faster and enables support for faking events.
|
||||
Added new self_closing_elements, short_ended_elements, boolean_attributes, non_empty_elements and block_elements options to control the HTML Schema.
|
||||
Added new schema option and support for the HTML5 schema.
|
||||
Added new visualblocks plugin that shows html5 blocks with visual borders.
|
||||
Added new types and selector options to make it easier to create editor instances with different configs.
|
||||
Added new preview of formatting options in various listboxes.
|
||||
Added new preview_styles option that enables control over what gets previewed.
|
||||
Fixed bug where content css would be loaded twice into iframe.
|
||||
Fixed bug where start elements with only whitespace in the attribute part wouldn't be correctly parsed.
|
||||
Fixed bug where the advlink dialog would produce an error about the addSelectAccessibility function not being defined.
|
||||
Fixed bug where the caret would be placed at an incorrect position if span was removed by the invalid_elements setting.
|
||||
Fixed bug where elements inside a white space preserve element like pre didn't inherit the behavior while parsing.
|
||||
Version 3.4.9.x (2012-02-xx)
|
||||
Improved behaviour of backspacing into a table to be consistant across browsers and disable backspace when cursor immediately follows a table.
|
||||
Improved edit CSS style plugin for single and multiple block selection and provide option to apply style to only selected text.
|
||||
Fixed bug in Chrome where moving caret down in table and pasting throws errors.
|
||||
Corrected reference to TinyMCE trim function.
|
||||
Fixed bug where Ignore All in IE did not remove the underline from the selected word.
|
||||
Fixed bug in html source editor word wrap option not wrapping text in Webkit browsers.
|
||||
Fixed bug where it was possible to insert an invalid colour in the color pop-up dialog.
|
||||
Fixed bug in Webkit where if anchor is on last line by itself caret can not be placed after it.
|
||||
Version 3.4.9 (2012-02-23)
|
||||
Added settings to wordcount plugin to configure update rate and checking wordcount on backspace and delete using wordcount_update_rate and wordcount_update_on_delete.
|
||||
Fixed bug in Webkit and IE where deleting empty paragraphs would remove entire editor contents.
|
||||
Fixed bug where pressing enter on end of list item with a heading would create a new item with heading.
|
||||
Fixed edit css style dialog text-decoration none checkbox so it disables other text-decoration options when enabled.
|
||||
Fixed bug in Gecko where undo wasn't added when focus was lost.
|
||||
Fixed bug in Gecko where shift-enter in table cell ending with BR doesn't move caret to new line.
|
||||
Fixed bug where right-click on formatted text in IE selected the entire line.
|
||||
Fixed bug where text ending with space could not be unformatted in IE.
|
||||
Fixed bug where caret formatting would be removed when moving the caret when a selector expression was used.
|
||||
Fixed bug where formatting would be applied to the body element when all contents where selected and format had both inline and selector parts.
|
||||
Fixed bug where the media plugin would throw errors if you had iframe set as an invalid element in config.
|
||||
Fixed bug where the caret would be placed at the top of the document if you inserted a table and undo:ed that operation. Patch contributed by Wesley Walser.
|
||||
Fixed bug where content css files where loaded twice into the iframe.
|
||||
Fixed so elements with comments would be trated as non empty elements. Patch contributed by Arjan Scherpenisse.
|
||||
Version 3.4.8 (2012-02-02)
|
||||
Fixed bug in IE where selected text ending with space cannot be formatted then formatted again to get original text.
|
||||
Fixed bug in IE where images larger than editor area were being deselected when toolbar buttons are clicked.
|
||||
Fixed bug where wrong text align buttons are active when multiple block elements are selected.
|
||||
Fixed bug where selected link not showing in target field of link dialog in some selection cases.
|
||||
Use settings for remove_trailing_br so this can be turned off instead of hard coding the value.
|
||||
Fixed bug in IE where the media plugin displayed null text when some values aren't filled in.
|
||||
Added API method 'onSetAttrib' that fires when the attribute value on a node changes.
|
||||
Fix font size dropdown value not being updated when text already has a font size in the advanced template.
|
||||
Fixed bug in IE where IE doesn't use ARIA attributes properly on options - causing labels to be read out 2 times.
|
||||
Fixed bug where caret cannot be placed after table if table is at end of document in IE.
|
||||
Fixed bug where adding range isn't always successful so we need to check range count otherwise an exception can occur.
|
||||
Added spacebar onclick handler to toolbar buttons to ensure that the accessibility behaviour works correctly.
|
||||
Fixed bug where a stranded bullet point would get created in WebKit.
|
||||
Fixed bug where selecting text in a blockquote and pressing backspace toggles the style.
|
||||
Fixed bug where pressing enter from a heading in IE, the resulting P tag below it shares the style property.
|
||||
Fix white space in between spans from being deleted.
|
||||
Fixed bug where scrollbars where visible in the character map dialog on Gecko.
|
||||
Fixed issue with missing translation for one of the emoticons.
|
||||
Fixed bug where dots in id:s where causing problems. Patch provided by Abhishek Dev.
|
||||
Fixed bug where urls with an at sign in the path wouldn't be parsed correctly. Patch contributed by Jason Grout.
|
||||
Fixed bug where Opera would remove the first character of a inline formatted word if you pressed backspace.
|
||||
Fixed bugs with the autoresize plugin on various browsers and removed the need for the throbber.
|
||||
Fixed performance issue where the contextmenu plugin would try to remove the menu even if it was removed. Patch contributed by mhu.
|
||||
Version 3.4.7 (2011-11-03)
|
||||
Modified the caret formatting behavior to word similar to common desktop wordprocessors like Word or Libre Office.
|
||||
Fixed bug in Webkit - Cursor positioning does not work vertically within a table cell with multiple lines of text.
|
||||
Fixed bug in IE where Inserting a table in IE8 places cursor in the second cell of the first row.
|
||||
Fixed bug in IE where editor in a frame doesn't give focus to the toolbar using ALT-F10.
|
||||
Fix for webkit and gecko so that deleting bullet from start of list outdents inner list items and moves first item into paragraph.
|
||||
Fix new list items in IE8 not displayed on a new line when list contains nested list items.
|
||||
Clear formatting in table cell breaks the cell.
|
||||
Made media type list localisable.
|
||||
Fix out of memory error when using prototype in media dialog.
|
||||
Fixed bug where could not add a space in the middle of a th cell.
|
||||
Fixed bug where adding a bullet between two existing bullets adds an extra one
|
||||
Fixed bug where trying to insert a new entry midway through a bulleted list fails dismally when the next entry is tabbed in.
|
||||
Fixed bug where pressing enter on an empty list item does not outdent properly in FF
|
||||
Fixed bug where adding a heading after a list item in a table cell changes all styles in that cell
|
||||
Fixed bug where hitting enter to exit from a bullet list moves cursor to the top of the page in Firefox.
|
||||
Fixed bug where pressing backspace would not delete HRs in Firefox and IE when next to an empty paragraph.
|
||||
Fixed bug where deleting part of the link text can cause a link with no destination to be saved.
|
||||
Fixed bug where css style border widths wasn't handled correctly in table dialog.
|
||||
Fixed bug where parsing invalid html contents on IE or WebKit could produce an infinite loop.
|
||||
Fixed bug where scripts with custom script types wasn't properly passed though the editor.
|
||||
Fixed issue where some Japanese kanji characters wasn't properly entity encoded when numeric entity mode was enabled.
|
||||
Made emoticons dialog use the keyboard naviation.
|
||||
Added navigation instructions to the symbols dialog.
|
||||
Added ability to set default values for the media plugin.
|
||||
Added new font_size_legacy_values option for converting old font element sizes to span with font-size properties.
|
||||
Fixed bug where the symbols dialog was not accessible.
|
||||
Added quirk for IE ensuring that the body of the document containing tinyMCE has a role="application" for accessibility.
|
||||
Fixed bug where the advanced color picker wasn't working properly on FF 7.
|
||||
Fixed issue where the advanced color picker was producing uppercase hex codes.
|
||||
Fixed bug where IE 8 could throw exceptions if the contents contained resizable content elements.
|
||||
Fixed bug where caret formatting wouldn't be correctly applied to previous sibling on WebKit.
|
||||
Fixed bug where the select boxes for font size/family would loose it's value on WebKit due to recent iOS fixes.
|
||||
Version 3.4.6 (2011-09-29)
|
||||
Fixed bug where list items were being created for empty divs.
|
||||
Added support in Media plugin for audio media using the embed tag
|
||||
Fixed accessibility bugs in WebKit and IE8 where toolbar items were not being read.
|
||||
Added new use_accessible_selects option to ensure accessible list boxes are used in all browsers (custom widget in firefox native on other browsers)
|
||||
Fixed bug where classid attribute was not being checked from embed objects.
|
||||
Fixed bug in jsrobot tests with intermittently failing.
|
||||
Fixed bug where anchors wasn't updated properly if you edited them using IE 8.
|
||||
Fixed bug where input method on WebKit on Mac OS X would fail to initialize when sometimes focusing the editor.
|
||||
Fixed bug where it wasn't possible to select HR elements on WebKit by simply clicking on them.
|
||||
Fixed bug where the media plugin wouldn't work on IE9 when not using the inlinepopups plugin.
|
||||
Fixed bug where hspace,vspace,align and bgcolor would be removed from object elements in the media plugin.
|
||||
Fixed bug where the new youtube format wouldn't be properly parsed by the media plugin.
|
||||
Fixed bug where the style attribute of layers wasn't properly updated on IE and Gecko.
|
||||
Fixed bug where editing contents in a layer would fail on Gecko since contentEditable doesn't inherit properly.
|
||||
Fixed bug where IE 6/7 would produce JS errors when serializing contents containing layers.
|
||||
Version 3.4.5 (2011-09-06)
|
||||
Fixed accessibility bug in WebKit where the right and left arrow keys would update native list boxes.
|
||||
Added new whitespace_elements option to enable users to specify specific elements where the whitespace is preserved.
|
||||
Added new merge_siblings option to formats. This option makes it possible to disable the auto merging of siblings when applying formats.
|
||||
Fixed bug in IE where trailing comma in paste plugin would cause plugin to not run correctly.
|
||||
Fixed bug in WebKit where console messages would be logged when deleting an empty document.
|
||||
Fixed bug in IE8 where caret positioned is on list item instead of paragraph when outdent splits the list
|
||||
Fixed bug with image dialogs not inserting an image if id was omitted from valid_elements.
|
||||
Fixed bug where the selection normalization logic wouldn't properly handle image elements in specific config cases.
|
||||
Fixed bug where the map elements coords attribute would be messed up by IE when serializing the DOM.
|
||||
Fixed bug where IE wouldn't properly handle custom elements when the contents was serialized.
|
||||
Fixed bug where you couldn't move the caret in Gecko if you focused the editor using the API or a UI control.
|
||||
Fixed bug where adjacent links would get merged on IE due to bugs in their link command.
|
||||
Fixed bug where the color split buttons would loose the selection on IE if the editor was placed in a frame/iframe.
|
||||
Fixed bug where floated images in WebKit wouldn't get properly linked.
|
||||
Fixed bug where the fullscreen mode in a separate window wasn't forced into IE9+ standards mode.
|
||||
Fixed bug where pressing enter in an empty editor on WebKit could produce DIV elements instead of P.
|
||||
Fixed bug where spans would get removed incorrectly when merging two blocks on backspace/delete on WebKit.
|
||||
Fixed bug where the editor contents wouldn't be completely removed on backspace/delete on WebKit.
|
||||
Fixed bug where the fullpage plugin wouldn't properly render style elements in the head on IE 6/7.
|
||||
Fixed bug where the nonbreaking_force_tab option in the nonbreaking plugin wouldn't work on Gecko/WebKit.
|
||||
Fixed bug where the isDirty state would become true on non IE browsers if there was an table at the end of the contents.
|
||||
Fixed bug where entities wasn't properly encoded on WebKit when pasting text as plain text.
|
||||
Fixed bug where empty editors would produce an exception of valid_elements didn't include body and forced_root_blocks where disabled.
|
||||
Fixed bug where the fullscreen mode wouldn't retain the header/footer in the fullpage plugin.
|
||||
Fixed issue where the plaintext_mode and plaintext_mode_sticky language keys where swapped.
|
||||
Version 3.4.4 (2011-08-04)
|
||||
Added new html5 audio support. Patch contributed by Ronald M. Clifford.
|
||||
Added mute option for video elements and preload options for video/audio patch contributed by Dmitry Kalinkin.
|
||||
Fixed selection to match visual selection before applying formatting changes.
|
||||
Fixed browser specific bugs in lists for WebKit and IE.
|
||||
Fixed bug where IE would scroll the window if you closed an inline dialog that was larger than the viewport. Patch by Laurence Keijmel.
|
||||
Fixed bug where pasting contents near a span element could remove parts of that span. Patch contributed by Wesley Walser.
|
||||
Fixed bug where formatting change would be lost after pressing enter.
|
||||
Fixed bug in WebKit where deleting across blocks would add extra styles.
|
||||
Fixed bug where moving cursor vertically in tables in WebKit wasn't working.
|
||||
Fixed bug in IE where deleting would cause error in console.
|
||||
Fixed bug where the formatter was not applying formats across list elements.
|
||||
Fixed bug where the wordcount plugin would try and update the wordcount if tinymce had been destroyed.
|
||||
Fixed bug where tabfocus plugin would attempt to focus elements not displayed when their parent element was hidden.
|
||||
Fixed bug where the contentEditable state would sometimes be removed if you deleted contents in Gecko.
|
||||
Fixed bug where inserting contents using mceInsertContent would fail if "span" was disabled in valid_elements.
|
||||
Fixed bug where initialization might fail if some resource on gecko wouldn't load properly and fire the onload event.
|
||||
Fixed bug where ctrl+7/8/9 keys wouldn't properly add the specific formats associated with them.
|
||||
Fixed bug where the HTML tags wasn't properly closed in the style plugins properties dialog.
|
||||
Fixed bug where the list plugin would produce an exception if the user tried to delete an element at the very first location.
|
||||
Version 3.4.3.2 (2011-06-30)
|
||||
Fixed bug where deleting all of a paragraph inside a table cell would behave badly in webkit.
|
||||
Fixed bugs in tests in firefox5 and WebKit.
|
||||
Fixed bug where selection of table cells would produce an exception on Gecko.
|
||||
Fixed bug where the caret wasn't properly rendered on Gecko when the editor was hidden.
|
||||
Fixed bug where pasting plain text into WebKit would produce a pre element it will now produce more semantic markup.
|
||||
Fixed bug where selecting list type formats using the advlist plugin on IE8 would loose editor selection.
|
||||
Fixed bug where forced root blocks logic wouldn't properly pad elements created if they contained data attributes.
|
||||
Fixed bug where it would remove all contents of the editor if you inserted an image when not having a caret in the document.
|
||||
Fixed bug where the YUI compressor wouldn't properly encode strings with only a quote in them.
|
||||
Fixed bug where WebKit on iOS5 wouldn't call nodeChanged when the selection was changed.
|
||||
Fixed bug where mceFocus command wouldn't work properly on Gecko since it didn't focus the body element.
|
||||
Fixed performance issue with the noneditable plugin where it would enable/disable controls to often.
|
||||
Version 3.4.3.1 (2011-06-16)
|
||||
Fixed bug where listboxes were not being handled correctly by JAWS in firefox with the o2k7 skin.
|
||||
Fixed bug where custom buttons were not being rendered correctly when in high contrast mode.
|
||||
Added support for iOS 5 that now supporting contentEditable in it's latest beta.
|
||||
Fixed bug where urls in style attributes with a _ character followed by a number would cause incorrect output.
|
||||
Fixed bug where custom_elements option wasn't working properly on IE browsers.
|
||||
Fixed bug where custom_elements marked as block elements wouldn't get correctly treated as block elements.
|
||||
Fixed bug where attributes with </> wasn't properly encoded as XML entities.
|
||||
Version 3.4.3 (2011-06-09)
|
||||
Fixed bug where deleting backwards before an image into a list would put the cursor in the wrong location.
|
||||
Fixed bug where styles plugin would not apply styles across multiple selected block elements correctly.
|
||||
Fixed bug where cursor would jump to start of document when selection contained empty table cells in IE8.
|
||||
Fixed bug where applied styles wouldn't be kept if you pressed enter twice to produce two paragraphs.
|
||||
Fixed bug where a ghost like caret would appear on Gecko when pressing enter while having a text color applied.
|
||||
Fixed bug where IE would produce absolute urls if you inserted a image/link and reloaded the page.
|
||||
Fixed bug where applying a heading style to a list item would cascade style to children list items.
|
||||
Fixed bug where Editor loses focus when backspacing and changing styles in WebKit.
|
||||
Fixed bug where exception was thrown in tinymce.util.URI when parsing a relative URI and no base_uri setting was provided.
|
||||
Fixed bug where alt-f10 was not always giving focus to the toolbar on Safari.
|
||||
Added new 'allow_html_in_named_anchor' option to allow html to occur within a named anchor tag. Use at own risk.
|
||||
Added plugin dependency support. Will autoload plugins specified as a dependency if they haven't been loaded.
|
||||
Fixed bug where the autolink plugin didn't work with non-English keyboards when pressing ).
|
||||
Added possibility to change properties of all table cells in a column.
|
||||
Added external_image_list option to get images list from user-defined variable or function.
|
||||
Fixed bug where the autoresize plugin wouldn't reduce the editors height on Chrome.
|
||||
Fixed bug where table size inputs were to small for values with size units.
|
||||
Fixed bug where table cell/row size input values were not validated.
|
||||
Fixed bug where menu item line-height would be set to wrong value by external styles.
|
||||
Fixed bug where hasUndo() would return wrong answer.
|
||||
Fixed bug where page title would be set to undefined by fullpage plugin.
|
||||
Fixed bug where HTML5 video properties were not updated in embedded media settings.
|
||||
Fixed bug where HTML comment on the first line would cause an error.
|
||||
Fixed bug where spellchecker menu was positioned incorrectly on IE.
|
||||
Fixed bug where breaking out of list elements on WebKit would produce a DIV instead of P after the list.
|
||||
Fixed bug where pasting from Word in IE9 would add extra BR elements when text was word wrapped.
|
||||
Fixed bug where numeric entities with leading zeros would produce incorrect decoding.
|
||||
Fixed bug where hexadecimal entities wasn't properly decoded.
|
||||
Fixed bug where bookmarks wasn't properly stored/restored on undo/redo.
|
||||
Fixed bug where the mceInsertCommand didn't retain the values of links if they contained non url contents.
|
||||
Fixed bug where the valid_styles option wouldn't be properly used on styles for specific elements.
|
||||
Fixed so contentEditable is used for the body of the editor if it's supported.
|
||||
Fixed so trailing BR elements gets removed even when forced_root_blocks option was set to false/null.
|
||||
Fixed performance issue with mceInsertCommand and inserting very simple contents.
|
||||
Fixed performance issue with older IE version and huge documents by optimizing the forced root blocks logic.
|
||||
Fixed performance issue with table plugin where it checked for selected cells to often.
|
||||
Fixed bug where creating a link on centered/floated image would produce an error on WebKit browsers.
|
||||
Fixed bug where Gecko would remove single paragraphs if there where contents before/after it.
|
||||
Fixed bug where the scrollbar would move up/down when pasting contents using the paste plugin.
|
||||
Version 3.4.2 (2011-04-07)
|
||||
Added new 'paste_text_sticky_default' option to paste plugin, enables you to set the default state for paste as plain text.
|
||||
Added new autoresize_bottom_margin option to autoresize plugin that enables you to add an extra margin at the bottom. Patch contributed by Andrew Ozz.
|
||||
Rewritten the fullpage plugin to handle style contents better and have a more normalized behavior across browsers.
|
||||
Fixed bug where contents inserted with mceInsertContent wasn't parsed using the default dom parser.
|
||||
Fixed bug where blocks containing a single anchor element would be treated as empty.
|
||||
Fixed bug where merging of table cells on IE 6, 7 wouldn't look correctly until the contents was refreshed.
|
||||
Fixed bug where context menu wouldn't work properly on Safari since it was passing out the ctrl key as pressed.
|
||||
Fixed bug where image border color/style values were overwritten by advimage plugin.
|
||||
Fixed bug where setting border in advimage plugin would throw error in IE.
|
||||
Fixed bug where empty anchors list in link settings wasn't hidden.
|
||||
Fixed bug where xhtmlextras popups were missing localized popup-size parameters.
|
||||
Fixed bug where the context menu wouldn't select images on WebKit browsers.
|
||||
Fixed bug where paste plugin wouldn't properly extract the contents on WebKit due to recent changes in browser behavior.
|
||||
Fixed bug where focus of the editor would get on control contents on IE lost due to a bug in the ColorSplitButton control.
|
||||
Fixed bug where contextmenu wasn't disabled on noneditable elements.
|
||||
Fixed bug where getStyle function would trigger error when called on element without style property.
|
||||
Fixed bug where editor fail to load if Javascript Compressor was used.
|
||||
Fixed bug where list-style-type=lower-greek would produce errors in IE<8.
|
||||
Fixed bug where spellchecker plugin would produce errors on IE6-7.
|
||||
Fixed bug where theme_advanced_containers configuration option causes error.
|
||||
Fixed bug where the mceReplaceContent command would produce an error since it didn't correctly handle a return value.
|
||||
Fixed bug where you couldn't enter float point values for em in dialog input fields since it wouldn't be considered a valid size.
|
||||
Fixed bug in xhtmlxtras plugin where it wasn't possible to remove some attributes in the attributes dialog.
|
||||
Version 3.4.1 (2011-03-24)
|
||||
Added significantly improved list handling via the new 'lists' plugin.
|
||||
Added 'autolink' plugin to enable automatically linking URLs. Similar to the behavior IE has by default.
|
||||
Added 'theme_advanced_show_current_color' setting to enable the forecolor and backcolor buttons to continuously show the current text color.
|
||||
Added 'contextmenu_never_use_native' setting to disable the ctrl-right-click showing the native browser context menu behaviour.
|
||||
Added 'paste_enable_default_filters' setting to enable the default paste filters to be disabled.
|
||||
Fixed bug where selection locations on undo/redo didn't work correctly on specific contents.
|
||||
Fixed bug where an exception would be trown on IE when loading TinyMCE inside an iframe.
|
||||
Fixed bug where some ascii numeric entities wasn't properly decoded.
|
||||
Fixed bug where some non western language codes wasn't properly decoded/encoded.
|
||||
Fixed bug where undo levels wasn't created when deleting contents on IE.
|
||||
Fixed bug where the initial undo levels bookmark wasn't updated correctly.
|
||||
Fixed bug where search/replace wouldn't be scoped to editor instances on IE8.
|
||||
Fixed bug where IE9 would produce two br elements after block elements when pasting.
|
||||
Fixed bug where IE would place the caret at an incorrect position after a paste operation.
|
||||
Fixed bug where a paste operation using the keyboard would add an extra undo level.
|
||||
Fixed bug where some attributes/elements wasn't correctly filtered when invalid contents was inserted.
|
||||
Fixed bug where the table plugin couldn't correctly handle invalid table structures.
|
||||
Fixed bug where charset and title of the page were handled incorrectly by the fullpage plugin.
|
||||
Fixed bug where toggle states on some of the list boxes didn't update correctly.
|
||||
Fixed bug where sub/sub wouldn't work correctly when done as a caret action in Chrome 10.
|
||||
Fixed bug where the constrain proportions checkbox wouldn't work in the media plugin.
|
||||
Fixed bug where block elements containing trailing br elements wouldn't treated properly if they where invalid.
|
||||
Fixed bug where the color picker dialog wouldn't be rendered correctly when using the o2k7 theme.
|
||||
Fixed bug where setting border=0 using advimage plugin invalid style attribute content was created in Chrome.
|
||||
Fixed bug with references to non-existing images in css of fullpage plugin.
|
||||
Fixed bug where item could be unselected in spellchecker's language selector.
|
||||
Fixed bug where some mispelled words could be not highlighted using spellchecker plugin.
|
||||
Fixed bug where spellchecking would merge some words on IE.
|
||||
Fixed bug where spellchecker context menu was not always positioned correctly.
|
||||
Fixed bug with empty anchors list in advlink popup when Invisible Elements feature was disabled.
|
||||
Fixed bug where older IE versions wouldn't properly handle some elements if they where placed at the top of editor contents.
|
||||
Fixed bug where selecting the whole table would enable table tools for cells and rows.
|
||||
Fixed bug where it wasn't possible to replace selected contents on IE when pasting using the paste plugin.
|
||||
Fixed bug where setting text color in fullpage plugin doesn't work.
|
||||
Fixed bug where the state of checkboxes in media plugin wouldn't be set correctly.
|
||||
Fixed bug where black spade suit character was not included in special character selector.
|
||||
Fixed bug where setting invalid values for table cell size would throw an error in IE.
|
||||
Fixed bug where spellchecking would remove whitespace characters from PRE block in IE.
|
||||
Fixed bug where HR was inserted inside P elements instead of splitting them.
|
||||
Fixed bug where extra, empty span tags were added when using a format with both selector and inline modes.
|
||||
Fixed bug where bullet lists weren't always detected correctly.
|
||||
Fixed bug where deleting some paragraphs on IE would cause an exception.
|
||||
Fixed bug where the json encoder logic wouldn't properly encode \ characters.
|
||||
Fixed bug where the onChange event would be fired when the editor was first initialized.
|
||||
Fixed bug where mceSelected wouldn't be removed properly from output even if it's an internal class.
|
||||
Fixed issue with table background colors not being transparent. This improves compliance with users browser color preferences.
|
||||
Fixed issue where styles were not included when using the full page plugin.
|
||||
Fixed issue where drag/drop operations wasn't properly added to the undo levels.
|
||||
Fixed issue where colors wasn't correctly applied to elements with underline decoration.
|
||||
Fixed issue where deleting some paragraphs on IE would cause an exception.
|
||||
Version 3.4 (2011-03-10)
|
||||
Added accessibility example with various accessibility options contributed by Ephox.
|
||||
Fixed bug where attributes wasn't properly handled in the xhtmlxtras plugin.
|
||||
Fixed bug where the image.htm had some strange td artifacts probably due to auto merging.
|
||||
Fixed bug where the ToolbarGroup had an missing reference to this in it's destroy method.
|
||||
Fixed bug with the resizeBy function in the advanced theme where it was scaled by the wrong parent.
|
||||
Fixed bug where an exception would be thrown by the element if the page was served in xhtml mode.
|
||||
Fixed bug where mceInsertContent would throw an exception when page was served in xhtml mode.
|
||||
Fixed bug where you couldn't select a forground/background color when page was served in xhtml mode.
|
||||
Fixed bug where the editor would scroll to the toolbar when clicked due to a call to focus in ListBox.
|
||||
Fixed bug where pages with rtl dir wouldn't render split buttons correctly when using the o2k7 theme.
|
||||
Fixed bug where anchor elements with names wasn't properly collapsed as they where in 3.3.x.
|
||||
Fixed bug where WebKit wouldn't properly handle image selection if it was done left to right.
|
||||
Fixed bug where the formatter would align images when the selection range was collapsed.
|
||||
Fixed bug where the image button would be active when the selection range was collapsed.
|
||||
Fixed bug where the element_format option wasn't used by the new (X)HTML serializer logic.
|
||||
Fixed bug where the table cell/row dialogs would produce empty attributes.
|
||||
Fixed bug where the tfoot wouldn't be added to the top of the table.
|
||||
Fixed bug where the formatter would merge siblings with white space between them.
|
||||
Fixed bug where pasting headers and paragraphs would produce an extra paragraph.
|
||||
Fixed bug where the ColorSplitButton would throw an exception if you clicked out side a color.
|
||||
Fixed bug where IE9 wouldn't properly produce new paragraphs on enter if the current paragraph had formatting.
|
||||
Fixed bug where multiple BR elements at end of block elements where removed.
|
||||
Fixed bug where fullscreen plugin wouldn't correctly display the edit area on IE6 for long pages.
|
||||
Fixed bug where paste plugin wouldn't properly encode raw entities when pasting in plain text mode.
|
||||
Fixed bug where the search/replace plugin wouldn't work correctly on IE 9.
|
||||
Fixed so the drop menus doesn't get an outline border visible when focused, patch contributed by Ephox.
|
||||
Fixed so the values entered in the color picker are forced to hex values.
|
||||
Removed dialog workaround for IE 9 beta since the RC is now out and people should upgrade.
|
||||
Removed obsolete calls in various plugins to the mceBeginUndoLevel command.
|
||||
Version 3.4b3 (2011-02-10)
|
||||
Added WAI-ARIA support for the main UI and dialogs this feature was contributed by Ephox.
|
||||
Added iframe support to media plugin in order to handle the new YouTube HTML5 video formats.
|
||||
Fixed bug where anchors would wrap the text contents after it due to a bug in the DomParser logic.
|
||||
Fixed bug where the selected state wouldn't be removed on ListBox controls when a menu item was selected.
|
||||
Fixed bug where IE could throw an unspecified error exception when the getBookmark logic was executed.
|
||||
Fixed bug where IE would throw an invalid argument error when focus was applied to an empty editor instance.
|
||||
Fixed bug where applying inline format wouldn't work if the start cell in the selection was empty.
|
||||
Fixed bug where auto detection logic for YouTube and Google Video wouldn't work in the new media plugin.
|
||||
Fixed bug where td elements would get a colspan/rowspan of 1 when created by the table plugin.
|
||||
Fixed bug where removal/padding of empty elements wasn't handled correctly.
|
||||
Fixed bug where internal elements would show up in element path.
|
||||
Fixed bug where internal elements would get serialized as valid output.
|
||||
Fixed bug where color wasn't correctly applied to anchor elements.
|
||||
Fixed bug where float option in the style plugin dialog wouldn't be handled correctly on WebKit.
|
||||
Fixed bug where the tinymce.dom.TreeWalker prev function wouldn't walk the DOM correctly.
|
||||
Fixed bug where mceInsertContent command could produce empty block elements after the inserted content.
|
||||
Fixed bug where mceInsertContent command wouldn't apply visual aids on tables and similar elements.
|
||||
Fixed bug where empty block elements would get double br bogus elements in them.
|
||||
Fixed bug where the color menu wouldn't apply the color correctly on IE when the viewport was to small.
|
||||
Fixed bug where right clicking out side the body element of the editor iframe would prevent paste from working on IE.
|
||||
Fixed bug where the onContextMenu event wouldn't fire correctly on IE if you clicked out side the body element.
|
||||
Fixed bug where the onContextMenu event wouldn't fire correctly on modern Opera versions that now support it by default.
|
||||
Fixed bug where legacy content wasn't converted correctly when inserted using mceInsertContent or through the source dialog.
|
||||
Fixed bug where resizing images or tables wouldn't update the style attribute correctly or leave data-mce prefixed attributes.
|
||||
Fixed bug where adding links wouldn't work correctly when using TinyMCE jQuery version with jQuery 1.5.
|
||||
Fixed bug where single quotes inside param elements wasn't treated correctly by the media plugin.
|
||||
Fixed bug where pasting plain text in WebKit wouldn't work correctly. It will now auto detect the WebKit bug and use plain text mode.
|
||||
Fixed bug where the DomParser would fail to move out invalid elements within invalid elements on complex contents.
|
||||
Fixed bug where paste as plain text would not decode html entities properly.
|
||||
Fixed bug where large paragraphs would cause incorrect scrolling behavior if you would split them using enter.
|
||||
Fixed bug where the SaxParser wouldn't properly parse some specific short ended elements.
|
||||
Fixed so mceReplaceContent supports caret position and makes sure that the contents inserted gets validated.
|
||||
Fixed so unnecessary traling br elements in blocks gets removed on Gecko/WebKit when using mceInsertContent command.
|
||||
Moved some plugin css contents into the skin content css files to reduce the number of http requests.
|
||||
Moved some plugin specific images into the theme img directory since they can then be shared.
|
||||
Version 3.4b2 (2011-01-13)
|
||||
Added new custom flash player, this player supports mp4 and flv and has skin support.
|
||||
Fixed so mceInsertContent handles context correctly to enforce valid nesting of elements.
|
||||
Fixed bug where scrolling would become jerky on IE on some contents.
|
||||
Fixed bug where paste as plain text would throw exception of missing entities setting.
|
||||
Fixed bug where anchor nodes where removed by the new serializer engine.
|
||||
Fixed bug where IE would crash if when backspace where used on some specific contents.
|
||||
Fixed bug where pasting of plain text in WebKit would result in merging of text lines.
|
||||
Fixed bug where it wasn't possible to delete images or tables using backspace on IE9.
|
||||
Fixed bug where urls in styles would generate a JS error due to incorrect scope.
|
||||
Fixed bug where copy paste from Java applications would produce extra contents in FF on Mac.
|
||||
Fixed bug where the verify_html option wouldn't allow all elements and attributes.
|
||||
Version 3.4b1 (2010-12-20)
|
||||
Added new serialization engine that increases performance and enforces valid output according to the specified schema settings.
|
||||
Added new HTML parser logic used by the serialization engine and can handle malformed html contents.
|
||||
Added new valid_children config option, enables more fine grain control of elements can be inside other elements.
|
||||
Added new entities encoding logic boost performance and will only encode entities based on context i.e. attributes/text nodes.
|
||||
Added new protect setting that enables users to protect template items from being removed by the serializer logic.
|
||||
Added new {$caret} marker for the mceInsertContent command. Makes it possible to move the caret to a specific position when inserting contents.
|
||||
Added new validation of anchor names. Only valid W3C names will be accepted.
|
||||
Replaced the internal _mce_ prefixed attributes to the more standard HTML5 data-mce- prefix. This will also resolve future browser santiaztion issues.
|
||||
Fixed bug where the paste plugin wouldn't convert Word lists with more than 9 items to real ol lists. Patch contributed by Mike (yogaboy).
|
||||
Fixed bug where clicking on a format title would produce errors if the current selection didn't have any formats.
|
||||
Fixed bug where paste of simple texts wouldn't work correctly in Gecko using the paste plugin since it keeps block formatting.
|
||||
Fixed bug where confirm dialogs didn't display correctly due to resent IE9 fixes.
|
||||
Fixed bug where spaces in URLs wouldn't be properly encoded to %20 if the user entered them in the link dialogs. Patch contributed by Ephox.
|
||||
Fixed bug where the image alignment buttons wouldn't reposition the resize handles on FF due to a browser issue. Patch contributed by Ephox.
|
||||
Fixed bug where the compareBoundaryPoints method of the IE Range class didn't work correctly. Patch contributed by Ephox.
|
||||
Fixed bug where selection of elements using double click wouldn't select the clicked element but rather the parent node on FF. Patch contributed by Ephox.
|
||||
Fixed bug where IE would scroll the user to the current selection causing parent document to scroll as well. Patch contributed by Ephox.
|
||||
Fixed bug where style compression would incorrectly compress items with different values. It now only compresses if the values are the same. Patch contributed by Ephox.
|
||||
Fixed bug where FF would add non breaking spaces outside TD elements if formatting was applied to table cells. Patch contributed by Ephox.
|
||||
Fixed bug where the caret position would be lost on WebKit browsers if you pasted images multiple times. Patch contributed by Ephox.
|
||||
Fixed bug where non word contents like * would be counted as words in the wordcount pluging. Patch contributed by David Balatero.
|
||||
Fixed bug where the toggle absolute button in the layer plugin wouldn't remove the existing internal style attribute first.
|
||||
Fixed bug where the autosave plugin would generate an exception on IE if the user had disabled userdata persistence.
|
||||
Fixed bug where the paste plugin would remove dashed classes on IE since the regexps didn't include that character.
|
||||
Fixed bug where applying text color would not add spans inside link elements. This is needed due to CSS style inheritance.
|
||||
Fixed bug where applying block formats to empty elements wouldn't render correctly on IE.
|
||||
Fixed bug where the searchreplace plugin would add a f or r character when shortcuts where used on IE while using default dialogs.
|
||||
Fixed bug where Opera wouldn't load scripts correctly since the onreadystate would fire even though the script wasn't loaded.
|
||||
Fixed issue where wouldn't be handled correctly in the bbcode plugin if entity_encoding was set to raw.
|
||||
Fixed issue where contents would flicker since the content css files where asynchronously loaded.
|
||||
Fixed bug where WebKit wouldn't create links on images with a float style.
|
||||
Version 3.3.9.3 (2010-12-20)
|
||||
Fixed issue where WebKit wouldn't correctly apply ins/del in xhtmlxtras plugin.
|
||||
Fixed bug where paste as plaintext on WebKit wouldn't produce br and p elements correctly.
|
||||
Fixed bug where the confirm dialog texts would be incorrectly placed due to recent IE 9 workarounds in the window.css.
|
||||
Fixed bug where applying text color would not add spans inside link elements. This is needed due to CSS style inheritance.
|
||||
Version 3.3.9.2 (2010-09-29)
|
||||
Fixed bug where placing the caret in IE 9 beta 1 would not work correctly if you clicked out side the document body element.
|
||||
Fixed bug where IE 9 beta 1 wouldn't resize the editor correctly since the events didn't fire as previous versions did.
|
||||
Fixed bug where FF would produce an error message when being rendered inside a hidden div element.
|
||||
Fixed bug where resize logic could produce a cookie with a width/height less than the size of the container.
|
||||
Fixed bug where content_css wouldn't populate the styles dropdown correctly.
|
||||
Version 3.3.9.1 (2010-09-23)
|
||||
Fixed bug where WebKit browsers wouldn't activate the image button when images where selected.
|
||||
Fixed bug where Opera Presto 10.60 deletes elements when restoring bookmarks.
|
||||
Fixed bug where IE9 beta1 doesn't handle regexp replacement values correctly.
|
||||
Fixed bug where IE9 beta1 didn't render the inline dialogs correctly due to a bug with CSS clip.
|
||||
Fixed bug where IE9 beta1 would produce error messages on load since they removed the document.recalc method.
|
||||
Fixed bug where IE9 beta1 would produce <html xmlns=""> since they haven't implemented document.implementation.createDocument correctly.
|
||||
Fixed bug where IE9 beta1 would searchreplace doesn't work since their native DOM Range doesn't have a find method.
|
||||
Fixed bug where IE9 beta1 would render the source view incorrectly due to incorrect viewport size measurements.
|
||||
Fixed bug where IE9 beta1 would crash when running the basic functionality unit tests.
|
||||
Fixed bug where IE9 beta1 would wrap elements in blocks correctly due to changes to the selection object.
|
||||
Fixed bug where IE9 beta1 would fail to insert contents since they havn't implemented the createContextualFragment method in their DOM Range.
|
||||
Fixed bug where IE9 beta1 would fail to handle image selection since they currently doesn't support control selections in their DOM Range.
|
||||
Fixed bug where IE9 beta1 would fail to load scripts since they fire the onload event before the scripts are parsed and executed.
|
||||
Version 3.3.9 (2010-09-08)
|
||||
Fixed bug where inserting table rows into a table with subtable would produce an incorrect column count.
|
||||
Fixed bug where the selection of cells in a table with subtables could produce invalid selections.
|
||||
Fixed bug where the table plugin would produce a script error if you tried to move the caret before a first child table.
|
||||
Fixed bug where the keep_styles feature on IE would move the caret to an incorrect location at the end of list blocks.
|
||||
Fixed so attributes from legacy elements such as font gets retained when they get converted to spans.
|
||||
Fixed minor issue where the select boxes wouldn't be set the not set by default in the table dialog.
|
||||
Version 3.3.8 (2010-06-30)
|
||||
On IE8+ and FireFox 3.5+, dragging an image now correctly adds an undo
|
||||
event.
|
||||
Fixed bug where WebKit would not move the caret to a correct position after a paste operation.
|
||||
Fixed bug where WebKit would produce a div wrapper element when pasting some contents.
|
||||
Fixed bug where the visual chars and nonbreaking plugin wouldn't show nbsp elements correctly.
|
||||
Fixed bug where the format states would be enabled even after the format was removed.
|
||||
Fixed bug where the delete key would move the caret to an incorrect position.
|
||||
Fixed bug where it wasn't possible to toggle of the current font size/family/style by clicking the title item.
|
||||
Fixed bug where the abbr element wouldn't get serialized correctly on IE6.
|
||||
Fixed so that the examples checks if they are executed from the local file system since that might not work properly.
|
||||
Version 3.3.7 (2010-06-10)
|
||||
Fixed bug where context menu would produce an error on IE if you right clicked twice and left clicked once.
|
||||
Fixed bug where resizing of the window on WebKit browsers in fullscreen mode wouldn't position the statusbar correctly.
|
||||
|
|
|
|||
101
library/tinymce/examples/accessibility.html
Normal file
|
|
@ -0,0 +1,101 @@
|
|||
<!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>Full featured example</title>
|
||||
|
||||
<!-- TinyMCE -->
|
||||
<script type="text/javascript" src="../jscripts/tiny_mce/tiny_mce.js"></script>
|
||||
<script type="text/javascript">
|
||||
tinyMCE.init({
|
||||
// General options
|
||||
mode : "textareas",
|
||||
theme : "advanced",
|
||||
plugins : "pagebreak,style,layer,table,save,advhr,advimage,advlink,emotions,iespell,insertdatetime,preview,media,searchreplace,print,contextmenu,paste,directionality,fullscreen,noneditable,visualchars,nonbreaking,xhtmlxtras,template,wordcount,advlist,autosave",
|
||||
|
||||
// Theme options
|
||||
theme_advanced_buttons1 : "save,newdocument,|,bold,italic,underline,strikethrough,|,justifyleft,justifycenter,justifyright,justifyfull,styleselect,formatselect,fontselect,fontsizeselect",
|
||||
theme_advanced_buttons2 : "cut,copy,paste,pastetext,pasteword,|,search,replace,|,bullist,numlist,|,outdent,indent,blockquote,|,undo,redo,|,link,unlink,anchor,image,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",
|
||||
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)
|
||||
// using false to ensure that the default browser settings are used for best Accessibility
|
||||
// ACCESSIBILITY SETTINGS
|
||||
content_css : false,
|
||||
// Use browser preferred colors for dialogs.
|
||||
browser_preferred_colors : true,
|
||||
detect_highcontrast : true,
|
||||
|
||||
// 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",
|
||||
|
||||
// Style formats
|
||||
style_formats : [
|
||||
{title : 'Bold text', inline : 'b'},
|
||||
{title : 'Red text', inline : 'span', styles : {color : '#ff0000'}},
|
||||
{title : 'Red header', block : 'h1', styles : {color : '#ff0000'}},
|
||||
{title : 'Example 1', inline : 'span', classes : 'example1'},
|
||||
{title : 'Example 2', inline : 'span', classes : 'example2'},
|
||||
{title : 'Table styles'},
|
||||
{title : 'Table row 1', selector : 'tr', classes : 'tablerow1'}
|
||||
],
|
||||
|
||||
// Replace values for the template plugin
|
||||
template_replace_values : {
|
||||
username : "Some User",
|
||||
staffid : "991234"
|
||||
}
|
||||
});
|
||||
</script>
|
||||
<!-- /TinyMCE -->
|
||||
|
||||
</head>
|
||||
<body>
|
||||
|
||||
<form method="post" action="http://tinymce.moxiecode.com/dump.php?example=true">
|
||||
<div>
|
||||
<h3>Full featured example, with Accessibility settings enabled</h3>
|
||||
|
||||
<p>
|
||||
This page has got the TinyMCE set up to work with configurations related to accessiblity enabled.
|
||||
In particular
|
||||
<ul>
|
||||
<li>the <strong>content_css</strong> is set to false, to ensure that all default browser styles are used, </li>
|
||||
<li>the <strong>browser_preferred_colors</strong> dialog option is used to ensure that default css is used for dialogs, </li>
|
||||
<li>and the <strong>detect_highcontrast</strong> option has been set to ensure that highcontrast mode in Windows browsers
|
||||
is detected and the toolbars are displayed in a high contrast mode.</li>
|
||||
</ul>
|
||||
</p>
|
||||
|
||||
<!-- Gets replaced with TinyMCE, remember HTML in a textarea should be encoded -->
|
||||
<div>
|
||||
<textarea id="elm1" name="elm1" rows="15" cols="80" style="width: 80%">
|
||||
<p>
|
||||
This is some example text that you can edit inside the <strong>TinyMCE editor</strong>.
|
||||
</p>
|
||||
<p>
|
||||
Nam nisi elit, cursus in rhoncus sit amet, pulvinar laoreet leo. Nam sed lectus quam, ut sagittis tellus. Quisque dignissim mauris a augue rutrum tempor. Donec vitae purus nec massa vestibulum ornare sit amet id tellus. Nunc quam mauris, fermentum nec lacinia eget, sollicitudin nec ante. Aliquam molestie volutpat dapibus. Nunc interdum viverra sodales. Morbi laoreet pulvinar gravida. Quisque ut turpis sagittis nunc accumsan vehicula. Duis elementum congue ultrices. Cras faucibus feugiat arcu quis lacinia. In hac habitasse platea dictumst. Pellentesque fermentum magna sit amet tellus varius ullamcorper. Vestibulum at urna augue, eget varius neque. Fusce facilisis venenatis dapibus. Integer non sem at arcu euismod tempor nec sed nisl. Morbi ultricies, mauris ut ultricies adipiscing, felis odio condimentum massa, et luctus est nunc nec eros.
|
||||
</p>
|
||||
</textarea>
|
||||
</div>
|
||||
|
||||
<br />
|
||||
<input type="submit" name="save" value="Submit" />
|
||||
<input type="reset" name="reset" value="Reset" />
|
||||
</div>
|
||||
</form>
|
||||
|
||||
<script type="text/javascript">
|
||||
if (document.location.protocol == 'file:') {
|
||||
alert("The examples might not work properly on the local file system due to security settings in your browser. Please use a real webserver.");
|
||||
}
|
||||
</script>
|
||||
</body>
|
||||
</html>
|
||||
0
library/tinymce/examples/css/content.css
Executable file → Normal file
0
library/tinymce/examples/css/word.css
Executable file → Normal file
8
library/tinymce/examples/custom_formats.html
Executable file → Normal file
|
|
@ -10,7 +10,7 @@
|
|||
// General options
|
||||
mode : "textareas",
|
||||
theme : "advanced",
|
||||
plugins : "pagebreak,style,layer,table,save,advhr,advimage,advlink,emotions,iespell,inlinepopups,insertdatetime,preview,media,searchreplace,print,contextmenu,paste,directionality,fullscreen,noneditable,visualchars,nonbreaking,xhtmlxtras,template,wordcount,advlist,autosave",
|
||||
plugins : "autolink,lists,pagebreak,style,layer,table,save,advhr,advimage,advlink,emotions,iespell,inlinepopups,insertdatetime,preview,media,searchreplace,print,contextmenu,paste,directionality,fullscreen,noneditable,visualchars,nonbreaking,xhtmlxtras,template,wordcount,advlist,autosave",
|
||||
|
||||
// Theme options
|
||||
theme_advanced_buttons1 : "save,newdocument,|,bold,italic,underline,strikethrough,|,justifyleft,justifycenter,justifyright,justifyfull,styleselect,formatselect,fontselect,fontsizeselect",
|
||||
|
|
@ -102,6 +102,10 @@
|
|||
<input type="reset" name="reset" value="Reset" />
|
||||
</div>
|
||||
</form>
|
||||
|
||||
<script type="text/javascript">
|
||||
if (document.location.protocol == 'file:') {
|
||||
alert("The examples might not work properly on the local file system due to security settings in your browser. Please use a real webserver.");
|
||||
}
|
||||
</script>
|
||||
</body>
|
||||
</html>
|
||||
|
|
|
|||
31
library/tinymce/examples/full.html
Executable file → Normal file
|
|
@ -2,7 +2,7 @@
|
|||
<html xmlns="http://www.w3.org/1999/xhtml">
|
||||
<head>
|
||||
<title>Full featured example</title>
|
||||
|
||||
<meta http-equiv="X-UA-Compatible" content="IE=edge" />
|
||||
<!-- TinyMCE -->
|
||||
<script type="text/javascript" src="../jscripts/tiny_mce/tiny_mce.js"></script>
|
||||
<script type="text/javascript">
|
||||
|
|
@ -10,13 +10,13 @@
|
|||
// General options
|
||||
mode : "textareas",
|
||||
theme : "advanced",
|
||||
plugins : "pagebreak,style,layer,table,save,advhr,advimage,advlink,emotions,iespell,inlinepopups,insertdatetime,preview,media,searchreplace,print,contextmenu,paste,directionality,fullscreen,noneditable,visualchars,nonbreaking,xhtmlxtras,template,wordcount,advlist,autosave",
|
||||
plugins : "autolink,lists,pagebreak,style,layer,table,save,advhr,advimage,advlink,emotions,iespell,inlinepopups,insertdatetime,preview,media,searchreplace,print,contextmenu,paste,directionality,fullscreen,noneditable,visualchars,nonbreaking,xhtmlxtras,template,wordcount,advlist,autosave,visualblocks",
|
||||
|
||||
// Theme options
|
||||
theme_advanced_buttons1 : "save,newdocument,|,bold,italic,underline,strikethrough,|,justifyleft,justifycenter,justifyright,justifyfull,styleselect,formatselect,fontselect,fontsizeselect",
|
||||
theme_advanced_buttons2 : "cut,copy,paste,pastetext,pasteword,|,search,replace,|,bullist,numlist,|,outdent,indent,blockquote,|,undo,redo,|,link,unlink,anchor,image,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",
|
||||
theme_advanced_buttons4 : "insertlayer,moveforward,movebackward,absolute,|,styleprops,|,cite,abbr,acronym,del,ins,attribs,|,visualchars,nonbreaking,template,pagebreak,restoredraft,visualblocks",
|
||||
theme_advanced_toolbar_location : "top",
|
||||
theme_advanced_toolbar_align : "left",
|
||||
theme_advanced_statusbar_location : "bottom",
|
||||
|
|
@ -52,7 +52,7 @@
|
|||
<!-- /TinyMCE -->
|
||||
|
||||
</head>
|
||||
<body>
|
||||
<body role="application">
|
||||
|
||||
<form method="post" action="http://tinymce.moxiecode.com/dump.php?example=true">
|
||||
<div>
|
||||
|
|
@ -76,15 +76,15 @@
|
|||
</div>
|
||||
|
||||
<!-- Some integration calls -->
|
||||
<a href="javascript:;" onmousedown="tinyMCE.get('elm1').show();">[Show]</a>
|
||||
<a href="javascript:;" onmousedown="tinyMCE.get('elm1').hide();">[Hide]</a>
|
||||
<a href="javascript:;" onmousedown="tinyMCE.get('elm1').execCommand('Bold');">[Bold]</a>
|
||||
<a href="javascript:;" onmousedown="alert(tinyMCE.get('elm1').getContent());">[Get contents]</a>
|
||||
<a href="javascript:;" onmousedown="alert(tinyMCE.get('elm1').selection.getContent());">[Get selected HTML]</a>
|
||||
<a href="javascript:;" onmousedown="alert(tinyMCE.get('elm1').selection.getContent({format : 'text'}));">[Get selected text]</a>
|
||||
<a href="javascript:;" onmousedown="alert(tinyMCE.get('elm1').selection.getNode().nodeName);">[Get selected element]</a>
|
||||
<a href="javascript:;" onmousedown="tinyMCE.execCommand('mceInsertContent',false,'<b>Hello world!!</b>');">[Insert HTML]</a>
|
||||
<a href="javascript:;" onmousedown="tinyMCE.execCommand('mceReplaceContent',false,'<b>{$selection}</b>');">[Replace selection]</a>
|
||||
<a href="javascript:;" onclick="tinyMCE.get('elm1').show();return false;">[Show]</a>
|
||||
<a href="javascript:;" onclick="tinyMCE.get('elm1').hide();return false;">[Hide]</a>
|
||||
<a href="javascript:;" onclick="tinyMCE.get('elm1').execCommand('Bold');return false;">[Bold]</a>
|
||||
<a href="javascript:;" onclick="alert(tinyMCE.get('elm1').getContent());return false;">[Get contents]</a>
|
||||
<a href="javascript:;" onclick="alert(tinyMCE.get('elm1').selection.getContent());return false;">[Get selected HTML]</a>
|
||||
<a href="javascript:;" onclick="alert(tinyMCE.get('elm1').selection.getContent({format : 'text'}));return false;">[Get selected text]</a>
|
||||
<a href="javascript:;" onclick="alert(tinyMCE.get('elm1').selection.getNode().nodeName);return false;">[Get selected element]</a>
|
||||
<a href="javascript:;" onclick="tinyMCE.execCommand('mceInsertContent',false,'<b>Hello world!!</b>');return false;">[Insert HTML]</a>
|
||||
<a href="javascript:;" onclick="tinyMCE.execCommand('mceReplaceContent',false,'<b>{$selection}</b>');return false;">[Replace selection]</a>
|
||||
|
||||
<br />
|
||||
<input type="submit" name="save" value="Submit" />
|
||||
|
|
@ -92,5 +92,10 @@
|
|||
</div>
|
||||
</form>
|
||||
|
||||
<script type="text/javascript">
|
||||
if (document.location.protocol == 'file:') {
|
||||
alert("The examples might not work properly on the local file system due to security settings in your browser. Please use a real webserver.");
|
||||
}
|
||||
</script>
|
||||
</body>
|
||||
</html>
|
||||
|
|
|
|||
0
library/tinymce/examples/index.html
Executable file → Normal file
0
library/tinymce/examples/lists/image_list.js
Executable file → Normal file
0
library/tinymce/examples/lists/link_list.js
Executable file → Normal file
6
library/tinymce/examples/lists/media_list.js
Executable file → Normal file
|
|
@ -6,5 +6,9 @@ var tinyMCEMediaList = [
|
|||
// Name, URL
|
||||
["Some Flash", "media/sample.swf"],
|
||||
["Some Quicktime", "media/sample.mov"],
|
||||
["Some AVI", "media/sample.avi"]
|
||||
["Some AVI", "media/sample.avi"],
|
||||
["Some RealMedia", "media/sample.rm"],
|
||||
["Some Shockwave", "media/sample.dcr"],
|
||||
["Some Video", "media/sample.mp4"],
|
||||
["Some FLV", "media/sample.flv"]
|
||||
];
|
||||
0
library/tinymce/examples/lists/template_list.js
Executable file → Normal file
0
library/tinymce/examples/media/logo.jpg
Executable file → Normal file
|
Before Width: | Height: | Size: 2.7 KiB After Width: | Height: | Size: 2.7 KiB |
0
library/tinymce/examples/media/logo_over.jpg
Executable file → Normal file
|
Before Width: | Height: | Size: 6.3 KiB After Width: | Height: | Size: 6.3 KiB |
0
library/tinymce/examples/media/sample.avi
Executable file → Normal file
0
library/tinymce/examples/media/sample.dcr
Executable file → Normal file
BIN
library/tinymce/examples/media/sample.flv
Normal file
0
library/tinymce/examples/media/sample.mov
Executable file → Normal file
0
library/tinymce/examples/media/sample.ram
Executable file → Normal file
0
library/tinymce/examples/media/sample.rm
Executable file → Normal file
0
library/tinymce/examples/media/sample.swf
Executable file → Normal file
1
library/tinymce/examples/menu.html
Executable file → Normal file
|
|
@ -13,5 +13,6 @@ a {display:block;}
|
|||
<a href="skins.html" target="main">Skin support</a>
|
||||
<a href="word.html" target="main">Word processor</a>
|
||||
<a href="custom_formats.html" target="main">Custom formats</a>
|
||||
<a href="accessibility.html" target="main">Accessibility Options</a>
|
||||
</body>
|
||||
</html>
|
||||
6
library/tinymce/examples/simple.html
Executable file → Normal file
|
|
@ -38,6 +38,10 @@
|
|||
<input type="submit" name="save" value="Submit" />
|
||||
<input type="reset" name="reset" value="Reset" />
|
||||
</form>
|
||||
|
||||
<script type="text/javascript">
|
||||
if (document.location.protocol == 'file:') {
|
||||
alert("The examples might not work properly on the local file system due to security settings in your browser. Please use a real webserver.");
|
||||
}
|
||||
</script>
|
||||
</body>
|
||||
</html>
|
||||
|
|
|
|||
14
library/tinymce/examples/skins.html
Executable file → Normal file
|
|
@ -12,7 +12,7 @@
|
|||
mode : "exact",
|
||||
elements : "elm1",
|
||||
theme : "advanced",
|
||||
plugins : "pagebreak,style,layer,table,save,advhr,advimage,advlink,emotions,iespell,insertdatetime,preview,media,searchreplace,print,contextmenu,paste,directionality,fullscreen,noneditable,visualchars,nonbreaking,xhtmlxtras,template,inlinepopups,autosave",
|
||||
plugins : "autolink,lists,pagebreak,style,layer,table,save,advhr,advimage,advlink,emotions,iespell,insertdatetime,preview,media,searchreplace,print,contextmenu,paste,directionality,fullscreen,noneditable,visualchars,nonbreaking,xhtmlxtras,template,inlinepopups,autosave",
|
||||
|
||||
// Theme options
|
||||
theme_advanced_buttons1 : "save,newdocument,|,bold,italic,underline,strikethrough,|,justifyleft,justifycenter,justifyright,justifyfull,styleselect,formatselect,fontselect,fontsizeselect",
|
||||
|
|
@ -47,7 +47,7 @@
|
|||
elements : "elm2",
|
||||
theme : "advanced",
|
||||
skin : "o2k7",
|
||||
plugins : "pagebreak,style,layer,table,save,advhr,advimage,advlink,emotions,iespell,insertdatetime,preview,media,searchreplace,print,contextmenu,paste,directionality,fullscreen,noneditable,visualchars,nonbreaking,xhtmlxtras,template,inlinepopups,autosave",
|
||||
plugins : "lists,pagebreak,style,layer,table,save,advhr,advimage,advlink,emotions,iespell,insertdatetime,preview,media,searchreplace,print,contextmenu,paste,directionality,fullscreen,noneditable,visualchars,nonbreaking,xhtmlxtras,template,inlinepopups,autosave",
|
||||
|
||||
// Theme options
|
||||
theme_advanced_buttons1 : "save,newdocument,|,bold,italic,underline,strikethrough,|,justifyleft,justifycenter,justifyright,justifyfull,styleselect,formatselect,fontselect,fontsizeselect",
|
||||
|
|
@ -83,7 +83,7 @@
|
|||
theme : "advanced",
|
||||
skin : "o2k7",
|
||||
skin_variant : "silver",
|
||||
plugins : "pagebreak,style,layer,table,save,advhr,advimage,advlink,emotions,iespell,insertdatetime,preview,media,searchreplace,print,contextmenu,paste,directionality,fullscreen,noneditable,visualchars,nonbreaking,xhtmlxtras,template,inlinepopups,autosave",
|
||||
plugins : "lists,pagebreak,style,layer,table,save,advhr,advimage,advlink,emotions,iespell,insertdatetime,preview,media,searchreplace,print,contextmenu,paste,directionality,fullscreen,noneditable,visualchars,nonbreaking,xhtmlxtras,template,inlinepopups,autosave",
|
||||
|
||||
// Theme options
|
||||
theme_advanced_buttons1 : "save,newdocument,|,bold,italic,underline,strikethrough,|,justifyleft,justifycenter,justifyright,justifyfull,styleselect,formatselect,fontselect,fontsizeselect",
|
||||
|
|
@ -119,7 +119,7 @@
|
|||
theme : "advanced",
|
||||
skin : "o2k7",
|
||||
skin_variant : "black",
|
||||
plugins : "pagebreak,style,layer,table,save,advhr,advimage,advlink,emotions,iespell,insertdatetime,preview,media,searchreplace,print,contextmenu,paste,directionality,fullscreen,noneditable,visualchars,nonbreaking,xhtmlxtras,template,inlinepopups,autosave",
|
||||
plugins : "lists,pagebreak,style,layer,table,save,advhr,advimage,advlink,emotions,iespell,insertdatetime,preview,media,searchreplace,print,contextmenu,paste,directionality,fullscreen,noneditable,visualchars,nonbreaking,xhtmlxtras,template,inlinepopups,autosave",
|
||||
|
||||
// Theme options
|
||||
theme_advanced_buttons1 : "save,newdocument,|,bold,italic,underline,strikethrough,|,justifyleft,justifycenter,justifyright,justifyfull,styleselect,formatselect,fontselect,fontsizeselect",
|
||||
|
|
@ -207,6 +207,10 @@
|
|||
<input type="submit" name="save" value="Submit" />
|
||||
<input type="reset" name="reset" value="Reset" />
|
||||
</form>
|
||||
|
||||
<script type="text/javascript">
|
||||
if (document.location.protocol == 'file:') {
|
||||
alert("The examples might not work properly on the local file system due to security settings in your browser. Please use a real webserver.");
|
||||
}
|
||||
</script>
|
||||
</body>
|
||||
</html>
|
||||
|
|
|
|||
0
library/tinymce/examples/templates/layout1.htm
Executable file → Normal file
0
library/tinymce/examples/templates/snippet1.htm
Executable file → Normal file
|
|
@ -1,80 +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>Full featured example</title>
|
||||
<style>
|
||||
body {font-family:Arial,Verdana; font-size: 12px;}
|
||||
</style>
|
||||
|
||||
<!-- TinyMCE -->
|
||||
<script type="text/javascript" src="../jscripts/tiny_mce/tiny_mce.js"></script>
|
||||
<script type="text/javascript">
|
||||
tinyMCE.init({
|
||||
// General options
|
||||
mode : "textareas",
|
||||
theme : "advanced",
|
||||
plugins : "pagebreak,style,layer,table,save,advhr,advimage,advlink,emotions,iespell,inlinepopups,insertdatetime,preview,media,searchreplace,print,contextmenu,paste,directionality,fullscreen,noneditable,visualchars,nonbreaking,xhtmlxtras,template",
|
||||
|
||||
// Theme options
|
||||
theme_advanced_buttons1 : "save,newdocument,|,bold,italic,underline,strikethrough,|,justifyleft,justifycenter,justifyright,justifyfull,|,styleselect,formatselect,fontselect,fontsizeselect",
|
||||
theme_advanced_buttons2 : "cut,copy,paste,pastetext,pasteword,|,search,replace,|,bullist,numlist,|,outdent,indent,blockquote,|,undo,redo,|,link,unlink,anchor,image,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",
|
||||
theme_advanced_toolbar_location : "top",
|
||||
theme_advanced_toolbar_align : "left",
|
||||
theme_advanced_path_location : "bottom",
|
||||
theme_advanced_resizing : true,
|
||||
|
||||
// Example content CSS (should be your site CSS)
|
||||
content_css : "css/content.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",
|
||||
|
||||
// Replace values for the template plugin
|
||||
template_replace_values : {
|
||||
username : "Some User",
|
||||
staffid : "991234"
|
||||
},
|
||||
|
||||
// Enable translation mode
|
||||
translate_mode : true,
|
||||
language : "en"
|
||||
});
|
||||
</script>
|
||||
<!-- /TinyMCE -->
|
||||
|
||||
</head>
|
||||
<body>
|
||||
|
||||
<form method="post" action="http://tinymce.moxiecode.com/dump.php?example=true">
|
||||
<h3>Translation</h3>
|
||||
|
||||
<p>This page enables you to translate TinyMCE by using XML files.</p>
|
||||
<p>Steps to translate:</p>
|
||||
<ol>
|
||||
<li>Download one of the language XML files from the TinyMCE site.</li>
|
||||
<li>Place it in /jscripts/tiny_mce/langs directory, for example /jscripts/tiny_mce/langs/sv.xml.</li>
|
||||
<li>Change the language init option in this file to match the XML file code. For example: sv</li>
|
||||
<li>TinyMCE will now use the XML file instead of the .js versions.</li>
|
||||
<li>Modify the XML file until everything is translated</li>
|
||||
<li>Modify the author information, this is optional.</li>
|
||||
<li>Upload the XML file to the TinyMCE site to share it with others.</li>
|
||||
<li>You can now download the .js versions of the language pack from the TinyMCE site.</li>
|
||||
</ol>
|
||||
|
||||
<textarea id="elm1" name="elm1" rows="15" cols="80" style="width: 80%">
|
||||
<p>
|
||||
This is some example text that you can edit inside the <strong>TinyMCE editor</strong>.
|
||||
</p>
|
||||
<p>
|
||||
Nam nisi elit, cursus in rhoncus sit amet, pulvinar laoreet leo. Nam sed lectus quam, ut sagittis tellus. Quisque dignissim mauris a augue rutrum tempor. Donec vitae purus nec massa vestibulum ornare sit amet id tellus. Nunc quam mauris, fermentum nec lacinia eget, sollicitudin nec ante. Aliquam molestie volutpat dapibus. Nunc interdum viverra sodales. Morbi laoreet pulvinar gravida. Quisque ut turpis sagittis nunc accumsan vehicula. Duis elementum congue ultrices. Cras faucibus feugiat arcu quis lacinia. In hac habitasse platea dictumst. Pellentesque fermentum magna sit amet tellus varius ullamcorper. Vestibulum at urna augue, eget varius neque. Fusce facilisis venenatis dapibus. Integer non sem at arcu euismod tempor nec sed nisl. Morbi ultricies, mauris ut ultricies adipiscing, felis odio condimentum massa, et luctus est nunc nec eros.
|
||||
</p>
|
||||
</textarea>
|
||||
</form>
|
||||
|
||||
</body>
|
||||
</html>
|
||||
11
library/tinymce/examples/word.html
Executable file → Normal file
|
|
@ -2,7 +2,7 @@
|
|||
<html xmlns="http://www.w3.org/1999/xhtml">
|
||||
<head>
|
||||
<title>Word processor example</title>
|
||||
|
||||
<meta http-equiv="X-UA-Compatible" content="IE=edge" />
|
||||
<!-- TinyMCE -->
|
||||
<script type="text/javascript" src="../jscripts/tiny_mce/tiny_mce.js"></script>
|
||||
<script type="text/javascript">
|
||||
|
|
@ -10,7 +10,8 @@
|
|||
// General options
|
||||
mode : "textareas",
|
||||
theme : "advanced",
|
||||
plugins : "pagebreak,style,layer,table,save,advhr,advimage,advlink,emotions,iespell,insertdatetime,preview,media,searchreplace,print,contextmenu,paste,directionality,fullscreen,noneditable,visualchars,nonbreaking,xhtmlxtras,template,inlinepopups,autosave",
|
||||
skin : "o2k7",
|
||||
plugins : "autolink,lists,pagebreak,style,layer,table,save,advhr,advimage,advlink,emotions,iespell,insertdatetime,preview,media,searchreplace,print,contextmenu,paste,directionality,fullscreen,noneditable,visualchars,nonbreaking,xhtmlxtras,template,inlinepopups,autosave",
|
||||
|
||||
// Theme options
|
||||
theme_advanced_buttons1 : "save,newdocument,|,bold,italic,underline,strikethrough,|,justifyleft,justifycenter,justifyright,justifyfull,|,styleselect,formatselect,fontselect,fontsizeselect",
|
||||
|
|
@ -62,6 +63,10 @@
|
|||
<input type="submit" name="save" value="Submit" />
|
||||
<input type="reset" name="reset" value="Reset" />
|
||||
</form>
|
||||
|
||||
<script type="text/javascript">
|
||||
if (document.location.protocol == 'file:') {
|
||||
alert("The examples might not work properly on the local file system due to security settings in your browser. Please use a real webserver.");
|
||||
}
|
||||
</script>
|
||||
</body>
|
||||
</html>
|
||||
|
|
|
|||
171
library/tinymce/jscripts/tiny_mce/langs/en.js
vendored
Executable file → Normal file
0
library/tinymce/jscripts/tiny_mce/license.txt
Executable file → Normal file
0
library/tinymce/jscripts/tiny_mce/plugins/advhr/css/advhr.css
vendored
Executable file → Normal file
0
library/tinymce/jscripts/tiny_mce/plugins/advhr/editor_plugin.js
vendored
Executable file → Normal file
0
library/tinymce/jscripts/tiny_mce/plugins/advhr/editor_plugin_src.js
vendored
Executable file → Normal file
0
library/tinymce/jscripts/tiny_mce/plugins/advhr/js/rule.js
vendored
Executable file → Normal file
6
library/tinymce/jscripts/tiny_mce/plugins/advhr/langs/en_dlg.js
vendored
Executable file → Normal file
|
|
@ -1,5 +1 @@
|
|||
tinyMCE.addI18n('en.advhr_dlg',{
|
||||
width:"Width",
|
||||
size:"Height",
|
||||
noshade:"No shadow"
|
||||
});
|
||||
tinyMCE.addI18n('en.advhr_dlg',{size:"Height",noshade:"No Shadow",width:"Width",normal:"Normal",widthunits:"Units"});
|
||||
59
library/tinymce/jscripts/tiny_mce/plugins/advhr/rule.htm
vendored
Executable file → Normal file
|
|
@ -8,43 +8,44 @@
|
|||
<script type="text/javascript" src="../../utils/form_utils.js"></script>
|
||||
<link href="css/advhr.css" rel="stylesheet" type="text/css" />
|
||||
</head>
|
||||
<body>
|
||||
<body role="application">
|
||||
<form onsubmit="AdvHRDialog.update();return false;" action="#">
|
||||
<div class="tabs">
|
||||
<ul>
|
||||
<li id="general_tab" class="current"><span><a href="javascript:mcTabs.displayTab('general_tab','general_panel');" onmousedown="return false;">{#advhr.advhr_desc}</a></span></li>
|
||||
<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 border="0" cellpadding="4" cellspacing="0">
|
||||
<tr>
|
||||
<td><label for="width">{#advhr_dlg.width}</label></td>
|
||||
<td class="nowrap">
|
||||
<input id="width" name="width" type="text" value="" class="mceFocus" />
|
||||
<select name="width2" id="width2">
|
||||
<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="">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>
|
||||
<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>
|
||||
|
||||
|
|
|
|||
0
library/tinymce/jscripts/tiny_mce/plugins/advimage/css/advimage.css
vendored
Executable file → Normal file
2
library/tinymce/jscripts/tiny_mce/plugins/advimage/editor_plugin.js
vendored
Executable file → Normal file
|
|
@ -1 +1 @@
|
|||
(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)})();
|
||||
(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)})();
|
||||
2
library/tinymce/jscripts/tiny_mce/plugins/advimage/editor_plugin_src.js
vendored
Executable file → Normal file
|
|
@ -14,7 +14,7 @@
|
|||
// Register commands
|
||||
ed.addCommand('mceAdvImage', function() {
|
||||
// Internal image object like a flash placeholder
|
||||
if (ed.dom.getAttrib(ed.selection.getNode(), 'class').indexOf('mceItem') != -1)
|
||||
if (ed.dom.getAttrib(ed.selection.getNode(), 'class', '').indexOf('mceItem') != -1)
|
||||
return;
|
||||
|
||||
ed.windowManager.open({
|
||||
|
|
|
|||
65
library/tinymce/jscripts/tiny_mce/plugins/advimage/image.htm
vendored
Executable file → Normal file
|
|
@ -10,13 +10,14 @@
|
|||
<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">
|
||||
<form onsubmit="ImageDialog.insert();return false;" action="#">
|
||||
<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"><span><a href="javascript:mcTabs.displayTab('general_tab','general_panel');" onmousedown="return false;">{#advimage_dlg.tab_general}</a></span></li>
|
||||
<li id="appearance_tab"><span><a href="javascript:mcTabs.displayTab('appearance_tab','appearance_panel');" onmousedown="return false;">{#advimage_dlg.tab_appearance}</a></span></li>
|
||||
<li id="advanced_tab"><span><a href="javascript:mcTabs.displayTab('advanced_tab','advanced_panel');" onmousedown="return false;">{#advimage_dlg.tab_advanced}</a></span></li>
|
||||
<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>
|
||||
|
||||
|
|
@ -25,15 +26,15 @@
|
|||
<fieldset>
|
||||
<legend>{#advimage_dlg.general}</legend>
|
||||
|
||||
<table class="properties">
|
||||
<table role="presentation" class="properties">
|
||||
<tr>
|
||||
<td class="column1"><label id="srclabel" for="src">{#advimage_dlg.src}</label></td>
|
||||
<td colspan="2"><table border="0" cellspacing="0" cellpadding="0">
|
||||
<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);" /></td>
|
||||
<td id="srcbrowsercontainer"> </td>
|
||||
<td><input name="src" type="text" id="src" value="" class="mceFocus" onchange="ImageDialog.showPreviewImage(this.value);" aria-required="true" /></td>
|
||||
<td id="srcbrowsercontainer"> </td>
|
||||
</tr>
|
||||
</table></td>
|
||||
</table></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><label for="src_list">{#advimage_dlg.image_list}</label></td>
|
||||
|
|
@ -60,7 +61,7 @@
|
|||
<fieldset>
|
||||
<legend>{#advimage_dlg.tab_appearance}</legend>
|
||||
|
||||
<table border="0" cellpadding="4" cellspacing="0">
|
||||
<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();">
|
||||
|
|
@ -86,17 +87,19 @@
|
|||
</td>
|
||||
</tr>
|
||||
|
||||
<tr>
|
||||
<tr role="group" aria-labelledby="widthlabel">
|
||||
<td class="column1"><label id="widthlabel" for="width">{#advimage_dlg.dimensions}</label></td>
|
||||
<td class="nowrap">
|
||||
<input name="width" type="text" id="width" value="" size="5" maxlength="5" class="size" onchange="ImageDialog.changeHeight();" /> x
|
||||
<input name="height" type="text" id="height" value="" size="5" maxlength="5" class="size" onchange="ImageDialog.changeWidth();" /> px
|
||||
<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> </td>
|
||||
<td><table border="0" cellpadding="0" cellspacing="0">
|
||||
<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>
|
||||
|
|
@ -142,18 +145,18 @@
|
|||
<fieldset>
|
||||
<legend>{#advimage_dlg.swap_image}</legend>
|
||||
|
||||
<input type="checkbox" id="onmousemovecheck" name="onmousemovecheck" class="checkbox" onclick="ImageDialog.setSwapImage(this.checked);" />
|
||||
<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 border="0" cellpadding="4" cellspacing="0" width="100%">
|
||||
<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 border="0" cellspacing="0" cellpadding="0">
|
||||
<td><table role="presentation" border="0" cellspacing="0" cellpadding="0">
|
||||
<tr>
|
||||
<td><input id="onmouseoversrc" name="onmouseoversrc" type="text" value="" /></td>
|
||||
<td id="onmouseoversrccontainer"> </td>
|
||||
<td><input id="onmouseoversrc" name="onmouseoversrc" type="text" value="" /></td>
|
||||
<td id="onmouseoversrccontainer"> </td>
|
||||
</tr>
|
||||
</table></td>
|
||||
</table></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><label for="over_list">{#advimage_dlg.image_list}</label></td>
|
||||
|
|
@ -161,12 +164,12 @@
|
|||
</tr>
|
||||
<tr>
|
||||
<td class="column1"><label id="onmouseoutsrclabel" for="onmouseoutsrc">{#advimage_dlg.mouseout}</label></td>
|
||||
<td class="column2"><table border="0" cellspacing="0" cellpadding="0">
|
||||
<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"> </td>
|
||||
<td><input id="onmouseoutsrc" name="onmouseoutsrc" type="text" value="" /></td>
|
||||
<td id="onmouseoutsrccontainer"> </td>
|
||||
</tr>
|
||||
</table></td>
|
||||
</table></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><label for="out_list">{#advimage_dlg.image_list}</label></td>
|
||||
|
|
@ -178,7 +181,7 @@
|
|||
<fieldset>
|
||||
<legend>{#advimage_dlg.misc}</legend>
|
||||
|
||||
<table border="0" cellpadding="4" cellspacing="0">
|
||||
<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>
|
||||
|
|
@ -211,12 +214,12 @@
|
|||
|
||||
<tr>
|
||||
<td class="column1"><label id="longdesclabel" for="longdesc">{#advimage_dlg.long_desc}</label></td>
|
||||
<td><table border="0" cellspacing="0" cellpadding="0">
|
||||
<td><table role="presentation" border="0" cellspacing="0" cellpadding="0">
|
||||
<tr>
|
||||
<td><input id="longdesc" name="longdesc" type="text" value="" /></td>
|
||||
<td id="longdesccontainer"> </td>
|
||||
<td><input id="longdesc" name="longdesc" type="text" value="" /></td>
|
||||
<td id="longdesccontainer"> </td>
|
||||
</tr>
|
||||
</table></td>
|
||||
</table></td>
|
||||
</tr>
|
||||
</table>
|
||||
</fieldset>
|
||||
|
|
@ -227,6 +230,6 @@
|
|||
<input type="submit" id="insert" name="insert" value="{#insert}" />
|
||||
<input type="button" id="cancel" name="cancel" value="{#cancel}" onclick="tinyMCEPopup.close();" />
|
||||
</div>
|
||||
</form>
|
||||
</form>
|
||||
</body>
|
||||
</html>
|
||||
|
|
|
|||
0
library/tinymce/jscripts/tiny_mce/plugins/advimage/img/sample.gif
vendored
Executable file → Normal file
|
Before Width: | Height: | Size: 1.6 KiB After Width: | Height: | Size: 1.6 KiB |
45
library/tinymce/jscripts/tiny_mce/plugins/advimage/js/image.js
vendored
Executable file → Normal file
|
|
@ -9,13 +9,13 @@ var ImageDialog = {
|
|||
},
|
||||
|
||||
init : function(ed) {
|
||||
var f = document.forms[0], nl = f.elements, ed = tinyMCEPopup.editor, dom = ed.dom, n = ed.selection.getNode();
|
||||
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', 'tinyMCEImageList');
|
||||
this.fillFileList('over_list', 'tinyMCEImageList');
|
||||
this.fillFileList('out_list', 'tinyMCEImageList');
|
||||
this.fillFileList('src_list', fl);
|
||||
this.fillFileList('over_list', fl);
|
||||
this.fillFileList('out_list', fl);
|
||||
TinyMCE_EditableSelects.init();
|
||||
|
||||
if (n.nodeName == 'IMG') {
|
||||
|
|
@ -142,7 +142,7 @@ var ImageDialog = {
|
|||
}
|
||||
|
||||
tinymce.extend(args, {
|
||||
src : nl.src.value,
|
||||
src : nl.src.value.replace(/ /g, '%20'),
|
||||
width : nl.width.value,
|
||||
height : nl.height.value,
|
||||
alt : nl.alt.value,
|
||||
|
|
@ -171,12 +171,18 @@ var ImageDialog = {
|
|||
if (el && el.nodeName == 'IMG') {
|
||||
ed.dom.setAttribs(el, args);
|
||||
} else {
|
||||
ed.execCommand('mceInsertContent', false, '<img id="__mce_tmp" />', {skip_undo : 1});
|
||||
ed.dom.setAttribs('__mce_tmp', args);
|
||||
ed.dom.setAttrib('__mce_tmp', 'id', '');
|
||||
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();
|
||||
},
|
||||
|
||||
|
|
@ -285,7 +291,7 @@ var ImageDialog = {
|
|||
fillFileList : function(id, l) {
|
||||
var dom = tinyMCEPopup.dom, lst = dom.get(id), v, cl;
|
||||
|
||||
l = window[l];
|
||||
l = typeof(l) === 'function' ? l() : window[l];
|
||||
lst.options.length = 0;
|
||||
|
||||
if (l && l.length > 0) {
|
||||
|
|
@ -359,7 +365,7 @@ var ImageDialog = {
|
|||
},
|
||||
|
||||
updateStyle : function(ty) {
|
||||
var dom = tinyMCEPopup.dom, st, v, f = document.forms[0], img = dom.create('img', {style : dom.get('style').value});
|
||||
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
|
||||
|
|
@ -378,14 +384,27 @@ var ImageDialog = {
|
|||
|
||||
// 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 = '0';
|
||||
else
|
||||
img.style.border = v + 'px solid black';
|
||||
img.style.border = isIE ? '0' : '0 none none';
|
||||
else {
|
||||
if (b.length == 3 && b[isIE ? 2 : 1])
|
||||
bStyle = b[isIE ? 2 : 1];
|
||||
else if (!bStyle || bStyle == 'none')
|
||||
bStyle = 'solid';
|
||||
if (b.length == 3 && b[isIE ? 0 : 2])
|
||||
bColor = b[isIE ? 0 : 2];
|
||||
else if (!bColor || bColor == 'none')
|
||||
bColor = 'black';
|
||||
img.style.border = v + 'px ' + bStyle + ' ' + bColor;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
44
library/tinymce/jscripts/tiny_mce/plugins/advimage/langs/en_dlg.js
vendored
Executable file → Normal file
|
|
@ -1,43 +1 @@
|
|||
tinyMCE.addI18n('en.advimage_dlg',{
|
||||
tab_general:"General",
|
||||
tab_appearance:"Appearance",
|
||||
tab_advanced:"Advanced",
|
||||
general:"General",
|
||||
title:"Title",
|
||||
preview:"Preview",
|
||||
constrain_proportions:"Constrain proportions",
|
||||
langdir:"Language direction",
|
||||
langcode:"Language code",
|
||||
long_desc:"Long description link",
|
||||
style:"Style",
|
||||
classes:"Classes",
|
||||
ltr:"Left to right",
|
||||
rtl:"Right to left",
|
||||
id:"Id",
|
||||
map:"Image map",
|
||||
swap_image:"Swap image",
|
||||
alt_image:"Alternative image",
|
||||
mouseover:"for mouse over",
|
||||
mouseout:"for mouse out",
|
||||
misc:"Miscellaneous",
|
||||
example_img:"Appearance preview 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.",
|
||||
dialog_title:"Insert/edit image",
|
||||
src:"Image URL",
|
||||
alt:"Image description",
|
||||
list:"Image list",
|
||||
border:"Border",
|
||||
dimensions:"Dimensions",
|
||||
vspace:"Vertical space",
|
||||
hspace:"Horizontal space",
|
||||
align:"Alignment",
|
||||
align_baseline:"Baseline",
|
||||
align_top:"Top",
|
||||
align_middle:"Middle",
|
||||
align_bottom:"Bottom",
|
||||
align_texttop:"Text top",
|
||||
align_textbottom:"Text bottom",
|
||||
align_left:"Left",
|
||||
align_right:"Right",
|
||||
image_list:"Image list"
|
||||
});
|
||||
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"});
|
||||
0
library/tinymce/jscripts/tiny_mce/plugins/advlink/css/advlink.css
vendored
Executable file → Normal file
0
library/tinymce/jscripts/tiny_mce/plugins/advlink/editor_plugin.js
vendored
Executable file → Normal file
0
library/tinymce/jscripts/tiny_mce/plugins/advlink/editor_plugin_src.js
vendored
Executable file → Normal file
49
library/tinymce/jscripts/tiny_mce/plugins/advlink/js/advlink.js
vendored
Executable file → Normal file
|
|
@ -30,8 +30,6 @@ function init() {
|
|||
|
||||
document.getElementById('hrefbrowsercontainer').innerHTML = getBrowserHTML('hrefbrowser','href','file','advlink');
|
||||
document.getElementById('popupurlbrowsercontainer').innerHTML = getBrowserHTML('popupurlbrowser','popupurl','file','advlink');
|
||||
document.getElementById('linklisthrefcontainer').innerHTML = getLinkListHTML('linklisthref','href');
|
||||
document.getElementById('anchorlistcontainer').innerHTML = getAnchorListHTML('anchorlist','href');
|
||||
document.getElementById('targetlistcontainer').innerHTML = getTargetListHTML('targetlist','target');
|
||||
|
||||
// Link list
|
||||
|
|
@ -41,6 +39,13 @@ function init() {
|
|||
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';
|
||||
|
|
@ -49,6 +54,13 @@ function init() {
|
|||
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";
|
||||
|
||||
|
|
@ -360,20 +372,22 @@ function setAttrib(elm, attrib, value) {
|
|||
}
|
||||
|
||||
function getAnchorListHTML(id, target) {
|
||||
var inst = tinyMCEPopup.editor;
|
||||
var nodes = inst.dom.select('a.mceItemAnchor,img.mceItemAnchor'), name, i;
|
||||
var html = "";
|
||||
var ed = tinyMCEPopup.editor, nodes = ed.dom.select('a'), name, i, len, html = "";
|
||||
|
||||
html += '<select id="' + id + '" name="' + id + '" class="mceAnchorList" o2nfocus="tinyMCE.addSelectAccessibility(event, this, window);" onchange="this.form.' + target + '.value=';
|
||||
html += 'this.options[this.selectedIndex].value;">';
|
||||
html += '<option value="">---</option>';
|
||||
|
||||
for (i=0; i<nodes.length; i++) {
|
||||
if ((name = inst.dom.getAttrib(nodes[i], "name")) != "")
|
||||
for (i=0, len=nodes.length; i<len; i++) {
|
||||
if ((name = ed.dom.getAttrib(nodes[i], "name")) != "")
|
||||
html += '<option value="#' + name + '">' + name + '</option>';
|
||||
}
|
||||
|
||||
html += '</select>';
|
||||
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;
|
||||
}
|
||||
|
|
@ -389,7 +403,6 @@ function insertAction() {
|
|||
|
||||
// Remove element if there is no href
|
||||
if (!document.forms[0].href.value) {
|
||||
tinyMCEPopup.execCommand("mceBeginUndoLevel");
|
||||
i = inst.selection.getBookmark();
|
||||
inst.dom.remove(elm, 1);
|
||||
inst.selection.moveToBookmark(i);
|
||||
|
|
@ -398,12 +411,10 @@ function insertAction() {
|
|||
return;
|
||||
}
|
||||
|
||||
tinyMCEPopup.execCommand("mceBeginUndoLevel");
|
||||
|
||||
// Create new anchor elements
|
||||
if (elm == null) {
|
||||
inst.getDoc().execCommand("unlink", false, null);
|
||||
tinyMCEPopup.execCommand("CreateLink", false, "#mce_temp_url#", {skip_undo : 1});
|
||||
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++)
|
||||
|
|
@ -425,7 +436,7 @@ function insertAction() {
|
|||
|
||||
function setAllAttribs(elm) {
|
||||
var formObj = document.forms[0];
|
||||
var href = formObj.href.value;
|
||||
var href = formObj.href.value.replace(/ /g, '%20');
|
||||
var target = getSelectValue(formObj, 'targetlist');
|
||||
|
||||
setAttrib(elm, 'href', href);
|
||||
|
|
@ -477,7 +488,7 @@ function getLinkListHTML(elm_id, target_form_element, onchange_func) {
|
|||
var html = "";
|
||||
|
||||
html += '<select id="' + elm_id + '" name="' + elm_id + '"';
|
||||
html += ' class="mceLinkList" onfoc2us="tinyMCE.addSelectAccessibility(event, this, window);" onchange="this.form.' + target_form_element + '.value=';
|
||||
html += ' class="mceLinkList" onchange="this.form.' + target_form_element + '.value=';
|
||||
html += 'this.options[this.selectedIndex].value;';
|
||||
|
||||
if (typeof(onchange_func) != "undefined")
|
||||
|
|
@ -499,7 +510,7 @@ 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 + '" onf2ocus="tinyMCE.addSelectAccessibility(event, this, window);" onchange="this.form.' + target_form_element + '.value=';
|
||||
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>';
|
||||
|
|
|
|||
53
library/tinymce/jscripts/tiny_mce/plugins/advlink/langs/en_dlg.js
vendored
Executable file → Normal file
|
|
@ -1,52 +1 @@
|
|||
tinyMCE.addI18n('en.advlink_dlg',{
|
||||
title:"Insert/edit link",
|
||||
url:"Link URL",
|
||||
target:"Target",
|
||||
titlefield:"Title",
|
||||
is_email:"The URL you entered seems to be an email address, do you want to add the required mailto: prefix?",
|
||||
is_external:"The URL you entered seems to external link, do you want to add the required http:// prefix?",
|
||||
list:"Link list",
|
||||
general_tab:"General",
|
||||
popup_tab:"Popup",
|
||||
events_tab:"Events",
|
||||
advanced_tab:"Advanced",
|
||||
general_props:"General properties",
|
||||
popup_props:"Popup properties",
|
||||
event_props:"Events",
|
||||
advanced_props:"Advanced properties",
|
||||
popup_opts:"Options",
|
||||
anchor_names:"Anchors",
|
||||
target_same:"Open in this window / frame",
|
||||
target_parent:"Open in parent window / frame",
|
||||
target_top:"Open in top frame (replaces all frames)",
|
||||
target_blank:"Open in new window",
|
||||
popup:"Javascript popup",
|
||||
popup_url:"Popup URL",
|
||||
popup_name:"Window name",
|
||||
popup_return:"Insert 'return false'",
|
||||
popup_scrollbars:"Show scrollbars",
|
||||
popup_statusbar:"Show status bar",
|
||||
popup_toolbar:"Show toolbars",
|
||||
popup_menubar:"Show menu bar",
|
||||
popup_location:"Show location bar",
|
||||
popup_resizable:"Make window resizable",
|
||||
popup_dependent:"Dependent (Mozilla/Firefox only)",
|
||||
popup_size:"Size",
|
||||
popup_position:"Position (X/Y)",
|
||||
id:"Id",
|
||||
style:"Style",
|
||||
classes:"Classes",
|
||||
target_name:"Target name",
|
||||
langdir:"Language direction",
|
||||
target_langcode:"Target language",
|
||||
langcode:"Language code",
|
||||
encoding:"Target character encoding",
|
||||
mime:"Target MIME type",
|
||||
rel:"Relationship page to target",
|
||||
rev:"Relationship target to page",
|
||||
tabindex:"Tabindex",
|
||||
accesskey:"Accesskey",
|
||||
ltr:"Left to right",
|
||||
rtl:"Right to left",
|
||||
link_list:"Link list"
|
||||
});
|
||||
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"});
|
||||
65
library/tinymce/jscripts/tiny_mce/plugins/advlink/link.htm
vendored
Executable file → Normal file
|
|
@ -9,37 +9,38 @@
|
|||
<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">
|
||||
<form onsubmit="insertAction();return false;" action="#">
|
||||
<div class="tabs">
|
||||
<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"><span><a href="javascript:mcTabs.displayTab('general_tab','general_panel');" onmousedown="return false;">{#advlink_dlg.general_tab}</a></span></li>
|
||||
<li id="popup_tab"><span><a href="javascript:mcTabs.displayTab('popup_tab','popup_panel');" onmousedown="return false;">{#advlink_dlg.popup_tab}</a></span></li>
|
||||
<li id="events_tab"><span><a href="javascript:mcTabs.displayTab('events_tab','events_panel');" onmousedown="return false;">{#advlink_dlg.events_tab}</a></span></li>
|
||||
<li id="advanced_tab"><span><a href="javascript:mcTabs.displayTab('advanced_tab','advanced_panel');" onmousedown="return false;">{#advlink_dlg.advanced_tab}</a></span></li>
|
||||
<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">
|
||||
<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">
|
||||
<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);" /></td>
|
||||
<td id="hrefbrowsercontainer"> </td>
|
||||
</tr>
|
||||
</table></td>
|
||||
<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"> </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>
|
||||
<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>
|
||||
|
|
@ -70,7 +71,7 @@
|
|||
<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">
|
||||
<table border="0" cellpadding="0" cellspacing="4" role="presentation" >
|
||||
<tr>
|
||||
<td class="nowrap"><label for="popupurl">{#advlink_dlg.popup_url}</label> </td>
|
||||
<td>
|
||||
|
|
@ -86,18 +87,22 @@
|
|||
<td class="nowrap"><label for="popupname">{#advlink_dlg.popup_name}</label> </td>
|
||||
<td><input type="text" name="popupname" id="popupname" value="" onchange="buildOnClick();" /></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="nowrap"><label>{#advlink_dlg.popup_size}</label> </td>
|
||||
<tr role="group" aria-labelledby="popup_size_label">
|
||||
<td class="nowrap"><label id="popup_size_label">{#advlink_dlg.popup_size}</label> </td>
|
||||
<td class="nowrap">
|
||||
<input type="text" id="popupwidth" name="popupwidth" value="" onchange="buildOnClick();" /> x
|
||||
<input type="text" id="popupheight" name="popupheight" value="" onchange="buildOnClick();" /> px
|
||||
<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>
|
||||
<td class="nowrap" id="labelleft"><label>{#advlink_dlg.popup_position}</label> </td>
|
||||
<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> </td>
|
||||
<td class="nowrap">
|
||||
<input type="text" id="popupleft" name="popupleft" value="" onchange="buildOnClick();" /> /
|
||||
<input type="text" id="popuptop" name="popuptop" value="" onchange="buildOnClick();" /> (c /c = center)
|
||||
<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>
|
||||
|
|
@ -105,7 +110,7 @@
|
|||
<fieldset>
|
||||
<legend>{#advlink_dlg.popup_opts}</legend>
|
||||
|
||||
<table border="0" cellpadding="0" cellspacing="4">
|
||||
<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>
|
||||
|
|
@ -139,7 +144,7 @@
|
|||
<fieldset>
|
||||
<legend>{#advlink_dlg.advanced_props}</legend>
|
||||
|
||||
<table border="0" cellpadding="0" cellspacing="4">
|
||||
<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>
|
||||
|
|
@ -259,7 +264,7 @@
|
|||
<fieldset>
|
||||
<legend>{#advlink_dlg.event_props}</legend>
|
||||
|
||||
<table border="0" cellpadding="0" cellspacing="4">
|
||||
<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>
|
||||
|
|
@ -328,6 +333,6 @@
|
|||
<input type="submit" id="insert" name="insert" value="{#insert}" />
|
||||
<input type="button" id="cancel" name="cancel" value="{#cancel}" onclick="tinyMCEPopup.close();" />
|
||||
</div>
|
||||
</form>
|
||||
</form>
|
||||
</body>
|
||||
</html>
|
||||
|
|
|
|||
2
library/tinymce/jscripts/tiny_mce/plugins/advlist/editor_plugin.js
vendored
Executable file → Normal file
|
|
@ -1 +1 @@
|
|||
(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")},createControl:function(d,b){var f=this,e,h;if(d=="numlist"||d=="bullist"){if(f[d][0].title=="advlist.def"){h=f[d][0]}function c(i,k){var j=true;a(k.styles,function(m,l){if(f.editor.dom.getStyle(i,l)!=m){j=false;return false}});return j}function g(){var k,i=f.editor,l=i.dom,j=i.selection;k=l.getParent(j.getNode(),"ol,ul");if(!k||k.nodeName==(d=="bullist"?"OL":"UL")||c(k,h)){i.execCommand(d=="bullist"?"InsertUnorderedList":"InsertOrderedList")}if(h){k=l.getParent(j.getNode(),"ol,ul");if(k){l.setStyles(k,h.styles);k.removeAttribute("_mce_style")}}}e=b.createSplitButton(d,{title:"advanced."+d+"_desc","class":"mce_"+d,onclick:function(){g()}});e.onRenderMenu.add(function(i,j){j.onShowMenu.add(function(){var m=f.editor.dom,l=m.getParent(f.editor.selection.getNode(),"ol,ul"),k;if(l||h){k=f[d];a(j.items,function(n){var o=true;n.setSelected(0);if(l&&!n.isDisabled()){a(k,function(p){if(p.id==n.id){if(!c(l,p)){o=false;return false}}});if(o){n.setSelected(1)}}});if(!l){j.items[h.id].setSelected(1)}}});j.add({id:f.editor.dom.uniqueId(),title:"advlist.types","class":"mceMenuItemTitle"}).setDisabled(1);a(f[d],function(k){k.id=f.editor.dom.uniqueId();j.add({id:k.id,title:k.title,onclick:function(){h=k;g()}})})});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)})();
|
||||
(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)})();
|
||||
40
library/tinymce/jscripts/tiny_mce/plugins/advlist/editor_plugin_src.js
vendored
Executable file → Normal file
|
|
@ -35,10 +35,13 @@
|
|||
// 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;
|
||||
var t = this, btn, format, editor = t.editor;
|
||||
|
||||
if (name == 'numlist' || name == 'bullist') {
|
||||
// Default to first item if it's a default item
|
||||
|
|
@ -50,7 +53,7 @@
|
|||
|
||||
each(format.styles, function(value, name) {
|
||||
// Format doesn't match
|
||||
if (t.editor.dom.getStyle(node, name) != value) {
|
||||
if (editor.dom.getStyle(node, name) != value) {
|
||||
state = false;
|
||||
return false;
|
||||
}
|
||||
|
|
@ -60,24 +63,25 @@
|
|||
};
|
||||
|
||||
function applyListFormat() {
|
||||
var list, ed = t.editor, dom = ed.dom, sel = ed.selection;
|
||||
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))
|
||||
ed.execCommand(name == 'bullist' ? 'InsertUnorderedList' : 'InsertOrderedList');
|
||||
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('_mce_style');
|
||||
list.removeAttribute('data-mce-style');
|
||||
}
|
||||
}
|
||||
|
||||
editor.focus();
|
||||
};
|
||||
|
||||
btn = cm.createSplitButton(name, {
|
||||
|
|
@ -89,8 +93,15 @@
|
|||
});
|
||||
|
||||
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 = t.editor.dom, list = dom.getParent(t.editor.selection.getNode(), 'ol,ul'), fmtList;
|
||||
var dom = editor.dom, list = dom.getParent(editor.selection.getNode(), 'ol,ul'), fmtList;
|
||||
|
||||
if (list || format) {
|
||||
fmtList = t[name];
|
||||
|
|
@ -120,12 +131,23 @@
|
|||
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 : t.editor.dom.uniqueId(), title : 'advlist.types', 'class' : 'mceMenuItemTitle'}).setDisabled(1);
|
||||
menu.add({id : editor.dom.uniqueId(), title : 'advlist.types', 'class' : 'mceMenuItemTitle', titleItem: true}).setDisabled(1);
|
||||
|
||||
each(t[name], function(item) {
|
||||
item.id = t.editor.dom.uniqueId();
|
||||
// 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;
|
||||
|
|
|
|||
1
library/tinymce/jscripts/tiny_mce/plugins/autolink/editor_plugin.js
vendored
Normal file
|
|
@ -0,0 +1 @@
|
|||
(function(){tinymce.create("tinymce.plugins.AutolinkPlugin",{init:function(a,b){var c=this;if(tinyMCE.isIE){return}a.onKeyDown.add(function(d,f){if(f.keyCode==13){return c.handleEnter(d)}});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().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}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);a.setEnd(n,f-1);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)}}m=a.toString();h=m.match(/^(https?:\/\/|ssh:\/\/|ftp:\/\/|file:\/|www\.|[A-Z0-9._%+-]+@)(.+)$/i);if(h){if(h[1]=="www."){h[1]="http://www."}else{if(/@$/.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);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)})();
|
||||
174
library/tinymce/jscripts/tiny_mce/plugins/autolink/editor_plugin_src.js
vendored
Normal file
|
|
@ -0,0 +1,174 @@
|
|||
/**
|
||||
* 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;
|
||||
|
||||
// Internet Explorer has built-in automatic linking
|
||||
if (tinyMCE.isIE)
|
||||
return;
|
||||
|
||||
// Add a key down handler
|
||||
ed.onKeyDown.add(function(ed, e) {
|
||||
if (e.keyCode == 13)
|
||||
return t.handleEnter(ed);
|
||||
});
|
||||
|
||||
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().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;
|
||||
|
||||
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);
|
||||
r.setEnd(endContainer, end - 1);
|
||||
end -= 1;
|
||||
|
||||
// Loop until one of the following is found: a blank space, , 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);
|
||||
}
|
||||
|
||||
text = r.toString();
|
||||
matches = text.match(/^(https?:\/\/|ssh:\/\/|ftp:\/\/|file:\/|www\.|[A-Z0-9._%+-]+@)(.+)$/i);
|
||||
|
||||
if (matches) {
|
||||
if (matches[1] == 'www.') {
|
||||
matches[1] = 'http://www.';
|
||||
} else if (/@$/.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);
|
||||
|
||||
// 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);
|
||||
})();
|
||||
2
library/tinymce/jscripts/tiny_mce/plugins/autoresize/editor_plugin.js
vendored
Executable file → Normal file
|
|
@ -1 +1 @@
|
|||
(function(){tinymce.create("tinymce.plugins.AutoResizePlugin",{init:function(a,c){var d=this;if(a.getParam("fullscreen_is_enabled")){return}function b(){var h=a.getDoc(),e=h.body,j=h.documentElement,g=tinymce.DOM,i=d.autoresize_min_height,f;f=tinymce.isIE?e.scrollHeight:j.offsetHeight;if(f>d.autoresize_min_height){i=f}g.setStyle(g.get(a.id+"_ifr"),"height",i+"px");if(d.throbbing){a.setProgressState(false);a.setProgressState(true)}}d.editor=a;d.autoresize_min_height=a.getElement().offsetHeight;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.onInit.add(function(f,e){f.setProgressState(true);d.throbbing=true;f.getBody().style.overflowY="hidden"});a.onLoadContent.add(function(f,e){b();setTimeout(function(){b();f.setProgressState(false);d.throbbing=false},1250)})}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)})();
|
||||
(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)})();
|
||||
68
library/tinymce/jscripts/tiny_mce/plugins/autoresize/editor_plugin_src.js
vendored
Executable file → Normal file
|
|
@ -26,7 +26,7 @@
|
|||
* @param {string} url Absolute URL to where the plugin is located.
|
||||
*/
|
||||
init : function(ed, url) {
|
||||
var t = this;
|
||||
var t = this, oldSize = 0;
|
||||
|
||||
if (ed.getParam('fullscreen_is_enabled'))
|
||||
return;
|
||||
|
|
@ -35,29 +35,51 @@
|
|||
* This method gets executed each time the editor needs to resize.
|
||||
*/
|
||||
function resize() {
|
||||
var d = ed.getDoc(), b = d.body, de = d.documentElement, DOM = tinymce.DOM, resizeHeight = t.autoresize_min_height, myHeight;
|
||||
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 ? b.scrollHeight : de.offsetHeight;
|
||||
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;
|
||||
|
||||
// Resize content element
|
||||
DOM.setStyle(DOM.get(ed.id + '_ifr'), 'height', resizeHeight + 'px');
|
||||
// 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;
|
||||
}
|
||||
|
||||
// if we're throbbing, we'll re-throb to match the new size
|
||||
if (t.throbbing) {
|
||||
ed.setProgressState(false);
|
||||
ed.setProgressState(true);
|
||||
// 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 = ed.getElement().offsetHeight;
|
||||
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);
|
||||
|
|
@ -67,30 +89,8 @@
|
|||
ed.onPostRender.add(resize);
|
||||
|
||||
if (ed.getParam('autoresize_on_init', true)) {
|
||||
// Things to do when the editor is ready
|
||||
ed.onInit.add(function(ed, l) {
|
||||
// Show throbber until content area is resized properly
|
||||
ed.setProgressState(true);
|
||||
t.throbbing = true;
|
||||
|
||||
// Hide scrollbars
|
||||
ed.getBody().style.overflowY = "hidden";
|
||||
});
|
||||
|
||||
ed.onLoadContent.add(function(ed, l) {
|
||||
resize();
|
||||
|
||||
// Because the content area resizes when its content CSS loads,
|
||||
// and we can't easily add a listener to its onload event,
|
||||
// we'll just trigger a resize after a short loading period
|
||||
setTimeout(function() {
|
||||
resize();
|
||||
|
||||
// Disable throbber
|
||||
ed.setProgressState(false);
|
||||
t.throbbing = false;
|
||||
}, 1250);
|
||||
});
|
||||
ed.onLoad.add(resize);
|
||||
ed.onLoadContent.add(resize);
|
||||
}
|
||||
|
||||
// Register the command so that it can be invoked by using tinyMCE.activeEditor.execCommand('mceExample');
|
||||
|
|
|
|||
2
library/tinymce/jscripts/tiny_mce/plugins/autosave/editor_plugin.js
vendored
Executable file → Normal file
|
|
@ -1 +1 @@
|
|||
(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().replace(/\s| |<\/?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(){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();m.save("TinyMCE")},getItem:function(l){var m=i.getElement();m.load("TinyMCE");return m.getAttribute(l)},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();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,i=h.storage;if(i){content=i.getItem(h.key);if(content){h.editor.setContent(content);h.onRestoreDraft.dispatch(h,{content:content})}}},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);
|
||||
(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| |<\/?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(){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);
|
||||
23
library/tinymce/jscripts/tiny_mce/plugins/autosave/editor_plugin_src.js
vendored
Executable file → Normal file
|
|
@ -106,7 +106,7 @@
|
|||
ed.addButton(RESTORE_DRAFT, {
|
||||
title : PLUGIN_NAME + ".restore_content",
|
||||
onclick : function() {
|
||||
if (ed.getContent().replace(/\s| |<\/?p[^>]*>|<br[^>]*>/gi, "").length > 0) {
|
||||
if (ed.getContent({draft: true}).replace(/\s| |<\/?p[^>]*>|<br[^>]*>/gi, "").length > 0) {
|
||||
// Show confirm dialog if the editor isn't empty
|
||||
ed.windowManager.confirm(
|
||||
PLUGIN_NAME + ".warning_message",
|
||||
|
|
@ -257,15 +257,24 @@
|
|||
|
||||
userDataElement.setAttribute(key, value);
|
||||
userDataElement.expires = self.getExpDate();
|
||||
userDataElement.save("TinyMCE");
|
||||
|
||||
try {
|
||||
userDataElement.save("TinyMCE");
|
||||
} catch (e) {
|
||||
// Ignore, saving might fail if "Userdata Persistence" is disabled in IE
|
||||
}
|
||||
},
|
||||
|
||||
getItem : function(key) {
|
||||
var userDataElement = ed.getElement();
|
||||
|
||||
userDataElement.load("TinyMCE");
|
||||
|
||||
return userDataElement.getAttribute(key);
|
||||
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) {
|
||||
|
|
@ -303,7 +312,7 @@
|
|||
return;
|
||||
|
||||
// Store contents if the contents if longer than the minlength of characters
|
||||
content = editor.getContent();
|
||||
content = editor.getContent({draft: true});
|
||||
if (content.length > editor.settings.autosave_minlength) {
|
||||
expires = self.getExpDate();
|
||||
|
||||
|
|
@ -326,7 +335,7 @@
|
|||
* @method restoreDraft
|
||||
*/
|
||||
restoreDraft : function() {
|
||||
var self = this, storage = self.storage;
|
||||
var self = this, storage = self.storage, content;
|
||||
|
||||
if (storage) {
|
||||
content = storage.getItem(self.key);
|
||||
|
|
|
|||
0
library/tinymce/jscripts/tiny_mce/plugins/autosave/langs/en.js
vendored
Executable file → Normal file
156
library/tinymce/jscripts/tiny_mce/plugins/bbcode/editor_plugin.js
vendored
Executable file → Normal file
|
|
@ -1,155 +1 @@
|
|||
/**
|
||||
* 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
|
||||
*/
|
||||
|
||||
/* Macgirvin Aug-2010 changed from punbb to dfrn dialect */
|
||||
|
||||
(function() {
|
||||
tinymce.create('tinymce.plugins.BBCodePlugin', {
|
||||
init : function(ed, url) {
|
||||
var t = this, dialect = ed.getParam('bbcode_dialect', 'dfrn').toLowerCase();
|
||||
|
||||
ed.onBeforeSetContent.add(function(ed, o) {
|
||||
o.content = t['_' + dialect + '_bbcode2html'](o.content);
|
||||
});
|
||||
|
||||
ed.onPostProcess.add(function(ed, o) {
|
||||
if (o.set)
|
||||
o.content = t['_' + dialect + '_bbcode2html'](o.content);
|
||||
|
||||
if (o.get)
|
||||
o.content = t['_' + dialect + '_html2bbcode'](o.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
|
||||
};
|
||||
},
|
||||
|
||||
// Private methods
|
||||
|
||||
// HTML -> BBCode in DFRN dialect
|
||||
_dfrn_html2bbcode : function(s) {
|
||||
s = tinymce.trim(s);
|
||||
|
||||
function rep(re, str) {
|
||||
s = s.replace(re, str);
|
||||
};
|
||||
|
||||
|
||||
|
||||
|
||||
/* oembed */
|
||||
function _h2b_cb(match) {
|
||||
text = bin2hex(match);
|
||||
function s_h2b(data) {
|
||||
match = data;
|
||||
}
|
||||
$.ajax({
|
||||
url: 'oembed/h2b?text=' + text,
|
||||
async: false,
|
||||
success: s_h2b,
|
||||
dataType: 'html'
|
||||
});
|
||||
return match;
|
||||
}
|
||||
s = s.replace(/<span class=\"oembed(.*?)<\/span>/gi, _h2b_cb);
|
||||
/* /oembed */
|
||||
|
||||
|
||||
// example: <strong> to [b]
|
||||
rep(/<a.*?href=\"(.*?)\".*?>(.*?)<\/a>/gi,"[url=$1]$2[/url]");
|
||||
rep(/<span style=\"font-size:(.*?);\">(.*?)<\/span>/gi,"[size=$1]$2[/size]");
|
||||
rep(/<span style=\"color:(.*?);\">(.*?)<\/span>/gi,"[color=$1]$2[/color]");
|
||||
rep(/<font>(.*?)<\/font>/gi,"$1");
|
||||
rep(/<img.*?width=\"(.*?)\".*?height=\"(.*?)\".*?src=\"(.*?)\".*?\/>/gi,"[img=$1x$2]$3[/img]");
|
||||
rep(/<img.*?height=\"(.*?)\".*?width=\"(.*?)\".*?src=\"(.*?)\".*?\/>/gi,"[img=$2x$1]$3[/img]");
|
||||
rep(/<img.*?src=\"(.*?)\".*?height=\"(.*?)\".*?width=\"(.*?)\".*?\/>/gi,"[img=$3x$2]$1[/img]");
|
||||
rep(/<img.*?src=\"(.*?)\".*?width=\"(.*?)\".*?height=\"(.*?)\".*?\/>/gi,"[img=$2x$3]$1[/img]");
|
||||
rep(/<img.*?src=\"(.*?)\".*?\/>/gi,"[img]$1[/img]");
|
||||
rep(/<code>(.*?)<\/code>/gi,"[code]$1[/code]");
|
||||
rep(/<\/(strong|b)>/gi,"[/b]");
|
||||
rep(/<(strong|b)>/gi,"[b]");
|
||||
rep(/<\/(em|i)>/gi,"[/i]");
|
||||
rep(/<(em|i)>/gi,"[i]");
|
||||
rep(/<\/u>/gi,"[/u]");
|
||||
rep(/<span style=\"text-decoration: ?underline;\">(.*?)<\/span>/gi,"[u]$1[/u]");
|
||||
rep(/<u>/gi,"[u]");
|
||||
rep(/<blockquote[^>]*>/gi,"[quote]");
|
||||
rep(/<\/blockquote>/gi,"[/quote]");
|
||||
rep(/<br \/>/gi,"\n\n");
|
||||
rep(/<br\/>/gi,"\n\n");
|
||||
rep(/<br>/gi,"\n");
|
||||
rep(/<p>/gi,"");
|
||||
rep(/<\/p>/gi,"\n");
|
||||
rep(/ /gi," ");
|
||||
rep(/"/gi,"\"");
|
||||
rep(/</gi,"<");
|
||||
rep(/>/gi,">");
|
||||
rep(/&/gi,"&");
|
||||
|
||||
return s;
|
||||
},
|
||||
|
||||
// BBCode -> HTML from DFRN dialect
|
||||
_dfrn_bbcode2html : function(s) {
|
||||
s = tinymce.trim(s);
|
||||
|
||||
function rep(re, str) {
|
||||
s = s.replace(re, str);
|
||||
};
|
||||
|
||||
// example: [b] to <strong>
|
||||
rep(/\n/gi,"<br />");
|
||||
rep(/\[b\]/gi,"<strong>");
|
||||
rep(/\[\/b\]/gi,"</strong>");
|
||||
rep(/\[i\]/gi,"<em>");
|
||||
rep(/\[\/i\]/gi,"</em>");
|
||||
rep(/\[u\]/gi,"<u>");
|
||||
rep(/\[\/u\]/gi,"</u>");
|
||||
rep(/\[url=([^\]]+)\](.*?)\[\/url\]/gi,"<a href=\"$1\">$2</a>");
|
||||
rep(/\[url\](.*?)\[\/url\]/gi,"<a href=\"$1\">$1</a>");
|
||||
rep(/\[img=(.*?)x(.*?)\](.*?)\[\/img\]/gi,"<img width=\"$1\" height=\"$2\" src=\"$3\" />");
|
||||
rep(/\[img\](.*?)\[\/img\]/gi,"<img src=\"$1\" />");
|
||||
rep(/\[color=(.*?)\](.*?)\[\/color\]/gi,"<span style=\"color: $1;\">$2</span>");
|
||||
rep(/\[size=(.*?)\](.*?)\[\/size\]/gi,"<span style=\"font-size: $1;\">$2</span>");
|
||||
rep(/\[code\](.*?)\[\/code\]/gi,"<code>$1</code>");
|
||||
rep(/\[quote.*?\](.*?)\[\/quote\]/gi,"<blockquote>$1</blockquote>");
|
||||
|
||||
/* oembed */
|
||||
function _b2h_cb(match, url) {
|
||||
url = bin2hex(url);
|
||||
function s_b2h(data) {
|
||||
match = data;
|
||||
}
|
||||
$.ajax({
|
||||
url: 'oembed/b2h?url=' + url,
|
||||
async: false,
|
||||
success: s_b2h,
|
||||
dataType: 'html'
|
||||
});
|
||||
return match;
|
||||
}
|
||||
s = s.replace(/\[embed\](.*?)\[\/embed\]/gi, _b2h_cb);
|
||||
|
||||
/* /oembed */
|
||||
|
||||
return s;
|
||||
}
|
||||
});
|
||||
|
||||
// Register plugin
|
||||
tinymce.PluginManager.add('bbcode', tinymce.plugins.BBCodePlugin);
|
||||
})();
|
||||
(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(/ |\u00a0/gi," ");b(/"/gi,'"');b(/</gi,"<");b(/>/gi,">");b(/&/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> ');b(/\[quote.*?\](.*?)\[\/quote\]/gi,'<span class="quoteStyle">$1</span> ');return a}});tinymce.PluginManager.add("bbcode",tinymce.plugins.BBCodePlugin)})();
|
||||
|
|
@ -1 +0,0 @@
|
|||
(function(){tinymce.create('tinymce.plugins.BBCodePlugin',{init:function(ed,url){var t=this,dialect=ed.getParam('bbcode_dialect','dfrn').toLowerCase();ed.onBeforeSetContent.add(function(ed,o){o.content=t['_'+dialect+'_bbcode2html'](o.content)});ed.onPostProcess.add(function(ed,o){if(o.set)o.content=t['_'+dialect+'_bbcode2html'](o.content);if(o.get)o.content=t['_'+dialect+'_html2bbcode'](o.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 version:tinymce.majorVersion+"."+tinymce.minorVersion}},_dfrn_html2bbcode:function(s){s=tinymce.trim(s);function rep(re,str){s=s.replace(re,str)};rep(/<a.*?href=\"(.*?)\".*?>(.*?)<\/a>/gi,"[url=$1]$2[/url]");rep(/<span style=\"font-size:(.*?);\">(.*?)<\/span>/gi,"[size=$1]$2[/size]");rep(/<font>(.*?)<\/font>/gi,"$1");rep(/<img.*?src=\"(.*?)\".*?\/>/gi,"[img]$1[/img]");rep(/<code>(.*?)<\/code>/gi,"[code]$1[/code]");rep(/<\/(strong|b)>/gi,"[/b]");rep(/<(strong|b)>/gi,"[b]");rep(/<\/(em|i)>/gi,"[/i]");rep(/<(em|i)>/gi,"[i]");rep(/<\/u>/gi,"[/u]");rep(/<span style=\"text-decoration: ?underline;\">(.*?)<\/span>/gi,"[u]$1[/u]");rep(/<u>/gi,"[u]");rep(/<blockquote[^>]*>/gi,"[quote]");rep(/<\/blockquote>/gi,"[/quote]");rep(/<br \/>/gi,"\n");rep(/<br\/>/gi,"\n");rep(/<br>/gi,"\n");rep(/<p>/gi,"");rep(/<\/p>/gi,"\n");rep(/ /gi," ");rep(/"/gi,"\"");rep(/</gi,"<");rep(/>/gi,">");rep(/&/gi,"&");return s},_dfrn_bbcode2html:function(s){s=tinymce.trim(s);function rep(re,str){s=s.replace(re,str)};rep(/\n/gi,"<br />");rep(/\[b\]/gi,"<strong>");rep(/\[\/b\]/gi,"</strong>");rep(/\[i\]/gi,"<em>");rep(/\[\/i\]/gi,"</em>");rep(/\[u\]/gi,"<u>");rep(/\[\/u\]/gi,"</u>");rep(/\[url=([^\]]+)\](.*?)\[\/url\]/gi,"<a href=\"$1\">$2</a>");rep(/\[url\](.*?)\[\/url\]/gi,"<a href=\"$1\">$1</a>");rep(/\[img\](.*?)\[\/img\]/gi,"<img src=\"$1\" />");rep(/\[color=(.*?)\](.*?)\[\/color\]/gi,"<font color=\"$1\">$2</font>");rep(/\[code\](.*?)\[\/code\]/gi,"<code>$1</code>");rep(/\[quote.*?\](.*?)\[\/quote\]/gi,"<blockquote>$1</blockquote>");return s}});tinymce.PluginManager.add('bbcode',tinymce.plugins.BBCodePlugin)})();
|
||||
0
library/tinymce/jscripts/tiny_mce/plugins/bbcode/editor_plugin_src.js
vendored
Executable file → Normal file
2
library/tinymce/jscripts/tiny_mce/plugins/contextmenu/editor_plugin.js
vendored
Executable file → Normal file
|
|
@ -1 +1 @@
|
|||
(function(){var a=tinymce.dom.Event,c=tinymce.each,b=tinymce.DOM;tinymce.create("tinymce.plugins.ContextMenu",{init:function(d){var f=this,g;f.editor=d;f.onContextMenu=new tinymce.util.Dispatcher(this);d.onContextMenu.add(function(h,i){if(!i.ctrlKey){if(g){h.selection.setRng(g)}f._getMenu(h).showMenu(i.clientX,i.clientY);a.add(h.getDoc(),"click",function(j){e(h,j)});a.cancel(i)}});d.onRemove.add(function(){if(f._menu){f._menu.removeAll()}});function e(h,i){g=null;if(i&&i.button==2){g=h.selection.getRng();return}if(f._menu){f._menu.removeAll();f._menu.destroy();a.remove(h.getDoc(),"click",e)}}d.onMouseDown.add(e);d.onKeyDown.add(e)},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(h){var l=this,f=l._menu,i=h.selection,e=i.isCollapsed(),d=i.getNode()||h.getBody(),g,k,j;if(f){f.removeAll();f.destroy()}k=b.getPos(h.getContentAreaContainer());j=b.getPos(h.getContainer());f=h.controlManager.createDropMenu("contextmenu",{offset_x:k.x+h.getParam("contextmenu_offset_x",0),offset_y:k.y+h.getParam("contextmenu_offset_y",0),constrain:1});l._menu=f;f.add({title:"advanced.cut_desc",icon:"cut",cmd:"Cut"}).setDisabled(e);f.add({title:"advanced.copy_desc",icon:"copy",cmd:"Copy"}).setDisabled(e);f.add({title:"advanced.paste_desc",icon:"paste",cmd:"Paste"});if((d.nodeName=="A"&&!h.dom.getAttrib(d,"name"))||!e){f.addSeparator();f.add({title:"advanced.link_desc",icon:"link",cmd:h.plugins.advlink?"mceAdvLink":"mceLink",ui:true});f.add({title:"advanced.unlink_desc",icon:"unlink",cmd:"UnLink"})}f.addSeparator();f.add({title:"advanced.image_desc",icon:"image",cmd:h.plugins.advimage?"mceAdvImage":"mceImage",ui:true});f.addSeparator();g=f.addMenu({title:"contextmenu.align"});g.add({title:"contextmenu.left",icon:"justifyleft",cmd:"JustifyLeft"});g.add({title:"contextmenu.center",icon:"justifycenter",cmd:"JustifyCenter"});g.add({title:"contextmenu.right",icon:"justifyright",cmd:"JustifyRight"});g.add({title:"contextmenu.full",icon:"justifyfull",cmd:"JustifyFull"});l.onContextMenu.dispatch(l,f,d,e);return f}});tinymce.PluginManager.add("contextmenu",tinymce.plugins.ContextMenu)})();
|
||||
(function(){var a=tinymce.dom.Event,c=tinymce.each,b=tinymce.DOM;tinymce.create("tinymce.plugins.ContextMenu",{init:function(e){var h=this,f,d,i;h.editor=e;d=e.settings.contextmenu_never_use_native;h.onContextMenu=new tinymce.util.Dispatcher(this);f=e.onContextMenu.add(function(j,k){if((i!==0?i:k.ctrlKey)&&!d){return}a.cancel(k);if(k.target.nodeName=="IMG"){j.selection.select(k.target)}h._getMenu(j).showMenu(k.clientX||k.pageX,k.clientY||k.pageY);a.add(j.getDoc(),"click",function(l){g(j,l)});j.nodeChanged()});e.onRemove.add(function(){if(h._menu){h._menu.removeAll()}});function g(j,k){i=0;if(k&&k.button==2){i=k.ctrlKey;return}if(h._menu){h._menu.removeAll();h._menu.destroy();a.remove(j.getDoc(),"click",g);h._menu=null}}e.onMouseDown.add(g);e.onKeyDown.add(g);e.onKeyDown.add(function(j,k){if(k.shiftKey&&!k.ctrlKey&&!k.altKey&&k.keyCode===121){a.cancel(k);f(j,k)}})},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)})();
|
||||
54
library/tinymce/jscripts/tiny_mce/plugins/contextmenu/editor_plugin_src.js
vendored
Executable file → Normal file
|
|
@ -27,10 +27,12 @@
|
|||
* @param {string} url Absolute URL to where the plugin is located.
|
||||
*/
|
||||
init : function(ed) {
|
||||
var t = this, lastRng;
|
||||
var t = this, showMenu, contextmenuNeverUseNative, realCtrlKey;
|
||||
|
||||
t.editor = ed;
|
||||
|
||||
contextmenuNeverUseNative = ed.settings.contextmenu_never_use_native;
|
||||
|
||||
/**
|
||||
* This event gets fired when the context menu is shown.
|
||||
*
|
||||
|
|
@ -40,18 +42,23 @@
|
|||
*/
|
||||
t.onContextMenu = new tinymce.util.Dispatcher(this);
|
||||
|
||||
ed.onContextMenu.add(function(ed, e) {
|
||||
if (!e.ctrlKey) {
|
||||
// Restore the last selection since it was removed
|
||||
if (lastRng)
|
||||
ed.selection.setRng(lastRng);
|
||||
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;
|
||||
|
||||
t._getMenu(ed).showMenu(e.clientX, e.clientY);
|
||||
Event.add(ed.getDoc(), 'click', function(e) {
|
||||
hide(ed, e);
|
||||
});
|
||||
Event.cancel(e);
|
||||
}
|
||||
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', function(e) {
|
||||
hide(ed, e);
|
||||
});
|
||||
|
||||
ed.nodeChanged();
|
||||
});
|
||||
|
||||
ed.onRemove.add(function() {
|
||||
|
|
@ -60,12 +67,12 @@
|
|||
});
|
||||
|
||||
function hide(ed, e) {
|
||||
lastRng = null;
|
||||
realCtrlKey = 0;
|
||||
|
||||
// Since the contextmenu event moves
|
||||
// the selection we need to store it away
|
||||
if (e && e.button == 2) {
|
||||
lastRng = ed.selection.getRng();
|
||||
realCtrlKey = e.ctrlKey;
|
||||
return;
|
||||
}
|
||||
|
||||
|
|
@ -73,11 +80,18 @@
|
|||
t._menu.removeAll();
|
||||
t._menu.destroy();
|
||||
Event.remove(ed.getDoc(), 'click', hide);
|
||||
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);
|
||||
}
|
||||
});
|
||||
},
|
||||
|
||||
/**
|
||||
|
|
@ -98,20 +112,20 @@
|
|||
},
|
||||
|
||||
_getMenu : function(ed) {
|
||||
var t = this, m = t._menu, se = ed.selection, col = se.isCollapsed(), el = se.getNode() || ed.getBody(), am, p1, p2;
|
||||
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();
|
||||
}
|
||||
|
||||
p1 = DOM.getPos(ed.getContentAreaContainer());
|
||||
p2 = DOM.getPos(ed.getContainer());
|
||||
p = DOM.getPos(ed.getContentAreaContainer());
|
||||
|
||||
m = ed.controlManager.createDropMenu('contextmenu', {
|
||||
offset_x : p1.x + ed.getParam('contextmenu_offset_x', 0),
|
||||
offset_y : p1.y + ed.getParam('contextmenu_offset_y', 0),
|
||||
constrain : 1
|
||||
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;
|
||||
|
|
|
|||
0
library/tinymce/jscripts/tiny_mce/plugins/directionality/editor_plugin.js
vendored
Executable file → Normal file
0
library/tinymce/jscripts/tiny_mce/plugins/directionality/editor_plugin_src.js
vendored
Executable file → Normal file
0
library/tinymce/jscripts/tiny_mce/plugins/emotions/editor_plugin.js
vendored
Executable file → Normal file
0
library/tinymce/jscripts/tiny_mce/plugins/emotions/editor_plugin_src.js
vendored
Executable file → Normal file
62
library/tinymce/jscripts/tiny_mce/plugins/emotions/emotions.htm
vendored
Executable file → Normal file
|
|
@ -5,36 +5,38 @@
|
|||
<script type="text/javascript" src="../../tiny_mce_popup.js"></script>
|
||||
<script type="text/javascript" src="js/emotions.js"></script>
|
||||
</head>
|
||||
<body style="display: none">
|
||||
<div align="center">
|
||||
<div class="title">{#emotions_dlg.title}:<br /><br /></div>
|
||||
<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 border="0" cellspacing="0" cellpadding="4">
|
||||
<tr>
|
||||
<td><a href="javascript:EmotionsDialog.insert('smiley-cool.gif','emotions_dlg.cool');"><img src="img/smiley-cool.gif" width="18" height="18" border="0" alt="{#emotions_dlg.cool}" title="{#emotions_dlg.cool}" /></a></td>
|
||||
<td><a href="javascript:EmotionsDialog.insert('smiley-cry.gif','emotions_dlg.cry');"><img src="img/smiley-cry.gif" width="18" height="18" border="0" alt="{#emotions_dlg.cry}" title="{#emotions_dlg.cry}" /></a></td>
|
||||
<td><a href="javascript:EmotionsDialog.insert('smiley-embarassed.gif','emotions_dlg.embarassed');"><img src="img/smiley-embarassed.gif" width="18" height="18" border="0" alt="{#emotions_dlg.embarassed}" title="{#emotions_dlg.embarassed}" /></a></td>
|
||||
<td><a href="javascript:EmotionsDialog.insert('smiley-foot-in-mouth.gif','emotions_dlg.foot_in_mouth');"><img src="img/smiley-foot-in-mouth.gif" width="18" height="18" border="0" alt="{#emotions_dlg.foot_in_mouth}" title="{#emotions_dlg.foot_in_mouth}" /></a></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><a href="javascript:EmotionsDialog.insert('smiley-frown.gif','emotions_dlg.frown');"><img src="img/smiley-frown.gif" width="18" height="18" border="0" alt="{#emotions_dlg.frown}" title="{#emotions_dlg.frown}" /></a></td>
|
||||
<td><a href="javascript:EmotionsDialog.insert('smiley-innocent.gif','emotions_dlg.innocent');"><img src="img/smiley-innocent.gif" width="18" height="18" border="0" alt="{#emotions_dlg.innocent}" title="{#emotions_dlg.innocent}" /></a></td>
|
||||
<td><a href="javascript:EmotionsDialog.insert('smiley-kiss.gif','emotions_dlg.kiss');"><img src="img/smiley-kiss.gif" width="18" height="18" border="0" alt="{#emotions_dlg.kiss}" title="{#emotions_dlg.kiss}" /></a></td>
|
||||
<td><a href="javascript:EmotionsDialog.insert('smiley-laughing.gif','emotions_dlg.laughing');"><img src="img/smiley-laughing.gif" width="18" height="18" border="0" alt="{#emotions_dlg.laughing}" title="{#emotions_dlg.laughing}" /></a></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><a href="javascript:EmotionsDialog.insert('smiley-money-mouth.gif','emotions_dlg.money_mouth');"><img src="img/smiley-money-mouth.gif" width="18" height="18" border="0" alt="{#emotions_dlg.money_mouth}" title="{#emotions_dlg.money_mouth}" /></a></td>
|
||||
<td><a href="javascript:EmotionsDialog.insert('smiley-sealed.gif','emotions_dlg.sealed');"><img src="img/smiley-sealed.gif" width="18" height="18" border="0" alt="{#emotions_dlg.sealed}" title="{#emotions_dlg.sealed}" /></a></td>
|
||||
<td><a href="javascript:EmotionsDialog.insert('smiley-smile.gif','emotions_dlg.smile');"><img src="img/smiley-smile.gif" width="18" height="18" border="0" alt="{#emotions_dlg.smile}" title="{#emotions_dlg.smile}" /></a></td>
|
||||
<td><a href="javascript:EmotionsDialog.insert('smiley-surprised.gif','emotions_dlg.surprised');"><img src="img/smiley-surprised.gif" width="18" height="18" border="0" alt="{#emotions_dlg.surprised}" title="{#emotions_dlg.surprised}" /></a></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><a href="javascript:EmotionsDialog.insert('smiley-tongue-out.gif','emotions_dlg.tongue_out');"><img src="img/smiley-tongue-out.gif" width="18" height="18" border="0" alt="{#emotions_dlg.tongue-out}" title="{#emotions_dlg.tongue_out}" /></a></td>
|
||||
<td><a href="javascript:EmotionsDialog.insert('smiley-undecided.gif','emotions_dlg.undecided');"><img src="img/smiley-undecided.gif" width="18" height="18" border="0" alt="{#emotions_dlg.undecided}" title="{#emotions_dlg.undecided}" /></a></td>
|
||||
<td><a href="javascript:EmotionsDialog.insert('smiley-wink.gif','emotions_dlg.wink');"><img src="img/smiley-wink.gif" width="18" height="18" border="0" alt="{#emotions_dlg.wink}" title="{#emotions_dlg.wink}" /></a></td>
|
||||
<td><a href="javascript:EmotionsDialog.insert('smiley-yell.gif','emotions_dlg.yell');"><img src="img/smiley-yell.gif" width="18" height="18" border="0" alt="{#emotions_dlg.yell}" title="{#emotions_dlg.yell}" /></a></td>
|
||||
</tr>
|
||||
</table>
|
||||
</div>
|
||||
<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>
|
||||
|
|
|
|||
0
library/tinymce/jscripts/tiny_mce/plugins/emotions/img/smiley-cool.gif
vendored
Executable file → Normal file
|
Before Width: | Height: | Size: 354 B After Width: | Height: | Size: 354 B |
0
library/tinymce/jscripts/tiny_mce/plugins/emotions/img/smiley-cry.gif
vendored
Executable file → Normal file
|
Before Width: | Height: | Size: 329 B After Width: | Height: | Size: 329 B |
0
library/tinymce/jscripts/tiny_mce/plugins/emotions/img/smiley-embarassed.gif
vendored
Executable file → Normal file
|
Before Width: | Height: | Size: 331 B After Width: | Height: | Size: 331 B |
BIN
library/tinymce/jscripts/tiny_mce/plugins/emotions/img/smiley-foot-in-mouth.gif
vendored
Executable file → Normal file
|
Before Width: | Height: | Size: 344 B After Width: | Height: | Size: 342 B |
0
library/tinymce/jscripts/tiny_mce/plugins/emotions/img/smiley-frown.gif
vendored
Executable file → Normal file
|
Before Width: | Height: | Size: 340 B After Width: | Height: | Size: 340 B |
0
library/tinymce/jscripts/tiny_mce/plugins/emotions/img/smiley-innocent.gif
vendored
Executable file → Normal file
|
Before Width: | Height: | Size: 336 B After Width: | Height: | Size: 336 B |
0
library/tinymce/jscripts/tiny_mce/plugins/emotions/img/smiley-kiss.gif
vendored
Executable file → Normal file
|
Before Width: | Height: | Size: 338 B After Width: | Height: | Size: 338 B |
BIN
library/tinymce/jscripts/tiny_mce/plugins/emotions/img/smiley-laughing.gif
vendored
Executable file → Normal file
|
Before Width: | Height: | Size: 344 B After Width: | Height: | Size: 343 B |
0
library/tinymce/jscripts/tiny_mce/plugins/emotions/img/smiley-money-mouth.gif
vendored
Executable file → Normal file
|
Before Width: | Height: | Size: 321 B After Width: | Height: | Size: 321 B |
BIN
library/tinymce/jscripts/tiny_mce/plugins/emotions/img/smiley-sealed.gif
vendored
Executable file → Normal file
|
Before Width: | Height: | Size: 325 B After Width: | Height: | Size: 323 B |
BIN
library/tinymce/jscripts/tiny_mce/plugins/emotions/img/smiley-smile.gif
vendored
Executable file → Normal file
|
Before Width: | Height: | Size: 345 B After Width: | Height: | Size: 344 B |
BIN
library/tinymce/jscripts/tiny_mce/plugins/emotions/img/smiley-surprised.gif
vendored
Executable file → Normal file
|
Before Width: | Height: | Size: 342 B After Width: | Height: | Size: 338 B |
0
library/tinymce/jscripts/tiny_mce/plugins/emotions/img/smiley-tongue-out.gif
vendored
Executable file → Normal file
|
Before Width: | Height: | Size: 328 B After Width: | Height: | Size: 328 B |
0
library/tinymce/jscripts/tiny_mce/plugins/emotions/img/smiley-undecided.gif
vendored
Executable file → Normal file
|
Before Width: | Height: | Size: 337 B After Width: | Height: | Size: 337 B |
BIN
library/tinymce/jscripts/tiny_mce/plugins/emotions/img/smiley-wink.gif
vendored
Executable file → Normal file
|
Before Width: | Height: | Size: 351 B After Width: | Height: | Size: 350 B |
0
library/tinymce/jscripts/tiny_mce/plugins/emotions/img/smiley-yell.gif
vendored
Executable file → Normal file
|
Before Width: | Height: | Size: 336 B After Width: | Height: | Size: 336 B |
21
library/tinymce/jscripts/tiny_mce/plugins/emotions/js/emotions.js
vendored
Executable file → Normal file
|
|
@ -1,8 +1,29 @@
|
|||
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) {
|
||||
|
|
|
|||
21
library/tinymce/jscripts/tiny_mce/plugins/emotions/langs/en_dlg.js
vendored
Executable file → Normal file
|
|
@ -1,20 +1 @@
|
|||
tinyMCE.addI18n('en.emotions_dlg',{
|
||||
title:"Insert emotion",
|
||||
desc:"Emotions",
|
||||
cool:"Cool",
|
||||
cry:"Cry",
|
||||
embarassed:"Embarassed",
|
||||
foot_in_mouth:"Foot in mouth",
|
||||
frown:"Frown",
|
||||
innocent:"Innocent",
|
||||
kiss:"Kiss",
|
||||
laughing:"Laughing",
|
||||
money_mouth:"Money mouth",
|
||||
sealed:"Sealed",
|
||||
smile:"Smile",
|
||||
surprised:"Surprised",
|
||||
tongue_out:"Tongue out",
|
||||
undecided:"Undecided",
|
||||
wink:"Wink",
|
||||
yell:"Yell"
|
||||
});
|
||||
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"});
|
||||
|
|
|
|||
0
library/tinymce/jscripts/tiny_mce/plugins/example/dialog.htm
vendored
Executable file → Normal file
0
library/tinymce/jscripts/tiny_mce/plugins/example/editor_plugin.js
vendored
Executable file → Normal file
0
library/tinymce/jscripts/tiny_mce/plugins/example/editor_plugin_src.js
vendored
Executable file → Normal file
0
library/tinymce/jscripts/tiny_mce/plugins/example/img/example.gif
vendored
Executable file → Normal file
|
Before Width: | Height: | Size: 87 B After Width: | Height: | Size: 87 B |
0
library/tinymce/jscripts/tiny_mce/plugins/example/js/dialog.js
vendored
Executable file → Normal file
0
library/tinymce/jscripts/tiny_mce/plugins/example/langs/en.js
vendored
Executable file → Normal file
0
library/tinymce/jscripts/tiny_mce/plugins/example/langs/en_dlg.js
vendored
Executable file → Normal file
1
library/tinymce/jscripts/tiny_mce/plugins/example_dependency/editor_plugin.js
vendored
Normal file
|
|
@ -0,0 +1 @@
|
|||
(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"])})();
|
||||
50
library/tinymce/jscripts/tiny_mce/plugins/example_dependency/editor_plugin_src.js
vendored
Normal file
|
|
@ -0,0 +1,50 @@
|
|||
/**
|
||||
* 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']);
|
||||
})();
|
||||
45
library/tinymce/jscripts/tiny_mce/plugins/fullpage/css/fullpage.css
vendored
Executable file → Normal file
|
|
@ -35,53 +35,14 @@
|
|||
width: 240px;
|
||||
}
|
||||
|
||||
/* Head list classes */
|
||||
|
||||
.headlistwrapper {
|
||||
width: 100%;
|
||||
}
|
||||
|
||||
.addbutton, .removebutton, .moveupbutton, .movedownbutton {
|
||||
border-top: 1px solid;
|
||||
border-left: 1px solid;
|
||||
border-bottom: 1px solid;
|
||||
border-right: 1px solid;
|
||||
border-color: #F0F0EE;
|
||||
cursor: default;
|
||||
display: block;
|
||||
width: 20px;
|
||||
height: 20px;
|
||||
}
|
||||
|
||||
#doctypes {
|
||||
width: 200px;
|
||||
}
|
||||
|
||||
.addbutton:hover, .removebutton:hover, .moveupbutton:hover, .movedownbutton:hover {
|
||||
border: 1px solid #0A246A;
|
||||
background-color: #B6BDD2;
|
||||
}
|
||||
/* Head list classes */
|
||||
|
||||
.addbutton {
|
||||
background-image: url('../images/add.gif');
|
||||
float: left;
|
||||
margin-right: 3px;
|
||||
}
|
||||
|
||||
.removebutton {
|
||||
background-image: url('../images/remove.gif');
|
||||
float: left;
|
||||
}
|
||||
|
||||
.moveupbutton {
|
||||
background-image: url('../images/move_up.gif');
|
||||
float: left;
|
||||
margin-right: 3px;
|
||||
}
|
||||
|
||||
.movedownbutton {
|
||||
background-image: url('../images/move_down.gif');
|
||||
float: left;
|
||||
.headlistwrapper {
|
||||
width: 100%;
|
||||
}
|
||||
|
||||
.selected {
|
||||
|
|
|
|||
2
library/tinymce/jscripts/tiny_mce/plugins/fullpage/editor_plugin.js
vendored
Executable file → Normal file
382
library/tinymce/jscripts/tiny_mce/plugins/fullpage/editor_plugin_src.js
vendored
Executable file → Normal file
|
|
@ -9,6 +9,8 @@
|
|||
*/
|
||||
|
||||
(function() {
|
||||
var each = tinymce.each, Node = tinymce.html.Node;
|
||||
|
||||
tinymce.create('tinymce.plugins.FullPagePlugin', {
|
||||
init : function(ed, url) {
|
||||
var t = this;
|
||||
|
|
@ -24,7 +26,7 @@
|
|||
inline : 1
|
||||
}, {
|
||||
plugin_url : url,
|
||||
head_html : t.head
|
||||
data : t._htmlToData()
|
||||
});
|
||||
});
|
||||
|
||||
|
|
@ -32,7 +34,6 @@
|
|||
ed.addButton('fullpage', {title : 'fullpage.desc', cmd : 'mceFullPageProperties'});
|
||||
|
||||
ed.onBeforeSetContent.add(t._setContent, t);
|
||||
ed.onSetContent.add(t._setBodyAttribs, t);
|
||||
ed.onGetContent.add(t._getContent, t);
|
||||
},
|
||||
|
||||
|
|
@ -48,103 +49,354 @@
|
|||
|
||||
// Private plugin internal methods
|
||||
|
||||
_setBodyAttribs : function(ed, o) {
|
||||
var bdattr, i, len, kv, k, v, t, attr = this.head.match(/body(.*?)>/i);
|
||||
_htmlToData : function() {
|
||||
var headerFragment = this._parseHeader(), data = {}, nodes, elm, matches, editor = this.editor;
|
||||
|
||||
if (attr && attr[1]) {
|
||||
bdattr = attr[1].match(/\s*(\w+\s*=\s*".*?"|\w+\s*=\s*'.*?'|\w+\s*=\s*\w+|\w+)\s*/g);
|
||||
function getAttr(elm, name) {
|
||||
var value = elm.attr(name);
|
||||
|
||||
if (bdattr) {
|
||||
for(i = 0, len = bdattr.length; i < len; i++) {
|
||||
kv = bdattr[i].split('=');
|
||||
k = kv[0].replace(/\s/,'');
|
||||
v = kv[1];
|
||||
return value || '';
|
||||
};
|
||||
|
||||
if (v) {
|
||||
v = v.replace(/^\s+/,'').replace(/\s+$/,'');
|
||||
t = v.match(/^["'](.*)["']$/);
|
||||
// Default some values
|
||||
data.fontface = editor.getParam("fullpage_default_fontface", "");
|
||||
data.fontsize = editor.getParam("fullpage_default_fontsize", "");
|
||||
|
||||
if (t)
|
||||
v = t[1];
|
||||
} else
|
||||
v = k;
|
||||
|
||||
ed.dom.setAttrib(ed.getBody(), 'style', v);
|
||||
}
|
||||
}
|
||||
// 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;
|
||||
},
|
||||
|
||||
_createSerializer : function() {
|
||||
return new tinymce.dom.Serializer({
|
||||
dom : this.editor.dom,
|
||||
apply_source_formatting : true
|
||||
_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 t = this, sp, ep, c = o.content, v, st = '';
|
||||
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' && t.head)
|
||||
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
|
||||
c = c.replace(/<(\/?)BODY/gi, '<$1body');
|
||||
sp = c.indexOf('<body');
|
||||
content = content.replace(/<(\/?)BODY/gi, '<$1body');
|
||||
startPos = content.indexOf('<body');
|
||||
|
||||
if (sp != -1) {
|
||||
sp = c.indexOf('>', sp);
|
||||
t.head = c.substring(0, sp + 1);
|
||||
if (startPos != -1) {
|
||||
startPos = content.indexOf('>', startPos);
|
||||
self.head = low(content.substring(0, startPos + 1));
|
||||
|
||||
ep = c.indexOf('</body', sp);
|
||||
if (ep == -1)
|
||||
ep = c.indexOf('</body', ep);
|
||||
endPos = content.indexOf('</body', startPos);
|
||||
if (endPos == -1)
|
||||
endPos = content.length;
|
||||
|
||||
o.content = c.substring(sp + 1, ep);
|
||||
t.foot = c.substring(ep);
|
||||
|
||||
function low(s) {
|
||||
return s.replace(/<\/?[A-Z]+/g, function(a) {
|
||||
return a.toLowerCase();
|
||||
})
|
||||
};
|
||||
|
||||
t.head = low(t.head);
|
||||
t.foot = low(t.foot);
|
||||
o.content = content.substring(startPos + 1, endPos);
|
||||
self.foot = low(content.substring(endPos));
|
||||
} else {
|
||||
t.head = '';
|
||||
if (ed.getParam('fullpage_default_xml_pi'))
|
||||
t.head += '<?xml version="1.0" encoding="' + ed.getParam('fullpage_default_encoding', 'ISO-8859-1') + '" ?>\n';
|
||||
self.head = this._getDefaultHeader();
|
||||
self.foot = '\n</body>\n</html>';
|
||||
}
|
||||
|
||||
t.head += ed.getParam('fullpage_default_doctype', '<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">');
|
||||
t.head += '\n<html>\n<head>\n<title>' + ed.getParam('fullpage_default_title', 'Untitled document') + '</title>\n';
|
||||
// Parse header and update iframe
|
||||
headerFragment = self._parseHeader();
|
||||
each(headerFragment.getAll('style'), function(node) {
|
||||
if (node.firstChild)
|
||||
styles += node.firstChild.value;
|
||||
});
|
||||
|
||||
if (v = ed.getParam('fullpage_default_encoding'))
|
||||
t.head += '<meta http-equiv="Content-Type" content="' + v + '" />\n';
|
||||
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') || ''
|
||||
});
|
||||
}
|
||||
|
||||
if (v = ed.getParam('fullpage_default_font_family'))
|
||||
st += 'font-family: ' + v + ';';
|
||||
dom.remove('fullpage_styles');
|
||||
|
||||
if (v = ed.getParam('fullpage_default_font_size'))
|
||||
st += 'font-size: ' + v + ';';
|
||||
if (styles) {
|
||||
dom.add(self.editor.getDoc().getElementsByTagName('head')[0], 'style', {id : 'fullpage_styles'}, styles);
|
||||
|
||||
if (v = ed.getParam('fullpage_default_text_color'))
|
||||
st += 'color: ' + v + ';';
|
||||
|
||||
t.head += '</head>\n<body' + (st ? ' style="' + st + '"' : '') + '>\n';
|
||||
t.foot = '\n</body>\n</html>';
|
||||
// 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 t = this;
|
||||
var self = this;
|
||||
|
||||
if (!o.source_view || !ed.getParam('fullpage_hide_in_source_view'))
|
||||
o.content = tinymce.trim(t.head) + '\n' + tinymce.trim(o.content) + '\n' + tinymce.trim(t.foot);
|
||||
o.content = tinymce.trim(self.head) + '\n' + tinymce.trim(o.content) + '\n' + tinymce.trim(self.foot);
|
||||
}
|
||||
});
|
||||
|
||||
|
|
|
|||
348
library/tinymce/jscripts/tiny_mce/plugins/fullpage/fullpage.htm
vendored
Executable file → Normal file
|
|
@ -8,13 +8,12 @@
|
|||
<script type="text/javascript" src="js/fullpage.js"></script>
|
||||
<link href="css/fullpage.css" rel="stylesheet" type="text/css" />
|
||||
</head>
|
||||
<body id="advlink" style="display: none">
|
||||
<form onsubmit="updateAction();return false;" name="fullpage" action="#">
|
||||
<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>
|
||||
<li id="advanced_tab"><span><a href="javascript:mcTabs.displayTab('advanced_tab','advanced_panel');" onmousedown="return false;">{#fullpage_dlg.advanced_tab}</a></span></li>
|
||||
</ul>
|
||||
</div>
|
||||
|
||||
|
|
@ -72,9 +71,9 @@
|
|||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="nowrap"><label for="doctypes">{#fullpage_dlg.doctypes}</label> </td>
|
||||
<td class="nowrap"><label for="doctype">{#fullpage_dlg.doctypes}</label> </td>
|
||||
<td>
|
||||
<select id="doctypes" name="doctypes">
|
||||
<select id="doctype" name="doctype">
|
||||
<option value="">{#not_set}</option>
|
||||
</select>
|
||||
</td>
|
||||
|
|
@ -109,7 +108,7 @@
|
|||
<tr>
|
||||
<td class="column1"><label for="fontface">{#fullpage_dlg.fontface}</label></td>
|
||||
<td>
|
||||
<select id="fontface" name="fontface" onchange="changedStyleField(this);">
|
||||
<select id="fontface" name="fontface" onchange="FullPageDialog.changedStyleProp();">
|
||||
<option value="">{#not_set}</option>
|
||||
</select>
|
||||
</td>
|
||||
|
|
@ -118,7 +117,7 @@
|
|||
<tr>
|
||||
<td class="column1"><label for="fontsize">{#fullpage_dlg.fontsize}</label></td>
|
||||
<td>
|
||||
<select id="fontsize" name="fontsize" onchange="changedStyleField(this);">
|
||||
<select id="fontsize" name="fontsize" onchange="FullPageDialog.changedStyleProp();">
|
||||
<option value="">{#not_set}</option>
|
||||
</select>
|
||||
</td>
|
||||
|
|
@ -129,7 +128,7 @@
|
|||
<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');changedStyleField(this);" /></td>
|
||||
<td><input id="textcolor" name="textcolor" type="text" value="" size="9" onchange="updateColor('textcolor_pick','textcolor');FullPageDialog.changedStyleProp();" /></td>
|
||||
<td id="textcolor_pickcontainer"> </td>
|
||||
</tr>
|
||||
</table>
|
||||
|
|
@ -147,7 +146,7 @@
|
|||
<td>
|
||||
<table border="0" cellpadding="0" cellspacing="0">
|
||||
<tr>
|
||||
<td><input id="bgimage" name="bgimage" type="text" value="" onchange="changedStyleField(this);" /></td>
|
||||
<td><input id="bgimage" name="bgimage" type="text" value="" onchange="FullPageDialog.changedStyleProp();" /></td>
|
||||
<td id="bgimage_pickcontainer"> </td>
|
||||
</tr>
|
||||
</table>
|
||||
|
|
@ -158,7 +157,7 @@
|
|||
<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');changedStyleField(this);" /></td>
|
||||
<td><input id="bgcolor" name="bgcolor" type="text" value="" size="9" onchange="updateColor('bgcolor_pick','bgcolor');FullPageDialog.changedStyleProp();" /></td>
|
||||
<td id="bgcolor_pickcontainer"> </td>
|
||||
</tr>
|
||||
</table>
|
||||
|
|
@ -173,15 +172,15 @@
|
|||
<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="changedStyleField(this);" /></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="changedStyleField(this);" /></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="changedStyleField(this);" /></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="changedStyleField(this);" /></td>
|
||||
<td><input id="bottommargin" name="bottommargin" type="text" value="" onchange="FullPageDialog.changedStyleProp();" /></td>
|
||||
</tr>
|
||||
</table>
|
||||
</fieldset>
|
||||
|
|
@ -195,7 +194,7 @@
|
|||
<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');changedStyleField(this);" /></td>
|
||||
<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"> </td>
|
||||
</tr>
|
||||
</table>
|
||||
|
|
@ -205,7 +204,7 @@
|
|||
<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');changedStyleField(this);" /></td>
|
||||
<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"> </td>
|
||||
</tr>
|
||||
</table>
|
||||
|
|
@ -217,7 +216,7 @@
|
|||
<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');changedStyleField(this);" /></td>
|
||||
<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"> </td>
|
||||
</tr>
|
||||
</table>
|
||||
|
|
@ -225,16 +224,6 @@
|
|||
|
||||
<td> </td>
|
||||
<td> </td>
|
||||
|
||||
<!-- <td class="column1"><label for="hover_color">{#fullpage_dlg.hover_color}</label></td>
|
||||
<td>
|
||||
<table border="0" cellpadding="0" cellspacing="0">
|
||||
<tr>
|
||||
<td><input id="hover_color" name="hover_color" type="text" value="" size="9" onchange="changedStyleField(this);" /></td>
|
||||
<td id="hover_color_pickcontainer"> </td>
|
||||
</tr>
|
||||
</table>
|
||||
</td> -->
|
||||
</tr>
|
||||
</table>
|
||||
</fieldset>
|
||||
|
|
@ -254,318 +243,17 @@
|
|||
</tr>
|
||||
<tr>
|
||||
<td class="column1"><label for="style">{#fullpage_dlg.style}</label></td>
|
||||
<td><input id="style" name="style" type="text" value="" onchange="changedStyleField(this);" /></td>
|
||||
<td><input id="style" name="style" type="text" value="" onchange="FullPageDialog.changedStyle();" /></td>
|
||||
</tr>
|
||||
</table>
|
||||
</fieldset>
|
||||
</div>
|
||||
|
||||
<div id="advanced_panel" class="panel">
|
||||
<div id="addmenu">
|
||||
<table border="0" cellpadding="0" cellspacing="0">
|
||||
<tr><td><a href="javascript:addHeadElm('title');" onmousedown="return false;"><span>{#fullpage_dlg.add_title}</span></a></td></tr>
|
||||
<tr><td><a href="javascript:addHeadElm('meta');" onmousedown="return false;"><span>{#fullpage_dlg.add_meta}</span></a></td></tr>
|
||||
<tr><td><a href="javascript:addHeadElm('script');" onmousedown="return false;"><span>{#fullpage_dlg.add_script}</span></a></td></tr>
|
||||
<tr><td><a href="javascript:addHeadElm('style');" onmousedown="return false;"><span>{#fullpage_dlg.add_style}</span></a></td></tr>
|
||||
<tr><td><a href="javascript:addHeadElm('link');" onmousedown="return false;"><span>{#fullpage_dlg.add_link}</span></a></td></tr>
|
||||
<tr><td><a href="javascript:addHeadElm('base');" onmousedown="return false;"><span>{#fullpage_dlg.add_base}</span></a></td></tr>
|
||||
<tr><td><a href="javascript:addHeadElm('comment');" onmousedown="return false;"><span>{#fullpage_dlg.add_comment}</span></a></td></tr>
|
||||
</table>
|
||||
</div>
|
||||
|
||||
<fieldset>
|
||||
<legend>{#fullpage_dlg.head_elements}</legend>
|
||||
|
||||
<div class="headlistwrapper">
|
||||
<div class="toolbar">
|
||||
<div style="float: left">
|
||||
<a id="addbutton" href="javascript:showAddMenu();" onmousedown="return false;" class="addbutton" title="{#fullpage_dlg.add}"></a>
|
||||
<a href="#" onmousedown="return false;" class="removebutton" title="{#fullpage_dlg.remove}"></a>
|
||||
</div>
|
||||
<div style="float: right">
|
||||
<a href="#" onmousedown="return false;" class="moveupbutton" title="{#fullpage_dlg.moveup}"></a>
|
||||
<a href="#" onmousedown="return false;" class="movedownbutton" title="{#fullpage_dlg.movedown}"></a>
|
||||
</div>
|
||||
<br style="clear: both" />
|
||||
</div>
|
||||
<select id="headlist" size="26" onchange="updateHeadElm(this.options[this.selectedIndex].value);">
|
||||
<option value="title_0"><title>Some title bla bla bla</title></option>
|
||||
<option value="meta_1"><meta name="keywords">Some bla bla bla</meta></option>
|
||||
<option value="meta_2"><meta name="description">Some bla bla bla bla bla bla bla bla bla</meta></option>
|
||||
<option value="script_3"><script language="javascript">...</script></option>
|
||||
<option value="style_4"><style>...</style></option>
|
||||
<option value="base_5"><base href="." /></option>
|
||||
<option value="comment_6"><!-- ... --></option>
|
||||
<option value="link_7"><link href="." /></option>
|
||||
</select>
|
||||
</div>
|
||||
</fieldset>
|
||||
|
||||
<fieldset id="meta_element">
|
||||
<legend>{#fullpage_dlg.meta_element}</legend>
|
||||
|
||||
<table border="0" cellpadding="4" cellspacing="0">
|
||||
<tr>
|
||||
<td class="column1"><label for="element_meta_type">{#fullpage_dlg.type}</label></td>
|
||||
<td><select id="element_meta_type">
|
||||
<option value="name">name</option>
|
||||
<option value="http-equiv">http-equiv</option>
|
||||
</select></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="column1"><label for="element_meta_name">{#fullpage_dlg.name}</label></td>
|
||||
<td><input id="element_meta_name" name="element_meta_name" type="text" value="" /></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="column1"><label for="element_meta_content">{#fullpage_dlg.content}</label></td>
|
||||
<td><input id="element_meta_content" name="element_meta_content" type="text" value="" /></td>
|
||||
</tr>
|
||||
</table>
|
||||
|
||||
<input type="button" id="meta_updateelement" class="updateElementButton" name="update" value="{#update}" onclick="updateElement();" />
|
||||
</fieldset>
|
||||
|
||||
<fieldset id="title_element">
|
||||
<legend>{#fullpage_dlg.title_element}</legend>
|
||||
|
||||
<table border="0" cellpadding="4" cellspacing="0">
|
||||
<tr>
|
||||
<td class="column1"><label for="element_title">{#fullpage_dlg.meta_title}</label></td>
|
||||
<td><input id="element_title" name="element_title" type="text" value="" /></td>
|
||||
</tr>
|
||||
</table>
|
||||
|
||||
<input type="button" id="title_updateelement" class="updateElementButton" name="update" value="{#update}" onclick="updateElement();" />
|
||||
</fieldset>
|
||||
|
||||
<fieldset id="script_element">
|
||||
<legend>{#fullpage_dlg.script_element}</legend>
|
||||
|
||||
<div class="tabs">
|
||||
<ul>
|
||||
<li id="script_props_tab" class="current"><span><a href="javascript:mcTabs.displayTab('script_props_tab','script_props_panel');" onmousedown="return false;">{#fullpage_dlg.properties}</a></span></li>
|
||||
<li id="script_value_tab"><span><a href="javascript:mcTabs.displayTab('script_value_tab','script_value_panel');" onmousedown="return false;">{#fullpage_dlg.value}</a></span></li>
|
||||
</ul>
|
||||
</div>
|
||||
|
||||
<br style="clear: both" />
|
||||
|
||||
<div class="panel_wrapper">
|
||||
<div id="script_props_panel" class="panel current">
|
||||
<table border="0" cellpadding="4" cellspacing="0">
|
||||
<tr>
|
||||
<td class="column1"><label for="element_script_type">{#fullpage_dlg.type}</label></td>
|
||||
<td><select id="element_script_type">
|
||||
<option value="text/javascript">text/javascript</option>
|
||||
<option value="text/jscript">text/jscript</option>
|
||||
<option value="text/vbscript">text/vbscript</option>
|
||||
<option value="text/vbs">text/vbs</option>
|
||||
<option value="text/ecmascript">text/ecmascript</option>
|
||||
<option value="text/xml">text/xml</option>
|
||||
</select></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="column1"><label for="element_script_src">{#fullpage_dlg.src}</label></td>
|
||||
<td><table border="0" cellpadding="0" cellspacing="0">
|
||||
<tr>
|
||||
<td><input id="element_script_src" name="element_script_src" type="text" value="" /></td>
|
||||
<td id="script_src_pickcontainer"> </td>
|
||||
</tr>
|
||||
</table></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="column1"><label for="element_script_charset">{#fullpage_dlg.charset}</label></td>
|
||||
<td><select id="element_script_charset"><option value="">{#not_set}</option></select></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="column1"><label for="element_script_defer">{#fullpage_dlg.defer}</label></td>
|
||||
<td><input type="checkbox" id="element_script_defer" name="element_script_defer" class="checkbox" /></td>
|
||||
</tr>
|
||||
</table>
|
||||
</div>
|
||||
|
||||
<div id="script_value_panel" class="panel">
|
||||
<textarea id="element_script_value"></textarea>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<input type="button" id="script_updateelement" class="updateElementButton" name="update" value="{#update}" onclick="updateElement();" />
|
||||
</fieldset>
|
||||
|
||||
<fieldset id="style_element">
|
||||
<legend>{#fullpage_dlg.style_element}</legend>
|
||||
|
||||
<div class="tabs">
|
||||
<ul>
|
||||
<li id="style_props_tab" class="current"><span><a href="javascript:mcTabs.displayTab('style_props_tab','style_props_panel');" onmousedown="return false;">{#fullpage_dlg.properties}</a></span></li>
|
||||
<li id="style_value_tab"><span><a href="javascript:mcTabs.displayTab('style_value_tab','style_value_panel');" onmousedown="return false;">{#fullpage_dlg.value}</a></span></li>
|
||||
</ul>
|
||||
</div>
|
||||
|
||||
<br style="clear: both" />
|
||||
|
||||
<div class="panel_wrapper">
|
||||
<div id="style_props_panel" class="panel current">
|
||||
<table border="0" cellpadding="4" cellspacing="0">
|
||||
<tr>
|
||||
<td class="column1"><label for="element_style_type">{#fullpage_dlg.type}</label></td>
|
||||
<td><select id="element_style_type">
|
||||
<option value="text/css">text/css</option>
|
||||
</select></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="column1"><label for="element_style_media">{#fullpage_dlg.media}</label></td>
|
||||
<td><select id="element_style_media"></select></td>
|
||||
</tr>
|
||||
</table>
|
||||
</div>
|
||||
|
||||
<div id="style_value_panel" class="panel">
|
||||
<textarea id="element_style_value"></textarea>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<input type="button" id="style_updateelement" class="updateElementButton" name="update" value="{#update}" onclick="updateElement();" />
|
||||
</fieldset>
|
||||
|
||||
<fieldset id="base_element">
|
||||
<legend>{#fullpage_dlg.base_element}</legend>
|
||||
|
||||
<table border="0" cellpadding="4" cellspacing="0">
|
||||
<tr>
|
||||
<td class="column1"><label for="element_base_href">{#fullpage_dlg.href}</label></td>
|
||||
<td><input id="element_base_href" name="element_base_href" type="text" value="" /></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="column1"><label for="element_base_target">{#fullpage_dlg.target}</label></td>
|
||||
<td><input id="element_base_target" name="element_base_target" type="text" value="" /></td>
|
||||
</tr>
|
||||
</table>
|
||||
|
||||
<input type="button" id="base_updateelement" class="updateElementButton" name="update" value="{#update}" onclick="updateElement();" />
|
||||
</fieldset>
|
||||
|
||||
<fieldset id="link_element">
|
||||
<legend>{#fullpage_dlg.link_element}</legend>
|
||||
|
||||
<div class="tabs">
|
||||
<ul>
|
||||
<li id="link_general_tab" class="current"><span><a href="javascript:mcTabs.displayTab('link_general_tab','link_general_panel');" onmousedown="return false;">{#fullpage_dlg.general_props}</a></span></li>
|
||||
<li id="link_advanced_tab"><span><a href="javascript:mcTabs.displayTab('link_advanced_tab','link_advanced_panel');" onmousedown="return false;">{#fullpage_dlg.advanced_props}</a></span></li>
|
||||
</ul>
|
||||
</div>
|
||||
|
||||
<br style="clear: both" />
|
||||
|
||||
<div class="panel_wrapper">
|
||||
<div id="link_general_panel" class="panel current">
|
||||
<table border="0" cellpadding="4" cellspacing="0">
|
||||
<tr>
|
||||
<td class="column1"><label for="element_link_href">{#fullpage_dlg.href}</label></td>
|
||||
<td><table border="0" cellpadding="0" cellspacing="0">
|
||||
<tr>
|
||||
<td><input id="element_link_href" name="element_link_href" type="text" value="" /></td>
|
||||
<td id="link_href_pickcontainer"> </td>
|
||||
</tr>
|
||||
</table></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="column1"><label for="element_link_title">{#fullpage_dlg.meta_title}</label></td>
|
||||
<td><input id="element_link_title" name="element_link_title" type="text" value="" /></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="column1"><label for="element_link_type">{#fullpage_dlg.type}</label></td>
|
||||
<td><select id="element_link_type" name="element_link_type">
|
||||
<option value="text/css">text/css</option>
|
||||
<option value="text/javascript">text/javascript</option>
|
||||
</select></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="column1"><label for="element_link_media">{#fullpage_dlg.media}</label></td>
|
||||
<td><select id="element_link_media" name="element_link_media"></select></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><label for="element_style_rel">{#fullpage_dlg.rel}</label></td>
|
||||
<td><select id="element_style_rel" name="element_style_rel">
|
||||
<option value="">{#not_set}</option>
|
||||
<option value="stylesheet">Stylesheet</option>
|
||||
<option value="alternate">Alternate</option>
|
||||
<option value="designates">Designates</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>
|
||||
</table>
|
||||
</div>
|
||||
|
||||
<div id="link_advanced_panel" class="panel">
|
||||
<table border="0" cellpadding="4" cellspacing="0">
|
||||
<tr>
|
||||
<td class="column1"><label for="element_link_charset">{#fullpage_dlg.charset}</label></td>
|
||||
<td><select id="element_link_charset"><option value="">{#not_set}</option></select></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="column1"><label for="element_link_hreflang">{#fullpage_dlg.hreflang}</label></td>
|
||||
<td><input id="element_link_hreflang" name="element_link_hreflang" type="text" value="" /></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="column1"><label for="element_link_target">{#fullpage_dlg.target}</label></td>
|
||||
<td><input id="element_link_target" name="element_link_target" type="text" value="" /></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><label for="element_style_rev">{#fullpage_dlg.rev}</label></td>
|
||||
<td><select id="element_style_rev" name="element_style_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>
|
||||
</table>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<input type="button" id="link_updateelement" class="updateElementButton" name="update" value="{#update}" onclick="updateElement();" />
|
||||
</fieldset>
|
||||
|
||||
<fieldset id="comment_element">
|
||||
<legend>{#fullpage_dlg.comment_element}</legend>
|
||||
|
||||
<textarea id="element_comment_value"></textarea>
|
||||
|
||||
<input type="button" id="comment_updateelement" class="updateElementButton" name="update" value="{#update}" onclick="updateElement();" />
|
||||
</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>
|
||||
</form>
|
||||
</body>
|
||||
</html>
|
||||
|
|
|
|||
611
library/tinymce/jscripts/tiny_mce/plugins/fullpage/js/fullpage.js
vendored
Executable file → Normal file
|
|
@ -8,464 +8,225 @@
|
|||
* Contributing: http://tinymce.moxiecode.com/contributing
|
||||
*/
|
||||
|
||||
tinyMCEPopup.requireLangPack();
|
||||
(function() {
|
||||
tinyMCEPopup.requireLangPack();
|
||||
|
||||
var doc;
|
||||
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 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 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';
|
||||
|
||||
var defaultMediaTypes =
|
||||
'all=all,' +
|
||||
'screen=screen,' +
|
||||
'print=print,' +
|
||||
'tty=tty,' +
|
||||
'tv=tv,' +
|
||||
'projection=projection,' +
|
||||
'handheld=handheld,' +
|
||||
'braille=braille,' +
|
||||
'aural=aural';
|
||||
function setVal(id, value) {
|
||||
var elm = document.getElementById(id);
|
||||
|
||||
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';
|
||||
if (elm) {
|
||||
value = value || '';
|
||||
|
||||
function init() {
|
||||
var f = document.forms['fullpage'], el = f.elements, e, i, p, doctypes, encodings, mediaTypes, fonts, ed = tinyMCEPopup.editor, dom = tinyMCEPopup.dom, style;
|
||||
|
||||
// Setup doctype select box
|
||||
doctypes = ed.getParam("fullpage_doctypes", defaultDocTypes).split(',');
|
||||
for (i=0; i<doctypes.length; i++) {
|
||||
p = doctypes[i].split('=');
|
||||
|
||||
if (p.length > 1)
|
||||
addSelectValue(f, 'doctypes', p[0], p[1]);
|
||||
}
|
||||
|
||||
// Setup fonts select box
|
||||
fonts = ed.getParam("fullpage_fonts", defaultFontNames).split(';');
|
||||
for (i=0; i<fonts.length; i++) {
|
||||
p = fonts[i].split('=');
|
||||
|
||||
if (p.length > 1)
|
||||
addSelectValue(f, 'fontface', p[0], p[1]);
|
||||
}
|
||||
|
||||
// Setup fontsize select box
|
||||
fonts = ed.getParam("fullpage_fontsizes", defaultFontSizes).split(',');
|
||||
for (i=0; i<fonts.length; i++)
|
||||
addSelectValue(f, 'fontsize', fonts[i], fonts[i]);
|
||||
|
||||
// Setup mediatype select boxs
|
||||
mediaTypes = ed.getParam("fullpage_media_types", defaultMediaTypes).split(',');
|
||||
for (i=0; i<mediaTypes.length; i++) {
|
||||
p = mediaTypes[i].split('=');
|
||||
|
||||
if (p.length > 1) {
|
||||
addSelectValue(f, 'element_style_media', p[0], p[1]);
|
||||
addSelectValue(f, 'element_link_media', p[0], p[1]);
|
||||
}
|
||||
}
|
||||
|
||||
// Setup encodings select box
|
||||
encodings = ed.getParam("fullpage_encodings", defaultEncodings).split(',');
|
||||
for (i=0; i<encodings.length; i++) {
|
||||
p = encodings[i].split('=');
|
||||
|
||||
if (p.length > 1) {
|
||||
addSelectValue(f, 'docencoding', p[0], p[1]);
|
||||
addSelectValue(f, 'element_script_charset', p[0], p[1]);
|
||||
addSelectValue(f, 'element_link_charset', p[0], p[1]);
|
||||
}
|
||||
}
|
||||
|
||||
document.getElementById('bgcolor_pickcontainer').innerHTML = getColorPickerHTML('bgcolor_pick','bgcolor');
|
||||
document.getElementById('link_color_pickcontainer').innerHTML = getColorPickerHTML('link_color_pick','link_color');
|
||||
//document.getElementById('hover_color_pickcontainer').innerHTML = getColorPickerHTML('hover_color_pick','hover_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('link_href_pickcontainer').innerHTML = getBrowserHTML('link_href_browser','element_link_href','file','fullpage');
|
||||
document.getElementById('script_src_pickcontainer').innerHTML = getBrowserHTML('script_src_browser','element_script_src','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';
|
||||
|
||||
// Add iframe
|
||||
dom.add(document.body, 'iframe', {id : 'documentIframe', src : 'javascript:""', style : {display : 'none'}});
|
||||
doc = dom.get('documentIframe').contentWindow.document;
|
||||
h = tinyMCEPopup.getWindowArg('head_html');
|
||||
|
||||
// Preprocess the HTML disable scripts and urls
|
||||
h = h.replace(/<script>/gi, '<script type="text/javascript">');
|
||||
h = h.replace(/type=([\"\'])?/gi, 'type=$1-mce-');
|
||||
h = h.replace(/(src=|href=)/g, '_mce_$1');
|
||||
|
||||
// Write in the content in the iframe
|
||||
doc.write(h + '</body></html>');
|
||||
doc.close();
|
||||
|
||||
// Parse xml and doctype
|
||||
xmlVer = getReItem(/<\?\s*?xml.*?version\s*?=\s*?"(.*?)".*?\?>/gi, h, 1);
|
||||
xmlEnc = getReItem(/<\?\s*?xml.*?encoding\s*?=\s*?"(.*?)".*?\?>/gi, h, 1);
|
||||
docType = getReItem(/<\!DOCTYPE.*?>/gi, h.replace(/\n/g, ''), 0).replace(/ +/g, ' ');
|
||||
f.langcode.value = getReItem(/lang="(.*?)"/gi, h, 1);
|
||||
|
||||
// Parse title
|
||||
if (e = doc.getElementsByTagName('title')[0])
|
||||
el.metatitle.value = e.textContent || e.text;
|
||||
|
||||
// Parse meta
|
||||
tinymce.each(doc.getElementsByTagName('meta'), function(n) {
|
||||
var na = (n.getAttribute('name', 2) || '').toLowerCase(), va = n.getAttribute('content', 2), eq = n.getAttribute('httpEquiv', 2) || '';
|
||||
|
||||
e = el['meta' + na];
|
||||
|
||||
if (na == 'robots') {
|
||||
selectByValue(f, 'metarobots', tinymce.trim(va), true, true);
|
||||
return;
|
||||
}
|
||||
|
||||
switch (eq.toLowerCase()) {
|
||||
case "content-type":
|
||||
tmp = getReItem(/charset\s*=\s*(.*)\s*/gi, va, 1);
|
||||
|
||||
// Override XML encoding
|
||||
if (tmp != "")
|
||||
xmlEnc = tmp;
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
if (e)
|
||||
e.value = va;
|
||||
});
|
||||
|
||||
selectByValue(f, 'doctypes', docType, true, true);
|
||||
selectByValue(f, 'docencoding', xmlEnc, true, true);
|
||||
selectByValue(f, 'langdir', doc.body.getAttribute('dir', 2) || '', true, true);
|
||||
|
||||
if (xmlVer != '')
|
||||
el.xml_pi.checked = true;
|
||||
|
||||
// Parse appearance
|
||||
|
||||
// Parse primary stylesheet
|
||||
tinymce.each(doc.getElementsByTagName("link"), function(l) {
|
||||
var m = l.getAttribute('media', 2) || '', t = l.getAttribute('type', 2) || '';
|
||||
|
||||
if (t == "-mce-text/css" && (m == "" || m == "screen" || m == "all") && (l.getAttribute('rel', 2) || '') == "stylesheet") {
|
||||
f.stylesheet.value = l.getAttribute('_mce_href', 2) || '';
|
||||
return false;
|
||||
}
|
||||
});
|
||||
|
||||
// Get from style elements
|
||||
tinymce.each(doc.getElementsByTagName("style"), function(st) {
|
||||
var tmp = parseStyleElement(st);
|
||||
|
||||
for (x=0; x<tmp.length; x++) {
|
||||
if (tmp[x].rule.indexOf('a:visited') != -1 && tmp[x].data['color'])
|
||||
f.visited_color.value = tmp[x].data['color'];
|
||||
|
||||
if (tmp[x].rule.indexOf('a:link') != -1 && tmp[x].data['color'])
|
||||
f.link_color.value = tmp[x].data['color'];
|
||||
|
||||
if (tmp[x].rule.indexOf('a:active') != -1 && tmp[x].data['color'])
|
||||
f.active_color.value = tmp[x].data['color'];
|
||||
}
|
||||
});
|
||||
|
||||
f.textcolor.value = tinyMCEPopup.dom.getAttrib(doc.body, "text");
|
||||
f.active_color.value = tinyMCEPopup.dom.getAttrib(doc.body, "alink");
|
||||
f.link_color.value = tinyMCEPopup.dom.getAttrib(doc.body, "link");
|
||||
f.visited_color.value = tinyMCEPopup.dom.getAttrib(doc.body, "vlink");
|
||||
f.bgcolor.value = tinyMCEPopup.dom.getAttrib(doc.body, "bgcolor");
|
||||
f.bgimage.value = tinyMCEPopup.dom.getAttrib(doc.body, "background");
|
||||
|
||||
// Get from style info
|
||||
style = tinyMCEPopup.dom.parseStyle(tinyMCEPopup.dom.getAttrib(doc.body, 'style'));
|
||||
|
||||
if (style['font-family'])
|
||||
selectByValue(f, 'fontface', style['font-family'], true, true);
|
||||
else
|
||||
selectByValue(f, 'fontface', ed.getParam("fullpage_default_fontface", ""), true, true);
|
||||
|
||||
if (style['font-size'])
|
||||
selectByValue(f, 'fontsize', style['font-size'], true, true);
|
||||
else
|
||||
selectByValue(f, 'fontsize', ed.getParam("fullpage_default_fontsize", ""), true, true);
|
||||
|
||||
if (style['color'])
|
||||
f.textcolor.value = convertRGBToHex(style['color']);
|
||||
|
||||
if (style['background-image'])
|
||||
f.bgimage.value = style['background-image'].replace(new RegExp("url\\('?([^']*)'?\\)", 'gi'), "$1");
|
||||
|
||||
if (style['background-color'])
|
||||
f.bgcolor.value = style['background-color'];
|
||||
|
||||
if (style['margin']) {
|
||||
tmp = style['margin'].replace(/[^0-9 ]/g, '');
|
||||
tmp = tmp.split(/ +/);
|
||||
f.topmargin.value = tmp.length > 0 ? tmp[0] : '';
|
||||
f.rightmargin.value = tmp.length > 1 ? tmp[1] : tmp[0];
|
||||
f.bottommargin.value = tmp.length > 2 ? tmp[2] : tmp[0];
|
||||
f.leftmargin.value = tmp.length > 3 ? tmp[3] : tmp[0];
|
||||
}
|
||||
|
||||
if (style['margin-left'])
|
||||
f.leftmargin.value = style['margin-left'].replace(/[^0-9]/g, '');
|
||||
|
||||
if (style['margin-right'])
|
||||
f.rightmargin.value = style['margin-right'].replace(/[^0-9]/g, '');
|
||||
|
||||
if (style['margin-top'])
|
||||
f.topmargin.value = style['margin-top'].replace(/[^0-9]/g, '');
|
||||
|
||||
if (style['margin-bottom'])
|
||||
f.bottommargin.value = style['margin-bottom'].replace(/[^0-9]/g, '');
|
||||
|
||||
f.style.value = tinyMCEPopup.dom.serializeStyle(style);
|
||||
|
||||
// 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');
|
||||
}
|
||||
|
||||
function getReItem(r, s, i) {
|
||||
var c = r.exec(s);
|
||||
|
||||
if (c && c.length > i)
|
||||
return c[i];
|
||||
|
||||
return '';
|
||||
}
|
||||
|
||||
function updateAction() {
|
||||
var f = document.forms[0], nl, i, h, v, s, head, html, l, tmp, addlink = true, ser;
|
||||
|
||||
head = doc.getElementsByTagName('head')[0];
|
||||
|
||||
// Fix scripts without a type
|
||||
nl = doc.getElementsByTagName('script');
|
||||
for (i=0; i<nl.length; i++) {
|
||||
if (tinyMCEPopup.dom.getAttrib(nl[i], '_mce_type') == '')
|
||||
nl[i].setAttribute('_mce_type', 'text/javascript');
|
||||
}
|
||||
|
||||
// Get primary stylesheet
|
||||
nl = doc.getElementsByTagName("link");
|
||||
for (i=0; i<nl.length; i++) {
|
||||
l = nl[i];
|
||||
|
||||
tmp = tinyMCEPopup.dom.getAttrib(l, 'media');
|
||||
|
||||
if (tinyMCEPopup.dom.getAttrib(l, '_mce_type') == "text/css" && (tmp == "" || tmp == "screen" || tmp == "all") && tinyMCEPopup.dom.getAttrib(l, 'rel') == "stylesheet") {
|
||||
addlink = false;
|
||||
|
||||
if (f.stylesheet.value == '')
|
||||
l.parentNode.removeChild(l);
|
||||
if (elm.nodeName == "SELECT")
|
||||
selectByValue(document.forms[0], id, value);
|
||||
else if (elm.type == "checkbox")
|
||||
elm.checked = !!value;
|
||||
else
|
||||
l.setAttribute('_mce_href', f.stylesheet.value);
|
||||
|
||||
break;
|
||||
elm.value = value;
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
// Add new link
|
||||
if (f.stylesheet.value != '') {
|
||||
l = doc.createElement('link');
|
||||
function getVal(id) {
|
||||
var elm = document.getElementById(id);
|
||||
|
||||
l.setAttribute('type', 'text/css');
|
||||
l.setAttribute('_mce_href', f.stylesheet.value);
|
||||
l.setAttribute('rel', 'stylesheet');
|
||||
if (elm.nodeName == "SELECT")
|
||||
return elm.options[elm.selectedIndex].value;
|
||||
|
||||
head.appendChild(l);
|
||||
}
|
||||
if (elm.type == "checkbox")
|
||||
return elm.checked;
|
||||
|
||||
setMeta(head, 'keywords', f.metakeywords.value);
|
||||
setMeta(head, 'description', f.metadescription.value);
|
||||
setMeta(head, 'author', f.metaauthor.value);
|
||||
setMeta(head, 'copyright', f.metacopyright.value);
|
||||
setMeta(head, 'robots', getSelectValue(f, 'metarobots'));
|
||||
setMeta(head, 'Content-Type', getSelectValue(f, 'docencoding'));
|
||||
return elm.value;
|
||||
};
|
||||
|
||||
doc.body.dir = getSelectValue(f, 'langdir');
|
||||
doc.body.style.cssText = f.style.value;
|
||||
window.FullPageDialog = {
|
||||
changedStyle : function() {
|
||||
var val, styles = tinyMCEPopup.editor.dom.parseStyle(getVal('style'));
|
||||
|
||||
doc.body.setAttribute('vLink', f.visited_color.value);
|
||||
doc.body.setAttribute('link', f.link_color.value);
|
||||
doc.body.setAttribute('text', f.textcolor.value);
|
||||
doc.body.setAttribute('aLink', f.active_color.value);
|
||||
setVal('fontface', styles['font-face']);
|
||||
setVal('fontsize', styles['font-size']);
|
||||
setVal('textcolor', styles['color']);
|
||||
|
||||
doc.body.style.fontFamily = getSelectValue(f, 'fontface');
|
||||
doc.body.style.fontSize = getSelectValue(f, 'fontsize');
|
||||
doc.body.style.backgroundColor = f.bgcolor.value;
|
||||
|
||||
if (f.leftmargin.value != '')
|
||||
doc.body.style.marginLeft = f.leftmargin.value + 'px';
|
||||
|
||||
if (f.rightmargin.value != '')
|
||||
doc.body.style.marginRight = f.rightmargin.value + 'px';
|
||||
|
||||
if (f.bottommargin.value != '')
|
||||
doc.body.style.marginBottom = f.bottommargin.value + 'px';
|
||||
|
||||
if (f.topmargin.value != '')
|
||||
doc.body.style.marginTop = f.topmargin.value + 'px';
|
||||
|
||||
html = doc.getElementsByTagName('html')[0];
|
||||
html.setAttribute('lang', f.langcode.value);
|
||||
html.setAttribute('xml:lang', f.langcode.value);
|
||||
|
||||
if (f.bgimage.value != '')
|
||||
doc.body.style.backgroundImage = "url('" + f.bgimage.value + "')";
|
||||
else
|
||||
doc.body.style.backgroundImage = '';
|
||||
|
||||
ser = tinyMCEPopup.editor.plugins.fullpage._createSerializer();
|
||||
ser.setRules('-title,meta[http-equiv|name|content],base[href|target],link[href|rel|type|title|media],style[type],script[type|language|src],html[lang|xml::lang|xmlns],body[style|dir|vlink|link|text|alink],head');
|
||||
|
||||
h = ser.serialize(doc.documentElement);
|
||||
h = h.substring(0, h.lastIndexOf('</body>'));
|
||||
|
||||
if (h.indexOf('<title>') == -1)
|
||||
h = h.replace(/<head.*?>/, '$&\n' + '<title>' + tinyMCEPopup.dom.encode(f.metatitle.value) + '</title>');
|
||||
else
|
||||
h = h.replace(/<title>(.*?)<\/title>/, '<title>' + tinyMCEPopup.dom.encode(f.metatitle.value) + '</title>');
|
||||
|
||||
if ((v = getSelectValue(f, 'doctypes')) != '')
|
||||
h = v + '\n' + h;
|
||||
|
||||
if (f.xml_pi.checked) {
|
||||
s = '<?xml version="1.0"';
|
||||
|
||||
if ((v = getSelectValue(f, 'docencoding')) != '')
|
||||
s += ' encoding="' + v + '"';
|
||||
|
||||
s += '?>\n';
|
||||
h = s + h;
|
||||
}
|
||||
|
||||
h = h.replace(/type=\"\-mce\-/gi, 'type="');
|
||||
|
||||
tinyMCEPopup.editor.plugins.fullpage.head = h;
|
||||
tinyMCEPopup.editor.plugins.fullpage._setBodyAttribs(tinyMCEPopup.editor, {});
|
||||
tinyMCEPopup.close();
|
||||
}
|
||||
|
||||
function changedStyleField(field) {
|
||||
}
|
||||
|
||||
function setMeta(he, k, v) {
|
||||
var nl, i, m;
|
||||
|
||||
nl = he.getElementsByTagName('meta');
|
||||
for (i=0; i<nl.length; i++) {
|
||||
if (k == 'Content-Type' && tinyMCEPopup.dom.getAttrib(nl[i], 'http-equiv') == k) {
|
||||
if (v == '')
|
||||
nl[i].parentNode.removeChild(nl[i]);
|
||||
if (val = styles['background-image'])
|
||||
setVal('bgimage', val.replace(new RegExp("url\\('?([^']*)'?\\)", 'gi'), "$1"));
|
||||
else
|
||||
nl[i].setAttribute('content', "text/html; charset=" + v);
|
||||
setVal('bgimage', '');
|
||||
|
||||
return;
|
||||
}
|
||||
setVal('bgcolor', styles['background-color']);
|
||||
|
||||
if (tinyMCEPopup.dom.getAttrib(nl[i], 'name') == k) {
|
||||
if (v == '')
|
||||
nl[i].parentNode.removeChild(nl[i]);
|
||||
// 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
|
||||
nl[i].setAttribute('content', v);
|
||||
return;
|
||||
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();
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
if (v == '')
|
||||
return;
|
||||
function init() {
|
||||
var form = document.forms[0], i, item, list, editor = tinyMCEPopup.editor;
|
||||
|
||||
m = doc.createElement('meta');
|
||||
// Setup doctype select box
|
||||
list = editor.getParam("fullpage_doctypes", defaultDocTypes).split(',');
|
||||
for (i = 0; i < list.length; i++) {
|
||||
item = list[i].split('=');
|
||||
|
||||
if (k == 'Content-Type')
|
||||
m.httpEquiv = k;
|
||||
else
|
||||
m.setAttribute('name', k);
|
||||
if (item.length > 1)
|
||||
addSelectValue(form, 'doctype', item[0], item[1]);
|
||||
}
|
||||
|
||||
m.setAttribute('content', v);
|
||||
he.appendChild(m);
|
||||
}
|
||||
// Setup fonts select box
|
||||
list = editor.getParam("fullpage_fonts", defaultFontNames).split(';');
|
||||
for (i = 0; i < list.length; i++) {
|
||||
item = list[i].split('=');
|
||||
|
||||
function parseStyleElement(e) {
|
||||
var v = e.innerHTML;
|
||||
var p, i, r;
|
||||
if (item.length > 1)
|
||||
addSelectValue(form, 'fontface', item[0], item[1]);
|
||||
}
|
||||
|
||||
v = v.replace(/<!--/gi, '');
|
||||
v = v.replace(/-->/gi, '');
|
||||
v = v.replace(/[\n\r]/gi, '');
|
||||
v = v.replace(/\s+/gi, ' ');
|
||||
// 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]);
|
||||
|
||||
r = [];
|
||||
p = v.split(/{|}/);
|
||||
// Setup encodings select box
|
||||
list = editor.getParam("fullpage_encodings", defaultEncodings).split(',');
|
||||
for (i = 0; i < list.length; i++) {
|
||||
item = list[i].split('=');
|
||||
|
||||
for (i=0; i<p.length; i+=2) {
|
||||
if (p[i] != "")
|
||||
r[r.length] = {rule : tinymce.trim(p[i]), data : tinyMCEPopup.dom.parseStyle(p[i+1])};
|
||||
}
|
||||
if (item.length > 1)
|
||||
addSelectValue(form, 'docencoding', item[0], item[1]);
|
||||
}
|
||||
|
||||
return r;
|
||||
}
|
||||
// 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');
|
||||
|
||||
function serializeStyleElement(d) {
|
||||
var i, s, st;
|
||||
// Resize some elements
|
||||
if (isVisible('stylesheetbrowser'))
|
||||
document.getElementById('stylesheet').style.width = '220px';
|
||||
|
||||
s = '<!--\n';
|
||||
if (isVisible('link_href_browser'))
|
||||
document.getElementById('element_link_href').style.width = '230px';
|
||||
|
||||
for (i=0; i<d.length; i++) {
|
||||
s += d[i].rule + ' {\n';
|
||||
if (isVisible('bgimage_browser'))
|
||||
document.getElementById('bgimage').style.width = '210px';
|
||||
|
||||
st = tinyMCE.serializeStyle(d[i].data);
|
||||
// Update form
|
||||
tinymce.each(tinyMCEPopup.getWindowArg('data'), function(value, key) {
|
||||
setVal(key, value);
|
||||
});
|
||||
|
||||
if (st != '')
|
||||
st += ';';
|
||||
FullPageDialog.changedStyle();
|
||||
|
||||
s += st.replace(/;/g, ';\n');
|
||||
s += '}\n';
|
||||
// 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');
|
||||
};
|
||||
|
||||
if (i != d.length - 1)
|
||||
s += '\n';
|
||||
}
|
||||
|
||||
s += '\n-->';
|
||||
|
||||
return s;
|
||||
}
|
||||
|
||||
tinyMCEPopup.onInit.add(init);
|
||||
tinyMCEPopup.onInit.add(init);
|
||||
})();
|
||||
|
|
|
|||
86
library/tinymce/jscripts/tiny_mce/plugins/fullpage/langs/en_dlg.js
vendored
Executable file → Normal file
|
|
@ -1,85 +1 @@
|
|||
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:"Src",
|
||||
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"
|
||||
});
|
||||
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"});
|
||||
2
library/tinymce/jscripts/tiny_mce/plugins/fullscreen/editor_plugin.js
vendored
Executable file → Normal file
|
|
@ -1 +1 @@
|
|||
(function(){var a=tinymce.DOM;tinymce.create("tinymce.plugins.FullScreenPlugin",{init:function(c,d){var e=this,f={},b;e.editor=c;c.addCommand("mceFullScreen",function(){var h,i=a.doc.documentElement;if(c.getParam("fullscreen_is_enabled")){if(c.getParam("fullscreen_new_window")){closeFullscreen()}else{a.win.setTimeout(function(){tinymce.dom.Event.remove(a.win,"resize",e.resizeFunc);tinyMCE.get(c.getParam("fullscreen_editor_id")).setContent(c.getContent({format:"raw"}),{format:"raw"});tinyMCE.remove(c);a.remove("mce_fullscreen_container");i.style.overflow=c.getParam("fullscreen_html_overflow");a.setStyle(a.doc.body,"overflow",c.getParam("fullscreen_overflow"));a.win.scrollTo(c.getParam("fullscreen_scrollx"),c.getParam("fullscreen_scrolly"));tinyMCE.settings=tinyMCE.oldSettings},10)}return}if(c.getParam("fullscreen_new_window")){h=a.win.open(d+"/fullscreen.htm","mceFullScreenPopup","fullscreen=yes,menubar=no,toolbar=no,scrollbars=no,resizable=yes,left=0,top=0,width="+screen.availWidth+",height="+screen.availHeight);try{h.resizeTo(screen.availWidth,screen.availHeight)}catch(g){}}else{tinyMCE.oldSettings=tinyMCE.settings;f.fullscreen_overflow=a.getStyle(a.doc.body,"overflow",1)||"auto";f.fullscreen_html_overflow=a.getStyle(i,"overflow",1);b=a.getViewPort();f.fullscreen_scrollx=b.x;f.fullscreen_scrolly=b.y;if(tinymce.isOpera&&f.fullscreen_overflow=="visible"){f.fullscreen_overflow="auto"}if(tinymce.isIE&&f.fullscreen_overflow=="scroll"){f.fullscreen_overflow="auto"}if(tinymce.isIE&&(f.fullscreen_html_overflow=="visible"||f.fullscreen_html_overflow=="scroll")){f.fullscreen_html_overflow="auto"}if(f.fullscreen_overflow=="0px"){f.fullscreen_overflow=""}a.setStyle(a.doc.body,"overflow","hidden");i.style.overflow="hidden";b=a.getViewPort();a.win.scrollTo(0,0);if(tinymce.isIE){b.h-=1}n=a.add(a.doc.body,"div",{id:"mce_fullscreen_container",style:"position:"+(tinymce.isIE6||(tinymce.isIE&&!a.boxModel)?"absolute":"fixed")+";top:0;left:0;width:"+b.w+"px;height:"+b.h+"px;z-index:200000;"});a.add(n,"div",{id:"mce_fullscreen"});tinymce.each(c.settings,function(j,k){f[k]=j});f.id="mce_fullscreen";f.width=n.clientWidth;f.height=n.clientHeight-15;f.fullscreen_is_enabled=true;f.fullscreen_editor_id=c.id;f.theme_advanced_resizing=false;f.save_onsavecallback=function(){c.setContent(tinyMCE.get(f.id).getContent({format:"raw"}),{format:"raw"});c.execCommand("mceSave")};tinymce.each(c.getParam("fullscreen_settings"),function(l,j){f[j]=l});if(f.theme_advanced_toolbar_location==="external"){f.theme_advanced_toolbar_location="top"}e.fullscreenEditor=new tinymce.Editor("mce_fullscreen",f);e.fullscreenEditor.onInit.add(function(){e.fullscreenEditor.setContent(c.getContent());e.fullscreenEditor.focus()});e.fullscreenEditor.render();e.fullscreenElement=new tinymce.dom.Element("mce_fullscreen_container");e.fullscreenElement.update();e.resizeFunc=tinymce.dom.Event.add(a.win,"resize",function(){var m=tinymce.DOM.getViewPort(),k=e.fullscreenEditor,j,l;j=k.dom.getSize(k.getContainer().firstChild);l=k.dom.getSize(k.getContainer().getElementsByTagName("iframe")[0]);k.theme.resizeTo(m.w-j.w+l.w,m.h-j.h+l.h)})}});c.addButton("fullscreen",{title:"fullscreen.desc",cmd:"mceFullScreen"});c.onNodeChange.add(function(h,g){g.setActive("fullscreen",h.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)})();
|
||||
(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){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().firstChild);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)})();
|
||||
16
library/tinymce/jscripts/tiny_mce/plugins/fullscreen/editor_plugin_src.js
vendored
Executable file → Normal file
|
|
@ -13,7 +13,7 @@
|
|||
|
||||
tinymce.create('tinymce.plugins.FullScreenPlugin', {
|
||||
init : function(ed, url) {
|
||||
var t = this, s = {}, vp;
|
||||
var t = this, s = {}, vp, posCss;
|
||||
|
||||
t.editor = ed;
|
||||
|
||||
|
|
@ -27,7 +27,7 @@
|
|||
else {
|
||||
DOM.win.setTimeout(function() {
|
||||
tinymce.dom.Event.remove(DOM.win, 'resize', t.resizeFunc);
|
||||
tinyMCE.get(ed.getParam('fullscreen_editor_id')).setContent(ed.getContent({format : 'raw'}), {format : 'raw'});
|
||||
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');
|
||||
|
|
@ -78,7 +78,15 @@
|
|||
if (tinymce.isIE)
|
||||
vp.h -= 1;
|
||||
|
||||
n = DOM.add(DOM.doc.body, 'div', {id : 'mce_fullscreen_container', style : 'position:' + (tinymce.isIE6 || (tinymce.isIE && !DOM.boxModel) ? 'absolute' : 'fixed') + ';top:0;left:0;width:' + vp.w + 'px;height:' + vp.h + 'px;z-index:200000;'});
|
||||
// Use fixed position if it exists
|
||||
if (tinymce.isIE6)
|
||||
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) {
|
||||
|
|
@ -92,7 +100,7 @@
|
|||
s.fullscreen_editor_id = ed.id;
|
||||
s.theme_advanced_resizing = false;
|
||||
s.save_onsavecallback = function() {
|
||||
ed.setContent(tinyMCE.get(s.id).getContent({format : 'raw'}), {format : 'raw'});
|
||||
ed.setContent(tinyMCE.get(s.id).getContent());
|
||||
ed.execCommand('mceSave');
|
||||
};
|
||||
|
||||
|
|
|
|||
3
library/tinymce/jscripts/tiny_mce/plugins/fullscreen/fullscreen.htm
vendored
Executable file → Normal file
|
|
@ -1,7 +1,8 @@
|
|||
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
|
||||
<!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) {
|
||||
|
|
|
|||
0
library/tinymce/jscripts/tiny_mce/plugins/iespell/editor_plugin.js
vendored
Executable file → Normal file
0
library/tinymce/jscripts/tiny_mce/plugins/iespell/editor_plugin_src.js
vendored
Executable file → Normal file
2
library/tinymce/jscripts/tiny_mce/plugins/inlinepopups/editor_plugin.js
vendored
Executable file → Normal file
94
library/tinymce/jscripts/tiny_mce/plugins/inlinepopups/editor_plugin_src.js
vendored
Executable file → Normal file
|
|
@ -42,7 +42,7 @@
|
|||
},
|
||||
|
||||
open : function(f, p) {
|
||||
var t = this, id, opt = '', ed = t.editor, dw = 0, dh = 0, vp, po, mdf, clf, we, w, u;
|
||||
var t = this, id, opt = '', ed = t.editor, dw = 0, dh = 0, vp, po, mdf, clf, we, w, u, parentWindow;
|
||||
|
||||
f = f || {};
|
||||
p = p || {};
|
||||
|
|
@ -51,6 +51,11 @@
|
|||
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);
|
||||
|
|
@ -107,7 +112,7 @@
|
|||
|
||||
// Create DOM objects
|
||||
t._addAll(DOM.doc.body,
|
||||
['div', {id : id, 'class' : ed.settings.inlinepopups_skin || 'clearlooks2', style : 'width:100px;height:100px'},
|
||||
['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'}],
|
||||
|
|
@ -117,9 +122,9 @@
|
|||
],
|
||||
|
||||
['div', {id : id + '_middle', 'class' : 'mceMiddle'},
|
||||
['div', {id : id + '_left', 'class' : 'mceLeft'}],
|
||||
['div', {id : id + '_left', 'class' : 'mceLeft', tabindex : '0'}],
|
||||
['span', {id : id + '_content'}],
|
||||
['div', {id : id + '_right', 'class' : 'mceRight'}]
|
||||
['div', {id : id + '_right', 'class' : 'mceRight', tabindex : '0'}]
|
||||
],
|
||||
|
||||
['div', {id : id + '_bottom', 'class' : 'mceBottom'},
|
||||
|
|
@ -183,6 +188,27 @@
|
|||
|
||||
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
|
||||
|
|
@ -193,7 +219,10 @@
|
|||
t.focus(id);
|
||||
|
||||
if (n.nodeName == 'A' || n.nodeName == 'a') {
|
||||
if (n.className == 'mceMax') {
|
||||
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();
|
||||
|
||||
|
|
@ -240,6 +269,22 @@
|
|||
}
|
||||
});
|
||||
|
||||
// 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,
|
||||
|
|
@ -265,19 +310,20 @@
|
|||
});
|
||||
|
||||
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;
|
||||
|
|
@ -295,6 +341,14 @@
|
|||
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();
|
||||
}
|
||||
}
|
||||
},
|
||||
|
||||
|
|
@ -478,7 +532,7 @@
|
|||
},
|
||||
|
||||
close : function(win, id) {
|
||||
var t = this, w, d = DOM.doc, ix = 0, fw, id;
|
||||
var t = this, w, d = DOM.doc, fw, id;
|
||||
|
||||
id = t._findId(id || win);
|
||||
|
||||
|
|
@ -490,8 +544,11 @@
|
|||
|
||||
t.count--;
|
||||
|
||||
if (t.count == 0)
|
||||
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);
|
||||
|
|
@ -504,19 +561,26 @@
|
|||
w.element.remove();
|
||||
delete t.windows[id];
|
||||
|
||||
// Find front most window and focus that
|
||||
each (t.windows, function(w) {
|
||||
if (w.zIndex > ix) {
|
||||
fw = w;
|
||||
ix = w.zIndex;
|
||||
}
|
||||
});
|
||||
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;
|
||||
|
||||
|
|
|
|||
BIN
library/tinymce/jscripts/tiny_mce/plugins/inlinepopups/skins/clearlooks2/img/alert.gif
vendored
Executable file → Normal file
|
Before Width: | Height: | Size: 818 B After Width: | Height: | Size: 810 B |
BIN
library/tinymce/jscripts/tiny_mce/plugins/inlinepopups/skins/clearlooks2/img/button.gif
vendored
Executable file → Normal file
|
Before Width: | Height: | Size: 280 B After Width: | Height: | Size: 272 B |
0
library/tinymce/jscripts/tiny_mce/plugins/inlinepopups/skins/clearlooks2/img/buttons.gif
vendored
Executable file → Normal file
|
Before Width: | Height: | Size: 1.2 KiB After Width: | Height: | Size: 1.2 KiB |
BIN
library/tinymce/jscripts/tiny_mce/plugins/inlinepopups/skins/clearlooks2/img/confirm.gif
vendored
Executable file → Normal file
|
Before Width: | Height: | Size: 915 B After Width: | Height: | Size: 907 B |
BIN
library/tinymce/jscripts/tiny_mce/plugins/inlinepopups/skins/clearlooks2/img/corners.gif
vendored
Executable file → Normal file
|
Before Width: | Height: | Size: 911 B After Width: | Height: | Size: 909 B |
0
library/tinymce/jscripts/tiny_mce/plugins/inlinepopups/skins/clearlooks2/img/horizontal.gif
vendored
Executable file → Normal file
|
Before Width: | Height: | Size: 769 B After Width: | Height: | Size: 769 B |
BIN
library/tinymce/jscripts/tiny_mce/plugins/inlinepopups/skins/clearlooks2/img/vertical.gif
vendored
Executable file → Normal file
|
Before Width: | Height: | Size: 92 B After Width: | Height: | Size: 84 B |
0
library/tinymce/jscripts/tiny_mce/plugins/inlinepopups/skins/clearlooks2/window.css
vendored
Executable file → Normal file
0
library/tinymce/jscripts/tiny_mce/plugins/inlinepopups/template.htm
vendored
Executable file → Normal file
0
library/tinymce/jscripts/tiny_mce/plugins/insertdatetime/editor_plugin.js
vendored
Executable file → Normal file
0
library/tinymce/jscripts/tiny_mce/plugins/insertdatetime/editor_plugin_src.js
vendored
Executable file → Normal file
2
library/tinymce/jscripts/tiny_mce/plugins/layer/editor_plugin.js
vendored
Executable file → Normal file
|
|
@ -1 +1 @@
|
|||
(function(){tinymce.create("tinymce.plugins.Layer",{init:function(a,b){var c=this;c.editor=a;a.addCommand("mceInsertLayer",c._insertLayer,c);a.addCommand("mceMoveForward",function(){c._move(1)});a.addCommand("mceMoveBackward",function(){c._move(-1)});a.addCommand("mceMakeAbsolute",function(){c._toggleAbsolute()});a.addButton("moveforward",{title:"layer.forward_desc",cmd:"mceMoveForward"});a.addButton("movebackward",{title:"layer.backward_desc",cmd:"mceMoveBackward"});a.addButton("absolute",{title:"layer.absolute_desc",cmd:"mceMakeAbsolute"});a.addButton("insertlayer",{title:"layer.insertlayer_desc",cmd:"mceInsertLayer"});a.onInit.add(function(){if(tinymce.isIE){a.getDoc().execCommand("2D-Position",false,true)}});a.onNodeChange.add(c._nodeChange,c);a.onVisualAid.add(c._visualAid,c)},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(b,a,e){var c,d;c=this._getParentLayer(e);d=b.dom.getParent(e,"DIV,P,IMG");if(!d){a.setDisabled("absolute",1);a.setDisabled("moveforward",1);a.setDisabled("movebackward",1)}else{a.setDisabled("absolute",0);a.setDisabled("moveforward",!c);a.setDisabled("movebackward",!c);a.setActive("absolute",c&&c.style.position.toLowerCase()=="absolute")}},_visualAid:function(a,c,b){var d=a.dom;tinymce.each(d.select("div,p",c),function(f){if(/^(absolute|relative|static)$/i.test(f.style.position)){if(b){d.addClass(f,"mceItemVisualAid")}else{d.removeClass(f,"mceItemVisualAid")}}})},_move:function(h){var b=this.editor,f,g=[],e=this._getParentLayer(b.selection.getNode()),c=-1,j=-1,a;a=[];tinymce.walk(b.getBody(),function(d){if(d.nodeType==1&&/^(absolute|relative|static)$/i.test(d.style.position)){a.push(d)}},"childNodes");for(f=0;f<a.length;f++){g[f]=a[f].style.zIndex?parseInt(a[f].style.zIndex):0;if(c<0&&a[f]==e){c=f}}if(h<0){for(f=0;f<g.length;f++){if(g[f]<g[c]){j=f;break}}if(j>-1){a[c].style.zIndex=g[j];a[j].style.zIndex=g[c]}else{if(g[c]>0){a[c].style.zIndex=g[c]-1}}}else{for(f=0;f<g.length;f++){if(g[f]>g[c]){j=f;break}}if(j>-1){a[c].style.zIndex=g[j];a[j].style.zIndex=g[c]}else{a[c].style.zIndex=g[c]+1}}b.execCommand("mceRepaint")},_getParentLayer:function(a){return this.editor.dom.getParent(a,function(b){return b.nodeType==1&&/^(absolute|relative|static)$/i.test(b.style.position)})},_insertLayer:function(){var a=this.editor,b=a.dom.getPos(a.dom.getParent(a.selection.getNode(),"*"));a.dom.add(a.getBody(),"div",{style:{position:"absolute",left:b.x,top:(b.y>20?b.y:20),width:100,height:100},"class":"mceItemVisualAid"},a.selection.getContent()||a.getLang("layer.content"))},_toggleAbsolute:function(){var a=this.editor,b=this._getParentLayer(a.selection.getNode());if(!b){b=a.dom.getParent(a.selection.getNode(),"DIV,P,IMG")}if(b){if(b.style.position.toLowerCase()=="absolute"){a.dom.setStyles(b,{position:"",left:"",top:"",width:"",height:""});a.dom.removeClass(b,"mceItemVisualAid")}else{if(b.style.left==""){b.style.left=20+"px"}if(b.style.top==""){b.style.top=20+"px"}if(b.style.width==""){b.style.width=b.width?(b.width+"px"):"100px"}if(b.style.height==""){b.style.height=b.height?(b.height+"px"):"100px"}b.style.position="absolute";a.addVisual(a.getBody())}a.execCommand("mceRepaint");a.nodeChanged()}}});tinymce.PluginManager.add("layer",tinymce.plugins.Layer)})();
|
||||
(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)})();
|
||||
58
library/tinymce/jscripts/tiny_mce/plugins/layer/editor_plugin_src.js
vendored
Executable file → Normal file
|
|
@ -9,6 +9,14 @@
|
|||
*/
|
||||
|
||||
(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;
|
||||
|
|
@ -37,10 +45,43 @@
|
|||
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);
|
||||
},
|
||||
|
|
@ -81,11 +122,13 @@
|
|||
var dom = ed.dom;
|
||||
|
||||
tinymce.each(dom.select('div,p', e), function(e) {
|
||||
if (/^(absolute|relative|static)$/i.test(e.style.position)) {
|
||||
if (/^(absolute|relative|fixed)$/i.test(e.style.position)) {
|
||||
if (s)
|
||||
dom.addClass(e, 'mceItemVisualAid');
|
||||
else
|
||||
dom.removeClass(e, 'mceItemVisualAid');
|
||||
|
||||
dom.addClass(e, 'mceItemLayer');
|
||||
}
|
||||
});
|
||||
},
|
||||
|
|
@ -153,9 +196,9 @@
|
|||
},
|
||||
|
||||
_insertLayer : function() {
|
||||
var ed = this.editor, p = ed.dom.getPos(ed.dom.getParent(ed.selection.getNode(), '*'));
|
||||
var ed = this.editor, dom = ed.dom, p = dom.getPos(dom.getParent(ed.selection.getNode(), '*')), body = ed.getBody();
|
||||
|
||||
ed.dom.add(ed.getBody(), 'div', {
|
||||
ed.dom.add(body, 'div', {
|
||||
style : {
|
||||
position : 'absolute',
|
||||
left : p.x,
|
||||
|
|
@ -163,8 +206,12 @@
|
|||
width : 100,
|
||||
height : 100
|
||||
},
|
||||
'class' : 'mceItemVisualAid'
|
||||
'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() {
|
||||
|
|
@ -184,6 +231,7 @@
|
|||
});
|
||||
|
||||
ed.dom.removeClass(le, 'mceItemVisualAid');
|
||||
ed.dom.removeClass(le, 'mceItemLayer');
|
||||
} else {
|
||||
if (le.style.left == "")
|
||||
le.style.left = 20 + 'px';
|
||||
|
|
@ -198,6 +246,8 @@
|
|||
le.style.height = le.height ? (le.height + 'px') : '100px';
|
||||
|
||||
le.style.position = "absolute";
|
||||
|
||||
ed.dom.setAttrib(le, 'data-mce-style', '');
|
||||
ed.addVisual(ed.getBody());
|
||||
}
|
||||
|
||||
|
|
|
|||
2
library/tinymce/jscripts/tiny_mce/plugins/legacyoutput/editor_plugin.js
vendored
Executable file → Normal file
|
|
@ -1 +1 @@
|
|||
(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.serializer;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:"full"}},bold:{inline:"b"},italic:{inline:"i"},underline:{inline:"u"},strikethrough:{inline:"strike"},fontname:{inline:"font",attributes:{face:"%value"}},fontsize:{inline:"font",attributes:{size:function(f){return a.inArray(e,f.value)+1}}},forecolor:{inline:"font",styles:{color:"%value"}},hilitecolor:{inline:"font",styles:{backgroundColor:"%value"}}});d._setup();a.each("b,i,u,strike".split(","),function(f){var g=d.rules[f];if(!g){d.addRules(f)}});if(!d.rules.font){d.addRules("font[face|size|color|style]")}a.each(c.split(","),function(f){var h=d.rules[f],g;if(h){a.each(h.attribs,function(j,i){if(i.name=="align"){g=true;return false}});if(!g){h.attribs.push({name:"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);
|
||||
(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",styles:{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);
|
||||
53
library/tinymce/jscripts/tiny_mce/plugins/legacyoutput/editor_plugin_src.js
vendored
Executable file → Normal file
|
|
@ -26,7 +26,7 @@
|
|||
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),
|
||||
serializer = editor.serializer;
|
||||
schema = editor.schema;
|
||||
|
||||
// Override some internal formats to produce legacy elements and attributes
|
||||
editor.formatter.register({
|
||||
|
|
@ -34,13 +34,27 @@
|
|||
alignleft : {selector : alignElements, attributes : {align : 'left'}},
|
||||
aligncenter : {selector : alignElements, attributes : {align : 'center'}},
|
||||
alignright : {selector : alignElements, attributes : {align : 'right'}},
|
||||
alignfull : {selector : alignElements, attributes : {align : 'full'}},
|
||||
alignfull : {selector : alignElements, attributes : {align : 'justify'}},
|
||||
|
||||
// Change the basic formatting elements to use deprecated element types
|
||||
bold : {inline : 'b'},
|
||||
italic : {inline : 'i'},
|
||||
underline : {inline : 'u'},
|
||||
strikethrough : {inline : 'strike'},
|
||||
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'}},
|
||||
|
|
@ -58,35 +72,24 @@
|
|||
hilitecolor : {inline : 'font', styles : {backgroundColor : '%value'}}
|
||||
});
|
||||
|
||||
// Force parsing of the serializer rules
|
||||
serializer._setup();
|
||||
|
||||
// Check that deprecated elements are allowed if not add them
|
||||
tinymce.each('b,i,u,strike'.split(','), function(name) {
|
||||
var rule = serializer.rules[name];
|
||||
|
||||
if (!rule)
|
||||
serializer.addRules(name);
|
||||
schema.addValidElements(name + '[*]');
|
||||
});
|
||||
|
||||
// Add font element if it's missing
|
||||
if (!serializer.rules["font"])
|
||||
serializer.addRules("font[face|size|color|style]");
|
||||
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 = serializer.rules[name], found;
|
||||
var rule = schema.getElementRule(name), found;
|
||||
|
||||
if (rule) {
|
||||
tinymce.each(rule.attribs, function(name, attr) {
|
||||
if (attr.name == 'align') {
|
||||
found = true;
|
||||
return false;
|
||||
}
|
||||
});
|
||||
|
||||
if (!found)
|
||||
rule.attribs.push({name : 'align'});
|
||||
if (!rule.attributes.align) {
|
||||
rule.attributes.align = {};
|
||||
rule.attributesOrder.push('align');
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
|
|
|
|||
1
library/tinymce/jscripts/tiny_mce/plugins/lists/editor_plugin.js
vendored
Normal file
951
library/tinymce/jscripts/tiny_mce/plugins/lists/editor_plugin_src.js
vendored
Normal file
|
|
@ -0,0 +1,951 @@
|
|||
/**
|
||||
* 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 < > tag and placing the caret inside an empty LI is handled and should be handled by the selection logic
|
||||
//li.appendChild(ed.dom.create(" ")); // 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(list, li) {
|
||||
var elements = [];
|
||||
var walker = new tinymce.dom.TreeWalker(li, list);
|
||||
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');
|
||||
if (list && list.firstChild === li) {
|
||||
var elements = listElements(list, 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()
|
||||
};
|
||||
}
|
||||
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 || 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);
|
||||
}
|
||||
|
||||
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) {
|
||||
if (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
|
||||
var 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);
|
||||
}());
|
||||
|
|
@ -1,6 +0,0 @@
|
|||
.mceItemFlash, .mceItemShockWave, .mceItemQuickTime, .mceItemWindowsMedia, .mceItemRealMedia {border:1px dotted #cc0000; background-position:center; background-repeat:no-repeat; background-color:#ffffcc;}
|
||||
.mceItemShockWave {background-image: url(../img/shockwave.gif);}
|
||||
.mceItemFlash {background-image:url(../img/flash.gif);}
|
||||
.mceItemQuickTime {background-image:url(../img/quicktime.gif);}
|
||||
.mceItemWindowsMedia {background-image:url(../img/windowsmedia.gif);}
|
||||
.mceItemRealMedia {background-image:url(../img/realmedia.gif);}
|
||||
9
library/tinymce/jscripts/tiny_mce/plugins/media/css/media.css
vendored
Executable file → Normal file
|
|
@ -1,12 +1,12 @@
|
|||
#id, #name, #hspace, #vspace, #class_name, #align { width: 100px }
|
||||
#id, #name, #hspace, #vspace, #class_name, #align { width: 100px }
|
||||
#hspace, #vspace { width: 50px }
|
||||
#flash_quality, #flash_align, #flash_scale, #flash_salign, #flash_wmode { width: 100px }
|
||||
#flash_base, #flash_flashvars { width: 240px }
|
||||
#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: 230px; overflow: auto }
|
||||
.panel_wrapper div.current { height: 390px; overflow: auto }
|
||||
#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 }
|
||||
|
|
@ -14,3 +14,4 @@
|
|||
#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}
|
||||
|
|
|
|||
2
library/tinymce/jscripts/tiny_mce/plugins/media/editor_plugin.js
vendored
Executable file → Normal file
1088
library/tinymce/jscripts/tiny_mce/plugins/media/editor_plugin_src.js
vendored
Executable file → Normal file
|
|
@ -9,187 +9,211 @@
|
|||
*/
|
||||
|
||||
(function() {
|
||||
var each = tinymce.each;
|
||||
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 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 t = this;
|
||||
var self = this, lookup = {}, i, y, item, name;
|
||||
|
||||
t.editor = ed;
|
||||
t.url = url;
|
||||
|
||||
function isMediaElm(n) {
|
||||
return /^(mceItemFlash|mceItemShockWave|mceItemWindowsMedia|mceItemQuickTime|mceItemRealMedia)$/.test(n.className);
|
||||
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() {
|
||||
// Force in _value parameter this extra parameter is required for older Opera versions
|
||||
ed.serializer.addRules('param[name|value|_mce_value]');
|
||||
// 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 : 470 + parseInt(ed.getLang('media.delta_height', 0)),
|
||||
height : 500 + parseInt(ed.getLang('media.delta_height', 0)),
|
||||
inline : 1
|
||||
}, {
|
||||
plugin_url : url
|
||||
plugin_url : url,
|
||||
data : data
|
||||
});
|
||||
});
|
||||
|
||||
// Register buttons
|
||||
ed.addButton('media', {title : 'media.desc', cmd : 'mceMedia'});
|
||||
|
||||
ed.onNodeChange.add(function(ed, cm, n) {
|
||||
cm.setActive('media', n.nodeName == 'IMG' && isMediaElm(n));
|
||||
// Update media selection status
|
||||
ed.onNodeChange.add(function(ed, cm, node) {
|
||||
cm.setActive('media', isMediaImg(node));
|
||||
});
|
||||
},
|
||||
|
||||
ed.onInit.add(function() {
|
||||
var lo = {
|
||||
mceItemFlash : 'flash',
|
||||
mceItemShockWave : 'shockwave',
|
||||
mceItemWindowsMedia : 'windowsmedia',
|
||||
mceItemQuickTime : 'quicktime',
|
||||
mceItemRealMedia : 'realmedia'
|
||||
};
|
||||
convertUrl : function(url, force_absolute) {
|
||||
var self = this, editor = self.editor, settings = editor.settings,
|
||||
urlConverter = settings.url_converter,
|
||||
urlConverterScope = settings.url_converter_scope || self;
|
||||
|
||||
ed.selection.onSetContent.add(function() {
|
||||
t._spansToImgs(ed.getBody());
|
||||
});
|
||||
if (!url)
|
||||
return url;
|
||||
|
||||
ed.selection.onBeforeSetContent.add(t._objectsToSpans, t);
|
||||
if (force_absolute)
|
||||
return editor.documentBaseURI.toAbsolute(url);
|
||||
|
||||
if (ed.settings.content_css !== false)
|
||||
ed.dom.loadCSS(url + "/css/content.css");
|
||||
|
||||
if (ed.theme && ed.theme.onResolveName) {
|
||||
ed.theme.onResolveName.add(function(th, o) {
|
||||
if (o.name == 'img') {
|
||||
each(lo, function(v, k) {
|
||||
if (ed.dom.hasClass(o.node, k)) {
|
||||
o.name = v;
|
||||
o.title = ed.dom.getAttrib(o.node, 'title');
|
||||
return false;
|
||||
}
|
||||
});
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
if (ed && ed.plugins.contextmenu) {
|
||||
ed.plugins.contextmenu.onContextMenu.add(function(th, m, e) {
|
||||
if (e.nodeName == 'IMG' && /mceItem(Flash|ShockWave|WindowsMedia|QuickTime|RealMedia)/.test(e.className)) {
|
||||
m.add({title : 'media.edit', icon : 'media', cmd : 'mceMedia'});
|
||||
}
|
||||
});
|
||||
}
|
||||
});
|
||||
|
||||
ed.onBeforeSetContent.add(t._objectsToSpans, t);
|
||||
|
||||
ed.onSetContent.add(function() {
|
||||
t._spansToImgs(ed.getBody());
|
||||
});
|
||||
|
||||
ed.onPreProcess.add(function(ed, o) {
|
||||
var dom = ed.dom;
|
||||
|
||||
if (o.set) {
|
||||
t._spansToImgs(o.node);
|
||||
|
||||
each(dom.select('IMG', o.node), function(n) {
|
||||
var p;
|
||||
|
||||
if (isMediaElm(n)) {
|
||||
p = t._parse(n.title);
|
||||
dom.setAttrib(n, 'width', dom.getAttrib(n, 'width', p.width || 100));
|
||||
dom.setAttrib(n, 'height', dom.getAttrib(n, 'height', p.height || 100));
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
if (o.get) {
|
||||
each(dom.select('IMG', o.node), function(n) {
|
||||
var ci, cb, mt;
|
||||
|
||||
if (ed.getParam('media_use_script')) {
|
||||
if (isMediaElm(n))
|
||||
n.className = n.className.replace(/mceItem/g, 'mceTemp');
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
switch (n.className) {
|
||||
case 'mceItemFlash':
|
||||
ci = 'd27cdb6e-ae6d-11cf-96b8-444553540000';
|
||||
cb = 'http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,40,0';
|
||||
mt = 'application/x-shockwave-flash';
|
||||
break;
|
||||
|
||||
case 'mceItemShockWave':
|
||||
ci = '166b1bca-3f9c-11cf-8075-444553540000';
|
||||
cb = 'http://download.macromedia.com/pub/shockwave/cabs/director/sw.cab#version=8,5,1,0';
|
||||
mt = 'application/x-director';
|
||||
break;
|
||||
|
||||
case 'mceItemWindowsMedia':
|
||||
ci = ed.getParam('media_wmp6_compatible') ? '05589fa1-c356-11ce-bf01-00aa0055595a' : '6bf52a52-394a-11d3-b153-00c04f79faa6';
|
||||
cb = 'http://activex.microsoft.com/activex/controls/mplayer/en/nsmp2inf.cab#Version=5,1,52,701';
|
||||
mt = 'application/x-mplayer2';
|
||||
break;
|
||||
|
||||
case 'mceItemQuickTime':
|
||||
ci = '02bf25d5-8c17-4b23-bc80-d3488abddc6b';
|
||||
cb = 'http://www.apple.com/qtactivex/qtplugin.cab#version=6,0,2,0';
|
||||
mt = 'video/quicktime';
|
||||
break;
|
||||
|
||||
case 'mceItemRealMedia':
|
||||
ci = 'cfcdaa03-8be4-11cf-b84b-0020afbbccfa';
|
||||
cb = 'http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,40,0';
|
||||
mt = 'audio/x-pn-realaudio-plugin';
|
||||
break;
|
||||
}
|
||||
|
||||
if (ci) {
|
||||
dom.replace(t._buildObj({
|
||||
classid : ci,
|
||||
codebase : cb,
|
||||
type : mt
|
||||
}, n), n);
|
||||
}
|
||||
});
|
||||
}
|
||||
});
|
||||
|
||||
ed.onPostProcess.add(function(ed, o) {
|
||||
o.content = o.content.replace(/_mce_value=/g, 'value=');
|
||||
});
|
||||
|
||||
function getAttr(s, n) {
|
||||
n = new RegExp(n + '=\"([^\"]+)\"', 'g').exec(s);
|
||||
|
||||
return n ? ed.dom.decode(n[1]) : '';
|
||||
};
|
||||
|
||||
ed.onPostProcess.add(function(ed, o) {
|
||||
if (ed.getParam('media_use_script')) {
|
||||
o.content = o.content.replace(/<img[^>]+>/g, function(im) {
|
||||
var cl = getAttr(im, 'class');
|
||||
|
||||
if (/^(mceTempFlash|mceTempShockWave|mceTempWindowsMedia|mceTempQuickTime|mceTempRealMedia)$/.test(cl)) {
|
||||
at = t._parse(getAttr(im, 'title'));
|
||||
at.width = getAttr(im, 'width');
|
||||
at.height = getAttr(im, 'height');
|
||||
im = '<script type="text/javascript">write' + cl.substring(7) + '({' + t._serialize(at) + '});</script>';
|
||||
}
|
||||
|
||||
return im;
|
||||
});
|
||||
}
|
||||
});
|
||||
return urlConverter.call(urlConverterScope, url, 'src', 'object');
|
||||
},
|
||||
|
||||
getInfo : function() {
|
||||
|
|
@ -202,210 +226,662 @@
|
|||
};
|
||||
},
|
||||
|
||||
// Private methods
|
||||
_objectsToSpans : function(ed, o) {
|
||||
var t = this, h = o.content;
|
||||
/**
|
||||
* 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;
|
||||
|
||||
h = h.replace(/<script[^>]*>\s*write(Flash|ShockWave|WindowsMedia|QuickTime|RealMedia)\(\{([^\)]*)\}\);\s*<\/script>/gi, function(a, b, c) {
|
||||
var o = t._parse(c);
|
||||
data.params.src = self.convertUrl(data.params.src, force_absolute);
|
||||
|
||||
return '<img class="mceItem' + b + '" title="' + ed.dom.encode(c) + '" src="' + t.url + '/img/trans.gif" width="' + o.width + '" height="' + o.height + '" />'
|
||||
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, "'")
|
||||
});
|
||||
|
||||
h = h.replace(/<object([^>]*)>/gi, '<span class="mceItemObject" $1>');
|
||||
h = h.replace(/<embed([^>]*)\/?>/gi, '<span class="mceItemEmbed" $1></span>');
|
||||
h = h.replace(/<embed([^>]*)>/gi, '<span class="mceItemEmbed" $1>');
|
||||
h = h.replace(/<\/(object)([^>]*)>/gi, '</span>');
|
||||
h = h.replace(/<\/embed>/gi, '');
|
||||
h = h.replace(/<param([^>]*)>/gi, function(a, b) {return '<span ' + b.replace(/value=/gi, '_mce_value=') + ' class="mceItemParam"></span>'});
|
||||
h = h.replace(/\/ class=\"mceItemParam\"><\/span>/gi, 'class="mceItemParam"></span>');
|
||||
img.width = data.width || (data.type == 'audio' ? "300" : "320");
|
||||
img.height = data.height || (data.type == 'audio' ? "32" : "240");
|
||||
|
||||
o.content = h;
|
||||
return img;
|
||||
},
|
||||
|
||||
_buildObj : function(o, n) {
|
||||
var ob, ed = this.editor, dom = ed.dom, p = this._parse(n.title), stc;
|
||||
/**
|
||||
* 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});
|
||||
},
|
||||
|
||||
stc = ed.getParam('media_strict', true) && o.type == 'application/x-shockwave-flash';
|
||||
/**
|
||||
* Converts the JSON data object to a HTML string.
|
||||
*/
|
||||
htmlToData : function(html) {
|
||||
var fragment, img, data;
|
||||
|
||||
p.width = o.width = dom.getAttrib(n, 'width') || 100;
|
||||
p.height = o.height = dom.getAttrib(n, 'height') || 100;
|
||||
data = {
|
||||
type : 'flash',
|
||||
video: {sources:[]},
|
||||
params: {}
|
||||
};
|
||||
|
||||
if (p.src)
|
||||
p.src = ed.convertURL(p.src, 'src', n);
|
||||
fragment = this.editor.parser.parse(html);
|
||||
img = fragment.getAll('img')[0];
|
||||
|
||||
if (stc) {
|
||||
ob = dom.create('span', {
|
||||
id : p.id,
|
||||
_mce_name : 'object',
|
||||
type : 'application/x-shockwave-flash',
|
||||
data : p.src,
|
||||
style : dom.getAttrib(n, 'style'),
|
||||
width : o.width,
|
||||
height : o.height
|
||||
});
|
||||
} else {
|
||||
ob = dom.create('span', {
|
||||
id : p.id,
|
||||
_mce_name : 'object',
|
||||
classid : "clsid:" + o.classid,
|
||||
style : dom.getAttrib(n, 'style'),
|
||||
codebase : o.codebase,
|
||||
width : o.width,
|
||||
height : o.height
|
||||
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;
|
||||
});
|
||||
}
|
||||
|
||||
each (p, function(v, k) {
|
||||
if (!/^(width|height|codebase|classid|id|_cx|_cy)$/.test(k)) {
|
||||
// Use url instead of src in IE for Windows media
|
||||
if (o.type == 'application/x-mplayer2' && k == 'src' && !p.url)
|
||||
k = 'url';
|
||||
|
||||
if (v)
|
||||
dom.add(ob, 'span', {_mce_name : 'param', name : k, '_mce_value' : v});
|
||||
}
|
||||
});
|
||||
|
||||
if (!stc)
|
||||
dom.add(ob, 'span', tinymce.extend({_mce_name : 'embed', type : o.type, style : dom.getAttrib(n, 'style')}, p));
|
||||
|
||||
return ob;
|
||||
return data;
|
||||
},
|
||||
|
||||
_spansToImgs : function(p) {
|
||||
var t = this, dom = t.editor.dom, im, ci;
|
||||
/**
|
||||
* 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;
|
||||
|
||||
each(dom.select('span', p), function(n) {
|
||||
// Convert object into image
|
||||
if (dom.getAttrib(n, 'class') == 'mceItemObject') {
|
||||
ci = dom.getAttrib(n, "classid").toLowerCase().replace(/\s+/g, '');
|
||||
// Find type by checking the classes
|
||||
values = tinymce.explode(value, ' ');
|
||||
for (i = 0; i < values.length; i++) {
|
||||
typeItem = this.lookup[values[i]];
|
||||
|
||||
switch (ci) {
|
||||
case 'clsid:d27cdb6e-ae6d-11cf-96b8-444553540000':
|
||||
dom.replace(t._createImg('mceItemFlash', n), n);
|
||||
break;
|
||||
if (typeItem)
|
||||
return typeItem;
|
||||
}
|
||||
},
|
||||
|
||||
case 'clsid:166b1bca-3f9c-11cf-8075-444553540000':
|
||||
dom.replace(t._createImg('mceItemShockWave', n), n);
|
||||
break;
|
||||
/**
|
||||
* 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;
|
||||
|
||||
case 'clsid:6bf52a52-394a-11d3-b153-00c04f79faa6':
|
||||
case 'clsid:22d6f312-b0f6-11d0-94ab-0080c74c7e95':
|
||||
case 'clsid:05589fa1-c356-11ce-bf01-00aa0055595a':
|
||||
dom.replace(t._createImg('mceItemWindowsMedia', n), n);
|
||||
break;
|
||||
// Adds the flash player
|
||||
function addPlayer(video_src, poster_src) {
|
||||
var baseUri, flashVars, flashVarsOutput, params, flashPlayer;
|
||||
|
||||
case 'clsid:02bf25d5-8c17-4b23-bc80-d3488abddc6b':
|
||||
dom.replace(t._createImg('mceItemQuickTime', n), n);
|
||||
break;
|
||||
flashPlayer = editor.getParam('flash_video_player_url', self.convertUrl(self.url + '/moxieplayer.swf'));
|
||||
if (flashPlayer) {
|
||||
baseUri = editor.documentBaseURI;
|
||||
data.params.src = flashPlayer;
|
||||
|
||||
case 'clsid:cfcdaa03-8be4-11cf-b84b-0020afbbccfa':
|
||||
dom.replace(t._createImg('mceItemRealMedia', n), n);
|
||||
break;
|
||||
|
||||
default:
|
||||
dom.replace(t._createImg('mceItemFlash', n), n);
|
||||
// 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'));
|
||||
}
|
||||
|
||||
// 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: node.attr('width'),
|
||||
height: 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: node.attr('width'),
|
||||
height: 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: node.attr('width'),
|
||||
height: 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: node.attr('width'),
|
||||
height: 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: node.attr('width'),
|
||||
height: 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 embed into image
|
||||
if (dom.getAttrib(n, 'class') == 'mceItemEmbed') {
|
||||
switch (dom.getAttrib(n, 'type')) {
|
||||
case 'application/x-shockwave-flash':
|
||||
dom.replace(t._createImg('mceItemFlash', n), n);
|
||||
break;
|
||||
// Convert the poster URL
|
||||
if (attrs.poster)
|
||||
attrs.poster = urlConverter.call(urlConverterScope, attrs.poster, 'poster', node.name);
|
||||
}
|
||||
|
||||
case 'application/x-director':
|
||||
dom.replace(t._createImg('mceItemShockWave', n), n);
|
||||
break;
|
||||
// Object element
|
||||
if (node.name === 'object') {
|
||||
object = node;
|
||||
embed = node.getAll('embed')[0];
|
||||
}
|
||||
|
||||
case 'application/x-mplayer2':
|
||||
dom.replace(t._createImg('mceItemWindowsMedia', n), n);
|
||||
break;
|
||||
// Embed element
|
||||
if (node.name === 'embed')
|
||||
embed = node;
|
||||
|
||||
case 'video/quicktime':
|
||||
dom.replace(t._createImg('mceItemQuickTime', n), n);
|
||||
break;
|
||||
// Iframe element
|
||||
if (node.name === 'iframe') {
|
||||
iframe = node;
|
||||
type = 'Iframe';
|
||||
}
|
||||
|
||||
case 'audio/x-pn-realaudio-plugin':
|
||||
dom.replace(t._createImg('mceItemRealMedia', n), n);
|
||||
break;
|
||||
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');
|
||||
|
||||
default:
|
||||
dom.replace(t._createImg('mceItemFlash', n), n);
|
||||
}
|
||||
// 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');
|
||||
}
|
||||
});
|
||||
},
|
||||
|
||||
_createImg : function(cl, n) {
|
||||
var im, dom = this.editor.dom, pa = {}, ti = '', args;
|
||||
data.params.src = data.params.src || object.attr('data');
|
||||
}
|
||||
|
||||
args = ['id', 'name', 'width', 'height', 'bgcolor', 'align', 'flashvars', 'src', 'wmode', 'allowfullscreen', 'quality', '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');
|
||||
|
||||
// Create image
|
||||
im = dom.create('img', {
|
||||
src : this.url + '/img/trans.gif',
|
||||
width : dom.getAttrib(n, 'width') || 100,
|
||||
height : dom.getAttrib(n, 'height') || 100,
|
||||
style : dom.getAttrib(n, 'style'),
|
||||
'class' : cl
|
||||
});
|
||||
// Get all embed attributes
|
||||
for (name in embed.attributes.map) {
|
||||
if (!excludedAttrs[name] && !data.params[name])
|
||||
data.params[name] = embed.attributes.map[name];
|
||||
}
|
||||
}
|
||||
|
||||
// Setup base parameters
|
||||
each(args, function(na) {
|
||||
var v = dom.getAttrib(n, na);
|
||||
if (iframe) {
|
||||
// Get width/height
|
||||
width = iframe.attr('width');
|
||||
height = 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');
|
||||
|
||||
if (v)
|
||||
pa[na] = v;
|
||||
});
|
||||
tinymce.each(rootAttributes, function(name) {
|
||||
img.attr(name, iframe.attr(name));
|
||||
});
|
||||
|
||||
// Add optional parameters
|
||||
each(dom.select('span', n), function(n) {
|
||||
if (dom.hasClass(n, 'mceItemParam'))
|
||||
pa[dom.getAttrib(n, 'name')] = dom.getAttrib(n, '_mce_value');
|
||||
});
|
||||
// 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 (pa.movie) {
|
||||
pa.src = pa.movie;
|
||||
delete pa.movie;
|
||||
if (data.params.movie) {
|
||||
data.params.src = data.params.src || data.params.movie;
|
||||
delete data.params.movie;
|
||||
}
|
||||
|
||||
// No src try data
|
||||
if (!pa.src) {
|
||||
pa.src = pa.data;
|
||||
delete pa.data;
|
||||
// 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;
|
||||
}
|
||||
|
||||
// Merge with embed args
|
||||
n = dom.select('.mceItemEmbed', n)[0];
|
||||
if (n) {
|
||||
each(args, function(na) {
|
||||
var v = dom.getAttrib(n, na);
|
||||
if (object && !type)
|
||||
type = (lookupAttribute(object, 'clsid') || lookupAttribute(object, 'classid') || lookupAttribute(object, 'type') || {}).name;
|
||||
|
||||
if (v && !pa[na])
|
||||
pa[na] = v;
|
||||
});
|
||||
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');
|
||||
}
|
||||
|
||||
delete pa.width;
|
||||
delete pa.height;
|
||||
// Replace the video/object/embed element with a placeholder image containing the data
|
||||
node.replace(img);
|
||||
|
||||
im.title = this._serialize(pa);
|
||||
// Remove embed
|
||||
if (embed)
|
||||
embed.remove();
|
||||
|
||||
return im;
|
||||
},
|
||||
// Serialize the inner HTML of the object element
|
||||
if (object) {
|
||||
html = getInnerHTML(object.remove());
|
||||
|
||||
_parse : function(s) {
|
||||
return tinymce.util.JSON.parse('{' + s + '}');
|
||||
},
|
||||
if (html)
|
||||
data.object_html = html;
|
||||
}
|
||||
|
||||
_serialize : function(o) {
|
||||
return tinymce.util.JSON.serialize(o).replace(/[{}]/g, '');
|
||||
// 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, "'")
|
||||
});
|
||||
}
|
||||
});
|
||||
|
||||
|
|
|
|||
|
Before Width: | Height: | Size: 241 B |
|
Before Width: | Height: | Size: 303 B |
|
Before Width: | Height: | Size: 387 B |
0
library/tinymce/jscripts/tiny_mce/plugins/media/js/embed.js
vendored
Executable file → Normal file
1046
library/tinymce/jscripts/tiny_mce/plugins/media/js/media.js
vendored
Executable file → Normal file
|
|
@ -1,630 +1,470 @@
|
|||
tinyMCEPopup.requireLangPack();
|
||||
(function() {
|
||||
var url;
|
||||
|
||||
var oldWidth, oldHeight, ed, url;
|
||||
if (url = tinyMCEPopup.getParam("media_external_list_url"))
|
||||
document.write('<script language="javascript" type="text/javascript" src="' + tinyMCEPopup.editor.documentBaseURI.toAbsolute(url) + '"></script>');
|
||||
|
||||
if (url = tinyMCEPopup.getParam("media_external_list_url"))
|
||||
document.write('<script language="javascript" type="text/javascript" src="' + tinyMCEPopup.editor.documentBaseURI.toAbsolute(url) + '"></script>');
|
||||
|
||||
function init() {
|
||||
var pl = "", f, val;
|
||||
var type = "flash", fe, i;
|
||||
|
||||
ed = tinyMCEPopup.editor;
|
||||
|
||||
tinyMCEPopup.resizeToInnerSize();
|
||||
f = document.forms[0]
|
||||
|
||||
fe = ed.selection.getNode();
|
||||
if (/mceItem(Flash|ShockWave|WindowsMedia|QuickTime|RealMedia)/.test(ed.dom.getAttrib(fe, 'class'))) {
|
||||
pl = fe.title;
|
||||
|
||||
switch (ed.dom.getAttrib(fe, 'class')) {
|
||||
case 'mceItemFlash':
|
||||
type = 'flash';
|
||||
break;
|
||||
|
||||
case 'mceItemFlashVideo':
|
||||
type = 'flv';
|
||||
break;
|
||||
|
||||
case 'mceItemShockWave':
|
||||
type = 'shockwave';
|
||||
break;
|
||||
|
||||
case 'mceItemWindowsMedia':
|
||||
type = 'wmp';
|
||||
break;
|
||||
|
||||
case 'mceItemQuickTime':
|
||||
type = 'qt';
|
||||
break;
|
||||
|
||||
case 'mceItemRealMedia':
|
||||
type = 'rmp';
|
||||
break;
|
||||
}
|
||||
|
||||
document.forms[0].insert.value = ed.getLang('update', 'Insert', true);
|
||||
function get(id) {
|
||||
return document.getElementById(id);
|
||||
}
|
||||
|
||||
document.getElementById('filebrowsercontainer').innerHTML = getBrowserHTML('filebrowser','src','media','media');
|
||||
document.getElementById('qtsrcfilebrowsercontainer').innerHTML = getBrowserHTML('qtsrcfilebrowser','qt_qtsrc','media','media');
|
||||
document.getElementById('bgcolor_pickcontainer').innerHTML = getColorPickerHTML('bgcolor_pick','bgcolor');
|
||||
function clone(obj) {
|
||||
var i, len, copy, attr;
|
||||
|
||||
var html = getMediaListHTML('medialist','src','media','media');
|
||||
if (html == "")
|
||||
document.getElementById("linklistrow").style.display = 'none';
|
||||
else
|
||||
document.getElementById("linklistcontainer").innerHTML = html;
|
||||
if (null == obj || "object" != typeof obj)
|
||||
return obj;
|
||||
|
||||
// Resize some elements
|
||||
if (isVisible('filebrowser'))
|
||||
document.getElementById('src').style.width = '230px';
|
||||
// Handle Array
|
||||
if ('length' in obj) {
|
||||
copy = [];
|
||||
|
||||
// Setup form
|
||||
if (pl != "") {
|
||||
pl = tinyMCEPopup.editor.plugins.media._parse(pl);
|
||||
|
||||
switch (type) {
|
||||
case "flash":
|
||||
setBool(pl, 'flash', 'play');
|
||||
setBool(pl, 'flash', 'loop');
|
||||
setBool(pl, 'flash', 'menu');
|
||||
setBool(pl, 'flash', 'swliveconnect');
|
||||
setStr(pl, 'flash', 'quality');
|
||||
setStr(pl, 'flash', 'scale');
|
||||
setStr(pl, 'flash', 'salign');
|
||||
setStr(pl, 'flash', 'wmode');
|
||||
setStr(pl, 'flash', 'base');
|
||||
setStr(pl, 'flash', 'flashvars');
|
||||
break;
|
||||
|
||||
case "qt":
|
||||
setBool(pl, 'qt', 'loop');
|
||||
setBool(pl, 'qt', 'autoplay');
|
||||
setBool(pl, 'qt', 'cache');
|
||||
setBool(pl, 'qt', 'controller');
|
||||
setBool(pl, 'qt', 'correction');
|
||||
setBool(pl, 'qt', 'enablejavascript');
|
||||
setBool(pl, 'qt', 'kioskmode');
|
||||
setBool(pl, 'qt', 'autohref');
|
||||
setBool(pl, 'qt', 'playeveryframe');
|
||||
setBool(pl, 'qt', 'tarsetcache');
|
||||
setStr(pl, 'qt', 'scale');
|
||||
setStr(pl, 'qt', 'starttime');
|
||||
setStr(pl, 'qt', 'endtime');
|
||||
setStr(pl, 'qt', 'tarset');
|
||||
setStr(pl, 'qt', 'qtsrcchokespeed');
|
||||
setStr(pl, 'qt', 'volume');
|
||||
setStr(pl, 'qt', 'qtsrc');
|
||||
break;
|
||||
|
||||
case "shockwave":
|
||||
setBool(pl, 'shockwave', 'sound');
|
||||
setBool(pl, 'shockwave', 'progress');
|
||||
setBool(pl, 'shockwave', 'autostart');
|
||||
setBool(pl, 'shockwave', 'swliveconnect');
|
||||
setStr(pl, 'shockwave', 'swvolume');
|
||||
setStr(pl, 'shockwave', 'swstretchstyle');
|
||||
setStr(pl, 'shockwave', 'swstretchhalign');
|
||||
setStr(pl, 'shockwave', 'swstretchvalign');
|
||||
break;
|
||||
|
||||
case "wmp":
|
||||
setBool(pl, 'wmp', 'autostart');
|
||||
setBool(pl, 'wmp', 'enabled');
|
||||
setBool(pl, 'wmp', 'enablecontextmenu');
|
||||
setBool(pl, 'wmp', 'fullscreen');
|
||||
setBool(pl, 'wmp', 'invokeurls');
|
||||
setBool(pl, 'wmp', 'mute');
|
||||
setBool(pl, 'wmp', 'stretchtofit');
|
||||
setBool(pl, 'wmp', 'windowlessvideo');
|
||||
setStr(pl, 'wmp', 'balance');
|
||||
setStr(pl, 'wmp', 'baseurl');
|
||||
setStr(pl, 'wmp', 'captioningid');
|
||||
setStr(pl, 'wmp', 'currentmarker');
|
||||
setStr(pl, 'wmp', 'currentposition');
|
||||
setStr(pl, 'wmp', 'defaultframe');
|
||||
setStr(pl, 'wmp', 'playcount');
|
||||
setStr(pl, 'wmp', 'rate');
|
||||
setStr(pl, 'wmp', 'uimode');
|
||||
setStr(pl, 'wmp', 'volume');
|
||||
break;
|
||||
|
||||
case "rmp":
|
||||
setBool(pl, 'rmp', 'autostart');
|
||||
setBool(pl, 'rmp', 'loop');
|
||||
setBool(pl, 'rmp', 'autogotourl');
|
||||
setBool(pl, 'rmp', 'center');
|
||||
setBool(pl, 'rmp', 'imagestatus');
|
||||
setBool(pl, 'rmp', 'maintainaspect');
|
||||
setBool(pl, 'rmp', 'nojava');
|
||||
setBool(pl, 'rmp', 'prefetch');
|
||||
setBool(pl, 'rmp', 'shuffle');
|
||||
setStr(pl, 'rmp', 'console');
|
||||
setStr(pl, 'rmp', 'controls');
|
||||
setStr(pl, 'rmp', 'numloop');
|
||||
setStr(pl, 'rmp', 'scriptcallbacks');
|
||||
break;
|
||||
}
|
||||
|
||||
setStr(pl, null, 'src');
|
||||
setStr(pl, null, 'id');
|
||||
setStr(pl, null, 'name');
|
||||
setStr(pl, null, 'vspace');
|
||||
setStr(pl, null, 'hspace');
|
||||
setStr(pl, null, 'bgcolor');
|
||||
setStr(pl, null, 'align');
|
||||
setStr(pl, null, 'width');
|
||||
setStr(pl, null, 'height');
|
||||
|
||||
if ((val = ed.dom.getAttrib(fe, "width")) != "")
|
||||
pl.width = f.width.value = val;
|
||||
|
||||
if ((val = ed.dom.getAttrib(fe, "height")) != "")
|
||||
pl.height = f.height.value = val;
|
||||
|
||||
oldWidth = pl.width ? parseInt(pl.width) : 0;
|
||||
oldHeight = pl.height ? parseInt(pl.height) : 0;
|
||||
} else
|
||||
oldWidth = oldHeight = 0;
|
||||
|
||||
selectByValue(f, 'media_type', type);
|
||||
changedType(type);
|
||||
updateColor('bgcolor_pick', 'bgcolor');
|
||||
|
||||
TinyMCE_EditableSelects.init();
|
||||
generatePreview();
|
||||
}
|
||||
|
||||
function insertMedia() {
|
||||
var fe, f = document.forms[0], h;
|
||||
|
||||
tinyMCEPopup.restoreSelection();
|
||||
|
||||
if (!AutoValidator.validate(f)) {
|
||||
tinyMCEPopup.alert(ed.getLang('invalid_data'));
|
||||
return false;
|
||||
}
|
||||
|
||||
f.width.value = f.width.value == "" ? 100 : f.width.value;
|
||||
f.height.value = f.height.value == "" ? 100 : f.height.value;
|
||||
|
||||
fe = ed.selection.getNode();
|
||||
if (fe != null && /mceItem(Flash|ShockWave|WindowsMedia|QuickTime|RealMedia)/.test(ed.dom.getAttrib(fe, 'class'))) {
|
||||
switch (f.media_type.options[f.media_type.selectedIndex].value) {
|
||||
case "flash":
|
||||
fe.className = "mceItemFlash";
|
||||
break;
|
||||
|
||||
case "flv":
|
||||
fe.className = "mceItemFlashVideo";
|
||||
break;
|
||||
|
||||
case "shockwave":
|
||||
fe.className = "mceItemShockWave";
|
||||
break;
|
||||
|
||||
case "qt":
|
||||
fe.className = "mceItemQuickTime";
|
||||
break;
|
||||
|
||||
case "wmp":
|
||||
fe.className = "mceItemWindowsMedia";
|
||||
break;
|
||||
|
||||
case "rmp":
|
||||
fe.className = "mceItemRealMedia";
|
||||
break;
|
||||
}
|
||||
|
||||
if (fe.width != f.width.value || fe.height != f.height.value)
|
||||
ed.execCommand('mceRepaint');
|
||||
|
||||
fe.title = serializeParameters();
|
||||
fe.width = f.width.value;
|
||||
fe.height = f.height.value;
|
||||
fe.style.width = f.width.value + (f.width.value.indexOf('%') == -1 ? 'px' : '');
|
||||
fe.style.height = f.height.value + (f.height.value.indexOf('%') == -1 ? 'px' : '');
|
||||
fe.align = f.align.options[f.align.selectedIndex].value;
|
||||
} else {
|
||||
h = '<img src="' + tinyMCEPopup.getWindowArg("plugin_url") + '/img/trans.gif"' ;
|
||||
|
||||
switch (f.media_type.options[f.media_type.selectedIndex].value) {
|
||||
case "flash":
|
||||
h += ' class="mceItemFlash"';
|
||||
break;
|
||||
|
||||
case "flv":
|
||||
h += ' class="mceItemFlashVideo"';
|
||||
break;
|
||||
|
||||
case "shockwave":
|
||||
h += ' class="mceItemShockWave"';
|
||||
break;
|
||||
|
||||
case "qt":
|
||||
h += ' class="mceItemQuickTime"';
|
||||
break;
|
||||
|
||||
case "wmp":
|
||||
h += ' class="mceItemWindowsMedia"';
|
||||
break;
|
||||
|
||||
case "rmp":
|
||||
h += ' class="mceItemRealMedia"';
|
||||
break;
|
||||
}
|
||||
|
||||
h += ' title="' + serializeParameters() + '"';
|
||||
h += ' width="' + f.width.value + '"';
|
||||
h += ' height="' + f.height.value + '"';
|
||||
h += ' align="' + f.align.options[f.align.selectedIndex].value + '"';
|
||||
|
||||
h += ' />';
|
||||
|
||||
ed.execCommand('mceInsertContent', false, h);
|
||||
}
|
||||
|
||||
tinyMCEPopup.close();
|
||||
}
|
||||
|
||||
function updatePreview() {
|
||||
var f = document.forms[0], type;
|
||||
|
||||
f.width.value = f.width.value || '320';
|
||||
f.height.value = f.height.value || '240';
|
||||
|
||||
type = getType(f.src.value);
|
||||
selectByValue(f, 'media_type', type);
|
||||
changedType(type);
|
||||
generatePreview();
|
||||
}
|
||||
|
||||
function getMediaListHTML() {
|
||||
if (typeof(tinyMCEMediaList) != "undefined" && tinyMCEMediaList.length > 0) {
|
||||
var html = "";
|
||||
|
||||
html += '<select id="linklist" name="linklist" style="width: 250px" onchange="this.form.src.value=this.options[this.selectedIndex].value;updatePreview();">';
|
||||
html += '<option value="">---</option>';
|
||||
|
||||
for (var i=0; i<tinyMCEMediaList.length; i++)
|
||||
html += '<option value="' + tinyMCEMediaList[i][1] + '">' + tinyMCEMediaList[i][0] + '</option>';
|
||||
|
||||
html += '</select>';
|
||||
|
||||
return html;
|
||||
}
|
||||
|
||||
return "";
|
||||
}
|
||||
|
||||
function getType(v) {
|
||||
var fo, i, c, el, x, f = document.forms[0];
|
||||
|
||||
fo = ed.getParam("media_types", "flash=swf;flv=flv;shockwave=dcr;qt=mov,qt,mpg,mp3,mp4,mpeg;shockwave=dcr;wmp=avi,wmv,wm,asf,asx,wmx,wvx;rmp=rm,ra,ram").split(';');
|
||||
|
||||
// YouTube
|
||||
if (v.match(/watch\?v=(.+)(.*)/)) {
|
||||
f.width.value = '425';
|
||||
f.height.value = '350';
|
||||
f.src.value = 'http://www.youtube.com/v/' + v.match(/v=(.*)(.*)/)[0].split('=')[1];
|
||||
return 'flash';
|
||||
}
|
||||
|
||||
// Google video
|
||||
if (v.indexOf('http://video.google.com/videoplay?docid=') == 0) {
|
||||
f.width.value = '425';
|
||||
f.height.value = '326';
|
||||
f.src.value = 'http://video.google.com/googleplayer.swf?docId=' + v.substring('http://video.google.com/videoplay?docid='.length) + '&hl=en';
|
||||
return 'flash';
|
||||
}
|
||||
|
||||
for (i=0; i<fo.length; i++) {
|
||||
c = fo[i].split('=');
|
||||
|
||||
el = c[1].split(',');
|
||||
for (x=0; x<el.length; x++)
|
||||
if (v.indexOf('.' + el[x]) != -1)
|
||||
return c[0];
|
||||
}
|
||||
|
||||
return null;
|
||||
}
|
||||
|
||||
function switchType(v) {
|
||||
var t = getType(v), d = document, f = d.forms[0];
|
||||
|
||||
if (!t)
|
||||
return;
|
||||
|
||||
selectByValue(d.forms[0], 'media_type', t);
|
||||
changedType(t);
|
||||
|
||||
// Update qtsrc also
|
||||
if (t == 'qt' && f.src.value.toLowerCase().indexOf('rtsp://') != -1) {
|
||||
alert(ed.getLang("media_qt_stream_warn"));
|
||||
|
||||
if (f.qt_qtsrc.value == '')
|
||||
f.qt_qtsrc.value = f.src.value;
|
||||
}
|
||||
}
|
||||
|
||||
function changedType(t) {
|
||||
var d = document;
|
||||
|
||||
d.getElementById('flash_options').style.display = 'none';
|
||||
d.getElementById('flv_options').style.display = 'none';
|
||||
d.getElementById('qt_options').style.display = 'none';
|
||||
d.getElementById('shockwave_options').style.display = 'none';
|
||||
d.getElementById('wmp_options').style.display = 'none';
|
||||
d.getElementById('rmp_options').style.display = 'none';
|
||||
|
||||
if (t)
|
||||
d.getElementById(t + '_options').style.display = 'block';
|
||||
}
|
||||
|
||||
function serializeParameters() {
|
||||
var d = document, f = d.forms[0], s = '';
|
||||
|
||||
switch (f.media_type.options[f.media_type.selectedIndex].value) {
|
||||
case "flash":
|
||||
s += getBool('flash', 'play', true);
|
||||
s += getBool('flash', 'loop', true);
|
||||
s += getBool('flash', 'menu', true);
|
||||
s += getBool('flash', 'swliveconnect', false);
|
||||
s += getStr('flash', 'quality');
|
||||
s += getStr('flash', 'scale');
|
||||
s += getStr('flash', 'salign');
|
||||
s += getStr('flash', 'wmode');
|
||||
s += getStr('flash', 'base');
|
||||
s += getStr('flash', 'flashvars');
|
||||
break;
|
||||
|
||||
case "qt":
|
||||
s += getBool('qt', 'loop', false);
|
||||
s += getBool('qt', 'autoplay', true);
|
||||
s += getBool('qt', 'cache', false);
|
||||
s += getBool('qt', 'controller', true);
|
||||
s += getBool('qt', 'correction', false, 'none', 'full');
|
||||
s += getBool('qt', 'enablejavascript', false);
|
||||
s += getBool('qt', 'kioskmode', false);
|
||||
s += getBool('qt', 'autohref', false);
|
||||
s += getBool('qt', 'playeveryframe', false);
|
||||
s += getBool('qt', 'targetcache', false);
|
||||
s += getStr('qt', 'scale');
|
||||
s += getStr('qt', 'starttime');
|
||||
s += getStr('qt', 'endtime');
|
||||
s += getStr('qt', 'target');
|
||||
s += getStr('qt', 'qtsrcchokespeed');
|
||||
s += getStr('qt', 'volume');
|
||||
s += getStr('qt', 'qtsrc');
|
||||
break;
|
||||
|
||||
case "shockwave":
|
||||
s += getBool('shockwave', 'sound');
|
||||
s += getBool('shockwave', 'progress');
|
||||
s += getBool('shockwave', 'autostart');
|
||||
s += getBool('shockwave', 'swliveconnect');
|
||||
s += getStr('shockwave', 'swvolume');
|
||||
s += getStr('shockwave', 'swstretchstyle');
|
||||
s += getStr('shockwave', 'swstretchhalign');
|
||||
s += getStr('shockwave', 'swstretchvalign');
|
||||
break;
|
||||
|
||||
case "wmp":
|
||||
s += getBool('wmp', 'autostart', true);
|
||||
s += getBool('wmp', 'enabled', false);
|
||||
s += getBool('wmp', 'enablecontextmenu', true);
|
||||
s += getBool('wmp', 'fullscreen', false);
|
||||
s += getBool('wmp', 'invokeurls', true);
|
||||
s += getBool('wmp', 'mute', false);
|
||||
s += getBool('wmp', 'stretchtofit', false);
|
||||
s += getBool('wmp', 'windowlessvideo', false);
|
||||
s += getStr('wmp', 'balance');
|
||||
s += getStr('wmp', 'baseurl');
|
||||
s += getStr('wmp', 'captioningid');
|
||||
s += getStr('wmp', 'currentmarker');
|
||||
s += getStr('wmp', 'currentposition');
|
||||
s += getStr('wmp', 'defaultframe');
|
||||
s += getStr('wmp', 'playcount');
|
||||
s += getStr('wmp', 'rate');
|
||||
s += getStr('wmp', 'uimode');
|
||||
s += getStr('wmp', 'volume');
|
||||
break;
|
||||
|
||||
case "rmp":
|
||||
s += getBool('rmp', 'autostart', false);
|
||||
s += getBool('rmp', 'loop', false);
|
||||
s += getBool('rmp', 'autogotourl', true);
|
||||
s += getBool('rmp', 'center', false);
|
||||
s += getBool('rmp', 'imagestatus', true);
|
||||
s += getBool('rmp', 'maintainaspect', false);
|
||||
s += getBool('rmp', 'nojava', false);
|
||||
s += getBool('rmp', 'prefetch', false);
|
||||
s += getBool('rmp', 'shuffle', false);
|
||||
s += getStr('rmp', 'console');
|
||||
s += getStr('rmp', 'controls');
|
||||
s += getStr('rmp', 'numloop');
|
||||
s += getStr('rmp', 'scriptcallbacks');
|
||||
break;
|
||||
}
|
||||
|
||||
s += getStr(null, 'id');
|
||||
s += getStr(null, 'name');
|
||||
s += getStr(null, 'src');
|
||||
s += getStr(null, 'align');
|
||||
s += getStr(null, 'bgcolor');
|
||||
s += getInt(null, 'vspace');
|
||||
s += getInt(null, 'hspace');
|
||||
s += getStr(null, 'width');
|
||||
s += getStr(null, 'height');
|
||||
|
||||
s = s.length > 0 ? s.substring(0, s.length - 1) : s;
|
||||
|
||||
return s;
|
||||
}
|
||||
|
||||
function setBool(pl, p, n) {
|
||||
if (typeof(pl[n]) == "undefined")
|
||||
return;
|
||||
|
||||
document.forms[0].elements[p + "_" + n].checked = pl[n] != 'false';
|
||||
}
|
||||
|
||||
function setStr(pl, p, n) {
|
||||
var f = document.forms[0], e = f.elements[(p != null ? p + "_" : '') + n];
|
||||
|
||||
if (typeof(pl[n]) == "undefined")
|
||||
return;
|
||||
|
||||
if (e.type == "text")
|
||||
e.value = pl[n];
|
||||
else
|
||||
selectByValue(f, (p != null ? p + "_" : '') + n, pl[n]);
|
||||
}
|
||||
|
||||
function getBool(p, n, d, tv, fv) {
|
||||
var v = document.forms[0].elements[p + "_" + n].checked;
|
||||
|
||||
tv = typeof(tv) == 'undefined' ? 'true' : "'" + jsEncode(tv) + "'";
|
||||
fv = typeof(fv) == 'undefined' ? 'false' : "'" + jsEncode(fv) + "'";
|
||||
|
||||
return (v == d) ? '' : n + (v ? ':' + tv + ',' : ":\'" + fv + "\',");
|
||||
}
|
||||
|
||||
function getStr(p, n, d) {
|
||||
var e = document.forms[0].elements[(p != null ? p + "_" : "") + n];
|
||||
var v = e.type == "text" ? e.value : e.options[e.selectedIndex].value;
|
||||
|
||||
if (n == 'src')
|
||||
v = tinyMCEPopup.editor.convertURL(v, 'src', null);
|
||||
|
||||
return ((n == d || v == '') ? '' : n + ":'" + jsEncode(v) + "',");
|
||||
}
|
||||
|
||||
function getInt(p, n, d) {
|
||||
var e = document.forms[0].elements[(p != null ? p + "_" : "") + n];
|
||||
var v = e.type == "text" ? e.value : e.options[e.selectedIndex].value;
|
||||
|
||||
return ((n == d || v == '') ? '' : n + ":" + v.replace(/[^0-9]+/g, '') + ",");
|
||||
}
|
||||
|
||||
function jsEncode(s) {
|
||||
s = s.replace(new RegExp('\\\\', 'g'), '\\\\');
|
||||
s = s.replace(new RegExp('"', 'g'), '\\"');
|
||||
s = s.replace(new RegExp("'", 'g'), "\\'");
|
||||
|
||||
return s;
|
||||
}
|
||||
|
||||
function generatePreview(c) {
|
||||
var f = document.forms[0], p = document.getElementById('prev'), h = '', cls, pl, n, type, codebase, wp, hp, nw, nh;
|
||||
|
||||
p.innerHTML = '<!-- x --->';
|
||||
|
||||
nw = parseInt(f.width.value);
|
||||
nh = parseInt(f.height.value);
|
||||
|
||||
if (f.width.value != "" && f.height.value != "") {
|
||||
if (f.constrain.checked) {
|
||||
if (c == 'width' && oldWidth != 0) {
|
||||
wp = nw / oldWidth;
|
||||
nh = Math.round(wp * nh);
|
||||
f.height.value = nh;
|
||||
} else if (c == 'height' && oldHeight != 0) {
|
||||
hp = nh / oldHeight;
|
||||
nw = Math.round(hp * nw);
|
||||
f.width.value = nw;
|
||||
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;
|
||||
}
|
||||
}
|
||||
|
||||
if (f.width.value != "")
|
||||
oldWidth = nw;
|
||||
window.Media = {
|
||||
init : function() {
|
||||
var html, editor, self = this;
|
||||
|
||||
if (f.height.value != "")
|
||||
oldHeight = nh;
|
||||
self.editor = editor = tinyMCEPopup.editor;
|
||||
|
||||
// After constrain
|
||||
pl = serializeParameters();
|
||||
// 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','media','image');
|
||||
|
||||
switch (f.media_type.options[f.media_type.selectedIndex].value) {
|
||||
case "flash":
|
||||
cls = 'clsid:D27CDB6E-AE6D-11cf-96B8-444553540000';
|
||||
codebase = 'http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,40,0';
|
||||
type = 'application/x-shockwave-flash';
|
||||
break;
|
||||
html = self.getMediaListHTML('medialist', 'src', 'media', 'media');
|
||||
if (html == "")
|
||||
get("linklistrow").style.display = 'none';
|
||||
else
|
||||
get("linklistcontainer").innerHTML = html;
|
||||
|
||||
case "shockwave":
|
||||
cls = 'clsid:166B1BCA-3F9C-11CF-8075-444553540000';
|
||||
codebase = 'http://download.macromedia.com/pub/shockwave/cabs/director/sw.cab#version=8,5,1,0';
|
||||
type = 'application/x-director';
|
||||
break;
|
||||
if (isVisible('filebrowser'))
|
||||
get('src').style.width = '230px';
|
||||
|
||||
case "qt":
|
||||
cls = 'clsid:02BF25D5-8C17-4B23-BC80-D3488ABDDC6B';
|
||||
codebase = 'http://www.apple.com/qtactivex/qtplugin.cab#version=6,0,2,0';
|
||||
type = 'video/quicktime';
|
||||
break;
|
||||
if (isVisible('video_filebrowser_altsource1'))
|
||||
get('video_altsource1').style.width = '220px';
|
||||
|
||||
case "wmp":
|
||||
cls = ed.getParam('media_wmp6_compatible') ? 'clsid:05589FA1-C356-11CE-BF01-00AA0055595A' : 'clsid:6BF52A52-394A-11D3-B153-00C04F79FAA6';
|
||||
codebase = 'http://activex.microsoft.com/activex/controls/mplayer/en/nsmp2inf.cab#Version=5,1,52,701';
|
||||
type = 'application/x-mplayer2';
|
||||
break;
|
||||
if (isVisible('video_filebrowser_altsource2'))
|
||||
get('video_altsource2').style.width = '220px';
|
||||
|
||||
case "rmp":
|
||||
cls = 'clsid:CFCDAA03-8BE4-11cf-B84B-0020AFBBCCFA';
|
||||
codebase = 'http://activex.microsoft.com/activex/controls/mplayer/en/nsmp2inf.cab#Version=5,1,52,701';
|
||||
type = 'audio/x-pn-realaudio-plugin';
|
||||
break;
|
||||
}
|
||||
if (isVisible('audio_filebrowser_altsource1'))
|
||||
get('audio_altsource1').style.width = '220px';
|
||||
|
||||
if (pl == '') {
|
||||
p.innerHTML = '';
|
||||
return;
|
||||
}
|
||||
if (isVisible('audio_filebrowser_altsource2'))
|
||||
get('audio_altsource2').style.width = '220px';
|
||||
|
||||
pl = tinyMCEPopup.editor.plugins.media._parse(pl);
|
||||
if (isVisible('filebrowser_poster'))
|
||||
get('video_poster').style.width = '220px';
|
||||
|
||||
if (!pl.src) {
|
||||
p.innerHTML = '';
|
||||
return;
|
||||
}
|
||||
editor.dom.setOuterHTML(get('media_type'), self.getMediaTypeHTML(editor));
|
||||
|
||||
pl.src = tinyMCEPopup.editor.documentBaseURI.toAbsolute(pl.src);
|
||||
pl.width = !pl.width ? 100 : pl.width;
|
||||
pl.height = !pl.height ? 100 : pl.height;
|
||||
pl.id = !pl.id ? 'obj' : pl.id;
|
||||
pl.name = !pl.name ? 'eobj' : pl.name;
|
||||
pl.align = !pl.align ? '' : pl.align;
|
||||
self.setDefaultDialogSettings(editor);
|
||||
self.data = clone(tinyMCEPopup.getWindowArg('data'));
|
||||
self.dataToForm();
|
||||
self.preview();
|
||||
|
||||
// Avoid annoying warning about insecure items
|
||||
if (!tinymce.isIE || document.location.protocol != 'https:') {
|
||||
h += '<object classid="' + cls + '" codebase="' + codebase + '" width="' + pl.width + '" height="' + pl.height + '" id="' + pl.id + '" name="' + pl.name + '" align="' + pl.align + '">';
|
||||
updateColor('bgcolor_pick', 'bgcolor');
|
||||
},
|
||||
|
||||
for (n in pl) {
|
||||
h += '<param name="' + n + '" value="' + pl[n] + '">';
|
||||
insert : function() {
|
||||
var editor = tinyMCEPopup.editor;
|
||||
|
||||
// Add extra url parameter if it's an absolute URL
|
||||
if (n == 'src' && pl[n].indexOf('://') != -1)
|
||||
h += '<param name="url" value="' + pl[n] + '" />';
|
||||
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 *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);
|
||||
}
|
||||
|
||||
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);
|
||||
});
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
h += '<embed type="' + type + '" ';
|
||||
|
||||
for (n in pl)
|
||||
h += n + '="' + pl[n] + '" ';
|
||||
|
||||
h += '></embed>';
|
||||
|
||||
// Avoid annoying warning about insecure items
|
||||
if (!tinymce.isIE || document.location.protocol != 'https:')
|
||||
h += '</object>';
|
||||
|
||||
p.innerHTML = "<!-- x --->" + h;
|
||||
}
|
||||
|
||||
tinyMCEPopup.onInit.add(init);
|
||||
tinyMCEPopup.requireLangPack();
|
||||
tinyMCEPopup.onInit.add(function() {
|
||||
Media.init();
|
||||
});
|
||||
})();
|
||||
|
|
|
|||
104
library/tinymce/jscripts/tiny_mce/plugins/media/langs/en_dlg.js
vendored
Executable file → Normal file
|
|
@ -1,103 +1 @@
|
|||
tinyMCE.addI18n('en.media_dlg',{
|
||||
title:"Insert / edit embedded media",
|
||||
general:"General",
|
||||
advanced:"Advanced",
|
||||
file:"File/URL",
|
||||
list:"List",
|
||||
size:"Dimensions",
|
||||
preview:"Preview",
|
||||
constrain_proportions:"Constrain proportions",
|
||||
type:"Type",
|
||||
id:"Id",
|
||||
name:"Name",
|
||||
class_name:"Class",
|
||||
vspace:"V-Space",
|
||||
hspace:"H-Space",
|
||||
play:"Auto play",
|
||||
loop:"Loop",
|
||||
menu:"Show menu",
|
||||
quality:"Quality",
|
||||
scale:"Scale",
|
||||
align:"Align",
|
||||
salign:"SAlign",
|
||||
wmode:"WMode",
|
||||
bgcolor:"Background",
|
||||
base:"Base",
|
||||
flashvars:"Flashvars",
|
||||
liveconnect:"SWLiveConnect",
|
||||
autohref:"AutoHREF",
|
||||
cache:"Cache",
|
||||
hidden:"Hidden",
|
||||
controller:"Controller",
|
||||
kioskmode:"Kiosk mode",
|
||||
playeveryframe:"Play every frame",
|
||||
targetcache:"Target cache",
|
||||
correction:"No correction",
|
||||
enablejavascript:"Enable JavaScript",
|
||||
starttime:"Start time",
|
||||
endtime:"End time",
|
||||
href:"Href",
|
||||
qtsrcchokespeed:"Choke speed",
|
||||
target:"Target",
|
||||
volume:"Volume",
|
||||
autostart:"Auto start",
|
||||
enabled:"Enabled",
|
||||
fullscreen:"Fullscreen",
|
||||
invokeurls:"Invoke URLs",
|
||||
mute:"Mute",
|
||||
stretchtofit:"Stretch to fit",
|
||||
windowlessvideo:"Windowless video",
|
||||
balance:"Balance",
|
||||
baseurl:"Base URL",
|
||||
captioningid:"Captioning id",
|
||||
currentmarker:"Current marker",
|
||||
currentposition:"Current position",
|
||||
defaultframe:"Default frame",
|
||||
playcount:"Play count",
|
||||
rate:"Rate",
|
||||
uimode:"UI Mode",
|
||||
flash_options:"Flash options",
|
||||
qt_options:"Quicktime options",
|
||||
wmp_options:"Windows media player options",
|
||||
rmp_options:"Real media player options",
|
||||
shockwave_options:"Shockwave options",
|
||||
autogotourl:"Auto goto URL",
|
||||
center:"Center",
|
||||
imagestatus:"Image status",
|
||||
maintainaspect:"Maintain aspect",
|
||||
nojava:"No java",
|
||||
prefetch:"Prefetch",
|
||||
shuffle:"Shuffle",
|
||||
console:"Console",
|
||||
numloop:"Num loops",
|
||||
controls:"Controls",
|
||||
scriptcallbacks:"Script callbacks",
|
||||
swstretchstyle:"Stretch style",
|
||||
swstretchhalign:"Stretch H-Align",
|
||||
swstretchvalign:"Stretch V-Align",
|
||||
sound:"Sound",
|
||||
progress:"Progress",
|
||||
qtsrc:"QT Src",
|
||||
qt_stream_warn:"Streamed rtsp resources should be added to the QT Src field under the advanced tab.\nYou should also add a non streamed version to the Src field..",
|
||||
align_top:"Top",
|
||||
align_right:"Right",
|
||||
align_bottom:"Bottom",
|
||||
align_left:"Left",
|
||||
align_center:"Center",
|
||||
align_top_left:"Top left",
|
||||
align_top_right:"Top right",
|
||||
align_bottom_left:"Bottom left",
|
||||
align_bottom_right:"Bottom right",
|
||||
flv_options:"Flash video options",
|
||||
flv_scalemode:"Scale mode",
|
||||
flv_buffer:"Buffer",
|
||||
flv_startimage:"Start image",
|
||||
flv_starttime:"Start time",
|
||||
flv_defaultvolume:"Default volumne",
|
||||
flv_hiddengui:"Hidden GUI",
|
||||
flv_autostart:"Auto start",
|
||||
flv_loop:"Loop",
|
||||
flv_showscalemodes:"Show scale modes",
|
||||
flv_smoothvideo:"Smooth video",
|
||||
flv_jscallback:"JS Callback"
|
||||
});
|
||||
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" });
|
||||
|
|
|
|||
687
library/tinymce/jscripts/tiny_mce/plugins/media/media.htm
vendored
Executable file → Normal file
|
|
@ -10,12 +10,13 @@
|
|||
<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">
|
||||
<form onsubmit="insertMedia();return false;" action="#">
|
||||
<div class="tabs">
|
||||
<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"><span><a href="javascript:mcTabs.displayTab('general_tab','general_panel');generatePreview();" onmousedown="return false;">{#media_dlg.general}</a></span></li>
|
||||
<li id="advanced_tab"><span><a href="javascript:mcTabs.displayTab('advanced_tab','advanced_panel');" onmousedown="return false;">{#media_dlg.advanced}</a></span></li>
|
||||
<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>
|
||||
|
||||
|
|
@ -24,28 +25,21 @@
|
|||
<fieldset>
|
||||
<legend>{#media_dlg.general}</legend>
|
||||
|
||||
<table border="0" cellpadding="4" cellspacing="0">
|
||||
<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" name="media_type" onchange="changedType(this.value);generatePreview();">
|
||||
<option value="flash">Flash</option>
|
||||
<!-- <option value="flv">Flash video (FLV)</option> -->
|
||||
<option value="qt">Quicktime</option>
|
||||
<option value="shockwave">Shockwave</option>
|
||||
<option value="wmp">Windows Media</option>
|
||||
<option value="rmp">Real Media</option>
|
||||
</select>
|
||||
<select id="media_type"></select>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><label for="src">{#media_dlg.file}</label></td>
|
||||
<td>
|
||||
<table border="0" cellspacing="0" cellpadding="0">
|
||||
<tr>
|
||||
<td><input id="src" name="src" type="text" value="" class="mceFocus" onchange="switchType(this.value);generatePreview();" /></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"> </td>
|
||||
</tr>
|
||||
</tr>
|
||||
</table>
|
||||
</td>
|
||||
</tr>
|
||||
|
|
@ -56,10 +50,10 @@
|
|||
<tr>
|
||||
<td><label for="width">{#media_dlg.size}</label></td>
|
||||
<td>
|
||||
<table border="0" cellpadding="0" cellspacing="0">
|
||||
<table role="presentation" border="0" cellpadding="0" cellspacing="0">
|
||||
<tr>
|
||||
<td><input type="text" id="width" name="width" value="" class="size" onchange="generatePreview('width');" /> x <input type="text" id="height" name="height" value="" class="size" onchange="generatePreview('height');" /></td>
|
||||
<td> <input id="constrain" type="checkbox" name="constrain" class="checkbox" /></td>
|
||||
<td><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> <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>
|
||||
|
|
@ -78,18 +72,18 @@
|
|||
<fieldset>
|
||||
<legend>{#media_dlg.advanced}</legend>
|
||||
|
||||
<table border="0" cellpadding="4" cellspacing="0" width="100%">
|
||||
<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="generatePreview();" /></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="generatePreview();" /></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="generatePreview();">
|
||||
<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>
|
||||
|
|
@ -100,9 +94,9 @@
|
|||
|
||||
<td><label for="bgcolor">{#media_dlg.bgcolor}</label></td>
|
||||
<td>
|
||||
<table border="0" cellpadding="0" cellspacing="0">
|
||||
<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');generatePreview();" /></td>
|
||||
<td><input id="bgcolor" name="bgcolor" type="text" value="" size="9" onchange="updateColor('bgcolor_pick','bgcolor');Media.formToData();" /></td>
|
||||
<td id="bgcolor_pickcontainer"> </td>
|
||||
</tr>
|
||||
</table>
|
||||
|
|
@ -111,9 +105,209 @@
|
|||
|
||||
<tr>
|
||||
<td><label for="vspace">{#media_dlg.vspace}</label></td>
|
||||
<td><input type="text" id="vspace" name="vspace" class="number" onchange="generatePreview();" /></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="generatePreview();" /></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"> </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"> </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"> </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"> </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"> </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>
|
||||
|
|
@ -121,11 +315,11 @@
|
|||
<fieldset id="flash_options">
|
||||
<legend>{#media_dlg.flash_options}</legend>
|
||||
|
||||
<table border="0" cellpadding="4" cellspacing="0">
|
||||
<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="generatePreview();">
|
||||
<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>
|
||||
|
|
@ -137,7 +331,7 @@
|
|||
|
||||
<td><label for="flash_scale">{#media_dlg.scale}</label></td>
|
||||
<td>
|
||||
<select id="flash_scale" name="flash_scale" onchange="generatePreview();">
|
||||
<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>
|
||||
|
|
@ -150,7 +344,7 @@
|
|||
<tr>
|
||||
<td><label for="flash_wmode">{#media_dlg.wmode}</label></td>
|
||||
<td>
|
||||
<select id="flash_wmode" name="flash_wmode" onchange="generatePreview();">
|
||||
<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>
|
||||
|
|
@ -160,7 +354,7 @@
|
|||
|
||||
<td><label for="flash_salign">{#media_dlg.salign}</label></td>
|
||||
<td>
|
||||
<select id="flash_salign" name="flash_salign" onchange="generatePreview();">
|
||||
<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>
|
||||
|
|
@ -176,18 +370,18 @@
|
|||
|
||||
<tr>
|
||||
<td colspan="2">
|
||||
<table border="0" cellpadding="0" cellspacing="0">
|
||||
<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="generatePreview();" /></td>
|
||||
<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 border="0" cellpadding="0" cellspacing="0">
|
||||
<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="generatePreview();" /></td>
|
||||
<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>
|
||||
|
|
@ -196,18 +390,18 @@
|
|||
|
||||
<tr>
|
||||
<td colspan="2">
|
||||
<table border="0" cellpadding="0" cellspacing="0">
|
||||
<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="generatePreview();" /></td>
|
||||
<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 border="0" cellpadding="0" cellspacing="0">
|
||||
<table role="presentation" border="0" cellpadding="0" cellspacing="0">
|
||||
<tr>
|
||||
<td><input type="checkbox" class="checkbox" id="flash_swliveconnect" name="flash_swliveconnect" onchange="generatePreview();" /></td>
|
||||
<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>
|
||||
|
|
@ -215,134 +409,38 @@
|
|||
</tr>
|
||||
</table>
|
||||
|
||||
<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="generatePreview();" /></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="generatePreview();" /></td>
|
||||
<td><input type="text" id="flash_flashvars" name="flash_flashvars" onchange="Media.formToData();" /></td>
|
||||
</tr>
|
||||
</table>
|
||||
</fieldset>
|
||||
|
||||
<fieldset id="flv_options">
|
||||
<legend>{#media_dlg.flv_options}</legend>
|
||||
|
||||
<table border="0" cellpadding="4" cellspacing="0">
|
||||
<tr>
|
||||
<td><label for="flv_scalemode">{#media_dlg.flv_scalemode}</label></td>
|
||||
<td>
|
||||
<select id="flv_scalemode" name="flv_scalemode" onchange="generatePreview();">
|
||||
<option value="">{#not_set}</option>
|
||||
<option value="none">none</option>
|
||||
<option value="double">double</option>
|
||||
<option value="full">full</option>
|
||||
</select>
|
||||
</td>
|
||||
|
||||
<td><label for="flv_buffer">{#media_dlg.flv_buffer}</label></td>
|
||||
<td><input type="text" id="flv_buffer" name="flv_buffer" onchange="generatePreview();" /></td>
|
||||
</tr>
|
||||
|
||||
<tr>
|
||||
<td><label for="flv_startimage">{#media_dlg.flv_startimage}</label></td>
|
||||
<td><input type="text" id="flv_startimage" name="flv_startimage" onchange="generatePreview();" /></td>
|
||||
|
||||
<td><label for="flv_starttime">{#media_dlg.flv_starttime}</label></td>
|
||||
<td><input type="text" id="flv_starttime" name="flv_starttime" onchange="generatePreview();" /></td>
|
||||
</tr>
|
||||
|
||||
<tr>
|
||||
<td><label for="flv_defaultvolume">{#media_dlg.flv_defaultvolume}</label></td>
|
||||
<td><input type="text" id="flv_defaultvolume" name="flv_defaultvolume" onchange="generatePreview();" /></td>
|
||||
|
||||
|
||||
</tr>
|
||||
|
||||
<tr>
|
||||
<td colspan="2">
|
||||
<table border="0" cellpadding="0" cellspacing="0">
|
||||
<tr>
|
||||
<td><input type="checkbox" class="checkbox" id="flv_hiddengui" name="flv_hiddengui" checked="checked" onchange="generatePreview();" /></td>
|
||||
<td><label for="flv_hiddengui">{#media_dlg.flv_hiddengui}</label></td>
|
||||
</tr>
|
||||
</table>
|
||||
</td>
|
||||
|
||||
<td colspan="2">
|
||||
<table border="0" cellpadding="0" cellspacing="0">
|
||||
<tr>
|
||||
<td><input type="checkbox" class="checkbox" id="flv_autostart" name="flv_autostart" checked="checked" onchange="generatePreview();" /></td>
|
||||
<td><label for="flv_autostart">{#media_dlg.flv_autostart}</label></td>
|
||||
</tr>
|
||||
</table>
|
||||
</td>
|
||||
</tr>
|
||||
|
||||
<tr>
|
||||
<td colspan="2">
|
||||
<table border="0" cellpadding="0" cellspacing="0">
|
||||
<tr>
|
||||
<td><input type="checkbox" class="checkbox" id="flv_loop" name="flv_loop" checked="checked" onchange="generatePreview();" /></td>
|
||||
<td><label for="flv_loop">{#media_dlg.flv_loop}</label></td>
|
||||
</tr>
|
||||
</table>
|
||||
</td>
|
||||
|
||||
<td colspan="2">
|
||||
<table border="0" cellpadding="0" cellspacing="0">
|
||||
<tr>
|
||||
<td><input type="checkbox" class="checkbox" id="flv_showscalemodes" name="flv_showscalemodes" onchange="generatePreview();" /></td>
|
||||
<td><label for="flv_showscalemodes">{#media_dlg.flv_showscalemodes}</label></td>
|
||||
</tr>
|
||||
</table>
|
||||
</td>
|
||||
</tr>
|
||||
|
||||
<tr>
|
||||
<td colspan="2">
|
||||
<table border="0" cellpadding="0" cellspacing="0">
|
||||
<tr>
|
||||
<td><input type="checkbox" class="checkbox" id="flv_smoothvideo" name="flash_flv_flv_smoothvideosmoothvideo" checked="checked" onchange="generatePreview();" /></td>
|
||||
<td><label for="flv_smoothvideo">{#media_dlg.flv_smoothvideo}</label></td>
|
||||
</tr>
|
||||
</table>
|
||||
</td>
|
||||
|
||||
<td colspan="2">
|
||||
<table border="0" cellpadding="0" cellspacing="0">
|
||||
<tr>
|
||||
<td><input type="checkbox" class="checkbox" id="flv_jscallback" name="flv_jscallback" onchange="generatePreview();" /></td>
|
||||
<td><label for="flv_jscallback">{#media_dlg.flv_jscallback}</label></td>
|
||||
</tr>
|
||||
</table>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
</fieldset>
|
||||
|
||||
<fieldset id="qt_options">
|
||||
<fieldset id="quicktime_options">
|
||||
<legend>{#media_dlg.qt_options}</legend>
|
||||
|
||||
<table border="0" cellpadding="4" cellspacing="0">
|
||||
<table role="presentation" border="0" cellpadding="4" cellspacing="0">
|
||||
<tr>
|
||||
<td colspan="2">
|
||||
<table border="0" cellpadding="0" cellspacing="0">
|
||||
<table role="presentation" border="0" cellpadding="0" cellspacing="0">
|
||||
<tr>
|
||||
<td><input type="checkbox" class="checkbox" id="qt_loop" name="qt_loop" onchange="generatePreview();" /></td>
|
||||
<td><label for="qt_loop">{#media_dlg.loop}</label></td>
|
||||
<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 border="0" cellpadding="0" cellspacing="0">
|
||||
<table role="presentation" border="0" cellpadding="0" cellspacing="0">
|
||||
<tr>
|
||||
<td><input type="checkbox" class="checkbox" id="qt_autoplay" name="qt_autoplay" checked="checked" onchange="generatePreview();" /></td>
|
||||
<td><label for="qt_autoplay">{#media_dlg.play}</label></td>
|
||||
<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>
|
||||
|
|
@ -350,19 +448,19 @@
|
|||
|
||||
<tr>
|
||||
<td colspan="2">
|
||||
<table border="0" cellpadding="0" cellspacing="0">
|
||||
<table role="presentation" border="0" cellpadding="0" cellspacing="0">
|
||||
<tr>
|
||||
<td><input type="checkbox" class="checkbox" id="qt_cache" name="qt_cache" onchange="generatePreview();" /></td>
|
||||
<td><label for="qt_cache">{#media_dlg.cache}</label></td>
|
||||
<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 border="0" cellpadding="0" cellspacing="0">
|
||||
<table role="presentation" border="0" cellpadding="0" cellspacing="0">
|
||||
<tr>
|
||||
<td><input type="checkbox" class="checkbox" id="qt_controller" name="qt_controller" checked="checked" onchange="generatePreview();" /></td>
|
||||
<td><label for="qt_controller">{#media_dlg.controller}</label></td>
|
||||
<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>
|
||||
|
|
@ -370,19 +468,19 @@
|
|||
|
||||
<tr>
|
||||
<td colspan="2">
|
||||
<table border="0" cellpadding="0" cellspacing="0">
|
||||
<table role="presentation" border="0" cellpadding="0" cellspacing="0">
|
||||
<tr>
|
||||
<td><input type="checkbox" class="checkbox" id="qt_correction" name="qt_correction" onchange="generatePreview();" /></td>
|
||||
<td><label for="qt_correction">{#media_dlg.correction}</label></td>
|
||||
<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 border="0" cellpadding="0" cellspacing="0">
|
||||
<table role="presentation" border="0" cellpadding="0" cellspacing="0">
|
||||
<tr>
|
||||
<td><input type="checkbox" class="checkbox" id="qt_enablejavascript" name="qt_enablejavascript" onchange="generatePreview();" /></td>
|
||||
<td><label for="qt_enablejavascript">{#media_dlg.enablejavascript}</label></td>
|
||||
<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>
|
||||
|
|
@ -390,19 +488,19 @@
|
|||
|
||||
<tr>
|
||||
<td colspan="2">
|
||||
<table border="0" cellpadding="0" cellspacing="0">
|
||||
<table role="presentation" border="0" cellpadding="0" cellspacing="0">
|
||||
<tr>
|
||||
<td><input type="checkbox" class="checkbox" id="qt_kioskmode" name="qt_kioskmode" onchange="generatePreview();" /></td>
|
||||
<td><label for="qt_kioskmode">{#media_dlg.kioskmode}</label></td>
|
||||
<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 border="0" cellpadding="0" cellspacing="0">
|
||||
<table role="presentation" border="0" cellpadding="0" cellspacing="0">
|
||||
<tr>
|
||||
<td><input type="checkbox" class="checkbox" id="qt_autohref" name="qt_autohref" onchange="generatePreview();" /></td>
|
||||
<td><label for="qt_autohref">{#media_dlg.autohref}</label></td>
|
||||
<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>
|
||||
|
|
@ -410,27 +508,27 @@
|
|||
|
||||
<tr>
|
||||
<td colspan="2">
|
||||
<table border="0" cellpadding="0" cellspacing="0">
|
||||
<table role="presentation" border="0" cellpadding="0" cellspacing="0">
|
||||
<tr>
|
||||
<td><input type="checkbox" class="checkbox" id="qt_playeveryframe" name="qt_playeveryframe" onchange="generatePreview();" /></td>
|
||||
<td><label for="qt_playeveryframe">{#media_dlg.playeveryframe}</label></td>
|
||||
<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 border="0" cellpadding="0" cellspacing="0">
|
||||
<table role="presentation" border="0" cellpadding="0" cellspacing="0">
|
||||
<tr>
|
||||
<td><input type="checkbox" class="checkbox" id="qt_targetcache" name="qt_targetcache" onchange="generatePreview();" /></td>
|
||||
<td><label for="qt_targetcache">{#media_dlg.targetcache}</label></td>
|
||||
<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="qt_scale">{#media_dlg.scale}</label></td>
|
||||
<td><select id="qt_scale" name="qt_scale" class="mceEditableSelect" onchange="generatePreview();">
|
||||
<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>
|
||||
|
|
@ -441,62 +539,62 @@
|
|||
</tr>
|
||||
|
||||
<tr>
|
||||
<td><label for="qt_starttime">{#media_dlg.starttime}</label></td>
|
||||
<td><input type="text" id="qt_starttime" name="qt_starttime" onchange="generatePreview();" /></td>
|
||||
<td><label for="quicktime_starttime">{#media_dlg.starttime}</label></td>
|
||||
<td><input type="text" id="quicktime_starttime" name="quicktime_starttime" onchange="Media.formToData();" /></td>
|
||||
|
||||
<td><label for="qt_endtime">{#media_dlg.endtime}</label></td>
|
||||
<td><input type="text" id="qt_endtime" name="qt_endtime" onchange="generatePreview();" /></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="qt_target">{#media_dlg.target}</label></td>
|
||||
<td><input type="text" id="qt_target" name="qt_target" onchange="generatePreview();" /></td>
|
||||
<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="qt_href">{#media_dlg.href}</label></td>
|
||||
<td><input type="text" id="qt_href" name="qt_href" onchange="generatePreview();" /></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="qt_qtsrcchokespeed">{#media_dlg.qtsrcchokespeed}</label></td>
|
||||
<td><input type="text" id="qt_qtsrcchokespeed" name="qt_qtsrcchokespeed" onchange="generatePreview();" /></td>
|
||||
<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="qt_volume">{#media_dlg.volume}</label></td>
|
||||
<td><input type="text" id="qt_volume" name="qt_volume" onchange="generatePreview();" /></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="qt_qtsrc">{#media_dlg.qtsrc}</label></td>
|
||||
<td><label for="quicktime_qtsrc">{#media_dlg.qtsrc}</label></td>
|
||||
<td colspan="4">
|
||||
<table border="0" cellspacing="0" cellpadding="0">
|
||||
<tr>
|
||||
<td><input type="text" id="qt_qtsrc" name="qt_qtsrc" onchange="generatePreview();" /></td>
|
||||
<td id="qtsrcfilebrowsercontainer"> </td>
|
||||
</tr>
|
||||
</table>
|
||||
<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"> </td>
|
||||
</tr>
|
||||
</table>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
</fieldset>
|
||||
|
||||
<fieldset id="wmp_options">
|
||||
<fieldset id="windowsmedia_options">
|
||||
<legend>{#media_dlg.wmp_options}</legend>
|
||||
|
||||
<table border="0" cellpadding="4" cellspacing="0">
|
||||
<table role="presentation" border="0" cellpadding="4" cellspacing="0">
|
||||
<tr>
|
||||
<td colspan="2">
|
||||
<table border="0" cellpadding="0" cellspacing="0">
|
||||
<table role="presentation" border="0" cellpadding="0" cellspacing="0">
|
||||
<tr>
|
||||
<td><input type="checkbox" class="checkbox" id="wmp_autostart" name="wmp_autostart" checked="checked" onchange="generatePreview();" /></td>
|
||||
<td><label for="wmp_autostart">{#media_dlg.autostart}</label></td>
|
||||
<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 border="0" cellpadding="0" cellspacing="0">
|
||||
<table role="presentation" border="0" cellpadding="0" cellspacing="0">
|
||||
<tr>
|
||||
<td><input type="checkbox" class="checkbox" id="wmp_enabled" name="wmp_enabled" onchange="generatePreview();" /></td>
|
||||
<td><label for="wmp_enabled">{#media_dlg.enabled}</label></td>
|
||||
<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>
|
||||
|
|
@ -504,19 +602,19 @@
|
|||
|
||||
<tr>
|
||||
<td colspan="2">
|
||||
<table border="0" cellpadding="0" cellspacing="0">
|
||||
<table role="presentation" border="0" cellpadding="0" cellspacing="0">
|
||||
<tr>
|
||||
<td><input type="checkbox" class="checkbox" id="wmp_enablecontextmenu" name="wmp_enablecontextmenu" checked="checked" onchange="generatePreview();" /></td>
|
||||
<td><label for="wmp_enablecontextmenu">{#media_dlg.menu}</label></td>
|
||||
<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 border="0" cellpadding="0" cellspacing="0">
|
||||
<table role="presentation" border="0" cellpadding="0" cellspacing="0">
|
||||
<tr>
|
||||
<td><input type="checkbox" class="checkbox" id="wmp_fullscreen" name="wmp_fullscreen" onchange="generatePreview();" /></td>
|
||||
<td><label for="wmp_fullscreen">{#media_dlg.fullscreen}</label></td>
|
||||
<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>
|
||||
|
|
@ -524,19 +622,19 @@
|
|||
|
||||
<tr>
|
||||
<td colspan="2">
|
||||
<table border="0" cellpadding="0" cellspacing="0">
|
||||
<table role="presentation" border="0" cellpadding="0" cellspacing="0">
|
||||
<tr>
|
||||
<td><input type="checkbox" class="checkbox" id="wmp_invokeurls" name="wmp_invokeurls" checked="checked" onchange="generatePreview();" /></td>
|
||||
<td><label for="wmp_invokeurls">{#media_dlg.invokeurls}</label></td>
|
||||
<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 border="0" cellpadding="0" cellspacing="0">
|
||||
<table role="presentation" border="0" cellpadding="0" cellspacing="0">
|
||||
<tr>
|
||||
<td><input type="checkbox" class="checkbox" id="wmp_mute" name="wmp_mute" onchange="generatePreview();" /></td>
|
||||
<td><label for="wmp_mute">{#media_dlg.mute}</label></td>
|
||||
<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>
|
||||
|
|
@ -544,86 +642,86 @@
|
|||
|
||||
<tr>
|
||||
<td colspan="2">
|
||||
<table border="0" cellpadding="0" cellspacing="0">
|
||||
<table role="presentation" border="0" cellpadding="0" cellspacing="0">
|
||||
<tr>
|
||||
<td><input type="checkbox" class="checkbox" id="wmp_stretchtofit" name="wmp_stretchtofit" onchange="generatePreview();" /></td>
|
||||
<td><label for="wmp_stretchtofit">{#media_dlg.stretchtofit}</label></td>
|
||||
<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 border="0" cellpadding="0" cellspacing="0">
|
||||
<table role="presentation" border="0" cellpadding="0" cellspacing="0">
|
||||
<tr>
|
||||
<td><input type="checkbox" class="checkbox" id="wmp_windowlessvideo" name="wmp_windowlessvideo" onchange="generatePreview();" /></td>
|
||||
<td><label for="wmp_windowlessvideo">{#media_dlg.windowlessvideo}</label></td>
|
||||
<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="wmp_balance">{#media_dlg.balance}</label></td>
|
||||
<td><input type="text" id="wmp_balance" name="wmp_balance" onchange="generatePreview();" /></td>
|
||||
<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="wmp_baseurl">{#media_dlg.baseurl}</label></td>
|
||||
<td><input type="text" id="wmp_baseurl" name="wmp_baseurl" onchange="generatePreview();" /></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="wmp_captioningid">{#media_dlg.captioningid}</label></td>
|
||||
<td><input type="text" id="wmp_captioningid" name="wmp_captioningid" onchange="generatePreview();" /></td>
|
||||
<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="wmp_currentmarker">{#media_dlg.currentmarker}</label></td>
|
||||
<td><input type="text" id="wmp_currentmarker" name="wmp_currentmarker" onchange="generatePreview();" /></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="wmp_currentposition">{#media_dlg.currentposition}</label></td>
|
||||
<td><input type="text" id="wmp_currentposition" name="wmp_currentposition" onchange="generatePreview();" /></td>
|
||||
<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="wmp_defaultframe">{#media_dlg.defaultframe}</label></td>
|
||||
<td><input type="text" id="wmp_defaultframe" name="wmp_defaultframe" onchange="generatePreview();" /></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="wmp_playcount">{#media_dlg.playcount}</label></td>
|
||||
<td><input type="text" id="wmp_playcount" name="wmp_playcount" onchange="generatePreview();" /></td>
|
||||
<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="wmp_rate">{#media_dlg.rate}</label></td>
|
||||
<td><input type="text" id="wmp_rate" name="wmp_rate" onchange="generatePreview();" /></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="wmp_uimode">{#media_dlg.uimode}</label></td>
|
||||
<td><input type="text" id="wmp_uimode" name="wmp_uimode" onchange="generatePreview();" /></td>
|
||||
<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="wmp_volume">{#media_dlg.volume}</label></td>
|
||||
<td><input type="text" id="wmp_volume" name="wmp_volume" onchange="generatePreview();" /></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="rmp_options">
|
||||
<fieldset id="realmedia_options">
|
||||
<legend>{#media_dlg.rmp_options}</legend>
|
||||
|
||||
<table border="0" cellpadding="4" cellspacing="0">
|
||||
<table role="presentation" border="0" cellpadding="4" cellspacing="0">
|
||||
<tr>
|
||||
<td colspan="2">
|
||||
<table border="0" cellpadding="0" cellspacing="0">
|
||||
<table role="presentation" border="0" cellpadding="0" cellspacing="0">
|
||||
<tr>
|
||||
<td><input type="checkbox" class="checkbox" id="rmp_autostart" name="rmp_autostart" onchange="generatePreview();" /></td>
|
||||
<td><label for="rmp_autostart">{#media_dlg.autostart}</label></td>
|
||||
<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 border="0" cellpadding="0" cellspacing="0">
|
||||
<table role="presentation" border="0" cellpadding="0" cellspacing="0">
|
||||
<tr>
|
||||
<td><input type="checkbox" class="checkbox" id="rmp_loop" name="rmp_loop" onchange="generatePreview();" /></td>
|
||||
<td><label for="rmp_loop">{#media_dlg.loop}</label></td>
|
||||
<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>
|
||||
|
|
@ -631,19 +729,19 @@
|
|||
|
||||
<tr>
|
||||
<td colspan="2">
|
||||
<table border="0" cellpadding="0" cellspacing="0">
|
||||
<table role="presentation" border="0" cellpadding="0" cellspacing="0">
|
||||
<tr>
|
||||
<td><input type="checkbox" class="checkbox" id="rmp_autogotourl" name="rmp_autogotourl" checked="checked" onchange="generatePreview();" /></td>
|
||||
<td><label for="rmp_autogotourl">{#media_dlg.autogotourl}</label></td>
|
||||
<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 border="0" cellpadding="0" cellspacing="0">
|
||||
<table role="presentation" border="0" cellpadding="0" cellspacing="0">
|
||||
<tr>
|
||||
<td><input type="checkbox" class="checkbox" id="rmp_center" name="rmp_center" onchange="generatePreview();" /></td>
|
||||
<td><label for="rmp_center">{#media_dlg.center}</label></td>
|
||||
<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>
|
||||
|
|
@ -651,19 +749,19 @@
|
|||
|
||||
<tr>
|
||||
<td colspan="2">
|
||||
<table border="0" cellpadding="0" cellspacing="0">
|
||||
<table role="presentation" border="0" cellpadding="0" cellspacing="0">
|
||||
<tr>
|
||||
<td><input type="checkbox" class="checkbox" id="rmp_imagestatus" name="rmp_imagestatus" checked="checked" onchange="generatePreview();" /></td>
|
||||
<td><label for="rmp_imagestatus">{#media_dlg.imagestatus}</label></td>
|
||||
<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 border="0" cellpadding="0" cellspacing="0">
|
||||
<table role="presentation" border="0" cellpadding="0" cellspacing="0">
|
||||
<tr>
|
||||
<td><input type="checkbox" class="checkbox" id="rmp_maintainaspect" name="rmp_maintainaspect" onchange="generatePreview();" /></td>
|
||||
<td><label for="rmp_maintainaspect">{#media_dlg.maintainaspect}</label></td>
|
||||
<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>
|
||||
|
|
@ -671,19 +769,19 @@
|
|||
|
||||
<tr>
|
||||
<td colspan="2">
|
||||
<table border="0" cellpadding="0" cellspacing="0">
|
||||
<table role="presentation" border="0" cellpadding="0" cellspacing="0">
|
||||
<tr>
|
||||
<td><input type="checkbox" class="checkbox" id="rmp_nojava" name="rmp_nojava" onchange="generatePreview();" /></td>
|
||||
<td><label for="rmp_nojava">{#media_dlg.nojava}</label></td>
|
||||
<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 border="0" cellpadding="0" cellspacing="0">
|
||||
<table role="presentation" border="0" cellpadding="0" cellspacing="0">
|
||||
<tr>
|
||||
<td><input type="checkbox" class="checkbox" id="rmp_prefetch" name="rmp_prefetch" onchange="generatePreview();" /></td>
|
||||
<td><label for="rmp_prefetch">{#media_dlg.prefetch}</label></td>
|
||||
<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>
|
||||
|
|
@ -691,10 +789,10 @@
|
|||
|
||||
<tr>
|
||||
<td colspan="2">
|
||||
<table border="0" cellpadding="0" cellspacing="0">
|
||||
<table role="presentation" border="0" cellpadding="0" cellspacing="0">
|
||||
<tr>
|
||||
<td><input type="checkbox" class="checkbox" id="rmp_shuffle" name="rmp_shuffle" onchange="generatePreview();" /></td>
|
||||
<td><label for="rmp_shuffle">{#media_dlg.shuffle}</label></td>
|
||||
<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>
|
||||
|
|
@ -705,19 +803,19 @@
|
|||
</tr>
|
||||
|
||||
<tr>
|
||||
<td><label for="rmp_console">{#media_dlg.console}</label></td>
|
||||
<td><input type="text" id="rmp_console" name="rmp_console" onchange="generatePreview();" /></td>
|
||||
<td><label for="realmedia_console">{#media_dlg.console}</label></td>
|
||||
<td><input type="text" id="realmedia_console" name="realmedia_console" onchange="Media.formToData();" /></td>
|
||||
|
||||
<td><label for="rmp_controls">{#media_dlg.controls}</label></td>
|
||||
<td><input type="text" id="rmp_controls" name="rmp_controls" onchange="generatePreview();" /></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="rmp_numloop">{#media_dlg.numloop}</label></td>
|
||||
<td><input type="text" id="rmp_numloop" name="rmp_numloop" onchange="generatePreview();" /></td>
|
||||
<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="rmp_scriptcallbacks">{#media_dlg.scriptcallbacks}</label></td>
|
||||
<td><input type="text" id="rmp_scriptcallbacks" name="rmp_scriptcallbacks" onchange="generatePreview();" /></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>
|
||||
|
|
@ -725,11 +823,11 @@
|
|||
<fieldset id="shockwave_options">
|
||||
<legend>{#media_dlg.shockwave_options}</legend>
|
||||
|
||||
<table border="0" cellpadding="4" cellspacing="0">
|
||||
<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="generatePreview();">
|
||||
<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>
|
||||
|
|
@ -738,13 +836,13 @@
|
|||
</td>
|
||||
|
||||
<td><label for="shockwave_swvolume">{#media_dlg.volume}</label></td>
|
||||
<td><input type="text" id="shockwave_swvolume" name="shockwave_swvolume" onchange="generatePreview();" /></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="generatePreview();">
|
||||
<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>
|
||||
|
|
@ -754,7 +852,7 @@
|
|||
|
||||
<td><label for="shockwave_swstretchvalign">{#media_dlg.swstretchvalign}</label></td>
|
||||
<td>
|
||||
<select id="shockwave_swstretchvalign" name="shockwave_swstretchvalign" onchange="generatePreview();">
|
||||
<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>
|
||||
|
|
@ -765,18 +863,18 @@
|
|||
|
||||
<tr>
|
||||
<td colspan="2">
|
||||
<table border="0" cellpadding="0" cellspacing="0">
|
||||
<table role="presentation" border="0" cellpadding="0" cellspacing="0">
|
||||
<tr>
|
||||
<td><input type="checkbox" class="checkbox" id="shockwave_autostart" name="shockwave_autostart" onchange="generatePreview();" checked="checked" /></td>
|
||||
<td><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 border="0" cellpadding="0" cellspacing="0">
|
||||
<table role="presentation" border="0" cellpadding="0" cellspacing="0">
|
||||
<tr>
|
||||
<td><input type="checkbox" class="checkbox" id="shockwave_sound" name="shockwave_sound" onchange="generatePreview();" checked="checked" /></td>
|
||||
<td><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>
|
||||
|
|
@ -786,18 +884,18 @@
|
|||
|
||||
<tr>
|
||||
<td colspan="2">
|
||||
<table border="0" cellpadding="0" cellspacing="0">
|
||||
<table role="presentation" border="0" cellpadding="0" cellspacing="0">
|
||||
<tr>
|
||||
<td><input type="checkbox" class="checkbox" id="shockwave_swliveconnect" name="shockwave_swliveconnect" onchange="generatePreview();" /></td>
|
||||
<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 border="0" cellpadding="0" cellspacing="0">
|
||||
<table role="presentation" border="0" cellpadding="0" cellspacing="0">
|
||||
<tr>
|
||||
<td><input type="checkbox" class="checkbox" id="shockwave_progress" name="shockwave_progress" onchange="generatePreview();" checked="checked" /></td>
|
||||
<td><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>
|
||||
|
|
@ -806,6 +904,13 @@
|
|||
</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">
|
||||
|
|
|
|||
BIN
library/tinymce/jscripts/tiny_mce/plugins/media/moxieplayer.swf
vendored
Normal file
2
library/tinymce/jscripts/tiny_mce/plugins/nonbreaking/editor_plugin.js
vendored
Executable file → Normal file
|
|
@ -1 +1 @@
|
|||
(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 class="mceItemHidden mceVisualNbsp">·</span>':" ")});a.addButton("nonbreaking",{title:"nonbreaking.nonbreaking_desc",cmd:"mceNonBreaking"});if(a.getParam("nonbreaking_force_tab")){a.onKeyDown.add(function(d,f){if(tinymce.isIE&&f.keyCode==9){d.execCommand("mceNonBreaking");d.execCommand("mceNonBreaking");d.execCommand("mceNonBreaking");tinymce.dom.Event.cancel(f)}})}},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)})();
|
||||
(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"> </span>':" ")});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)})();
|
||||
7
library/tinymce/jscripts/tiny_mce/plugins/nonbreaking/editor_plugin_src.js
vendored
Executable file → Normal file
|
|
@ -17,7 +17,7 @@
|
|||
|
||||
// Register commands
|
||||
ed.addCommand('mceNonBreaking', function() {
|
||||
ed.execCommand('mceInsertContent', false, (ed.plugins.visualchars && ed.plugins.visualchars.state) ? '<span class="mceItemHidden mceVisualNbsp">·</span>' : ' ');
|
||||
ed.execCommand('mceInsertContent', false, (ed.plugins.visualchars && ed.plugins.visualchars.state) ? '<span data-mce-bogus="1" class="mceItemHidden mceItemNbsp"> </span>' : ' ');
|
||||
});
|
||||
|
||||
// Register buttons
|
||||
|
|
@ -25,11 +25,12 @@
|
|||
|
||||
if (ed.getParam('nonbreaking_force_tab')) {
|
||||
ed.onKeyDown.add(function(ed, e) {
|
||||
if (tinymce.isIE && e.keyCode == 9) {
|
||||
if (e.keyCode == 9) {
|
||||
e.preventDefault();
|
||||
|
||||
ed.execCommand('mceNonBreaking');
|
||||
ed.execCommand('mceNonBreaking');
|
||||
ed.execCommand('mceNonBreaking');
|
||||
tinymce.dom.Event.cancel(e);
|
||||
}
|
||||
});
|
||||
}
|
||||
|
|
|
|||
2
library/tinymce/jscripts/tiny_mce/plugins/noneditable/editor_plugin.js
vendored
Executable file → Normal file
|
|
@ -1 +1 @@
|
|||
(function(){var a=tinymce.dom.Event;tinymce.create("tinymce.plugins.NonEditablePlugin",{init:function(d,e){var f=this,c,b;f.editor=d;c=d.getParam("noneditable_editable_class","mceEditable");b=d.getParam("noneditable_noneditable_class","mceNonEditable");d.onNodeChange.addToTop(function(h,g,k){var j,i;j=h.dom.getParent(h.selection.getStart(),function(l){return h.dom.hasClass(l,b)});i=h.dom.getParent(h.selection.getEnd(),function(l){return h.dom.hasClass(l,b)});if(j||i){f._setDisabled(1);return false}else{f._setDisabled(0)}})},getInfo:function(){return{longname:"Non editable elements",author:"Moxiecode Systems AB",authorurl:"http://tinymce.moxiecode.com",infourl:"http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/noneditable",version:tinymce.majorVersion+"."+tinymce.minorVersion}},_block:function(c,d){var b=d.keyCode;if((b>32&&b<41)||(b>111&&b<124)){return}return a.cancel(d)},_setDisabled:function(d){var c=this,b=c.editor;tinymce.each(b.controlManager.controls,function(e){e.setDisabled(d)});if(d!==c.disabled){if(d){b.onKeyDown.addToTop(c._block);b.onKeyPress.addToTop(c._block);b.onKeyUp.addToTop(c._block);b.onPaste.addToTop(c._block)}else{b.onKeyDown.remove(c._block);b.onKeyPress.remove(c._block);b.onKeyUp.remove(c._block);b.onPaste.remove(c._block)}c.disabled=d}}});tinymce.PluginManager.add("noneditable",tinymce.plugins.NonEditablePlugin)})();
|
||||
(function(){var c=tinymce.dom.TreeWalker;var a="contenteditable",d="data-mce-"+a;var e=tinymce.VK;function b(n){var j=n.dom,p=n.selection,r,o="mce_noneditablecaret";r=tinymce.isGecko?"\u200B":"\uFEFF";function m(t){var s;if(t.nodeType===1){s=t.getAttribute(d);if(s&&s!=="inherit"){return s}s=t.contentEditable;if(s!=="inherit"){return s}}return null}function g(s){var t;while(s){t=m(s);if(t){return t==="false"?s:null}s=s.parentNode}}function l(s){while(s){if(s.id===o){return s}s=s.parentNode}}function k(s){var t;if(s){t=new c(s,s);for(s=t.current();s;s=t.next()){if(s.nodeType===3){return s}}}}function f(v,u){var s,t;if(m(v)==="false"){if(j.isBlock(v)){p.select(v);return}}t=j.createRng();if(m(v)==="true"){if(!v.firstChild){v.appendChild(n.getDoc().createTextNode("\u00a0"))}v=v.firstChild;u=true}s=j.create("span",{id:o,"data-mce-bogus":true},r);if(u){v.parentNode.insertBefore(s,v)}else{j.insertAfter(s,v)}t.setStart(s.firstChild,1);t.collapse(true);p.setRng(t);return s}function i(s){var v,t,u;if(s){rng=p.getRng(true);rng.setStartBefore(s);rng.setEndBefore(s);v=k(s);if(v&&v.nodeValue.charAt(0)==r){v=v.deleteData(0,1)}j.remove(s,true);p.setRng(rng)}else{t=l(p.getStart());while((s=j.get(o))&&s!==u){if(t!==s){v=k(s);if(v&&v.nodeValue.charAt(0)==r){v=v.deleteData(0,1)}j.remove(s,true)}u=s}}}function q(){var s,w,u,t,v;function x(B,D){var A,F,E,C,z;A=t.startContainer;F=t.startOffset;if(A.nodeType==3){z=A.nodeValue.length;if((F>0&&F<z)||(D?F==z:F==0)){return}}else{if(F<A.childNodes.length){var G=!D&&F>0?F-1:F;A=A.childNodes[G];if(A.hasChildNodes()){A=A.firstChild}}else{return !D?B:null}}E=new c(A,B);while(C=E[D?"prev":"next"]()){if(C.nodeType===3&&C.nodeValue.length>0){return}else{if(m(C)==="true"){return C}}}return B}i();u=p.isCollapsed();s=g(p.getStart());w=g(p.getEnd());if(s||w){t=p.getRng(true);if(u){s=s||w;var y=p.getStart();if(v=x(s,true)){f(v,true)}else{if(v=x(s,false)){f(v,false)}else{p.select(s)}}}else{t=p.getRng(true);if(s){t.setStartBefore(s)}if(w){t.setEndAfter(w)}p.setRng(t)}}}function h(y,A){var E=A.keyCode,w,B,C,u;function t(G,F){while(G=G[F?"previousSibling":"nextSibling"]){if(G.nodeType!==3||G.nodeValue.length>0){return G}}}function x(F,G){p.select(F);p.collapse(G)}C=p.getStart();u=p.getEnd();w=g(C)||g(u);if(w&&(E<112||E>124)&&E!=e.DELETE&&E!=e.BACKSPACE){A.preventDefault();if(E==e.LEFT||E==e.RIGHT){var v=E==e.LEFT;if(y.dom.isBlock(w)){var z=v?w.previousSibling:w.nextSibling;var s=new c(z,z);var D=v?s.prev():s.next();x(D,!v)}else{x(w,v)}}}else{if(E==e.LEFT||E==e.RIGHT||E==e.BACKSPACE||E==e.DELETE){B=l(C);if(B){if(E==e.LEFT||E==e.BACKSPACE){w=t(B,true);if(w&&m(w)==="false"){A.preventDefault();if(E==e.LEFT){x(w,true)}else{j.remove(w)}}else{i(B)}}if(E==e.RIGHT||E==e.DELETE){w=t(B);if(w&&m(w)==="false"){A.preventDefault();if(E==e.RIGHT){x(w,false)}else{j.remove(w)}}else{i(B)}}}}}}n.onMouseDown.addToTop(function(s,u){var t=s.selection.getNode();if(m(t)==="false"&&t==u.target){u.preventDefault()}});n.onMouseUp.addToTop(q);n.onKeyDown.addToTop(h);n.onKeyUp.addToTop(q)}tinymce.create("tinymce.plugins.NonEditablePlugin",{init:function(h,j){var g,f,i;g=" "+tinymce.trim(h.getParam("noneditable_editable_class","mceEditable"))+" ";f=" "+tinymce.trim(h.getParam("noneditable_noneditable_class","mceNonEditable"))+" ";i=h.getParam("noneditable_regexp");if(i&&!i.length){i=[i]}h.onPreInit.add(function(){b(h);if(i){h.onBeforeSetContent.add(function(l,m){var n=i.length,o=m.content,k=tinymce.trim(f);if(m.format=="raw"){return}while(n--){o=o.replace(i[n],function(){var p=arguments;return'<span class="'+k+'" data-mce-content="'+l.dom.encode(p[0])+'">'+l.dom.encode(typeof(p[1])==="string"?p[1]:p[0])+"</span>"})}m.content=o})}h.parser.addAttributeFilter("class",function(k){var l=k.length,m,n;while(l--){n=k[l];m=" "+n.attr("class")+" ";if(m.indexOf(g)!==-1){n.attr(d,"true")}else{if(m.indexOf(f)!==-1){n.attr(d,"false")}}}});h.serializer.addAttributeFilter(d,function(k,l){var m=k.length,n;while(m--){n=k[m];if(i&&n.attr("data-mce-content")){n.name="#text";n.type=3;n.raw=true;n.value=n.attr("data-mce-content")}else{n.attr(a,null);n.attr(d,null)}}});h.parser.addAttributeFilter(a,function(k,l){var m=k.length,n;while(m--){n=k[m];n.attr(d,n.attr(a));n.attr(a,null)}})})},getInfo:function(){return{longname:"Non editable elements",author:"Moxiecode Systems AB",authorurl:"http://tinymce.moxiecode.com",infourl:"http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/noneditable",version:tinymce.majorVersion+"."+tinymce.minorVersion}}});tinymce.PluginManager.add("noneditable",tinymce.plugins.NonEditablePlugin)})();
|
||||
452
library/tinymce/jscripts/tiny_mce/plugins/noneditable/editor_plugin_src.js
vendored
Executable file → Normal file
|
|
@ -9,34 +9,416 @@
|
|||
*/
|
||||
|
||||
(function() {
|
||||
var Event = tinymce.dom.Event;
|
||||
var TreeWalker = tinymce.dom.TreeWalker;
|
||||
var externalName = 'contenteditable', internalName = 'data-mce-' + externalName;
|
||||
var VK = tinymce.VK;
|
||||
|
||||
function handleContentEditableSelection(ed) {
|
||||
var dom = ed.dom, selection = ed.selection, invisibleChar, caretContainerId = 'mce_noneditablecaret';
|
||||
|
||||
// Setup invisible character use zero width space on Gecko since it doesn't change the height of the container
|
||||
invisibleChar = tinymce.isGecko ? '\u200B' : '\uFEFF';
|
||||
|
||||
// Returns the content editable state of a node "true/false" or null
|
||||
function getContentEditable(node) {
|
||||
var contentEditable;
|
||||
|
||||
// Ignore non elements
|
||||
if (node.nodeType === 1) {
|
||||
// Check for fake content editable
|
||||
contentEditable = node.getAttribute(internalName);
|
||||
if (contentEditable && contentEditable !== "inherit") {
|
||||
return contentEditable;
|
||||
}
|
||||
|
||||
// Check for real content editable
|
||||
contentEditable = node.contentEditable;
|
||||
if (contentEditable !== "inherit") {
|
||||
return contentEditable;
|
||||
}
|
||||
}
|
||||
|
||||
return null;
|
||||
};
|
||||
|
||||
// Returns the noneditable parent or null if there is a editable before it or if it wasn't found
|
||||
function getNonEditableParent(node) {
|
||||
var state;
|
||||
|
||||
while (node) {
|
||||
state = getContentEditable(node);
|
||||
if (state) {
|
||||
return state === "false" ? node : null;
|
||||
}
|
||||
|
||||
node = node.parentNode;
|
||||
}
|
||||
};
|
||||
|
||||
// Get caret container parent for the specified node
|
||||
function getParentCaretContainer(node) {
|
||||
while (node) {
|
||||
if (node.id === caretContainerId) {
|
||||
return node;
|
||||
}
|
||||
|
||||
node = node.parentNode;
|
||||
}
|
||||
};
|
||||
|
||||
// Finds the first text node in the specified node
|
||||
function findFirstTextNode(node) {
|
||||
var walker;
|
||||
|
||||
if (node) {
|
||||
walker = new TreeWalker(node, node);
|
||||
|
||||
for (node = walker.current(); node; node = walker.next()) {
|
||||
if (node.nodeType === 3) {
|
||||
return node;
|
||||
}
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
// Insert caret container before/after target or expand selection to include block
|
||||
function insertCaretContainerOrExpandToBlock(target, before) {
|
||||
var caretContainer, rng;
|
||||
|
||||
// Select block
|
||||
if (getContentEditable(target) === "false") {
|
||||
if (dom.isBlock(target)) {
|
||||
selection.select(target);
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
rng = dom.createRng();
|
||||
|
||||
if (getContentEditable(target) === "true") {
|
||||
if (!target.firstChild) {
|
||||
target.appendChild(ed.getDoc().createTextNode('\u00a0'));
|
||||
}
|
||||
|
||||
target = target.firstChild;
|
||||
before = true;
|
||||
}
|
||||
|
||||
//caretContainer = dom.create('span', {id: caretContainerId, 'data-mce-bogus': true, style:'border: 1px solid red'}, invisibleChar);
|
||||
caretContainer = dom.create('span', {id: caretContainerId, 'data-mce-bogus': true}, invisibleChar);
|
||||
|
||||
if (before) {
|
||||
target.parentNode.insertBefore(caretContainer, target);
|
||||
} else {
|
||||
dom.insertAfter(caretContainer, target);
|
||||
}
|
||||
|
||||
rng.setStart(caretContainer.firstChild, 1);
|
||||
rng.collapse(true);
|
||||
selection.setRng(rng);
|
||||
|
||||
return caretContainer;
|
||||
};
|
||||
|
||||
// Removes any caret container except the one we might be in
|
||||
function removeCaretContainer(caretContainer) {
|
||||
var child, currentCaretContainer, lastContainer;
|
||||
|
||||
if (caretContainer) {
|
||||
rng = selection.getRng(true);
|
||||
rng.setStartBefore(caretContainer);
|
||||
rng.setEndBefore(caretContainer);
|
||||
|
||||
child = findFirstTextNode(caretContainer);
|
||||
if (child && child.nodeValue.charAt(0) == invisibleChar) {
|
||||
child = child.deleteData(0, 1);
|
||||
}
|
||||
|
||||
dom.remove(caretContainer, true);
|
||||
|
||||
selection.setRng(rng);
|
||||
} else {
|
||||
currentCaretContainer = getParentCaretContainer(selection.getStart());
|
||||
while ((caretContainer = dom.get(caretContainerId)) && caretContainer !== lastContainer) {
|
||||
if (currentCaretContainer !== caretContainer) {
|
||||
child = findFirstTextNode(caretContainer);
|
||||
if (child && child.nodeValue.charAt(0) == invisibleChar) {
|
||||
child = child.deleteData(0, 1);
|
||||
}
|
||||
|
||||
dom.remove(caretContainer, true);
|
||||
}
|
||||
|
||||
lastContainer = caretContainer;
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
// Modifies the selection to include contentEditable false elements or insert caret containers
|
||||
function moveSelection() {
|
||||
var nonEditableStart, nonEditableEnd, isCollapsed, rng, element;
|
||||
|
||||
// Checks if there is any contents to the left/right side of caret returns the noneditable element or any editable element if it finds one inside
|
||||
function hasSideContent(element, left) {
|
||||
var container, offset, walker, node, len;
|
||||
|
||||
container = rng.startContainer;
|
||||
offset = rng.startOffset;
|
||||
|
||||
// If endpoint is in middle of text node then expand to beginning/end of element
|
||||
if (container.nodeType == 3) {
|
||||
len = container.nodeValue.length;
|
||||
if ((offset > 0 && offset < len) || (left ? offset == len : offset == 0)) {
|
||||
return;
|
||||
}
|
||||
} else {
|
||||
// Can we resolve the node by index
|
||||
if (offset < container.childNodes.length) {
|
||||
// Browser represents caret position as the offset at the start of an element. When moving right
|
||||
// this is the element we are moving into so we consider our container to be child node at offset-1
|
||||
var pos = !left && offset > 0 ? offset-1 : offset;
|
||||
container = container.childNodes[pos];
|
||||
if (container.hasChildNodes()) {
|
||||
container = container.firstChild;
|
||||
}
|
||||
} else {
|
||||
// If not then the caret is at the last position in it's container and the caret container should be inserted after the noneditable element
|
||||
return !left ? element : null;
|
||||
}
|
||||
}
|
||||
|
||||
// Walk left/right to look for contents
|
||||
walker = new TreeWalker(container, element);
|
||||
while (node = walker[left ? 'prev' : 'next']()) {
|
||||
if (node.nodeType === 3 && node.nodeValue.length > 0) {
|
||||
return;
|
||||
} else if (getContentEditable(node) === "true") {
|
||||
// Found contentEditable=true element return this one to we can move the caret inside it
|
||||
return node;
|
||||
}
|
||||
}
|
||||
|
||||
return element;
|
||||
};
|
||||
|
||||
// Remove any existing caret containers
|
||||
removeCaretContainer();
|
||||
|
||||
// Get noneditable start/end elements
|
||||
isCollapsed = selection.isCollapsed();
|
||||
nonEditableStart = getNonEditableParent(selection.getStart());
|
||||
nonEditableEnd = getNonEditableParent(selection.getEnd());
|
||||
|
||||
// Is any fo the range endpoints noneditable
|
||||
if (nonEditableStart || nonEditableEnd) {
|
||||
rng = selection.getRng(true);
|
||||
|
||||
// If it's a caret selection then look left/right to see if we need to move the caret out side or expand
|
||||
if (isCollapsed) {
|
||||
nonEditableStart = nonEditableStart || nonEditableEnd;
|
||||
var start = selection.getStart();
|
||||
if (element = hasSideContent(nonEditableStart, true)) {
|
||||
// We have no contents to the left of the caret then insert a caret container before the noneditable element
|
||||
insertCaretContainerOrExpandToBlock(element, true);
|
||||
} else if (element = hasSideContent(nonEditableStart, false)) {
|
||||
// We have no contents to the right of the caret then insert a caret container after the noneditable element
|
||||
insertCaretContainerOrExpandToBlock(element, false);
|
||||
} else {
|
||||
// We are in the middle of a noneditable so expand to select it
|
||||
selection.select(nonEditableStart);
|
||||
}
|
||||
} else {
|
||||
rng = selection.getRng(true);
|
||||
|
||||
// Expand selection to include start non editable element
|
||||
if (nonEditableStart) {
|
||||
rng.setStartBefore(nonEditableStart);
|
||||
}
|
||||
|
||||
// Expand selection to include end non editable element
|
||||
if (nonEditableEnd) {
|
||||
rng.setEndAfter(nonEditableEnd);
|
||||
}
|
||||
|
||||
selection.setRng(rng);
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
function handleKey(ed, e) {
|
||||
var keyCode = e.keyCode, nonEditableParent, caretContainer, startElement, endElement;
|
||||
|
||||
function getNonEmptyTextNodeSibling(node, prev) {
|
||||
while (node = node[prev ? 'previousSibling' : 'nextSibling']) {
|
||||
if (node.nodeType !== 3 || node.nodeValue.length > 0) {
|
||||
return node;
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
function positionCaretOnElement(element, start) {
|
||||
selection.select(element);
|
||||
selection.collapse(start);
|
||||
}
|
||||
|
||||
startElement = selection.getStart()
|
||||
endElement = selection.getEnd();
|
||||
|
||||
// Disable all key presses in contentEditable=false except delete or backspace
|
||||
nonEditableParent = getNonEditableParent(startElement) || getNonEditableParent(endElement);
|
||||
if (nonEditableParent && (keyCode < 112 || keyCode > 124) && keyCode != VK.DELETE && keyCode != VK.BACKSPACE) {
|
||||
e.preventDefault();
|
||||
|
||||
// Arrow left/right select the element and collapse left/right
|
||||
if (keyCode == VK.LEFT || keyCode == VK.RIGHT) {
|
||||
var left = keyCode == VK.LEFT;
|
||||
// If a block element find previous or next element to position the caret
|
||||
if (ed.dom.isBlock(nonEditableParent)) {
|
||||
var targetElement = left ? nonEditableParent.previousSibling : nonEditableParent.nextSibling;
|
||||
var walker = new TreeWalker(targetElement, targetElement);
|
||||
var caretElement = left ? walker.prev() : walker.next();
|
||||
positionCaretOnElement(caretElement, !left);
|
||||
} else {
|
||||
positionCaretOnElement(nonEditableParent, left);
|
||||
}
|
||||
}
|
||||
} else {
|
||||
// Is arrow left/right, backspace or delete
|
||||
if (keyCode == VK.LEFT || keyCode == VK.RIGHT || keyCode == VK.BACKSPACE || keyCode == VK.DELETE) {
|
||||
caretContainer = getParentCaretContainer(startElement);
|
||||
if (caretContainer) {
|
||||
// Arrow left or backspace
|
||||
if (keyCode == VK.LEFT || keyCode == VK.BACKSPACE) {
|
||||
nonEditableParent = getNonEmptyTextNodeSibling(caretContainer, true);
|
||||
|
||||
if (nonEditableParent && getContentEditable(nonEditableParent) === "false") {
|
||||
e.preventDefault();
|
||||
|
||||
if (keyCode == VK.LEFT) {
|
||||
positionCaretOnElement(nonEditableParent, true);
|
||||
} else {
|
||||
dom.remove(nonEditableParent);
|
||||
}
|
||||
} else {
|
||||
removeCaretContainer(caretContainer);
|
||||
}
|
||||
}
|
||||
|
||||
// Arrow right or delete
|
||||
if (keyCode == VK.RIGHT || keyCode == VK.DELETE) {
|
||||
nonEditableParent = getNonEmptyTextNodeSibling(caretContainer);
|
||||
|
||||
if (nonEditableParent && getContentEditable(nonEditableParent) === "false") {
|
||||
e.preventDefault();
|
||||
|
||||
if (keyCode == VK.RIGHT) {
|
||||
positionCaretOnElement(nonEditableParent, false);
|
||||
} else {
|
||||
dom.remove(nonEditableParent);
|
||||
}
|
||||
} else {
|
||||
removeCaretContainer(caretContainer);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
ed.onMouseDown.addToTop(function(ed, e){
|
||||
// prevent collapsing selection to caret when clicking in a non-editable section
|
||||
var node = ed.selection.getNode();
|
||||
if (getContentEditable(node) === "false" && node == e.target) {
|
||||
e.preventDefault();
|
||||
}
|
||||
});
|
||||
ed.onMouseUp.addToTop(moveSelection);
|
||||
ed.onKeyDown.addToTop(handleKey);
|
||||
ed.onKeyUp.addToTop(moveSelection);
|
||||
};
|
||||
|
||||
tinymce.create('tinymce.plugins.NonEditablePlugin', {
|
||||
init : function(ed, url) {
|
||||
var t = this, editClass, nonEditClass;
|
||||
var editClass, nonEditClass, nonEditableRegExps;
|
||||
|
||||
t.editor = ed;
|
||||
editClass = ed.getParam("noneditable_editable_class", "mceEditable");
|
||||
nonEditClass = ed.getParam("noneditable_noneditable_class", "mceNonEditable");
|
||||
editClass = " " + tinymce.trim(ed.getParam("noneditable_editable_class", "mceEditable")) + " ";
|
||||
nonEditClass = " " + tinymce.trim(ed.getParam("noneditable_noneditable_class", "mceNonEditable")) + " ";
|
||||
|
||||
ed.onNodeChange.addToTop(function(ed, cm, n) {
|
||||
var sc, ec;
|
||||
// Setup noneditable regexps array
|
||||
nonEditableRegExps = ed.getParam("noneditable_regexp");
|
||||
if (nonEditableRegExps && !nonEditableRegExps.length) {
|
||||
nonEditableRegExps = [nonEditableRegExps];
|
||||
}
|
||||
|
||||
// Block if start or end is inside a non editable element
|
||||
sc = ed.dom.getParent(ed.selection.getStart(), function(n) {
|
||||
return ed.dom.hasClass(n, nonEditClass);
|
||||
ed.onPreInit.add(function() {
|
||||
handleContentEditableSelection(ed);
|
||||
|
||||
if (nonEditableRegExps) {
|
||||
ed.onBeforeSetContent.add(function(ed, args) {
|
||||
var i = nonEditableRegExps.length, content = args.content, cls = tinymce.trim(nonEditClass);
|
||||
|
||||
// Don't replace the variables when raw is used for example on undo/redo
|
||||
if (args.format == "raw") {
|
||||
return;
|
||||
}
|
||||
|
||||
while (i--) {
|
||||
content = content.replace(nonEditableRegExps[i], function() {
|
||||
var args = arguments;
|
||||
|
||||
return '<span class="' + cls + '" data-mce-content="' + ed.dom.encode(args[0]) + '">' + ed.dom.encode(typeof(args[1]) === "string" ? args[1] : args[0]) + '</span>';
|
||||
});
|
||||
}
|
||||
|
||||
args.content = content;
|
||||
});
|
||||
}
|
||||
|
||||
// Apply contentEditable true/false on elements with the noneditable/editable classes
|
||||
ed.parser.addAttributeFilter('class', function(nodes) {
|
||||
var i = nodes.length, className, node;
|
||||
|
||||
while (i--) {
|
||||
node = nodes[i];
|
||||
className = " " + node.attr("class") + " ";
|
||||
|
||||
if (className.indexOf(editClass) !== -1) {
|
||||
node.attr(internalName, "true");
|
||||
} else if (className.indexOf(nonEditClass) !== -1) {
|
||||
node.attr(internalName, "false");
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
ec = ed.dom.getParent(ed.selection.getEnd(), function(n) {
|
||||
return ed.dom.hasClass(n, nonEditClass);
|
||||
// Remove internal name
|
||||
ed.serializer.addAttributeFilter(internalName, function(nodes, name) {
|
||||
var i = nodes.length, node;
|
||||
|
||||
while (i--) {
|
||||
node = nodes[i];
|
||||
|
||||
if (nonEditableRegExps && node.attr('data-mce-content')) {
|
||||
node.name = "#text";
|
||||
node.type = 3;
|
||||
node.raw = true;
|
||||
node.value = node.attr('data-mce-content');
|
||||
} else {
|
||||
node.attr(externalName, null);
|
||||
node.attr(internalName, null);
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
// Block or unblock
|
||||
if (sc || ec) {
|
||||
t._setDisabled(1);
|
||||
return false;
|
||||
} else
|
||||
t._setDisabled(0);
|
||||
// Convert external name into internal name
|
||||
ed.parser.addAttributeFilter(externalName, function(nodes, name) {
|
||||
var i = nodes.length, node;
|
||||
|
||||
while (i--) {
|
||||
node = nodes[i];
|
||||
node.attr(internalName, node.attr(externalName));
|
||||
node.attr(externalName, null);
|
||||
}
|
||||
});
|
||||
});
|
||||
},
|
||||
|
||||
|
|
@ -48,40 +430,6 @@
|
|||
infourl : 'http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/noneditable',
|
||||
version : tinymce.majorVersion + "." + tinymce.minorVersion
|
||||
};
|
||||
},
|
||||
|
||||
_block : function(ed, e) {
|
||||
var k = e.keyCode;
|
||||
|
||||
// Don't block arrow keys, pg up/down, and F1-F12
|
||||
if ((k > 32 && k < 41) || (k > 111 && k < 124))
|
||||
return;
|
||||
|
||||
return Event.cancel(e);
|
||||
},
|
||||
|
||||
_setDisabled : function(s) {
|
||||
var t = this, ed = t.editor;
|
||||
|
||||
tinymce.each(ed.controlManager.controls, function(c) {
|
||||
c.setDisabled(s);
|
||||
});
|
||||
|
||||
if (s !== t.disabled) {
|
||||
if (s) {
|
||||
ed.onKeyDown.addToTop(t._block);
|
||||
ed.onKeyPress.addToTop(t._block);
|
||||
ed.onKeyUp.addToTop(t._block);
|
||||
ed.onPaste.addToTop(t._block);
|
||||
} else {
|
||||
ed.onKeyDown.remove(t._block);
|
||||
ed.onKeyPress.remove(t._block);
|
||||
ed.onKeyUp.remove(t._block);
|
||||
ed.onPaste.remove(t._block);
|
||||
}
|
||||
|
||||
t.disabled = s;
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
|
|
|
|||
|
|
@ -1 +0,0 @@
|
|||
.mcePageBreak {display:block;border:0;width:100%;height:12px;border-top:1px dotted #ccc;margin-top:15px;background:#fff url(../img/pagebreak.gif) no-repeat center top;}
|
||||
2
library/tinymce/jscripts/tiny_mce/plugins/pagebreak/editor_plugin.js
vendored
Executable file → Normal file
|
|
@ -1 +1 @@
|
|||
(function(){tinymce.create("tinymce.plugins.PageBreakPlugin",{init:function(b,d){var f='<img src="'+d+'/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.settings.content_css!==false){b.dom.loadCSS(d+"/css/content.css")}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)})();
|
||||
(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)})();
|
||||
5
library/tinymce/jscripts/tiny_mce/plugins/pagebreak/editor_plugin_src.js
vendored
Executable file → Normal file
|
|
@ -11,7 +11,7 @@
|
|||
(function() {
|
||||
tinymce.create('tinymce.plugins.PageBreakPlugin', {
|
||||
init : function(ed, url) {
|
||||
var pb = '<img src="' + url + '/img/trans.gif" class="mcePageBreak mceItemNoResize" />', cls = 'mcePageBreak', sep = ed.getParam('pagebreak_separator', '<!-- pagebreak -->'), pbRE;
|
||||
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');
|
||||
|
||||
|
|
@ -24,9 +24,6 @@
|
|||
ed.addButton('pagebreak', {title : 'pagebreak.desc', cmd : cls});
|
||||
|
||||
ed.onInit.add(function() {
|
||||
if (ed.settings.content_css !== false)
|
||||
ed.dom.loadCSS(url + "/css/content.css");
|
||||
|
||||
if (ed.theme.onResolveName) {
|
||||
ed.theme.onResolveName.add(function(th, o) {
|
||||
if (o.node.nodeName == 'IMG' && ed.dom.hasClass(o.node, cls))
|
||||
|
|
|
|||
|
Before Width: | Height: | Size: 43 B |
2
library/tinymce/jscripts/tiny_mce/plugins/paste/editor_plugin.js
vendored
Executable file → Normal file
395
library/tinymce/jscripts/tiny_mce/plugins/paste/editor_plugin_src.js
vendored
Executable file → Normal file
|
|
@ -10,9 +10,9 @@
|
|||
|
||||
(function() {
|
||||
var each = tinymce.each,
|
||||
entities = null,
|
||||
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",
|
||||
|
|
@ -25,8 +25,9 @@
|
|||
paste_dialog_height : "400",
|
||||
paste_text_use_dialog : false,
|
||||
paste_text_sticky : false,
|
||||
paste_text_sticky_default : false,
|
||||
paste_text_notifyalways : false,
|
||||
paste_text_linebreaktype : "p",
|
||||
paste_text_linebreaktype : "combined",
|
||||
paste_text_replacements : [
|
||||
[/\u2026/g, "..."],
|
||||
[/[\x93\x94\u201c\u201d]/g, '"'],
|
||||
|
|
@ -63,13 +64,19 @@
|
|||
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 = false;
|
||||
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;
|
||||
var dom = ed.dom, rng;
|
||||
|
||||
// Execute pre process handlers
|
||||
t.onPreProcess.dispatch(t, o);
|
||||
|
|
@ -77,23 +84,31 @@
|
|||
// 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});
|
||||
o.content = ed.serializer.serialize(o.node, {getInner : 1, forced_root_block : ''});
|
||||
|
||||
// Plain text option active?
|
||||
if ((!force_rich) && (ed.pasteAsPlainText)) {
|
||||
t._insertPlainText(ed, dom, o.content);
|
||||
t._insertPlainText(o.content);
|
||||
|
||||
if (!getParam(ed, "paste_text_sticky")) {
|
||||
ed.pasteAsPlainText = false;
|
||||
ed.controlManager.setActive("pastetext", false);
|
||||
}
|
||||
} else if (/<(p|h[1-6]|ul|ol)/.test(o.content)) {
|
||||
// Handle insertion of contents containing block elements separately
|
||||
t._insertBlockContent(ed, dom, o.content);
|
||||
} else {
|
||||
t._insert(o.content);
|
||||
}
|
||||
|
|
@ -115,7 +130,7 @@
|
|||
if (getParam(ed, "paste_text_sticky")) {
|
||||
ed.windowManager.alert(ed.translate('paste.plaintext_mode_sticky'));
|
||||
} else {
|
||||
ed.windowManager.alert(ed.translate('paste.plaintext_mode_sticky'));
|
||||
ed.windowManager.alert(ed.translate('paste.plaintext_mode'));
|
||||
}
|
||||
|
||||
if (!getParam(ed, "paste_text_notifyalways")) {
|
||||
|
|
@ -132,38 +147,46 @@
|
|||
// 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, sel = ed.selection, dom = ed.dom, body = ed.getBody(), posY;
|
||||
var n, or, rng, oldRng, sel = ed.selection, dom = ed.dom, body = ed.getBody(), posY, textContent;
|
||||
|
||||
// Check if browser supports direct plaintext access
|
||||
if (ed.pasteAsPlainText && (e.clipboardData || dom.doc.dataTransfer)) {
|
||||
e.preventDefault();
|
||||
process({content : (e.clipboardData || dom.doc.dataTransfer).getData('Text')}, true);
|
||||
return;
|
||||
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'}, '\uFEFF');
|
||||
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;
|
||||
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 : -10000,
|
||||
top : posY,
|
||||
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);
|
||||
|
|
@ -174,14 +197,23 @@
|
|||
|
||||
// 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') {
|
||||
if (n.innerHTML === '\uFEFF\uFEFF') {
|
||||
ed.execCommand('mcePasteWord');
|
||||
e.preventDefault();
|
||||
return;
|
||||
}
|
||||
|
||||
// Process contents
|
||||
process({content : n.innerHTML});
|
||||
// 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);
|
||||
|
|
@ -196,34 +228,52 @@
|
|||
|
||||
or = ed.selection.getRng();
|
||||
|
||||
// Move caret into hidden div
|
||||
// Move select contents inside DIV
|
||||
n = n.firstChild;
|
||||
rng = ed.getDoc().createRange();
|
||||
rng.setStart(n, 0);
|
||||
rng.setEnd(n, 1);
|
||||
rng.setEnd(n, 2);
|
||||
sel.setRng(rng);
|
||||
|
||||
// Wait a while and grab the pasted contents
|
||||
window.setTimeout(function() {
|
||||
var h = '', nl = dom.select('div.mcePaste');
|
||||
var h = '', nl;
|
||||
|
||||
// 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) {
|
||||
// WebKit duplicates the divs so we need to remove them
|
||||
each(dom.select('div.mcePaste', n), function(n) {
|
||||
dom.remove(n, 1);
|
||||
// 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;
|
||||
});
|
||||
|
||||
// Remove apply style spans
|
||||
each(dom.select('span.Apple-style-span', n), function(n) {
|
||||
dom.remove(n, 1);
|
||||
});
|
||||
|
||||
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(nl, function(n) {
|
||||
each(dom.select('div.mcePaste'), function(n) {
|
||||
dom.remove(n);
|
||||
});
|
||||
|
||||
|
|
@ -244,7 +294,7 @@
|
|||
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.add(function(ed, e) {
|
||||
ed.onKeyDown.addToTop(function(ed, e) {
|
||||
if (((tinymce.isMac ? e.metaKey : e.ctrlKey) && e.keyCode == 86) || (e.shiftKey && e.keyCode == 45))
|
||||
grabContent(e);
|
||||
});
|
||||
|
|
@ -256,17 +306,19 @@
|
|||
}
|
||||
}
|
||||
|
||||
// Block all drag/drop events
|
||||
if (getParam(ed, "paste_block_drop")) {
|
||||
ed.onInit.add(function() {
|
||||
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();
|
||||
|
|
@ -283,8 +335,6 @@
|
|||
},
|
||||
|
||||
_preProcess : function(pl, o) {
|
||||
//console.log('Before preprocess:' + o.content);
|
||||
|
||||
var ed = this.editor,
|
||||
h = o.content,
|
||||
grep = tinymce.grep,
|
||||
|
|
@ -292,6 +342,8 @@
|
|||
trim = tinymce.trim,
|
||||
len, stripClass;
|
||||
|
||||
//console.log('Before preprocess:' + o.content);
|
||||
|
||||
function process(items) {
|
||||
each(items, function(v) {
|
||||
// Remove or replace
|
||||
|
|
@ -302,6 +354,23 @@
|
|||
});
|
||||
}
|
||||
|
||||
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) {
|
||||
// IE9 adds BRs before/after block elements when contents is pasted from word or for example another browser
|
||||
process([[/(?:<br> [\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> [\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
|
||||
|
|
@ -320,7 +389,8 @@
|
|||
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
|
||||
[/(<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)
|
||||
]);
|
||||
}
|
||||
|
||||
|
|
@ -472,6 +542,11 @@
|
|||
]);
|
||||
}
|
||||
|
||||
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");
|
||||
|
|
@ -491,7 +566,7 @@
|
|||
};
|
||||
|
||||
h = h.replace(/ class="([^"]+)"/gi, removeClasses);
|
||||
h = h.replace(/ class=(\w+)/gi, removeClasses);
|
||||
h = h.replace(/ class=([\-\w]+)/gi, removeClasses);
|
||||
}
|
||||
|
||||
// Remove spans option
|
||||
|
|
@ -510,6 +585,10 @@
|
|||
_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) {
|
||||
|
|
@ -561,14 +640,14 @@
|
|||
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('_mce_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('_mce_style');
|
||||
el.removeAttribute('data-mce-style');
|
||||
});
|
||||
}
|
||||
}
|
||||
|
|
@ -591,11 +670,11 @@
|
|||
val = p.innerHTML.replace(/<\/?\w+[^>]*>/gi, '').replace(/ /g, '\u00a0');
|
||||
|
||||
// Detect unordered lists look for bullets
|
||||
if (/^(__MCE_ITEM__)+[\u2022\u00b7\u00a7\u00d8o]\s*\u00a0*/.test(val))
|
||||
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{2,}/.test(val))
|
||||
if (/^__MCE_ITEM__\s*\w+\.\s*\u00a0+/.test(val))
|
||||
type = 'ol';
|
||||
|
||||
// Check if node value matches the list pattern: o
|
||||
|
|
@ -625,9 +704,9 @@
|
|||
var html = span.innerHTML.replace(/<\/?\w+[^>]*>/gi, '');
|
||||
|
||||
// Remove span with the middot or the number
|
||||
if (type == 'ul' && /^[\u2022\u00b7\u00a7\u00d8o]/.test(html))
|
||||
if (type == 'ul' && /^__MCE_ITEM__[\u2022\u00b7\u00a7\u00d8o\u25CF]/.test(html))
|
||||
dom.remove(span);
|
||||
else if (/^[\s\S]*\w+\.( |\u00a0)*\s*/.test(html))
|
||||
else if (/^__MCE_ITEM__[\s\S]*\w+\.( |\u00a0)*\s*/.test(html))
|
||||
dom.remove(span);
|
||||
});
|
||||
|
||||
|
|
@ -635,7 +714,7 @@
|
|||
|
||||
// Remove middot/list items
|
||||
if (type == 'ul')
|
||||
html = p.innerHTML.replace(/__MCE_ITEM__/g, '').replace(/^[\u2022\u00b7\u00a7\u00d8o]\s*( |\u00a0)+\s*/, '');
|
||||
html = p.innerHTML.replace(/__MCE_ITEM__/g, '').replace(/^[\u2022\u00b7\u00a7\u00d8o\u25CF]\s*( |\u00a0)+\s*/, '');
|
||||
else
|
||||
html = p.innerHTML.replace(/__MCE_ITEM__/g, '').replace(/^\s*\w+\.( |\u00a0)+\s*/, '');
|
||||
|
||||
|
|
@ -655,65 +734,6 @@
|
|||
o.node.innerHTML = html.replace(/__MCE_ITEM__/g, '');
|
||||
},
|
||||
|
||||
/**
|
||||
* This method will split the current block parent and insert the contents inside the split position.
|
||||
* This logic can be improved so text nodes at the start/end remain in the start/end block elements
|
||||
*/
|
||||
_insertBlockContent : function(ed, dom, content) {
|
||||
var parentBlock, marker, sel = ed.selection, last, elm, vp, y, elmHeight, markerId = 'mce_marker';
|
||||
|
||||
function select(n) {
|
||||
var r;
|
||||
|
||||
if (tinymce.isIE) {
|
||||
r = ed.getDoc().body.createTextRange();
|
||||
r.moveToElementText(n);
|
||||
r.collapse(false);
|
||||
r.select();
|
||||
} else {
|
||||
sel.select(n, 1);
|
||||
sel.collapse(false);
|
||||
}
|
||||
}
|
||||
|
||||
// Insert a marker for the caret position
|
||||
this._insert('<span id="' + markerId + '"> </span>', 1);
|
||||
marker = dom.get(markerId);
|
||||
parentBlock = dom.getParent(marker, 'p,h1,h2,h3,h4,h5,h6,ul,ol,th,td');
|
||||
|
||||
// If it's a parent block but not a table cell
|
||||
if (parentBlock && !/TD|TH/.test(parentBlock.nodeName)) {
|
||||
// Split parent block
|
||||
marker = dom.split(parentBlock, marker);
|
||||
|
||||
// Insert nodes before the marker
|
||||
each(dom.create('div', 0, content).childNodes, function(n) {
|
||||
last = marker.parentNode.insertBefore(n.cloneNode(true), marker);
|
||||
});
|
||||
|
||||
// Move caret after marker
|
||||
select(last);
|
||||
} else {
|
||||
dom.setOuterHTML(marker, content);
|
||||
sel.select(ed.getBody(), 1);
|
||||
sel.collapse(0);
|
||||
}
|
||||
|
||||
// Remove marker if it's left
|
||||
while (elm = dom.get(markerId))
|
||||
dom.remove(elm);
|
||||
|
||||
// Get element, position and height
|
||||
elm = sel.getStart();
|
||||
vp = dom.getViewPort(ed.getWin());
|
||||
y = ed.dom.getPos(elm).y;
|
||||
elmHeight = elm.clientHeight;
|
||||
|
||||
// Is element within viewport if not then scroll it into view
|
||||
if (y < vp.y || y + elmHeight > vp.y + vp.h)
|
||||
ed.getDoc().body.scrollTop = y < vp.y ? y : y - vp.h + 25;
|
||||
},
|
||||
|
||||
/**
|
||||
* Inserts the specified contents at the caret position.
|
||||
*/
|
||||
|
|
@ -724,8 +744,7 @@
|
|||
if (!ed.selection.isCollapsed() && r.startContainer != r.endContainer)
|
||||
ed.getDoc().execCommand('Delete', false, null);
|
||||
|
||||
// It's better to use the insertHTML method on Gecko since it will combine paragraphs correctly before inserting the contents
|
||||
ed.execCommand(tinymce.isGecko ? 'insertHTML' : 'mceInsertContent', false, h, {skip_undo : skip_undo});
|
||||
ed.execCommand('mceInsertContent', false, h, {skip_undo : skip_undo});
|
||||
},
|
||||
|
||||
/**
|
||||
|
|
@ -737,31 +756,24 @@
|
|||
* plugin, and requires minimal changes to add the new functionality.
|
||||
* Speednet - June 2009
|
||||
*/
|
||||
_insertPlainText : function(ed, dom, h) {
|
||||
var i, len, pos, rpos, node, breakElms, before, after,
|
||||
w = ed.getWin(),
|
||||
d = ed.getDoc(),
|
||||
sel = ed.selection,
|
||||
is = tinymce.is,
|
||||
inArray = tinymce.inArray,
|
||||
_insertPlainText : function(content) {
|
||||
var ed = this.editor,
|
||||
linebr = getParam(ed, "paste_text_linebreaktype"),
|
||||
rl = getParam(ed, "paste_text_replacements");
|
||||
rl = getParam(ed, "paste_text_replacements"),
|
||||
is = tinymce.is;
|
||||
|
||||
function process(items) {
|
||||
each(items, function(v) {
|
||||
if (v.constructor == RegExp)
|
||||
h = h.replace(v, "");
|
||||
content = content.replace(v, "");
|
||||
else
|
||||
h = h.replace(v[0], v[1]);
|
||||
content = content.replace(v[0], v[1]);
|
||||
});
|
||||
};
|
||||
|
||||
if ((typeof(h) === "string") && (h.length > 0)) {
|
||||
if (!entities)
|
||||
entities = ("34,quot,38,amp,39,apos,60,lt,62,gt," + ed.serializer.settings.entities).split(",");
|
||||
|
||||
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(h)) {
|
||||
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
|
||||
]);
|
||||
|
|
@ -778,128 +790,47 @@
|
|||
[/<\/t[dh]>\s*<t[dh][^>]*>/gi, "\t"], // Table cells get tabs betweem them
|
||||
/<[a-z!\/?][^>]*>/gi, // Delete all remaining tags
|
||||
[/ /gi, " "], // Convert non-break spaces to regular spaces (remember, *plain text*)
|
||||
[
|
||||
// HTML entity
|
||||
/&(#\d+|[a-z0-9]{1,10});/gi,
|
||||
|
||||
// Replace with actual character
|
||||
function(e, s) {
|
||||
if (s.charAt(0) === "#") {
|
||||
return String.fromCharCode(s.slice(1));
|
||||
}
|
||||
else {
|
||||
return ((e = inArray(entities, s)) > 0)? String.fromCharCode(entities[e-1]) : " ";
|
||||
}
|
||||
}
|
||||
],
|
||||
[/(?:(?!\n)\s)*(\n+)(?:(?!\n)\s)*/gi, "$1"], // Cool little RegExp deletes whitespace around linebreak chars.
|
||||
[/\n{3,}/g, "\n\n"], // Max. 2 consecutive linebreaks
|
||||
/^\s+|\s+$/g // Trim the front & back
|
||||
[/(?:(?!\n)\s)*(\n+)(?:(?!\n)\s)*/gi, "$1"],// Cool little RegExp deletes whitespace around linebreak chars.
|
||||
[/\n{3,}/g, "\n\n"] // Max. 2 consecutive linebreaks
|
||||
]);
|
||||
|
||||
h = dom.encode(h);
|
||||
|
||||
// Delete any highlighted text before pasting
|
||||
if (!sel.isCollapsed()) {
|
||||
d.execCommand("Delete", false, null);
|
||||
}
|
||||
content = ed.dom.decode(tinymce.html.Entities.encodeRaw(content));
|
||||
|
||||
// Perform default or custom replacements
|
||||
if (is(rl, "array") || (is(rl, "array"))) {
|
||||
if (is(rl, "array")) {
|
||||
process(rl);
|
||||
}
|
||||
else if (is(rl, "string")) {
|
||||
} 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") {
|
||||
} else if (linebr == "br") {
|
||||
// Convert all line breaks to <br />
|
||||
process([
|
||||
[/\n/g, "<br />"]
|
||||
]);
|
||||
}
|
||||
else {
|
||||
} 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([
|
||||
/^\s+|\s+$/g,
|
||||
[/\n\n/g, "</p><p>"],
|
||||
[/^(.*<\/p>)(<p>)$/, '<p>$1'],
|
||||
[/\n/g, "<br />"]
|
||||
]);
|
||||
}
|
||||
|
||||
// This next piece of code handles the situation where we're pasting more than one paragraph of plain
|
||||
// text, and we are pasting the content into the middle of a block node in the editor. The block
|
||||
// node gets split at the selection point into "Para A" and "Para B" (for the purposes of explaining).
|
||||
// The first paragraph of the pasted text is appended to "Para A", and the last paragraph of the
|
||||
// pasted text is prepended to "Para B". Any other paragraphs of pasted text are placed between
|
||||
// "Para A" and "Para B". This code solves a host of problems with the original plain text plugin and
|
||||
// now handles styles correctly. (Pasting plain text into a styled paragraph is supposed to make the
|
||||
// plain text take the same style as the existing paragraph.)
|
||||
if ((pos = h.indexOf("</p><p>")) != -1) {
|
||||
rpos = h.lastIndexOf("</p><p>");
|
||||
node = sel.getNode();
|
||||
breakElms = []; // Get list of elements to break
|
||||
|
||||
do {
|
||||
if (node.nodeType == 1) {
|
||||
// Don't break tables and break at body
|
||||
if (node.nodeName == "TD" || node.nodeName == "BODY") {
|
||||
break;
|
||||
}
|
||||
|
||||
breakElms[breakElms.length] = node;
|
||||
}
|
||||
} while (node = node.parentNode);
|
||||
|
||||
// Are we in the middle of a block node?
|
||||
if (breakElms.length > 0) {
|
||||
before = h.substring(0, pos);
|
||||
after = "";
|
||||
|
||||
for (i=0, len=breakElms.length; i<len; i++) {
|
||||
before += "</" + breakElms[i].nodeName.toLowerCase() + ">";
|
||||
after += "<" + breakElms[breakElms.length-i-1].nodeName.toLowerCase() + ">";
|
||||
}
|
||||
|
||||
if (pos == rpos) {
|
||||
h = before + after + h.substring(pos+7);
|
||||
}
|
||||
else {
|
||||
h = before + h.substring(pos+4, rpos+4) + after + h.substring(rpos+7);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// Insert content at the caret, plus add a marker for repositioning the caret
|
||||
ed.execCommand("mceInsertRawHTML", false, h + '<span id="_plain_text_marker"> </span>');
|
||||
|
||||
// Reposition the caret to the marker, which was placed immediately after the inserted content.
|
||||
// Needs to be done asynchronously (in window.setTimeout) or else it doesn't work in all browsers.
|
||||
// The second part of the code scrolls the content up if the caret is positioned off-screen.
|
||||
// This is only necessary for WebKit browsers, but it doesn't hurt to use for all.
|
||||
window.setTimeout(function() {
|
||||
var marker = dom.get('_plain_text_marker'),
|
||||
elm, vp, y, elmHeight;
|
||||
|
||||
sel.select(marker, false);
|
||||
d.execCommand("Delete", false, null);
|
||||
marker = null;
|
||||
|
||||
// Get element, position and height
|
||||
elm = sel.getStart();
|
||||
vp = dom.getViewPort(w);
|
||||
y = dom.getPos(elm).y;
|
||||
elmHeight = elm.clientHeight;
|
||||
|
||||
// Is element within viewport if not then scroll it into view
|
||||
if ((y < vp.y) || (y + elmHeight > vp.y + vp.h)) {
|
||||
d.body.scrollTop = y < vp.y ? y : y - vp.h + 25;
|
||||
}
|
||||
}, 0);
|
||||
ed.execCommand('mceInsertContent', false, content);
|
||||
}
|
||||
},
|
||||
|
||||
|
|
|
|||
0
library/tinymce/jscripts/tiny_mce/plugins/paste/js/pastetext.js
vendored
Executable file → Normal file
0
library/tinymce/jscripts/tiny_mce/plugins/paste/js/pasteword.js
vendored
Executable file → Normal file
6
library/tinymce/jscripts/tiny_mce/plugins/paste/langs/en_dlg.js
vendored
Executable file → Normal file
|
|
@ -1,5 +1 @@
|
|||
tinyMCE.addI18n('en.paste_dlg',{
|
||||
text_title:"Use CTRL+V on your keyboard to paste the text into the window.",
|
||||
text_linebreaks:"Keep linebreaks",
|
||||
word_title:"Use CTRL+V on your keyboard to paste the text into the window."
|
||||
});
|
||||
tinyMCE.addI18n('en.paste_dlg',{"word_title":"Use Ctrl+V on your keyboard to paste the text into the window.","text_linebreaks":"Keep Linebreaks","text_title":"Use Ctrl+V on your keyboard to paste the text into the window."});
|
||||
0
library/tinymce/jscripts/tiny_mce/plugins/paste/pastetext.htm
vendored
Executable file → Normal file
0
library/tinymce/jscripts/tiny_mce/plugins/paste/pasteword.htm
vendored
Executable file → Normal file
0
library/tinymce/jscripts/tiny_mce/plugins/preview/editor_plugin.js
vendored
Executable file → Normal file
0
library/tinymce/jscripts/tiny_mce/plugins/preview/editor_plugin_src.js
vendored
Executable file → Normal file
0
library/tinymce/jscripts/tiny_mce/plugins/preview/example.html
vendored
Executable file → Normal file
0
library/tinymce/jscripts/tiny_mce/plugins/preview/jscripts/embed.js
vendored
Executable file → Normal file
0
library/tinymce/jscripts/tiny_mce/plugins/preview/preview.html
vendored
Executable file → Normal file
0
library/tinymce/jscripts/tiny_mce/plugins/print/editor_plugin.js
vendored
Executable file → Normal file
0
library/tinymce/jscripts/tiny_mce/plugins/print/editor_plugin_src.js
vendored
Executable file → Normal file
0
library/tinymce/jscripts/tiny_mce/plugins/save/editor_plugin.js
vendored
Executable file → Normal file
0
library/tinymce/jscripts/tiny_mce/plugins/save/editor_plugin_src.js
vendored
Executable file → Normal file
0
library/tinymce/jscripts/tiny_mce/plugins/searchreplace/css/searchreplace.css
vendored
Executable file → Normal file
2
library/tinymce/jscripts/tiny_mce/plugins/searchreplace/editor_plugin.js
vendored
Executable file → Normal file
|
|
@ -1 +1 @@
|
|||
(function(){tinymce.create("tinymce.plugins.SearchReplacePlugin",{init:function(a,c){function b(d){a.windowManager.open({file:c+"/searchreplace.htm",width:420+parseInt(a.getLang("searchreplace.delta_width",0)),height:170+parseInt(a.getLang("searchreplace.delta_height",0)),inline:1,auto_focus:0},{mode:d,search_string:a.selection.getContent({format:"text"}),plugin_url:c})}a.addCommand("mceSearch",function(){b("search")});a.addCommand("mceReplace",function(){b("replace")});a.addButton("search",{title:"searchreplace.search_desc",cmd:"mceSearch"});a.addButton("replace",{title:"searchreplace.replace_desc",cmd:"mceReplace"});a.addShortcut("ctrl+f","searchreplace.search_desc","mceSearch")},getInfo:function(){return{longname:"Search/Replace",author:"Moxiecode Systems AB",authorurl:"http://tinymce.moxiecode.com",infourl:"http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/searchreplace",version:tinymce.majorVersion+"."+tinymce.minorVersion}}});tinymce.PluginManager.add("searchreplace",tinymce.plugins.SearchReplacePlugin)})();
|
||||
(function(){tinymce.create("tinymce.plugins.SearchReplacePlugin",{init:function(a,c){function b(d){window.focus();a.windowManager.open({file:c+"/searchreplace.htm",width:420+parseInt(a.getLang("searchreplace.delta_width",0)),height:170+parseInt(a.getLang("searchreplace.delta_height",0)),inline:1,auto_focus:0},{mode:d,search_string:a.selection.getContent({format:"text"}),plugin_url:c})}a.addCommand("mceSearch",function(){b("search")});a.addCommand("mceReplace",function(){b("replace")});a.addButton("search",{title:"searchreplace.search_desc",cmd:"mceSearch"});a.addButton("replace",{title:"searchreplace.replace_desc",cmd:"mceReplace"});a.addShortcut("ctrl+f","searchreplace.search_desc","mceSearch")},getInfo:function(){return{longname:"Search/Replace",author:"Moxiecode Systems AB",authorurl:"http://tinymce.moxiecode.com",infourl:"http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/searchreplace",version:tinymce.majorVersion+"."+tinymce.minorVersion}}});tinymce.PluginManager.add("searchreplace",tinymce.plugins.SearchReplacePlugin)})();
|
||||
4
library/tinymce/jscripts/tiny_mce/plugins/searchreplace/editor_plugin_src.js
vendored
Executable file → Normal file
|
|
@ -12,6 +12,10 @@
|
|||
tinymce.create('tinymce.plugins.SearchReplacePlugin', {
|
||||
init : function(ed, url) {
|
||||
function open(m) {
|
||||
// Keep IE from writing out the f/r character to the editor
|
||||
// instance while initializing a new dialog. See: #3131190
|
||||
window.focus();
|
||||
|
||||
ed.windowManager.open({
|
||||
file : url + '/searchreplace.htm',
|
||||
width : 420 + parseInt(ed.getLang('searchreplace.delta_width', 0)),
|
||||
|
|
|
|||
24
library/tinymce/jscripts/tiny_mce/plugins/searchreplace/js/searchreplace.js
vendored
Executable file → Normal file
|
|
@ -2,14 +2,18 @@ tinyMCEPopup.requireLangPack();
|
|||
|
||||
var SearchReplaceDialog = {
|
||||
init : function(ed) {
|
||||
var f = document.forms[0], m = tinyMCEPopup.getWindowArg("mode");
|
||||
var t = this, f = document.forms[0], m = tinyMCEPopup.getWindowArg("mode");
|
||||
|
||||
this.switchMode(m);
|
||||
t.switchMode(m);
|
||||
|
||||
f[m + '_panel_searchstring'].value = tinyMCEPopup.getWindowArg("search_string");
|
||||
|
||||
// Focus input field
|
||||
f[m + '_panel_searchstring'].focus();
|
||||
|
||||
mcTabs.onChange.add(function(tab_id, panel_id) {
|
||||
t.switchMode(tab_id.substring(0, tab_id.indexOf('_')));
|
||||
});
|
||||
},
|
||||
|
||||
switchMode : function(m) {
|
||||
|
|
@ -42,21 +46,23 @@ var SearchReplaceDialog = {
|
|||
ca = f[m + '_panel_casesensitivebox'].checked;
|
||||
rs = f['replace_panel_replacestring'].value;
|
||||
|
||||
if (tinymce.isIE) {
|
||||
r = ed.getDoc().selection.createRange();
|
||||
}
|
||||
|
||||
if (s == '')
|
||||
return;
|
||||
|
||||
function fix() {
|
||||
// Correct Firefox graphics glitches
|
||||
// TODO: Verify if this is actually needed any more, maybe it was for very old FF versions?
|
||||
r = se.getRng().cloneRange();
|
||||
ed.getDoc().execCommand('SelectAll', false, null);
|
||||
se.setRng(r);
|
||||
};
|
||||
|
||||
function replace() {
|
||||
if (tinymce.isIE)
|
||||
ed.selection.getRng().duplicate().pasteHTML(rs); // Needs to be duplicated due to selection bug in IE
|
||||
else
|
||||
ed.getDoc().execCommand('InsertHTML', false, rs);
|
||||
ed.selection.setContent(rs); // Needs to be duplicated due to selection bug in IE
|
||||
};
|
||||
|
||||
// IE flags
|
||||
|
|
@ -70,6 +76,9 @@ var SearchReplaceDialog = {
|
|||
ed.selection.collapse(true);
|
||||
|
||||
if (tinymce.isIE) {
|
||||
ed.focus();
|
||||
r = ed.getDoc().selection.createRange();
|
||||
|
||||
while (r.findText(s, b ? -1 : 1, fl)) {
|
||||
r.scrollIntoView();
|
||||
r.select();
|
||||
|
|
@ -111,6 +120,9 @@ var SearchReplaceDialog = {
|
|||
return;
|
||||
|
||||
if (tinymce.isIE) {
|
||||
ed.focus();
|
||||
r = ed.getDoc().selection.createRange();
|
||||
|
||||
if (r.findText(s, b ? -1 : 1, fl)) {
|
||||
r.scrollIntoView();
|
||||
r.select();
|
||||
|
|
|
|||
17
library/tinymce/jscripts/tiny_mce/plugins/searchreplace/langs/en_dlg.js
vendored
Executable file → Normal file
|
|
@ -1,16 +1 @@
|
|||
tinyMCE.addI18n('en.searchreplace_dlg',{
|
||||
searchnext_desc:"Find again",
|
||||
notfound:"The search has been completed. The search string could not be found.",
|
||||
search_title:"Find",
|
||||
replace_title:"Find/Replace",
|
||||
allreplaced:"All occurrences of the search string were replaced.",
|
||||
findwhat:"Find what",
|
||||
replacewith:"Replace with",
|
||||
direction:"Direction",
|
||||
up:"Up",
|
||||
down:"Down",
|
||||
mcase:"Match case",
|
||||
findnext:"Find next",
|
||||
replace:"Replace",
|
||||
replaceall:"Replace all"
|
||||
});
|
||||
tinyMCE.addI18n('en.searchreplace_dlg',{findwhat:"Find What",replacewith:"Replace with",direction:"Direction",up:"Up",down:"Down",mcase:"Match Case",findnext:"Find Next",allreplaced:"All occurrences of the search string were replaced.","searchnext_desc":"Find Again",notfound:"The search has been completed. The search string could not be found.","search_title":"Find","replace_title":"Find/Replace",replaceall:"Replace All",replace:"Replace"});
|
||||
33
library/tinymce/jscripts/tiny_mce/plugins/searchreplace/searchreplace.htm
vendored
Executable file → Normal file
|
|
@ -8,27 +8,28 @@
|
|||
<script type="text/javascript" src="js/searchreplace.js"></script>
|
||||
<link rel="stylesheet" type="text/css" href="css/searchreplace.css" />
|
||||
</head>
|
||||
<body style="display:none;">
|
||||
<body style="display:none;" role="application" aria-labelledby="app_title">
|
||||
<span id="app_title" style="display:none">{#searchreplace_dlg.replace_title}</span>
|
||||
<form onsubmit="SearchReplaceDialog.searchNext('none');return false;" action="#">
|
||||
<div class="tabs">
|
||||
<ul>
|
||||
<li id="search_tab"><span><a href="javascript:SearchReplaceDialog.switchMode('search');" onmousedown="return false;">{#searchreplace.search_desc}</a></span></li>
|
||||
<li id="replace_tab"><span><a href="javascript:SearchReplaceDialog.switchMode('replace');" onmousedown="return false;">{#searchreplace_dlg.replace}</a></span></li>
|
||||
<li id="search_tab" aria-controls="search_panel"><span><a href="javascript:SearchReplaceDialog.switchMode('search');" onmousedown="return false;">{#searchreplace.search_desc}</a></span></li>
|
||||
<li id="replace_tab" aria-controls="replace_panel"><span><a href="javascript:SearchReplaceDialog.switchMode('replace');" onmousedown="return false;">{#searchreplace_dlg.replace}</a></span></li>
|
||||
</ul>
|
||||
</div>
|
||||
|
||||
<div class="panel_wrapper">
|
||||
<div id="search_panel" class="panel">
|
||||
<table border="0" cellspacing="0" cellpadding="2">
|
||||
<table role="presentation" border="0" cellspacing="0" cellpadding="2">
|
||||
<tr>
|
||||
<td><label for="search_panel_searchstring">{#searchreplace_dlg.findwhat}</label></td>
|
||||
<td><input type="text" id="search_panel_searchstring" name="search_panel_searchstring" style="width: 200px" /></td>
|
||||
<td><input type="text" id="search_panel_searchstring" name="search_panel_searchstring" style="width: 200px" aria-required="true" /></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td colspan="2">
|
||||
<table border="0" cellspacing="0" cellpadding="0" class="direction">
|
||||
<tr>
|
||||
<td><label>{#searchreplace_dlg.direction}</label></td>
|
||||
<table role="presentation" border="0" cellspacing="0" cellpadding="0" class="direction">
|
||||
<tr role="group" aria-labelledby="search_panel_backwards_label">
|
||||
<td><label id="search_panel_backwards_label">{#searchreplace_dlg.direction}</label></td>
|
||||
<td><input id="search_panel_backwardsu" name="search_panel_backwards" class="radio" type="radio" /></td>
|
||||
<td><label for="search_panel_backwardsu">{#searchreplace_dlg.up}</label></td>
|
||||
<td><input id="search_panel_backwardsd" name="search_panel_backwards" class="radio" type="radio" checked="checked" /></td>
|
||||
|
|
@ -39,7 +40,7 @@
|
|||
</tr>
|
||||
<tr>
|
||||
<td colspan="2">
|
||||
<table border="0" cellspacing="0" cellpadding="0">
|
||||
<table role="presentation" border="0" cellspacing="0" cellpadding="0">
|
||||
<tr>
|
||||
<td><input id="search_panel_casesensitivebox" name="search_panel_casesensitivebox" class="checkbox" type="checkbox" /></td>
|
||||
<td><label for="search_panel_casesensitivebox">{#searchreplace_dlg.mcase}</label></td>
|
||||
|
|
@ -51,20 +52,20 @@
|
|||
</div>
|
||||
|
||||
<div id="replace_panel" class="panel">
|
||||
<table border="0" cellspacing="0" cellpadding="2">
|
||||
<table role="presentation" border="0" cellspacing="0" cellpadding="2">
|
||||
<tr>
|
||||
<td><label for="replace_panel_searchstring">{#searchreplace_dlg.findwhat}</label></td>
|
||||
<td><input type="text" id="replace_panel_searchstring" name="replace_panel_searchstring" style="width: 200px" /></td>
|
||||
<td><input type="text" id="replace_panel_searchstring" name="replace_panel_searchstring" style="width: 200px" aria-required="true" /></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><label for="replace_panel_replacestring">{#searchreplace_dlg.replacewith}</label></td>
|
||||
<td><input type="text" id="replace_panel_replacestring" name="replace_panel_replacestring" style="width: 200px" /></td>
|
||||
<td><input type="text" id="replace_panel_replacestring" name="replace_panel_replacestring" style="width: 200px" aria-required="true" /></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td colspan="2">
|
||||
<table border="0" cellspacing="0" cellpadding="0" class="direction">
|
||||
<tr>
|
||||
<td><label>{#searchreplace_dlg.direction}</label></td>
|
||||
<table role="presentation" border="0" cellspacing="0" cellpadding="0" class="direction">
|
||||
<tr role="group" aria-labelledby="replace_panel_dir_label">
|
||||
<td><label id="replace_panel_dir_label">{#searchreplace_dlg.direction}</label></td>
|
||||
<td><input id="replace_panel_backwardsu" name="replace_panel_backwards" class="radio" type="radio" /></td>
|
||||
<td><label for="replace_panel_backwardsu">{#searchreplace_dlg.up}</label></td>
|
||||
<td><input id="replace_panel_backwardsd" name="replace_panel_backwards" class="radio" type="radio" checked="checked" /></td>
|
||||
|
|
@ -75,7 +76,7 @@
|
|||
</tr>
|
||||
<tr>
|
||||
<td colspan="2">
|
||||
<table border="0" cellspacing="0" cellpadding="0">
|
||||
<table role="presentation" border="0" cellspacing="0" cellpadding="0">
|
||||
<tr>
|
||||
<td><input id="replace_panel_casesensitivebox" name="replace_panel_casesensitivebox" class="checkbox" type="checkbox" /></td>
|
||||
<td><label for="replace_panel_casesensitivebox">{#searchreplace_dlg.mcase}</label></td>
|
||||
|
|
|
|||
0
library/tinymce/jscripts/tiny_mce/plugins/spellchecker/css/content.css
vendored
Executable file → Normal file
2
library/tinymce/jscripts/tiny_mce/plugins/spellchecker/editor_plugin.js
vendored
Executable file → Normal file
155
library/tinymce/jscripts/tiny_mce/plugins/spellchecker/editor_plugin_src.js
vendored
Executable file → Normal file
|
|
@ -70,10 +70,8 @@
|
|||
t._done();
|
||||
});
|
||||
|
||||
ed.onInit.add(function() {
|
||||
if (ed.settings.content_css !== false)
|
||||
ed.dom.loadCSS(url + '/css/content.css');
|
||||
});
|
||||
if (ed.settings.content_css !== false)
|
||||
ed.contentCSS.push(url + '/css/content.css');
|
||||
|
||||
ed.onClick.add(t._showMenu, t);
|
||||
ed.onContextMenu.add(t._showMenu, t);
|
||||
|
|
@ -132,6 +130,9 @@
|
|||
var o = {icon : 1}, mi;
|
||||
|
||||
o.onclick = function() {
|
||||
if (v == t.selectedLang) {
|
||||
return;
|
||||
}
|
||||
mi.setSelected(1);
|
||||
t.selectedItem.setSelected(0);
|
||||
t.selectedItem = mi;
|
||||
|
|
@ -207,7 +208,7 @@
|
|||
},
|
||||
|
||||
_removeWords : function(w) {
|
||||
var ed = this.editor, dom = ed.dom, se = ed.selection, b = se.getBookmark();
|
||||
var ed = this.editor, dom = ed.dom, se = ed.selection, r = se.getRng(true);
|
||||
|
||||
each(dom.select('span').reverse(), function(n) {
|
||||
if (n && (dom.hasClass(n, 'mceItemHiddenSpellWord') || dom.hasClass(n, 'mceItemHidden'))) {
|
||||
|
|
@ -216,25 +217,15 @@
|
|||
}
|
||||
});
|
||||
|
||||
se.moveToBookmark(b);
|
||||
se.setRng(r);
|
||||
},
|
||||
|
||||
_markWords : function(wl) {
|
||||
var r1, r2, r3, r4, r5, w = '', ed = this.editor, re = this._getSeparators(), dom = ed.dom, nl = [];
|
||||
var se = ed.selection, b = se.getBookmark();
|
||||
|
||||
each(wl, function(v) {
|
||||
w += (w ? '|' : '') + v;
|
||||
});
|
||||
|
||||
r1 = new RegExp('([' + re + '])(' + w + ')([' + re + '])', 'g');
|
||||
r2 = new RegExp('^(' + w + ')', 'g');
|
||||
r3 = new RegExp('(' + w + ')([' + re + ']?)$', 'g');
|
||||
r4 = new RegExp('^(' + w + ')([' + re + ']?)$', 'g');
|
||||
r5 = new RegExp('(' + w + ')([' + re + '])', 'g');
|
||||
var ed = this.editor, dom = ed.dom, doc = ed.getDoc(), se = ed.selection, r = se.getRng(true), nl = [],
|
||||
w = wl.join('|'), re = this._getSeparators(), rx = new RegExp('(^|[' + re + '])(' + w + ')(?=[' + re + ']|$)', 'g');
|
||||
|
||||
// Collect all text nodes
|
||||
this._walk(this.editor.getBody(), function(n) {
|
||||
this._walk(ed.getBody(), function(n) {
|
||||
if (n.nodeType == 3) {
|
||||
nl.push(n);
|
||||
}
|
||||
|
|
@ -242,22 +233,53 @@
|
|||
|
||||
// Wrap incorrect words in spans
|
||||
each(nl, function(n) {
|
||||
var v;
|
||||
var node, elem, txt, pos, v = n.nodeValue;
|
||||
|
||||
if (n.nodeType == 3) {
|
||||
v = n.nodeValue;
|
||||
if (rx.test(v)) {
|
||||
// Encode the content
|
||||
v = dom.encode(v);
|
||||
// Create container element
|
||||
elem = dom.create('span', {'class' : 'mceItemHidden'});
|
||||
|
||||
if (r1.test(v) || r2.test(v) || r3.test(v) || r4.test(v)) {
|
||||
v = dom.encode(v);
|
||||
v = v.replace(r5, '<span class="mceItemHiddenSpellWord">$1</span>$2');
|
||||
v = v.replace(r3, '<span class="mceItemHiddenSpellWord">$1</span>$2');
|
||||
|
||||
dom.replace(dom.create('span', {'class' : 'mceItemHidden'}, v), n);
|
||||
// Following code fixes IE issues by creating text nodes
|
||||
// using DOM methods instead of innerHTML.
|
||||
// Bug #3124: <PRE> elements content is broken after spellchecking.
|
||||
// Bug #1408: Preceding whitespace characters are removed
|
||||
// @TODO: I'm not sure that both are still issues on IE9.
|
||||
if (tinymce.isIE) {
|
||||
// Enclose mispelled words with temporal tag
|
||||
v = v.replace(rx, '$1<mcespell>$2</mcespell>');
|
||||
// Loop over the content finding mispelled words
|
||||
while ((pos = v.indexOf('<mcespell>')) != -1) {
|
||||
// Add text node for the content before the word
|
||||
txt = v.substring(0, pos);
|
||||
if (txt.length) {
|
||||
node = doc.createTextNode(dom.decode(txt));
|
||||
elem.appendChild(node);
|
||||
}
|
||||
v = v.substring(pos+10);
|
||||
pos = v.indexOf('</mcespell>');
|
||||
txt = v.substring(0, pos);
|
||||
v = v.substring(pos+11);
|
||||
// Add span element for the word
|
||||
elem.appendChild(dom.create('span', {'class' : 'mceItemHiddenSpellWord'}, txt));
|
||||
}
|
||||
// Add text node for the rest of the content
|
||||
if (v.length) {
|
||||
node = doc.createTextNode(dom.decode(v));
|
||||
elem.appendChild(node);
|
||||
}
|
||||
} else {
|
||||
// Other browsers preserve whitespace characters on innerHTML usage
|
||||
elem.innerHTML = v.replace(rx, '$1<span class="mceItemHiddenSpellWord">$2</span>');
|
||||
}
|
||||
|
||||
// Finally, replace the node with the container
|
||||
dom.replace(elem, n);
|
||||
}
|
||||
});
|
||||
|
||||
se.moveToBookmark(b);
|
||||
se.setRng(r);
|
||||
},
|
||||
|
||||
_showMenu : function(ed, e) {
|
||||
|
|
@ -266,15 +288,7 @@
|
|||
e = 0; // Fixes IE memory leak
|
||||
|
||||
if (!m) {
|
||||
p1 = DOM.getPos(ed.getContentAreaContainer());
|
||||
//p2 = DOM.getPos(ed.getContainer());
|
||||
|
||||
m = ed.controlManager.createDropMenu('spellcheckermenu', {
|
||||
offset_x : p1.x,
|
||||
offset_y : p1.y,
|
||||
'class' : 'mceNoIcons'
|
||||
});
|
||||
|
||||
m = ed.controlManager.createDropMenu('spellcheckermenu', {'class' : 'mceNoIcons'});
|
||||
t._menu = m;
|
||||
}
|
||||
|
||||
|
|
@ -300,43 +314,44 @@
|
|||
} else
|
||||
m.add({title : 'spellchecker.no_sug', 'class' : 'mceMenuItemTitle'}).setDisabled(1);
|
||||
|
||||
ignoreRpc = t.editor.getParam("spellchecker_enable_ignore_rpc", '');
|
||||
m.add({
|
||||
title : 'spellchecker.ignore_word',
|
||||
onclick : function() {
|
||||
var word = wordSpan.innerHTML;
|
||||
if (ed.getParam('show_ignore_words', true)) {
|
||||
ignoreRpc = t.editor.getParam("spellchecker_enable_ignore_rpc", '');
|
||||
m.add({
|
||||
title : 'spellchecker.ignore_word',
|
||||
onclick : function() {
|
||||
var word = wordSpan.innerHTML;
|
||||
|
||||
dom.remove(wordSpan, 1);
|
||||
t._checkDone();
|
||||
dom.remove(wordSpan, 1);
|
||||
t._checkDone();
|
||||
|
||||
// tell the server if we need to
|
||||
if (ignoreRpc) {
|
||||
ed.setProgressState(1);
|
||||
t._sendRPC('ignoreWord', [t.selectedLang, word], function(r) {
|
||||
ed.setProgressState(0);
|
||||
});
|
||||
// tell the server if we need to
|
||||
if (ignoreRpc) {
|
||||
ed.setProgressState(1);
|
||||
t._sendRPC('ignoreWord', [t.selectedLang, word], function(r) {
|
||||
ed.setProgressState(0);
|
||||
});
|
||||
}
|
||||
}
|
||||
}
|
||||
});
|
||||
});
|
||||
|
||||
m.add({
|
||||
title : 'spellchecker.ignore_words',
|
||||
onclick : function() {
|
||||
var word = wordSpan.innerHTML;
|
||||
m.add({
|
||||
title : 'spellchecker.ignore_words',
|
||||
onclick : function() {
|
||||
var word = wordSpan.innerHTML;
|
||||
|
||||
t._removeWords(dom.decode(word));
|
||||
t._checkDone();
|
||||
t._removeWords(dom.decode(word));
|
||||
t._checkDone();
|
||||
|
||||
// tell the server if we need to
|
||||
if (ignoreRpc) {
|
||||
ed.setProgressState(1);
|
||||
t._sendRPC('ignoreWords', [t.selectedLang, word], function(r) {
|
||||
ed.setProgressState(0);
|
||||
});
|
||||
// tell the server if we need to
|
||||
if (ignoreRpc) {
|
||||
ed.setProgressState(1);
|
||||
t._sendRPC('ignoreWords', [t.selectedLang, word], function(r) {
|
||||
ed.setProgressState(0);
|
||||
});
|
||||
}
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
});
|
||||
}
|
||||
|
||||
if (t.editor.getParam("spellchecker_enable_learn_rpc")) {
|
||||
m.add({
|
||||
|
|
@ -358,6 +373,10 @@
|
|||
m.update();
|
||||
});
|
||||
|
||||
p1 = DOM.getPos(ed.getContentAreaContainer());
|
||||
m.settings.offset_x = p1.x;
|
||||
m.settings.offset_y = p1.y;
|
||||
|
||||
ed.selection.select(wordSpan);
|
||||
p1 = dom.getPos(wordSpan);
|
||||
m.showMenu(p1.x, p1.y + wordSpan.offsetHeight - vp.y);
|
||||
|
|
|
|||
0
library/tinymce/jscripts/tiny_mce/plugins/spellchecker/img/wline.gif
vendored
Executable file → Normal file
|
Before Width: | Height: | Size: 46 B After Width: | Height: | Size: 46 B |
1
library/tinymce/jscripts/tiny_mce/plugins/style/css/props.css
vendored
Executable file → Normal file
|
|
@ -5,6 +5,7 @@ select, #block_text_indent, #box_width, #box_height, #box_padding_top, #box_padd
|
|||
#box_margin_top, #box_margin_right, #box_margin_bottom, #box_margin_left, #positioning_width, #positioning_height, #positioning_zindex {width:70px;}
|
||||
#positioning_placement_top, #positioning_placement_right, #positioning_placement_bottom, #positioning_placement_left {width:70px;}
|
||||
#positioning_clip_top, #positioning_clip_right, #positioning_clip_bottom, #positioning_clip_left {width:70px;}
|
||||
.panel_toggle_insert_span {padding-top:10px;}
|
||||
.panel_wrapper div.current {padding-top:10px;height:230px;}
|
||||
.delim {border-left:1px solid gray;}
|
||||
.tdelim {border-bottom:1px solid gray;}
|
||||
|
|
|
|||
2
library/tinymce/jscripts/tiny_mce/plugins/style/editor_plugin.js
vendored
Executable file → Normal file
|
|
@ -1 +1 @@
|
|||
(function(){tinymce.create("tinymce.plugins.StylePlugin",{init:function(a,b){a.addCommand("mceStyleProps",function(){a.windowManager.open({file:b+"/props.htm",width:480+parseInt(a.getLang("style.delta_width",0)),height:320+parseInt(a.getLang("style.delta_height",0)),inline:1},{plugin_url:b,style_text:a.selection.getNode().style.cssText})});a.addCommand("mceSetElementStyle",function(d,c){if(e=a.selection.getNode()){a.dom.setAttrib(e,"style",c);a.execCommand("mceRepaint")}});a.onNodeChange.add(function(d,c,f){c.setDisabled("styleprops",f.nodeName==="BODY")});a.addButton("styleprops",{title:"style.desc",cmd:"mceStyleProps"})},getInfo:function(){return{longname:"Style",author:"Moxiecode Systems AB",authorurl:"http://tinymce.moxiecode.com",infourl:"http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/style",version:tinymce.majorVersion+"."+tinymce.minorVersion}}});tinymce.PluginManager.add("style",tinymce.plugins.StylePlugin)})();
|
||||
(function(){tinymce.create("tinymce.plugins.StylePlugin",{init:function(a,b){a.addCommand("mceStyleProps",function(){var c=false;var f=a.selection.getSelectedBlocks();var d=[];if(f.length===1){d.push(a.selection.getNode().style.cssText)}else{tinymce.each(f,function(g){d.push(a.dom.getAttrib(g,"style"))});c=true}a.windowManager.open({file:b+"/props.htm",width:480+parseInt(a.getLang("style.delta_width",0)),height:340+parseInt(a.getLang("style.delta_height",0)),inline:1},{applyStyleToBlocks:c,plugin_url:b,styles:d})});a.addCommand("mceSetElementStyle",function(d,c){if(e=a.selection.getNode()){a.dom.setAttrib(e,"style",c);a.execCommand("mceRepaint")}});a.onNodeChange.add(function(d,c,f){c.setDisabled("styleprops",f.nodeName==="BODY")});a.addButton("styleprops",{title:"style.desc",cmd:"mceStyleProps"})},getInfo:function(){return{longname:"Style",author:"Moxiecode Systems AB",authorurl:"http://tinymce.moxiecode.com",infourl:"http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/style",version:tinymce.majorVersion+"."+tinymce.minorVersion}}});tinymce.PluginManager.add("style",tinymce.plugins.StylePlugin)})();
|
||||
20
library/tinymce/jscripts/tiny_mce/plugins/style/editor_plugin_src.js
vendored
Executable file → Normal file
|
|
@ -13,14 +13,30 @@
|
|||
init : function(ed, url) {
|
||||
// Register commands
|
||||
ed.addCommand('mceStyleProps', function() {
|
||||
|
||||
var applyStyleToBlocks = false;
|
||||
var blocks = ed.selection.getSelectedBlocks();
|
||||
var styles = [];
|
||||
|
||||
if (blocks.length === 1) {
|
||||
styles.push(ed.selection.getNode().style.cssText);
|
||||
}
|
||||
else {
|
||||
tinymce.each(blocks, function(block) {
|
||||
styles.push(ed.dom.getAttrib(block, 'style'));
|
||||
});
|
||||
applyStyleToBlocks = true;
|
||||
}
|
||||
|
||||
ed.windowManager.open({
|
||||
file : url + '/props.htm',
|
||||
width : 480 + parseInt(ed.getLang('style.delta_width', 0)),
|
||||
height : 320 + parseInt(ed.getLang('style.delta_height', 0)),
|
||||
height : 340 + parseInt(ed.getLang('style.delta_height', 0)),
|
||||
inline : 1
|
||||
}, {
|
||||
applyStyleToBlocks : applyStyleToBlocks,
|
||||
plugin_url : url,
|
||||
style_text : ed.selection.getNode().style.cssText
|
||||
styles : styles
|
||||
});
|
||||
});
|
||||
|
||||
|
|
|
|||
90
library/tinymce/jscripts/tiny_mce/plugins/style/js/props.js
vendored
Executable file → Normal file
|
|
@ -27,10 +27,41 @@ var defaultBorderStyle = "none;solid;dashed;dotted;double;groove;ridge;inset;out
|
|||
var defaultBorderWidth = "thin;medium;thick";
|
||||
var defaultListType = "disc;circle;square;decimal;lower-roman;upper-roman;lower-alpha;upper-alpha;none";
|
||||
|
||||
function init() {
|
||||
function aggregateStyles(allStyles) {
|
||||
var mergedStyles = {};
|
||||
|
||||
tinymce.each(allStyles, function(style) {
|
||||
if (style !== '') {
|
||||
var parsedStyles = tinyMCEPopup.editor.dom.parseStyle(style);
|
||||
for (var name in parsedStyles) {
|
||||
if (parsedStyles.hasOwnProperty(name)) {
|
||||
if (mergedStyles[name] === undefined) {
|
||||
mergedStyles[name] = parsedStyles[name];
|
||||
}
|
||||
else if (name === 'text-decoration') {
|
||||
if (mergedStyles[name].indexOf(parsedStyles[name]) === -1) {
|
||||
mergedStyles[name] = mergedStyles[name] +' '+ parsedStyles[name];
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
return mergedStyles;
|
||||
}
|
||||
|
||||
var applyActionIsInsert;
|
||||
var existingStyles;
|
||||
|
||||
function init(ed) {
|
||||
var ce = document.getElementById('container'), h;
|
||||
|
||||
ce.style.cssText = tinyMCEPopup.getWindowArg('style_text');
|
||||
existingStyles = aggregateStyles(tinyMCEPopup.getWindowArg('styles'));
|
||||
ce.style.cssText = tinyMCEPopup.editor.dom.serializeStyle(existingStyles);
|
||||
|
||||
applyActionIsInsert = ed.getParam("edit_css_style_insert_span", false);
|
||||
document.getElementById('toggle_insert_span').checked = applyActionIsInsert;
|
||||
|
||||
h = getBrowserHTML('background_image_browser','background_image','image','advimage');
|
||||
document.getElementById("background_image_browser").innerHTML = h;
|
||||
|
|
@ -144,6 +175,8 @@ function setupFormData() {
|
|||
f.text_overline.checked = inStr(ce.style.textDecoration, 'overline');
|
||||
f.text_linethrough.checked = inStr(ce.style.textDecoration, 'line-through');
|
||||
f.text_blink.checked = inStr(ce.style.textDecoration, 'blink');
|
||||
f.text_none.checked = inStr(ce.style.textDecoration, 'none');
|
||||
updateTextDecorations();
|
||||
|
||||
// Setup background fields
|
||||
|
||||
|
|
@ -177,11 +210,7 @@ function setupFormData() {
|
|||
|
||||
f.box_height.value = getNum(ce.style.height);
|
||||
selectByValue(f, 'box_height_measurement', getMeasurement(ce.style.height));
|
||||
|
||||
if (tinymce.isGecko)
|
||||
selectByValue(f, 'box_float', ce.style.cssFloat, true, true);
|
||||
else
|
||||
selectByValue(f, 'box_float', ce.style.styleFloat, true, true);
|
||||
selectByValue(f, 'box_float', ce.style.cssFloat || ce.style.styleFloat, true, true);
|
||||
|
||||
selectByValue(f, 'box_clear', ce.style.clear, true, true);
|
||||
|
||||
|
|
@ -370,13 +399,41 @@ function hasEqualValues(a) {
|
|||
return true;
|
||||
}
|
||||
|
||||
function toggleApplyAction() {
|
||||
applyActionIsInsert = ! applyActionIsInsert;
|
||||
}
|
||||
|
||||
function applyAction() {
|
||||
var ce = document.getElementById('container'), ed = tinyMCEPopup.editor;
|
||||
|
||||
generateCSS();
|
||||
|
||||
tinyMCEPopup.restoreSelection();
|
||||
ed.dom.setAttrib(ed.selection.getNode(), 'style', tinyMCEPopup.editor.dom.serializeStyle(tinyMCEPopup.editor.dom.parseStyle(ce.style.cssText)));
|
||||
|
||||
var newStyles = tinyMCEPopup.editor.dom.parseStyle(ce.style.cssText);
|
||||
|
||||
if (applyActionIsInsert) {
|
||||
ed.formatter.register('plugin_style', {
|
||||
inline: 'span', styles: existingStyles
|
||||
});
|
||||
ed.formatter.remove('plugin_style');
|
||||
|
||||
ed.formatter.register('plugin_style', {
|
||||
inline: 'span', styles: newStyles
|
||||
});
|
||||
ed.formatter.apply('plugin_style');
|
||||
} else {
|
||||
var nodes;
|
||||
|
||||
if (tinyMCEPopup.getWindowArg('applyStyleToBlocks')) {
|
||||
nodes = ed.selection.getSelectedBlocks();
|
||||
}
|
||||
else {
|
||||
nodes = ed.selection.getNode();
|
||||
}
|
||||
|
||||
ed.dom.setAttrib(nodes, 'style', tinyMCEPopup.editor.dom.serializeStyle(newStyles));
|
||||
}
|
||||
}
|
||||
|
||||
function updateAction() {
|
||||
|
|
@ -440,9 +497,7 @@ function generateCSS() {
|
|||
ce.style.width = f.box_width.value + (isNum(f.box_width.value) ? f.box_width_measurement.value : "");
|
||||
ce.style.height = f.box_height.value + (isNum(f.box_height.value) ? f.box_height_measurement.value : "");
|
||||
ce.style.styleFloat = f.box_float.value;
|
||||
|
||||
if (tinymce.isGecko)
|
||||
ce.style.cssFloat = f.box_float.value;
|
||||
ce.style.cssFloat = f.box_float.value;
|
||||
|
||||
ce.style.clear = f.box_clear.value;
|
||||
|
||||
|
|
@ -638,4 +693,17 @@ function synch(fr, to) {
|
|||
selectByValue(f, to + "_measurement", f.elements[fr + "_measurement"].value);
|
||||
}
|
||||
|
||||
function updateTextDecorations(){
|
||||
var el = document.forms[0].elements;
|
||||
|
||||
var textDecorations = ["text_underline", "text_overline", "text_linethrough", "text_blink"];
|
||||
var noneChecked = el["text_none"].checked;
|
||||
tinymce.each(textDecorations, function(id) {
|
||||
el[id].disabled = noneChecked;
|
||||
if (noneChecked) {
|
||||
el[id].checked = false;
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
tinyMCEPopup.onInit.add(init);
|
||||
|
|
|
|||
64
library/tinymce/jscripts/tiny_mce/plugins/style/langs/en_dlg.js
vendored
Executable file → Normal file
|
|
@ -1,63 +1 @@
|
|||
tinyMCE.addI18n('en.style_dlg',{
|
||||
title:"Edit CSS Style",
|
||||
apply:"Apply",
|
||||
text_tab:"Text",
|
||||
background_tab:"Background",
|
||||
block_tab:"Block",
|
||||
box_tab:"Box",
|
||||
border_tab:"Border",
|
||||
list_tab:"List",
|
||||
positioning_tab:"Positioning",
|
||||
text_props:"Text",
|
||||
text_font:"Font",
|
||||
text_size:"Size",
|
||||
text_weight:"Weight",
|
||||
text_style:"Style",
|
||||
text_variant:"Variant",
|
||||
text_lineheight:"Line height",
|
||||
text_case:"Case",
|
||||
text_color:"Color",
|
||||
text_decoration:"Decoration",
|
||||
text_overline:"overline",
|
||||
text_underline:"underline",
|
||||
text_striketrough:"strikethrough",
|
||||
text_blink:"blink",
|
||||
text_none:"none",
|
||||
background_color:"Background color",
|
||||
background_image:"Background image",
|
||||
background_repeat:"Repeat",
|
||||
background_attachment:"Attachment",
|
||||
background_hpos:"Horizontal position",
|
||||
background_vpos:"Vertical position",
|
||||
block_wordspacing:"Word spacing",
|
||||
block_letterspacing:"Letter spacing",
|
||||
block_vertical_alignment:"Vertical alignment",
|
||||
block_text_align:"Text align",
|
||||
block_text_indent:"Text indent",
|
||||
block_whitespace:"Whitespace",
|
||||
block_display:"Display",
|
||||
box_width:"Width",
|
||||
box_height:"Height",
|
||||
box_float:"Float",
|
||||
box_clear:"Clear",
|
||||
padding:"Padding",
|
||||
same:"Same for all",
|
||||
top:"Top",
|
||||
right:"Right",
|
||||
bottom:"Bottom",
|
||||
left:"Left",
|
||||
margin:"Margin",
|
||||
style:"Style",
|
||||
width:"Width",
|
||||
height:"Height",
|
||||
color:"Color",
|
||||
list_type:"Type",
|
||||
bullet_image:"Bullet image",
|
||||
position:"Position",
|
||||
positioning_type:"Type",
|
||||
visibility:"Visibility",
|
||||
zindex:"Z-index",
|
||||
overflow:"Overflow",
|
||||
placement:"Placement",
|
||||
clip:"Clip"
|
||||
});
|
||||
tinyMCE.addI18n('en.style_dlg',{"text_lineheight":"Line Height","text_variant":"Variant","text_style":"Style","text_weight":"Weight","text_size":"Size","text_font":"Font","text_props":"Text","positioning_tab":"Positioning","list_tab":"List","border_tab":"Border","box_tab":"Box","block_tab":"Block","background_tab":"Background","text_tab":"Text",apply:"Apply",toggle_insert_span:"Insert span at selection",title:"Edit CSS Style",clip:"Clip",placement:"Placement",overflow:"Overflow",zindex:"Z-index",visibility:"Visibility","positioning_type":"Type",position:"Position","bullet_image":"Bullet Image","list_type":"Type",color:"Color",height:"Height",width:"Width",style:"Style",margin:"Margin",left:"Left",bottom:"Bottom",right:"Right",top:"Top",same:"Same for All",padding:"Padding","box_clear":"Clear","box_float":"Float","box_height":"Height","box_width":"Width","block_display":"Display","block_whitespace":"Whitespace","block_text_indent":"Text Indent","block_text_align":"Text Align","block_vertical_alignment":"Vertical Alignment","block_letterspacing":"Letter Spacing","block_wordspacing":"Word Spacing","background_vpos":"Vertical Position","background_hpos":"Horizontal Position","background_attachment":"Attachment","background_repeat":"Repeat","background_image":"Background Image","background_color":"Background Color","text_none":"None","text_blink":"Blink","text_case":"Case","text_striketrough":"Strikethrough","text_underline":"Underline","text_overline":"Overline","text_decoration":"Decoration","text_color":"Color",text:"Text",background:"Background",block:"Block",box:"Box",border:"Border",list:"List"});
|
||||
|
|
|
|||
906
library/tinymce/jscripts/tiny_mce/plugins/style/props.htm
vendored
Executable file → Normal file
|
|
@ -10,277 +10,319 @@
|
|||
<link href="css/props.css" rel="stylesheet" type="text/css" />
|
||||
</head>
|
||||
|
||||
<body id="styleprops" style="display: none">
|
||||
<body id="styleprops" style="display: none" role="application" aria-labelledby="app_title">
|
||||
<span id="app_title" style="display:none">{#style_dlg.title}</span>
|
||||
<form onsubmit="updateAction();return false;" action="#">
|
||||
<div class="tabs">
|
||||
<ul>
|
||||
<li id="text_tab" class="current"><span><a href="javascript:mcTabs.displayTab('text_tab','text_panel');" onMouseDown="return false;">{#style_dlg.text_tab}</a></span></li>
|
||||
<li id="background_tab"><span><a href="javascript:mcTabs.displayTab('background_tab','background_panel');" onMouseDown="return false;">{#style_dlg.background_tab}</a></span></li>
|
||||
<li id="block_tab"><span><a href="javascript:mcTabs.displayTab('block_tab','block_panel');" onMouseDown="return false;">{#style_dlg.block_tab}</a></span></li>
|
||||
<li id="box_tab"><span><a href="javascript:mcTabs.displayTab('box_tab','box_panel');" onMouseDown="return false;">{#style_dlg.box_tab}</a></span></li>
|
||||
<li id="border_tab"><span><a href="javascript:mcTabs.displayTab('border_tab','border_panel');" onMouseDown="return false;">{#style_dlg.border_tab}</a></span></li>
|
||||
<li id="list_tab"><span><a href="javascript:mcTabs.displayTab('list_tab','list_panel');" onMouseDown="return false;">{#style_dlg.list_tab}</a></span></li>
|
||||
<li id="positioning_tab"><span><a href="javascript:mcTabs.displayTab('positioning_tab','positioning_panel');" onMouseDown="return false;">{#style_dlg.positioning_tab}</a></span></li>
|
||||
<li id="text_tab" class="current" aria-controls="text_panel"><span><a href="javascript:mcTabs.displayTab('text_tab','text_panel');" onMouseDown="return false;">{#style_dlg.text_tab}</a></span></li>
|
||||
<li id="background_tab" aria-controls="background_panel"><span><a href="javascript:mcTabs.displayTab('background_tab','background_panel');" onMouseDown="return false;">{#style_dlg.background_tab}</a></span></li>
|
||||
<li id="block_tab" aria-controls="block_panel"><span><a href="javascript:mcTabs.displayTab('block_tab','block_panel');" onMouseDown="return false;">{#style_dlg.block_tab}</a></span></li>
|
||||
<li id="box_tab" aria-controls="box_panel"><span><a href="javascript:mcTabs.displayTab('box_tab','box_panel');" onMouseDown="return false;">{#style_dlg.box_tab}</a></span></li>
|
||||
<li id="border_tab" aria-controls="border_panel"><span><a href="javascript:mcTabs.displayTab('border_tab','border_panel');" onMouseDown="return false;">{#style_dlg.border_tab}</a></span></li>
|
||||
<li id="list_tab" aria-controls="list_panel"><span><a href="javascript:mcTabs.displayTab('list_tab','list_panel');" onMouseDown="return false;">{#style_dlg.list_tab}</a></span></li>
|
||||
<li id="positioning_tab" aria-controls="positioning_panel"><span><a href="javascript:mcTabs.displayTab('positioning_tab','positioning_panel');" onMouseDown="return false;">{#style_dlg.positioning_tab}</a></span></li>
|
||||
</ul>
|
||||
</div>
|
||||
|
||||
<div class="panel_wrapper">
|
||||
<div id="text_panel" class="panel current">
|
||||
<table border="0" width="100%">
|
||||
<tr>
|
||||
<td><label for="text_font">{#style_dlg.text_font}</label></td>
|
||||
<td colspan="3">
|
||||
<select id="text_font" name="text_font" class="mceEditableSelect mceFocus"></select>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><label for="text_size">{#style_dlg.text_size}</label></td>
|
||||
<td>
|
||||
<table border="0" cellspacing="0" cellpadding="0">
|
||||
<tr>
|
||||
<td><select id="text_size" name="text_size" class="mceEditableSelect"></select></td>
|
||||
<td> </td>
|
||||
<td><select id="text_size_measurement" name="text_size_measurement"></select></td>
|
||||
</tr>
|
||||
</table>
|
||||
</td>
|
||||
<td><label for="text_weight">{#style_dlg.text_weight}</label></td>
|
||||
<td>
|
||||
<select id="text_weight" name="text_weight"></select>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><label for="text_style">{#style_dlg.text_style}</label></td>
|
||||
<td>
|
||||
<select id="text_style" name="text_style" class="mceEditableSelect"></select>
|
||||
</td>
|
||||
<td><label for="text_variant">{#style_dlg.text_variant}</label></td>
|
||||
<td>
|
||||
<select id="text_variant" name="text_variant"></select>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><label for="text_lineheight">{#style_dlg.text_lineheight}</label></td>
|
||||
<td>
|
||||
<table border="0" cellspacing="0" cellpadding="0">
|
||||
<tr>
|
||||
<td>
|
||||
<select id="text_lineheight" name="text_lineheight" class="mceEditableSelect"></select>
|
||||
</td>
|
||||
<td> </td>
|
||||
<td><select id="text_lineheight_measurement" name="text_lineheight_measurement"></select></td>
|
||||
</tr>
|
||||
</table>
|
||||
</td>
|
||||
<td><label for="text_case">{#style_dlg.text_case}</label></td>
|
||||
<td>
|
||||
<select id="text_case" name="text_case"></select>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><label for="text_color">{#style_dlg.text_color}</label></td>
|
||||
<td colspan="2">
|
||||
<table border="0" cellpadding="0" cellspacing="0">
|
||||
<tr>
|
||||
<td><input id="text_color" name="text_color" type="text" value="" size="9" onChange="updateColor('text_color_pick','text_color');" /></td>
|
||||
<td id="text_color_pickcontainer"> </td>
|
||||
</tr>
|
||||
</table>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td valign="top" style="vertical-align: top; padding-top: 3px;">{#style_dlg.text_decoration}</td>
|
||||
<td colspan="2">
|
||||
<table border="0" cellspacing="0" cellpadding="0">
|
||||
<tr>
|
||||
<td><input id="text_underline" name="text_underline" class="checkbox" type="checkbox" /></td>
|
||||
<td><label for="text_underline">{#style_dlg.text_underline}</label></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><input id="text_overline" name="text_overline" class="checkbox" type="checkbox" /></td>
|
||||
<td><label for="text_overline">{#style_dlg.text_overline}</label></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><input id="text_linethrough" name="text_linethrough" class="checkbox" type="checkbox" /></td>
|
||||
<td><label for="text_linethrough">{#style_dlg.text_striketrough}</label></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><input id="text_blink" name="text_blink" class="checkbox" type="checkbox" /></td>
|
||||
<td><label for="text_blink">{#style_dlg.text_blink}</label></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><input id="text_none" name="text_none" class="checkbox" type="checkbox" /></td>
|
||||
<td><label for="text_none">{#style_dlg.text_none}</label></td>
|
||||
</tr>
|
||||
</table>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
<fieldset>
|
||||
<legend>{#style_dlg.text}</legend>
|
||||
<table role="presentation" border="0" width="100%">
|
||||
<tr>
|
||||
<td><label for="text_font">{#style_dlg.text_font}</label></td>
|
||||
<td colspan="3">
|
||||
<select id="text_font" name="text_font" class="mceEditableSelect mceFocus"></select>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><label for="text_size">{#style_dlg.text_size}</label></td>
|
||||
<td>
|
||||
<table role="presentation" border="0" cellspacing="0" cellpadding="0">
|
||||
<tr>
|
||||
<td><select id="text_size" name="text_size" class="mceEditableSelect"></select></td>
|
||||
<td> </td>
|
||||
<td>
|
||||
<label id="text_size_measurement_label" for="text_size_measurement" style="display: none; visibility: hidden;">Text Size Measurement Unit</label>
|
||||
<select id="text_size_measurement" name="text_size_measurement" aria-labelledby="text_size_measurement_label"></select>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
</td>
|
||||
<td><label for="text_weight">{#style_dlg.text_weight}</label></td>
|
||||
<td>
|
||||
<select id="text_weight" name="text_weight"></select>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><label for="text_style">{#style_dlg.text_style}</label></td>
|
||||
<td>
|
||||
<select id="text_style" name="text_style" class="mceEditableSelect"></select>
|
||||
</td>
|
||||
<td><label for="text_variant">{#style_dlg.text_variant}</label></td>
|
||||
<td>
|
||||
<select id="text_variant" name="text_variant"></select>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><label for="text_lineheight">{#style_dlg.text_lineheight}</label></td>
|
||||
<td>
|
||||
<table role="presentation" border="0" cellspacing="0" cellpadding="0">
|
||||
<tr>
|
||||
<td>
|
||||
<select id="text_lineheight" name="text_lineheight" class="mceEditableSelect"></select>
|
||||
</td>
|
||||
<td> </td>
|
||||
<td>
|
||||
<label id="text_lineheight_measurement_label" for="text_lineheight_measurement" style="display: none; visibility: hidden;">Line Height Measurement Unit</label>
|
||||
<select id="text_lineheight_measurement" name="text_lineheight_measurement" aria-labelledby="text_lineheight_measurement_label"></select>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
</td>
|
||||
<td><label for="text_case">{#style_dlg.text_case}</label></td>
|
||||
<td>
|
||||
<select id="text_case" name="text_case"></select>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><label for="text_color">{#style_dlg.text_color}</label></td>
|
||||
<td colspan="2">
|
||||
<table role="presentation" border="0" cellpadding="0" cellspacing="0">
|
||||
<tr>
|
||||
<td><input id="text_color" name="text_color" type="text" value="" size="9" onChange="updateColor('text_color_pick','text_color');" /></td>
|
||||
<td id="text_color_pickcontainer"> </td>
|
||||
</tr>
|
||||
</table>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td valign="top" style="vertical-align: top; padding-top: 3px;">{#style_dlg.text_decoration}</td>
|
||||
<td colspan="2">
|
||||
<table role="presentation" border="0" cellspacing="0" cellpadding="0">
|
||||
<tr>
|
||||
<td><input id="text_underline" name="text_underline" class="checkbox" type="checkbox" /></td>
|
||||
<td><label for="text_underline">{#style_dlg.text_underline}</label></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><input id="text_overline" name="text_overline" class="checkbox" type="checkbox" /></td>
|
||||
<td><label for="text_overline">{#style_dlg.text_overline}</label></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><input id="text_linethrough" name="text_linethrough" class="checkbox" type="checkbox" /></td>
|
||||
<td><label for="text_linethrough">{#style_dlg.text_striketrough}</label></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><input id="text_blink" name="text_blink" class="checkbox" type="checkbox" /></td>
|
||||
<td><label for="text_blink">{#style_dlg.text_blink}</label></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><input id="text_none" name="text_none" class="checkbox" type="checkbox" onclick="updateTextDecorations();"/></td>
|
||||
<td><label for="text_none">{#style_dlg.text_none}</label></td>
|
||||
</tr>
|
||||
</table>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
</fieldset>
|
||||
</div>
|
||||
|
||||
<div id="background_panel" class="panel">
|
||||
<table border="0">
|
||||
<tr>
|
||||
<td><label for="background_color">{#style_dlg.background_color}</label></td>
|
||||
<td>
|
||||
<table border="0" cellpadding="0" cellspacing="0">
|
||||
<fieldset>
|
||||
<legend>{#style_dlg.background}</legend>
|
||||
<table role="presentation" border="0">
|
||||
<tr>
|
||||
<td><label for="background_color">{#style_dlg.background_color}</label></td>
|
||||
<td>
|
||||
<table role="presentation" border="0" cellpadding="0" cellspacing="0">
|
||||
<tr>
|
||||
<td><input id="background_color" name="background_color" type="text" value="" size="9" onChange="updateColor('background_color_pick','background_color');" /></td>
|
||||
<td id="background_color_pickcontainer"> </td>
|
||||
</tr>
|
||||
</table>
|
||||
</td>
|
||||
</tr>
|
||||
|
||||
<tr>
|
||||
<td><label for="background_image">{#style_dlg.background_image}</label></td>
|
||||
<td><table role="presentation" border="0" cellspacing="0" cellpadding="0">
|
||||
<tr>
|
||||
<td><input id="background_color" name="background_color" type="text" value="" size="9" onChange="updateColor('background_color_pick','background_color');" /></td>
|
||||
<td id="background_color_pickcontainer"> </td>
|
||||
<td><input id="background_image" name="background_image" type="text" /></td>
|
||||
<td id="background_image_browser"> </td>
|
||||
</tr>
|
||||
</table>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
</td>
|
||||
</tr>
|
||||
|
||||
<tr>
|
||||
<td><label for="background_image">{#style_dlg.background_image}</label></td>
|
||||
<td><table border="0" cellspacing="0" cellpadding="0">
|
||||
<tr>
|
||||
<td><input id="background_image" name="background_image" type="text" /></td>
|
||||
<td id="background_image_browser"> </td>
|
||||
</tr>
|
||||
</table>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><label for="background_repeat">{#style_dlg.background_repeat}</label></td>
|
||||
<td><select id="background_repeat" name="background_repeat" class="mceEditableSelect"></select></td>
|
||||
</tr>
|
||||
|
||||
<tr>
|
||||
<td><label for="background_repeat">{#style_dlg.background_repeat}</label></td>
|
||||
<td><select id="background_repeat" name="background_repeat" class="mceEditableSelect"></select></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><label for="background_attachment">{#style_dlg.background_attachment}</label></td>
|
||||
<td><select id="background_attachment" name="background_attachment" class="mceEditableSelect"></select></td>
|
||||
</tr>
|
||||
|
||||
<tr>
|
||||
<td><label for="background_attachment">{#style_dlg.background_attachment}</label></td>
|
||||
<td><select id="background_attachment" name="background_attachment" class="mceEditableSelect"></select></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><label for="background_hpos">{#style_dlg.background_hpos}</label></td>
|
||||
<td>
|
||||
<table role="presentation" border="0" cellspacing="0" cellpadding="0">
|
||||
<tr>
|
||||
<td><select id="background_hpos" name="background_hpos" class="mceEditableSelect"></select></td>
|
||||
<td> </td>
|
||||
<td>
|
||||
<label id="background_hpos_measurement_label" for="background_hpos_measurement" style="display: none; visibility: hidden;">Horizontal position measurement unit</label>
|
||||
<select id="background_hpos_measurement" name="background_hpos_measurement" aria-labelledby="background_hpos_measurement_label"></select>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
</td>
|
||||
</tr>
|
||||
|
||||
<tr>
|
||||
<td><label for="background_hpos">{#style_dlg.background_hpos}</label></td>
|
||||
<td>
|
||||
<table border="0" cellspacing="0" cellpadding="0">
|
||||
<tr>
|
||||
<td><select id="background_hpos" name="background_hpos" class="mceEditableSelect"></select></td>
|
||||
<td> </td>
|
||||
<td><select id="background_hpos_measurement" name="background_hpos_measurement"></select></td>
|
||||
</tr>
|
||||
</table>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><label for="background_vpos">{#style_dlg.background_vpos}</label></td>
|
||||
<td>
|
||||
<table role="presentation" border="0" cellspacing="0" cellpadding="0">
|
||||
<tr>
|
||||
<td><select id="background_vpos" name="background_vpos" class="mceEditableSelect"></select></td>
|
||||
<td> </td>
|
||||
<td>
|
||||
|
||||
<tr>
|
||||
<td><label for="background_vpos">{#style_dlg.background_vpos}</label></td>
|
||||
<td>
|
||||
<table border="0" cellspacing="0" cellpadding="0">
|
||||
<tr>
|
||||
<td><select id="background_vpos" name="background_vpos" class="mceEditableSelect"></select></td>
|
||||
<td> </td>
|
||||
<td><select id="background_vpos_measurement" name="background_vpos_measurement"></select></td>
|
||||
</tr>
|
||||
</table>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
<label id="background_vpos_measurement_label" for="background_vpos_measurement" style="display: none; visibility: hidden;">Vertical position measurement unit</label>
|
||||
<select id="background_vpos_measurement" name="background_vpos_measurement" aria-labelledby="background_vpos_measurement_label">></select></td>
|
||||
</tr>
|
||||
</table>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
</fieldset>
|
||||
</div>
|
||||
|
||||
<div id="block_panel" class="panel">
|
||||
<table border="0">
|
||||
<tr>
|
||||
<td><label for="block_wordspacing">{#style_dlg.block_wordspacing}</label></td>
|
||||
<td>
|
||||
<table border="0" cellspacing="0" cellpadding="0">
|
||||
<tr>
|
||||
<td><select id="block_wordspacing" name="block_wordspacing" class="mceEditableSelect"></select></td>
|
||||
<td> </td>
|
||||
<td><select id="block_wordspacing_measurement" name="block_wordspacing_measurement"></select></td>
|
||||
</tr>
|
||||
</table>
|
||||
</td>
|
||||
</tr>
|
||||
<fieldset>
|
||||
<legend>{#style_dlg.block}</legend>
|
||||
<table role="presentation" border="0">
|
||||
<tr>
|
||||
<td><label for="block_wordspacing">{#style_dlg.block_wordspacing}</label></td>
|
||||
<td>
|
||||
<table role="presentation" border="0" cellspacing="0" cellpadding="0">
|
||||
<tr>
|
||||
<td><select id="block_wordspacing" name="block_wordspacing" class="mceEditableSelect"></select></td>
|
||||
<td> </td>
|
||||
<td>
|
||||
<label id="block_wordspacing_measurement_label" for="block_wordspacing_measurement" style="display: none; visibility: hidden;">Word spacing measurement unit</label>
|
||||
<select id="block_wordspacing_measurement" name="block_wordspacing_measurement" aria-labelledby="block_wordspacing_measurement_label"></select>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
</td>
|
||||
</tr>
|
||||
|
||||
<tr>
|
||||
<td><label for="block_letterspacing">{#style_dlg.block_letterspacing}</label></td>
|
||||
<td>
|
||||
<table border="0" cellspacing="0" cellpadding="0">
|
||||
<tr>
|
||||
<td><select id="block_letterspacing" name="block_letterspacing" class="mceEditableSelect"></select></td>
|
||||
<td> </td>
|
||||
<td><select id="block_letterspacing_measurement" name="block_letterspacing_measurement"></select></td>
|
||||
</tr>
|
||||
</table>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><label for="block_letterspacing">{#style_dlg.block_letterspacing}</label></td>
|
||||
<td>
|
||||
<table role="presentation" border="0" cellspacing="0" cellpadding="0">
|
||||
<tr>
|
||||
<td><select id="block_letterspacing" name="block_letterspacing" class="mceEditableSelect"></select></td>
|
||||
<td> </td>
|
||||
<td>
|
||||
<label id="block_letterspacing_measurement_label" for="block_letterspacing_measurement" style="display: none; visibility: hidden;">Letter spacing measurement unit</label>
|
||||
<select id="block_letterspacing_measurement" name="block_letterspacing_measurement" aria-labelledby="block_letterspacing_measurement_label"></select>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
</td>
|
||||
</tr>
|
||||
|
||||
<tr>
|
||||
<td><label for="block_vertical_alignment">{#style_dlg.block_vertical_alignment}</label></td>
|
||||
<td><select id="block_vertical_alignment" name="block_vertical_alignment" class="mceEditableSelect"></select></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><label for="block_vertical_alignment">{#style_dlg.block_vertical_alignment}</label></td>
|
||||
<td><select id="block_vertical_alignment" name="block_vertical_alignment" class="mceEditableSelect"></select></td>
|
||||
</tr>
|
||||
|
||||
<tr>
|
||||
<td><label for="block_text_align">{#style_dlg.block_text_align}</label></td>
|
||||
<td><select id="block_text_align" name="block_text_align" class="mceEditableSelect"></select></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><label for="block_text_align">{#style_dlg.block_text_align}</label></td>
|
||||
<td><select id="block_text_align" name="block_text_align" class="mceEditableSelect"></select></td>
|
||||
</tr>
|
||||
|
||||
<tr>
|
||||
<td><label for="block_text_indent">{#style_dlg.block_text_indent}</label></td>
|
||||
<td>
|
||||
<table border="0" cellspacing="0" cellpadding="0">
|
||||
<tr>
|
||||
<td><input type="text" id="block_text_indent" name="block_text_indent" /></td>
|
||||
<td> </td>
|
||||
<td><select id="block_text_indent_measurement" name="block_text_indent_measurement"></select></td>
|
||||
</tr>
|
||||
</table>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><label for="block_text_indent">{#style_dlg.block_text_indent}</label></td>
|
||||
<td>
|
||||
<table role="presentation" border="0" cellspacing="0" cellpadding="0">
|
||||
<tr>
|
||||
<td><input type="text" id="block_text_indent" name="block_text_indent" /></td>
|
||||
<td> </td>
|
||||
<td>
|
||||
<label id="block_text_indent_measurement_label" for="block_text_indent_measurement" style="display: none; visibility: hidden;">Text Indent Measurement Unit</label>
|
||||
|
||||
<tr>
|
||||
<td><label for="block_whitespace">{#style_dlg.block_whitespace}</label></td>
|
||||
<td><select id="block_whitespace" name="block_whitespace" class="mceEditableSelect"></select></td>
|
||||
</tr>
|
||||
<select id="block_text_indent_measurement" name="block_text_indent_measurement" aria-labelledby="block_text_indent_measurement_label"></select>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
</td>
|
||||
</tr>
|
||||
|
||||
<tr>
|
||||
<td><label for="block_display">{#style_dlg.block_display}</label></td>
|
||||
<td><select id="block_display" name="block_display" class="mceEditableSelect"></select></td>
|
||||
</tr>
|
||||
</table>
|
||||
<tr>
|
||||
<td><label for="block_whitespace">{#style_dlg.block_whitespace}</label></td>
|
||||
<td><select id="block_whitespace" name="block_whitespace" class="mceEditableSelect"></select></td>
|
||||
</tr>
|
||||
|
||||
<tr>
|
||||
<td><label for="block_display">{#style_dlg.block_display}</label></td>
|
||||
<td><select id="block_display" name="block_display" class="mceEditableSelect"></select></td>
|
||||
</tr>
|
||||
</table>
|
||||
</fieldset>
|
||||
</div>
|
||||
|
||||
<div id="box_panel" class="panel">
|
||||
<table border="0">
|
||||
<tr>
|
||||
<td><label for="box_width">{#style_dlg.box_width}</label></td>
|
||||
<td>
|
||||
<table border="0" cellspacing="0" cellpadding="0">
|
||||
<tr>
|
||||
<td><input type="text" id="box_width" name="box_width" class="mceEditableSelect" onChange="synch('box_width','positioning_width');" /></td>
|
||||
<td> </td>
|
||||
<td><select id="box_width_measurement" name="box_width_measurement"></select></td>
|
||||
</tr>
|
||||
</table>
|
||||
</td>
|
||||
<td> <label for="box_float">{#style_dlg.box_float}</label></td>
|
||||
<td><select id="box_float" name="box_float" class="mceEditableSelect"></select></td>
|
||||
</tr>
|
||||
<fieldset>
|
||||
<legend>{#style_dlg.box}</legend>
|
||||
<table role="presentation" border="0">
|
||||
<tr>
|
||||
<td><label for="box_width">{#style_dlg.box_width}</label></td>
|
||||
<td>
|
||||
<table role="presentation" border="0" cellspacing="0" cellpadding="0">
|
||||
<tr>
|
||||
<td><input type="text" id="box_width" name="box_width" class="mceEditableSelect" onChange="synch('box_width','positioning_width');" /></td>
|
||||
<td> </td>
|
||||
<td>
|
||||
<label id="box_width_measurement_label" for="box_width_measurement" style="display: none; visibility: hidden;">Box Width Measurement Unit</label>
|
||||
<select id="box_width_measurement" name="box_width_measurement" aria-labelledby="box_width_measurement_label"></select>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
</td>
|
||||
<td> <label for="box_float">{#style_dlg.box_float}</label></td>
|
||||
<td><select id="box_float" name="box_float" class="mceEditableSelect"></select></td>
|
||||
</tr>
|
||||
|
||||
<tr>
|
||||
<td><label for="box_height">{#style_dlg.box_height}</label></td>
|
||||
<td>
|
||||
<table role="presentation" border="0" cellspacing="0" cellpadding="0">
|
||||
<tr>
|
||||
<td><input type="text" id="box_height" name="box_height" class="mceEditableSelect" onChange="synch('box_height','positioning_height');" /></td>
|
||||
<td> </td>
|
||||
<td>
|
||||
<label id="box_height_measurement_label" for="box_height_measurement" style="display: none; visibility: hidden;">Box Height Measurement Unit</label>
|
||||
<select id="box_height_measurement" name="box_height_measurement" aria-labelledby="box_height_measurement_label"></select>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
</td>
|
||||
<td> <label for="box_clear">{#style_dlg.box_clear}</label></td>
|
||||
<td><select id="box_clear" name="box_clear" class="mceEditableSelect"></select></td>
|
||||
</tr>
|
||||
</table>
|
||||
</fieldset>
|
||||
|
||||
<tr>
|
||||
<td><label for="box_height">{#style_dlg.box_height}</label></td>
|
||||
<td>
|
||||
<table border="0" cellspacing="0" cellpadding="0">
|
||||
<tr>
|
||||
<td><input type="text" id="box_height" name="box_height" class="mceEditableSelect" onChange="synch('box_height','positioning_height');" /></td>
|
||||
<td> </td>
|
||||
<td><select id="box_height_measurement" name="box_height_measurement"></select></td>
|
||||
</tr>
|
||||
</table>
|
||||
</td>
|
||||
<td> <label for="box_clear">{#style_dlg.box_clear}</label></td>
|
||||
<td><select id="box_clear" name="box_clear" class="mceEditableSelect"></select></td>
|
||||
</tr>
|
||||
</table>
|
||||
<div style="float: left; width: 49%">
|
||||
<fieldset>
|
||||
<legend>{#style_dlg.padding}</legend>
|
||||
|
||||
<table border="0">
|
||||
<table role="presentation" border="0">
|
||||
<tr>
|
||||
<td> </td>
|
||||
<td><input type="checkbox" id="box_padding_same" name="box_padding_same" class="checkbox" checked="checked" onClick="toggleSame(this,'box_padding');" /> <label for="box_padding_same">{#style_dlg.same}</label></td>
|
||||
|
|
@ -288,11 +330,14 @@
|
|||
<tr>
|
||||
<td><label for="box_padding_top">{#style_dlg.top}</label></td>
|
||||
<td>
|
||||
<table border="0" cellspacing="0" cellpadding="0">
|
||||
<table role="presentation" border="0" cellspacing="0" cellpadding="0">
|
||||
<tr>
|
||||
<td><input type="text" id="box_padding_top" name="box_padding_top" class="mceEditableSelect" /></td>
|
||||
<td> </td>
|
||||
<td><select id="box_padding_top_measurement" name="box_padding_top_measurement"></select></td>
|
||||
<td>
|
||||
<label id="box_padding_top_measurement_label" for="box_padding_top_measurement" style="display: none; visibility: hidden;">Padding Top Measurement Unit</label>
|
||||
<select id="box_padding_top_measurement" name="box_padding_top_measurement" aria-labelledby="box_padding_top_measurement_label"></select>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
</td>
|
||||
|
|
@ -300,11 +345,14 @@
|
|||
<tr>
|
||||
<td><label for="box_padding_right">{#style_dlg.right}</label></td>
|
||||
<td>
|
||||
<table border="0" cellspacing="0" cellpadding="0">
|
||||
<table role="presentation" border="0" cellspacing="0" cellpadding="0">
|
||||
<tr>
|
||||
<td><input type="text" id="box_padding_right" name="box_padding_right" class="mceEditableSelect" disabled="disabled" /></td>
|
||||
<td> </td>
|
||||
<td><select id="box_padding_right_measurement" name="box_padding_right_measurement" disabled="disabled"></select></td>
|
||||
<td>
|
||||
<label id="box_padding_right_measurement_label" for="box_padding_right_measurement" style="display: none; visibility: hidden;">Padding Right Measurement Unit</label>
|
||||
<select id="box_padding_right_measurement" name="box_padding_right_measurement" disabled="disabled" aria-labelledby="box_padding_right_measurement_label"></select>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
</td>
|
||||
|
|
@ -312,11 +360,14 @@
|
|||
<tr>
|
||||
<td><label for="box_padding_bottom">{#style_dlg.bottom}</label></td>
|
||||
<td>
|
||||
<table border="0" cellspacing="0" cellpadding="0">
|
||||
<table role="presentation" border="0" cellspacing="0" cellpadding="0">
|
||||
<tr>
|
||||
<td><input type="text" id="box_padding_bottom" name="box_padding_bottom" class="mceEditableSelect" disabled="disabled" /></td>
|
||||
<td> </td>
|
||||
<td><select id="box_padding_bottom_measurement" name="box_padding_bottom_measurement" disabled="disabled"></select></td>
|
||||
<td>
|
||||
<label id="box_padding_bottom_measurement_label" for="box_padding_bottom_measurement" style="display: none; visibility: hidden;">Padding Bottom Measurement Unit</label>
|
||||
<select id="box_padding_bottom_measurement" name="box_padding_bottom_measurement" disabled="disabled" aria-labelledby="box_padding_bottom_measurement_label"></select>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
</td>
|
||||
|
|
@ -324,11 +375,14 @@
|
|||
<tr>
|
||||
<td><label for="box_padding_left">{#style_dlg.left}</label></td>
|
||||
<td>
|
||||
<table border="0" cellspacing="0" cellpadding="0">
|
||||
<table role="presentation" border="0" cellspacing="0" cellpadding="0">
|
||||
<tr>
|
||||
<td><input type="text" id="box_padding_left" name="box_padding_left" class="mceEditableSelect" disabled="disabled" /></td>
|
||||
<td> </td>
|
||||
<td><select id="box_padding_left_measurement" name="box_padding_left_measurement" disabled="disabled"></select></td>
|
||||
<td>
|
||||
<label id="box_padding_left_measurement_label" for="box_padding_left_measurement" style="display: none; visibility: hidden;">Padding Left Measurement Unit</label>
|
||||
<select id="box_padding_left_measurement" name="box_padding_left_measurement" disabled="disabled" aria-labelledby="box_padding_left_measurement_label"></select>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
</td>
|
||||
|
|
@ -341,7 +395,7 @@
|
|||
<fieldset>
|
||||
<legend>{#style_dlg.margin}</legend>
|
||||
|
||||
<table border="0">
|
||||
<table role="presentation" border="0">
|
||||
<tr>
|
||||
<td> </td>
|
||||
<td><input type="checkbox" id="box_margin_same" name="box_margin_same" class="checkbox" checked="checked" onClick="toggleSame(this,'box_margin');" /> <label for="box_margin_same">{#style_dlg.same}</label></td>
|
||||
|
|
@ -349,11 +403,14 @@
|
|||
<tr>
|
||||
<td><label for="box_margin_top">{#style_dlg.top}</label></td>
|
||||
<td>
|
||||
<table border="0" cellspacing="0" cellpadding="0">
|
||||
<table role="presentation" border="0" cellspacing="0" cellpadding="0">
|
||||
<tr>
|
||||
<td><input type="text" id="box_margin_top" name="box_margin_top" class="mceEditableSelect" /></td>
|
||||
<td> </td>
|
||||
<td><select id="box_margin_top_measurement" name="box_margin_top_measurement"></select></td>
|
||||
<td>
|
||||
<label id="box_margin_top_measurement_label" for="box_margin_top_measurement" style="display: none; visibility: hidden;">Margin Top Measurement Unit</label>
|
||||
<select id="box_margin_top_measurement" name="box_margin_top_measurement" aria-labelledby="box_margin_top_measurement_label"></select>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
</td>
|
||||
|
|
@ -361,11 +418,14 @@
|
|||
<tr>
|
||||
<td><label for="box_margin_right">{#style_dlg.right}</label></td>
|
||||
<td>
|
||||
<table border="0" cellspacing="0" cellpadding="0">
|
||||
<table role="presentation" border="0" cellspacing="0" cellpadding="0">
|
||||
<tr>
|
||||
<td><input type="text" id="box_margin_right" name="box_margin_right" class="mceEditableSelect" disabled="disabled" /></td>
|
||||
<td> </td>
|
||||
<td><select id="box_margin_right_measurement" name="box_margin_right_measurement" disabled="disabled"></select></td>
|
||||
<td>
|
||||
<label id="box_margin_right_measurement_label" for="box_margin_right_measurement" style="display: none; visibility: hidden;">Margin Right Measurement Unit</label>
|
||||
<select id="box_margin_right_measurement" name="box_margin_right_measurement" disabled="disabled" aria-labelledby="box_margin_right_measurement_label"></select>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
</td>
|
||||
|
|
@ -373,11 +433,14 @@
|
|||
<tr>
|
||||
<td><label for="box_margin_bottom">{#style_dlg.bottom}</label></td>
|
||||
<td>
|
||||
<table border="0" cellspacing="0" cellpadding="0">
|
||||
<table role="presentation" border="0" cellspacing="0" cellpadding="0">
|
||||
<tr>
|
||||
<td><input type="text" id="box_margin_bottom" name="box_margin_bottom" class="mceEditableSelect" disabled="disabled" /></td>
|
||||
<td> </td>
|
||||
<td><select id="box_margin_bottom_measurement" name="box_margin_bottom_measurement" disabled="disabled"></select></td>
|
||||
<td>
|
||||
<label id="box_margin_bottom_measurement_label" for="box_margin_bottom_measurement" style="display: none; visibility: hidden;">Margin Bottom Measurement Unit</label>
|
||||
<select id="box_margin_bottom_measurement" name="box_margin_bottom_measurement" disabled="disabled" aria-labelledby="box_margin_bottom_measurement_label"></select>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
</td>
|
||||
|
|
@ -385,11 +448,14 @@
|
|||
<tr>
|
||||
<td><label for="box_margin_left">{#style_dlg.left}</label></td>
|
||||
<td>
|
||||
<table border="0" cellspacing="0" cellpadding="0">
|
||||
<table role="presentation" border="0" cellspacing="0" cellpadding="0">
|
||||
<tr>
|
||||
<td><input type="text" id="box_margin_left" name="box_margin_left" class="mceEditableSelect" disabled="disabled" /></td>
|
||||
<td> </td>
|
||||
<td><select id="box_margin_left_measurement" name="box_margin_left_measurement" disabled="disabled"></select></td>
|
||||
<td>
|
||||
<label id="box_margin_left_measurement_label" for="box_margin_left_measurement" style="display: none; visibility: hidden;">Margin Left Measurement Unit</label>
|
||||
<select id="box_margin_left_measurement" name="box_margin_left_measurement" disabled="disabled" aria-labelledby="box_margin_left_measurement_label"></select>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
</td>
|
||||
|
|
@ -401,131 +467,148 @@
|
|||
</div>
|
||||
|
||||
<div id="border_panel" class="panel">
|
||||
<table border="0" cellspacing="0" cellpadding="0" width="100%">
|
||||
<tr>
|
||||
<td class="tdelim"> </td>
|
||||
<td class="tdelim delim"> </td>
|
||||
<td class="tdelim">{#style_dlg.style}</td>
|
||||
<td class="tdelim delim"> </td>
|
||||
<td class="tdelim">{#style_dlg.width}</td>
|
||||
<td class="tdelim delim"> </td>
|
||||
<td class="tdelim">{#style_dlg.color}</td>
|
||||
</tr>
|
||||
<fieldset>
|
||||
<legend>{#style_dlg.border}</legend>
|
||||
<table role="presentation" border="0" cellspacing="0" cellpadding="0" width="100%">
|
||||
<tr>
|
||||
<td class="tdelim"> </td>
|
||||
<td class="tdelim delim"> </td>
|
||||
<td class="tdelim">{#style_dlg.style}</td>
|
||||
<td class="tdelim delim"> </td>
|
||||
<td class="tdelim">{#style_dlg.width}</td>
|
||||
<td class="tdelim delim"> </td>
|
||||
<td class="tdelim">{#style_dlg.color}</td>
|
||||
</tr>
|
||||
|
||||
<tr>
|
||||
<td> </td>
|
||||
<td class="delim"> </td>
|
||||
<td><input type="checkbox" id="border_style_same" name="border_style_same" class="checkbox" checked="checked" onClick="toggleSame(this,'border_style');" /> <label for="border_style_same">{#style_dlg.same}</label></td>
|
||||
<td class="delim"> </td>
|
||||
<td><input type="checkbox" id="border_width_same" name="border_width_same" class="checkbox" checked="checked" onClick="toggleSame(this,'border_width');" /> <label for="border_width_same">{#style_dlg.same}</label></td>
|
||||
<td class="delim"> </td>
|
||||
<td><input type="checkbox" id="border_color_same" name="border_color_same" class="checkbox" checked="checked" onClick="toggleSame(this,'border_color');" /> <label for="border_color_same">{#style_dlg.same}</label></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td> </td>
|
||||
<td class="delim"> </td>
|
||||
<td><input type="checkbox" id="border_style_same" name="border_style_same" class="checkbox" checked="checked" onClick="toggleSame(this,'border_style');" /> <label for="border_style_same">{#style_dlg.same}</label></td>
|
||||
<td class="delim"> </td>
|
||||
<td><input type="checkbox" id="border_width_same" name="border_width_same" class="checkbox" checked="checked" onClick="toggleSame(this,'border_width');" /> <label for="border_width_same">{#style_dlg.same}</label></td>
|
||||
<td class="delim"> </td>
|
||||
<td><input type="checkbox" id="border_color_same" name="border_color_same" class="checkbox" checked="checked" onClick="toggleSame(this,'border_color');" /> <label for="border_color_same">{#style_dlg.same}</label></td>
|
||||
</tr>
|
||||
|
||||
<tr>
|
||||
<td>{#style_dlg.top}</td>
|
||||
<td class="delim"> </td>
|
||||
<td><select id="border_style_top" name="border_style_top" class="mceEditableSelect"></select></td>
|
||||
<td class="delim"> </td>
|
||||
<td>
|
||||
<table border="0" cellspacing="0" cellpadding="0">
|
||||
<tr>
|
||||
<td><select id="border_width_top" name="border_width_top" class="mceEditableSelect"></select></td>
|
||||
<td> </td>
|
||||
<td><select id="border_width_top_measurement" name="border_width_top_measurement"></select></td>
|
||||
</tr>
|
||||
</table>
|
||||
</td>
|
||||
<td class="delim"> </td>
|
||||
<td>
|
||||
<table border="0" cellpadding="0" cellspacing="0">
|
||||
<tr>
|
||||
<td><input id="border_color_top" name="border_color_top" type="text" value="" size="9" onChange="updateColor('border_color_top_pick','border_color_top');" /></td>
|
||||
<td id="border_color_top_pickcontainer"> </td>
|
||||
</tr>
|
||||
</table>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>{#style_dlg.top}</td>
|
||||
<td class="delim"> </td>
|
||||
<td><select id="border_style_top" name="border_style_top" class="mceEditableSelect"></select></td>
|
||||
<td class="delim"> </td>
|
||||
<td>
|
||||
<table role="presentation" border="0" cellspacing="0" cellpadding="0">
|
||||
<tr>
|
||||
<td><select id="border_width_top" name="border_width_top" class="mceEditableSelect"></select></td>
|
||||
<td> </td>
|
||||
<td>
|
||||
<label id="border_width_top_measurement_label" for="border_width_top_measurement" style="display: none; visibility: hidden;">Width top Measurement Unit</label>
|
||||
<select id="border_width_top_measurement" name="border_width_top_measurement" aria-labelledby="border_width_top_measurement_label"></select>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
</td>
|
||||
<td class="delim"> </td>
|
||||
<td>
|
||||
<table role="presentation" border="0" cellpadding="0" cellspacing="0">
|
||||
<tr>
|
||||
<td><input id="border_color_top" name="border_color_top" type="text" value="" size="9" onChange="updateColor('border_color_top_pick','border_color_top');" /></td>
|
||||
<td id="border_color_top_pickcontainer"> </td>
|
||||
</tr>
|
||||
</table>
|
||||
</td>
|
||||
</tr>
|
||||
|
||||
<tr>
|
||||
<td>{#style_dlg.right}</td>
|
||||
<td class="delim"> </td>
|
||||
<td><select id="border_style_right" name="border_style_right" class="mceEditableSelect" disabled="disabled"></select></td>
|
||||
<td class="delim"> </td>
|
||||
<td>
|
||||
<table border="0" cellspacing="0" cellpadding="0">
|
||||
<tr>
|
||||
<td><select id="border_width_right" name="border_width_right" class="mceEditableSelect" disabled="disabled"></select></td>
|
||||
<td> </td>
|
||||
<td><select id="border_width_right_measurement" name="border_width_right_measurement" disabled="disabled"></select></td>
|
||||
</tr>
|
||||
</table>
|
||||
</td>
|
||||
<td class="delim"> </td>
|
||||
<td>
|
||||
<table border="0" cellpadding="0" cellspacing="0">
|
||||
<tr>
|
||||
<td><input id="border_color_right" name="border_color_right" type="text" value="" size="9" onChange="updateColor('border_color_right_pick','border_color_right');" disabled="disabled" /></td>
|
||||
<td id="border_color_right_pickcontainer"> </td>
|
||||
</tr>
|
||||
</table>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>{#style_dlg.right}</td>
|
||||
<td class="delim"> </td>
|
||||
<td><select id="border_style_right" name="border_style_right" class="mceEditableSelect" disabled="disabled"></select></td>
|
||||
<td class="delim"> </td>
|
||||
<td>
|
||||
<table role="presentation" border="0" cellspacing="0" cellpadding="0">
|
||||
<tr>
|
||||
<td><select id="border_width_right" name="border_width_right" class="mceEditableSelect" disabled="disabled"></select></td>
|
||||
<td> </td>
|
||||
<td>
|
||||
<label id="border_width_right_measurement_label" for="border_width_right_measurement" style="display: none; visibility: hidden;">Width Right Measurement Unit</label>
|
||||
<select id="border_width_right_measurement" name="border_width_right_measurement" disabled="disabled" aria-labelledby="border_width_right_measurement_label"></select>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
</td>
|
||||
<td class="delim"> </td>
|
||||
<td>
|
||||
<table role="presentation" border="0" cellpadding="0" cellspacing="0">
|
||||
<tr>
|
||||
<td><input id="border_color_right" name="border_color_right" type="text" value="" size="9" onChange="updateColor('border_color_right_pick','border_color_right');" disabled="disabled" /></td>
|
||||
<td id="border_color_right_pickcontainer"> </td>
|
||||
</tr>
|
||||
</table>
|
||||
</td>
|
||||
</tr>
|
||||
|
||||
<tr>
|
||||
<td>{#style_dlg.bottom}</td>
|
||||
<td class="delim"> </td>
|
||||
<td><select id="border_style_bottom" name="border_style_bottom" class="mceEditableSelect" disabled="disabled"></select></td>
|
||||
<td class="delim"> </td>
|
||||
<td>
|
||||
<table border="0" cellspacing="0" cellpadding="0">
|
||||
<tr>
|
||||
<td><select id="border_width_bottom" name="border_width_bottom" class="mceEditableSelect" disabled="disabled"></select></td>
|
||||
<td> </td>
|
||||
<td><select id="border_width_bottom_measurement" name="border_width_bottom_measurement" disabled="disabled"></select></td>
|
||||
</tr>
|
||||
</table>
|
||||
</td>
|
||||
<td class="delim"> </td>
|
||||
<td>
|
||||
<table border="0" cellpadding="0" cellspacing="0">
|
||||
<tr>
|
||||
<td><input id="border_color_bottom" name="border_color_bottom" type="text" value="" size="9" onChange="updateColor('border_color_bottom_pick','border_color_bottom');" disabled="disabled" /></td>
|
||||
<td id="border_color_bottom_pickcontainer"> </td>
|
||||
</tr>
|
||||
</table>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>{#style_dlg.bottom}</td>
|
||||
<td class="delim"> </td>
|
||||
<td><select id="border_style_bottom" name="border_style_bottom" class="mceEditableSelect" disabled="disabled"></select></td>
|
||||
<td class="delim"> </td>
|
||||
<td>
|
||||
<table role="presentation" border="0" cellspacing="0" cellpadding="0">
|
||||
<tr>
|
||||
<td><select id="border_width_bottom" name="border_width_bottom" class="mceEditableSelect" disabled="disabled"></select></td>
|
||||
<td> </td>
|
||||
<td>
|
||||
<label id="border_width_bottom_measurement_label" for="border_width_bottom_measurement" style="display: none; visibility: hidden;">Width Bottom Measurement Unit</label>
|
||||
<select id="border_width_bottom_measurement" name="border_width_bottom_measurement" disabled="disabled" aria-labelledby="border_width_bottom_measurement_label"></select>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
</td>
|
||||
<td class="delim"> </td>
|
||||
<td>
|
||||
<table role="presentation" border="0" cellpadding="0" cellspacing="0">
|
||||
<tr>
|
||||
<td><input id="border_color_bottom" name="border_color_bottom" type="text" value="" size="9" onChange="updateColor('border_color_bottom_pick','border_color_bottom');" disabled="disabled" /></td>
|
||||
<td id="border_color_bottom_pickcontainer"> </td>
|
||||
</tr>
|
||||
</table>
|
||||
</td>
|
||||
</tr>
|
||||
|
||||
<tr>
|
||||
<td>{#style_dlg.left}</td>
|
||||
<td class="delim"> </td>
|
||||
<td><select id="border_style_left" name="border_style_left" class="mceEditableSelect" disabled="disabled"></select></td>
|
||||
<td class="delim"> </td>
|
||||
<td>
|
||||
<table border="0" cellspacing="0" cellpadding="0">
|
||||
<tr>
|
||||
<td><select id="border_width_left" name="border_width_left" class="mceEditableSelect" disabled="disabled"></select></td>
|
||||
<td> </td>
|
||||
<td><select id="border_width_left_measurement" name="border_width_left_measurement" disabled="disabled"></select></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>{#style_dlg.left}</td>
|
||||
<td class="delim"> </td>
|
||||
<td><select id="border_style_left" name="border_style_left" class="mceEditableSelect" disabled="disabled"></select></td>
|
||||
<td class="delim"> </td>
|
||||
<td>
|
||||
<table role="presentation" border="0" cellspacing="0" cellpadding="0">
|
||||
<tr>
|
||||
<td><select id="border_width_left" name="border_width_left" class="mceEditableSelect" disabled="disabled"></select></td>
|
||||
<td> </td>
|
||||
<td>
|
||||
<label id="border_width_left_measurement_label" for="border_width_left_measurement" style="display: none; visibility: hidden;">Width Left Measurement Unit</label>
|
||||
<select id="border_width_left_measurement" name="border_width_left_measurement" disabled="disabled" aria-labelledby="border_width_left_measurement_label"></select>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
</td>
|
||||
<td class="delim"> </td>
|
||||
<td>
|
||||
<table role="presentation" border="0" cellpadding="0" cellspacing="0">
|
||||
<tr>
|
||||
<td><input id="border_color_left" name="border_color_left" type="text" value="" size="9" onChange="updateColor('border_color_left_pick','border_color_left');" disabled="disabled" /></td>
|
||||
<td id="border_color_left_pickcontainer"> </td>
|
||||
</tr>
|
||||
</table>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
</td>
|
||||
<td class="delim"> </td>
|
||||
<td>
|
||||
<table border="0" cellpadding="0" cellspacing="0">
|
||||
<tr>
|
||||
<td><input id="border_color_left" name="border_color_left" type="text" value="" size="9" onChange="updateColor('border_color_left_pick','border_color_left');" disabled="disabled" /></td>
|
||||
<td id="border_color_left_pickcontainer"> </td>
|
||||
</tr>
|
||||
</table>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
</fieldset>
|
||||
</div>
|
||||
|
||||
<div id="list_panel" class="panel">
|
||||
<table border="0">
|
||||
<fieldset>
|
||||
<legend>{#style_dlg.list}</legend>
|
||||
<table role="presentation" border="0">
|
||||
<tr>
|
||||
<td><label for="list_type">{#style_dlg.list_type}</label></td>
|
||||
<td><select id="list_type" name="list_type" class="mceEditableSelect"></select></td>
|
||||
|
|
@ -541,10 +624,13 @@
|
|||
<td><select id="list_position" name="list_position" class="mceEditableSelect"></select></td>
|
||||
</tr>
|
||||
</table>
|
||||
</fieldset>
|
||||
</div>
|
||||
|
||||
<div id="positioning_panel" class="panel">
|
||||
<table border="0">
|
||||
<fieldset>
|
||||
<legend>{#style_dlg.position}</legend>
|
||||
<table role="presentation" border="0">
|
||||
<tr>
|
||||
<td><label for="positioning_type">{#style_dlg.positioning_type}</label></td>
|
||||
<td><select id="positioning_type" name="positioning_type" class="mceEditableSelect"></select></td>
|
||||
|
|
@ -555,11 +641,14 @@
|
|||
<tr>
|
||||
<td><label for="positioning_width">{#style_dlg.width}</label></td>
|
||||
<td>
|
||||
<table border="0" cellspacing="0" cellpadding="0">
|
||||
<table role="presentation" border="0" cellspacing="0" cellpadding="0">
|
||||
<tr>
|
||||
<td><input type="text" id="positioning_width" name="positioning_width" onChange="synch('positioning_width','box_width');" /></td>
|
||||
<td> </td>
|
||||
<td><select id="positioning_width_measurement" name="positioning_width_measurement"></select></td>
|
||||
<td>
|
||||
<label id="positioning_width_measurement_label" for="positioning_width_measurement" style="display: none; visibility: hidden;">Positioning width Measurement Unit</label>
|
||||
<select id="positioning_width_measurement" name="positioning_width_measurement" aria-labelledby="positioning_width_measurement_label"></select>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
</td>
|
||||
|
|
@ -570,11 +659,14 @@
|
|||
<tr>
|
||||
<td><label for="positioning_height">{#style_dlg.height}</label></td>
|
||||
<td>
|
||||
<table border="0" cellspacing="0" cellpadding="0">
|
||||
<table role="presentation" border="0" cellspacing="0" cellpadding="0">
|
||||
<tr>
|
||||
<td><input type="text" id="positioning_height" name="positioning_height" onChange="synch('positioning_height','box_height');" /></td>
|
||||
<td> </td>
|
||||
<td><select id="positioning_height_measurement" name="positioning_height_measurement"></select></td>
|
||||
<td>
|
||||
<label id="positioning_height_measurement_label" for="positioning_height_measurement" style="display: none; visibility: hidden;">Positioning Height Measurement Unit</label>
|
||||
<select id="positioning_height_measurement" name="positioning_height_measurement" aria-labelledby="positioning_height_measurement_label"></select>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
</td>
|
||||
|
|
@ -582,12 +674,13 @@
|
|||
<td><select id="positioning_overflow" name="positioning_overflow" class="mceEditableSelect"></select></td>
|
||||
</tr>
|
||||
</table>
|
||||
</fieldset>
|
||||
|
||||
<div style="float: left; width: 49%">
|
||||
<fieldset>
|
||||
<legend>{#style_dlg.placement}</legend>
|
||||
|
||||
<table border="0">
|
||||
<table role="presentation" border="0">
|
||||
<tr>
|
||||
<td> </td>
|
||||
<td><input type="checkbox" id="positioning_placement_same" name="positioning_placement_same" class="checkbox" checked="checked" onClick="toggleSame(this,'positioning_placement');" /> <label for="positioning_placement_same">{#style_dlg.same}</label></td>
|
||||
|
|
@ -595,11 +688,14 @@
|
|||
<tr>
|
||||
<td>{#style_dlg.top}</td>
|
||||
<td>
|
||||
<table border="0" cellspacing="0" cellpadding="0">
|
||||
<table role="presentation" border="0" cellspacing="0" cellpadding="0">
|
||||
<tr>
|
||||
<td><input type="text" id="positioning_placement_top" name="positioning_placement_top" /></td>
|
||||
<td> </td>
|
||||
<td><select id="positioning_placement_top_measurement" name="positioning_placement_top_measurement"></select></td>
|
||||
<td>
|
||||
<label id="positioning_placement_top_measurement_label" for="positioning_placement_top_measurement" style="display: none; visibility: hidden;">Placement Top Measurement Unit</label>
|
||||
<select id="positioning_placement_top_measurement" name="positioning_placement_top_measurement" aria-labelledby="positioning_placement_top_measurement_label"></select>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
</td>
|
||||
|
|
@ -607,11 +703,14 @@
|
|||
<tr>
|
||||
<td>{#style_dlg.right}</td>
|
||||
<td>
|
||||
<table border="0" cellspacing="0" cellpadding="0">
|
||||
<table role="presentation" border="0" cellspacing="0" cellpadding="0">
|
||||
<tr>
|
||||
<td><input type="text" id="positioning_placement_right" name="positioning_placement_right" disabled="disabled" /></td>
|
||||
<td> </td>
|
||||
<td><select id="positioning_placement_right_measurement" name="positioning_placement_right_measurement" disabled="disabled"></select></td>
|
||||
<td>
|
||||
<label id="positioning_placement_right_measurement_label" for="positioning_placement_right_measurement" style="display: none; visibility: hidden;">Placement Right Measurement Unit</label>
|
||||
<select id="positioning_placement_right_measurement" name="positioning_placement_right_measurement" disabled="disabled" aria-labelledby="positioning_placement_right_measurement_label"></select>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
</td>
|
||||
|
|
@ -619,11 +718,14 @@
|
|||
<tr>
|
||||
<td>{#style_dlg.bottom}</td>
|
||||
<td>
|
||||
<table border="0" cellspacing="0" cellpadding="0">
|
||||
<table role="presentation" border="0" cellspacing="0" cellpadding="0">
|
||||
<tr>
|
||||
<td><input type="text" id="positioning_placement_bottom" name="positioning_placement_bottom" disabled="disabled" /></td>
|
||||
<td> </td>
|
||||
<td><select id="positioning_placement_bottom_measurement" name="positioning_placement_bottom_measurement" disabled="disabled"></select></td>
|
||||
<td>
|
||||
<label id="positioning_placement_bottom_measurement_label" for="positioning_placement_bottom_measurement" style="display: none; visibility: hidden;">Placement Bottom Measurement Unit</label>
|
||||
<select id="positioning_placement_bottom_measurement" name="positioning_placement_bottom_measurement" disabled="disabled" aria-labelledby="positioning_placement_bottom_measurement_label"></select>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
</td>
|
||||
|
|
@ -631,11 +733,14 @@
|
|||
<tr>
|
||||
<td>{#style_dlg.left}</td>
|
||||
<td>
|
||||
<table border="0" cellspacing="0" cellpadding="0">
|
||||
<table role="presentation" border="0" cellspacing="0" cellpadding="0">
|
||||
<tr>
|
||||
<td><input type="text" id="positioning_placement_left" name="positioning_placement_left" disabled="disabled" /></td>
|
||||
<td> </td>
|
||||
<td><select id="positioning_placement_left_measurement" name="positioning_placement_left_measurement" disabled="disabled"></select></td>
|
||||
<td>
|
||||
<label id="positioning_placement_left_measurement_label" for="positioning_placement_left_measurement" style="display: none; visibility: hidden;">Placement Left Measurement Unit</label>
|
||||
<select id="positioning_placement_left_measurement" name="positioning_placement_left_measurement" disabled="disabled" aria-labelledby="positioning_placement_left_measurement_label"></select>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
</td>
|
||||
|
|
@ -648,7 +753,7 @@
|
|||
<fieldset>
|
||||
<legend>{#style_dlg.clip}</legend>
|
||||
|
||||
<table border="0">
|
||||
<table role="presentation" border="0">
|
||||
<tr>
|
||||
<td> </td>
|
||||
<td><input type="checkbox" id="positioning_clip_same" name="positioning_clip_same" class="checkbox" checked="checked" onClick="toggleSame(this,'positioning_clip');" /> <label for="positioning_clip_same">{#style_dlg.same}</label></td>
|
||||
|
|
@ -656,11 +761,14 @@
|
|||
<tr>
|
||||
<td>{#style_dlg.top}</td>
|
||||
<td>
|
||||
<table border="0" cellspacing="0" cellpadding="0">
|
||||
<table role="presentation" border="0" cellspacing="0" cellpadding="0">
|
||||
<tr>
|
||||
<td><input type="text" id="positioning_clip_top" name="positioning_clip_top" /></td>
|
||||
<td> </td>
|
||||
<td><select id="positioning_clip_top_measurement" name="positioning_clip_top_measurement"></select></td>
|
||||
<td>
|
||||
<label id="positioning_clip_top_measurement_label" for="positioning_clip_top_measurement" style="display: none; visibility: hidden;">Clip Top Measurement Unit</label>
|
||||
<select id="positioning_clip_top_measurement" name="positioning_clip_top_measurement" aria-labelledby="positioning_clip_top_measurement_label"></select>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
</td>
|
||||
|
|
@ -668,11 +776,14 @@
|
|||
<tr>
|
||||
<td>{#style_dlg.right}</td>
|
||||
<td>
|
||||
<table border="0" cellspacing="0" cellpadding="0">
|
||||
<table role="presentation" border="0" cellspacing="0" cellpadding="0">
|
||||
<tr>
|
||||
<td><input type="text" id="positioning_clip_right" name="positioning_clip_right" disabled="disabled" /></td>
|
||||
<td> </td>
|
||||
<td><select id="positioning_clip_right_measurement" name="positioning_clip_right_measurement" disabled="disabled"></select></td>
|
||||
<td>
|
||||
<label id="positioning_clip_right_measurement_label" for="positioning_clip_right_measurement" style="display: none; visibility: hidden;">Clip Right Measurement Unit</label>
|
||||
<select id="positioning_clip_right_measurement" name="positioning_clip_right_measurement" disabled="disabled" aria-labelledby="positioning_clip_right_measurement_label"></select>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
</td>
|
||||
|
|
@ -680,11 +791,14 @@
|
|||
<tr>
|
||||
<td>{#style_dlg.bottom}</td>
|
||||
<td>
|
||||
<table border="0" cellspacing="0" cellpadding="0">
|
||||
<table role="presentation" border="0" cellspacing="0" cellpadding="0">
|
||||
<tr>
|
||||
<td><input type="text" id="positioning_clip_bottom" name="positioning_clip_bottom" disabled="disabled" /></td>
|
||||
<td> </td>
|
||||
<td><select id="positioning_clip_bottom_measurement" name="positioning_clip_bottom_measurement" disabled="disabled"></select></td>
|
||||
<td>
|
||||
<label id="positioning_clip_bottom_measurement_label" for="positioning_clip_bottom_measurement" style="display: none; visibility: hidden;">Clip Bottom Measurement Unit</label>
|
||||
<select id="positioning_clip_bottom_measurement" name="positioning_clip_bottom_measurement" disabled="disabled" aria-labelledby="positioning_clip_bottom_measurement_label"></select>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
</td>
|
||||
|
|
@ -692,11 +806,14 @@
|
|||
<tr>
|
||||
<td>{#style_dlg.left}</td>
|
||||
<td>
|
||||
<table border="0" cellspacing="0" cellpadding="0">
|
||||
<table role="presentation" border="0" cellspacing="0" cellpadding="0">
|
||||
<tr>
|
||||
<td><input type="text" id="positioning_clip_left" name="positioning_clip_left" disabled="disabled" /></td>
|
||||
<td> </td>
|
||||
<td><select id="positioning_clip_left_measurement" name="positioning_clip_left_measurement" disabled="disabled"></select></td>
|
||||
<td>
|
||||
<label id="positioning_clip_left_measurement_label" for="positioning_clip_left_measurement" style="display: none; visibility: hidden;">Clip Left Measurement Unit</label>
|
||||
<select id="positioning_clip_left_measurement" name="positioning_clip_left_measurement" disabled="disabled" aria-labelledby="positioning_clip_left_measurement_label"></select>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
</td>
|
||||
|
|
@ -708,6 +825,11 @@
|
|||
</div>
|
||||
</div>
|
||||
|
||||
<div class="panel_toggle_insert_span">
|
||||
<input type="checkbox" class="checkbox" id="toggle_insert_span" name="toggle_insert_span" onClick="toggleApplyAction();" />
|
||||
<label for="toggle_insert_span">{#style_dlg.toggle_insert_span}</label>
|
||||
</div>
|
||||
|
||||
<div class="mceActionPanel">
|
||||
<input type="submit" id="insert" name="insert" value="{#update}" />
|
||||
<input type="button" class="button" id="apply" name="apply" value="{#style_dlg.apply}" onClick="applyAction();" />
|
||||
|
|
|
|||
19
library/tinymce/jscripts/tiny_mce/plugins/style/readme.txt
vendored
Normal file
|
|
@ -0,0 +1,19 @@
|
|||
Edit CSS Style plug-in notes
|
||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
Unlike WYSIWYG editor functionality that operates only on the selected text,
|
||||
typically by inserting new HTML elements with the specified styles.
|
||||
This plug-in operates on the HTML blocks surrounding the selected text.
|
||||
No new HTML elements are created.
|
||||
|
||||
This plug-in only operates on the surrounding blocks and not the nearest
|
||||
parent node. This means that if a block encapsulates a node,
|
||||
e.g <p><span>text</span></p>, then only the styles in the block are
|
||||
recognized, not those in the span.
|
||||
|
||||
When selecting text that includes multiple blocks at the same level (peers),
|
||||
this plug-in accumulates the specified styles in all of the surrounding blocks
|
||||
and populates the dialogue checkboxes accordingly. There is no differentiation
|
||||
between styles set in all the blocks versus styles set in some of the blocks.
|
||||
|
||||
When the [Update] or [Apply] buttons are pressed, the styles selected in the
|
||||
checkboxes are applied to all blocks that surround the selected text.
|
||||
2
library/tinymce/jscripts/tiny_mce/plugins/tabfocus/editor_plugin.js
vendored
Executable file → Normal file
|
|
@ -1 +1 @@
|
|||
(function(){var c=tinymce.DOM,a=tinymce.dom.Event,d=tinymce.each,b=tinymce.explode;tinymce.create("tinymce.plugins.TabFocusPlugin",{init:function(f,g){function e(i,j){if(j.keyCode===9){return a.cancel(j)}}function h(l,p){var j,m,o,n,k;function q(i){o=c.getParent(l.id,"form");n=o.elements;if(o){d(n,function(s,r){if(s.id==l.id){j=r;return false}});if(i>0){for(m=j+1;m<n.length;m++){if(n[m].type!="hidden"){return n[m]}}}else{for(m=j-1;m>=0;m--){if(n[m].type!="hidden"){return n[m]}}}}return null}if(p.keyCode===9){k=b(l.getParam("tab_focus",l.getParam("tabfocus_elements",":prev,:next")));if(k.length==1){k[1]=k[0];k[0]=":prev"}if(p.shiftKey){if(k[0]==":prev"){n=q(-1)}else{n=c.get(k[0])}}else{if(k[1]==":next"){n=q(1)}else{n=c.get(k[1])}}if(n){if(l=tinymce.get(n.id||n.name)){l.focus()}else{window.setTimeout(function(){window.focus();n.focus()},10)}return a.cancel(p)}}}f.onKeyUp.add(e);if(tinymce.isGecko){f.onKeyPress.add(h);f.onKeyDown.add(e)}else{f.onKeyDown.add(h)}f.onInit.add(function(){d(c.select("a:first,a:last",f.getContainer()),function(i){a.add(i,"focus",function(){f.focus()})})})},getInfo:function(){return{longname:"Tabfocus",author:"Moxiecode Systems AB",authorurl:"http://tinymce.moxiecode.com",infourl:"http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/tabfocus",version:tinymce.majorVersion+"."+tinymce.minorVersion}}});tinymce.PluginManager.add("tabfocus",tinymce.plugins.TabFocusPlugin)})();
|
||||
(function(){var c=tinymce.DOM,a=tinymce.dom.Event,d=tinymce.each,b=tinymce.explode;tinymce.create("tinymce.plugins.TabFocusPlugin",{init:function(f,g){function e(i,j){if(j.keyCode===9){return a.cancel(j)}}function h(l,p){var j,m,o,n,k;function q(t){n=c.select(":input:enabled,*[tabindex]");function s(v){return v.nodeName==="BODY"||(v.type!="hidden"&&!(v.style.display=="none")&&!(v.style.visibility=="hidden")&&s(v.parentNode))}function i(v){return v.attributes.tabIndex.specified||v.nodeName=="INPUT"||v.nodeName=="TEXTAREA"}function u(){return tinymce.isIE6||tinymce.isIE7}function r(v){return((!u()||i(v)))&&v.getAttribute("tabindex")!="-1"&&s(v)}d(n,function(w,v){if(w.id==l.id){j=v;return false}});if(t>0){for(m=j+1;m<n.length;m++){if(r(n[m])){return n[m]}}}else{for(m=j-1;m>=0;m--){if(r(n[m])){return n[m]}}}return null}if(p.keyCode===9){k=b(l.getParam("tab_focus",l.getParam("tabfocus_elements",":prev,:next")));if(k.length==1){k[1]=k[0];k[0]=":prev"}if(p.shiftKey){if(k[0]==":prev"){n=q(-1)}else{n=c.get(k[0])}}else{if(k[1]==":next"){n=q(1)}else{n=c.get(k[1])}}if(n){if(n.id&&(l=tinymce.get(n.id||n.name))){l.focus()}else{window.setTimeout(function(){if(!tinymce.isWebKit){window.focus()}n.focus()},10)}return a.cancel(p)}}}f.onKeyUp.add(e);if(tinymce.isGecko){f.onKeyPress.add(h);f.onKeyDown.add(e)}else{f.onKeyDown.add(h)}},getInfo:function(){return{longname:"Tabfocus",author:"Moxiecode Systems AB",authorurl:"http://tinymce.moxiecode.com",infourl:"http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/tabfocus",version:tinymce.majorVersion+"."+tinymce.minorVersion}}});tinymce.PluginManager.add("tabfocus",tinymce.plugins.TabFocusPlugin)})();
|
||||
68
library/tinymce/jscripts/tiny_mce/plugins/tabfocus/editor_plugin_src.js
vendored
Executable file → Normal file
|
|
@ -16,38 +16,49 @@
|
|||
function tabCancel(ed, e) {
|
||||
if (e.keyCode === 9)
|
||||
return Event.cancel(e);
|
||||
};
|
||||
}
|
||||
|
||||
function tabHandler(ed, e) {
|
||||
var x, i, f, el, v;
|
||||
|
||||
function find(d) {
|
||||
f = DOM.getParent(ed.id, 'form');
|
||||
el = f.elements;
|
||||
el = DOM.select(':input:enabled,*[tabindex]');
|
||||
|
||||
if (f) {
|
||||
each(el, function(e, i) {
|
||||
if (e.id == ed.id) {
|
||||
x = i;
|
||||
return false;
|
||||
}
|
||||
});
|
||||
function canSelectRecursive(e) {
|
||||
return e.nodeName==="BODY" || (e.type != 'hidden' &&
|
||||
!(e.style.display == "none") &&
|
||||
!(e.style.visibility == "hidden") && canSelectRecursive(e.parentNode));
|
||||
}
|
||||
function canSelectInOldIe(el) {
|
||||
return el.attributes["tabIndex"].specified || el.nodeName == "INPUT" || el.nodeName == "TEXTAREA";
|
||||
}
|
||||
function isOldIe() {
|
||||
return tinymce.isIE6 || tinymce.isIE7;
|
||||
}
|
||||
function canSelect(el) {
|
||||
return ((!isOldIe() || canSelectInOldIe(el))) && el.getAttribute("tabindex") != '-1' && canSelectRecursive(el);
|
||||
}
|
||||
|
||||
if (d > 0) {
|
||||
for (i = x + 1; i < el.length; i++) {
|
||||
if (el[i].type != 'hidden')
|
||||
return el[i];
|
||||
}
|
||||
} else {
|
||||
for (i = x - 1; i >= 0; i--) {
|
||||
if (el[i].type != 'hidden')
|
||||
return el[i];
|
||||
}
|
||||
each(el, function(e, i) {
|
||||
if (e.id == ed.id) {
|
||||
x = i;
|
||||
return false;
|
||||
}
|
||||
});
|
||||
if (d > 0) {
|
||||
for (i = x + 1; i < el.length; i++) {
|
||||
if (canSelect(el[i]))
|
||||
return el[i];
|
||||
}
|
||||
} else {
|
||||
for (i = x - 1; i >= 0; i--) {
|
||||
if (canSelect(el[i]))
|
||||
return el[i];
|
||||
}
|
||||
}
|
||||
|
||||
return null;
|
||||
};
|
||||
}
|
||||
|
||||
if (e.keyCode === 9) {
|
||||
v = explode(ed.getParam('tab_focus', ed.getParam('tabfocus_elements', ':prev,:next')));
|
||||
|
|
@ -71,15 +82,19 @@
|
|||
}
|
||||
|
||||
if (el) {
|
||||
if (ed = tinymce.get(el.id || el.name))
|
||||
if (el.id && (ed = tinymce.get(el.id || el.name)))
|
||||
ed.focus();
|
||||
else
|
||||
window.setTimeout(function() {window.focus();el.focus();}, 10);
|
||||
window.setTimeout(function() {
|
||||
if (!tinymce.isWebKit)
|
||||
window.focus();
|
||||
el.focus();
|
||||
}, 10);
|
||||
|
||||
return Event.cancel(e);
|
||||
}
|
||||
}
|
||||
};
|
||||
}
|
||||
|
||||
ed.onKeyUp.add(tabCancel);
|
||||
|
||||
|
|
@ -89,11 +104,6 @@
|
|||
} else
|
||||
ed.onKeyDown.add(tabHandler);
|
||||
|
||||
ed.onInit.add(function() {
|
||||
each(DOM.select('a:first,a:last', ed.getContainer()), function(n) {
|
||||
Event.add(n, 'focus', function() {ed.focus();});
|
||||
});
|
||||
});
|
||||
},
|
||||
|
||||
getInfo : function() {
|
||||
|
|
|
|||
30
library/tinymce/jscripts/tiny_mce/plugins/table/cell.htm
vendored
Executable file → Normal file
|
|
@ -5,16 +5,17 @@
|
|||
<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/cell.js"></script>
|
||||
<link href="css/cell.css" rel="stylesheet" type="text/css" />
|
||||
</head>
|
||||
<body id="tablecell" style="display: none">
|
||||
<body id="tablecell" style="display: none" role="application">
|
||||
<form onsubmit="updateAction();return false;" action="#">
|
||||
<div class="tabs">
|
||||
<ul>
|
||||
<li id="general_tab" class="current"><span><a href="javascript:mcTabs.displayTab('general_tab','general_panel');" onmousedown="return false;">{#table_dlg.general_tab}</a></span></li>
|
||||
<li id="advanced_tab"><span><a href="javascript:mcTabs.displayTab('advanced_tab','advanced_panel');" onmousedown="return false;">{#table_dlg.advanced_tab}</a></span></li>
|
||||
<li id="general_tab" class="current" aria-controls="general_panel"><span><a href="javascript:mcTabs.displayTab('general_tab','general_panel');" onmousedown="return false;">{#table_dlg.general_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;">{#table_dlg.advanced_tab}</a></span></li>
|
||||
</ul>
|
||||
</div>
|
||||
|
||||
|
|
@ -23,7 +24,7 @@
|
|||
<fieldset>
|
||||
<legend>{#table_dlg.general_props}</legend>
|
||||
|
||||
<table border="0" cellpadding="4" cellspacing="0">
|
||||
<table role="presentation" border="0" cellpadding="4" cellspacing="0">
|
||||
<tr>
|
||||
<td><label for="align">{#table_dlg.align}</label></td>
|
||||
<td>
|
||||
|
|
@ -70,10 +71,10 @@
|
|||
|
||||
<tr>
|
||||
<td><label for="width">{#table_dlg.width}</label></td>
|
||||
<td><input id="width" name="width" type="text" value="" size="4" maxlength="4" onchange="changedSize();" /></td>
|
||||
<td><input id="width" name="width" type="text" value="" size="7" maxlength="7" onchange="changedSize();" class="size" /></td>
|
||||
|
||||
<td><label for="height">{#table_dlg.height}</label></td>
|
||||
<td><input id="height" name="height" type="text" value="" size="4" maxlength="4" onchange="changedSize();" /></td>
|
||||
<td><input id="height" name="height" type="text" value="" size="7" maxlength="7" onchange="changedSize();" class="size" /></td>
|
||||
</tr>
|
||||
|
||||
<tr id="styleSelectRow">
|
||||
|
|
@ -92,7 +93,7 @@
|
|||
<fieldset>
|
||||
<legend>{#table_dlg.advanced_props}</legend>
|
||||
|
||||
<table border="0" cellpadding="0" cellspacing="4">
|
||||
<table role="presentation" border="0" cellpadding="0" cellspacing="4">
|
||||
<tr>
|
||||
<td class="column1"><label for="id">{#table_dlg.id}</label></td>
|
||||
<td><input id="id" name="id" type="text" value="" style="width: 200px" /></td>
|
||||
|
|
@ -124,7 +125,7 @@
|
|||
<tr>
|
||||
<td class="column1"><label for="backgroundimage">{#table_dlg.bgimage}</label></td>
|
||||
<td>
|
||||
<table border="0" cellpadding="0" cellspacing="0">
|
||||
<table role="presentation" border="0" cellpadding="0" cellspacing="0">
|
||||
<tr>
|
||||
<td><input id="backgroundimage" name="backgroundimage" type="text" value="" style="width: 200px" onchange="changedBackgroundImage();" /></td>
|
||||
<td id="backgroundimagebrowsercontainer"> </td>
|
||||
|
|
@ -133,10 +134,10 @@
|
|||
</td>
|
||||
</tr>
|
||||
|
||||
<tr>
|
||||
<td class="column1"><label for="bordercolor">{#table_dlg.bordercolor}</label></td>
|
||||
<tr role="group" aria-labelledby="bordercolor_label">
|
||||
<td class="column1"><label id="bordercolor_label" for="bordercolor">{#table_dlg.bordercolor}</label></td>
|
||||
<td>
|
||||
<table border="0" cellpadding="0" cellspacing="0">
|
||||
<table role="presentation" border="0" cellpadding="0" cellspacing="0">
|
||||
<tr>
|
||||
<td><input id="bordercolor" name="bordercolor" type="text" value="" size="9" onchange="updateColor('bordercolor_pick','bordercolor');changedColor();" /></td>
|
||||
<td id="bordercolor_pickcontainer"> </td>
|
||||
|
|
@ -145,10 +146,10 @@
|
|||
</td>
|
||||
</tr>
|
||||
|
||||
<tr>
|
||||
<td class="column1"><label for="bgcolor">{#table_dlg.bgcolor}</label></td>
|
||||
<tr role="group" aria-labelledby="bgcolor_label">
|
||||
<td class="column1"><label id="bgcolor_label" for="bgcolor">{#table_dlg.bgcolor}</label></td>
|
||||
<td>
|
||||
<table border="0" cellpadding="0" cellspacing="0">
|
||||
<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');changedColor();" /></td>
|
||||
<td id="bgcolor_pickcontainer"> </td>
|
||||
|
|
@ -166,6 +167,7 @@
|
|||
<select id="action" name="action">
|
||||
<option value="cell">{#table_dlg.cell_cell}</option>
|
||||
<option value="row">{#table_dlg.cell_row}</option>
|
||||
<option value="col">{#table_dlg.cell_col}</option>
|
||||
<option value="all">{#table_dlg.cell_all}</option>
|
||||
</select>
|
||||
</div>
|
||||
|
|
|
|||
0
library/tinymce/jscripts/tiny_mce/plugins/table/css/cell.css
vendored
Executable file → Normal file
0
library/tinymce/jscripts/tiny_mce/plugins/table/css/row.css
vendored
Executable file → Normal file
0
library/tinymce/jscripts/tiny_mce/plugins/table/css/table.css
vendored
Executable file → Normal file
2
library/tinymce/jscripts/tiny_mce/plugins/table/editor_plugin.js
vendored
Executable file → Normal file
387
library/tinymce/jscripts/tiny_mce/plugins/table/editor_plugin_src.js
vendored
Executable file → Normal file
|
|
@ -11,6 +11,24 @@
|
|||
(function(tinymce) {
|
||||
var each = tinymce.each;
|
||||
|
||||
// Checks if the selection/caret is at the start of the specified block element
|
||||
function isAtStart(rng, par) {
|
||||
var doc = par.ownerDocument, rng2 = doc.createRange(), elm;
|
||||
|
||||
rng2.setStartBefore(par);
|
||||
rng2.setEnd(rng.endContainer, rng.endOffset);
|
||||
|
||||
elm = doc.createElement('body');
|
||||
elm.appendChild(rng2.cloneContents());
|
||||
|
||||
// Check for text characters of other elements that should be treated as content
|
||||
return elm.innerHTML.replace(/<(br|img|object|embed|input|textarea)[^>]*>/gi, '-').replace(/<[^>]+>/g, '').length == 0;
|
||||
};
|
||||
|
||||
function getSpanVal(td, name) {
|
||||
return parseInt(td.getAttribute(name) || 1);
|
||||
}
|
||||
|
||||
/**
|
||||
* Table Grid class.
|
||||
*/
|
||||
|
|
@ -38,12 +56,12 @@
|
|||
grid = [];
|
||||
|
||||
each(['thead', 'tbody', 'tfoot'], function(part) {
|
||||
var rows = dom.select(part + ' tr', table);
|
||||
var rows = dom.select('> ' + part + ' tr', table);
|
||||
|
||||
each(rows, function(tr, y) {
|
||||
y += startY;
|
||||
|
||||
each(dom.select('td,th', tr), function(td, x) {
|
||||
each(dom.select('> td, > th', tr), function(td, x) {
|
||||
var x2, y2, rowspan, colspan;
|
||||
|
||||
// Skip over existing cells produced by rowspan
|
||||
|
|
@ -86,12 +104,19 @@
|
|||
return row[x];
|
||||
};
|
||||
|
||||
function getSpanVal(td, name) {
|
||||
return parseInt(td.getAttribute(name) || 1);
|
||||
};
|
||||
function setSpanVal(td, name, val) {
|
||||
if (td) {
|
||||
val = parseInt(val);
|
||||
|
||||
if (val === 1)
|
||||
td.removeAttribute(name, 1);
|
||||
else
|
||||
td.setAttribute(name, val, 1);
|
||||
}
|
||||
}
|
||||
|
||||
function isCellSelected(cell) {
|
||||
return dom.hasClass(cell.elm, 'mceSelected') || cell == selectedCell;
|
||||
return cell && (dom.hasClass(cell.elm, 'mceSelected') || cell == selectedCell);
|
||||
};
|
||||
|
||||
function getSelectedRows() {
|
||||
|
|
@ -141,20 +166,21 @@
|
|||
|
||||
// Add something to the inner node
|
||||
if (curNode)
|
||||
curNode.innerHTML = tinymce.isIE ? ' ' : '<br _mce_bogus="1" />';
|
||||
curNode.innerHTML = tinymce.isIE ? ' ' : '<br data-mce-bogus="1" />';
|
||||
|
||||
return false;
|
||||
}
|
||||
}, 'childNodes');
|
||||
|
||||
cell = cloneNode(cell, false);
|
||||
cell.rowSpan = cell.colSpan = 1;
|
||||
setSpanVal(cell, 'rowSpan', 1);
|
||||
setSpanVal(cell, 'colSpan', 1);
|
||||
|
||||
if (formatNode) {
|
||||
cell.appendChild(formatNode);
|
||||
} else {
|
||||
if (!tinymce.isIE)
|
||||
cell.innerHTML = '<br _mce_bogus="1" />';
|
||||
cell.innerHTML = '<br data-mce-bogus="1" />';
|
||||
}
|
||||
|
||||
return cell;
|
||||
|
|
@ -236,7 +262,8 @@
|
|||
rowSpan = getSpanVal(cell, 'rowspan');
|
||||
|
||||
if (colSpan > 1 || rowSpan > 1) {
|
||||
cell.colSpan = cell.rowSpan = 1;
|
||||
setSpanVal(cell, 'rowSpan', 1);
|
||||
setSpanVal(cell, 'colSpan', 1);
|
||||
|
||||
// Insert cells right
|
||||
for (i = 0; i < colSpan - 1; i++)
|
||||
|
|
@ -250,7 +277,7 @@
|
|||
};
|
||||
|
||||
function merge(cell, cols, rows) {
|
||||
var startX, startY, endX, endY, x, y, startCell, endCell, cell, children;
|
||||
var startX, startY, endX, endY, x, y, startCell, endCell, cell, children, count;
|
||||
|
||||
// Use specified cell and cols/rows
|
||||
if (cell) {
|
||||
|
|
@ -279,23 +306,34 @@
|
|||
|
||||
// Set row/col span to start cell
|
||||
startCell = getCell(startX, startY).elm;
|
||||
startCell.colSpan = (endX - startX) + 1;
|
||||
startCell.rowSpan = (endY - startY) + 1;
|
||||
setSpanVal(startCell, 'colSpan', (endX - startX) + 1);
|
||||
setSpanVal(startCell, 'rowSpan', (endY - startY) + 1);
|
||||
|
||||
// Remove other cells and add it's contents to the start cell
|
||||
for (y = startY; y <= endY; y++) {
|
||||
for (x = startX; x <= endX; x++) {
|
||||
if (!grid[y] || !grid[y][x])
|
||||
continue;
|
||||
|
||||
cell = grid[y][x].elm;
|
||||
|
||||
if (cell != startCell) {
|
||||
// Move children to startCell
|
||||
children = tinymce.grep(cell.childNodes);
|
||||
each(children, function(node, i) {
|
||||
// Jump over last BR element
|
||||
if (node.nodeName != 'BR' || i != children.length - 1)
|
||||
startCell.appendChild(node);
|
||||
each(children, function(node) {
|
||||
startCell.appendChild(node);
|
||||
});
|
||||
|
||||
// Remove bogus nodes if there is children in the target cell
|
||||
if (children.length) {
|
||||
children = tinymce.grep(startCell.childNodes);
|
||||
count = 0;
|
||||
each(children, function(node) {
|
||||
if (node.nodeName == 'BR' && dom.getAttrib(node, 'data-mce-bogus') && count++ < children.length - 1)
|
||||
startCell.removeChild(node);
|
||||
});
|
||||
}
|
||||
|
||||
// Remove cell
|
||||
dom.remove(cell);
|
||||
}
|
||||
|
|
@ -308,7 +346,7 @@
|
|||
};
|
||||
|
||||
function insertRow(before) {
|
||||
var posY, cell, lastCell, x, rowElm, newRow, newCell, otherCell;
|
||||
var posY, cell, lastCell, x, rowElm, newRow, newCell, otherCell, rowSpan;
|
||||
|
||||
// Find first/last row
|
||||
each(grid, function(row, y) {
|
||||
|
|
@ -329,30 +367,35 @@
|
|||
});
|
||||
|
||||
for (x = 0; x < grid[0].length; x++) {
|
||||
// Cell not found could be because of an invalid table structure
|
||||
if (!grid[posY][x])
|
||||
continue;
|
||||
|
||||
cell = grid[posY][x].elm;
|
||||
|
||||
if (cell != lastCell) {
|
||||
if (!before) {
|
||||
rowSpan = getSpanVal(cell, 'rowspan');
|
||||
if (rowSpan > 1) {
|
||||
cell.rowSpan = rowSpan + 1;
|
||||
setSpanVal(cell, 'rowSpan', rowSpan + 1);
|
||||
continue;
|
||||
}
|
||||
} else {
|
||||
// Check if cell above can be expanded
|
||||
if (posY > 0 && grid[posY - 1][x]) {
|
||||
otherCell = grid[posY - 1][x].elm;
|
||||
rowSpan = getSpanVal(otherCell, 'rowspan');
|
||||
rowSpan = getSpanVal(otherCell, 'rowSpan');
|
||||
if (rowSpan > 1) {
|
||||
otherCell.rowSpan = rowSpan + 1;
|
||||
setSpanVal(otherCell, 'rowSpan', rowSpan + 1);
|
||||
continue;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// Insert new cell into new row
|
||||
newCell = cloneCell(cell)
|
||||
newCell.colSpan = cell.colSpan;
|
||||
newCell = cloneCell(cell);
|
||||
setSpanVal(newCell, 'colSpan', cell.colSpan);
|
||||
|
||||
newRow.appendChild(newCell);
|
||||
|
||||
lastCell = cell;
|
||||
|
|
@ -386,8 +429,12 @@
|
|||
});
|
||||
|
||||
each(grid, function(row, y) {
|
||||
var cell = row[posX].elm, rowSpan, colSpan;
|
||||
var cell, rowSpan, colSpan;
|
||||
|
||||
if (!row[posX])
|
||||
return;
|
||||
|
||||
cell = row[posX].elm;
|
||||
if (cell != lastCell) {
|
||||
colSpan = getSpanVal(cell, 'colspan');
|
||||
rowSpan = getSpanVal(cell, 'rowspan');
|
||||
|
|
@ -401,7 +448,7 @@
|
|||
fillLeftDown(posX, y, rowSpan - 1, colSpan);
|
||||
}
|
||||
} else
|
||||
cell.colSpan++;
|
||||
setSpanVal(cell, 'colSpan', cell.colSpan + 1);
|
||||
|
||||
lastCell = cell;
|
||||
}
|
||||
|
|
@ -418,10 +465,10 @@
|
|||
each(grid, function(row) {
|
||||
var cell = row[x].elm, colSpan;
|
||||
|
||||
colSpan = getSpanVal(cell, 'colspan');
|
||||
colSpan = getSpanVal(cell, 'colSpan');
|
||||
|
||||
if (colSpan > 1)
|
||||
cell.colSpan = colSpan - 1;
|
||||
setSpanVal(cell, 'colSpan', colSpan - 1);
|
||||
else
|
||||
dom.remove(cell);
|
||||
});
|
||||
|
|
@ -444,10 +491,10 @@
|
|||
|
||||
// Move down row spanned cells
|
||||
each(tr.cells, function(cell) {
|
||||
var rowSpan = getSpanVal(cell, 'rowspan');
|
||||
var rowSpan = getSpanVal(cell, 'rowSpan');
|
||||
|
||||
if (rowSpan > 1) {
|
||||
cell.rowSpan = rowSpan - 1;
|
||||
setSpanVal(cell, 'rowSpan', rowSpan - 1);
|
||||
pos = getPos(cell);
|
||||
fillLeftDown(pos.x, pos.y, 1, 1);
|
||||
}
|
||||
|
|
@ -461,12 +508,12 @@
|
|||
cell = cell.elm;
|
||||
|
||||
if (cell != lastCell) {
|
||||
rowSpan = getSpanVal(cell, 'rowspan');
|
||||
rowSpan = getSpanVal(cell, 'rowSpan');
|
||||
|
||||
if (rowSpan <= 1)
|
||||
dom.remove(cell);
|
||||
else
|
||||
cell.rowSpan = rowSpan - 1;
|
||||
setSpanVal(cell, 'rowSpan', rowSpan - 1);
|
||||
|
||||
lastCell = cell;
|
||||
}
|
||||
|
|
@ -534,7 +581,8 @@
|
|||
// Remove col/rowspans
|
||||
for (i = 0; i < cellCount; i++) {
|
||||
cell = row.cells[i];
|
||||
cell.colSpan = cell.rowSpan = 1;
|
||||
setSpanVal(cell, 'colSpan', 1);
|
||||
setSpanVal(cell, 'rowSpan', 1);
|
||||
}
|
||||
|
||||
// Needs more cells
|
||||
|
|
@ -676,8 +724,10 @@
|
|||
|
||||
// Add new selection
|
||||
for (y = startY; y <= maxY; y++) {
|
||||
for (x = startX; x <= maxX; x++)
|
||||
dom.addClass(grid[y][x].elm, 'mceSelected');
|
||||
for (x = startX; x <= maxX; x++) {
|
||||
if (grid[y][x])
|
||||
dom.addClass(grid[y][x].elm, 'mceSelected');
|
||||
}
|
||||
}
|
||||
}
|
||||
};
|
||||
|
|
@ -702,7 +752,7 @@
|
|||
|
||||
tinymce.create('tinymce.plugins.TablePlugin', {
|
||||
init : function(ed, url) {
|
||||
var winMan, clipboardRows;
|
||||
var winMan, clipboardRows, hasCellSelection = true; // Might be selected cells on reload
|
||||
|
||||
function createTableGrid(node) {
|
||||
var selection = ed.selection, tblElm = ed.dom.getParent(node || selection.getNode(), 'table');
|
||||
|
|
@ -714,7 +764,11 @@
|
|||
function cleanup() {
|
||||
// Restore selection possibilities
|
||||
ed.getBody().style.webkitUserSelect = '';
|
||||
ed.dom.removeClass(ed.dom.select('td.mceSelected,th.mceSelected'), 'mceSelected');
|
||||
|
||||
if (hasCellSelection) {
|
||||
ed.dom.removeClass(ed.dom.select('td.mceSelected,th.mceSelected'), 'mceSelected');
|
||||
hasCellSelection = false;
|
||||
}
|
||||
};
|
||||
|
||||
// Register buttons
|
||||
|
|
@ -740,11 +794,34 @@
|
|||
ed.onClick.add(function(ed, e) {
|
||||
e = e.target;
|
||||
|
||||
if (e.nodeName === 'TABLE')
|
||||
if (e.nodeName === 'TABLE') {
|
||||
ed.selection.select(e);
|
||||
ed.nodeChanged();
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
ed.onPreProcess.add(function(ed, args) {
|
||||
var nodes, i, node, dom = ed.dom, value;
|
||||
|
||||
nodes = dom.select('table', args.node);
|
||||
i = nodes.length;
|
||||
while (i--) {
|
||||
node = nodes[i];
|
||||
dom.setAttrib(node, 'data-mce-style', '');
|
||||
|
||||
if ((value = dom.getAttrib(node, 'width'))) {
|
||||
dom.setStyle(node, 'width', value);
|
||||
dom.setAttrib(node, 'width', '');
|
||||
}
|
||||
|
||||
if ((value = dom.getAttrib(node, 'height'))) {
|
||||
dom.setStyle(node, 'height', value);
|
||||
dom.setAttrib(node, 'height', '');
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
// Handle node change updates
|
||||
ed.onNodeChange.add(function(ed, cm, n) {
|
||||
var p;
|
||||
|
|
@ -800,15 +877,20 @@
|
|||
}
|
||||
|
||||
tableGrid.setEndCell(target);
|
||||
hasCellSelection = true;
|
||||
}
|
||||
|
||||
// Remove current selection
|
||||
sel = ed.selection.getSel();
|
||||
|
||||
if (sel.removeAllRanges)
|
||||
sel.removeAllRanges();
|
||||
else
|
||||
sel.empty();
|
||||
try {
|
||||
if (sel.removeAllRanges)
|
||||
sel.removeAllRanges();
|
||||
else
|
||||
sel.empty();
|
||||
} catch (ex) {
|
||||
// IE9 might throw errors here
|
||||
}
|
||||
|
||||
e.preventDefault();
|
||||
}
|
||||
|
|
@ -846,7 +928,7 @@
|
|||
return;
|
||||
}
|
||||
} while (node = (start ? walker.next() : walker.prev()));
|
||||
};
|
||||
}
|
||||
|
||||
// Try to expand text selection as much as we can only Gecko supports cell selection
|
||||
selectedCells = dom.select('td.mceSelected,th.mceSelected');
|
||||
|
|
@ -854,6 +936,8 @@
|
|||
rng = dom.createRng();
|
||||
node = selectedCells[0];
|
||||
endNode = selectedCells[selectedCells.length - 1];
|
||||
rng.setStartBefore(node);
|
||||
rng.setEndAfter(node);
|
||||
|
||||
setPoint(node, 1);
|
||||
walker = new tinymce.dom.TreeWalker(node, dom.getParent(selectedCells[0], 'table'));
|
||||
|
|
@ -881,6 +965,60 @@
|
|||
cleanup();
|
||||
});
|
||||
|
||||
ed.onKeyDown.add(function (ed, e) {
|
||||
fixTableCellSelection(ed);
|
||||
});
|
||||
|
||||
ed.onMouseDown.add(function (ed, e) {
|
||||
if (e.button != 2) {
|
||||
fixTableCellSelection(ed);
|
||||
}
|
||||
});
|
||||
function tableCellSelected(ed, rng, n, currentCell) {
|
||||
// The decision of when a table cell is selected is somewhat involved. The fact that this code is
|
||||
// required is actually a pointer to the root cause of this bug. A cell is selected when the start
|
||||
// and end offsets are 0, the start container is a text, and the selection node is either a TR (most cases)
|
||||
// or the parent of the table (in the case of the selection containing the last cell of a table).
|
||||
var TEXT_NODE = 3, table = ed.dom.getParent(rng.startContainer, 'TABLE'),
|
||||
tableParent, allOfCellSelected, tableCellSelection;
|
||||
if (table)
|
||||
tableParent = table.parentNode;
|
||||
allOfCellSelected =rng.startContainer.nodeType == TEXT_NODE &&
|
||||
rng.startOffset == 0 &&
|
||||
rng.endOffset == 0 &&
|
||||
currentCell &&
|
||||
(n.nodeName=="TR" || n==tableParent);
|
||||
tableCellSelection = (n.nodeName=="TD"||n.nodeName=="TH")&& !currentCell;
|
||||
return allOfCellSelected || tableCellSelection;
|
||||
// return false;
|
||||
}
|
||||
|
||||
// this nasty hack is here to work around some WebKit selection bugs.
|
||||
function fixTableCellSelection(ed) {
|
||||
if (!tinymce.isWebKit)
|
||||
return;
|
||||
|
||||
var rng = ed.selection.getRng();
|
||||
var n = ed.selection.getNode();
|
||||
var currentCell = ed.dom.getParent(rng.startContainer, 'TD,TH');
|
||||
|
||||
if (!tableCellSelected(ed, rng, n, currentCell))
|
||||
return;
|
||||
if (!currentCell) {
|
||||
currentCell=n;
|
||||
}
|
||||
|
||||
// Get the very last node inside the table cell
|
||||
var end = currentCell.lastChild;
|
||||
while (end.lastChild)
|
||||
end = end.lastChild;
|
||||
|
||||
// Select the entire table cell. Nothing outside of the table cell should be selected.
|
||||
rng.setEnd(end, end.nodeValue.length);
|
||||
ed.selection.setRng(rng);
|
||||
}
|
||||
ed.plugins.table.fixTableCellSelection=fixTableCellSelection;
|
||||
|
||||
// Add context menu
|
||||
if (ed && ed.plugins.contextmenu) {
|
||||
ed.plugins.contextmenu.onContextMenu.add(function(th, m, e) {
|
||||
|
|
@ -933,6 +1071,152 @@
|
|||
});
|
||||
}
|
||||
|
||||
// Fix to allow navigating up and down in a table in WebKit browsers.
|
||||
if (tinymce.isWebKit) {
|
||||
function moveSelection(ed, e) {
|
||||
var VK = tinymce.VK;
|
||||
var key = e.keyCode;
|
||||
|
||||
function handle(upBool, sourceNode, event) {
|
||||
var siblingDirection = upBool ? 'previousSibling' : 'nextSibling';
|
||||
var currentRow = ed.dom.getParent(sourceNode, 'tr');
|
||||
var siblingRow = currentRow[siblingDirection];
|
||||
|
||||
if (siblingRow) {
|
||||
moveCursorToRow(ed, sourceNode, siblingRow, upBool);
|
||||
tinymce.dom.Event.cancel(event);
|
||||
return true;
|
||||
} else {
|
||||
var tableNode = ed.dom.getParent(currentRow, 'table');
|
||||
var middleNode = currentRow.parentNode;
|
||||
var parentNodeName = middleNode.nodeName.toLowerCase();
|
||||
if (parentNodeName === 'tbody' || parentNodeName === (upBool ? 'tfoot' : 'thead')) {
|
||||
var targetParent = getTargetParent(upBool, tableNode, middleNode, 'tbody');
|
||||
if (targetParent !== null) {
|
||||
return moveToRowInTarget(upBool, targetParent, sourceNode, event);
|
||||
}
|
||||
}
|
||||
return escapeTable(upBool, currentRow, siblingDirection, tableNode, event);
|
||||
}
|
||||
}
|
||||
|
||||
function getTargetParent(upBool, topNode, secondNode, nodeName) {
|
||||
var tbodies = ed.dom.select('>' + nodeName, topNode);
|
||||
var position = tbodies.indexOf(secondNode);
|
||||
if (upBool && position === 0 || !upBool && position === tbodies.length - 1) {
|
||||
return getFirstHeadOrFoot(upBool, topNode);
|
||||
} else if (position === -1) {
|
||||
var topOrBottom = secondNode.tagName.toLowerCase() === 'thead' ? 0 : tbodies.length - 1;
|
||||
return tbodies[topOrBottom];
|
||||
} else {
|
||||
return tbodies[position + (upBool ? -1 : 1)];
|
||||
}
|
||||
}
|
||||
|
||||
function getFirstHeadOrFoot(upBool, parent) {
|
||||
var tagName = upBool ? 'thead' : 'tfoot';
|
||||
var headOrFoot = ed.dom.select('>' + tagName, parent);
|
||||
return headOrFoot.length !== 0 ? headOrFoot[0] : null;
|
||||
}
|
||||
|
||||
function moveToRowInTarget(upBool, targetParent, sourceNode, event) {
|
||||
var targetRow = getChildForDirection(targetParent, upBool);
|
||||
targetRow && moveCursorToRow(ed, sourceNode, targetRow, upBool);
|
||||
tinymce.dom.Event.cancel(event);
|
||||
return true;
|
||||
}
|
||||
|
||||
function escapeTable(upBool, currentRow, siblingDirection, table, event) {
|
||||
var tableSibling = table[siblingDirection];
|
||||
if (tableSibling) {
|
||||
moveCursorToStartOfElement(tableSibling);
|
||||
return true;
|
||||
} else {
|
||||
var parentCell = ed.dom.getParent(table, 'td,th');
|
||||
if (parentCell) {
|
||||
return handle(upBool, parentCell, event);
|
||||
} else {
|
||||
var backUpSibling = getChildForDirection(currentRow, !upBool);
|
||||
moveCursorToStartOfElement(backUpSibling);
|
||||
return tinymce.dom.Event.cancel(event);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
function getChildForDirection(parent, up) {
|
||||
var child = parent && parent[up ? 'lastChild' : 'firstChild'];
|
||||
// BR is not a valid table child to return in this case we return the table cell
|
||||
return child && child.nodeName === 'BR' ? ed.dom.getParent(child, 'td,th') : child;
|
||||
}
|
||||
|
||||
function moveCursorToStartOfElement(n) {
|
||||
ed.selection.setCursorLocation(n, 0);
|
||||
}
|
||||
|
||||
function isVerticalMovement() {
|
||||
return key == VK.UP || key == VK.DOWN;
|
||||
}
|
||||
|
||||
function isInTable(ed) {
|
||||
var node = ed.selection.getNode();
|
||||
var currentRow = ed.dom.getParent(node, 'tr');
|
||||
return currentRow !== null;
|
||||
}
|
||||
|
||||
function columnIndex(column) {
|
||||
var colIndex = 0;
|
||||
var c = column;
|
||||
while (c.previousSibling) {
|
||||
c = c.previousSibling;
|
||||
colIndex = colIndex + getSpanVal(c, "colspan");
|
||||
}
|
||||
return colIndex;
|
||||
}
|
||||
|
||||
function findColumn(rowElement, columnIndex) {
|
||||
var c = 0;
|
||||
var r = 0;
|
||||
each(rowElement.children, function(cell, i) {
|
||||
c = c + getSpanVal(cell, "colspan");
|
||||
r = i;
|
||||
if (c > columnIndex)
|
||||
return false;
|
||||
});
|
||||
return r;
|
||||
}
|
||||
|
||||
function moveCursorToRow(ed, node, row, upBool) {
|
||||
var srcColumnIndex = columnIndex(ed.dom.getParent(node, 'td,th'));
|
||||
var tgtColumnIndex = findColumn(row, srcColumnIndex);
|
||||
var tgtNode = row.childNodes[tgtColumnIndex];
|
||||
var rowCellTarget = getChildForDirection(tgtNode, upBool);
|
||||
moveCursorToStartOfElement(rowCellTarget || tgtNode);
|
||||
}
|
||||
|
||||
function shouldFixCaret(preBrowserNode) {
|
||||
var newNode = ed.selection.getNode();
|
||||
var newParent = ed.dom.getParent(newNode, 'td,th');
|
||||
var oldParent = ed.dom.getParent(preBrowserNode, 'td,th');
|
||||
return newParent && newParent !== oldParent && checkSameParentTable(newParent, oldParent)
|
||||
}
|
||||
|
||||
function checkSameParentTable(nodeOne, NodeTwo) {
|
||||
return ed.dom.getParent(nodeOne, 'TABLE') === ed.dom.getParent(NodeTwo, 'TABLE');
|
||||
}
|
||||
|
||||
if (isVerticalMovement() && isInTable(ed)) {
|
||||
var preBrowserNode = ed.selection.getNode();
|
||||
setTimeout(function() {
|
||||
if (shouldFixCaret(preBrowserNode)) {
|
||||
handle(!e.shiftKey && key === VK.UP, preBrowserNode, e);
|
||||
}
|
||||
}, 0);
|
||||
}
|
||||
}
|
||||
|
||||
ed.onKeyDown.add(moveSelection);
|
||||
}
|
||||
|
||||
// Fixes an issue on Gecko where it's impossible to place the caret behind a table
|
||||
// This fix will force a paragraph element after the table but only when the forced_root_block setting is enabled
|
||||
if (!tinymce.isIE) {
|
||||
|
|
@ -985,7 +1269,26 @@
|
|||
ed.dom.remove(last);
|
||||
});
|
||||
|
||||
|
||||
/**
|
||||
* Fixes bug in Gecko where shift-enter in table cell does not place caret on new line
|
||||
*/
|
||||
if (tinymce.isGecko) {
|
||||
ed.onKeyDown.add(function(ed, e) {
|
||||
if (e.keyCode === tinymce.VK.ENTER && e.shiftKey) {
|
||||
var node = ed.selection.getRng().startContainer;
|
||||
var tableCell = dom.getParent(node, 'td,th');
|
||||
if (tableCell) {
|
||||
var zeroSizedNbsp = ed.getDoc().createTextNode("\uFEFF");
|
||||
dom.insertAfter(zeroSizedNbsp, node);
|
||||
}
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
|
||||
fixTableCaretPos();
|
||||
ed.startContent = ed.getContent({format : 'raw'});
|
||||
}
|
||||
});
|
||||
|
||||
|
|
|
|||
53
library/tinymce/jscripts/tiny_mce/plugins/table/js/cell.js
vendored
Executable file → Normal file
|
|
@ -63,6 +63,11 @@ function init() {
|
|||
function updateAction() {
|
||||
var el, inst = ed, tdElm, trElm, tableElm, formObj = document.forms[0];
|
||||
|
||||
if (!AutoValidator.validate(formObj)) {
|
||||
tinyMCEPopup.alert(AutoValidator.getErrorMessages(formObj).join('. ') + '.');
|
||||
return false;
|
||||
}
|
||||
|
||||
tinyMCEPopup.restoreSelection();
|
||||
el = ed.selection.getStart();
|
||||
tdElm = ed.dom.getParent(el, "td,th");
|
||||
|
|
@ -83,8 +88,6 @@ function updateAction() {
|
|||
return;
|
||||
}
|
||||
|
||||
ed.execCommand('mceBeginUndoLevel');
|
||||
|
||||
switch (getSelectValue(formObj, 'action')) {
|
||||
case "cell":
|
||||
var celltype = getSelectValue(formObj, 'celltype');
|
||||
|
|
@ -125,6 +128,36 @@ function updateAction() {
|
|||
|
||||
break;
|
||||
|
||||
case "col":
|
||||
var curr, col = 0, cell = trElm.firstChild, rows = tableElm.getElementsByTagName("tr");
|
||||
|
||||
if (cell.nodeName != "TD" && cell.nodeName != "TH")
|
||||
cell = nextCell(cell);
|
||||
|
||||
do {
|
||||
if (cell == tdElm)
|
||||
break;
|
||||
col += cell.getAttribute("colspan");
|
||||
} while ((cell = nextCell(cell)) != null);
|
||||
|
||||
for (var i=0; i<rows.length; i++) {
|
||||
cell = rows[i].firstChild;
|
||||
|
||||
if (cell.nodeName != "TD" && cell.nodeName != "TH")
|
||||
cell = nextCell(cell);
|
||||
|
||||
curr = 0;
|
||||
do {
|
||||
if (curr == col) {
|
||||
cell = updateCell(cell, true);
|
||||
break;
|
||||
}
|
||||
curr += cell.getAttribute("colspan");
|
||||
} while ((cell = nextCell(cell)) != null);
|
||||
}
|
||||
|
||||
break;
|
||||
|
||||
case "all":
|
||||
var rows = tableElm.getElementsByTagName("tr");
|
||||
|
||||
|
|
@ -166,15 +199,15 @@ function updateCell(td, skip_id) {
|
|||
var dom = ed.dom;
|
||||
|
||||
if (!skip_id)
|
||||
td.setAttribute('id', formObj.id.value);
|
||||
dom.setAttrib(td, 'id', formObj.id.value);
|
||||
|
||||
td.setAttribute('align', formObj.align.value);
|
||||
td.setAttribute('vAlign', formObj.valign.value);
|
||||
td.setAttribute('lang', formObj.lang.value);
|
||||
td.setAttribute('dir', getSelectValue(formObj, 'dir'));
|
||||
td.setAttribute('style', ed.dom.serializeStyle(ed.dom.parseStyle(formObj.style.value)));
|
||||
td.setAttribute('scope', formObj.scope.value);
|
||||
ed.dom.setAttrib(td, 'class', getSelectValue(formObj, 'class'));
|
||||
dom.setAttrib(td, 'align', formObj.align.value);
|
||||
dom.setAttrib(td, 'vAlign', formObj.valign.value);
|
||||
dom.setAttrib(td, 'lang', formObj.lang.value);
|
||||
dom.setAttrib(td, 'dir', getSelectValue(formObj, 'dir'));
|
||||
dom.setAttrib(td, 'style', ed.dom.serializeStyle(ed.dom.parseStyle(formObj.style.value)));
|
||||
dom.setAttrib(td, 'scope', formObj.scope.value);
|
||||
dom.setAttrib(td, 'class', getSelectValue(formObj, 'class'));
|
||||
|
||||
// Clear deprecated attributes
|
||||
ed.dom.setAttrib(td, 'width', '');
|
||||
|
|
|
|||
0
library/tinymce/jscripts/tiny_mce/plugins/table/js/merge_cells.js
vendored
Executable file → Normal file
36
library/tinymce/jscripts/tiny_mce/plugins/table/js/row.js
vendored
Executable file → Normal file
|
|
@ -56,6 +56,11 @@ function updateAction() {
|
|||
var inst = tinyMCEPopup.editor, dom = inst.dom, trElm, tableElm, formObj = document.forms[0];
|
||||
var action = getSelectValue(formObj, 'action');
|
||||
|
||||
if (!AutoValidator.validate(formObj)) {
|
||||
tinyMCEPopup.alert(AutoValidator.getErrorMessages(formObj).join('. ') + '.');
|
||||
return false;
|
||||
}
|
||||
|
||||
tinyMCEPopup.restoreSelection();
|
||||
trElm = dom.getParent(inst.selection.getStart(), "tr");
|
||||
tableElm = dom.getParent(inst.selection.getStart(), "table");
|
||||
|
|
@ -80,8 +85,6 @@ function updateAction() {
|
|||
return;
|
||||
}
|
||||
|
||||
inst.execCommand('mceBeginUndoLevel');
|
||||
|
||||
switch (action) {
|
||||
case "row":
|
||||
updateRow(trElm);
|
||||
|
|
@ -123,19 +126,19 @@ function updateRow(tr_elm, skip_id, skip_parent) {
|
|||
|
||||
// Update row element
|
||||
if (!skip_id)
|
||||
tr_elm.setAttribute('id', formObj.id.value);
|
||||
dom.setAttrib(tr_elm, 'id', formObj.id.value);
|
||||
|
||||
tr_elm.setAttribute('align', getSelectValue(formObj, 'align'));
|
||||
tr_elm.setAttribute('vAlign', getSelectValue(formObj, 'valign'));
|
||||
tr_elm.setAttribute('lang', formObj.lang.value);
|
||||
tr_elm.setAttribute('dir', getSelectValue(formObj, 'dir'));
|
||||
tr_elm.setAttribute('style', dom.serializeStyle(dom.parseStyle(formObj.style.value)));
|
||||
dom.setAttrib(tr_elm, 'align', getSelectValue(formObj, 'align'));
|
||||
dom.setAttrib(tr_elm, 'vAlign', getSelectValue(formObj, 'valign'));
|
||||
dom.setAttrib(tr_elm, 'lang', formObj.lang.value);
|
||||
dom.setAttrib(tr_elm, 'dir', getSelectValue(formObj, 'dir'));
|
||||
dom.setAttrib(tr_elm, 'style', dom.serializeStyle(dom.parseStyle(formObj.style.value)));
|
||||
dom.setAttrib(tr_elm, 'class', getSelectValue(formObj, 'class'));
|
||||
|
||||
// Clear deprecated attributes
|
||||
tr_elm.setAttribute('background', '');
|
||||
tr_elm.setAttribute('bgColor', '');
|
||||
tr_elm.setAttribute('height', '');
|
||||
dom.setAttrib(tr_elm, 'background', '');
|
||||
dom.setAttrib(tr_elm, 'bgColor', '');
|
||||
dom.setAttrib(tr_elm, 'height', '');
|
||||
|
||||
// Set styles
|
||||
tr_elm.style.height = getCSSSize(formObj.height.value);
|
||||
|
|
@ -163,13 +166,10 @@ function updateRow(tr_elm, skip_id, skip_parent) {
|
|||
if (newParent == null) {
|
||||
newParent = doc.createElement(dest);
|
||||
|
||||
if (dest == "thead") {
|
||||
if (theTable.firstChild.nodeName == 'CAPTION')
|
||||
inst.dom.insertAfter(newParent, theTable.firstChild);
|
||||
else
|
||||
theTable.insertBefore(newParent, theTable.firstChild);
|
||||
} else
|
||||
theTable.appendChild(newParent);
|
||||
if (theTable.firstChild.nodeName == 'CAPTION')
|
||||
inst.dom.insertAfter(newParent, theTable.firstChild);
|
||||
else
|
||||
theTable.insertBefore(newParent, theTable.firstChild);
|
||||
}
|
||||
|
||||
// append the row to the new parent
|
||||
|
|
|
|||
88
library/tinymce/jscripts/tiny_mce/plugins/table/js/table.js
vendored
Executable file → Normal file
|
|
@ -12,7 +12,7 @@ function insertTable() {
|
|||
tinyMCEPopup.restoreSelection();
|
||||
|
||||
if (!AutoValidator.validate(formObj)) {
|
||||
tinyMCEPopup.alert(inst.getLang('invalid_data'));
|
||||
tinyMCEPopup.alert(AutoValidator.getErrorMessages(formObj).join('. ') + '.');
|
||||
return false;
|
||||
}
|
||||
|
||||
|
|
@ -21,7 +21,7 @@ function insertTable() {
|
|||
// Get form data
|
||||
cols = formObj.elements['cols'].value;
|
||||
rows = formObj.elements['rows'].value;
|
||||
border = formObj.elements['border'].value != "" ? formObj.elements['border'].value : 0;
|
||||
border = formObj.elements['border'].value != "" ? formObj.elements['border'].value : 0;
|
||||
cellpadding = formObj.elements['cellpadding'].value != "" ? formObj.elements['cellpadding'].value : "";
|
||||
cellspacing = formObj.elements['cellspacing'].value != "" ? formObj.elements['cellspacing'].value : "";
|
||||
align = getSelectValue(formObj, "align");
|
||||
|
|
@ -58,11 +58,21 @@ function insertTable() {
|
|||
|
||||
// Update table
|
||||
if (action == "update") {
|
||||
inst.execCommand('mceBeginUndoLevel');
|
||||
|
||||
dom.setAttrib(elm, 'cellPadding', cellpadding, true);
|
||||
dom.setAttrib(elm, 'cellSpacing', cellspacing, true);
|
||||
dom.setAttrib(elm, 'border', border);
|
||||
|
||||
if (!isCssSize(border)) {
|
||||
dom.setAttrib(elm, 'border', border);
|
||||
} else {
|
||||
dom.setAttrib(elm, 'border', '');
|
||||
}
|
||||
|
||||
if (border == '') {
|
||||
dom.setStyle(elm, 'border-width', '');
|
||||
dom.setStyle(elm, 'border', '');
|
||||
dom.setAttrib(elm, 'border', '');
|
||||
}
|
||||
|
||||
dom.setAttrib(elm, 'align', align);
|
||||
dom.setAttrib(elm, 'frame', frame);
|
||||
dom.setAttrib(elm, 'rules', rules);
|
||||
|
|
@ -82,7 +92,7 @@ function insertTable() {
|
|||
capEl = elm.ownerDocument.createElement('caption');
|
||||
|
||||
if (!tinymce.isIE)
|
||||
capEl.innerHTML = '<br _mce_bogus="1"/>';
|
||||
capEl.innerHTML = '<br data-mce-bogus="1"/>';
|
||||
|
||||
elm.insertBefore(capEl, elm.firstChild);
|
||||
}
|
||||
|
|
@ -121,7 +131,7 @@ function insertTable() {
|
|||
if (bordercolor != "") {
|
||||
elm.style.borderColor = bordercolor;
|
||||
elm.style.borderStyle = elm.style.borderStyle == "" ? "solid" : elm.style.borderStyle;
|
||||
elm.style.borderWidth = border == "" ? "1px" : border;
|
||||
elm.style.borderWidth = cssSize(border);
|
||||
} else
|
||||
elm.style.borderColor = '';
|
||||
|
||||
|
|
@ -134,7 +144,7 @@ function insertTable() {
|
|||
//elm.outerHTML = elm.outerHTML;
|
||||
|
||||
inst.nodeChanged();
|
||||
inst.execCommand('mceEndUndoLevel');
|
||||
inst.execCommand('mceEndUndoLevel', false, {}, {skip_undo: true});
|
||||
|
||||
// Repaint if dimensions changed
|
||||
if (formObj.width.value != orgTableWidth || formObj.height.value != orgTableHeight)
|
||||
|
|
@ -148,10 +158,13 @@ function insertTable() {
|
|||
html += '<table';
|
||||
|
||||
html += makeAttrib('id', id);
|
||||
html += makeAttrib('border', border);
|
||||
if (!isCssSize(border)) {
|
||||
html += makeAttrib('border', border);
|
||||
}
|
||||
|
||||
html += makeAttrib('cellpadding', cellpadding);
|
||||
html += makeAttrib('cellspacing', cellspacing);
|
||||
html += makeAttrib('_mce_new', '1');
|
||||
html += makeAttrib('data-mce-new', '1');
|
||||
|
||||
if (width && inst.settings.inline_styles) {
|
||||
if (style)
|
||||
|
|
@ -187,7 +200,7 @@ function insertTable() {
|
|||
|
||||
if (caption) {
|
||||
if (!tinymce.isIE)
|
||||
html += '<caption><br _mce_bogus="1"/></caption>';
|
||||
html += '<caption><br data-mce-bogus="1"/></caption>';
|
||||
else
|
||||
html += '<caption></caption>';
|
||||
}
|
||||
|
|
@ -197,7 +210,7 @@ function insertTable() {
|
|||
|
||||
for (var x=0; x<cols; x++) {
|
||||
if (!tinymce.isIE)
|
||||
html += '<td><br _mce_bogus="1"/></td>';
|
||||
html += '<td><br data-mce-bogus="1"/></td>';
|
||||
else
|
||||
html += '<td></td>';
|
||||
}
|
||||
|
|
@ -207,8 +220,6 @@ function insertTable() {
|
|||
|
||||
html += "</table>";
|
||||
|
||||
inst.execCommand('mceBeginUndoLevel');
|
||||
|
||||
// Move table
|
||||
if (inst.settings.fix_table_elements) {
|
||||
var patt = '';
|
||||
|
|
@ -231,17 +242,26 @@ function insertTable() {
|
|||
} else
|
||||
inst.execCommand('mceInsertContent', false, html);
|
||||
|
||||
tinymce.each(dom.select('table[_mce_new]'), function(node) {
|
||||
var td = dom.select('td', node);
|
||||
tinymce.each(dom.select('table[data-mce-new]'), function(node) {
|
||||
var tdorth = dom.select('td,th', node);
|
||||
|
||||
inst.selection.select(td[0], true);
|
||||
inst.selection.collapse();
|
||||
// Fixes a bug in IE where the caret cannot be placed after the table if the table is at the end of the document
|
||||
if (tinymce.isIE && node.nextSibling == null) {
|
||||
dom.insertAfter(dom.create('p'), node);
|
||||
}
|
||||
|
||||
dom.setAttrib(node, '_mce_new', '');
|
||||
try {
|
||||
// IE9 might fail to do this selection
|
||||
inst.selection.setCursorLocation(tdorth[0], 0);
|
||||
} catch (ex) {
|
||||
// Ignore
|
||||
}
|
||||
|
||||
dom.setAttrib(node, 'data-mce-new', '');
|
||||
});
|
||||
|
||||
inst.addVisual();
|
||||
inst.execCommand('mceEndUndoLevel');
|
||||
inst.execCommand('mceEndUndoLevel', false, {}, {skip_undo: true});
|
||||
|
||||
tinyMCEPopup.close();
|
||||
}
|
||||
|
|
@ -279,7 +299,7 @@ function init() {
|
|||
|
||||
var cols = 2, rows = 2, border = tinyMCEPopup.getParam('table_default_border', '0'), cellpadding = tinyMCEPopup.getParam('table_default_cellpadding', ''), cellspacing = tinyMCEPopup.getParam('table_default_cellspacing', '');
|
||||
var align = "", width = "", height = "", bordercolor = "", bgcolor = "", className = "";
|
||||
var id = "", summary = "", style = "", dir = "", lang = "", background = "", bgcolor = "", bordercolor = "", rules, frame;
|
||||
var id = "", summary = "", style = "", dir = "", lang = "", background = "", bgcolor = "", bordercolor = "", rules = "", frame = "";
|
||||
var inst = tinyMCEPopup.editor, dom = inst.dom;
|
||||
var formObj = document.forms[0];
|
||||
var elm = dom.getParent(inst.selection.getNode(), "table");
|
||||
|
|
@ -383,6 +403,20 @@ function changedSize() {
|
|||
formObj.style.value = dom.serializeStyle(st);
|
||||
}
|
||||
|
||||
function isCssSize(value) {
|
||||
return /^[0-9.]+(%|in|cm|mm|em|ex|pt|pc|px)$/.test(value);
|
||||
}
|
||||
|
||||
function cssSize(value, def) {
|
||||
value = tinymce.trim(value || def);
|
||||
|
||||
if (!isCssSize(value)) {
|
||||
return parseInt(value, 10) + 'px';
|
||||
}
|
||||
|
||||
return value;
|
||||
}
|
||||
|
||||
function changedBackgroundImage() {
|
||||
var formObj = document.forms[0];
|
||||
var st = dom.parseStyle(formObj.style.value);
|
||||
|
|
@ -397,8 +431,14 @@ function changedBorder() {
|
|||
var st = dom.parseStyle(formObj.style.value);
|
||||
|
||||
// Update border width if the element has a color
|
||||
if (formObj.border.value != "" && formObj.bordercolor.value != "")
|
||||
st['border-width'] = formObj.border.value + "px";
|
||||
if (formObj.border.value != "" && (isCssSize(formObj.border.value) || formObj.bordercolor.value != ""))
|
||||
st['border-width'] = cssSize(formObj.border.value);
|
||||
else {
|
||||
if (!formObj.border.value) {
|
||||
st['border'] = '';
|
||||
st['border-width'] = '';
|
||||
}
|
||||
}
|
||||
|
||||
formObj.style.value = dom.serializeStyle(st);
|
||||
}
|
||||
|
|
@ -414,7 +454,7 @@ function changedColor() {
|
|||
|
||||
// Add border-width if it's missing
|
||||
if (!st['border-width'])
|
||||
st['border-width'] = formObj.border.value == "" ? "1px" : formObj.border.value + "px";
|
||||
st['border-width'] = cssSize(formObj.border.value, 1);
|
||||
}
|
||||
|
||||
formObj.style.value = dom.serializeStyle(st);
|
||||
|
|
|
|||
75
library/tinymce/jscripts/tiny_mce/plugins/table/langs/en_dlg.js
vendored
Executable file → Normal file
|
|
@ -1,74 +1 @@
|
|||
tinyMCE.addI18n('en.table_dlg',{
|
||||
general_tab:"General",
|
||||
advanced_tab:"Advanced",
|
||||
general_props:"General properties",
|
||||
advanced_props:"Advanced properties",
|
||||
rowtype:"Row in table part",
|
||||
title:"Insert/Modify table",
|
||||
width:"Width",
|
||||
height:"Height",
|
||||
cols:"Cols",
|
||||
rows:"Rows",
|
||||
cellspacing:"Cellspacing",
|
||||
cellpadding:"Cellpadding",
|
||||
border:"Border",
|
||||
align:"Alignment",
|
||||
align_default:"Default",
|
||||
align_left:"Left",
|
||||
align_right:"Right",
|
||||
align_middle:"Center",
|
||||
row_title:"Table row properties",
|
||||
cell_title:"Table cell properties",
|
||||
cell_type:"Cell type",
|
||||
valign:"Vertical alignment",
|
||||
align_top:"Top",
|
||||
align_bottom:"Bottom",
|
||||
bordercolor:"Border color",
|
||||
bgcolor:"Background color",
|
||||
merge_cells_title:"Merge table cells",
|
||||
id:"Id",
|
||||
style:"Style",
|
||||
langdir:"Language direction",
|
||||
langcode:"Language code",
|
||||
mime:"Target MIME type",
|
||||
ltr:"Left to right",
|
||||
rtl:"Right to left",
|
||||
bgimage:"Background image",
|
||||
summary:"Summary",
|
||||
td:"Data",
|
||||
th:"Header",
|
||||
cell_cell:"Update current cell",
|
||||
cell_row:"Update all cells in row",
|
||||
cell_all:"Update all cells in table",
|
||||
row_row:"Update current row",
|
||||
row_odd:"Update odd rows in table",
|
||||
row_even:"Update even rows in table",
|
||||
row_all:"Update all rows in table",
|
||||
thead:"Table Head",
|
||||
tbody:"Table Body",
|
||||
tfoot:"Table Foot",
|
||||
scope:"Scope",
|
||||
rowgroup:"Row Group",
|
||||
colgroup:"Col Group",
|
||||
col_limit:"You've exceeded the maximum number of columns of {$cols}.",
|
||||
row_limit:"You've exceeded the maximum number of rows of {$rows}.",
|
||||
cell_limit:"You've exceeded the maximum number of cells of {$cells}.",
|
||||
missing_scope:"Are you sure you want to continue without specifying a scope for this table header cell. Without it, it may be difficult for some users with disabilities to understand the content or data displayed of the table.",
|
||||
caption:"Table caption",
|
||||
frame:"Frame",
|
||||
frame_none:"none",
|
||||
frame_groups:"groups",
|
||||
frame_rows:"rows",
|
||||
frame_cols:"cols",
|
||||
frame_all:"all",
|
||||
rules:"Rules",
|
||||
rules_void:"void",
|
||||
rules_above:"above",
|
||||
rules_below:"below",
|
||||
rules_hsides:"hsides",
|
||||
rules_lhs:"lhs",
|
||||
rules_rhs:"rhs",
|
||||
rules_vsides:"vsides",
|
||||
rules_box:"box",
|
||||
rules_border:"border"
|
||||
});
|
||||
tinyMCE.addI18n('en.table_dlg',{"rules_border":"border","rules_box":"box","rules_vsides":"vsides","rules_rhs":"rhs","rules_lhs":"lhs","rules_hsides":"hsides","rules_below":"below","rules_above":"above","rules_void":"void",rules:"Rules","frame_all":"all","frame_cols":"cols","frame_rows":"rows","frame_groups":"groups","frame_none":"none",frame:"Frame",caption:"Table Caption","missing_scope":"Are you sure you want to continue without specifying a scope for this table header cell. Without it, it may be difficult for some users with disabilities to understand the content or data displayed of the table.","cell_limit":"You\'ve exceeded the maximum number of cells of {$cells}.","row_limit":"You\'ve exceeded the maximum number of rows of {$rows}.","col_limit":"You\'ve exceeded the maximum number of columns of {$cols}.",colgroup:"Col Group",rowgroup:"Row Group",scope:"Scope",tfoot:"Footer",tbody:"Body",thead:"Header","row_all":"Update All Rows in Table","row_even":"Update Even Rows in Table","row_odd":"Update Odd Rows in Table","row_row":"Update Current Row","cell_all":"Update All Cells in Table","cell_row":"Update All Cells in Row","cell_cell":"Update Current Cell",th:"Header",td:"Data",summary:"Summary",bgimage:"Background Image",rtl:"Right to Left",ltr:"Left to Right",mime:"Target MIME Type",langcode:"Language Code",langdir:"Language Direction",style:"Style",id:"ID","merge_cells_title":"Merge Table Cells",bgcolor:"Background Color",bordercolor:"Border Color","align_bottom":"Bottom","align_top":"Top",valign:"Vertical Alignment","cell_type":"Cell Type","cell_title":"Table Cell Properties","row_title":"Table Row Properties","align_middle":"Center","align_right":"Right","align_left":"Left","align_default":"Default",align:"Alignment",border:"Border",cellpadding:"Cell Padding",cellspacing:"Cell Spacing",rows:"Rows",cols:"Columns",height:"Height",width:"Width",title:"Insert/Edit Table",rowtype:"Row Type","advanced_props":"Advanced Properties","general_props":"General Properties","advanced_tab":"Advanced","general_tab":"General","cell_col":"Update all cells in column"});
|
||||
22
library/tinymce/jscripts/tiny_mce/plugins/table/merge_cells.htm
vendored
Executable file → Normal file
|
|
@ -7,20 +7,20 @@
|
|||
<script type="text/javascript" src="../../utils/validate.js"></script>
|
||||
<script type="text/javascript" src="js/merge_cells.js"></script>
|
||||
</head>
|
||||
<body style="margin: 8px">
|
||||
<body style="margin: 8px" role="application">
|
||||
<form onsubmit="MergeCellsDialog.merge();return false;" action="#">
|
||||
<fieldset>
|
||||
<legend>{#table_dlg.merge_cells_title}</legend>
|
||||
<table border="0" cellpadding="0" cellspacing="3" width="100%">
|
||||
<tr>
|
||||
<td>{#table_dlg.cols}:</td>
|
||||
<td align="right"><input type="text" name="numcols" value="" class="number min1 mceFocus" style="width: 30px" /></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>{#table_dlg.rows}:</td>
|
||||
<td align="right"><input type="text" name="numrows" value="" class="number min1" style="width: 30px" /></td>
|
||||
</tr>
|
||||
</table>
|
||||
<table role="presentation" border="0" cellpadding="0" cellspacing="3" width="100%">
|
||||
<tr>
|
||||
<td><label for="numcols">{#table_dlg.cols}</label>:</td>
|
||||
<td align="right"><input type="text" id="numcols" name="numcols" value="" class="number min1 mceFocus" style="width: 30px" aria-required="true" /></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><label for="numrows">{#table_dlg.rows}</label>:</td>
|
||||
<td align="right"><input type="text" id="numrows" name="numrows" value="" class="number min1" style="width: 30px" aria-required="true" /></td>
|
||||
</tr>
|
||||
</table>
|
||||
</fieldset>
|
||||
|
||||
<div class="mceActionPanel">
|
||||
|
|
|
|||
21
library/tinymce/jscripts/tiny_mce/plugins/table/row.htm
vendored
Executable file → Normal file
|
|
@ -5,16 +5,17 @@
|
|||
<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/row.js"></script>
|
||||
<link href="css/row.css" rel="stylesheet" type="text/css" />
|
||||
</head>
|
||||
<body id="tablerow" style="display: none">
|
||||
<body id="tablerow" style="display: none" role="application">
|
||||
<form onsubmit="updateAction();return false;" action="#">
|
||||
<div class="tabs">
|
||||
<ul>
|
||||
<li id="general_tab" class="current"><span><a href="javascript:mcTabs.displayTab('general_tab','general_panel');" onmousedown="return false;">{#table_dlg.general_tab}</a></span></li>
|
||||
<li id="advanced_tab"><span><a href="javascript:mcTabs.displayTab('advanced_tab','advanced_panel');" onmousedown="return false;">{#table_dlg.advanced_tab}</a></span></li>
|
||||
<li id="general_tab" class="current" aria-controls="general_panel"><span><a href="javascript:mcTabs.displayTab('general_tab','general_panel');" onmousedown="return false;">{#table_dlg.general_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;">{#table_dlg.advanced_tab}</a></span></li>
|
||||
</ul>
|
||||
</div>
|
||||
|
||||
|
|
@ -23,7 +24,7 @@
|
|||
<fieldset>
|
||||
<legend>{#table_dlg.general_props}</legend>
|
||||
|
||||
<table border="0" cellpadding="4" cellspacing="0">
|
||||
<table role="presentation" border="0" cellpadding="4" cellspacing="0">
|
||||
<tr>
|
||||
<td><label for="rowtype">{#table_dlg.rowtype}</label></td>
|
||||
<td class="col2">
|
||||
|
|
@ -70,7 +71,7 @@
|
|||
|
||||
<tr>
|
||||
<td><label for="height">{#table_dlg.height}</label></td>
|
||||
<td class="col2"><input name="height" type="text" id="height" value="" size="4" maxlength="4" onchange="changedSize();" /></td>
|
||||
<td class="col2"><input name="height" type="text" id="height" value="" size="7" maxlength="7" onchange="changedSize();" class="size" /></td>
|
||||
</tr>
|
||||
</table>
|
||||
</fieldset>
|
||||
|
|
@ -80,7 +81,7 @@
|
|||
<fieldset>
|
||||
<legend>{#table_dlg.advanced_props}</legend>
|
||||
|
||||
<table border="0" cellpadding="0" cellspacing="4">
|
||||
<table role="presentation" border="0" cellpadding="0" cellspacing="4">
|
||||
<tr>
|
||||
<td class="column1"><label for="id">{#table_dlg.id}</label></td>
|
||||
<td><input id="id" name="id" type="text" value="" style="width: 200px" /></td>
|
||||
|
|
@ -112,7 +113,7 @@
|
|||
<tr>
|
||||
<td class="column1"><label for="backgroundimage">{#table_dlg.bgimage}</label></td>
|
||||
<td>
|
||||
<table border="0" cellpadding="0" cellspacing="0">
|
||||
<table role="presentation" border="0" cellpadding="0" cellspacing="0">
|
||||
<tr>
|
||||
<td><input id="backgroundimage" name="backgroundimage" type="text" value="" style="width: 200px" onchange="changedBackgroundImage();" /></td>
|
||||
<td id="backgroundimagebrowsercontainer"> </td>
|
||||
|
|
@ -122,14 +123,16 @@
|
|||
</tr>
|
||||
|
||||
<tr>
|
||||
<td class="column1"><label for="bgcolor">{#table_dlg.bgcolor}</label></td>
|
||||
<td class="column1"><label for="bgcolor" id="bgcolor_label">{#table_dlg.bgcolor}</label></td>
|
||||
<td>
|
||||
<table border="0" cellpadding="0" cellspacing="0">
|
||||
<span role="group" aria-labelledby="bgcolor_label">
|
||||
<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');changedColor();" /></td>
|
||||
<td id="bgcolor_pickcontainer"> </td>
|
||||
</tr>
|
||||
</table>
|
||||
</span>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
|
|
|
|||
107
library/tinymce/jscripts/tiny_mce/plugins/table/table.htm
vendored
Executable file → Normal file
|
|
@ -10,12 +10,13 @@
|
|||
<script type="text/javascript" src="js/table.js"></script>
|
||||
<link href="css/table.css" rel="stylesheet" type="text/css" />
|
||||
</head>
|
||||
<body id="table" style="display: none">
|
||||
<body id="table" style="display: none" role="application" aria-labelledby="app_title">
|
||||
<span style="display:none;" id="app_title">{#table_dlg.title}</span>
|
||||
<form onsubmit="insertTable();return false;" action="#">
|
||||
<div class="tabs">
|
||||
<ul>
|
||||
<li id="general_tab" class="current"><span><a href="javascript:mcTabs.displayTab('general_tab','general_panel');" onmousedown="return false;">{#table_dlg.general_tab}</a></span></li>
|
||||
<li id="advanced_tab"><span><a href="javascript:mcTabs.displayTab('advanced_tab','advanced_panel');" onmousedown="return false;">{#table_dlg.advanced_tab}</a></span></li>
|
||||
<li id="general_tab" aria-controls="general_panel" class="current"><span><a href="javascript:mcTabs.displayTab('general_tab','general_panel');" onmousedown="return false;">{#table_dlg.general_tab}</a></span></li>
|
||||
<li id="advanced_tab" aria-controls="advanced_panel"><span><a href="javascript:mcTabs.displayTab('advanced_tab','advanced_panel');" onmousedown="return false;">{#table_dlg.advanced_tab}</a></span></li>
|
||||
</ul>
|
||||
</div>
|
||||
|
||||
|
|
@ -23,48 +24,48 @@
|
|||
<div id="general_panel" class="panel current">
|
||||
<fieldset>
|
||||
<legend>{#table_dlg.general_props}</legend>
|
||||
<table border="0" cellpadding="4" cellspacing="0" width="100%">
|
||||
<tr>
|
||||
<td><label id="colslabel" for="cols">{#table_dlg.cols}</label></td>
|
||||
<td><input id="cols" name="cols" type="text" value="" size="3" maxlength="3" class="required number min1 mceFocus" /></td>
|
||||
<td><label id="rowslabel" for="rows">{#table_dlg.rows}</label></td>
|
||||
<td><input id="rows" name="rows" type="text" value="" size="3" maxlength="3" class="required number min1" /></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><label id="cellpaddinglabel" for="cellpadding">{#table_dlg.cellpadding}</label></td>
|
||||
<td><input id="cellpadding" name="cellpadding" type="text" value="" size="3" maxlength="3" class="number" /></td>
|
||||
<td><label id="cellspacinglabel" for="cellspacing">{#table_dlg.cellspacing}</label></td>
|
||||
<td><input id="cellspacing" name="cellspacing" type="text" value="" size="3" maxlength="3" class="number" /></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><label id="alignlabel" for="align">{#table_dlg.align}</label></td>
|
||||
<td><select id="align" name="align">
|
||||
<option value="">{#not_set}</option>
|
||||
<option value="center">{#table_dlg.align_middle}</option>
|
||||
<option value="left">{#table_dlg.align_left}</option>
|
||||
<option value="right">{#table_dlg.align_right}</option>
|
||||
</select></td>
|
||||
<td><label id="borderlabel" for="border">{#table_dlg.border}</label></td>
|
||||
<td><input id="border" name="border" type="text" value="" size="3" maxlength="3" onchange="changedBorder();" class="number" /></td>
|
||||
</tr>
|
||||
<tr id="width_row">
|
||||
<td><label id="widthlabel" for="width">{#table_dlg.width}</label></td>
|
||||
<td><input name="width" type="text" id="width" value="" size="4" maxlength="4" onchange="changedSize();" class="size" /></td>
|
||||
<td><label id="heightlabel" for="height">{#table_dlg.height}</label></td>
|
||||
<td><input name="height" type="text" id="height" value="" size="4" maxlength="4" onchange="changedSize();" class="size" /></td>
|
||||
</tr>
|
||||
<tr id="styleSelectRow">
|
||||
<td><label id="classlabel" for="class">{#class_name}</label></td>
|
||||
<td colspan="3">
|
||||
<select id="class" name="class" class="mceEditableSelect">
|
||||
<option value="" selected="selected">{#not_set}</option>
|
||||
</select></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="column1"><label for="caption">{#table_dlg.caption}</label></td>
|
||||
<td><input id="caption" name="caption" type="checkbox" class="checkbox" value="true" /></td>
|
||||
</tr>
|
||||
</table>
|
||||
<table role="presentation" border="0" cellpadding="4" cellspacing="0" width="100%">
|
||||
<tr>
|
||||
<td><label id="colslabel" for="cols">{#table_dlg.cols}</label></td>
|
||||
<td><input id="cols" name="cols" type="text" value="" size="3" maxlength="3" class="required number min1 mceFocus" aria-required="true" /></td>
|
||||
<td><label id="rowslabel" for="rows">{#table_dlg.rows}</label></td>
|
||||
<td><input id="rows" name="rows" type="text" value="" size="3" maxlength="3" class="required number min1" aria-required="true" /></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><label id="cellpaddinglabel" for="cellpadding">{#table_dlg.cellpadding}</label></td>
|
||||
<td><input id="cellpadding" name="cellpadding" type="text" value="" size="3" maxlength="3" class="number" /></td>
|
||||
<td><label id="cellspacinglabel" for="cellspacing">{#table_dlg.cellspacing}</label></td>
|
||||
<td><input id="cellspacing" name="cellspacing" type="text" value="" size="3" maxlength="3" class="number" /></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><label id="alignlabel" for="align">{#table_dlg.align}</label></td>
|
||||
<td><select id="align" name="align">
|
||||
<option value="">{#not_set}</option>
|
||||
<option value="center">{#table_dlg.align_middle}</option>
|
||||
<option value="left">{#table_dlg.align_left}</option>
|
||||
<option value="right">{#table_dlg.align_right}</option>
|
||||
</select></td>
|
||||
<td><label id="borderlabel" for="border">{#table_dlg.border}</label></td>
|
||||
<td><input id="border" name="border" type="text" value="" size="3" maxlength="5" onchange="changedBorder();" class="size" /></td>
|
||||
</tr>
|
||||
<tr id="width_row">
|
||||
<td><label id="widthlabel" for="width">{#table_dlg.width}</label></td>
|
||||
<td><input name="width" type="text" id="width" value="" size="7" maxlength="7" onchange="changedSize();" class="size" /></td>
|
||||
<td><label id="heightlabel" for="height">{#table_dlg.height}</label></td>
|
||||
<td><input name="height" type="text" id="height" value="" size="7" maxlength="7" onchange="changedSize();" class="size" /></td>
|
||||
</tr>
|
||||
<tr id="styleSelectRow" >
|
||||
<td><label id="classlabel" for="class">{#class_name}</label></td>
|
||||
<td colspan="3" >
|
||||
<select id="class" name="class" class="mceEditableSelect">
|
||||
<option value="" selected="selected">{#not_set}</option>
|
||||
</select></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="column1" ><label for="caption">{#table_dlg.caption}</label></td>
|
||||
<td><input id="caption" name="caption" type="checkbox" class="checkbox" value="true" /></td>
|
||||
</tr>
|
||||
</table>
|
||||
</fieldset>
|
||||
</div>
|
||||
|
||||
|
|
@ -72,7 +73,7 @@
|
|||
<fieldset>
|
||||
<legend>{#table_dlg.advanced_props}</legend>
|
||||
|
||||
<table border="0" cellpadding="0" cellspacing="4">
|
||||
<table role="presentation" border="0" cellpadding="0" cellspacing="4">
|
||||
<tr>
|
||||
<td class="column1"><label for="id">{#table_dlg.id}</label></td>
|
||||
<td><input id="id" name="id" type="text" value="" class="advfield" /></td>
|
||||
|
|
@ -98,7 +99,7 @@
|
|||
<tr>
|
||||
<td class="column1"><label for="backgroundimage">{#table_dlg.bgimage}</label></td>
|
||||
<td>
|
||||
<table border="0" cellpadding="0" cellspacing="0">
|
||||
<table role="presentation" aria-labelledby="backgroundimage_label" border="0" cellpadding="0" cellspacing="0">
|
||||
<tr>
|
||||
<td><input id="backgroundimage" name="backgroundimage" type="text" value="" class="advfield" onchange="changedBackgroundImage();" /></td>
|
||||
<td id="backgroundimagebrowsercontainer"> </td>
|
||||
|
|
@ -150,10 +151,10 @@
|
|||
</td>
|
||||
</tr>
|
||||
|
||||
<tr>
|
||||
<td class="column1"><label for="bordercolor">{#table_dlg.bordercolor}</label></td>
|
||||
<tr role="group" aria-labelledby="bordercolor_label">
|
||||
<td class="column1"><label id="bordercolor_label" for="bordercolor">{#table_dlg.bordercolor}</label></td>
|
||||
<td>
|
||||
<table border="0" cellpadding="0" cellspacing="0">
|
||||
<table role="presentation" border="0" cellpadding="0" cellspacing="0">
|
||||
<tr>
|
||||
<td><input id="bordercolor" name="bordercolor" type="text" value="" size="9" onchange="updateColor('bordercolor_pick','bordercolor');changedColor();" /></td>
|
||||
<td id="bordercolor_pickcontainer"> </td>
|
||||
|
|
@ -162,10 +163,10 @@
|
|||
</td>
|
||||
</tr>
|
||||
|
||||
<tr>
|
||||
<td class="column1"><label for="bgcolor">{#table_dlg.bgcolor}</label></td>
|
||||
<tr role="group" aria-labelledby="bgcolor_label">
|
||||
<td class="column1"><label id="bgcolor_label" for="bgcolor">{#table_dlg.bgcolor}</label></td>
|
||||
<td>
|
||||
<table border="0" cellpadding="0" cellspacing="0">
|
||||
<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');changedColor();" /></td>
|
||||
<td id="bgcolor_pickcontainer"> </td>
|
||||
|
|
|
|||