Make WordPress Core

Changeset 29203


Ignore:
Timestamp:
07/17/2014 12:58:41 AM (10 years ago)
Author:
azaozz
Message:

TinyMCE:

Fixes #28576.

Location:
trunk
Files:
3 added
27 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/wp-includes/js/tinymce/plugins/image/plugin.js

    r28768 r29203  
    217217        }
    218218
    219         function srcChange() {
     219        function srcChange(e) {
     220            var meta = e.meta || {};
     221
    220222            if (imageListCtrl) {
    221223                imageListCtrl.value(editor.convertURL(this.value(), 'src'));
    222224            }
    223225
    224             getImageSize(this.value(), function(data) {
    225                 if (data.width && data.height && imageDimensions) {
    226                     width = data.width;
    227                     height = data.height;
    228 
    229                     win.find('#width').value(width);
    230                     win.find('#height').value(height);
    231                 }
    232             });
     226            tinymce.each(meta, function(value, key) {
     227                win.find('#' + key).value(value);
     228            });
     229
     230            if (!meta.width && !meta.height) {
     231                getImageSize(this.value(), function(data) {
     232                    if (data.width && data.height && imageDimensions) {
     233                        width = data.width;
     234                        height = data.height;
     235
     236                        win.find('#width').value(width);
     237                        win.find('#height').value(height);
     238                    }
     239                });
     240            }
    233241        }
    234242
     
    298306        // General settings shared between simple and advanced dialogs
    299307        var generalFormItems = [
    300             {name: 'src', type: 'filepicker', filetype: 'image', label: 'Source', autofocus: true, onchange: srcChange},
     308            {
     309                name: 'src',
     310                type: 'filepicker',
     311                filetype: 'image',
     312                label: 'Source',
     313                autofocus: true,
     314                onchange: srcChange
     315            },
    301316            imageListCtrl
    302317        ];
  • trunk/src/wp-includes/js/tinymce/plugins/image/plugin.min.js

    r28768 r29203  
    1 tinymce.PluginManager.add("image",function(a){function b(a,b){function c(a,c){d.parentNode&&d.parentNode.removeChild(d),b({width:a,height:c})}var d=document.createElement("img");d.onload=function(){c(d.clientWidth,d.clientHeight)},d.onerror=function(){c()};var e=d.style;e.visibility="hidden",e.position="fixed",e.bottom=e.left=0,e.width=e.height="auto",document.body.appendChild(d),d.src=a}function c(a,b,c){function d(a,c){return c=c||[],tinymce.each(a,function(a){var e={text:a.text||a.title};a.menu?e.menu=d(a.menu):(e.value=a.value,b(e)),c.push(e)}),c}return d(a,c||[])}function d(b){return function(){var c=a.settings.image_list;"string"==typeof c?tinymce.util.XHR.send({url:c,success:function(a){b(tinymce.util.JSON.parse(a))}}):"function"==typeof c?c(b):b(c)}}function e(d){function e(){var a,b,c,d;a=j.find("#width")[0],b=j.find("#height")[0],a&&b&&(c=a.value(),d=b.value(),j.find("#constrain")[0].checked()&&k&&l&&c&&d&&(k!=c?(d=Math.round(c/k*d),b.value(d)):(c=Math.round(d/l*c),a.value(c))),k=c,l=d)}function f(){function b(b){function c(){b.onload=b.onerror=null,a.selection&&(a.selection.select(b),a.nodeChanged())}b.onload=function(){o.width||o.height||!r||(p.setAttribs(b,{width:b.clientWidth,height:b.clientHeight}),a.fire("wpNewImageRefresh",{node:b})),c()},b.onerror=c}i(),e(),o=tinymce.extend(o,j.toJSON());var c=o.caption;o.alt||(o.alt=""),""===o.width&&(o.width=null),""===o.height&&(o.height=null),o.style||(o.style=null),o={src:o.src,alt:o.alt,width:o.width,height:o.height,style:o.style,"class":o["class"]},a.undoManager.transact(function(){var d={node:q,data:o,caption:c};return a.fire("wpImageFormSubmit",{imgData:d}),d.cancel?void b(d.node):o.src?(q?p.setAttribs(q,o):(o.id="__mcenew",a.focus(),a.selection.setContent(p.createHTML("img",o)),q=p.get("__mcenew"),p.setAttrib(q,"id",null)),void b(q)):void(q&&(p.remove(q),a.focus(),a.nodeChanged()))})}function g(a){return a&&(a=a.replace(/px$/,"")),a}function h(){m&&m.value(a.convertURL(this.value(),"src")),b(this.value(),function(a){a.width&&a.height&&r&&(k=a.width,l=a.height,j.find("#width").value(k),j.find("#height").value(l))})}function i(){function b(a){return a.length>0&&/^[0-9]+$/.test(a)&&(a+="px"),a}if(a.settings.image_advtab){var c=j.toJSON(),d=p.parseStyle(c.style);delete d.margin,d["margin-top"]=d["margin-bottom"]=b(c.vspace),d["margin-left"]=d["margin-right"]=b(c.hspace),d["border-width"]=b(c.border),j.find("#style").value(p.serializeStyle(p.parseStyle(p.serializeStyle(d))))}}var j,k,l,m,n,o={},p=a.dom,q=a.selection.getNode(),r=a.settings.image_dimensions!==!1;k=p.getAttrib(q,"width"),l=p.getAttrib(q,"height"),"IMG"!=q.nodeName||q.getAttribute("data-mce-object")||q.getAttribute("data-mce-placeholder")?q=null:(o={src:p.getAttrib(q,"src"),alt:p.getAttrib(q,"alt"),"class":p.getAttrib(q,"class"),width:k,height:l},a.fire("wpLoadImageData",{imgData:{data:o,node:q}})),d&&(m={type:"listbox",label:"Image list",values:c(d,function(b){b.value=a.convertURL(b.value||b.url,"src")},[{text:"None",value:""}]),value:o.src&&a.convertURL(o.src,"src"),onselect:function(a){var b=j.find("#alt");(!b.value()||a.lastControl&&b.value()==a.lastControl.text())&&b.value(a.control.text()),j.find("#src").value(a.control.value()).fire("change")},onPostRender:function(){m=this}}),a.settings.image_class_list&&(n={name:"class",type:"listbox",label:"Class",values:c(a.settings.image_class_list,function(b){b.value&&(b.textStyle=function(){return a.formatter.getCssText({inline:"img",classes:[b.value]})})})});var s=[{name:"src",type:"filepicker",filetype:"image",label:"Source",autofocus:!0,onchange:h},m];a.settings.image_description!==!1&&s.push({name:"alt",type:"textbox",label:"Image description"}),r&&s.push({type:"container",label:"Dimensions",layout:"flex",direction:"row",align:"center",spacing:5,items:[{name:"width",type:"textbox",maxLength:5,size:3,onchange:e,ariaLabel:"Width"},{type:"label",text:"x"},{name:"height",type:"textbox",maxLength:5,size:3,onchange:e,ariaLabel:"Height"},{name:"constrain",type:"checkbox",checked:!0,text:"Constrain proportions"}]}),s.push(n),a.fire("wpLoadImageForm",{data:s}),a.settings.image_advtab?(q&&(o.hspace=g(q.style.marginLeft||q.style.marginRight),o.vspace=g(q.style.marginTop||q.style.marginBottom),o.border=g(q.style.borderWidth),o.style=a.dom.serializeStyle(a.dom.parseStyle(a.dom.getAttrib(q,"style")))),j=a.windowManager.open({title:"Insert/edit image",data:o,bodyType:"tabpanel",body:[{title:"General",type:"form",items:s},{title:"Advanced",type:"form",pack:"start",items:[{label:"Style",name:"style",type:"textbox"},{type:"form",layout:"grid",packV:"start",columns:2,padding:0,alignH:["left","right"],defaults:{type:"textbox",maxWidth:50,onchange:i},items:[{label:"Vertical space",name:"vspace"},{label:"Horizontal space",name:"hspace"},{label:"Border",name:"border"}]}]}],onSubmit:f})):j=a.windowManager.open({title:"Insert/edit image",data:o,body:s,onSubmit:f})}a.addButton("image",{icon:"image",tooltip:"Insert/edit image",onclick:d(e),stateSelector:"img:not([data-mce-object],[data-mce-placeholder])"}),a.addMenuItem("image",{icon:"image",text:"Insert image",onclick:d(e),context:"insert",prependToContext:!0}),a.addCommand("mceImage",d(e))});
     1tinymce.PluginManager.add("image",function(a){function b(a,b){function c(a,c){d.parentNode&&d.parentNode.removeChild(d),b({width:a,height:c})}var d=document.createElement("img");d.onload=function(){c(d.clientWidth,d.clientHeight)},d.onerror=function(){c()};var e=d.style;e.visibility="hidden",e.position="fixed",e.bottom=e.left=0,e.width=e.height="auto",document.body.appendChild(d),d.src=a}function c(a,b,c){function d(a,c){return c=c||[],tinymce.each(a,function(a){var e={text:a.text||a.title};a.menu?e.menu=d(a.menu):(e.value=a.value,b(e)),c.push(e)}),c}return d(a,c||[])}function d(b){return function(){var c=a.settings.image_list;"string"==typeof c?tinymce.util.XHR.send({url:c,success:function(a){b(tinymce.util.JSON.parse(a))}}):"function"==typeof c?c(b):b(c)}}function e(d){function e(){var a,b,c,d;a=j.find("#width")[0],b=j.find("#height")[0],a&&b&&(c=a.value(),d=b.value(),j.find("#constrain")[0].checked()&&k&&l&&c&&d&&(k!=c?(d=Math.round(c/k*d),b.value(d)):(c=Math.round(d/l*c),a.value(c))),k=c,l=d)}function f(){function b(b){function c(){b.onload=b.onerror=null,a.selection&&(a.selection.select(b),a.nodeChanged())}b.onload=function(){o.width||o.height||!r||(p.setAttribs(b,{width:b.clientWidth,height:b.clientHeight}),a.fire("wpNewImageRefresh",{node:b})),c()},b.onerror=c}i(),e(),o=tinymce.extend(o,j.toJSON());var c=o.caption;o.alt||(o.alt=""),""===o.width&&(o.width=null),""===o.height&&(o.height=null),o.style||(o.style=null),o={src:o.src,alt:o.alt,width:o.width,height:o.height,style:o.style,"class":o["class"]},a.undoManager.transact(function(){var d={node:q,data:o,caption:c};return a.fire("wpImageFormSubmit",{imgData:d}),d.cancel?void b(d.node):o.src?(q?p.setAttribs(q,o):(o.id="__mcenew",a.focus(),a.selection.setContent(p.createHTML("img",o)),q=p.get("__mcenew"),p.setAttrib(q,"id",null)),void b(q)):void(q&&(p.remove(q),a.focus(),a.nodeChanged()))})}function g(a){return a&&(a=a.replace(/px$/,"")),a}function h(c){var d=c.meta||{};m&&m.value(a.convertURL(this.value(),"src")),tinymce.each(d,function(a,b){j.find("#"+b).value(a)}),d.width||d.height||b(this.value(),function(a){a.width&&a.height&&r&&(k=a.width,l=a.height,j.find("#width").value(k),j.find("#height").value(l))})}function i(){function b(a){return a.length>0&&/^[0-9]+$/.test(a)&&(a+="px"),a}if(a.settings.image_advtab){var c=j.toJSON(),d=p.parseStyle(c.style);delete d.margin,d["margin-top"]=d["margin-bottom"]=b(c.vspace),d["margin-left"]=d["margin-right"]=b(c.hspace),d["border-width"]=b(c.border),j.find("#style").value(p.serializeStyle(p.parseStyle(p.serializeStyle(d))))}}var j,k,l,m,n,o={},p=a.dom,q=a.selection.getNode(),r=a.settings.image_dimensions!==!1;k=p.getAttrib(q,"width"),l=p.getAttrib(q,"height"),"IMG"!=q.nodeName||q.getAttribute("data-mce-object")||q.getAttribute("data-mce-placeholder")?q=null:(o={src:p.getAttrib(q,"src"),alt:p.getAttrib(q,"alt"),"class":p.getAttrib(q,"class"),width:k,height:l},a.fire("wpLoadImageData",{imgData:{data:o,node:q}})),d&&(m={type:"listbox",label:"Image list",values:c(d,function(b){b.value=a.convertURL(b.value||b.url,"src")},[{text:"None",value:""}]),value:o.src&&a.convertURL(o.src,"src"),onselect:function(a){var b=j.find("#alt");(!b.value()||a.lastControl&&b.value()==a.lastControl.text())&&b.value(a.control.text()),j.find("#src").value(a.control.value()).fire("change")},onPostRender:function(){m=this}}),a.settings.image_class_list&&(n={name:"class",type:"listbox",label:"Class",values:c(a.settings.image_class_list,function(b){b.value&&(b.textStyle=function(){return a.formatter.getCssText({inline:"img",classes:[b.value]})})})});var s=[{name:"src",type:"filepicker",filetype:"image",label:"Source",autofocus:!0,onchange:h},m];a.settings.image_description!==!1&&s.push({name:"alt",type:"textbox",label:"Image description"}),r&&s.push({type:"container",label:"Dimensions",layout:"flex",direction:"row",align:"center",spacing:5,items:[{name:"width",type:"textbox",maxLength:5,size:3,onchange:e,ariaLabel:"Width"},{type:"label",text:"x"},{name:"height",type:"textbox",maxLength:5,size:3,onchange:e,ariaLabel:"Height"},{name:"constrain",type:"checkbox",checked:!0,text:"Constrain proportions"}]}),s.push(n),a.fire("wpLoadImageForm",{data:s}),a.settings.image_advtab?(q&&(o.hspace=g(q.style.marginLeft||q.style.marginRight),o.vspace=g(q.style.marginTop||q.style.marginBottom),o.border=g(q.style.borderWidth),o.style=a.dom.serializeStyle(a.dom.parseStyle(a.dom.getAttrib(q,"style")))),j=a.windowManager.open({title:"Insert/edit image",data:o,bodyType:"tabpanel",body:[{title:"General",type:"form",items:s},{title:"Advanced",type:"form",pack:"start",items:[{label:"Style",name:"style",type:"textbox"},{type:"form",layout:"grid",packV:"start",columns:2,padding:0,alignH:["left","right"],defaults:{type:"textbox",maxWidth:50,onchange:i},items:[{label:"Vertical space",name:"vspace"},{label:"Horizontal space",name:"hspace"},{label:"Border",name:"border"}]}]}],onSubmit:f})):j=a.windowManager.open({title:"Insert/edit image",data:o,body:s,onSubmit:f})}a.addButton("image",{icon:"image",tooltip:"Insert/edit image",onclick:d(e),stateSelector:"img:not([data-mce-object],[data-mce-placeholder])"}),a.addMenuItem("image",{icon:"image",text:"Insert image",onclick:d(e),context:"insert",prependToContext:!0}),a.addCommand("mceImage",d(e))});
  • trunk/src/wp-includes/js/tinymce/plugins/media/plugin.js

    r28768 r29203  
    2121    ];
    2222
     23    var embedChange = (tinymce.Env.ie && tinymce.Env.ie <= 8) ? 'onChange' : 'onInput';
     24
    2325    function guessMime(url) {
    2426        if (url.indexOf('.mp3') != -1) {
     
    6365    function showDialog() {
    6466        var win, width, height, data;
     67
    6568        var generalFormItems = [
    66             {name: 'source1', type: 'filepicker', filetype: 'media', size: 40, autofocus: true, label: 'Source'}
     69            {
     70                name: 'source1',
     71                type: 'filepicker',
     72                filetype: 'media',
     73                size: 40,
     74                autofocus: true,
     75                label: 'Source',
     76                onchange: function(e) {
     77                    tinymce.each(e.meta, function(value, key) {
     78                        win.find('#' + key).value(value);
     79                    });
     80                }
     81            }
    6782        ];
    6883
     
    117132        width = data.width;
    118133        height = data.height;
     134
     135        var embedTextBox = {
     136            id: 'mcemediasource',
     137            type: 'textbox',
     138            flex: 1,
     139            name: 'embed',
     140            value: getSource(),
     141            multiline: true,
     142            label: 'Source'
     143        };
     144
     145        function updateValueOnChange() {
     146            data = htmlToData( this.value() );
     147            this.parent().parent().fromJSON(data);
     148        }
     149
     150        embedTextBox[embedChange] = updateValueOnChange;
    119151
    120152        win = editor.windowManager.open({
     
    150182                            forId: 'mcemediasource'
    151183                        },
    152                         {
    153                             id: 'mcemediasource',
    154                             type: 'textbox',
    155                             flex: 1,
    156                             name: 'embed',
    157                             value: getSource(),
    158                             multiline: true,
    159                             label: 'Source'
    160                         }
     184                        embedTextBox
    161185                    ]
    162186                }
     
    421445                            height: data.height
    422446                        });
    423                     break;
     447                        break;
    424448                }
    425449
     
    437461                                });
    438462                            }
    439                         break;
     463                            break;
    440464
    441465                        case "iframe":
     
    443467                                src: data.source1
    444468                            });
    445                         break;
     469                            break;
    446470
    447471                        case "source":
     
    458482                                }
    459483                            }
    460                         break;
     484                            break;
    461485
    462486                        case "img":
     
    524548        var specialElements = editor.schema.getSpecialElements();
    525549        tinymce.each('video audio iframe object'.split(' '), function(name) {
    526             specialElements[name] = new RegExp('<\/' + name + '[^>]*>','gi');
     550            specialElements[name] = new RegExp('<\/' + name + '[^>]*>', 'gi');
    527551        });
    528552
  • trunk/src/wp-includes/js/tinymce/plugins/media/plugin.min.js

    r28768 r29203  
    1 tinymce.PluginManager.add("media",function(e,t){function i(e){return-1!=e.indexOf(".mp3")?"audio/mpeg":-1!=e.indexOf(".wav")?"audio/wav":-1!=e.indexOf(".mp4")?"video/mp4":-1!=e.indexOf(".webm")?"video/webm":-1!=e.indexOf(".ogg")?"video/ogg":-1!=e.indexOf(".swf")?"application/x-shockwave-flash":""}function r(t){var i=e.settings.media_scripts;if(i)for(var r=0;r<i.length;r++)if(-1!==t.indexOf(i[r].filter))return i[r]}function o(){function t(e){var t,a,c,s;t=i.find("#width")[0],a=i.find("#height")[0],c=t.value(),s=a.value(),i.find("#constrain")[0].checked()&&r&&o&&c&&s&&(e.control==t?(s=Math.round(c/r*s),a.value(s)):(c=Math.round(s/o*c),t.value(c))),r=c,o=s}var i,r,o,m,d=[{name:"source1",type:"filepicker",filetype:"media",size:40,autofocus:!0,label:"Source"}];e.settings.media_alt_source!==!1&&d.push({name:"source2",type:"filepicker",filetype:"media",size:40,label:"Alternative source"}),e.settings.media_poster!==!1&&d.push({name:"poster",type:"filepicker",filetype:"image",size:40,label:"Poster"}),e.settings.media_dimensions!==!1&&d.push({type:"container",label:"Dimensions",layout:"flex",align:"center",spacing:5,items:[{name:"width",type:"textbox",maxLength:3,size:3,onchange:t},{type:"label",text:"x"},{name:"height",type:"textbox",maxLength:3,size:3,onchange:t},{name:"constrain",type:"checkbox",checked:!0,text:"Constrain proportions"}]}),m=n(e.selection.getNode()),r=m.width,o=m.height,i=e.windowManager.open({title:"Insert/edit video",data:m,bodyType:"tabpanel",body:[{title:"General",type:"form",onShowTab:function(){m=s(this.next().find("#embed").value()),this.fromJSON(m)},items:d},{title:"Embed",type:"panel",layout:"flex",direction:"column",align:"stretch",padding:10,spacing:10,onShowTab:function(){this.find("#embed").value(c(this.parent().toJSON()))},items:[{type:"label",text:"Paste your embed code below:",forId:"mcemediasource"},{id:"mcemediasource",type:"textbox",flex:1,name:"embed",value:a(),multiline:!0,label:"Source"}]}],onSubmit:function(){var t,i,r,o;for(t=e.dom.select("img[data-mce-object]"),e.insertContent(c(this.toJSON())),i=e.dom.select("img[data-mce-object]"),r=0;r<t.length;r++)for(o=i.length-1;o>=0;o--)t[r]==i[o]&&i.splice(o,1);e.selection.select(i[0]),e.nodeChanged()}})}function a(){var t=e.selection.getNode();return t.getAttribute("data-mce-object")?e.selection.getContent():void 0}function c(o){var a="";if(!o.source1&&(tinymce.extend(o,s(o.embed)),!o.source1))return"";if(o.source2||(o.source2=""),o.poster||(o.poster=""),o.source1=e.convertURL(o.source1,"source"),o.source2=e.convertURL(o.source2,"source"),o.source1mime=i(o.source1),o.source2mime=i(o.source2),o.poster=e.convertURL(o.poster,"poster"),o.flashPlayerUrl=e.convertURL(t+"/moxieplayer.swf","movie"),tinymce.each(d,function(e){var t,i,r;if(t=e.regex.exec(o.source1)){for(r=e.url,i=0;t[i];i++)r=r.replace("$"+i,function(){return t[i]});o.source1=r,o.type=e.type,o.width=o.width||e.w,o.height=o.height||e.h}}),o.embed)a=m(o.embed,o,!0);else{var c=r(o.source1);c&&(o.type="script",o.width=c.width,o.height=c.height),o.width=o.width||300,o.height=o.height||150,tinymce.each(o,function(t,i){o[i]=e.dom.encode(t)}),"iframe"==o.type?a+='<iframe src="'+o.source1+'" width="'+o.width+'" height="'+o.height+'"></iframe>':"application/x-shockwave-flash"==o.source1mime?(a+='<object data="'+o.source1+'" width="'+o.width+'" height="'+o.height+'" type="application/x-shockwave-flash">',o.poster&&(a+='<img src="'+o.poster+'" width="'+o.width+'" height="'+o.height+'" />'),a+="</object>"):-1!=o.source1mime.indexOf("audio")?e.settings.audio_template_callback?a=e.settings.audio_template_callback(o):a+='<audio controls="controls" src="'+o.source1+'">'+(o.source2?'\n<source src="'+o.source2+'"'+(o.source2mime?' type="'+o.source2mime+'"':"")+" />\n":"")+"</audio>":"script"==o.type?a+='<script src="'+o.source1+'"></script>':a=e.settings.video_template_callback?e.settings.video_template_callback(o):'<video width="'+o.width+'" height="'+o.height+'"'+(o.poster?' poster="'+o.poster+'"':"")+' controls="controls">\n<source src="'+o.source1+'"'+(o.source1mime?' type="'+o.source1mime+'"':"")+" />\n"+(o.source2?'<source src="'+o.source2+'"'+(o.source2mime?' type="'+o.source2mime+'"':"")+" />\n":"")+"</video>"}return a}function s(e){var t={};return new tinymce.html.SaxParser({validate:!1,allow_conditional_comments:!0,special:"script,noscript",start:function(e,i){if(t.source1||"param"!=e||(t.source1=i.map.movie),("iframe"==e||"object"==e||"embed"==e||"video"==e||"audio"==e)&&(t.type||(t.type=e),t=tinymce.extend(i.map,t)),"script"==e){var o=r(i.map.src);if(!o)return;t={type:"script",source1:i.map.src,width:o.width,height:o.height}}"source"==e&&(t.source1?t.source2||(t.source2=i.map.src):t.source1=i.map.src),"img"!=e||t.poster||(t.poster=i.map.src)}}).parse(e),t.source1=t.source1||t.src||t.data,t.source2=t.source2||"",t.poster=t.poster||"",t}function n(t){return t.getAttribute("data-mce-object")?s(e.serializer.serialize(t,{selection:!0})):{}}function m(e,t,i){function r(e,t){var i,r,o,a;for(i in t)if(o=""+t[i],e.map[i])for(r=e.length;r--;)a=e[r],a.name==i&&(o?(e.map[i]=o,a.value=o):(delete e.map[i],e.splice(r,1)));else o&&(e.push({name:i,value:o}),e.map[i]=o)}var o,a=new tinymce.html.Writer,c=0;return new tinymce.html.SaxParser({validate:!1,allow_conditional_comments:!0,special:"script,noscript",comment:function(e){a.comment(e)},cdata:function(e){a.cdata(e)},text:function(e,t){a.text(e,t)},start:function(e,s,n){switch(e){case"video":case"object":case"embed":case"img":case"iframe":r(s,{width:t.width,height:t.height})}if(i)switch(e){case"video":r(s,{poster:t.poster,src:""}),t.source2&&r(s,{src:""});break;case"iframe":r(s,{src:t.source1});break;case"source":if(c++,2>=c&&(r(s,{src:t["source"+c],type:t["source"+c+"mime"]}),!t["source"+c]))return;break;case"img":if(!t.poster)return;o=!0}a.start(e,s,n)},end:function(e){if("video"==e&&i)for(var s=1;2>=s;s++)if(t["source"+s]){var n=[];n.map={},s>c&&(r(n,{src:t["source"+s],type:t["source"+s+"mime"]}),a.start("source",n,!0))}if(t.poster&&"object"==e&&i&&!o){var m=[];m.map={},r(m,{src:t.poster,width:t.width,height:t.height}),a.start("img",m,!0)}a.end(e)}},new tinymce.html.Schema({})).parse(e),a.getContent()}var d=[{regex:/youtu\.be\/([\w\-.]+)/,type:"iframe",w:425,h:350,url:"//www.youtube.com/embed/$1"},{regex:/youtube\.com(.+)v=([^&]+)/,type:"iframe",w:425,h:350,url:"//www.youtube.com/embed/$2"},{regex:/vimeo\.com\/([0-9]+)/,type:"iframe",w:425,h:350,url:"//player.vimeo.com/video/$1?title=0&byline=0&portrait=0&color=8dc7dc"},{regex:/maps\.google\.([a-z]{2,3})\/maps\/(.+)msid=(.+)/,type:"iframe",w:425,h:350,url:'//maps.google.com/maps/ms?msid=$2&output=embed"'}];e.on("ResolveName",function(e){var t;1==e.target.nodeType&&(t=e.target.getAttribute("data-mce-object"))&&(e.name=t)}),e.on("preInit",function(){var t=e.schema.getSpecialElements();tinymce.each("video audio iframe object".split(" "),function(e){t[e]=new RegExp("</"+e+"[^>]*>","gi")});var i=e.schema.getBoolAttrs();tinymce.each("webkitallowfullscreen mozallowfullscreen allowfullscreen".split(" "),function(e){i[e]={}}),e.parser.addNodeFilter("iframe,video,audio,object,embed,script",function(t,i){for(var o,a,c,s,n,m,d,u,l=t.length;l--;)if(a=t[l],a.parent&&("script"!=a.name||(u=r(a.attr("src"))))){for(c=new tinymce.html.Node("img",1),c.shortEnded=!0,u&&(u.width&&a.attr("width",u.width.toString()),u.height&&a.attr("height",u.height.toString())),m=a.attributes,o=m.length;o--;)s=m[o].name,n=m[o].value,"width"!==s&&"height"!==s&&"style"!==s&&(("data"==s||"src"==s)&&(n=e.convertURL(n,s)),c.attr("data-mce-p-"+s,n));d=a.firstChild&&a.firstChild.value,d&&(c.attr("data-mce-html",escape(d)),c.firstChild=null),c.attr({width:a.attr("width")||"300",height:a.attr("height")||("audio"==i?"30":"150"),style:a.attr("style"),src:tinymce.Env.transparentSrc,"data-mce-object":i,"class":"mce-object mce-object-"+i}),a.replace(c)}}),e.serializer.addAttributeFilter("data-mce-object",function(e,t){for(var i,r,o,a,c,s,n,m=e.length;m--;)if(i=e[m],i.parent){for(n=i.attr(t),r=new tinymce.html.Node(n,1),"audio"!=n&&"script"!=n&&r.attr({width:i.attr("width"),height:i.attr("height")}),r.attr({style:i.attr("style")}),a=i.attributes,o=a.length;o--;){var d=a[o].name;0===d.indexOf("data-mce-p-")&&r.attr(d.substr(11),a[o].value)}"script"==n&&r.attr("type","text/javascript"),c=i.attr("data-mce-html"),c&&(s=new tinymce.html.Node("#text",3),s.raw=!0,s.value=unescape(c),r.append(s)),i.replace(r)}})}),e.on("ObjectSelected",function(e){var t=e.target.getAttribute("data-mce-object");("audio"==t||"script"==t)&&e.preventDefault()}),e.on("objectResized",function(e){var t,i=e.target;i.getAttribute("data-mce-object")&&(t=i.getAttribute("data-mce-html"),t&&(t=unescape(t),i.setAttribute("data-mce-html",escape(m(t,{width:e.width,height:e.height})))))}),e.addButton("media",{tooltip:"Insert/edit video",onclick:o,stateSelector:["img[data-mce-object=video]","img[data-mce-object=iframe]"]}),e.addMenuItem("media",{icon:"media",text:"Insert video",onclick:o,context:"insert",prependToContext:!0})});
     1tinymce.PluginManager.add("media",function(e,t){function i(e){return-1!=e.indexOf(".mp3")?"audio/mpeg":-1!=e.indexOf(".wav")?"audio/wav":-1!=e.indexOf(".mp4")?"video/mp4":-1!=e.indexOf(".webm")?"video/webm":-1!=e.indexOf(".ogg")?"video/ogg":-1!=e.indexOf(".swf")?"application/x-shockwave-flash":""}function r(t){var i=e.settings.media_scripts;if(i)for(var r=0;r<i.length;r++)if(-1!==t.indexOf(i[r].filter))return i[r]}function o(){function t(e){var t,i,a,c;t=r.find("#width")[0],i=r.find("#height")[0],a=t.value(),c=i.value(),r.find("#constrain")[0].checked()&&o&&m&&a&&c&&(e.control==t?(c=Math.round(a/o*c),i.value(c)):(a=Math.round(c/m*a),t.value(a))),o=a,m=c}function i(){u=n(this.value()),this.parent().parent().fromJSON(u)}var r,o,m,u,l=[{name:"source1",type:"filepicker",filetype:"media",size:40,autofocus:!0,label:"Source",onchange:function(e){tinymce.each(e.meta,function(e,t){r.find("#"+t).value(e)})}}];e.settings.media_alt_source!==!1&&l.push({name:"source2",type:"filepicker",filetype:"media",size:40,label:"Alternative source"}),e.settings.media_poster!==!1&&l.push({name:"poster",type:"filepicker",filetype:"image",size:40,label:"Poster"}),e.settings.media_dimensions!==!1&&l.push({type:"container",label:"Dimensions",layout:"flex",align:"center",spacing:5,items:[{name:"width",type:"textbox",maxLength:3,size:3,onchange:t},{type:"label",text:"x"},{name:"height",type:"textbox",maxLength:3,size:3,onchange:t},{name:"constrain",type:"checkbox",checked:!0,text:"Constrain proportions"}]}),u=s(e.selection.getNode()),o=u.width,m=u.height;var h={id:"mcemediasource",type:"textbox",flex:1,name:"embed",value:a(),multiline:!0,label:"Source"};h[d]=i,r=e.windowManager.open({title:"Insert/edit video",data:u,bodyType:"tabpanel",body:[{title:"General",type:"form",onShowTab:function(){u=n(this.next().find("#embed").value()),this.fromJSON(u)},items:l},{title:"Embed",type:"panel",layout:"flex",direction:"column",align:"stretch",padding:10,spacing:10,onShowTab:function(){this.find("#embed").value(c(this.parent().toJSON()))},items:[{type:"label",text:"Paste your embed code below:",forId:"mcemediasource"},h]}],onSubmit:function(){var t,i,r,o;for(t=e.dom.select("img[data-mce-object]"),e.insertContent(c(this.toJSON())),i=e.dom.select("img[data-mce-object]"),r=0;r<t.length;r++)for(o=i.length-1;o>=0;o--)t[r]==i[o]&&i.splice(o,1);e.selection.select(i[0]),e.nodeChanged()}})}function a(){var t=e.selection.getNode();return t.getAttribute("data-mce-object")?e.selection.getContent():void 0}function c(o){var a="";if(!o.source1&&(tinymce.extend(o,n(o.embed)),!o.source1))return"";if(o.source2||(o.source2=""),o.poster||(o.poster=""),o.source1=e.convertURL(o.source1,"source"),o.source2=e.convertURL(o.source2,"source"),o.source1mime=i(o.source1),o.source2mime=i(o.source2),o.poster=e.convertURL(o.poster,"poster"),o.flashPlayerUrl=e.convertURL(t+"/moxieplayer.swf","movie"),tinymce.each(u,function(e){var t,i,r;if(t=e.regex.exec(o.source1)){for(r=e.url,i=0;t[i];i++)r=r.replace("$"+i,function(){return t[i]});o.source1=r,o.type=e.type,o.width=o.width||e.w,o.height=o.height||e.h}}),o.embed)a=m(o.embed,o,!0);else{var c=r(o.source1);c&&(o.type="script",o.width=c.width,o.height=c.height),o.width=o.width||300,o.height=o.height||150,tinymce.each(o,function(t,i){o[i]=e.dom.encode(t)}),"iframe"==o.type?a+='<iframe src="'+o.source1+'" width="'+o.width+'" height="'+o.height+'"></iframe>':"application/x-shockwave-flash"==o.source1mime?(a+='<object data="'+o.source1+'" width="'+o.width+'" height="'+o.height+'" type="application/x-shockwave-flash">',o.poster&&(a+='<img src="'+o.poster+'" width="'+o.width+'" height="'+o.height+'" />'),a+="</object>"):-1!=o.source1mime.indexOf("audio")?e.settings.audio_template_callback?a=e.settings.audio_template_callback(o):a+='<audio controls="controls" src="'+o.source1+'">'+(o.source2?'\n<source src="'+o.source2+'"'+(o.source2mime?' type="'+o.source2mime+'"':"")+" />\n":"")+"</audio>":"script"==o.type?a+='<script src="'+o.source1+'"></script>':a=e.settings.video_template_callback?e.settings.video_template_callback(o):'<video width="'+o.width+'" height="'+o.height+'"'+(o.poster?' poster="'+o.poster+'"':"")+' controls="controls">\n<source src="'+o.source1+'"'+(o.source1mime?' type="'+o.source1mime+'"':"")+" />\n"+(o.source2?'<source src="'+o.source2+'"'+(o.source2mime?' type="'+o.source2mime+'"':"")+" />\n":"")+"</video>"}return a}function n(e){var t={};return new tinymce.html.SaxParser({validate:!1,allow_conditional_comments:!0,special:"script,noscript",start:function(e,i){if(t.source1||"param"!=e||(t.source1=i.map.movie),("iframe"==e||"object"==e||"embed"==e||"video"==e||"audio"==e)&&(t.type||(t.type=e),t=tinymce.extend(i.map,t)),"script"==e){var o=r(i.map.src);if(!o)return;t={type:"script",source1:i.map.src,width:o.width,height:o.height}}"source"==e&&(t.source1?t.source2||(t.source2=i.map.src):t.source1=i.map.src),"img"!=e||t.poster||(t.poster=i.map.src)}}).parse(e),t.source1=t.source1||t.src||t.data,t.source2=t.source2||"",t.poster=t.poster||"",t}function s(t){return t.getAttribute("data-mce-object")?n(e.serializer.serialize(t,{selection:!0})):{}}function m(e,t,i){function r(e,t){var i,r,o,a;for(i in t)if(o=""+t[i],e.map[i])for(r=e.length;r--;)a=e[r],a.name==i&&(o?(e.map[i]=o,a.value=o):(delete e.map[i],e.splice(r,1)));else o&&(e.push({name:i,value:o}),e.map[i]=o)}var o,a=new tinymce.html.Writer,c=0;return new tinymce.html.SaxParser({validate:!1,allow_conditional_comments:!0,special:"script,noscript",comment:function(e){a.comment(e)},cdata:function(e){a.cdata(e)},text:function(e,t){a.text(e,t)},start:function(e,n,s){switch(e){case"video":case"object":case"embed":case"img":case"iframe":r(n,{width:t.width,height:t.height})}if(i)switch(e){case"video":r(n,{poster:t.poster,src:""}),t.source2&&r(n,{src:""});break;case"iframe":r(n,{src:t.source1});break;case"source":if(c++,2>=c&&(r(n,{src:t["source"+c],type:t["source"+c+"mime"]}),!t["source"+c]))return;break;case"img":if(!t.poster)return;o=!0}a.start(e,n,s)},end:function(e){if("video"==e&&i)for(var n=1;2>=n;n++)if(t["source"+n]){var s=[];s.map={},n>c&&(r(s,{src:t["source"+n],type:t["source"+n+"mime"]}),a.start("source",s,!0))}if(t.poster&&"object"==e&&i&&!o){var m=[];m.map={},r(m,{src:t.poster,width:t.width,height:t.height}),a.start("img",m,!0)}a.end(e)}},new tinymce.html.Schema({})).parse(e),a.getContent()}var u=[{regex:/youtu\.be\/([\w\-.]+)/,type:"iframe",w:425,h:350,url:"//www.youtube.com/embed/$1"},{regex:/youtube\.com(.+)v=([^&]+)/,type:"iframe",w:425,h:350,url:"//www.youtube.com/embed/$2"},{regex:/vimeo\.com\/([0-9]+)/,type:"iframe",w:425,h:350,url:"//player.vimeo.com/video/$1?title=0&byline=0&portrait=0&color=8dc7dc"},{regex:/maps\.google\.([a-z]{2,3})\/maps\/(.+)msid=(.+)/,type:"iframe",w:425,h:350,url:'//maps.google.com/maps/ms?msid=$2&output=embed"'}],d=tinymce.Env.ie&&tinymce.Env.ie<=8?"onChange":"onInput";e.on("ResolveName",function(e){var t;1==e.target.nodeType&&(t=e.target.getAttribute("data-mce-object"))&&(e.name=t)}),e.on("preInit",function(){var t=e.schema.getSpecialElements();tinymce.each("video audio iframe object".split(" "),function(e){t[e]=new RegExp("</"+e+"[^>]*>","gi")});var i=e.schema.getBoolAttrs();tinymce.each("webkitallowfullscreen mozallowfullscreen allowfullscreen".split(" "),function(e){i[e]={}}),e.parser.addNodeFilter("iframe,video,audio,object,embed,script",function(t,i){for(var o,a,c,n,s,m,u,d,l=t.length;l--;)if(a=t[l],a.parent&&("script"!=a.name||(d=r(a.attr("src"))))){for(c=new tinymce.html.Node("img",1),c.shortEnded=!0,d&&(d.width&&a.attr("width",d.width.toString()),d.height&&a.attr("height",d.height.toString())),m=a.attributes,o=m.length;o--;)n=m[o].name,s=m[o].value,"width"!==n&&"height"!==n&&"style"!==n&&(("data"==n||"src"==n)&&(s=e.convertURL(s,n)),c.attr("data-mce-p-"+n,s));u=a.firstChild&&a.firstChild.value,u&&(c.attr("data-mce-html",escape(u)),c.firstChild=null),c.attr({width:a.attr("width")||"300",height:a.attr("height")||("audio"==i?"30":"150"),style:a.attr("style"),src:tinymce.Env.transparentSrc,"data-mce-object":i,"class":"mce-object mce-object-"+i}),a.replace(c)}}),e.serializer.addAttributeFilter("data-mce-object",function(e,t){for(var i,r,o,a,c,n,s,m=e.length;m--;)if(i=e[m],i.parent){for(s=i.attr(t),r=new tinymce.html.Node(s,1),"audio"!=s&&"script"!=s&&r.attr({width:i.attr("width"),height:i.attr("height")}),r.attr({style:i.attr("style")}),a=i.attributes,o=a.length;o--;){var u=a[o].name;0===u.indexOf("data-mce-p-")&&r.attr(u.substr(11),a[o].value)}"script"==s&&r.attr("type","text/javascript"),c=i.attr("data-mce-html"),c&&(n=new tinymce.html.Node("#text",3),n.raw=!0,n.value=unescape(c),r.append(n)),i.replace(r)}})}),e.on("ObjectSelected",function(e){var t=e.target.getAttribute("data-mce-object");("audio"==t||"script"==t)&&e.preventDefault()}),e.on("objectResized",function(e){var t,i=e.target;i.getAttribute("data-mce-object")&&(t=i.getAttribute("data-mce-html"),t&&(t=unescape(t),i.setAttribute("data-mce-html",escape(m(t,{width:e.width,height:e.height})))))}),e.addButton("media",{tooltip:"Insert/edit video",onclick:o,stateSelector:["img[data-mce-object=video]","img[data-mce-object=iframe]"]}),e.addMenuItem("media",{icon:"media",text:"Insert video",onclick:o,context:"insert",prependToContext:!0})});
  • trunk/src/wp-includes/js/tinymce/plugins/paste/plugin.js

    r28932 r29203  
    171171        }
    172172
     173        html = filter(html, [
     174            /<!\[[^\]]+\]>/g // Conditional comments
     175        ]);
     176
    173177        walk(domParser.parse(html));
    174178
     
    183187     */
    184188    function trimHtml(html) {
    185         var trimSpaces = function(all, s1, s2) {
     189        function trimSpaces(all, s1, s2) {
    186190            // WebKit &nbsp; meant to preserve multiple spaces but instead inserted around all inline tags,
    187             // including the spans with inline stypes created on paste
     191            // including the spans with inline styles created on paste
    188192            if (!s1 && !s2) {
    189193                return ' ';
     
    191195
    192196            return '\u00a0';
    193         };
     197        }
    194198
    195199        html = filter(html, [
     
    536540
    537541        function getCaretRangeFromEvent(e) {
    538             var doc = editor.getDoc(), rng;
     542            var doc = editor.getDoc(), rng, point;
    539543
    540544            if (doc.caretPositionFromPoint) {
    541                 var point = doc.caretPositionFromPoint(e.clientX, e.clientY);
     545                point = doc.caretPositionFromPoint(e.clientX, e.clientY);
    542546                rng = doc.createRange();
    543547                rng.setStart(point.offsetNode, point.offset);
     
    545549            } else if (doc.caretRangeFromPoint) {
    546550                rng = doc.caretRangeFromPoint(e.clientX, e.clientY);
     551            } else if (doc.body.createTextRange) {
     552                rng = doc.body.createTextRange();
     553
     554                try {
     555                    rng.moveToPoint(e.clientX, e.clientY);
     556                    rng.collapse(true);
     557                } catch (ex) {
     558                    // Append to top or bottom depending on drop location
     559                    rng.collapse(e.clientY < doc.body.clientHeight);
     560                }
    547561            }
    548562
     
    836850                var currentListNode, prevListNode, lastLevel = 1;
    837851
    838                 function convertParagraphToLi(paragraphNode, listStartTextNode, listName, start) {
     852                function getText(node) {
     853                    var txt = '';
     854
     855                    if (node.type === 3) {
     856                        return node.value;
     857                    }
     858
     859                    if ((node = node.firstChild)) {
     860                        do {
     861                            txt += getText(node);
     862                        } while ((node = node.next));
     863                    }
     864
     865                    return txt;
     866                }
     867
     868                function trimListStart(node, regExp) {
     869                    if (node.type === 3) {
     870                        if (regExp.test(node.value)) {
     871                            node.value = node.value.replace(regExp, '');
     872                            return false;
     873                        }
     874                    }
     875
     876                    if ((node = node.firstChild)) {
     877                        do {
     878                            if (!trimListStart(node, regExp)) {
     879                                return false;
     880                            }
     881                        } while ((node = node.next));
     882                    }
     883
     884                    return true;
     885                }
     886
     887                function removeIgnoredNodes(node) {
     888                    if (node._listIgnore) {
     889                        node.remove();
     890                        return;
     891                    }
     892
     893                    if ((node = node.firstChild)) {
     894                        do {
     895                            removeIgnoredNodes(node);
     896                        } while ((node = node.next));
     897                    }
     898                }
     899
     900                function convertParagraphToLi(paragraphNode, listName, start) {
    839901                    var level = paragraphNode._listLevel || lastLevel;
    840902
     
    867929
    868930                    paragraphNode.name = 'li';
    869                     listStartTextNode.value = '';
    870 
    871                     var nextNode = listStartTextNode.next;
    872                     if (nextNode && nextNode.type == 3) {
    873                         nextNode.value = nextNode.value.replace(/^\u00a0+/, '');
    874                     }
    875931
    876932                    // Append list to previous list if it exists
     
    880936
    881937                    lastLevel = level;
     938
     939                    // Remove start of list item "1. " or "&middot; " etc
     940                    removeIgnoredNodes(paragraphNode);
     941                    trimListStart(paragraphNode, /^\u00a0+/);
     942                    trimListStart(paragraphNode, /^\s*([\u2022\u00b7\u00a7\u00d8\u25CF]|\w+\.)/);
     943                    trimListStart(paragraphNode, /^\u00a0+/);
    882944                }
    883945
     
    889951                    if (node.name == 'p' && node.firstChild) {
    890952                        // Find first text node in paragraph
    891                         var nodeText = '';
     953                        var nodeText = getText(node);
    892954                        var listStartTextNode = node.firstChild;
    893955
    894                         while (listStartTextNode) {
    895                             nodeText = listStartTextNode.value;
    896                             if (nodeText) {
    897                                 break;
    898                             }
    899 
    900                             listStartTextNode = listStartTextNode.firstChild;
    901                         }
    902 
    903956                        // Detect unordered lists look for bullets
    904                         if (/^\s*[\u2022\u00b7\u00a7\u00d8\u25CF]\s*$/.test(nodeText)) {
    905                             convertParagraphToLi(node, listStartTextNode, 'ul');
     957                        if (/^[\s\u00a0]*[\u2022\u00b7\u00a7\u00d8\u25CF]\s*/.test(nodeText)) {
     958                            convertParagraphToLi(node, 'ul');
    906959                            continue;
    907960                        }
    908961
    909962                        // Detect ordered lists 1., a. or ixv.
    910                         if (/^\s*\w+\.$/.test(nodeText)) {
     963                        if (/^[\s\u00a0]*\w+\./.test(nodeText) && !/^[\s\u00a0]*\w+\.\s*[^\s]+/.test(listStartTextNode.value)) {
    911964                            // Parse OL start number
    912965                            var matches = /([0-9])\./.exec(nodeText);
     
    916969                            }
    917970
    918                             convertParagraphToLi(node, listStartTextNode, 'ol', start);
     971                            convertParagraphToLi(node, 'ol', start);
    919972                            continue;
    920973                        }
    921974
     975                        // Convert paragraphs marked as lists but doesn't look like anything
     976                        if (node._listLevel) {
     977                            convertParagraphToLi(node, 'ul', 1);
     978                            continue;
     979                        }
     980
    922981                        currentListNode = null;
    923982                    }
     
    926985
    927986            function filterStyles(node, styleValue) {
    928                 var outputStyles = {}, styles = editor.dom.parseStyle(styleValue);
    929 
    930                 // Parse out list indent level for lists
    931                 if (node.name === 'p') {
    932                     var matches = /mso-list:\w+ \w+([0-9]+)/.exec(styleValue);
    933 
    934                     if (matches) {
    935                         node._listLevel = parseInt(matches[1], 10);
    936                     }
    937                 }
     987                var outputStyles = {}, matches, styles = editor.dom.parseStyle(styleValue);
    938988
    939989                Tools.each(styles, function(value, name) {
    940990                    // Convert various MS styles to W3C styles
    941991                    switch (name) {
     992                        case 'mso-list':
     993                            // Parse out list indent level for lists
     994                            matches = /\w+ \w+([0-9]+)/i.exec(styleValue);
     995                            if (matches) {
     996                                node._listLevel = parseInt(matches[1], 10);
     997                            }
     998
     999                            // Remove these nodes <span style="mso-list:Ignore">o</span>
     1000                            // Since the span gets removed we mark the text node and the span
     1001                            if (/Ignore/i.test(value) && node.firstChild) {
     1002                                node._listIgnore = true;
     1003                                node.firstChild._listIgnore = true;
     1004                            }
     1005
     1006                            break;
     1007
    9421008                        case "horiz-align":
    9431009                            name = "text-align";
     
    10971163
    10981164                        className = node.attr('class');
    1099                         if (/^(MsoCommentReference|MsoCommentText|msoDel)$/i.test(className)) {
     1165                        if (/^(MsoCommentReference|MsoCommentText|msoDel|MsoCaption)$/i.test(className)) {
    11001166                            node.remove();
    11011167                        }
     
    13051371                    }
    13061372
    1307                     return '';
     1373                    return before + after;
    13081374                });
    13091375            } else {
     
    14441510});
    14451511
    1446 expose(["tinymce/pasteplugin/Utils","tinymce/pasteplugin/Clipboard","tinymce/pasteplugin/WordFilter","tinymce/pasteplugin/Quirks","tinymce/pasteplugin/Plugin"]);
     1512expose(["tinymce/pasteplugin/Utils","tinymce/pasteplugin/WordFilter"]);
    14471513})(this);
  • trunk/src/wp-includes/js/tinymce/plugins/paste/plugin.min.js

    r28932 r29203  
    1 !function(e,t){"use strict";function n(e,t){for(var n,i=[],r=0;r<e.length;++r){if(n=s[e[r]]||a(e[r]),!n)throw"module definition dependecy not found: "+e[r];i.push(n)}t.apply(null,i)}function i(e,i,r){if("string"!=typeof e)throw"invalid module definition, module id must be defined and be a string";if(i===t)throw"invalid module definition, dependencies must be specified";if(r===t)throw"invalid module definition, definition function must be specified";n(i,function(){s[e]=r.apply(null,arguments)})}function r(e){return!!s[e]}function a(t){for(var n=e,i=t.split(/[.\/]/),r=0;r<i.length;++r){if(!n[i[r]])return;n=n[i[r]]}return n}function o(n){for(var i=0;i<n.length;i++){for(var r=e,a=n[i],o=a.split(/[.\/]/),l=0;l<o.length-1;++l)r[o[l]]===t&&(r[o[l]]={}),r=r[o[l]];r[o[o.length-1]]=s[a]}}var s={},l="tinymce/pasteplugin/Utils",c="tinymce/util/Tools",d="tinymce/html/DomParser",f="tinymce/html/Schema",u="tinymce/pasteplugin/Clipboard",p="tinymce/Env",m="tinymce/util/VK",g="tinymce/pasteplugin/WordFilter",v="tinymce/html/Serializer",h="tinymce/html/Node",b="tinymce/pasteplugin/Quirks",y="tinymce/pasteplugin/Plugin",w="tinymce/PluginManager";i(l,[c,d,f],function(e,t,n){function i(t,n){return e.each(n,function(e){t=e.constructor==RegExp?t.replace(e,""):t.replace(e[0],e[1])}),t}function r(i){function r(e){var t=e.name,n=e;if("br"===t)return void(s+="\n");if(l[t]&&(s+=" "),c[t])return void(s+=" ");if(3==e.type&&(s+=e.value),!e.shortEnded&&(e=e.firstChild))do r(e);while(e=e.next);d[t]&&n.next&&(s+="\n","p"==t&&(s+="\n"))}var a=new n,o=new t({},a),s="",l=a.getShortEndedElements(),c=e.makeMap("script noscript style textarea video audio iframe object"," "),d=a.getBlockElements();return r(o.parse(i)),s}function a(e){var t=function(e,t,n){return t||n?"\u00a0":" "};return e=i(e,[/^[\s\S]*<body[^>]*>\s*|\s*<\/body[^>]*>[\s\S]*$/g,/<!--StartFragment-->|<!--EndFragment-->/g,[/( ?)<span class="Apple-converted-space">\u00a0<\/span>( ?)/g,t],/<br>$/i])}return{filter:i,innerText:r,trimHtml:a}}),i(u,[p,m,l],function(e,t,n){return function(i){function r(e){var t,n=i.dom;if(t=i.fire("BeforePastePreProcess",{content:e}),t=i.fire("PastePreProcess",t),e=t.content,!t.isDefaultPrevented()){if(i.hasEventListeners("PastePostProcess")&&!t.isDefaultPrevented()){var r=n.add(i.getBody(),"div",{style:"display:none"},e);t=i.fire("PastePostProcess",{node:r}),n.remove(r),e=t.node.innerHTML}t.isDefaultPrevented()||i.insertContent(e,{merge:i.settings.paste_merge_formats!==!1})}}function a(e){e=i.dom.encode(e).replace(/\r\n/g,"\n");var t=i.dom.getParent(i.selection.getStart(),i.dom.isBlock),a=i.settings.forced_root_block,o;a&&(o=i.dom.createHTML(a,i.settings.forced_root_block_attrs),o=o.substr(0,o.length-3)+">"),t&&/^(PRE|DIV)$/.test(t.nodeName)||!a?e=n.filter(e,[[/\n/g,"<br>"]]):(e=n.filter(e,[[/\n\n/g,"</p>"+o],[/^(.*<\/p>)(<p>)$/,o+"$1"],[/\n/g,"<br />"]]),-1!=e.indexOf("<p>")&&(e=o+e)),r(e)}function o(){var t=i.dom,n=i.getBody(),r=i.dom.getViewPort(i.getWin()),a=r.y,o=20,s;if(y=i.selection.getRng(),i.inline&&(s=i.selection.getScrollContainer(),s&&s.scrollTop>0&&(a=s.scrollTop)),y.getClientRects){var l=y.getClientRects();if(l.length)o=a+(l[0].top-t.getPos(n).y);else{o=a;var c=y.startContainer;c&&(3==c.nodeType&&c.parentNode!=n&&(c=c.parentNode),1==c.nodeType&&(o=t.getPos(c,s||n).y))}}b=t.add(i.getBody(),"div",{id:"mcepastebin",contentEditable:!0,"data-mce-bogus":"all",style:"position: absolute; top: "+o+"px;width: 10px; height: 10px; overflow: hidden; opacity: 0"},x),(e.ie||e.gecko)&&t.setStyle(b,"left","rtl"==t.getStyle(n,"direction",!0)?65535:-65535),t.bind(b,"beforedeactivate focusin focusout",function(e){e.stopPropagation()}),b.focus(),i.selection.select(b,!0)}function s(){if(b){for(var e;e=i.dom.get("mcepastebin");)i.dom.remove(e),i.dom.unbind(e);y&&i.selection.setRng(y)}b=y=null}function l(){var e="",t,n,r,a;for(t=i.dom.select("div[id=mcepastebin]"),n=0;n<t.length;n++)r=t[n],r.firstChild&&"mcepastebin"==r.firstChild.id&&(r=r.firstChild),a=r.innerHTML,e!=x&&(e+=a);return e}function c(e){var t={};if(e&&e.types){var n=e.getData("Text");n&&n.length>0&&(t["text/plain"]=n);for(var i=0;i<e.types.length;i++){var r=e.types[i];t[r]=e.getData(r)}}return t}function d(e){return c(e.clipboardData||i.getDoc().dataTransfer)}function f(e,t){function n(n){function a(){t&&(i.selection.setRng(t),t=null),r('<img src="'+l.result+'">')}var o,s,l;if(n)for(o=0;o<n.length;o++)if(s=n[o],/^image\/(jpeg|png|gif)$/.test(s.type))return l=new FileReader,l.onload=a,l.readAsDataURL(s.getAsFile?s.getAsFile():s),e.preventDefault(),!0}var a=e.clipboardData||e.dataTransfer;return i.settings.paste_data_images&&a?n(a.items)||n(a.files):void 0}function u(e){var t=e.clipboardData;return-1!=navigator.userAgent.indexOf("Android")&&t&&t.items&&0===t.items.length}function p(e){var t=i.getDoc(),n;if(t.caretPositionFromPoint){var r=t.caretPositionFromPoint(e.clientX,e.clientY);n=t.createRange(),n.setStart(r.offsetNode,r.offset),n.collapse(!0)}else t.caretRangeFromPoint&&(n=t.caretRangeFromPoint(e.clientX,e.clientY));return n}function m(e,t){return t in e&&e[t].length>0}function g(e){return t.metaKeyPressed(e)&&86==e.keyCode||e.shiftKey&&45==e.keyCode}function v(){i.on("keydown",function(t){function n(e){g(e)&&!e.isDefaultPrevented()&&s()}if(g(t)&&!t.isDefaultPrevented()){if(P=t.shiftKey&&86==t.keyCode,P&&e.webkit&&-1!=navigator.userAgent.indexOf("Version/"))return;if(t.stopImmediatePropagation(),w=(new Date).getTime(),e.ie&&P)return t.preventDefault(),void i.fire("paste",{ieFake:!0});s(),o(),i.once("keyup",n),i.once("paste",function(){i.off("keyup",n)})}}),i.on("paste",function(t){var c=d(t),p=(new Date).getTime()-w<1e3,g="text"==h.pasteFormat||P;return P=!1,t.isDefaultPrevented()||u(t)?void s():f(t)?void s():(p||t.preventDefault(),!e.ie||p&&!t.ieFake||(o(),i.dom.bind(b,"paste",function(e){e.stopPropagation()}),i.getDoc().execCommand("Paste",!1,null),c["text/html"]=l()),void setTimeout(function(){var e;return m(c,"text/html")?e=c["text/html"]:(e=l(),e==x&&(g=!0)),e=n.trimHtml(e),b&&b.firstChild&&"mcepastebin"===b.firstChild.id&&(g=!0),s(),g&&(e=m(c,"text/plain")&&-1==e.indexOf("</p>")?c["text/plain"]:n.innerText(e)),e==x?void(p||i.windowManager.alert("Please use Ctrl+V/Cmd+V keyboard shortcuts to paste contents.")):void(g?a(e):r(e))},0))}),i.on("dragstart",function(e){if(e.dataTransfer.types)try{e.dataTransfer.setData("mce-internal",i.selection.getContent())}catch(t){}}),i.on("drop",function(e){var t=p(e);if(!e.isDefaultPrevented()&&!f(e,t)&&t){var n=c(e.dataTransfer),o=n["mce-internal"]||n["text/html"]||n["text/plain"];o&&(e.preventDefault(),i.undoManager.transact(function(){n["mce-internal"]&&i.execCommand("Delete"),i.selection.setRng(t),n["text/html"]?r(o):a(o)}))}}),i.on("dragover dragend",function(e){var t,n=e.dataTransfer;if(i.settings.paste_data_images&&n)for(t=0;t<n.types.length;t++)if("Files"==n.types[t])return e.preventDefault(),!1})}var h=this,b,y,w=0,x="%MCEPASTEBIN%",P;h.pasteHtml=r,h.pasteText=a,i.on("preInit",function(){v(),i.parser.addNodeFilter("img",function(t){if(!i.settings.paste_data_images)for(var n=t.length;n--;){var r=t[n].attributes.map.src;r&&/^(data:image|webkit\-fake\-url)/.test(r)&&(t[n].attr("data-mce-object")||r===e.transparentSrc||t[n].remove())}})})}}),i(g,[c,d,f,v,h,l],function(e,t,n,i,r,a){function o(e){return/<font face="Times New Roman"|class="?Mso|style="[^"]*\bmso-|style='[^'']*\bmso-|w:WordDocument/i.test(e)||/class="OutlineElement/.test(e)||/id="?docs\-internal\-guid\-/.test(e)}function s(s){var l=s.settings;s.on("BeforePastePreProcess",function(c){function d(e){function t(e,t,o,s){var l=e._listLevel||a;l!=a&&(a>l?n&&(n=n.parent.parent):(i=n,n=null)),n&&n.name==o?n.append(e):(i=i||n,n=new r(o,1),s>1&&n.attr("start",""+s),e.wrap(n)),e.name="li",t.value="";var c=t.next;c&&3==c.type&&(c.value=c.value.replace(/^\u00a0+/,"")),l>a&&i&&i.lastChild.append(n),a=l}for(var n,i,a=1,o=e.getAll("p"),s=0;s<o.length;s++)if(e=o[s],"p"==e.name&&e.firstChild){for(var l="",c=e.firstChild;c&&!(l=c.value);)c=c.firstChild;if(/^\s*[\u2022\u00b7\u00a7\u00d8\u25CF]\s*$/.test(l)){t(e,c,"ul");continue}if(/^\s*\w+\.$/.test(l)){var d=/([0-9])\./.exec(l),f=1;d&&(f=parseInt(d[1],10)),t(e,c,"ol",f);continue}n=null}}function f(t,n){var i={},a=s.dom.parseStyle(n);if("p"===t.name){var o=/mso-list:\w+ \w+([0-9]+)/.exec(n);o&&(t._listLevel=parseInt(o[1],10))}return e.each(a,function(e,n){switch(n){case"horiz-align":n="text-align";break;case"vert-align":n="vertical-align";break;case"font-color":case"mso-foreground":n="color";break;case"mso-background":case"mso-highlight":n="background";break;case"font-weight":case"font-style":return void("normal"!=e&&(i[n]=e));case"mso-element":if(/^(comment|comment-list)$/i.test(e))return void t.remove()}return 0===n.indexOf("mso-comment")?void t.remove():void(0!==n.indexOf("mso-")&&("all"==p||m&&m[n])&&(i[n]=e))}),/(bold)/i.test(i["font-weight"])&&(delete i["font-weight"],t.wrap(new r("b",1))),/(italic)/i.test(i["font-style"])&&(delete i["font-style"],t.wrap(new r("i",1))),i=s.dom.serializeStyle(i,t.name),i?i:null}var u=c.content,p,m;if(p=l.paste_retain_style_properties,p&&(m=e.makeMap(p.split(/[, ]/))),l.paste_enable_default_filters!==!1&&o(c.content)){c.wordContent=!0,u=a.filter(u,[/<!--[\s\S]+?-->/gi,/<(!|script[^>]*>.*?<\/script(?=[>\s])|\/?(\?xml(:\w+)?|img|meta|link|style|\w:\w+)(?=[\s\/>]))[^>]*>/gi,[/<(\/?)s>/gi,"<$1strike>"],[/&nbsp;/gi,"\u00a0"],[/<span\s+style\s*=\s*"\s*mso-spacerun\s*:\s*yes\s*;?\s*"\s*>([\s\u00a0]*)<\/span>/gi,function(e,t){return t.length>0?t.replace(/./," ").slice(Math.floor(t.length/2)).split("").join("\u00a0"):""}]]);var g=l.paste_word_valid_elements;g||(g="-strong/b,-em/i,-span,-p,-ol,-ul,-li,-h1,-h2,-h3,-h4,-h5,-h6,-p/div,-table[width],-tr,-td[colspan|rowspan|width],-th,-thead,-tfoot,-tbody,-a[href|name],sub,sup,strike,br,del");var v=new n({valid_elements:g,valid_children:"-li[p]"});e.each(v.elements,function(e){e.attributes["class"]||(e.attributes["class"]={},e.attributesOrder.push("class")),e.attributes.style||(e.attributes.style={},e.attributesOrder.push("style"))});var h=new t({},v);h.addAttributeFilter("style",function(e){for(var t=e.length,n;t--;)n=e[t],n.attr("style",f(n,n.attr("style"))),"span"==n.name&&n.parent&&!n.attributes.length&&n.unwrap()}),h.addAttributeFilter("class",function(e){for(var t=e.length,n,i;t--;)n=e[t],i=n.attr("class"),/^(MsoCommentReference|MsoCommentText|msoDel)$/i.test(i)&&n.remove(),n.attr("class",null)}),h.addNodeFilter("del",function(e){for(var t=e.length;t--;)e[t].remove()}),h.addNodeFilter("a",function(e){for(var t=e.length,n,i,r;t--;)if(n=e[t],i=n.attr("href"),r=n.attr("name"),i&&-1!=i.indexOf("#_msocom_"))n.remove();else if(i&&0===i.indexOf("file://")&&(i=i.split("#")[1],i&&(i="#"+i)),i||r){if(r&&!/^_?(?:toc|edn|ftn)/i.test(r)){n.unwrap();continue}n.attr({href:i,name:r})}else n.unwrap()});var b=h.parse(u);d(b),c.content=new i({},v).serialize(b)}})}return s.isWordContent=o,s}),i(b,[p,c,g,l],function(e,t,n,i){return function(r){function a(e){r.on("BeforePastePreProcess",function(t){t.content=e(t.content)})}function o(e){if(!n.isWordContent(e))return e;var a=[];t.each(r.schema.getBlockElements(),function(e,t){a.push(t)});var o=new RegExp("(?:<br>&nbsp;[\\s\\r\\n]+|<br>)*(<\\/?("+a.join("|")+")[^>]*>)(?:<br>&nbsp;[\\s\\r\\n]+|<br>)*","g");return e=i.filter(e,[[o,"$1"]]),e=i.filter(e,[[/<br><br>/g,"<BR><BR>"],[/<br>/g," "],[/<BR><BR>/g,"<br>"]])}function s(e){if(n.isWordContent(e))return e;var t=r.settings.paste_webkit_styles;if(r.settings.paste_remove_styles_if_webkit===!1||"all"==t)return e;if(t&&(t=t.split(/[, ]/)),t){var i=r.dom,a=r.selection.getNode();e=e.replace(/(<[^>]+) style="([^"]*)"([^>]*>)/gi,function(e,n,r,o){var s=i.parseStyle(r,"span"),l={};if("none"===t)return n+o;for(var c=0;c<t.length;c++){var d=s[t[c]],f=i.getStyle(a,t[c],!0);/color/.test(t[c])&&(d=i.toHex(d),f=i.toHex(f)),f!=d&&(l[t[c]]=d)}return l=i.serializeStyle(l,"span"),l?n+' style="'+l+'"'+o:""})}else e=e.replace(/(<[^>]+) style="([^"]*)"([^>]*>)/gi,"$1$3");return e=e.replace(/(<[^>]+) data-mce-style="([^"]+)"([^>]*>)/gi,function(e,t,n,i){return t+' style="'+n+'"'+i})}e.webkit&&a(s),e.ie&&a(o)}}),i(y,[w,u,g,b],function(e,t,n,i){var r;e.add("paste",function(e){function a(){"text"==s.pasteFormat?(this.active(!1),s.pasteFormat="html"):(s.pasteFormat="text",this.active(!0),r||(e.windowManager.alert("Paste is now in plain text mode. Contents will now be pasted as plain text until you toggle this option off."),r=!0))}var o=this,s,l=e.settings;o.clipboard=s=new t(e),o.quirks=new i(e),o.wordFilter=new n(e),e.settings.paste_as_text&&(o.clipboard.pasteFormat="text"),l.paste_preprocess&&e.on("PastePreProcess",function(e){l.paste_preprocess.call(o,o,e)}),l.paste_postprocess&&e.on("PastePostProcess",function(e){l.paste_postprocess.call(o,o,e)}),e.addCommand("mceInsertClipboardContent",function(e,t){t.content&&o.clipboard.pasteHtml(t.content),t.text&&o.clipboard.pasteText(t.text)}),e.paste_block_drop&&e.on("dragend dragover draggesture dragdrop drop drag",function(e){e.preventDefault(),e.stopPropagation()}),e.settings.paste_data_images||e.on("drop",function(e){var t=e.dataTransfer;t&&t.files&&t.files.length>0&&e.preventDefault()}),e.addButton("pastetext",{icon:"pastetext",tooltip:"Paste as text",onclick:a,active:"text"==o.clipboard.pasteFormat}),e.addMenuItem("pastetext",{text:"Paste as text",selectable:!0,active:s.pasteFormat,onclick:a})})}),o([l,u,g,b,y])}(this);
     1!function(e,t){"use strict";function n(e,t){for(var n,r=[],i=0;i<e.length;++i){if(n=s[e[i]]||o(e[i]),!n)throw"module definition dependecy not found: "+e[i];r.push(n)}t.apply(null,r)}function r(e,r,i){if("string"!=typeof e)throw"invalid module definition, module id must be defined and be a string";if(r===t)throw"invalid module definition, dependencies must be specified";if(i===t)throw"invalid module definition, definition function must be specified";n(r,function(){s[e]=i.apply(null,arguments)})}function i(e){return!!s[e]}function o(t){for(var n=e,r=t.split(/[.\/]/),i=0;i<r.length;++i){if(!n[r[i]])return;n=n[r[i]]}return n}function a(n){for(var r=0;r<n.length;r++){for(var i=e,o=n[r],a=o.split(/[.\/]/),l=0;l<a.length-1;++l)i[a[l]]===t&&(i[a[l]]={}),i=i[a[l]];i[a[a.length-1]]=s[o]}}var s={},l="tinymce/pasteplugin/Utils",c="tinymce/util/Tools",u="tinymce/html/DomParser",d="tinymce/html/Schema",f="tinymce/pasteplugin/Clipboard",p="tinymce/Env",m="tinymce/util/VK",h="tinymce/pasteplugin/WordFilter",g="tinymce/html/Serializer",v="tinymce/html/Node",y="tinymce/pasteplugin/Quirks",b="tinymce/pasteplugin/Plugin",C="tinymce/PluginManager";r(l,[c,u,d],function(e,t,n){function r(t,n){return e.each(n,function(e){t=e.constructor==RegExp?t.replace(e,""):t.replace(e[0],e[1])}),t}function i(i){function o(e){var t=e.name,n=e;if("br"===t)return void(l+="\n");if(c[t]&&(l+=" "),u[t])return void(l+=" ");if(3==e.type&&(l+=e.value),!e.shortEnded&&(e=e.firstChild))do o(e);while(e=e.next);d[t]&&n.next&&(l+="\n","p"==t&&(l+="\n"))}var a=new n,s=new t({},a),l="",c=a.getShortEndedElements(),u=e.makeMap("script noscript style textarea video audio iframe object"," "),d=a.getBlockElements();return i=r(i,[/<!\[[^\]]+\]>/g]),o(s.parse(i)),l}function o(e){function t(e,t,n){return t||n?"\xa0":" "}return e=r(e,[/^[\s\S]*<body[^>]*>\s*|\s*<\/body[^>]*>[\s\S]*$/g,/<!--StartFragment-->|<!--EndFragment-->/g,[/( ?)<span class="Apple-converted-space">\u00a0<\/span>( ?)/g,t],/<br>$/i])}return{filter:r,innerText:i,trimHtml:o}}),r(f,[p,m,l],function(e,t,n){return function(r){function i(e){var t,n=r.dom;if(t=r.fire("BeforePastePreProcess",{content:e}),t=r.fire("PastePreProcess",t),e=t.content,!t.isDefaultPrevented()){if(r.hasEventListeners("PastePostProcess")&&!t.isDefaultPrevented()){var i=n.add(r.getBody(),"div",{style:"display:none"},e);t=r.fire("PastePostProcess",{node:i}),n.remove(i),e=t.node.innerHTML}t.isDefaultPrevented()||r.insertContent(e,{merge:r.settings.paste_merge_formats!==!1})}}function o(e){e=r.dom.encode(e).replace(/\r\n/g,"\n");var t=r.dom.getParent(r.selection.getStart(),r.dom.isBlock),o=r.settings.forced_root_block,a;o&&(a=r.dom.createHTML(o,r.settings.forced_root_block_attrs),a=a.substr(0,a.length-3)+">"),t&&/^(PRE|DIV)$/.test(t.nodeName)||!o?e=n.filter(e,[[/\n/g,"<br>"]]):(e=n.filter(e,[[/\n\n/g,"</p>"+a],[/^(.*<\/p>)(<p>)$/,a+"$1"],[/\n/g,"<br />"]]),-1!=e.indexOf("<p>")&&(e=a+e)),i(e)}function a(){var t=r.dom,n=r.getBody(),i=r.dom.getViewPort(r.getWin()),o=i.y,a=20,s;if(b=r.selection.getRng(),r.inline&&(s=r.selection.getScrollContainer(),s&&s.scrollTop>0&&(o=s.scrollTop)),b.getClientRects){var l=b.getClientRects();if(l.length)a=o+(l[0].top-t.getPos(n).y);else{a=o;var c=b.startContainer;c&&(3==c.nodeType&&c.parentNode!=n&&(c=c.parentNode),1==c.nodeType&&(a=t.getPos(c,s||n).y))}}y=t.add(r.getBody(),"div",{id:"mcepastebin",contentEditable:!0,"data-mce-bogus":"all",style:"position: absolute; top: "+a+"px;width: 10px; height: 10px; overflow: hidden; opacity: 0"},x),(e.ie||e.gecko)&&t.setStyle(y,"left","rtl"==t.getStyle(n,"direction",!0)?65535:-65535),t.bind(y,"beforedeactivate focusin focusout",function(e){e.stopPropagation()}),y.focus(),r.selection.select(y,!0)}function s(){if(y){for(var e;e=r.dom.get("mcepastebin");)r.dom.remove(e),r.dom.unbind(e);b&&r.selection.setRng(b)}y=b=null}function l(){var e="",t,n,i,o;for(t=r.dom.select("div[id=mcepastebin]"),n=0;n<t.length;n++)i=t[n],i.firstChild&&"mcepastebin"==i.firstChild.id&&(i=i.firstChild),o=i.innerHTML,e!=x&&(e+=o);return e}function c(e){var t={};if(e&&e.types){var n=e.getData("Text");n&&n.length>0&&(t["text/plain"]=n);for(var r=0;r<e.types.length;r++){var i=e.types[r];t[i]=e.getData(i)}}return t}function u(e){return c(e.clipboardData||r.getDoc().dataTransfer)}function d(e,t){function n(n){function o(){t&&(r.selection.setRng(t),t=null),i('<img src="'+l.result+'">')}var a,s,l;if(n)for(a=0;a<n.length;a++)if(s=n[a],/^image\/(jpeg|png|gif)$/.test(s.type))return l=new FileReader,l.onload=o,l.readAsDataURL(s.getAsFile?s.getAsFile():s),e.preventDefault(),!0}var o=e.clipboardData||e.dataTransfer;return r.settings.paste_data_images&&o?n(o.items)||n(o.files):void 0}function f(e){var t=e.clipboardData;return-1!=navigator.userAgent.indexOf("Android")&&t&&t.items&&0===t.items.length}function p(e){var t=r.getDoc(),n,i;if(t.caretPositionFromPoint)i=t.caretPositionFromPoint(e.clientX,e.clientY),n=t.createRange(),n.setStart(i.offsetNode,i.offset),n.collapse(!0);else if(t.caretRangeFromPoint)n=t.caretRangeFromPoint(e.clientX,e.clientY);else if(t.body.createTextRange){n=t.body.createTextRange();try{n.moveToPoint(e.clientX,e.clientY),n.collapse(!0)}catch(o){n.collapse(e.clientY<t.body.clientHeight)}}return n}function m(e,t){return t in e&&e[t].length>0}function h(e){return t.metaKeyPressed(e)&&86==e.keyCode||e.shiftKey&&45==e.keyCode}function g(){r.on("keydown",function(t){function n(e){h(e)&&!e.isDefaultPrevented()&&s()}if(h(t)&&!t.isDefaultPrevented()){if(w=t.shiftKey&&86==t.keyCode,w&&e.webkit&&-1!=navigator.userAgent.indexOf("Version/"))return;if(t.stopImmediatePropagation(),C=(new Date).getTime(),e.ie&&w)return t.preventDefault(),void r.fire("paste",{ieFake:!0});s(),a(),r.once("keyup",n),r.once("paste",function(){r.off("keyup",n)})}}),r.on("paste",function(t){var c=u(t),p=(new Date).getTime()-C<1e3,h="text"==v.pasteFormat||w;return w=!1,t.isDefaultPrevented()||f(t)?void s():d(t)?void s():(p||t.preventDefault(),!e.ie||p&&!t.ieFake||(a(),r.dom.bind(y,"paste",function(e){e.stopPropagation()}),r.getDoc().execCommand("Paste",!1,null),c["text/html"]=l()),void setTimeout(function(){var e;return m(c,"text/html")?e=c["text/html"]:(e=l(),e==x&&(h=!0)),e=n.trimHtml(e),y&&y.firstChild&&"mcepastebin"===y.firstChild.id&&(h=!0),s(),h&&(e=m(c,"text/plain")&&-1==e.indexOf("</p>")?c["text/plain"]:n.innerText(e)),e==x?void(p||r.windowManager.alert("Please use Ctrl+V/Cmd+V keyboard shortcuts to paste contents.")):void(h?o(e):i(e))},0))}),r.on("dragstart",function(e){if(e.dataTransfer.types)try{e.dataTransfer.setData("mce-internal",r.selection.getContent())}catch(t){}}),r.on("drop",function(e){var t=p(e);if(!e.isDefaultPrevented()&&!d(e,t)&&t){var n=c(e.dataTransfer),a=n["mce-internal"]||n["text/html"]||n["text/plain"];a&&(e.preventDefault(),r.undoManager.transact(function(){n["mce-internal"]&&r.execCommand("Delete"),r.selection.setRng(t),n["text/html"]?i(a):o(a)}))}}),r.on("dragover dragend",function(e){var t,n=e.dataTransfer;if(r.settings.paste_data_images&&n)for(t=0;t<n.types.length;t++)if("Files"==n.types[t])return e.preventDefault(),!1})}var v=this,y,b,C=0,x="%MCEPASTEBIN%",w;v.pasteHtml=i,v.pasteText=o,r.on("preInit",function(){g(),r.parser.addNodeFilter("img",function(t){if(!r.settings.paste_data_images)for(var n=t.length;n--;){var i=t[n].attributes.map.src;i&&/^(data:image|webkit\-fake\-url)/.test(i)&&(t[n].attr("data-mce-object")||i===e.transparentSrc||t[n].remove())}})})}}),r(h,[c,u,d,g,v,l],function(e,t,n,r,i,o){function a(e){return/<font face="Times New Roman"|class="?Mso|style="[^"]*\bmso-|style='[^'']*\bmso-|w:WordDocument/i.test(e)||/class="OutlineElement/.test(e)||/id="?docs\-internal\-guid\-/.test(e)}function s(s){var l=s.settings;s.on("BeforePastePreProcess",function(c){function u(e){function t(e){var n="";if(3===e.type)return e.value;if(e=e.firstChild)do n+=t(e);while(e=e.next);return n}function n(e,t){if(3===e.type&&t.test(e.value))return e.value=e.value.replace(t,""),!1;if(e=e.firstChild)do if(!n(e,t))return!1;while(e=e.next);return!0}function r(e){if(e._listIgnore)return void e.remove();if(e=e.firstChild)do r(e);while(e=e.next)}function o(e,t,o){var c=e._listLevel||l;c!=l&&(l>c?a&&(a=a.parent.parent):(s=a,a=null)),a&&a.name==t?a.append(e):(s=s||a,a=new i(t,1),o>1&&a.attr("start",""+o),e.wrap(a)),e.name="li",c>l&&s&&s.lastChild.append(a),l=c,r(e),n(e,/^\u00a0+/),n(e,/^\s*([\u2022\u00b7\u00a7\u00d8\u25CF]|\w+\.)/),n(e,/^\u00a0+/)}for(var a,s,l=1,c=e.getAll("p"),u=0;u<c.length;u++)if(e=c[u],"p"==e.name&&e.firstChild){var d=t(e),f=e.firstChild;if(/^[\s\u00a0]*[\u2022\u00b7\u00a7\u00d8\u25CF]\s*/.test(d)){o(e,"ul");continue}if(/^[\s\u00a0]*\w+\./.test(d)&&!/^[\s\u00a0]*\w+\.\s*[^\s]+/.test(f.value)){var p=/([0-9])\./.exec(d),m=1;p&&(m=parseInt(p[1],10)),o(e,"ol",m);continue}if(e._listLevel){o(e,"ul",1);continue}a=null}}function d(t,n){var r={},o,a=s.dom.parseStyle(n);return e.each(a,function(e,i){switch(i){case"mso-list":o=/\w+ \w+([0-9]+)/i.exec(n),o&&(t._listLevel=parseInt(o[1],10)),/Ignore/i.test(e)&&t.firstChild&&(t._listIgnore=!0,t.firstChild._listIgnore=!0);break;case"horiz-align":i="text-align";break;case"vert-align":i="vertical-align";break;case"font-color":case"mso-foreground":i="color";break;case"mso-background":case"mso-highlight":i="background";break;case"font-weight":case"font-style":return void("normal"!=e&&(r[i]=e));case"mso-element":if(/^(comment|comment-list)$/i.test(e))return void t.remove()}return 0===i.indexOf("mso-comment")?void t.remove():void(0!==i.indexOf("mso-")&&("all"==p||m&&m[i])&&(r[i]=e))}),/(bold)/i.test(r["font-weight"])&&(delete r["font-weight"],t.wrap(new i("b",1))),/(italic)/i.test(r["font-style"])&&(delete r["font-style"],t.wrap(new i("i",1))),r=s.dom.serializeStyle(r,t.name),r?r:null}var f=c.content,p,m;if(p=l.paste_retain_style_properties,p&&(m=e.makeMap(p.split(/[, ]/))),l.paste_enable_default_filters!==!1&&a(c.content)){c.wordContent=!0,f=o.filter(f,[/<!--[\s\S]+?-->/gi,/<(!|script[^>]*>.*?<\/script(?=[>\s])|\/?(\?xml(:\w+)?|img|meta|link|style|\w:\w+)(?=[\s\/>]))[^>]*>/gi,[/<(\/?)s>/gi,"<$1strike>"],[/&nbsp;/gi,"\xa0"],[/<span\s+style\s*=\s*"\s*mso-spacerun\s*:\s*yes\s*;?\s*"\s*>([\s\u00a0]*)<\/span>/gi,function(e,t){return t.length>0?t.replace(/./," ").slice(Math.floor(t.length/2)).split("").join("\xa0"):""}]]);var h=l.paste_word_valid_elements;h||(h="-strong/b,-em/i,-span,-p,-ol,-ul,-li,-h1,-h2,-h3,-h4,-h5,-h6,-p/div,-table[width],-tr,-td[colspan|rowspan|width],-th,-thead,-tfoot,-tbody,-a[href|name],sub,sup,strike,br,del");var g=new n({valid_elements:h,valid_children:"-li[p]"});e.each(g.elements,function(e){e.attributes["class"]||(e.attributes["class"]={},e.attributesOrder.push("class")),e.attributes.style||(e.attributes.style={},e.attributesOrder.push("style"))});var v=new t({},g);v.addAttributeFilter("style",function(e){for(var t=e.length,n;t--;)n=e[t],n.attr("style",d(n,n.attr("style"))),"span"==n.name&&n.parent&&!n.attributes.length&&n.unwrap()}),v.addAttributeFilter("class",function(e){for(var t=e.length,n,r;t--;)n=e[t],r=n.attr("class"),/^(MsoCommentReference|MsoCommentText|msoDel|MsoCaption)$/i.test(r)&&n.remove(),n.attr("class",null)}),v.addNodeFilter("del",function(e){for(var t=e.length;t--;)e[t].remove()}),v.addNodeFilter("a",function(e){for(var t=e.length,n,r,i;t--;)if(n=e[t],r=n.attr("href"),i=n.attr("name"),r&&-1!=r.indexOf("#_msocom_"))n.remove();else if(r&&0===r.indexOf("file://")&&(r=r.split("#")[1],r&&(r="#"+r)),r||i){if(i&&!/^_?(?:toc|edn|ftn)/i.test(i)){n.unwrap();continue}n.attr({href:r,name:i})}else n.unwrap()});var y=v.parse(f);u(y),c.content=new r({},g).serialize(y)}})}return s.isWordContent=a,s}),r(y,[p,c,h,l],function(e,t,n,r){return function(i){function o(e){i.on("BeforePastePreProcess",function(t){t.content=e(t.content)})}function a(e){if(!n.isWordContent(e))return e;var o=[];t.each(i.schema.getBlockElements(),function(e,t){o.push(t)});var a=new RegExp("(?:<br>&nbsp;[\\s\\r\\n]+|<br>)*(<\\/?("+o.join("|")+")[^>]*>)(?:<br>&nbsp;[\\s\\r\\n]+|<br>)*","g");return e=r.filter(e,[[a,"$1"]]),e=r.filter(e,[[/<br><br>/g,"<BR><BR>"],[/<br>/g," "],[/<BR><BR>/g,"<br>"]])}function s(e){if(n.isWordContent(e))return e;var t=i.settings.paste_webkit_styles;if(i.settings.paste_remove_styles_if_webkit===!1||"all"==t)return e;if(t&&(t=t.split(/[, ]/)),t){var r=i.dom,o=i.selection.getNode();e=e.replace(/(<[^>]+) style="([^"]*)"([^>]*>)/gi,function(e,n,i,a){var s=r.parseStyle(i,"span"),l={};if("none"===t)return n+a;for(var c=0;c<t.length;c++){var u=s[t[c]],d=r.getStyle(o,t[c],!0);/color/.test(t[c])&&(u=r.toHex(u),d=r.toHex(d)),d!=u&&(l[t[c]]=u)}return l=r.serializeStyle(l,"span"),l?n+' style="'+l+'"'+a:n+a})}else e=e.replace(/(<[^>]+) style="([^"]*)"([^>]*>)/gi,"$1$3");return e=e.replace(/(<[^>]+) data-mce-style="([^"]+)"([^>]*>)/gi,function(e,t,n,r){return t+' style="'+n+'"'+r})}e.webkit&&o(s),e.ie&&o(a)}}),r(b,[C,f,h,y],function(e,t,n,r){var i;e.add("paste",function(e){function o(){"text"==s.pasteFormat?(this.active(!1),s.pasteFormat="html"):(s.pasteFormat="text",this.active(!0),i||(e.windowManager.alert("Paste is now in plain text mode. Contents will now be pasted as plain text until you toggle this option off."),i=!0))}var a=this,s,l=e.settings;a.clipboard=s=new t(e),a.quirks=new r(e),a.wordFilter=new n(e),e.settings.paste_as_text&&(a.clipboard.pasteFormat="text"),l.paste_preprocess&&e.on("PastePreProcess",function(e){l.paste_preprocess.call(a,a,e)}),l.paste_postprocess&&e.on("PastePostProcess",function(e){l.paste_postprocess.call(a,a,e)}),e.addCommand("mceInsertClipboardContent",function(e,t){t.content&&a.clipboard.pasteHtml(t.content),t.text&&a.clipboard.pasteText(t.text)}),e.paste_block_drop&&e.on("dragend dragover draggesture dragdrop drop drag",function(e){e.preventDefault(),e.stopPropagation()}),e.settings.paste_data_images||e.on("drop",function(e){var t=e.dataTransfer;t&&t.files&&t.files.length>0&&e.preventDefault()}),e.addButton("pastetext",{icon:"pastetext",tooltip:"Paste as text",onclick:o,active:"text"==a.clipboard.pasteFormat}),e.addMenuItem("pastetext",{text:"Paste as text",selectable:!0,active:s.pasteFormat,onclick:o})})}),a([l,h])}(this);
  • trunk/src/wp-includes/js/tinymce/plugins/textcolor/plugin.js

    r28768 r29203  
    1313
    1414tinymce.PluginManager.add('textcolor', function(editor) {
    15     var VK = tinymce.util.VK;
     15    var cols, rows;
     16
     17    rows = editor.settings.textcolor_rows || 5;
     18    cols = editor.settings.textcolor_cols || 8;
     19
     20    function getCurrentColor(format) {
     21        var color;
     22
     23        editor.dom.getParents(editor.selection.getStart(), function(elm) {
     24            var value;
     25
     26            if ((value = elm.style[format == 'forecolor' ? 'color' : 'background-color'])) {
     27                color = value;
     28            }
     29        });
     30
     31        return color;
     32    }
    1633
    1734    function mapColors() {
     
    5067            "00CCFF", "Sky blue",
    5168            "993366", "Red violet",
    52             "C0C0C0", "Silver",
     69            "FFFFFF", "White",
    5370            "FF99CC", "Pink",
    5471            "FFCC99", "Peach",
     
    5774            "CCFFFF", "Pale cyan",
    5875            "99CCFF", "Light sky blue",
    59             "CC99FF", "Plum",
    60             "FFFFFF", "White"
     76            "CC99FF", "Plum"
    6177        ];
    6278
     
    6480            colors.push({
    6581                text: colorMap[i + 1],
    66                 color: colorMap[i]
     82                color: '#' + colorMap[i]
    6783            });
    6884        }
     
    7288
    7389    function renderColorPicker() {
    74         var ctrl = this, colors, color, html, last, rows, cols, x, y, i;
     90        var ctrl = this, colors, color, html, last, x, y, i, id = ctrl._id, count = 0;
     91
     92        function getColorCellHtml(color, title) {
     93            var isNoColor = color == 'transparent';
     94
     95            return (
     96                '<td class="mce-grid-cell' + (isNoColor ? ' mce-colorbtn-trans' : '') + '">' +
     97                    '<div id="' + id + '-' + (count++) + '"' +
     98                        ' data-mce-color="' + (color ? color : '') + '"' +
     99                        ' role="option"' +
     100                        ' tabIndex="-1"' +
     101                        ' style="' + (color ? 'background-color: ' + color : '') + '"' +
     102                        ' title="' + tinymce.translate(title) + '">' +
     103                        (isNoColor ? '&#215;' : '') +
     104                    '</div>' +
     105                '</td>'
     106            );
     107        }
    75108
    76109        colors = mapColors();
     110        colors.push({
     111            text: tinymce.translate("No color"),
     112            color: "transparent"
     113        });
    77114
    78115        html = '<table class="mce-grid mce-grid-border mce-colorbutton-grid" role="list" cellspacing="0"><tbody>';
    79116        last = colors.length - 1;
    80         rows = editor.settings.textcolor_rows || 5;
    81         cols = editor.settings.textcolor_cols || 8;
    82117
    83118        for (y = 0; y < rows; y++) {
     
    91126                } else {
    92127                    color = colors[i];
    93                     html += (
    94                         '<td>' +
    95                             '<div id="' + ctrl._id + '-' + i + '"' +
    96                                 ' data-mce-color="' + color.color + '"' +
    97                                 ' role="option"' +
    98                                 ' tabIndex="-1"' +
    99                                 ' style="' + (color ? 'background-color: #' + color.color : '') + '"' +
    100                                 ' title="' + color.text + '">' +
    101                             '</div>' +
    102                         '</td>'
    103                     );
     128                    html += getColorCellHtml(color.color, color.text);
    104129                }
    105130            }
     
    108133        }
    109134
    110         if (editor.settings.textcolor_enable_hex) {
    111             var hexIdN = last + 1;
    112             var hexInputColSpan = cols - 1;
     135        if (editor.settings.color_picker_callback) {
    113136            html += (
    114137                '<tr>' +
    115                     '<td>' +
    116                         '<div id="' + ctrl._id + '-' + hexIdN + '"' +
    117                             'data-mce-color=""' +
    118                             'style="background-color: #FFFFFF"' +
    119                             'data-mce-hex-picker="true"' +
    120                             'role="option" ' +
    121                             '>' +
     138                    '<td colspan="' + cols + '" class="mce-custom-color-btn">' +
     139                        '<div id="' + id + '-c" class="mce-widget mce-btn mce-btn-small mce-btn-flat" ' +
     140                            'role="button" tabindex="-1" aria-labelledby="' + id + '-c" style="width: 100%">' +
     141                            '<button type="button" role="presentation" tabindex="-1">' + tinymce.translate('Custom...') + '</button>' +
    122142                        '</div>' +
    123                     '</td>' +
    124                     '<td colspan="' + hexInputColSpan + '">' +
    125                         '# <input type="text" class="mce-textcolor-hexpicker"' +
    126                         'role="textbox" name="mce-hexcolorpicker"' +
    127                         'id="' + ctrl._id + '-hexcolorpicker" maxlength="6" >' +
    128143                    '</td>' +
    129144                '</tr>'
    130145            );
     146
     147            html += '<tr>';
     148
     149            for (x = 0; x < cols; x++) {
     150                html += getColorCellHtml('', 'Custom color');
     151            }
     152
     153            html += '</tr>';
    131154        }
    132155
     
    134157
    135158        return html;
     159    }
     160
     161    function applyFormat(format, value) {
     162        editor.focus();
     163        editor.formatter.apply(format, {value: value});
     164        editor.nodeChanged();
     165    }
     166
     167    function removeFormat(format) {
     168        editor.focus();
     169        editor.formatter.remove(format, {value: null}, null, true);
     170        editor.nodeChanged();
    136171    }
    137172
    138173    function onPanelClick(e) {
    139174        var buttonCtrl = this.parent(), value;
    140        
    141         if (e.target.getAttribute('disabled')) {
    142             return;
    143         }
    144         if ((value = e.target.getAttribute('data-mce-color'))) {
     175
     176        function selectColor(value) {
     177            buttonCtrl.hidePanel();
     178            buttonCtrl.color(value);
     179            applyFormat(buttonCtrl.settings.format, value);
     180        }
     181
     182        function setDivColor(div, value) {
     183            div.style.background = value;
     184            div.setAttribute('data-mce-color', value);
     185        }
     186
     187        if (tinymce.DOM.getParent(e.target, '.mce-custom-color-btn')) {
     188            buttonCtrl.hidePanel();
     189
     190            editor.settings.color_picker_callback.call(editor, function(value) {
     191                var tableElm = buttonCtrl.panel.getEl().getElementsByTagName('table')[0];
     192                var customColorCells, div, i;
     193
     194                customColorCells = tinymce.map(tableElm.rows[tableElm.rows.length - 1].childNodes, function(elm) {
     195                    return elm.firstChild;
     196                });
     197
     198                for (i = 0; i < customColorCells.length; i++) {
     199                    div = customColorCells[i];
     200                    if (!div.getAttribute('data-mce-color')) {
     201                        break;
     202                    }
     203                }
     204
     205                // Shift colors to the right
     206                // TODO: Might need to be the left on RTL
     207                if (i == cols) {
     208                    for (i = 0; i < cols - 1; i++) {
     209                        setDivColor(customColorCells[i], customColorCells[i + 1].getAttribute('data-mce-color'));
     210                    }
     211                }
     212
     213                setDivColor(div, value);
     214                selectColor(value);
     215            }, getCurrentColor(buttonCtrl.settings.format));
     216        }
     217
     218        value = e.target.getAttribute('data-mce-color');
     219        if (value) {
    145220            if (this.lastId) {
    146221                document.getElementById(this.lastId).setAttribute('aria-selected', false);
     
    150225            this.lastId = e.target.id;
    151226
     227            if (value == 'transparent') {
     228                removeFormat(buttonCtrl.settings.format);
     229                buttonCtrl.hidePanel();
     230                return;
     231            }
     232
     233            selectColor(value);
     234        } else if (value !== null) {
    152235            buttonCtrl.hidePanel();
    153             value = '#' + value;
    154             buttonCtrl.color(value);
    155             editor.execCommand(buttonCtrl.settings.selectcmd, false, value);
    156236        }
    157237    }
     
    161241
    162242        if (self._color) {
    163             editor.execCommand(self.settings.selectcmd, false, self._color);
    164         }
    165     }
    166 
    167     /**
    168      * isValidHex checks if the provided string is valid hex color string
    169      *
    170      * @param  {string}   hexString 3 or 6 chars string representing a color.
    171      * @return {Boolean}  [true]  the string is valid hex color
    172      *                    [false] the string is not valid hex color       
    173      */
    174     function isValidHex(hexString) {
    175         return /(^[0-9A-F]{3,6}$)/i.test(hexString);
    176     }
    177 
    178     /**
    179      * isSpecialStroke checks if the keyCode is currently a special one:
    180      *  backspace, delete, arrow keys (left/right)
    181      *  or if it's a special ctrl+x/c/v
    182      *
    183      * @param  {string}  keyCode
    184      * @return {Boolean} 
    185      */
    186     function isSpecialStroke(e) {
    187         var keyCode = e.keyCode;
    188         // Allow delete and backspace
    189         if (keyCode === VK.BACKSPACE || keyCode === VK.DELETE ) {
    190             return true;
    191         }
    192 
    193         // Allow arrow movements
    194         if (keyCode === VK.LEFT || keyCode === VK.RIGHT) {
    195             return true;
    196         }
    197 
    198         // Allow CTRL/CMD + C/V/X
    199         if ((tinymce.isMac ? e.metaKey : e.ctrlKey) && (keyCode == 67 || keyCode == 88 || keyCode == 86)) {
    200             return true;
    201         }
    202 
    203         return false;
    204     }
    205 
    206     function initHexPicker(e) {
    207         if (!editor.settings.textcolor_enable_hex) {
    208             return;
    209         }
    210 
    211         var wrapper = document.querySelector('#' + e.target._id);
    212         var input = wrapper.querySelector('[name="mce-hexcolorpicker"]');
    213         var hexcolorDiv = wrapper.querySelector('[data-mce-hex-picker]');
    214         var inputEvent = 'input';
    215 
    216         editor.dom.events.bind(input, 'keydown', function(e){
    217             var keyCode = e.keyCode;
    218 
    219             if (isSpecialStroke(e)) {
    220                 return;
    221             }
    222 
    223             // Look for anything which is not A-Z or 0-9 and it is not a special char.
    224             if (!((keyCode >= 48 && keyCode <= 57) || (keyCode >= 65 && keyCode <= 70) || (keyCode >= 96 && keyCode <= 105)) ) {
    225                 e.preventDefault();
    226             }
    227 
    228             // On Enter, take it like a click on the hexcolorDiv
    229             if ( (keyCode === VK.ENTER && isValidHex(input.value) ) ) {
    230                 hexcolorDiv.click();
    231             }
    232 
    233         });
    234 
    235         // If IE8 we can't use the input event, so we have to
    236         // listen for keypress and paste events.
    237         // In IE9 the input implementation is buggy so
    238         // we use the same events as we'd like on IE8
    239         if (tinymce.Env.ie && tinymce.Env.ie <= 9) {
    240             inputEvent = 'keypress paste blur keydown keyup propertychange';
    241         }
    242        
    243         editor.dom.events.bind(input, inputEvent, function(){
    244             if (isValidHex(input.value)) {
    245                 hexcolorDiv.setAttribute('data-mce-color', input.value);
    246                 hexcolorDiv.setAttribute('style', 'background-color:#' + input.value);
    247                 hexcolorDiv.removeAttribute('disabled');
    248             } else {
    249                 hexcolorDiv.setAttribute('disabled', 'disabled');
    250             }
    251            
    252         });
    253 
     243            applyFormat(self.settings.format, self._color);
     244        }
    254245    }
    255246
     
    257248        type: 'colorbutton',
    258249        tooltip: 'Text color',
    259         selectcmd: 'ForeColor',
     250        format: 'forecolor',
    260251        panel: {
    261252            role: 'application',
    262253            ariaRemember: true,
    263254            html: renderColorPicker,
    264             onclick: onPanelClick,
    265             onPostRender: initHexPicker
     255            onclick: onPanelClick
    266256        },
    267257        onclick: onButtonClick
     
    271261        type: 'colorbutton',
    272262        tooltip: 'Background color',
    273         selectcmd: 'HiliteColor',
     263        format: 'hilitecolor',
    274264        panel: {
    275265            role: 'application',
    276266            ariaRemember: true,
    277267            html: renderColorPicker,
    278             onclick: onPanelClick,
    279             onPostRender: initHexPicker
     268            onclick: onPanelClick
    280269        },
    281270        onclick: onButtonClick
  • trunk/src/wp-includes/js/tinymce/plugins/textcolor/plugin.min.js

    r28768 r29203  
    1 tinymce.PluginManager.add("textcolor",function(e){function t(){var t,o,r=[];for(o=e.settings.textcolor_map||["000000","Black","993300","Burnt orange","333300","Dark olive","003300","Dark green","003366","Dark azure","000080","Navy Blue","333399","Indigo","333333","Very dark gray","800000","Maroon","FF6600","Orange","808000","Olive","008000","Green","008080","Teal","0000FF","Blue","666699","Grayish blue","808080","Gray","FF0000","Red","FF9900","Amber","99CC00","Yellow green","339966","Sea green","33CCCC","Turquoise","3366FF","Royal blue","800080","Purple","999999","Medium gray","FF00FF","Magenta","FFCC00","Gold","FFFF00","Yellow","00FF00","Lime","00FFFF","Aqua","00CCFF","Sky blue","993366","Red violet","C0C0C0","Silver","FF99CC","Pink","FFCC99","Peach","FFFF99","Light yellow","CCFFCC","Pale green","CCFFFF","Pale cyan","99CCFF","Light sky blue","CC99FF","Plum","FFFFFF","White"],t=0;t<o.length;t+=2)r.push({text:o[t+1],color:o[t]});return r}function o(){var o,r,l,c,i,a,n,d,s,u=this;for(o=t(),l='<table class="mce-grid mce-grid-border mce-colorbutton-grid" role="list" cellspacing="0"><tbody>',c=o.length-1,i=e.settings.textcolor_rows||5,a=e.settings.textcolor_cols||8,d=0;i>d;d++){for(l+="<tr>",n=0;a>n;n++)s=d*a+n,s>c?l+="<td></td>":(r=o[s],l+='<td><div id="'+u._id+"-"+s+'" data-mce-color="'+r.color+'" role="option" tabIndex="-1" style="'+(r?"background-color: #"+r.color:"")+'" title="'+r.text+'"></div></td>');l+="</tr>"}if(e.settings.textcolor_enable_hex){var F=c+1,m=a-1;l+='<tr><td><div id="'+u._id+"-"+F+'"data-mce-color=""style="background-color: #FFFFFF"data-mce-hex-picker="true"role="option" ></div></td><td colspan="'+m+'"># <input type="text" class="mce-textcolor-hexpicker"role="textbox" name="mce-hexcolorpicker"id="'+u._id+'-hexcolorpicker" maxlength="6" ></td></tr>'}return l+="</tbody></table>"}function r(t){var o,r=this.parent();t.target.getAttribute("disabled")||(o=t.target.getAttribute("data-mce-color"))&&(this.lastId&&document.getElementById(this.lastId).setAttribute("aria-selected",!1),t.target.setAttribute("aria-selected",!0),this.lastId=t.target.id,r.hidePanel(),o="#"+o,r.color(o),e.execCommand(r.settings.selectcmd,!1,o))}function l(){var t=this;t._color&&e.execCommand(t.settings.selectcmd,!1,t._color)}function c(e){return/(^[0-9A-F]{3,6}$)/i.test(e)}function i(e){var t=e.keyCode;return t===n.BACKSPACE||t===n.DELETE?!0:t===n.LEFT||t===n.RIGHT?!0:(tinymce.isMac?e.metaKey:e.ctrlKey)&&(67==t||88==t||86==t)?!0:!1}function a(t){if(e.settings.textcolor_enable_hex){var o=document.querySelector("#"+t.target._id),r=o.querySelector('[name="mce-hexcolorpicker"]'),l=o.querySelector("[data-mce-hex-picker]"),a="input";e.dom.events.bind(r,"keydown",function(e){var t=e.keyCode;i(e)||(t>=48&&57>=t||t>=65&&70>=t||t>=96&&105>=t||e.preventDefault(),t===n.ENTER&&c(r.value)&&l.click())}),tinymce.Env.ie&&tinymce.Env.ie<=9&&(a="keypress paste blur keydown keyup propertychange"),e.dom.events.bind(r,a,function(){c(r.value)?(l.setAttribute("data-mce-color",r.value),l.setAttribute("style","background-color:#"+r.value),l.removeAttribute("disabled")):l.setAttribute("disabled","disabled")})}}var n=tinymce.util.VK;e.addButton("forecolor",{type:"colorbutton",tooltip:"Text color",selectcmd:"ForeColor",panel:{role:"application",ariaRemember:!0,html:o,onclick:r,onPostRender:a},onclick:l}),e.addButton("backcolor",{type:"colorbutton",tooltip:"Background color",selectcmd:"HiliteColor",panel:{role:"application",ariaRemember:!0,html:o,onclick:r,onPostRender:a},onclick:l})});
     1tinymce.PluginManager.add("textcolor",function(t){function e(e){var o;return t.dom.getParents(t.selection.getStart(),function(t){var r;(r=t.style["forecolor"==e?"color":"background-color"])&&(o=r)}),o}function o(){var e,o,r=[];for(o=t.settings.textcolor_map||["000000","Black","993300","Burnt orange","333300","Dark olive","003300","Dark green","003366","Dark azure","000080","Navy Blue","333399","Indigo","333333","Very dark gray","800000","Maroon","FF6600","Orange","808000","Olive","008000","Green","008080","Teal","0000FF","Blue","666699","Grayish blue","808080","Gray","FF0000","Red","FF9900","Amber","99CC00","Yellow green","339966","Sea green","33CCCC","Turquoise","3366FF","Royal blue","800080","Purple","999999","Medium gray","FF00FF","Magenta","FFCC00","Gold","FFFF00","Yellow","00FF00","Lime","00FFFF","Aqua","00CCFF","Sky blue","993366","Red violet","FFFFFF","White","FF99CC","Pink","FFCC99","Peach","FFFF99","Light yellow","CCFFCC","Pale green","CCFFFF","Pale cyan","99CCFF","Light sky blue","CC99FF","Plum"],e=0;e<o.length;e+=2)r.push({text:o[e+1],color:"#"+o[e]});return r}function r(){function e(t,e){var o="transparent"==t;return'<td class="mce-grid-cell'+(o?" mce-colorbtn-trans":"")+'"><div id="'+m+"-"+F++ +'" data-mce-color="'+(t?t:"")+'" role="option" tabIndex="-1" style="'+(t?"background-color: "+t:"")+'" title="'+tinymce.translate(e)+'">'+(o?"&#215;":"")+"</div></td>"}var r,l,a,n,c,d,u,g=this,m=g._id,F=0;for(r=o(),r.push({text:tinymce.translate("No color"),color:"transparent"}),a='<table class="mce-grid mce-grid-border mce-colorbutton-grid" role="list" cellspacing="0"><tbody>',n=r.length-1,d=0;s>d;d++){for(a+="<tr>",c=0;i>c;c++)u=d*i+c,u>n?a+="<td></td>":(l=r[u],a+=e(l.color,l.text));a+="</tr>"}if(t.settings.color_picker_callback){for(a+='<tr><td colspan="'+i+'" class="mce-custom-color-btn"><div id="'+m+'-c" class="mce-widget mce-btn mce-btn-small mce-btn-flat" role="button" tabindex="-1" aria-labelledby="'+m+'-c" style="width: 100%"><button type="button" role="presentation" tabindex="-1">'+tinymce.translate("Custom...")+"</button></div></td></tr>",a+="<tr>",c=0;i>c;c++)a+=e("","Custom color");a+="</tr>"}return a+="</tbody></table>"}function l(e,o){t.focus(),t.formatter.apply(e,{value:o}),t.nodeChanged()}function a(e){t.focus(),t.formatter.remove(e,{value:null},null,!0),t.nodeChanged()}function n(o){function r(t){s.hidePanel(),s.color(t),l(s.settings.format,t)}function n(t,e){t.style.background=e,t.setAttribute("data-mce-color",e)}var c,s=this.parent();if(tinymce.DOM.getParent(o.target,".mce-custom-color-btn")&&(s.hidePanel(),t.settings.color_picker_callback.call(t,function(t){var e,o,l,a=s.panel.getEl().getElementsByTagName("table")[0];for(e=tinymce.map(a.rows[a.rows.length-1].childNodes,function(t){return t.firstChild}),l=0;l<e.length&&(o=e[l],o.getAttribute("data-mce-color"));l++);if(l==i)for(l=0;i-1>l;l++)n(e[l],e[l+1].getAttribute("data-mce-color"));n(o,t),r(t)},e(s.settings.format))),c=o.target.getAttribute("data-mce-color")){if(this.lastId&&document.getElementById(this.lastId).setAttribute("aria-selected",!1),o.target.setAttribute("aria-selected",!0),this.lastId=o.target.id,"transparent"==c)return a(s.settings.format),void s.hidePanel();r(c)}else null!==c&&s.hidePanel()}function c(){var t=this;t._color&&l(t.settings.format,t._color)}var i,s;s=t.settings.textcolor_rows||5,i=t.settings.textcolor_cols||8,t.addButton("forecolor",{type:"colorbutton",tooltip:"Text color",format:"forecolor",panel:{role:"application",ariaRemember:!0,html:r,onclick:n},onclick:c}),t.addButton("backcolor",{type:"colorbutton",tooltip:"Background color",format:"hilitecolor",panel:{role:"application",ariaRemember:!0,html:r,onclick:n},onclick:c})});
  • trunk/src/wp-includes/js/tinymce/skins/lightgray/skin.ie7.min.css

    r28768 r29203  
    1 .mce-container,.mce-container *,.mce-widget,.mce-widget *,.mce-reset{margin:0;padding:0;border:0;outline:0;vertical-align:top;background:transparent;text-decoration:none;color:#333;font-family:"Helvetica Neue",Helvetica,Arial,sans-serif;font-size:14px;text-shadow:none;float:none;position:static;width:auto;height:auto;white-space:nowrap;cursor:inherit;-webkit-tap-highlight-color:transparent;line-height:normal;font-weight:normal;text-align:left;-moz-box-sizing:content-box;-webkit-box-sizing:content-box;box-sizing:content-box;direction:ltr}.mce-widget button{-moz-box-sizing:border-box;-webkit-box-sizing:border-box;box-sizing:border-box}.mce-container *[unselectable]{-moz-user-select:none;-webkit-user-select:none;-o-user-select:none;user-select:none}.mce-fade{opacity:0;-webkit-transition:opacity .15s linear;transition:opacity .15s linear}.mce-fade.mce-in{opacity:1}.mce-tinymce{visibility:inherit !important;position:relative}.mce-fullscreen{border:0;padding:0;margin:0;overflow:hidden;height:100%;z-index:100}div.mce-fullscreen{position:fixed;top:0;left:0;width:100%;height:auto}.mce-tinymce{display:block;-webkit-border-radius:2px;-moz-border-radius:2px;border-radius:2px}.mce-wordcount{position:absolute;top:0;right:0;padding:8px}div.mce-edit-area{background:#FFF;filter:none}.mce-statusbar{position:relative}.mce-statusbar .mce-container-body{position:relative}.mce-fullscreen .mce-resizehandle{display:none}.mce-charmap{border-collapse:collapse}.mce-charmap td{cursor:default;border:1px solid #9e9e9e;width:20px;height:20px;line-height:20px;text-align:center;vertical-align:middle;padding:2px}.mce-charmap td div{text-align:center}.mce-charmap td:hover{background:#d9d9d9}.mce-grid td div{border:1px solid #d6d6d6;width:12px;height:12px;margin:2px;cursor:pointer}.mce-grid td div:focus{border-color:#a1a1a1}.mce-grid td div[disabled]{cursor:not-allowed}.mce-grid{border-spacing:2px;border-collapse:separate}.mce-grid a{display:block;border:1px solid transparent}.mce-grid a:hover,.mce-grid a:focus{border-color:#a1a1a1}.mce-grid-border{margin:0 4px 0 4px}.mce-grid-border a{border-color:#d6d6d6;width:13px;height:13px}.mce-grid-border a:hover,.mce-grid-border a.mce-active{border-color:#a1a1a1;background:#c8def4}.mce-text-center{text-align:center}div.mce-tinymce-inline{width:100%;-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none}input.mce-textcolor-hexpicker{border:1px solid #d6d6d6;margin:2px;height:12px;font-size:11px}.mce-toolbar-grp{padding-bottom:2px}.mce-toolbar-grp .mce-flow-layout-item{margin-bottom:0}.mce-rtl .mce-wordcount{left:0;right:auto}.mce-container,.mce-container-body{display:block}.mce-autoscroll{overflow:hidden}.mce-scrollbar{position:absolute;width:7px;height:100%;top:2px;right:2px;opacity:.4;filter:alpha(opacity=40);zoom:1}.mce-scrollbar-h{top:auto;right:auto;left:2px;bottom:2px;width:100%;height:7px}.mce-scrollbar-thumb{position:absolute;background-color:#000;border:1px solid #888;border-color:rgba(85,85,85,0.6);width:5px;height:100%;-webkit-border-radius:7px;-moz-border-radius:7px;border-radius:7px}.mce-scrollbar-h .mce-scrollbar-thumb{width:100%;height:5px}.mce-scrollbar:hover,.mce-scrollbar.mce-active{background-color:#AAA;opacity:.6;filter:alpha(opacity=60);zoom:1;-webkit-border-radius:7px;-moz-border-radius:7px;border-radius:7px}.mce-scroll{position:relative}.mce-panel{border:0 solid #9e9e9e;background-color:#f0f0f0;background-image:-moz-linear-gradient(top, #fdfdfd, #ddd);background-image:-webkit-gradient(linear, 0 0, 0 100%, from(#fdfdfd), to(#ddd));background-image:-webkit-linear-gradient(top, #fdfdfd, #ddd);background-image:-o-linear-gradient(top, #fdfdfd, #ddd);background-image:linear-gradient(to bottom, #fdfdfd, #ddd);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fffdfdfd', endColorstr='#ffdddddd', GradientType=0);zoom:1}.mce-floatpanel{position:absolute;-webkit-box-shadow:0 5px 10px rgba(0, 0, 0, 0.2);-moz-box-shadow:0 5px 10px rgba(0, 0, 0, 0.2);box-shadow:0 5px 10px rgba(0, 0, 0, 0.2)}.mce-floatpanel.mce-fixed{position:fixed}.mce-floatpanel .mce-arrow,.mce-floatpanel .mce-arrow:after{position:absolute;display:block;width:0;height:0;border-color:transparent;border-style:solid}.mce-floatpanel .mce-arrow{border-width:11px}.mce-floatpanel .mce-arrow:after{border-width:10px;content:""}.mce-floatpanel.mce-popover{filter:progid:DXImageTransform.Microsoft.gradient(enabled = false);background:transparent;-webkit-border-radius:6px;-moz-border-radius:6px;border-radius:6px;-webkit-box-shadow:0 5px 10px rgba(0, 0, 0, 0.2);-moz-box-shadow:0 5px 10px rgba(0, 0, 0, 0.2);box-shadow:0 5px 10px rgba(0, 0, 0, 0.2);top:0;left:0;background:#fff;border:1px solid #9e9e9e;border:1px solid rgba(0,0,0,0.25)}.mce-floatpanel.mce-popover.mce-bottom{margin-top:10px;*margin-top:0}.mce-floatpanel.mce-popover.mce-bottom>.mce-arrow{left:50%;margin-left:-11px;border-top-width:0;border-bottom-color:#9e9e9e;border-bottom-color:rgba(0,0,0,0.25);top:-11px}.mce-floatpanel.mce-popover.mce-bottom>.mce-arrow:after{top:1px;margin-left:-10px;border-top-width:0;border-bottom-color:#fff}.mce-floatpanel.mce-popover.mce-bottom.mce-start{margin-left:-22px}.mce-floatpanel.mce-popover.mce-bottom.mce-start>.mce-arrow{left:20px}.mce-floatpanel.mce-popover.mce-bottom.mce-end{margin-left:22px}.mce-floatpanel.mce-popover.mce-bottom.mce-end>.mce-arrow{right:10px;left:auto}.mce-fullscreen{border:0;padding:0;margin:0;overflow:hidden;background:#fff;height:100%}div.mce-fullscreen{position:fixed;top:0;left:0}#mce-modal-block{opacity:0;filter:alpha(opacity=0);zoom:1;position:fixed;left:0;top:0;width:100%;height:100%;background:#000}#mce-modal-block.mce-in{opacity:.3;filter:alpha(opacity=30);zoom:1}.mce-window-move{cursor:move}.mce-window{-webkit-border-radius:6px;-moz-border-radius:6px;border-radius:6px;-webkit-box-shadow:0 3px 7px rgba(0, 0, 0, 0.3);-moz-box-shadow:0 3px 7px rgba(0, 0, 0, 0.3);box-shadow:0 3px 7px rgba(0, 0, 0, 0.3);filter:progid:DXImageTransform.Microsoft.gradient(enabled = false);background:transparent;background:#fff;position:fixed;top:0;left:0;opacity:0;-webkit-transition:opacity 150ms ease-in;transition:opacity 150ms ease-in}.mce-window.mce-in{opacity:1}.mce-window-head{padding:9px 15px;border-bottom:1px solid #c5c5c5;position:relative}.mce-window-head .mce-close{position:absolute;right:15px;top:9px;font-size:20px;font-weight:bold;line-height:20px;color:#858585;cursor:pointer;height:20px;overflow:hidden}.mce-close:hover{color:#adadad}.mce-window-head .mce-title{line-height:20px;font-size:20px;font-weight:bold;text-rendering:optimizelegibility;padding-right:10px}.mce-window .mce-container-body{display:block}.mce-foot{display:block;background-color:#fff;border-top:1px solid #c5c5c5;-webkit-border-radius:0 0 6px 6px;-moz-border-radius:0 0 6px 6px;border-radius:0 0 6px 6px}.mce-window-head .mce-dragh{position:absolute;top:0;left:0;cursor:move;width:90%;height:100%}.mce-window iframe{width:100%;height:100%}.mce-window.mce-fullscreen,.mce-window.mce-fullscreen .mce-foot{-webkit-border-radius:0;-moz-border-radius:0;border-radius:0}.mce-rtl .mce-window-head .mce-close{position:absolute;right:auto;left:15px}.mce-rtl .mce-window-head .mce-dragh{left:auto;right:0}.mce-rtl .mce-window-head .mce-title{direction:rtl;text-align:right}.mce-abs-layout{position:relative}body .mce-abs-layout-item,.mce-abs-end{position:absolute}.mce-abs-end{width:1px;height:1px}.mce-container-body.mce-abs-layout{overflow:hidden}.mce-tooltip{position:absolute;padding:5px;opacity:.8;filter:alpha(opacity=80);zoom:1}.mce-tooltip-inner{font-size:11px;background-color:#000;color:#fff;max-width:200px;padding:5px 8px 4px 8px;text-align:center;white-space:normal}.mce-tooltip-inner{-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px}.mce-tooltip-inner{-webkit-box-shadow:0 0 5px #000000;-moz-box-shadow:0 0 5px #000000;box-shadow:0 0 5px #000000}.mce-tooltip-arrow{position:absolute;width:0;height:0;line-height:0;border:5px dashed #000}.mce-tooltip-arrow-n{border-bottom-color:#000}.mce-tooltip-arrow-s{border-top-color:#000}.mce-tooltip-arrow-e{border-left-color:#000}.mce-tooltip-arrow-w{border-right-color:#000}.mce-tooltip-nw,.mce-tooltip-sw{margin-left:-14px}.mce-tooltip-n .mce-tooltip-arrow{top:0px;left:50%;margin-left:-5px;border-bottom-style:solid;border-top:none;border-left-color:transparent;border-right-color:transparent}.mce-tooltip-nw .mce-tooltip-arrow{top:0;left:10px;border-bottom-style:solid;border-top:none;border-left-color:transparent;border-right-color:transparent}.mce-tooltip-ne .mce-tooltip-arrow{top:0;right:10px;border-bottom-style:solid;border-top:none;border-left-color:transparent;border-right-color:transparent}.mce-tooltip-s .mce-tooltip-arrow{bottom:0;left:50%;margin-left:-5px;border-top-style:solid;border-bottom:none;border-left-color:transparent;border-right-color:transparent}.mce-tooltip-sw .mce-tooltip-arrow{bottom:0;left:10px;border-top-style:solid;border-bottom:none;border-left-color:transparent;border-right-color:transparent}.mce-tooltip-se .mce-tooltip-arrow{bottom:0;right:10px;border-top-style:solid;border-bottom:none;border-left-color:transparent;border-right-color:transparent}.mce-tooltip-e .mce-tooltip-arrow{right:0;top:50%;margin-top:-5px;border-left-style:solid;border-right:none;border-top-color:transparent;border-bottom-color:transparent}.mce-tooltip-w .mce-tooltip-arrow{left:0;top:50%;margin-top:-5px;border-right-style:solid;border-left:none;border-top-color:transparent;border-bottom-color:transparent}.mce-btn{border:1px solid #b1b1b1;border-color:rgba(0,0,0,0.1) rgba(0,0,0,0.1) rgba(0,0,0,0.25) rgba(0,0,0,0.25);position:relative;text-shadow:0 1px 1px rgba(255,255,255,0.75);display:inline-block;*display:inline;*zoom:1;-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px;-webkit-box-shadow:inset 0 1px 0 rgba(255, 255, 255, 0.2), 0 1px 2px rgba(0, 0, 0, 0.05);-moz-box-shadow:inset 0 1px 0 rgba(255, 255, 255, 0.2), 0 1px 2px rgba(0, 0, 0, 0.05);box-shadow:inset 0 1px 0 rgba(255, 255, 255, 0.2), 0 1px 2px rgba(0, 0, 0, 0.05);background-color:#f0f0f0;background-image:-moz-linear-gradient(top, #fff, #d9d9d9);background-image:-webkit-gradient(linear, 0 0, 0 100%, from(#fff), to(#d9d9d9));background-image:-webkit-linear-gradient(top, #fff, #d9d9d9);background-image:-o-linear-gradient(top, #fff, #d9d9d9);background-image:linear-gradient(to bottom, #fff, #d9d9d9);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffffff', endColorstr='#ffd9d9d9', GradientType=0);zoom:1}.mce-btn:hover,.mce-btn:focus{color:#333;background-color:#e3e3e3;background-image:-moz-linear-gradient(top, #f2f2f2, #ccc);background-image:-webkit-gradient(linear, 0 0, 0 100%, from(#f2f2f2), to(#ccc));background-image:-webkit-linear-gradient(top, #f2f2f2, #ccc);background-image:-o-linear-gradient(top, #f2f2f2, #ccc);background-image:linear-gradient(to bottom, #f2f2f2, #ccc);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff2f2f2', endColorstr='#ffcccccc', GradientType=0);zoom:1}.mce-btn.mce-disabled button,.mce-btn.mce-disabled:hover button{cursor:default;-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none;opacity:.4;filter:alpha(opacity=40);zoom:1}.mce-btn.mce-active,.mce-btn.mce-active:hover{background-color:#d6d6d6;background-image:-moz-linear-gradient(top, #e6e6e6, #c0c0c0);background-image:-webkit-gradient(linear, 0 0, 0 100%, from(#e6e6e6), to(#c0c0c0));background-image:-webkit-linear-gradient(top, #e6e6e6, #c0c0c0);background-image:-o-linear-gradient(top, #e6e6e6, #c0c0c0);background-image:linear-gradient(to bottom, #e6e6e6, #c0c0c0);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffe6e6e6', endColorstr='#ffc0c0c0', GradientType=0);zoom:1;-webkit-box-shadow:inset 0 2px 4px rgba(0, 0, 0, 0.15), 0 1px 2px rgba(0, 0, 0, 0.05);-moz-box-shadow:inset 0 2px 4px rgba(0, 0, 0, 0.15), 0 1px 2px rgba(0, 0, 0, 0.05);box-shadow:inset 0 2px 4px rgba(0, 0, 0, 0.15), 0 1px 2px rgba(0, 0, 0, 0.05)}.mce-btn:not(.mce-disabled):active{background-color:#d6d6d6;background-image:-moz-linear-gradient(top, #e6e6e6, #c0c0c0);background-image:-webkit-gradient(linear, 0 0, 0 100%, from(#e6e6e6), to(#c0c0c0));background-image:-webkit-linear-gradient(top, #e6e6e6, #c0c0c0);background-image:-o-linear-gradient(top, #e6e6e6, #c0c0c0);background-image:linear-gradient(to bottom, #e6e6e6, #c0c0c0);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffe6e6e6', endColorstr='#ffc0c0c0', GradientType=0);zoom:1;-webkit-box-shadow:inset 0 2px 4px rgba(0, 0, 0, 0.15), 0 1px 2px rgba(0, 0, 0, 0.05);-moz-box-shadow:inset 0 2px 4px rgba(0, 0, 0, 0.15), 0 1px 2px rgba(0, 0, 0, 0.05);box-shadow:inset 0 2px 4px rgba(0, 0, 0, 0.15), 0 1px 2px rgba(0, 0, 0, 0.05)}.mce-btn button{padding:4px 10px;font-size:14px;line-height:20px;*line-height:16px;cursor:pointer;color:#333;text-align:center;overflow:visible;-webkit-appearance:none}.mce-btn button::-moz-focus-inner{border:0;padding:0}.mce-btn i{text-shadow:1px 1px #fff}.mce-primary{min-width:50px;color:#fff;border:1px solid #b1b1b1;border-color:rgba(0,0,0,0.1) rgba(0,0,0,0.1) rgba(0,0,0,0.25) rgba(0,0,0,0.25);background-color:#006dcc;background-image:-moz-linear-gradient(top, #08c, #04c);background-image:-webkit-gradient(linear, 0 0, 0 100%, from(#08c), to(#04c));background-image:-webkit-linear-gradient(top, #08c, #04c);background-image:-o-linear-gradient(top, #08c, #04c);background-image:linear-gradient(to bottom, #08c, #04c);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff0088cc', endColorstr='#ff0044cc', GradientType=0);zoom:1}.mce-primary:hover,.mce-primary:focus{background-color:#005fb3;background-image:-moz-linear-gradient(top, #0077b3, #003cb3);background-image:-webkit-gradient(linear, 0 0, 0 100%, from(#0077b3), to(#003cb3));background-image:-webkit-linear-gradient(top, #0077b3, #003cb3);background-image:-o-linear-gradient(top, #0077b3, #003cb3);background-image:linear-gradient(to bottom, #0077b3, #003cb3);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff0077b3', endColorstr='#ff003cb3', GradientType=0);zoom:1}.mce-primary.mce-disabled button,.mce-primary.mce-disabled:hover button{cursor:default;-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none;opacity:.4;filter:alpha(opacity=40);zoom:1}.mce-primary.mce-active,.mce-primary.mce-active:hover,.mce-primary:not(.mce-disabled):active{background-color:#005299;background-image:-moz-linear-gradient(top, #069, #039);background-image:-webkit-gradient(linear, 0 0, 0 100%, from(#069), to(#039));background-image:-webkit-linear-gradient(top, #069, #039);background-image:-o-linear-gradient(top, #069, #039);background-image:linear-gradient(to bottom, #069, #039);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff006699', endColorstr='#ff003399', GradientType=0);zoom:1;-webkit-box-shadow:inset 0 2px 4px rgba(0, 0, 0, 0.15), 0 1px 2px rgba(0, 0, 0, 0.05);-moz-box-shadow:inset 0 2px 4px rgba(0, 0, 0, 0.15), 0 1px 2px rgba(0, 0, 0, 0.05);box-shadow:inset 0 2px 4px rgba(0, 0, 0, 0.15), 0 1px 2px rgba(0, 0, 0, 0.05)}.mce-primary button,.mce-primary button i{color:#fff;text-shadow:1px 1px #333}.mce-btn-large button{padding:9px 14px;font-size:16px;line-height:normal;-webkit-border-radius:5px;-moz-border-radius:5px;border-radius:5px}.mce-btn-large i{margin-top:2px}.mce-btn-small button{padding:1px 5px;font-size:12px;*padding-bottom:2px}.mce-btn-small i{line-height:20px;vertical-align:top;*line-height:18px}.mce-btn .mce-caret{margin-top:8px;margin-left:0}.mce-btn-small .mce-caret{margin-top:8px;margin-left:0}.mce-caret{display:inline-block;*display:inline;*zoom:1;width:0;height:0;vertical-align:top;border-top:4px solid #333;border-right:4px solid transparent;border-left:4px solid transparent;content:""}.mce-disabled .mce-caret{border-top-color:#aaa}.mce-caret.mce-up{border-bottom:4px solid #333;border-top:0}.mce-rtl .mce-btn button{direction:rtl}.mce-btn-group .mce-btn{border-width:1px 0 1px 0;margin:0;-webkit-border-radius:0;-moz-border-radius:0;border-radius:0}.mce-btn-group .mce-first{border-left:1px solid #b1b1b1;border-left:1px solid rgba(0,0,0,0.25);-webkit-border-radius:3px 0 0 3px;-moz-border-radius:3px 0 0 3px;border-radius:3px 0 0 3px}.mce-btn-group .mce-last{border-right:1px solid #b1b1b1;border-right:1px solid rgba(0,0,0,0.1);-webkit-border-radius:0 3px 3px 0;-moz-border-radius:0 3px 3px 0;border-radius:0 3px 3px 0}.mce-btn-group .mce-first.mce-last{-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px}.mce-btn-group .mce-btn.mce-flow-layout-item{margin:0}.mce-checkbox{cursor:pointer}i.mce-i-checkbox{margin:0 3px 0 0;border:1px solid #c5c5c5;-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px;-webkit-box-shadow:inset 0 1px 0 rgba(255, 255, 255, 0.2), 0 1px 2px rgba(0, 0, 0, 0.05);-moz-box-shadow:inset 0 1px 0 rgba(255, 255, 255, 0.2), 0 1px 2px rgba(0, 0, 0, 0.05);box-shadow:inset 0 1px 0 rgba(255, 255, 255, 0.2), 0 1px 2px rgba(0, 0, 0, 0.05);background-color:#f0f0f0;background-image:-moz-linear-gradient(top, #fff, #d9d9d9);background-image:-webkit-gradient(linear, 0 0, 0 100%, from(#fff), to(#d9d9d9));background-image:-webkit-linear-gradient(top, #fff, #d9d9d9);background-image:-o-linear-gradient(top, #fff, #d9d9d9);background-image:linear-gradient(to bottom, #fff, #d9d9d9);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffffff', endColorstr='#ffd9d9d9', GradientType=0);zoom:1;text-indent:-10em;*font-size:0;*line-height:0;*text-indent:0;overflow:hidden}.mce-checked i.mce-i-checkbox{color:#333;font-size:16px;line-height:16px;text-indent:0}.mce-checkbox:focus i.mce-i-checkbox,.mce-checkbox.mce-focus i.mce-i-checkbox{border:1px solid rgba(82,168,236,0.8);-webkit-box-shadow:inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 8px rgba(82, 168, 236, 0.65);-moz-box-shadow:inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 8px rgba(82, 168, 236, 0.65);box-shadow:inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 8px rgba(82, 168, 236, 0.65)}.mce-checkbox.mce-disabled .mce-label,.mce-checkbox.mce-disabled i.mce-i-checkbox{color:#acacac}.mce-rtl .mce-checkbox{direction:rtl;text-align:right}.mce-rtl i.mce-i-checkbox{margin:0 0 0 3px}.mce-colorbutton .mce-ico{position:relative}.mce-colorbutton-grid{margin:4px}.mce-colorbutton button{padding-right:4px}.mce-colorbutton .mce-preview{padding-right:3px;display:block;position:absolute;left:50%;top:50%;margin-left:-14px;margin-top:7px;background:gray;width:13px;height:2px;overflow:hidden}.mce-colorbutton.mce-btn-small .mce-preview{margin-left:-16px;padding-right:0;width:16px}.mce-colorbutton .mce-open{padding-left:4px;border-left:1px solid transparent;border-right:1px solid transparent}.mce-colorbutton:hover .mce-open{border-left-color:#bdbdbd;border-right-color:#bdbdbd}.mce-colorbutton.mce-btn-small .mce-open{padding:0 3px 0 3px}.mce-rtl .mce-colorbutton{direction:rtl}.mce-rtl .mce-colorbutton .mce-preview{margin-left:0;padding-right:0;padding-left:4px;margin-right:-14px}.mce-rtl .mce-colorbutton.mce-btn-small .mce-preview{margin-left:0;padding-right:0;margin-right:-17px;padding-left:0}.mce-rtl .mce-colorbutton button{padding-right:10px;padding-left:10px}.mce-rtl .mce-colorbutton .mce-open{padding-left:4px;padding-right:4px}.mce-combobox{display:inline-block;*display:inline;*zoom:1;-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px;-webkit-box-shadow:inset 0 1px 1px rgba(0, 0, 0, 0.075);-moz-box-shadow:inset 0 1px 1px rgba(0, 0, 0, 0.075);box-shadow:inset 0 1px 1px rgba(0, 0, 0, 0.075);*height:32px}.mce-combobox input{border:1px solid #c5c5c5;border-right-color:#c5c5c5;height:28px}.mce-combobox.mce-disabled input{color:#adadad}.mce-combobox.mce-has-open input{-webkit-border-radius:4px 0 0 4px;-moz-border-radius:4px 0 0 4px;border-radius:4px 0 0 4px}.mce-combobox .mce-btn{border-left:0;-webkit-border-radius:0 4px 4px 0;-moz-border-radius:0 4px 4px 0;border-radius:0 4px 4px 0}.mce-combobox button{padding-right:8px;padding-left:8px}.mce-combobox.mce-disabled .mce-btn button{cursor:default;-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none;opacity:.4;filter:alpha(opacity=40);zoom:1}.mce-path{display:inline-block;*display:inline;*zoom:1;padding:8px;white-space:normal}.mce-path .mce-txt{display:inline-block;padding-right:3px}.mce-path .mce-path-body{display:inline-block}.mce-path-item{display:inline-block;*display:inline;*zoom:1;cursor:pointer;color:#333}.mce-path-item:hover{text-decoration:underline}.mce-path-item:focus{background:#666;color:#fff}.mce-path .mce-divider{display:inline}.mce-disabled .mce-path-item{color:#aaa}.mce-rtl .mce-path{direction:rtl}.mce-fieldset{border:0 solid #9E9E9E;-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px}.mce-fieldset>.mce-container-body{margin-top:-15px}.mce-fieldset-title{margin-left:5px;padding:0 5px 0 5px}.mce-fit-layout{display:inline-block;*display:inline;*zoom:1}.mce-fit-layout-item{position:absolute}.mce-flow-layout-item{display:inline-block;*display:inline;*zoom:1}.mce-flow-layout-item{margin:2px 0 2px 2px}.mce-flow-layout-item.mce-last{margin-right:2px}.mce-flow-layout{white-space:normal}.mce-tinymce-inline .mce-flow-layout{white-space:nowrap}.mce-rtl .mce-flow-layout{text-align:right;direction:rtl}.mce-rtl .mce-flow-layout-item{margin:2px 2px 2px 0}.mce-rtl .mce-flow-layout-item.mce-last{margin-left:2px}.mce-iframe{border:0 solid #9e9e9e;width:100%;height:100%}.mce-label{display:inline-block;*display:inline;*zoom:1;text-shadow:0 1px 1px rgba(255,255,255,0.75);overflow:hidden}.mce-label.mce-autoscroll{overflow:auto}.mce-label.mce-disabled{color:#aaa}.mce-label.mce-multiline{white-space:pre-wrap}.mce-label.mce-error{color:#a00}.mce-rtl .mce-label{text-align:right;direction:rtl}.mce-menubar .mce-menubtn{border-color:transparent;background:transparent;-webkit-border-radius:0;-moz-border-radius:0;border-radius:0;-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none;filter:none}.mce-menubar{border:1px solid #c4c4c4}.mce-menubar .mce-menubtn button span{color:#333}.mce-menubar .mce-caret{border-top-color:#333}.mce-menubar .mce-menubtn:hover,.mce-menubar .mce-menubtn.mce-active,.mce-menubar .mce-menubtn:focus{border-color:transparent;background:#e6e6e6;filter:none;-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none}.mce-menubtn span{color:#333;margin-right:2px;line-height:20px;*line-height:16px}.mce-menubtn.mce-btn-small span{font-size:12px}.mce-menubtn.mce-fixed-width span{display:inline-block;overflow-x:hidden;text-overflow:ellipsis;width:90px}.mce-menubtn.mce-fixed-width.mce-btn-small span{width:70px}.mce-menubtn .mce-caret{*margin-top:6px}.mce-rtl .mce-menubtn button{direction:rtl;text-align:right}.mce-listbox button{text-align:left;padding-right:20px;position:relative}.mce-listbox .mce-caret{position:absolute;margin-top:-2px;right:8px;top:50%}.mce-rtl .mce-listbox .mce-caret{right:auto;left:8px}.mce-rtl .mce-listbox button{padding-right:10px;padding-left:20px}.mce-menu-item{display:block;padding:6px 15px 6px 12px;clear:both;font-weight:normal;line-height:20px;color:#333;white-space:nowrap;cursor:pointer;line-height:normal;border-left:4px solid transparent;margin-bottom:1px}.mce-menu-item .mce-ico,.mce-menu-item .mce-text{color:#333}.mce-menu-item.mce-disabled .mce-text,.mce-menu-item.mce-disabled .mce-ico{color:#adadad}.mce-menu-item:hover .mce-text,.mce-menu-item.mce-selected .mce-text,.mce-menu-item:focus .mce-text{color:#fff}.mce-menu-item:hover .mce-ico,.mce-menu-item.mce-selected .mce-ico,.mce-menu-item:focus .mce-ico{color:#fff}.mce-menu-item.mce-disabled:hover{background:#ccc}.mce-menu-shortcut{display:inline-block;color:#adadad}.mce-menu-shortcut{display:inline-block;*display:inline;*zoom:1;padding:0 15px 0 20px}.mce-menu-item:hover .mce-menu-shortcut,.mce-menu-item.mce-selected .mce-menu-shortcut,.mce-menu-item:focus .mce-menu-shortcut{color:#fff}.mce-menu-item .mce-caret{margin-top:4px;*margin-top:3px;margin-right:6px;border-top:4px solid transparent;border-bottom:4px solid transparent;border-left:4px solid #333}.mce-menu-item.mce-selected .mce-caret,.mce-menu-item:focus .mce-caret,.mce-menu-item:hover .mce-caret{border-left-color:#fff}.mce-menu-align .mce-menu-shortcut{*margin-top:-2px}.mce-menu-align .mce-menu-shortcut,.mce-menu-align .mce-caret{position:absolute;right:0}.mce-menu-item.mce-active i{visibility:visible}.mce-menu-item-normal.mce-active{background-color:#c8def4}.mce-menu-item-preview.mce-active{border-left:5px solid #aaa}.mce-menu-item-normal.mce-active .mce-text{color:#333}.mce-menu-item-normal.mce-active:hover .mce-text,.mce-menu-item-normal.mce-active:hover .mce-ico{color:#fff}.mce-menu-item-normal.mce-active:focus .mce-text,.mce-menu-item-normal.mce-active:focus .mce-ico{color:#fff}.mce-menu-item:hover,.mce-menu-item.mce-selected,.mce-menu-item:focus{text-decoration:none;color:#fff;background-color:#0081c2;background-image:-moz-linear-gradient(top, #08c, #0077b3);background-image:-webkit-gradient(linear, 0 0, 0 100%, from(#08c), to(#0077b3));background-image:-webkit-linear-gradient(top, #08c, #0077b3);background-image:-o-linear-gradient(top, #08c, #0077b3);background-image:linear-gradient(to bottom, #08c, #0077b3);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff0088cc', endColorstr='#ff0077b3', GradientType=0);zoom:1}div.mce-menu .mce-menu-item-sep,.mce-menu-item-sep:hover{border:0;padding:0;height:1px;margin:9px 1px;overflow:hidden;background:#cbcbcb;border-bottom:1px solid #fff;cursor:default;filter:none}.mce-menu.mce-rtl{direction:rtl}.mce-rtl .mce-menu-item{text-align:right;direction:rtl;padding:6px 12px 6px 15px}.mce-menu-align.mce-rtl .mce-menu-shortcut,.mce-menu-align.mce-rtl .mce-caret{right:auto;left:0}.mce-rtl .mce-menu-item .mce-caret{margin-left:6px;margin-right:0;border-right:4px solid #333;border-left:0}.mce-rtl .mce-menu-item.mce-selected .mce-caret,.mce-rtl .mce-menu-item:focus .mce-caret,.mce-rtl .mce-menu-item:hover .mce-caret{border-left-color:transparent;border-right-color:#fff}.mce-menu{position:absolute;left:0;top:0;filter:progid:DXImageTransform.Microsoft.gradient(enabled = false);background:transparent;z-index:1000;padding:5px 0 5px 0;margin:2px 0 0;min-width:160px;background:#fff;border:1px solid #989898;border:1px solid rgba(0,0,0,0.2);z-index:1002;-webkit-border-radius:6px;-moz-border-radius:6px;border-radius:6px;-webkit-box-shadow:0 5px 10px rgba(0, 0, 0, 0.2);-moz-box-shadow:0 5px 10px rgba(0, 0, 0, 0.2);box-shadow:0 5px 10px rgba(0, 0, 0, 0.2);max-height:400px;overflow:auto;overflow-x:hidden}.mce-menu i{display:none}.mce-menu-has-icons i{display:inline-block;*display:inline}.mce-menu-sub-tr-tl{margin:-6px 0 0 -1px}.mce-menu-sub-br-bl{margin:6px 0 0 -1px}.mce-menu-sub-tl-tr{margin:-6px 0 0 1px}.mce-menu-sub-bl-br{margin:6px 0 0 1px}.mce-container-body .mce-resizehandle{position:absolute;right:0;bottom:0;width:16px;height:16px;visibility:visible;cursor:s-resize;margin:0}.mce-container-body .mce-resizehandle-both{cursor:se-resize}i.mce-i-resize{color:#333}.mce-spacer{visibility:hidden}.mce-splitbtn .mce-open{border-left:1px solid transparent;border-right:1px solid transparent}.mce-splitbtn:hover .mce-open{border-left-color:#bdbdbd;border-right-color:#bdbdbd}.mce-splitbtn button{padding-right:4px}.mce-splitbtn .mce-open{padding-left:4px}.mce-splitbtn .mce-open.mce-active{-webkit-box-shadow:inset 0 2px 4px rgba(0, 0, 0, 0.15), 0 1px 2px rgba(0, 0, 0, 0.05);-moz-box-shadow:inset 0 2px 4px rgba(0, 0, 0, 0.15), 0 1px 2px rgba(0, 0, 0, 0.05);box-shadow:inset 0 2px 4px rgba(0, 0, 0, 0.15), 0 1px 2px rgba(0, 0, 0, 0.05)}.mce-splitbtn.mce-btn-small .mce-open{padding:0 3px 0 3px}.mce-rtl .mce-splitbtn{direction:rtl;text-align:right}.mce-rtl .mce-splitbtn button{padding-right:10px;padding-left:10px}.mce-rtl .mce-splitbtn .mce-open{padding-left:4px;padding-right:4px}.mce-stack-layout-item{display:block}.mce-tabs{display:block;border-bottom:1px solid #c5c5c5}.mce-tab{display:inline-block;*display:inline;*zoom:1;border:1px solid #c5c5c5;border-width:0 1px 0 0;background:#e3e3e3;padding:8px;text-shadow:0 1px 1px rgba(255,255,255,0.75);height:13px;cursor:pointer}.mce-tab:hover{background:#fdfdfd}.mce-tab.mce-active{background:#fdfdfd;border-bottom-color:transparent;margin-bottom:-1px;height:14px}.mce-rtl .mce-tabs{text-align:right;direction:rtl}.mce-rtl .mce-tab{border-width:0 0 0 1px}.mce-textbox{background:#fff;border:1px solid #c5c5c5;-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px;-webkit-box-shadow:inset 0 1px 1px rgba(0, 0, 0, 0.075);-moz-box-shadow:inset 0 1px 1px rgba(0, 0, 0, 0.075);box-shadow:inset 0 1px 1px rgba(0, 0, 0, 0.075);display:inline-block;-webkit-transition:border linear .2s, box-shadow linear .2s;transition:border linear .2s, box-shadow linear .2s;height:28px;resize:none;padding:0 4px 0 4px;white-space:pre-wrap;*white-space:pre;color:#333}.mce-textbox:focus,.mce-textbox.mce-focus{border-color:rgba(82,168,236,0.8);-webkit-box-shadow:inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 8px rgba(82, 168, 236, 0.65);-moz-box-shadow:inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 8px rgba(82, 168, 236, 0.65);box-shadow:inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 8px rgba(82, 168, 236, 0.65)}.mce-placeholder .mce-textbox{color:#aaa}.mce-textbox.mce-multiline{padding:4px}.mce-textbox.mce-disabled{color:#adadad}.mce-rtl .mce-textbox{text-align:right;direction:rtl}.mce-throbber{position:absolute;top:0;left:0;width:100%;height:100%;opacity:.6;filter:alpha(opacity=60);zoom:1;background:#fff url('img/loader.gif') no-repeat center center}.mce-throbber-inline{position:static;height:50px}@font-face{font-family:'tinymce';src:url('fonts/tinymce.eot');src:url('fonts/tinymce.eot?#iefix') format('embedded-opentype'),url('fonts/tinymce.woff') format('woff'),url('fonts/tinymce.ttf') format('truetype'),url('fonts/tinymce.svg#tinymce') format('svg');font-weight:normal;font-style:normal}@font-face{font-family:'tinymce-small';src:url('fonts/tinymce-small.eot');src:url('fonts/tinymce-small.eot?#iefix') format('embedded-opentype'),url('fonts/tinymce-small.woff') format('woff'),url('fonts/tinymce-small.ttf') format('truetype'),url('fonts/tinymce-small.svg#tinymce') format('svg');font-weight:normal;font-style:normal}.mce-ico{font-family:'tinymce';font-style:normal;font-weight:normal;font-size:16px;line-height:16px;vertical-align:text-top;-webkit-font-smoothing:antialiased;display:inline-block;background:transparent center center;width:16px;height:16px;color:#333;-ie7-icon:' '}.mce-btn-small .mce-ico{font-family:'tinymce-small'}.mce-ico,i.mce-i-checkbox{zoom:expression(this.runtimeStyle['zoom'] = '1', this.innerHTML = this.currentStyle['-ie7-icon'].substr(1, 1) + '&nbsp;')}.mce-i-save{-ie7-icon:"\e000"}.mce-i-newdocument{-ie7-icon:"\e001"}.mce-i-fullpage{-ie7-icon:"\e002"}.mce-i-alignleft{-ie7-icon:"\e003"}.mce-i-aligncenter{-ie7-icon:"\e004"}.mce-i-alignright{-ie7-icon:"\e005"}.mce-i-alignjustify{-ie7-icon:"\e006"}.mce-i-cut{-ie7-icon:"\e007"}.mce-i-paste{-ie7-icon:"\e008"}.mce-i-searchreplace{-ie7-icon:"\e009"}.mce-i-bullist{-ie7-icon:"\e00a"}.mce-i-numlist{-ie7-icon:"\e00b"}.mce-i-indent{-ie7-icon:"\e00c"}.mce-i-outdent{-ie7-icon:"\e00d"}.mce-i-blockquote{-ie7-icon:"\e00e"}.mce-i-undo{-ie7-icon:"\e00f"}.mce-i-redo{-ie7-icon:"\e010"}.mce-i-link{-ie7-icon:"\e011"}.mce-i-unlink{-ie7-icon:"\e012"}.mce-i-anchor{-ie7-icon:"\e013"}.mce-i-image{-ie7-icon:"\e014"}.mce-i-media{-ie7-icon:"\e015"}.mce-i-help{-ie7-icon:"\e016"}.mce-i-code{-ie7-icon:"\e017"}.mce-i-insertdatetime{-ie7-icon:"\e018"}.mce-i-preview{-ie7-icon:"\e019"}.mce-i-forecolor{-ie7-icon:"\e01a"}.mce-i-backcolor{-ie7-icon:"\e01a"}.mce-i-table{-ie7-icon:"\e01b"}.mce-i-hr{-ie7-icon:"\e01c"}.mce-i-removeformat{-ie7-icon:"\e01d"}.mce-i-subscript{-ie7-icon:"\e01e"}.mce-i-superscript{-ie7-icon:"\e01f"}.mce-i-charmap{-ie7-icon:"\e020"}.mce-i-emoticons{-ie7-icon:"\e021"}.mce-i-print{-ie7-icon:"\e022"}.mce-i-fullscreen{-ie7-icon:"\e023"}.mce-i-spellchecker{-ie7-icon:"\e024"}.mce-i-nonbreaking{-ie7-icon:"\e025"}.mce-i-template{-ie7-icon:"\e026"}.mce-i-pagebreak{-ie7-icon:"\e027"}.mce-i-restoredraft{-ie7-icon:"\e028"}.mce-i-untitled{-ie7-icon:"\e029"}.mce-i-bold{-ie7-icon:"\e02a"}.mce-i-italic{-ie7-icon:"\e02b"}.mce-i-underline{-ie7-icon:"\e02c"}.mce-i-strikethrough{-ie7-icon:"\e02d"}.mce-i-visualchars{-ie7-icon:"\e02e"}.mce-i-ltr{-ie7-icon:"\e02f"}.mce-i-rtl{-ie7-icon:"\e030"}.mce-i-copy{-ie7-icon:"\e031"}.mce-i-resize{-ie7-icon:"\e032"}.mce-i-browse{-ie7-icon:"\e034"}.mce-i-pastetext{-ie7-icon:"\e035"}.mce-i-checkbox,.mce-i-selected{-ie7-icon:"\e033"}.mce-i-selected{visibility:hidden}.mce-i-backcolor{background:#BBB}
     1.mce-container,.mce-container *,.mce-widget,.mce-widget *,.mce-reset{margin:0;padding:0;border:0;outline:0;vertical-align:top;background:transparent;text-decoration:none;color:#333;font-family:"Helvetica Neue",Helvetica,Arial,sans-serif;font-size:14px;text-shadow:none;float:none;position:static;width:auto;height:auto;white-space:nowrap;cursor:inherit;-webkit-tap-highlight-color:transparent;line-height:normal;font-weight:normal;text-align:left;-moz-box-sizing:content-box;-webkit-box-sizing:content-box;box-sizing:content-box;direction:ltr;max-width:none}.mce-widget button{-moz-box-sizing:border-box;-webkit-box-sizing:border-box;box-sizing:border-box}.mce-container *[unselectable]{-moz-user-select:none;-webkit-user-select:none;-o-user-select:none;user-select:none}.mce-fade{opacity:0;-webkit-transition:opacity .15s linear;transition:opacity .15s linear}.mce-fade.mce-in{opacity:1}.mce-tinymce{visibility:inherit !important;position:relative}.mce-fullscreen{border:0;padding:0;margin:0;overflow:hidden;height:100%;z-index:100}div.mce-fullscreen{position:fixed;top:0;left:0;width:100%;height:auto}.mce-tinymce{display:block;-webkit-border-radius:2px;-moz-border-radius:2px;border-radius:2px}.mce-wordcount{position:absolute;top:0;right:0;padding:8px}div.mce-edit-area{background:#FFF;filter:none}.mce-statusbar{position:relative}.mce-statusbar .mce-container-body{position:relative}.mce-fullscreen .mce-resizehandle{display:none}.mce-charmap{border-collapse:collapse}.mce-charmap td{cursor:default;border:1px solid #9e9e9e;width:20px;height:20px;line-height:20px;text-align:center;vertical-align:middle;padding:2px}.mce-charmap td div{text-align:center}.mce-charmap td:hover{background:#d9d9d9}.mce-grid td.mce-grid-cell div{border:1px solid #d6d6d6;width:15px;height:15px;margin:0px;cursor:pointer}.mce-grid td.mce-grid-cell div:focus{border-color:#a1a1a1}.mce-grid td.mce-grid-cell div[disabled]{cursor:not-allowed}.mce-grid{border-spacing:2px;border-collapse:separate}.mce-grid a{display:block;border:1px solid transparent}.mce-grid a:hover,.mce-grid a:focus{border-color:#a1a1a1}.mce-grid-border{margin:0 4px 0 4px}.mce-grid-border a{border-color:#d6d6d6;width:13px;height:13px}.mce-grid-border a:hover,.mce-grid-border a.mce-active{border-color:#a1a1a1;background:#c8def4}.mce-text-center{text-align:center}div.mce-tinymce-inline{width:100%;-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none}.mce-colorbtn-trans div{text-align:center;vertical-align:middle;font-weight:bold;font-size:20px;line-height:16px;color:#707070}.mce-toolbar-grp{padding-bottom:2px}.mce-toolbar-grp .mce-flow-layout-item{margin-bottom:0}.mce-rtl .mce-wordcount{left:0;right:auto}.mce-container,.mce-container-body{display:block}.mce-autoscroll{overflow:hidden}.mce-scrollbar{position:absolute;width:7px;height:100%;top:2px;right:2px;opacity:.4;filter:alpha(opacity=40);zoom:1}.mce-scrollbar-h{top:auto;right:auto;left:2px;bottom:2px;width:100%;height:7px}.mce-scrollbar-thumb{position:absolute;background-color:#000;border:1px solid #888;border-color:rgba(85,85,85,0.6);width:5px;height:100%;-webkit-border-radius:7px;-moz-border-radius:7px;border-radius:7px}.mce-scrollbar-h .mce-scrollbar-thumb{width:100%;height:5px}.mce-scrollbar:hover,.mce-scrollbar.mce-active{background-color:#AAA;opacity:.6;filter:alpha(opacity=60);zoom:1;-webkit-border-radius:7px;-moz-border-radius:7px;border-radius:7px}.mce-scroll{position:relative}.mce-panel{border:0 solid #9e9e9e;background-color:#f0f0f0;background-image:-moz-linear-gradient(top, #fdfdfd, #ddd);background-image:-webkit-gradient(linear, 0 0, 0 100%, from(#fdfdfd), to(#ddd));background-image:-webkit-linear-gradient(top, #fdfdfd, #ddd);background-image:-o-linear-gradient(top, #fdfdfd, #ddd);background-image:linear-gradient(to bottom, #fdfdfd, #ddd);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fffdfdfd', endColorstr='#ffdddddd', GradientType=0);zoom:1}.mce-floatpanel{position:absolute;-webkit-box-shadow:0 5px 10px rgba(0, 0, 0, 0.2);-moz-box-shadow:0 5px 10px rgba(0, 0, 0, 0.2);box-shadow:0 5px 10px rgba(0, 0, 0, 0.2)}.mce-floatpanel.mce-fixed{position:fixed}.mce-floatpanel .mce-arrow,.mce-floatpanel .mce-arrow:after{position:absolute;display:block;width:0;height:0;border-color:transparent;border-style:solid}.mce-floatpanel .mce-arrow{border-width:11px}.mce-floatpanel .mce-arrow:after{border-width:10px;content:""}.mce-floatpanel.mce-popover{filter:progid:DXImageTransform.Microsoft.gradient(enabled = false);background:transparent;-webkit-border-radius:6px;-moz-border-radius:6px;border-radius:6px;-webkit-box-shadow:0 5px 10px rgba(0, 0, 0, 0.2);-moz-box-shadow:0 5px 10px rgba(0, 0, 0, 0.2);box-shadow:0 5px 10px rgba(0, 0, 0, 0.2);top:0;left:0;background:#fff;border:1px solid #9e9e9e;border:1px solid rgba(0,0,0,0.25)}.mce-floatpanel.mce-popover.mce-bottom{margin-top:10px;*margin-top:0}.mce-floatpanel.mce-popover.mce-bottom>.mce-arrow{left:50%;margin-left:-11px;border-top-width:0;border-bottom-color:#9e9e9e;border-bottom-color:rgba(0,0,0,0.25);top:-11px}.mce-floatpanel.mce-popover.mce-bottom>.mce-arrow:after{top:1px;margin-left:-10px;border-top-width:0;border-bottom-color:#fff}.mce-floatpanel.mce-popover.mce-bottom.mce-start{margin-left:-22px}.mce-floatpanel.mce-popover.mce-bottom.mce-start>.mce-arrow{left:20px}.mce-floatpanel.mce-popover.mce-bottom.mce-end{margin-left:22px}.mce-floatpanel.mce-popover.mce-bottom.mce-end>.mce-arrow{right:10px;left:auto}.mce-fullscreen{border:0;padding:0;margin:0;overflow:hidden;background:#fff;height:100%}div.mce-fullscreen{position:fixed;top:0;left:0}#mce-modal-block{opacity:0;filter:alpha(opacity=0);zoom:1;position:fixed;left:0;top:0;width:100%;height:100%;background:#000}#mce-modal-block.mce-in{opacity:.3;filter:alpha(opacity=30);zoom:1}.mce-window-move{cursor:move}.mce-window{-webkit-border-radius:6px;-moz-border-radius:6px;border-radius:6px;-webkit-box-shadow:0 3px 7px rgba(0, 0, 0, 0.3);-moz-box-shadow:0 3px 7px rgba(0, 0, 0, 0.3);box-shadow:0 3px 7px rgba(0, 0, 0, 0.3);filter:progid:DXImageTransform.Microsoft.gradient(enabled = false);background:transparent;background:#fff;position:fixed;top:0;left:0;opacity:0;-webkit-transition:opacity 150ms ease-in;transition:opacity 150ms ease-in}.mce-window.mce-in{opacity:1}.mce-window-head{padding:9px 15px;border-bottom:1px solid #c5c5c5;position:relative}.mce-window-head .mce-close{position:absolute;right:15px;top:9px;font-size:20px;font-weight:bold;line-height:20px;color:#858585;cursor:pointer;height:20px;overflow:hidden}.mce-close:hover{color:#adadad}.mce-window-head .mce-title{line-height:20px;font-size:20px;font-weight:bold;text-rendering:optimizelegibility;padding-right:10px}.mce-window .mce-container-body{display:block}.mce-foot{display:block;background-color:#fff;border-top:1px solid #c5c5c5;-webkit-border-radius:0 0 6px 6px;-moz-border-radius:0 0 6px 6px;border-radius:0 0 6px 6px}.mce-window-head .mce-dragh{position:absolute;top:0;left:0;cursor:move;width:90%;height:100%}.mce-window iframe{width:100%;height:100%}.mce-window.mce-fullscreen,.mce-window.mce-fullscreen .mce-foot{-webkit-border-radius:0;-moz-border-radius:0;border-radius:0}.mce-rtl .mce-window-head .mce-close{position:absolute;right:auto;left:15px}.mce-rtl .mce-window-head .mce-dragh{left:auto;right:0}.mce-rtl .mce-window-head .mce-title{direction:rtl;text-align:right}.mce-abs-layout{position:relative}body .mce-abs-layout-item,.mce-abs-end{position:absolute}.mce-abs-end{width:1px;height:1px}.mce-container-body.mce-abs-layout{overflow:hidden}.mce-tooltip{position:absolute;padding:5px;opacity:.8;filter:alpha(opacity=80);zoom:1}.mce-tooltip-inner{font-size:11px;background-color:#000;color:#fff;max-width:200px;padding:5px 8px 4px 8px;text-align:center;white-space:normal}.mce-tooltip-inner{-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px}.mce-tooltip-inner{-webkit-box-shadow:0 0 5px #000000;-moz-box-shadow:0 0 5px #000000;box-shadow:0 0 5px #000000}.mce-tooltip-arrow{position:absolute;width:0;height:0;line-height:0;border:5px dashed #000}.mce-tooltip-arrow-n{border-bottom-color:#000}.mce-tooltip-arrow-s{border-top-color:#000}.mce-tooltip-arrow-e{border-left-color:#000}.mce-tooltip-arrow-w{border-right-color:#000}.mce-tooltip-nw,.mce-tooltip-sw{margin-left:-14px}.mce-tooltip-n .mce-tooltip-arrow{top:0px;left:50%;margin-left:-5px;border-bottom-style:solid;border-top:none;border-left-color:transparent;border-right-color:transparent}.mce-tooltip-nw .mce-tooltip-arrow{top:0;left:10px;border-bottom-style:solid;border-top:none;border-left-color:transparent;border-right-color:transparent}.mce-tooltip-ne .mce-tooltip-arrow{top:0;right:10px;border-bottom-style:solid;border-top:none;border-left-color:transparent;border-right-color:transparent}.mce-tooltip-s .mce-tooltip-arrow{bottom:0;left:50%;margin-left:-5px;border-top-style:solid;border-bottom:none;border-left-color:transparent;border-right-color:transparent}.mce-tooltip-sw .mce-tooltip-arrow{bottom:0;left:10px;border-top-style:solid;border-bottom:none;border-left-color:transparent;border-right-color:transparent}.mce-tooltip-se .mce-tooltip-arrow{bottom:0;right:10px;border-top-style:solid;border-bottom:none;border-left-color:transparent;border-right-color:transparent}.mce-tooltip-e .mce-tooltip-arrow{right:0;top:50%;margin-top:-5px;border-left-style:solid;border-right:none;border-top-color:transparent;border-bottom-color:transparent}.mce-tooltip-w .mce-tooltip-arrow{left:0;top:50%;margin-top:-5px;border-right-style:solid;border-left:none;border-top-color:transparent;border-bottom-color:transparent}.mce-btn{border:1px solid #b1b1b1;border-color:rgba(0,0,0,0.1) rgba(0,0,0,0.1) rgba(0,0,0,0.25) rgba(0,0,0,0.25);position:relative;text-shadow:0 1px 1px rgba(255,255,255,0.75);display:inline-block;*display:inline;*zoom:1;-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px;-webkit-box-shadow:inset 0 1px 0 rgba(255, 255, 255, 0.2), 0 1px 2px rgba(0, 0, 0, 0.05);-moz-box-shadow:inset 0 1px 0 rgba(255, 255, 255, 0.2), 0 1px 2px rgba(0, 0, 0, 0.05);box-shadow:inset 0 1px 0 rgba(255, 255, 255, 0.2), 0 1px 2px rgba(0, 0, 0, 0.05);background-color:#f0f0f0;background-image:-moz-linear-gradient(top, #fff, #d9d9d9);background-image:-webkit-gradient(linear, 0 0, 0 100%, from(#fff), to(#d9d9d9));background-image:-webkit-linear-gradient(top, #fff, #d9d9d9);background-image:-o-linear-gradient(top, #fff, #d9d9d9);background-image:linear-gradient(to bottom, #fff, #d9d9d9);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffffff', endColorstr='#ffd9d9d9', GradientType=0);zoom:1}.mce-btn:hover,.mce-btn:focus{color:#333;background-color:#e3e3e3;background-image:-moz-linear-gradient(top, #f2f2f2, #ccc);background-image:-webkit-gradient(linear, 0 0, 0 100%, from(#f2f2f2), to(#ccc));background-image:-webkit-linear-gradient(top, #f2f2f2, #ccc);background-image:-o-linear-gradient(top, #f2f2f2, #ccc);background-image:linear-gradient(to bottom, #f2f2f2, #ccc);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff2f2f2', endColorstr='#ffcccccc', GradientType=0);zoom:1}.mce-btn.mce-disabled button,.mce-btn.mce-disabled:hover button{cursor:default;-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none;opacity:.4;filter:alpha(opacity=40);zoom:1}.mce-btn.mce-active,.mce-btn.mce-active:hover{background-color:#d6d6d6;background-image:-moz-linear-gradient(top, #e6e6e6, #c0c0c0);background-image:-webkit-gradient(linear, 0 0, 0 100%, from(#e6e6e6), to(#c0c0c0));background-image:-webkit-linear-gradient(top, #e6e6e6, #c0c0c0);background-image:-o-linear-gradient(top, #e6e6e6, #c0c0c0);background-image:linear-gradient(to bottom, #e6e6e6, #c0c0c0);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffe6e6e6', endColorstr='#ffc0c0c0', GradientType=0);zoom:1;-webkit-box-shadow:inset 0 2px 4px rgba(0, 0, 0, 0.15), 0 1px 2px rgba(0, 0, 0, 0.05);-moz-box-shadow:inset 0 2px 4px rgba(0, 0, 0, 0.15), 0 1px 2px rgba(0, 0, 0, 0.05);box-shadow:inset 0 2px 4px rgba(0, 0, 0, 0.15), 0 1px 2px rgba(0, 0, 0, 0.05)}.mce-btn:active{background-color:#d6d6d6;background-image:-moz-linear-gradient(top, #e6e6e6, #c0c0c0);background-image:-webkit-gradient(linear, 0 0, 0 100%, from(#e6e6e6), to(#c0c0c0));background-image:-webkit-linear-gradient(top, #e6e6e6, #c0c0c0);background-image:-o-linear-gradient(top, #e6e6e6, #c0c0c0);background-image:linear-gradient(to bottom, #e6e6e6, #c0c0c0);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffe6e6e6', endColorstr='#ffc0c0c0', GradientType=0);zoom:1;-webkit-box-shadow:inset 0 2px 4px rgba(0, 0, 0, 0.15), 0 1px 2px rgba(0, 0, 0, 0.05);-moz-box-shadow:inset 0 2px 4px rgba(0, 0, 0, 0.15), 0 1px 2px rgba(0, 0, 0, 0.05);box-shadow:inset 0 2px 4px rgba(0, 0, 0, 0.15), 0 1px 2px rgba(0, 0, 0, 0.05)}.mce-btn button{padding:4px 10px;font-size:14px;line-height:20px;*line-height:16px;cursor:pointer;color:#333;text-align:center;overflow:visible;-webkit-appearance:none}.mce-btn button::-moz-focus-inner{border:0;padding:0}.mce-btn i{text-shadow:1px 1px #fff}.mce-primary{min-width:50px;color:#fff;border:1px solid #b1b1b1;border-color:rgba(0,0,0,0.1) rgba(0,0,0,0.1) rgba(0,0,0,0.25) rgba(0,0,0,0.25);background-color:#006dcc;background-image:-moz-linear-gradient(top, #08c, #04c);background-image:-webkit-gradient(linear, 0 0, 0 100%, from(#08c), to(#04c));background-image:-webkit-linear-gradient(top, #08c, #04c);background-image:-o-linear-gradient(top, #08c, #04c);background-image:linear-gradient(to bottom, #08c, #04c);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff0088cc', endColorstr='#ff0044cc', GradientType=0);zoom:1}.mce-primary:hover,.mce-primary:focus{background-color:#005fb3;background-image:-moz-linear-gradient(top, #0077b3, #003cb3);background-image:-webkit-gradient(linear, 0 0, 0 100%, from(#0077b3), to(#003cb3));background-image:-webkit-linear-gradient(top, #0077b3, #003cb3);background-image:-o-linear-gradient(top, #0077b3, #003cb3);background-image:linear-gradient(to bottom, #0077b3, #003cb3);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff0077b3', endColorstr='#ff003cb3', GradientType=0);zoom:1}.mce-primary.mce-disabled button,.mce-primary.mce-disabled:hover button{cursor:default;-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none;opacity:.4;filter:alpha(opacity=40);zoom:1}.mce-primary.mce-active,.mce-primary.mce-active:hover,.mce-primary:not(.mce-disabled):active{background-color:#005299;background-image:-moz-linear-gradient(top, #069, #039);background-image:-webkit-gradient(linear, 0 0, 0 100%, from(#069), to(#039));background-image:-webkit-linear-gradient(top, #069, #039);background-image:-o-linear-gradient(top, #069, #039);background-image:linear-gradient(to bottom, #069, #039);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff006699', endColorstr='#ff003399', GradientType=0);zoom:1;-webkit-box-shadow:inset 0 2px 4px rgba(0, 0, 0, 0.15), 0 1px 2px rgba(0, 0, 0, 0.05);-moz-box-shadow:inset 0 2px 4px rgba(0, 0, 0, 0.15), 0 1px 2px rgba(0, 0, 0, 0.05);box-shadow:inset 0 2px 4px rgba(0, 0, 0, 0.15), 0 1px 2px rgba(0, 0, 0, 0.05)}.mce-primary button,.mce-primary button i{color:#fff;text-shadow:1px 1px #333}.mce-btn-large button{padding:9px 14px;font-size:16px;line-height:normal;-webkit-border-radius:5px;-moz-border-radius:5px;border-radius:5px}.mce-btn-large i{margin-top:2px}.mce-btn-small button{padding:1px 5px;font-size:12px;*padding-bottom:2px}.mce-btn-small i{line-height:20px;vertical-align:top;*line-height:18px}.mce-btn .mce-caret{margin-top:8px;margin-left:0}.mce-btn-small .mce-caret{margin-top:8px;margin-left:0}.mce-caret{display:inline-block;*display:inline;*zoom:1;width:0;height:0;vertical-align:top;border-top:4px solid #333;border-right:4px solid transparent;border-left:4px solid transparent;content:""}.mce-disabled .mce-caret{border-top-color:#aaa}.mce-caret.mce-up{border-bottom:4px solid #333;border-top:0}.mce-btn-flat{border:0;background:transparent;-webkit-border-radius:0;-moz-border-radius:0;border-radius:0;-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none;filter:none}.mce-btn-flat:hover,.mce-btn-flat.mce-active,.mce-btn-flat:focus,.mce-btn-flat:active{border:0;background:#e6e6e6;filter:none;-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none}.mce-rtl .mce-btn button{direction:rtl}.mce-btn-group .mce-btn{border-width:1px 0 1px 0;margin:0;-webkit-border-radius:0;-moz-border-radius:0;border-radius:0}.mce-btn-group .mce-first{border-left:1px solid #b1b1b1;border-left:1px solid rgba(0,0,0,0.25);-webkit-border-radius:3px 0 0 3px;-moz-border-radius:3px 0 0 3px;border-radius:3px 0 0 3px}.mce-btn-group .mce-last{border-right:1px solid #b1b1b1;border-right:1px solid rgba(0,0,0,0.1);-webkit-border-radius:0 3px 3px 0;-moz-border-radius:0 3px 3px 0;border-radius:0 3px 3px 0}.mce-btn-group .mce-first.mce-last{-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px}.mce-btn-group .mce-btn.mce-flow-layout-item{margin:0}.mce-checkbox{cursor:pointer}i.mce-i-checkbox{margin:0 3px 0 0;border:1px solid #c5c5c5;-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px;-webkit-box-shadow:inset 0 1px 0 rgba(255, 255, 255, 0.2), 0 1px 2px rgba(0, 0, 0, 0.05);-moz-box-shadow:inset 0 1px 0 rgba(255, 255, 255, 0.2), 0 1px 2px rgba(0, 0, 0, 0.05);box-shadow:inset 0 1px 0 rgba(255, 255, 255, 0.2), 0 1px 2px rgba(0, 0, 0, 0.05);background-color:#f0f0f0;background-image:-moz-linear-gradient(top, #fff, #d9d9d9);background-image:-webkit-gradient(linear, 0 0, 0 100%, from(#fff), to(#d9d9d9));background-image:-webkit-linear-gradient(top, #fff, #d9d9d9);background-image:-o-linear-gradient(top, #fff, #d9d9d9);background-image:linear-gradient(to bottom, #fff, #d9d9d9);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffffff', endColorstr='#ffd9d9d9', GradientType=0);zoom:1;text-indent:-10em;*font-size:0;*line-height:0;*text-indent:0;overflow:hidden}.mce-checked i.mce-i-checkbox{color:#333;font-size:16px;line-height:16px;text-indent:0}.mce-checkbox:focus i.mce-i-checkbox,.mce-checkbox.mce-focus i.mce-i-checkbox{border:1px solid rgba(82,168,236,0.8);-webkit-box-shadow:inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 8px rgba(82, 168, 236, 0.65);-moz-box-shadow:inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 8px rgba(82, 168, 236, 0.65);box-shadow:inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 8px rgba(82, 168, 236, 0.65)}.mce-checkbox.mce-disabled .mce-label,.mce-checkbox.mce-disabled i.mce-i-checkbox{color:#acacac}.mce-rtl .mce-checkbox{direction:rtl;text-align:right}.mce-rtl i.mce-i-checkbox{margin:0 0 0 3px}.mce-combobox{display:inline-block;*display:inline;*zoom:1;-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px;-webkit-box-shadow:inset 0 1px 1px rgba(0, 0, 0, 0.075);-moz-box-shadow:inset 0 1px 1px rgba(0, 0, 0, 0.075);box-shadow:inset 0 1px 1px rgba(0, 0, 0, 0.075);*height:32px}.mce-combobox input{border:1px solid #c5c5c5;border-right-color:#c5c5c5;height:28px}.mce-combobox.mce-disabled input{color:#adadad}.mce-combobox.mce-has-open input{-webkit-border-radius:4px 0 0 4px;-moz-border-radius:4px 0 0 4px;border-radius:4px 0 0 4px}.mce-combobox .mce-btn{border-left:0;-webkit-border-radius:0 4px 4px 0;-moz-border-radius:0 4px 4px 0;border-radius:0 4px 4px 0}.mce-combobox button{padding-right:8px;padding-left:8px}.mce-combobox.mce-disabled .mce-btn button{cursor:default;-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none;opacity:.4;filter:alpha(opacity=40);zoom:1}.mce-colorbox i{border:1px solid #c5c5c5;width:14px;height:14px}.mce-colorbutton .mce-ico{position:relative}.mce-colorbutton-grid{margin:4px}.mce-colorbutton button{padding-right:4px}.mce-colorbutton .mce-preview{padding-right:3px;display:block;position:absolute;left:50%;top:50%;margin-left:-14px;margin-top:7px;background:gray;width:13px;height:2px;overflow:hidden}.mce-colorbutton.mce-btn-small .mce-preview{margin-left:-16px;padding-right:0;width:16px}.mce-colorbutton .mce-open{padding-left:4px;border-left:1px solid transparent;border-right:1px solid transparent}.mce-colorbutton:hover .mce-open{border-left-color:#bdbdbd;border-right-color:#bdbdbd}.mce-colorbutton.mce-btn-small .mce-open{padding:0 3px 0 3px}.mce-rtl .mce-colorbutton{direction:rtl}.mce-rtl .mce-colorbutton .mce-preview{margin-left:0;padding-right:0;padding-left:4px;margin-right:-14px}.mce-rtl .mce-colorbutton.mce-btn-small .mce-preview{margin-left:0;padding-right:0;margin-right:-17px;padding-left:0}.mce-rtl .mce-colorbutton button{padding-right:10px;padding-left:10px}.mce-rtl .mce-colorbutton .mce-open{padding-left:4px;padding-right:4px}.mce-colorpicker{position:relative;width:250px;height:220px}.mce-colorpicker-sv{position:absolute;top:0;left:0;width:90%;height:100%;border:1px solid #c5c5c5;cursor:crosshair;overflow:hidden}.mce-colorpicker-h-chunk{width:100%}.mce-colorpicker-overlay1,.mce-colorpicker-overlay2{width:100%;height:100%;position:absolute;top:0;left:0}.mce-colorpicker-overlay1{filter:progid:DXImageTransform.Microsoft.gradient(GradientType=1, startColorstr='#ffffff', endColorstr='#00ffffff');-ms-filter:"progid:DXImageTransform.Microsoft.gradient(GradientType=1,startColorstr='#ffffff', endColorstr='#00ffffff')";background:linear-gradient(to right, #fff, rgba(255,255,255,0))}.mce-colorpicker-overlay2{filter:progid:DXImageTransform.Microsoft.gradient(GradientType=0, startColorstr='#00000000', endColorstr='#000000');-ms-filter:"progid:DXImageTransform.Microsoft.gradient(GradientType=0,startColorstr='#00000000', endColorstr='#000000')";background:linear-gradient(to bottom, rgba(0,0,0,0), #000)}.mce-colorpicker-selector1{background:none;position:absolute;width:12px;height:12px;margin:-8px 0 0 -8px;border:1px solid black;border-radius:50%}.mce-colorpicker-selector2{position:absolute;width:10px;height:10px;border:1px solid white;border-radius:50%}.mce-colorpicker-h{position:absolute;top:0;right:0;width:6.5%;height:100%;border:1px solid #c5c5c5;cursor:crosshair}.mce-colorpicker-h-marker{margin-top:-4px;position:absolute;top:0;left:-1px;width:100%;border:1px solid #333;background:#fff;height:4px;z-index:100}.mce-path{display:inline-block;*display:inline;*zoom:1;padding:8px;white-space:normal}.mce-path .mce-txt{display:inline-block;padding-right:3px}.mce-path .mce-path-body{display:inline-block}.mce-path-item{display:inline-block;*display:inline;*zoom:1;cursor:pointer;color:#333}.mce-path-item:hover{text-decoration:underline}.mce-path-item:focus{background:#666;color:#fff}.mce-path .mce-divider{display:inline}.mce-disabled .mce-path-item{color:#aaa}.mce-rtl .mce-path{direction:rtl}.mce-fieldset{border:0 solid #9E9E9E;-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px}.mce-fieldset>.mce-container-body{margin-top:-15px}.mce-fieldset-title{margin-left:5px;padding:0 5px 0 5px}.mce-fit-layout{display:inline-block;*display:inline;*zoom:1}.mce-fit-layout-item{position:absolute}.mce-flow-layout-item{display:inline-block;*display:inline;*zoom:1}.mce-flow-layout-item{margin:2px 0 2px 2px}.mce-flow-layout-item.mce-last{margin-right:2px}.mce-flow-layout{white-space:normal}.mce-tinymce-inline .mce-flow-layout{white-space:nowrap}.mce-rtl .mce-flow-layout{text-align:right;direction:rtl}.mce-rtl .mce-flow-layout-item{margin:2px 2px 2px 0}.mce-rtl .mce-flow-layout-item.mce-last{margin-left:2px}.mce-iframe{border:0 solid #9e9e9e;width:100%;height:100%}.mce-label{display:inline-block;*display:inline;*zoom:1;text-shadow:0 1px 1px rgba(255,255,255,0.75);overflow:hidden}.mce-label.mce-autoscroll{overflow:auto}.mce-label.mce-disabled{color:#aaa}.mce-label.mce-multiline{white-space:pre-wrap}.mce-label.mce-error{color:#a00}.mce-rtl .mce-label{text-align:right;direction:rtl}.mce-menubar .mce-menubtn{border-color:transparent;background:transparent;-webkit-border-radius:0;-moz-border-radius:0;border-radius:0;-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none;filter:none}.mce-menubar{border:1px solid #c4c4c4}.mce-menubar .mce-menubtn button span{color:#333}.mce-menubar .mce-caret{border-top-color:#333}.mce-menubar .mce-menubtn:hover,.mce-menubar .mce-menubtn.mce-active,.mce-menubar .mce-menubtn:focus{border-color:transparent;background:#e6e6e6;filter:none;-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none}.mce-menubtn span{color:#333;margin-right:2px;line-height:20px;*line-height:16px}.mce-menubtn.mce-btn-small span{font-size:12px}.mce-menubtn.mce-fixed-width span{display:inline-block;overflow-x:hidden;text-overflow:ellipsis;width:90px}.mce-menubtn.mce-fixed-width.mce-btn-small span{width:70px}.mce-menubtn .mce-caret{*margin-top:6px}.mce-rtl .mce-menubtn button{direction:rtl;text-align:right}.mce-listbox button{text-align:left;padding-right:20px;position:relative}.mce-listbox .mce-caret{position:absolute;margin-top:-2px;right:8px;top:50%}.mce-rtl .mce-listbox .mce-caret{right:auto;left:8px}.mce-rtl .mce-listbox button{padding-right:10px;padding-left:20px}.mce-menu-item{display:block;padding:6px 15px 6px 12px;clear:both;font-weight:normal;line-height:20px;color:#333;white-space:nowrap;cursor:pointer;line-height:normal;border-left:4px solid transparent;margin-bottom:1px}.mce-menu-item .mce-ico,.mce-menu-item .mce-text{color:#333}.mce-menu-item.mce-disabled .mce-text,.mce-menu-item.mce-disabled .mce-ico{color:#adadad}.mce-menu-item:hover .mce-text,.mce-menu-item.mce-selected .mce-text,.mce-menu-item:focus .mce-text{color:#fff}.mce-menu-item:hover .mce-ico,.mce-menu-item.mce-selected .mce-ico,.mce-menu-item:focus .mce-ico{color:#fff}.mce-menu-item.mce-disabled:hover{background:#ccc}.mce-menu-shortcut{display:inline-block;color:#adadad}.mce-menu-shortcut{display:inline-block;*display:inline;*zoom:1;padding:0 15px 0 20px}.mce-menu-item:hover .mce-menu-shortcut,.mce-menu-item.mce-selected .mce-menu-shortcut,.mce-menu-item:focus .mce-menu-shortcut{color:#fff}.mce-menu-item .mce-caret{margin-top:4px;*margin-top:3px;margin-right:6px;border-top:4px solid transparent;border-bottom:4px solid transparent;border-left:4px solid #333}.mce-menu-item.mce-selected .mce-caret,.mce-menu-item:focus .mce-caret,.mce-menu-item:hover .mce-caret{border-left-color:#fff}.mce-menu-align .mce-menu-shortcut{*margin-top:-2px}.mce-menu-align .mce-menu-shortcut,.mce-menu-align .mce-caret{position:absolute;right:0}.mce-menu-item.mce-active i{visibility:visible}.mce-menu-item-normal.mce-active{background-color:#c8def4}.mce-menu-item-preview.mce-active{border-left:5px solid #aaa}.mce-menu-item-normal.mce-active .mce-text{color:#333}.mce-menu-item-normal.mce-active:hover .mce-text,.mce-menu-item-normal.mce-active:hover .mce-ico{color:#fff}.mce-menu-item-normal.mce-active:focus .mce-text,.mce-menu-item-normal.mce-active:focus .mce-ico{color:#fff}.mce-menu-item:hover,.mce-menu-item.mce-selected,.mce-menu-item:focus{text-decoration:none;color:#fff;background-color:#0081c2;background-image:-moz-linear-gradient(top, #08c, #0077b3);background-image:-webkit-gradient(linear, 0 0, 0 100%, from(#08c), to(#0077b3));background-image:-webkit-linear-gradient(top, #08c, #0077b3);background-image:-o-linear-gradient(top, #08c, #0077b3);background-image:linear-gradient(to bottom, #08c, #0077b3);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff0088cc', endColorstr='#ff0077b3', GradientType=0);zoom:1}div.mce-menu .mce-menu-item-sep,.mce-menu-item-sep:hover{border:0;padding:0;height:1px;margin:9px 1px;overflow:hidden;background:#cbcbcb;border-bottom:1px solid #fff;cursor:default;filter:none}.mce-menu.mce-rtl{direction:rtl}.mce-rtl .mce-menu-item{text-align:right;direction:rtl;padding:6px 12px 6px 15px}.mce-menu-align.mce-rtl .mce-menu-shortcut,.mce-menu-align.mce-rtl .mce-caret{right:auto;left:0}.mce-rtl .mce-menu-item .mce-caret{margin-left:6px;margin-right:0;border-right:4px solid #333;border-left:0}.mce-rtl .mce-menu-item.mce-selected .mce-caret,.mce-rtl .mce-menu-item:focus .mce-caret,.mce-rtl .mce-menu-item:hover .mce-caret{border-left-color:transparent;border-right-color:#fff}.mce-menu{position:absolute;left:0;top:0;filter:progid:DXImageTransform.Microsoft.gradient(enabled = false);background:transparent;z-index:1000;padding:5px 0 5px 0;margin:2px 0 0;min-width:160px;background:#fff;border:1px solid #989898;border:1px solid rgba(0,0,0,0.2);z-index:1002;-webkit-border-radius:6px;-moz-border-radius:6px;border-radius:6px;-webkit-box-shadow:0 5px 10px rgba(0, 0, 0, 0.2);-moz-box-shadow:0 5px 10px rgba(0, 0, 0, 0.2);box-shadow:0 5px 10px rgba(0, 0, 0, 0.2);max-height:400px;overflow:auto;overflow-x:hidden}.mce-menu i{display:none}.mce-menu-has-icons i{display:inline-block;*display:inline}.mce-menu-sub-tr-tl{margin:-6px 0 0 -1px}.mce-menu-sub-br-bl{margin:6px 0 0 -1px}.mce-menu-sub-tl-tr{margin:-6px 0 0 1px}.mce-menu-sub-bl-br{margin:6px 0 0 1px}.mce-container-body .mce-resizehandle{position:absolute;right:0;bottom:0;width:16px;height:16px;visibility:visible;cursor:s-resize;margin:0}.mce-container-body .mce-resizehandle-both{cursor:se-resize}i.mce-i-resize{color:#333}.mce-spacer{visibility:hidden}.mce-splitbtn .mce-open{border-left:1px solid transparent;border-right:1px solid transparent}.mce-splitbtn:hover .mce-open{border-left-color:#bdbdbd;border-right-color:#bdbdbd}.mce-splitbtn button{padding-right:4px}.mce-splitbtn .mce-open{padding-left:4px}.mce-splitbtn .mce-open.mce-active{-webkit-box-shadow:inset 0 2px 4px rgba(0, 0, 0, 0.15), 0 1px 2px rgba(0, 0, 0, 0.05);-moz-box-shadow:inset 0 2px 4px rgba(0, 0, 0, 0.15), 0 1px 2px rgba(0, 0, 0, 0.05);box-shadow:inset 0 2px 4px rgba(0, 0, 0, 0.15), 0 1px 2px rgba(0, 0, 0, 0.05)}.mce-splitbtn.mce-btn-small .mce-open{padding:0 3px 0 3px}.mce-rtl .mce-splitbtn{direction:rtl;text-align:right}.mce-rtl .mce-splitbtn button{padding-right:10px;padding-left:10px}.mce-rtl .mce-splitbtn .mce-open{padding-left:4px;padding-right:4px}.mce-stack-layout-item{display:block}.mce-tabs{display:block;border-bottom:1px solid #c5c5c5}.mce-tab{display:inline-block;*display:inline;*zoom:1;border:1px solid #c5c5c5;border-width:0 1px 0 0;background:#e3e3e3;padding:8px;text-shadow:0 1px 1px rgba(255,255,255,0.75);height:13px;cursor:pointer}.mce-tab:hover{background:#fdfdfd}.mce-tab.mce-active{background:#fdfdfd;border-bottom-color:transparent;margin-bottom:-1px;height:14px}.mce-rtl .mce-tabs{text-align:right;direction:rtl}.mce-rtl .mce-tab{border-width:0 0 0 1px}.mce-textbox{background:#fff;border:1px solid #c5c5c5;-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px;-webkit-box-shadow:inset 0 1px 1px rgba(0, 0, 0, 0.075);-moz-box-shadow:inset 0 1px 1px rgba(0, 0, 0, 0.075);box-shadow:inset 0 1px 1px rgba(0, 0, 0, 0.075);display:inline-block;-webkit-transition:border linear .2s, box-shadow linear .2s;transition:border linear .2s, box-shadow linear .2s;height:28px;resize:none;padding:0 4px 0 4px;white-space:pre-wrap;*white-space:pre;color:#333}.mce-textbox:focus,.mce-textbox.mce-focus{border-color:rgba(82,168,236,0.8);-webkit-box-shadow:inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 8px rgba(82, 168, 236, 0.65);-moz-box-shadow:inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 8px rgba(82, 168, 236, 0.65);box-shadow:inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 8px rgba(82, 168, 236, 0.65)}.mce-placeholder .mce-textbox{color:#aaa}.mce-textbox.mce-multiline{padding:4px}.mce-textbox.mce-disabled{color:#adadad}.mce-rtl .mce-textbox{text-align:right;direction:rtl}.mce-throbber{position:absolute;top:0;left:0;width:100%;height:100%;opacity:.6;filter:alpha(opacity=60);zoom:1;background:#fff url('img/loader.gif') no-repeat center center}.mce-throbber-inline{position:static;height:50px}@font-face{font-family:'tinymce';src:url('fonts/tinymce.eot');src:url('fonts/tinymce.eot?#iefix') format('embedded-opentype'),url('fonts/tinymce.woff') format('woff'),url('fonts/tinymce.ttf') format('truetype'),url('fonts/tinymce.svg#tinymce') format('svg');font-weight:normal;font-style:normal}@font-face{font-family:'tinymce-small';src:url('fonts/tinymce-small.eot');src:url('fonts/tinymce-small.eot?#iefix') format('embedded-opentype'),url('fonts/tinymce-small.woff') format('woff'),url('fonts/tinymce-small.ttf') format('truetype'),url('fonts/tinymce-small.svg#tinymce') format('svg');font-weight:normal;font-style:normal}.mce-ico{font-family:'tinymce';font-style:normal;font-weight:normal;font-size:16px;line-height:16px;vertical-align:text-top;-webkit-font-smoothing:antialiased;display:inline-block;background:transparent center center;width:16px;height:16px;color:#333;-ie7-icon:' '}.mce-btn-small .mce-ico{font-family:'tinymce-small'}.mce-ico,i.mce-i-checkbox{zoom:expression(this.runtimeStyle['zoom'] = '1', this.innerHTML = this.currentStyle['-ie7-icon'].substr(1, 1) + '&nbsp;')}.mce-i-save{-ie7-icon:"\e000"}.mce-i-newdocument{-ie7-icon:"\e001"}.mce-i-fullpage{-ie7-icon:"\e002"}.mce-i-alignleft{-ie7-icon:"\e003"}.mce-i-aligncenter{-ie7-icon:"\e004"}.mce-i-alignright{-ie7-icon:"\e005"}.mce-i-alignjustify{-ie7-icon:"\e006"}.mce-i-cut{-ie7-icon:"\e007"}.mce-i-paste{-ie7-icon:"\e008"}.mce-i-searchreplace{-ie7-icon:"\e009"}.mce-i-bullist{-ie7-icon:"\e00a"}.mce-i-numlist{-ie7-icon:"\e00b"}.mce-i-indent{-ie7-icon:"\e00c"}.mce-i-outdent{-ie7-icon:"\e00d"}.mce-i-blockquote{-ie7-icon:"\e00e"}.mce-i-undo{-ie7-icon:"\e00f"}.mce-i-redo{-ie7-icon:"\e010"}.mce-i-link{-ie7-icon:"\e011"}.mce-i-unlink{-ie7-icon:"\e012"}.mce-i-anchor{-ie7-icon:"\e013"}.mce-i-image{-ie7-icon:"\e014"}.mce-i-media{-ie7-icon:"\e015"}.mce-i-help{-ie7-icon:"\e016"}.mce-i-code{-ie7-icon:"\e017"}.mce-i-insertdatetime{-ie7-icon:"\e018"}.mce-i-preview{-ie7-icon:"\e019"}.mce-i-forecolor{-ie7-icon:"\e01a"}.mce-i-backcolor{-ie7-icon:"\e01a"}.mce-i-table{-ie7-icon:"\e01b"}.mce-i-hr{-ie7-icon:"\e01c"}.mce-i-removeformat{-ie7-icon:"\e01d"}.mce-i-subscript{-ie7-icon:"\e01e"}.mce-i-superscript{-ie7-icon:"\e01f"}.mce-i-charmap{-ie7-icon:"\e020"}.mce-i-emoticons{-ie7-icon:"\e021"}.mce-i-print{-ie7-icon:"\e022"}.mce-i-fullscreen{-ie7-icon:"\e023"}.mce-i-spellchecker{-ie7-icon:"\e024"}.mce-i-nonbreaking{-ie7-icon:"\e025"}.mce-i-template{-ie7-icon:"\e026"}.mce-i-pagebreak{-ie7-icon:"\e027"}.mce-i-restoredraft{-ie7-icon:"\e028"}.mce-i-untitled{-ie7-icon:"\e029"}.mce-i-bold{-ie7-icon:"\e02a"}.mce-i-italic{-ie7-icon:"\e02b"}.mce-i-underline{-ie7-icon:"\e02c"}.mce-i-strikethrough{-ie7-icon:"\e02d"}.mce-i-visualchars{-ie7-icon:"\e02e"}.mce-i-ltr{-ie7-icon:"\e02f"}.mce-i-rtl{-ie7-icon:"\e030"}.mce-i-copy{-ie7-icon:"\e031"}.mce-i-resize{-ie7-icon:"\e032"}.mce-i-browse{-ie7-icon:"\e034"}.mce-i-pastetext{-ie7-icon:"\e035"}.mce-i-checkbox,.mce-i-selected{-ie7-icon:"\e033"}.mce-i-selected{visibility:hidden}.mce-i-backcolor{background:#BBB}
  • trunk/src/wp-includes/js/tinymce/skins/lightgray/skin.min.css

    r28768 r29203  
    1 .mce-container,.mce-container *,.mce-widget,.mce-widget *,.mce-reset{margin:0;padding:0;border:0;outline:0;vertical-align:top;background:transparent;text-decoration:none;color:#333;font-family:"Helvetica Neue",Helvetica,Arial,sans-serif;font-size:14px;text-shadow:none;float:none;position:static;width:auto;height:auto;white-space:nowrap;cursor:inherit;-webkit-tap-highlight-color:transparent;line-height:normal;font-weight:normal;text-align:left;-moz-box-sizing:content-box;-webkit-box-sizing:content-box;box-sizing:content-box;direction:ltr}.mce-widget button{-moz-box-sizing:border-box;-webkit-box-sizing:border-box;box-sizing:border-box}.mce-container *[unselectable]{-moz-user-select:none;-webkit-user-select:none;-o-user-select:none;user-select:none}.mce-fade{opacity:0;-webkit-transition:opacity .15s linear;transition:opacity .15s linear}.mce-fade.mce-in{opacity:1}.mce-tinymce{visibility:inherit !important;position:relative}.mce-fullscreen{border:0;padding:0;margin:0;overflow:hidden;height:100%;z-index:100}div.mce-fullscreen{position:fixed;top:0;left:0;width:100%;height:auto}.mce-tinymce{display:block;-webkit-border-radius:2px;-moz-border-radius:2px;border-radius:2px}.mce-wordcount{position:absolute;top:0;right:0;padding:8px}div.mce-edit-area{background:#FFF;filter:none}.mce-statusbar{position:relative}.mce-statusbar .mce-container-body{position:relative}.mce-fullscreen .mce-resizehandle{display:none}.mce-charmap{border-collapse:collapse}.mce-charmap td{cursor:default;border:1px solid #9e9e9e;width:20px;height:20px;line-height:20px;text-align:center;vertical-align:middle;padding:2px}.mce-charmap td div{text-align:center}.mce-charmap td:hover{background:#d9d9d9}.mce-grid td div{border:1px solid #d6d6d6;width:12px;height:12px;margin:2px;cursor:pointer}.mce-grid td div:focus{border-color:#a1a1a1}.mce-grid td div[disabled]{cursor:not-allowed}.mce-grid{border-spacing:2px;border-collapse:separate}.mce-grid a{display:block;border:1px solid transparent}.mce-grid a:hover,.mce-grid a:focus{border-color:#a1a1a1}.mce-grid-border{margin:0 4px 0 4px}.mce-grid-border a{border-color:#d6d6d6;width:13px;height:13px}.mce-grid-border a:hover,.mce-grid-border a.mce-active{border-color:#a1a1a1;background:#c8def4}.mce-text-center{text-align:center}div.mce-tinymce-inline{width:100%;-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none}input.mce-textcolor-hexpicker{border:1px solid #d6d6d6;margin:2px;height:12px;font-size:11px}.mce-toolbar-grp{padding-bottom:2px}.mce-toolbar-grp .mce-flow-layout-item{margin-bottom:0}.mce-rtl .mce-wordcount{left:0;right:auto}.mce-container,.mce-container-body{display:block}.mce-autoscroll{overflow:hidden}.mce-scrollbar{position:absolute;width:7px;height:100%;top:2px;right:2px;opacity:.4;filter:alpha(opacity=40);zoom:1}.mce-scrollbar-h{top:auto;right:auto;left:2px;bottom:2px;width:100%;height:7px}.mce-scrollbar-thumb{position:absolute;background-color:#000;border:1px solid #888;border-color:rgba(85,85,85,0.6);width:5px;height:100%;-webkit-border-radius:7px;-moz-border-radius:7px;border-radius:7px}.mce-scrollbar-h .mce-scrollbar-thumb{width:100%;height:5px}.mce-scrollbar:hover,.mce-scrollbar.mce-active{background-color:#AAA;opacity:.6;filter:alpha(opacity=60);zoom:1;-webkit-border-radius:7px;-moz-border-radius:7px;border-radius:7px}.mce-scroll{position:relative}.mce-panel{border:0 solid #9e9e9e;background-color:#f0f0f0;background-image:-moz-linear-gradient(top, #fdfdfd, #ddd);background-image:-webkit-gradient(linear, 0 0, 0 100%, from(#fdfdfd), to(#ddd));background-image:-webkit-linear-gradient(top, #fdfdfd, #ddd);background-image:-o-linear-gradient(top, #fdfdfd, #ddd);background-image:linear-gradient(to bottom, #fdfdfd, #ddd);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fffdfdfd', endColorstr='#ffdddddd', GradientType=0);zoom:1}.mce-floatpanel{position:absolute;-webkit-box-shadow:0 5px 10px rgba(0, 0, 0, 0.2);-moz-box-shadow:0 5px 10px rgba(0, 0, 0, 0.2);box-shadow:0 5px 10px rgba(0, 0, 0, 0.2)}.mce-floatpanel.mce-fixed{position:fixed}.mce-floatpanel .mce-arrow,.mce-floatpanel .mce-arrow:after{position:absolute;display:block;width:0;height:0;border-color:transparent;border-style:solid}.mce-floatpanel .mce-arrow{border-width:11px}.mce-floatpanel .mce-arrow:after{border-width:10px;content:""}.mce-floatpanel.mce-popover{filter:progid:DXImageTransform.Microsoft.gradient(enabled = false);background:transparent;-webkit-border-radius:6px;-moz-border-radius:6px;border-radius:6px;-webkit-box-shadow:0 5px 10px rgba(0, 0, 0, 0.2);-moz-box-shadow:0 5px 10px rgba(0, 0, 0, 0.2);box-shadow:0 5px 10px rgba(0, 0, 0, 0.2);top:0;left:0;background:#fff;border:1px solid #9e9e9e;border:1px solid rgba(0,0,0,0.25)}.mce-floatpanel.mce-popover.mce-bottom{margin-top:10px;*margin-top:0}.mce-floatpanel.mce-popover.mce-bottom>.mce-arrow{left:50%;margin-left:-11px;border-top-width:0;border-bottom-color:#9e9e9e;border-bottom-color:rgba(0,0,0,0.25);top:-11px}.mce-floatpanel.mce-popover.mce-bottom>.mce-arrow:after{top:1px;margin-left:-10px;border-top-width:0;border-bottom-color:#fff}.mce-floatpanel.mce-popover.mce-bottom.mce-start{margin-left:-22px}.mce-floatpanel.mce-popover.mce-bottom.mce-start>.mce-arrow{left:20px}.mce-floatpanel.mce-popover.mce-bottom.mce-end{margin-left:22px}.mce-floatpanel.mce-popover.mce-bottom.mce-end>.mce-arrow{right:10px;left:auto}.mce-fullscreen{border:0;padding:0;margin:0;overflow:hidden;background:#fff;height:100%}div.mce-fullscreen{position:fixed;top:0;left:0}#mce-modal-block{opacity:0;filter:alpha(opacity=0);zoom:1;position:fixed;left:0;top:0;width:100%;height:100%;background:#000}#mce-modal-block.mce-in{opacity:.3;filter:alpha(opacity=30);zoom:1}.mce-window-move{cursor:move}.mce-window{-webkit-border-radius:6px;-moz-border-radius:6px;border-radius:6px;-webkit-box-shadow:0 3px 7px rgba(0, 0, 0, 0.3);-moz-box-shadow:0 3px 7px rgba(0, 0, 0, 0.3);box-shadow:0 3px 7px rgba(0, 0, 0, 0.3);filter:progid:DXImageTransform.Microsoft.gradient(enabled = false);background:transparent;background:#fff;position:fixed;top:0;left:0;opacity:0;-webkit-transition:opacity 150ms ease-in;transition:opacity 150ms ease-in}.mce-window.mce-in{opacity:1}.mce-window-head{padding:9px 15px;border-bottom:1px solid #c5c5c5;position:relative}.mce-window-head .mce-close{position:absolute;right:15px;top:9px;font-size:20px;font-weight:bold;line-height:20px;color:#858585;cursor:pointer;height:20px;overflow:hidden}.mce-close:hover{color:#adadad}.mce-window-head .mce-title{line-height:20px;font-size:20px;font-weight:bold;text-rendering:optimizelegibility;padding-right:10px}.mce-window .mce-container-body{display:block}.mce-foot{display:block;background-color:#fff;border-top:1px solid #c5c5c5;-webkit-border-radius:0 0 6px 6px;-moz-border-radius:0 0 6px 6px;border-radius:0 0 6px 6px}.mce-window-head .mce-dragh{position:absolute;top:0;left:0;cursor:move;width:90%;height:100%}.mce-window iframe{width:100%;height:100%}.mce-window.mce-fullscreen,.mce-window.mce-fullscreen .mce-foot{-webkit-border-radius:0;-moz-border-radius:0;border-radius:0}.mce-rtl .mce-window-head .mce-close{position:absolute;right:auto;left:15px}.mce-rtl .mce-window-head .mce-dragh{left:auto;right:0}.mce-rtl .mce-window-head .mce-title{direction:rtl;text-align:right}.mce-abs-layout{position:relative}body .mce-abs-layout-item,.mce-abs-end{position:absolute}.mce-abs-end{width:1px;height:1px}.mce-container-body.mce-abs-layout{overflow:hidden}.mce-tooltip{position:absolute;padding:5px;opacity:.8;filter:alpha(opacity=80);zoom:1}.mce-tooltip-inner{font-size:11px;background-color:#000;color:#fff;max-width:200px;padding:5px 8px 4px 8px;text-align:center;white-space:normal}.mce-tooltip-inner{-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px}.mce-tooltip-inner{-webkit-box-shadow:0 0 5px #000000;-moz-box-shadow:0 0 5px #000000;box-shadow:0 0 5px #000000}.mce-tooltip-arrow{position:absolute;width:0;height:0;line-height:0;border:5px dashed #000}.mce-tooltip-arrow-n{border-bottom-color:#000}.mce-tooltip-arrow-s{border-top-color:#000}.mce-tooltip-arrow-e{border-left-color:#000}.mce-tooltip-arrow-w{border-right-color:#000}.mce-tooltip-nw,.mce-tooltip-sw{margin-left:-14px}.mce-tooltip-n .mce-tooltip-arrow{top:0px;left:50%;margin-left:-5px;border-bottom-style:solid;border-top:none;border-left-color:transparent;border-right-color:transparent}.mce-tooltip-nw .mce-tooltip-arrow{top:0;left:10px;border-bottom-style:solid;border-top:none;border-left-color:transparent;border-right-color:transparent}.mce-tooltip-ne .mce-tooltip-arrow{top:0;right:10px;border-bottom-style:solid;border-top:none;border-left-color:transparent;border-right-color:transparent}.mce-tooltip-s .mce-tooltip-arrow{bottom:0;left:50%;margin-left:-5px;border-top-style:solid;border-bottom:none;border-left-color:transparent;border-right-color:transparent}.mce-tooltip-sw .mce-tooltip-arrow{bottom:0;left:10px;border-top-style:solid;border-bottom:none;border-left-color:transparent;border-right-color:transparent}.mce-tooltip-se .mce-tooltip-arrow{bottom:0;right:10px;border-top-style:solid;border-bottom:none;border-left-color:transparent;border-right-color:transparent}.mce-tooltip-e .mce-tooltip-arrow{right:0;top:50%;margin-top:-5px;border-left-style:solid;border-right:none;border-top-color:transparent;border-bottom-color:transparent}.mce-tooltip-w .mce-tooltip-arrow{left:0;top:50%;margin-top:-5px;border-right-style:solid;border-left:none;border-top-color:transparent;border-bottom-color:transparent}.mce-btn{border:1px solid #b1b1b1;border-color:rgba(0,0,0,0.1) rgba(0,0,0,0.1) rgba(0,0,0,0.25) rgba(0,0,0,0.25);position:relative;text-shadow:0 1px 1px rgba(255,255,255,0.75);display:inline-block;*display:inline;*zoom:1;-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px;-webkit-box-shadow:inset 0 1px 0 rgba(255, 255, 255, 0.2), 0 1px 2px rgba(0, 0, 0, 0.05);-moz-box-shadow:inset 0 1px 0 rgba(255, 255, 255, 0.2), 0 1px 2px rgba(0, 0, 0, 0.05);box-shadow:inset 0 1px 0 rgba(255, 255, 255, 0.2), 0 1px 2px rgba(0, 0, 0, 0.05);background-color:#f0f0f0;background-image:-moz-linear-gradient(top, #fff, #d9d9d9);background-image:-webkit-gradient(linear, 0 0, 0 100%, from(#fff), to(#d9d9d9));background-image:-webkit-linear-gradient(top, #fff, #d9d9d9);background-image:-o-linear-gradient(top, #fff, #d9d9d9);background-image:linear-gradient(to bottom, #fff, #d9d9d9);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffffff', endColorstr='#ffd9d9d9', GradientType=0);zoom:1}.mce-btn:hover,.mce-btn:focus{color:#333;background-color:#e3e3e3;background-image:-moz-linear-gradient(top, #f2f2f2, #ccc);background-image:-webkit-gradient(linear, 0 0, 0 100%, from(#f2f2f2), to(#ccc));background-image:-webkit-linear-gradient(top, #f2f2f2, #ccc);background-image:-o-linear-gradient(top, #f2f2f2, #ccc);background-image:linear-gradient(to bottom, #f2f2f2, #ccc);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff2f2f2', endColorstr='#ffcccccc', GradientType=0);zoom:1}.mce-btn.mce-disabled button,.mce-btn.mce-disabled:hover button{cursor:default;-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none;opacity:.4;filter:alpha(opacity=40);zoom:1}.mce-btn.mce-active,.mce-btn.mce-active:hover{background-color:#d6d6d6;background-image:-moz-linear-gradient(top, #e6e6e6, #c0c0c0);background-image:-webkit-gradient(linear, 0 0, 0 100%, from(#e6e6e6), to(#c0c0c0));background-image:-webkit-linear-gradient(top, #e6e6e6, #c0c0c0);background-image:-o-linear-gradient(top, #e6e6e6, #c0c0c0);background-image:linear-gradient(to bottom, #e6e6e6, #c0c0c0);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffe6e6e6', endColorstr='#ffc0c0c0', GradientType=0);zoom:1;-webkit-box-shadow:inset 0 2px 4px rgba(0, 0, 0, 0.15), 0 1px 2px rgba(0, 0, 0, 0.05);-moz-box-shadow:inset 0 2px 4px rgba(0, 0, 0, 0.15), 0 1px 2px rgba(0, 0, 0, 0.05);box-shadow:inset 0 2px 4px rgba(0, 0, 0, 0.15), 0 1px 2px rgba(0, 0, 0, 0.05)}.mce-btn:not(.mce-disabled):active{background-color:#d6d6d6;background-image:-moz-linear-gradient(top, #e6e6e6, #c0c0c0);background-image:-webkit-gradient(linear, 0 0, 0 100%, from(#e6e6e6), to(#c0c0c0));background-image:-webkit-linear-gradient(top, #e6e6e6, #c0c0c0);background-image:-o-linear-gradient(top, #e6e6e6, #c0c0c0);background-image:linear-gradient(to bottom, #e6e6e6, #c0c0c0);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffe6e6e6', endColorstr='#ffc0c0c0', GradientType=0);zoom:1;-webkit-box-shadow:inset 0 2px 4px rgba(0, 0, 0, 0.15), 0 1px 2px rgba(0, 0, 0, 0.05);-moz-box-shadow:inset 0 2px 4px rgba(0, 0, 0, 0.15), 0 1px 2px rgba(0, 0, 0, 0.05);box-shadow:inset 0 2px 4px rgba(0, 0, 0, 0.15), 0 1px 2px rgba(0, 0, 0, 0.05)}.mce-btn button{padding:4px 10px;font-size:14px;line-height:20px;*line-height:16px;cursor:pointer;color:#333;text-align:center;overflow:visible;-webkit-appearance:none}.mce-btn button::-moz-focus-inner{border:0;padding:0}.mce-btn i{text-shadow:1px 1px #fff}.mce-primary{min-width:50px;color:#fff;border:1px solid #b1b1b1;border-color:rgba(0,0,0,0.1) rgba(0,0,0,0.1) rgba(0,0,0,0.25) rgba(0,0,0,0.25);background-color:#006dcc;background-image:-moz-linear-gradient(top, #08c, #04c);background-image:-webkit-gradient(linear, 0 0, 0 100%, from(#08c), to(#04c));background-image:-webkit-linear-gradient(top, #08c, #04c);background-image:-o-linear-gradient(top, #08c, #04c);background-image:linear-gradient(to bottom, #08c, #04c);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff0088cc', endColorstr='#ff0044cc', GradientType=0);zoom:1}.mce-primary:hover,.mce-primary:focus{background-color:#005fb3;background-image:-moz-linear-gradient(top, #0077b3, #003cb3);background-image:-webkit-gradient(linear, 0 0, 0 100%, from(#0077b3), to(#003cb3));background-image:-webkit-linear-gradient(top, #0077b3, #003cb3);background-image:-o-linear-gradient(top, #0077b3, #003cb3);background-image:linear-gradient(to bottom, #0077b3, #003cb3);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff0077b3', endColorstr='#ff003cb3', GradientType=0);zoom:1}.mce-primary.mce-disabled button,.mce-primary.mce-disabled:hover button{cursor:default;-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none;opacity:.4;filter:alpha(opacity=40);zoom:1}.mce-primary.mce-active,.mce-primary.mce-active:hover,.mce-primary:not(.mce-disabled):active{background-color:#005299;background-image:-moz-linear-gradient(top, #069, #039);background-image:-webkit-gradient(linear, 0 0, 0 100%, from(#069), to(#039));background-image:-webkit-linear-gradient(top, #069, #039);background-image:-o-linear-gradient(top, #069, #039);background-image:linear-gradient(to bottom, #069, #039);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff006699', endColorstr='#ff003399', GradientType=0);zoom:1;-webkit-box-shadow:inset 0 2px 4px rgba(0, 0, 0, 0.15), 0 1px 2px rgba(0, 0, 0, 0.05);-moz-box-shadow:inset 0 2px 4px rgba(0, 0, 0, 0.15), 0 1px 2px rgba(0, 0, 0, 0.05);box-shadow:inset 0 2px 4px rgba(0, 0, 0, 0.15), 0 1px 2px rgba(0, 0, 0, 0.05)}.mce-primary button,.mce-primary button i{color:#fff;text-shadow:1px 1px #333}.mce-btn-large button{padding:9px 14px;font-size:16px;line-height:normal;-webkit-border-radius:5px;-moz-border-radius:5px;border-radius:5px}.mce-btn-large i{margin-top:2px}.mce-btn-small button{padding:1px 5px;font-size:12px;*padding-bottom:2px}.mce-btn-small i{line-height:20px;vertical-align:top;*line-height:18px}.mce-btn .mce-caret{margin-top:8px;margin-left:0}.mce-btn-small .mce-caret{margin-top:8px;margin-left:0}.mce-caret{display:inline-block;*display:inline;*zoom:1;width:0;height:0;vertical-align:top;border-top:4px solid #333;border-right:4px solid transparent;border-left:4px solid transparent;content:""}.mce-disabled .mce-caret{border-top-color:#aaa}.mce-caret.mce-up{border-bottom:4px solid #333;border-top:0}.mce-rtl .mce-btn button{direction:rtl}.mce-btn-group .mce-btn{border-width:1px 0 1px 0;margin:0;-webkit-border-radius:0;-moz-border-radius:0;border-radius:0}.mce-btn-group .mce-first{border-left:1px solid #b1b1b1;border-left:1px solid rgba(0,0,0,0.25);-webkit-border-radius:3px 0 0 3px;-moz-border-radius:3px 0 0 3px;border-radius:3px 0 0 3px}.mce-btn-group .mce-last{border-right:1px solid #b1b1b1;border-right:1px solid rgba(0,0,0,0.1);-webkit-border-radius:0 3px 3px 0;-moz-border-radius:0 3px 3px 0;border-radius:0 3px 3px 0}.mce-btn-group .mce-first.mce-last{-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px}.mce-btn-group .mce-btn.mce-flow-layout-item{margin:0}.mce-checkbox{cursor:pointer}i.mce-i-checkbox{margin:0 3px 0 0;border:1px solid #c5c5c5;-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px;-webkit-box-shadow:inset 0 1px 0 rgba(255, 255, 255, 0.2), 0 1px 2px rgba(0, 0, 0, 0.05);-moz-box-shadow:inset 0 1px 0 rgba(255, 255, 255, 0.2), 0 1px 2px rgba(0, 0, 0, 0.05);box-shadow:inset 0 1px 0 rgba(255, 255, 255, 0.2), 0 1px 2px rgba(0, 0, 0, 0.05);background-color:#f0f0f0;background-image:-moz-linear-gradient(top, #fff, #d9d9d9);background-image:-webkit-gradient(linear, 0 0, 0 100%, from(#fff), to(#d9d9d9));background-image:-webkit-linear-gradient(top, #fff, #d9d9d9);background-image:-o-linear-gradient(top, #fff, #d9d9d9);background-image:linear-gradient(to bottom, #fff, #d9d9d9);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffffff', endColorstr='#ffd9d9d9', GradientType=0);zoom:1;text-indent:-10em;*font-size:0;*line-height:0;*text-indent:0;overflow:hidden}.mce-checked i.mce-i-checkbox{color:#333;font-size:16px;line-height:16px;text-indent:0}.mce-checkbox:focus i.mce-i-checkbox,.mce-checkbox.mce-focus i.mce-i-checkbox{border:1px solid rgba(82,168,236,0.8);-webkit-box-shadow:inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 8px rgba(82, 168, 236, 0.65);-moz-box-shadow:inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 8px rgba(82, 168, 236, 0.65);box-shadow:inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 8px rgba(82, 168, 236, 0.65)}.mce-checkbox.mce-disabled .mce-label,.mce-checkbox.mce-disabled i.mce-i-checkbox{color:#acacac}.mce-rtl .mce-checkbox{direction:rtl;text-align:right}.mce-rtl i.mce-i-checkbox{margin:0 0 0 3px}.mce-colorbutton .mce-ico{position:relative}.mce-colorbutton-grid{margin:4px}.mce-colorbutton button{padding-right:4px}.mce-colorbutton .mce-preview{padding-right:3px;display:block;position:absolute;left:50%;top:50%;margin-left:-14px;margin-top:7px;background:gray;width:13px;height:2px;overflow:hidden}.mce-colorbutton.mce-btn-small .mce-preview{margin-left:-16px;padding-right:0;width:16px}.mce-colorbutton .mce-open{padding-left:4px;border-left:1px solid transparent;border-right:1px solid transparent}.mce-colorbutton:hover .mce-open{border-left-color:#bdbdbd;border-right-color:#bdbdbd}.mce-colorbutton.mce-btn-small .mce-open{padding:0 3px 0 3px}.mce-rtl .mce-colorbutton{direction:rtl}.mce-rtl .mce-colorbutton .mce-preview{margin-left:0;padding-right:0;padding-left:4px;margin-right:-14px}.mce-rtl .mce-colorbutton.mce-btn-small .mce-preview{margin-left:0;padding-right:0;margin-right:-17px;padding-left:0}.mce-rtl .mce-colorbutton button{padding-right:10px;padding-left:10px}.mce-rtl .mce-colorbutton .mce-open{padding-left:4px;padding-right:4px}.mce-combobox{display:inline-block;*display:inline;*zoom:1;-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px;-webkit-box-shadow:inset 0 1px 1px rgba(0, 0, 0, 0.075);-moz-box-shadow:inset 0 1px 1px rgba(0, 0, 0, 0.075);box-shadow:inset 0 1px 1px rgba(0, 0, 0, 0.075);*height:32px}.mce-combobox input{border:1px solid #c5c5c5;border-right-color:#c5c5c5;height:28px}.mce-combobox.mce-disabled input{color:#adadad}.mce-combobox.mce-has-open input{-webkit-border-radius:4px 0 0 4px;-moz-border-radius:4px 0 0 4px;border-radius:4px 0 0 4px}.mce-combobox .mce-btn{border-left:0;-webkit-border-radius:0 4px 4px 0;-moz-border-radius:0 4px 4px 0;border-radius:0 4px 4px 0}.mce-combobox button{padding-right:8px;padding-left:8px}.mce-combobox.mce-disabled .mce-btn button{cursor:default;-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none;opacity:.4;filter:alpha(opacity=40);zoom:1}.mce-path{display:inline-block;*display:inline;*zoom:1;padding:8px;white-space:normal}.mce-path .mce-txt{display:inline-block;padding-right:3px}.mce-path .mce-path-body{display:inline-block}.mce-path-item{display:inline-block;*display:inline;*zoom:1;cursor:pointer;color:#333}.mce-path-item:hover{text-decoration:underline}.mce-path-item:focus{background:#666;color:#fff}.mce-path .mce-divider{display:inline}.mce-disabled .mce-path-item{color:#aaa}.mce-rtl .mce-path{direction:rtl}.mce-fieldset{border:0 solid #9E9E9E;-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px}.mce-fieldset>.mce-container-body{margin-top:-15px}.mce-fieldset-title{margin-left:5px;padding:0 5px 0 5px}.mce-fit-layout{display:inline-block;*display:inline;*zoom:1}.mce-fit-layout-item{position:absolute}.mce-flow-layout-item{display:inline-block;*display:inline;*zoom:1}.mce-flow-layout-item{margin:2px 0 2px 2px}.mce-flow-layout-item.mce-last{margin-right:2px}.mce-flow-layout{white-space:normal}.mce-tinymce-inline .mce-flow-layout{white-space:nowrap}.mce-rtl .mce-flow-layout{text-align:right;direction:rtl}.mce-rtl .mce-flow-layout-item{margin:2px 2px 2px 0}.mce-rtl .mce-flow-layout-item.mce-last{margin-left:2px}.mce-iframe{border:0 solid #9e9e9e;width:100%;height:100%}.mce-label{display:inline-block;*display:inline;*zoom:1;text-shadow:0 1px 1px rgba(255,255,255,0.75);overflow:hidden}.mce-label.mce-autoscroll{overflow:auto}.mce-label.mce-disabled{color:#aaa}.mce-label.mce-multiline{white-space:pre-wrap}.mce-label.mce-error{color:#a00}.mce-rtl .mce-label{text-align:right;direction:rtl}.mce-menubar .mce-menubtn{border-color:transparent;background:transparent;-webkit-border-radius:0;-moz-border-radius:0;border-radius:0;-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none;filter:none}.mce-menubar{border:1px solid #c4c4c4}.mce-menubar .mce-menubtn button span{color:#333}.mce-menubar .mce-caret{border-top-color:#333}.mce-menubar .mce-menubtn:hover,.mce-menubar .mce-menubtn.mce-active,.mce-menubar .mce-menubtn:focus{border-color:transparent;background:#e6e6e6;filter:none;-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none}.mce-menubtn span{color:#333;margin-right:2px;line-height:20px;*line-height:16px}.mce-menubtn.mce-btn-small span{font-size:12px}.mce-menubtn.mce-fixed-width span{display:inline-block;overflow-x:hidden;text-overflow:ellipsis;width:90px}.mce-menubtn.mce-fixed-width.mce-btn-small span{width:70px}.mce-menubtn .mce-caret{*margin-top:6px}.mce-rtl .mce-menubtn button{direction:rtl;text-align:right}.mce-listbox button{text-align:left;padding-right:20px;position:relative}.mce-listbox .mce-caret{position:absolute;margin-top:-2px;right:8px;top:50%}.mce-rtl .mce-listbox .mce-caret{right:auto;left:8px}.mce-rtl .mce-listbox button{padding-right:10px;padding-left:20px}.mce-menu-item{display:block;padding:6px 15px 6px 12px;clear:both;font-weight:normal;line-height:20px;color:#333;white-space:nowrap;cursor:pointer;line-height:normal;border-left:4px solid transparent;margin-bottom:1px}.mce-menu-item .mce-ico,.mce-menu-item .mce-text{color:#333}.mce-menu-item.mce-disabled .mce-text,.mce-menu-item.mce-disabled .mce-ico{color:#adadad}.mce-menu-item:hover .mce-text,.mce-menu-item.mce-selected .mce-text,.mce-menu-item:focus .mce-text{color:#fff}.mce-menu-item:hover .mce-ico,.mce-menu-item.mce-selected .mce-ico,.mce-menu-item:focus .mce-ico{color:#fff}.mce-menu-item.mce-disabled:hover{background:#ccc}.mce-menu-shortcut{display:inline-block;color:#adadad}.mce-menu-shortcut{display:inline-block;*display:inline;*zoom:1;padding:0 15px 0 20px}.mce-menu-item:hover .mce-menu-shortcut,.mce-menu-item.mce-selected .mce-menu-shortcut,.mce-menu-item:focus .mce-menu-shortcut{color:#fff}.mce-menu-item .mce-caret{margin-top:4px;*margin-top:3px;margin-right:6px;border-top:4px solid transparent;border-bottom:4px solid transparent;border-left:4px solid #333}.mce-menu-item.mce-selected .mce-caret,.mce-menu-item:focus .mce-caret,.mce-menu-item:hover .mce-caret{border-left-color:#fff}.mce-menu-align .mce-menu-shortcut{*margin-top:-2px}.mce-menu-align .mce-menu-shortcut,.mce-menu-align .mce-caret{position:absolute;right:0}.mce-menu-item.mce-active i{visibility:visible}.mce-menu-item-normal.mce-active{background-color:#c8def4}.mce-menu-item-preview.mce-active{border-left:5px solid #aaa}.mce-menu-item-normal.mce-active .mce-text{color:#333}.mce-menu-item-normal.mce-active:hover .mce-text,.mce-menu-item-normal.mce-active:hover .mce-ico{color:#fff}.mce-menu-item-normal.mce-active:focus .mce-text,.mce-menu-item-normal.mce-active:focus .mce-ico{color:#fff}.mce-menu-item:hover,.mce-menu-item.mce-selected,.mce-menu-item:focus{text-decoration:none;color:#fff;background-color:#0081c2;background-image:-moz-linear-gradient(top, #08c, #0077b3);background-image:-webkit-gradient(linear, 0 0, 0 100%, from(#08c), to(#0077b3));background-image:-webkit-linear-gradient(top, #08c, #0077b3);background-image:-o-linear-gradient(top, #08c, #0077b3);background-image:linear-gradient(to bottom, #08c, #0077b3);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff0088cc', endColorstr='#ff0077b3', GradientType=0);zoom:1}div.mce-menu .mce-menu-item-sep,.mce-menu-item-sep:hover{border:0;padding:0;height:1px;margin:9px 1px;overflow:hidden;background:#cbcbcb;border-bottom:1px solid #fff;cursor:default;filter:none}.mce-menu.mce-rtl{direction:rtl}.mce-rtl .mce-menu-item{text-align:right;direction:rtl;padding:6px 12px 6px 15px}.mce-menu-align.mce-rtl .mce-menu-shortcut,.mce-menu-align.mce-rtl .mce-caret{right:auto;left:0}.mce-rtl .mce-menu-item .mce-caret{margin-left:6px;margin-right:0;border-right:4px solid #333;border-left:0}.mce-rtl .mce-menu-item.mce-selected .mce-caret,.mce-rtl .mce-menu-item:focus .mce-caret,.mce-rtl .mce-menu-item:hover .mce-caret{border-left-color:transparent;border-right-color:#fff}.mce-menu{position:absolute;left:0;top:0;filter:progid:DXImageTransform.Microsoft.gradient(enabled = false);background:transparent;z-index:1000;padding:5px 0 5px 0;margin:2px 0 0;min-width:160px;background:#fff;border:1px solid #989898;border:1px solid rgba(0,0,0,0.2);z-index:1002;-webkit-border-radius:6px;-moz-border-radius:6px;border-radius:6px;-webkit-box-shadow:0 5px 10px rgba(0, 0, 0, 0.2);-moz-box-shadow:0 5px 10px rgba(0, 0, 0, 0.2);box-shadow:0 5px 10px rgba(0, 0, 0, 0.2);max-height:400px;overflow:auto;overflow-x:hidden}.mce-menu i{display:none}.mce-menu-has-icons i{display:inline-block;*display:inline}.mce-menu-sub-tr-tl{margin:-6px 0 0 -1px}.mce-menu-sub-br-bl{margin:6px 0 0 -1px}.mce-menu-sub-tl-tr{margin:-6px 0 0 1px}.mce-menu-sub-bl-br{margin:6px 0 0 1px}.mce-container-body .mce-resizehandle{position:absolute;right:0;bottom:0;width:16px;height:16px;visibility:visible;cursor:s-resize;margin:0}.mce-container-body .mce-resizehandle-both{cursor:se-resize}i.mce-i-resize{color:#333}.mce-spacer{visibility:hidden}.mce-splitbtn .mce-open{border-left:1px solid transparent;border-right:1px solid transparent}.mce-splitbtn:hover .mce-open{border-left-color:#bdbdbd;border-right-color:#bdbdbd}.mce-splitbtn button{padding-right:4px}.mce-splitbtn .mce-open{padding-left:4px}.mce-splitbtn .mce-open.mce-active{-webkit-box-shadow:inset 0 2px 4px rgba(0, 0, 0, 0.15), 0 1px 2px rgba(0, 0, 0, 0.05);-moz-box-shadow:inset 0 2px 4px rgba(0, 0, 0, 0.15), 0 1px 2px rgba(0, 0, 0, 0.05);box-shadow:inset 0 2px 4px rgba(0, 0, 0, 0.15), 0 1px 2px rgba(0, 0, 0, 0.05)}.mce-splitbtn.mce-btn-small .mce-open{padding:0 3px 0 3px}.mce-rtl .mce-splitbtn{direction:rtl;text-align:right}.mce-rtl .mce-splitbtn button{padding-right:10px;padding-left:10px}.mce-rtl .mce-splitbtn .mce-open{padding-left:4px;padding-right:4px}.mce-stack-layout-item{display:block}.mce-tabs{display:block;border-bottom:1px solid #c5c5c5}.mce-tab{display:inline-block;*display:inline;*zoom:1;border:1px solid #c5c5c5;border-width:0 1px 0 0;background:#e3e3e3;padding:8px;text-shadow:0 1px 1px rgba(255,255,255,0.75);height:13px;cursor:pointer}.mce-tab:hover{background:#fdfdfd}.mce-tab.mce-active{background:#fdfdfd;border-bottom-color:transparent;margin-bottom:-1px;height:14px}.mce-rtl .mce-tabs{text-align:right;direction:rtl}.mce-rtl .mce-tab{border-width:0 0 0 1px}.mce-textbox{background:#fff;border:1px solid #c5c5c5;-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px;-webkit-box-shadow:inset 0 1px 1px rgba(0, 0, 0, 0.075);-moz-box-shadow:inset 0 1px 1px rgba(0, 0, 0, 0.075);box-shadow:inset 0 1px 1px rgba(0, 0, 0, 0.075);display:inline-block;-webkit-transition:border linear .2s, box-shadow linear .2s;transition:border linear .2s, box-shadow linear .2s;height:28px;resize:none;padding:0 4px 0 4px;white-space:pre-wrap;*white-space:pre;color:#333}.mce-textbox:focus,.mce-textbox.mce-focus{border-color:rgba(82,168,236,0.8);-webkit-box-shadow:inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 8px rgba(82, 168, 236, 0.65);-moz-box-shadow:inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 8px rgba(82, 168, 236, 0.65);box-shadow:inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 8px rgba(82, 168, 236, 0.65)}.mce-placeholder .mce-textbox{color:#aaa}.mce-textbox.mce-multiline{padding:4px}.mce-textbox.mce-disabled{color:#adadad}.mce-rtl .mce-textbox{text-align:right;direction:rtl}.mce-throbber{position:absolute;top:0;left:0;width:100%;height:100%;opacity:.6;filter:alpha(opacity=60);zoom:1;background:#fff url('img/loader.gif') no-repeat center center}.mce-throbber-inline{position:static;height:50px}@font-face{font-family:'tinymce';src:url('fonts/tinymce.eot');src:url('fonts/tinymce.eot?#iefix') format('embedded-opentype'),url('fonts/tinymce.woff') format('woff'),url('fonts/tinymce.ttf') format('truetype'),url('fonts/tinymce.svg#tinymce') format('svg');font-weight:normal;font-style:normal}@font-face{font-family:'tinymce-small';src:url('fonts/tinymce-small.eot');src:url('fonts/tinymce-small.eot?#iefix') format('embedded-opentype'),url('fonts/tinymce-small.woff') format('woff'),url('fonts/tinymce-small.ttf') format('truetype'),url('fonts/tinymce-small.svg#tinymce') format('svg');font-weight:normal;font-style:normal}.mce-ico{font-family:'tinymce',Arial;font-style:normal;font-weight:normal;font-variant:normal;font-size:16px;line-height:16px;speak:none;vertical-align:text-top;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;display:inline-block;background:transparent center center;background-size:cover;width:16px;height:16px;color:#333}.mce-btn-small .mce-ico{font-family:'tinymce-small',Arial}.mce-i-save:before{content:"\e000"}.mce-i-newdocument:before{content:"\e001"}.mce-i-fullpage:before{content:"\e002"}.mce-i-alignleft:before{content:"\e003"}.mce-i-aligncenter:before{content:"\e004"}.mce-i-alignright:before{content:"\e005"}.mce-i-alignjustify:before{content:"\e006"}.mce-i-cut:before{content:"\e007"}.mce-i-paste:before{content:"\e008"}.mce-i-searchreplace:before{content:"\e009"}.mce-i-bullist:before{content:"\e00a"}.mce-i-numlist:before{content:"\e00b"}.mce-i-indent:before{content:"\e00c"}.mce-i-outdent:before{content:"\e00d"}.mce-i-blockquote:before{content:"\e00e"}.mce-i-undo:before{content:"\e00f"}.mce-i-redo:before{content:"\e010"}.mce-i-link:before{content:"\e011"}.mce-i-unlink:before{content:"\e012"}.mce-i-anchor:before{content:"\e013"}.mce-i-image:before{content:"\e014"}.mce-i-media:before{content:"\e015"}.mce-i-help:before{content:"\e016"}.mce-i-code:before{content:"\e017"}.mce-i-insertdatetime:before{content:"\e018"}.mce-i-preview:before{content:"\e019"}.mce-i-forecolor:before{content:"\e01a"}.mce-i-backcolor:before{content:"\e01a"}.mce-i-table:before{content:"\e01b"}.mce-i-hr:before{content:"\e01c"}.mce-i-removeformat:before{content:"\e01d"}.mce-i-subscript:before{content:"\e01e"}.mce-i-superscript:before{content:"\e01f"}.mce-i-charmap:before{content:"\e020"}.mce-i-emoticons:before{content:"\e021"}.mce-i-print:before{content:"\e022"}.mce-i-fullscreen:before{content:"\e023"}.mce-i-spellchecker:before{content:"\e024"}.mce-i-nonbreaking:before{content:"\e025"}.mce-i-template:before{content:"\e026"}.mce-i-pagebreak:before{content:"\e027"}.mce-i-restoredraft:before{content:"\e028"}.mce-i-untitled:before{content:"\e029"}.mce-i-bold:before{content:"\e02a"}.mce-i-italic:before{content:"\e02b"}.mce-i-underline:before{content:"\e02c"}.mce-i-strikethrough:before{content:"\e02d"}.mce-i-visualchars:before{content:"\e02e"}.mce-i-visualblocks:before{content:"\e02e"}.mce-i-ltr:before{content:"\e02f"}.mce-i-rtl:before{content:"\e030"}.mce-i-copy:before{content:"\e031"}.mce-i-resize:before{content:"\e032"}.mce-i-browse:before{content:"\e034"}.mce-i-pastetext:before{content:"\e035"}.mce-i-checkbox:before,.mce-i-selected:before{content:"\e033"}.mce-i-selected{visibility:hidden}i.mce-i-backcolor{text-shadow:none;background:#bbb}
     1.mce-container,.mce-container *,.mce-widget,.mce-widget *,.mce-reset{margin:0;padding:0;border:0;outline:0;vertical-align:top;background:transparent;text-decoration:none;color:#333;font-family:"Helvetica Neue",Helvetica,Arial,sans-serif;font-size:14px;text-shadow:none;float:none;position:static;width:auto;height:auto;white-space:nowrap;cursor:inherit;-webkit-tap-highlight-color:transparent;line-height:normal;font-weight:normal;text-align:left;-moz-box-sizing:content-box;-webkit-box-sizing:content-box;box-sizing:content-box;direction:ltr;max-width:none}.mce-widget button{-moz-box-sizing:border-box;-webkit-box-sizing:border-box;box-sizing:border-box}.mce-container *[unselectable]{-moz-user-select:none;-webkit-user-select:none;-o-user-select:none;user-select:none}.mce-fade{opacity:0;-webkit-transition:opacity .15s linear;transition:opacity .15s linear}.mce-fade.mce-in{opacity:1}.mce-tinymce{visibility:inherit !important;position:relative}.mce-fullscreen{border:0;padding:0;margin:0;overflow:hidden;height:100%;z-index:100}div.mce-fullscreen{position:fixed;top:0;left:0;width:100%;height:auto}.mce-tinymce{display:block;-webkit-border-radius:2px;-moz-border-radius:2px;border-radius:2px}.mce-wordcount{position:absolute;top:0;right:0;padding:8px}div.mce-edit-area{background:#FFF;filter:none}.mce-statusbar{position:relative}.mce-statusbar .mce-container-body{position:relative}.mce-fullscreen .mce-resizehandle{display:none}.mce-charmap{border-collapse:collapse}.mce-charmap td{cursor:default;border:1px solid #9e9e9e;width:20px;height:20px;line-height:20px;text-align:center;vertical-align:middle;padding:2px}.mce-charmap td div{text-align:center}.mce-charmap td:hover{background:#d9d9d9}.mce-grid td.mce-grid-cell div{border:1px solid #d6d6d6;width:15px;height:15px;margin:0px;cursor:pointer}.mce-grid td.mce-grid-cell div:focus{border-color:#a1a1a1}.mce-grid td.mce-grid-cell div[disabled]{cursor:not-allowed}.mce-grid{border-spacing:2px;border-collapse:separate}.mce-grid a{display:block;border:1px solid transparent}.mce-grid a:hover,.mce-grid a:focus{border-color:#a1a1a1}.mce-grid-border{margin:0 4px 0 4px}.mce-grid-border a{border-color:#d6d6d6;width:13px;height:13px}.mce-grid-border a:hover,.mce-grid-border a.mce-active{border-color:#a1a1a1;background:#c8def4}.mce-text-center{text-align:center}div.mce-tinymce-inline{width:100%;-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none}.mce-colorbtn-trans div{text-align:center;vertical-align:middle;font-weight:bold;font-size:20px;line-height:16px;color:#707070}.mce-toolbar-grp{padding-bottom:2px}.mce-toolbar-grp .mce-flow-layout-item{margin-bottom:0}.mce-rtl .mce-wordcount{left:0;right:auto}.mce-container,.mce-container-body{display:block}.mce-autoscroll{overflow:hidden}.mce-scrollbar{position:absolute;width:7px;height:100%;top:2px;right:2px;opacity:.4;filter:alpha(opacity=40);zoom:1}.mce-scrollbar-h{top:auto;right:auto;left:2px;bottom:2px;width:100%;height:7px}.mce-scrollbar-thumb{position:absolute;background-color:#000;border:1px solid #888;border-color:rgba(85,85,85,0.6);width:5px;height:100%;-webkit-border-radius:7px;-moz-border-radius:7px;border-radius:7px}.mce-scrollbar-h .mce-scrollbar-thumb{width:100%;height:5px}.mce-scrollbar:hover,.mce-scrollbar.mce-active{background-color:#AAA;opacity:.6;filter:alpha(opacity=60);zoom:1;-webkit-border-radius:7px;-moz-border-radius:7px;border-radius:7px}.mce-scroll{position:relative}.mce-panel{border:0 solid #9e9e9e;background-color:#f0f0f0;background-image:-moz-linear-gradient(top, #fdfdfd, #ddd);background-image:-webkit-gradient(linear, 0 0, 0 100%, from(#fdfdfd), to(#ddd));background-image:-webkit-linear-gradient(top, #fdfdfd, #ddd);background-image:-o-linear-gradient(top, #fdfdfd, #ddd);background-image:linear-gradient(to bottom, #fdfdfd, #ddd);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fffdfdfd', endColorstr='#ffdddddd', GradientType=0);zoom:1}.mce-floatpanel{position:absolute;-webkit-box-shadow:0 5px 10px rgba(0, 0, 0, 0.2);-moz-box-shadow:0 5px 10px rgba(0, 0, 0, 0.2);box-shadow:0 5px 10px rgba(0, 0, 0, 0.2)}.mce-floatpanel.mce-fixed{position:fixed}.mce-floatpanel .mce-arrow,.mce-floatpanel .mce-arrow:after{position:absolute;display:block;width:0;height:0;border-color:transparent;border-style:solid}.mce-floatpanel .mce-arrow{border-width:11px}.mce-floatpanel .mce-arrow:after{border-width:10px;content:""}.mce-floatpanel.mce-popover{filter:progid:DXImageTransform.Microsoft.gradient(enabled = false);background:transparent;-webkit-border-radius:6px;-moz-border-radius:6px;border-radius:6px;-webkit-box-shadow:0 5px 10px rgba(0, 0, 0, 0.2);-moz-box-shadow:0 5px 10px rgba(0, 0, 0, 0.2);box-shadow:0 5px 10px rgba(0, 0, 0, 0.2);top:0;left:0;background:#fff;border:1px solid #9e9e9e;border:1px solid rgba(0,0,0,0.25)}.mce-floatpanel.mce-popover.mce-bottom{margin-top:10px;*margin-top:0}.mce-floatpanel.mce-popover.mce-bottom>.mce-arrow{left:50%;margin-left:-11px;border-top-width:0;border-bottom-color:#9e9e9e;border-bottom-color:rgba(0,0,0,0.25);top:-11px}.mce-floatpanel.mce-popover.mce-bottom>.mce-arrow:after{top:1px;margin-left:-10px;border-top-width:0;border-bottom-color:#fff}.mce-floatpanel.mce-popover.mce-bottom.mce-start{margin-left:-22px}.mce-floatpanel.mce-popover.mce-bottom.mce-start>.mce-arrow{left:20px}.mce-floatpanel.mce-popover.mce-bottom.mce-end{margin-left:22px}.mce-floatpanel.mce-popover.mce-bottom.mce-end>.mce-arrow{right:10px;left:auto}.mce-fullscreen{border:0;padding:0;margin:0;overflow:hidden;background:#fff;height:100%}div.mce-fullscreen{position:fixed;top:0;left:0}#mce-modal-block{opacity:0;filter:alpha(opacity=0);zoom:1;position:fixed;left:0;top:0;width:100%;height:100%;background:#000}#mce-modal-block.mce-in{opacity:.3;filter:alpha(opacity=30);zoom:1}.mce-window-move{cursor:move}.mce-window{-webkit-border-radius:6px;-moz-border-radius:6px;border-radius:6px;-webkit-box-shadow:0 3px 7px rgba(0, 0, 0, 0.3);-moz-box-shadow:0 3px 7px rgba(0, 0, 0, 0.3);box-shadow:0 3px 7px rgba(0, 0, 0, 0.3);filter:progid:DXImageTransform.Microsoft.gradient(enabled = false);background:transparent;background:#fff;position:fixed;top:0;left:0;opacity:0;-webkit-transition:opacity 150ms ease-in;transition:opacity 150ms ease-in}.mce-window.mce-in{opacity:1}.mce-window-head{padding:9px 15px;border-bottom:1px solid #c5c5c5;position:relative}.mce-window-head .mce-close{position:absolute;right:15px;top:9px;font-size:20px;font-weight:bold;line-height:20px;color:#858585;cursor:pointer;height:20px;overflow:hidden}.mce-close:hover{color:#adadad}.mce-window-head .mce-title{line-height:20px;font-size:20px;font-weight:bold;text-rendering:optimizelegibility;padding-right:10px}.mce-window .mce-container-body{display:block}.mce-foot{display:block;background-color:#fff;border-top:1px solid #c5c5c5;-webkit-border-radius:0 0 6px 6px;-moz-border-radius:0 0 6px 6px;border-radius:0 0 6px 6px}.mce-window-head .mce-dragh{position:absolute;top:0;left:0;cursor:move;width:90%;height:100%}.mce-window iframe{width:100%;height:100%}.mce-window.mce-fullscreen,.mce-window.mce-fullscreen .mce-foot{-webkit-border-radius:0;-moz-border-radius:0;border-radius:0}.mce-rtl .mce-window-head .mce-close{position:absolute;right:auto;left:15px}.mce-rtl .mce-window-head .mce-dragh{left:auto;right:0}.mce-rtl .mce-window-head .mce-title{direction:rtl;text-align:right}.mce-abs-layout{position:relative}body .mce-abs-layout-item,.mce-abs-end{position:absolute}.mce-abs-end{width:1px;height:1px}.mce-container-body.mce-abs-layout{overflow:hidden}.mce-tooltip{position:absolute;padding:5px;opacity:.8;filter:alpha(opacity=80);zoom:1}.mce-tooltip-inner{font-size:11px;background-color:#000;color:#fff;max-width:200px;padding:5px 8px 4px 8px;text-align:center;white-space:normal}.mce-tooltip-inner{-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px}.mce-tooltip-inner{-webkit-box-shadow:0 0 5px #000000;-moz-box-shadow:0 0 5px #000000;box-shadow:0 0 5px #000000}.mce-tooltip-arrow{position:absolute;width:0;height:0;line-height:0;border:5px dashed #000}.mce-tooltip-arrow-n{border-bottom-color:#000}.mce-tooltip-arrow-s{border-top-color:#000}.mce-tooltip-arrow-e{border-left-color:#000}.mce-tooltip-arrow-w{border-right-color:#000}.mce-tooltip-nw,.mce-tooltip-sw{margin-left:-14px}.mce-tooltip-n .mce-tooltip-arrow{top:0px;left:50%;margin-left:-5px;border-bottom-style:solid;border-top:none;border-left-color:transparent;border-right-color:transparent}.mce-tooltip-nw .mce-tooltip-arrow{top:0;left:10px;border-bottom-style:solid;border-top:none;border-left-color:transparent;border-right-color:transparent}.mce-tooltip-ne .mce-tooltip-arrow{top:0;right:10px;border-bottom-style:solid;border-top:none;border-left-color:transparent;border-right-color:transparent}.mce-tooltip-s .mce-tooltip-arrow{bottom:0;left:50%;margin-left:-5px;border-top-style:solid;border-bottom:none;border-left-color:transparent;border-right-color:transparent}.mce-tooltip-sw .mce-tooltip-arrow{bottom:0;left:10px;border-top-style:solid;border-bottom:none;border-left-color:transparent;border-right-color:transparent}.mce-tooltip-se .mce-tooltip-arrow{bottom:0;right:10px;border-top-style:solid;border-bottom:none;border-left-color:transparent;border-right-color:transparent}.mce-tooltip-e .mce-tooltip-arrow{right:0;top:50%;margin-top:-5px;border-left-style:solid;border-right:none;border-top-color:transparent;border-bottom-color:transparent}.mce-tooltip-w .mce-tooltip-arrow{left:0;top:50%;margin-top:-5px;border-right-style:solid;border-left:none;border-top-color:transparent;border-bottom-color:transparent}.mce-btn{border:1px solid #b1b1b1;border-color:rgba(0,0,0,0.1) rgba(0,0,0,0.1) rgba(0,0,0,0.25) rgba(0,0,0,0.25);position:relative;text-shadow:0 1px 1px rgba(255,255,255,0.75);display:inline-block;*display:inline;*zoom:1;-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px;-webkit-box-shadow:inset 0 1px 0 rgba(255, 255, 255, 0.2), 0 1px 2px rgba(0, 0, 0, 0.05);-moz-box-shadow:inset 0 1px 0 rgba(255, 255, 255, 0.2), 0 1px 2px rgba(0, 0, 0, 0.05);box-shadow:inset 0 1px 0 rgba(255, 255, 255, 0.2), 0 1px 2px rgba(0, 0, 0, 0.05);background-color:#f0f0f0;background-image:-moz-linear-gradient(top, #fff, #d9d9d9);background-image:-webkit-gradient(linear, 0 0, 0 100%, from(#fff), to(#d9d9d9));background-image:-webkit-linear-gradient(top, #fff, #d9d9d9);background-image:-o-linear-gradient(top, #fff, #d9d9d9);background-image:linear-gradient(to bottom, #fff, #d9d9d9);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffffff', endColorstr='#ffd9d9d9', GradientType=0);zoom:1}.mce-btn:hover,.mce-btn:focus{color:#333;background-color:#e3e3e3;background-image:-moz-linear-gradient(top, #f2f2f2, #ccc);background-image:-webkit-gradient(linear, 0 0, 0 100%, from(#f2f2f2), to(#ccc));background-image:-webkit-linear-gradient(top, #f2f2f2, #ccc);background-image:-o-linear-gradient(top, #f2f2f2, #ccc);background-image:linear-gradient(to bottom, #f2f2f2, #ccc);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff2f2f2', endColorstr='#ffcccccc', GradientType=0);zoom:1}.mce-btn.mce-disabled button,.mce-btn.mce-disabled:hover button{cursor:default;-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none;opacity:.4;filter:alpha(opacity=40);zoom:1}.mce-btn.mce-active,.mce-btn.mce-active:hover{background-color:#d6d6d6;background-image:-moz-linear-gradient(top, #e6e6e6, #c0c0c0);background-image:-webkit-gradient(linear, 0 0, 0 100%, from(#e6e6e6), to(#c0c0c0));background-image:-webkit-linear-gradient(top, #e6e6e6, #c0c0c0);background-image:-o-linear-gradient(top, #e6e6e6, #c0c0c0);background-image:linear-gradient(to bottom, #e6e6e6, #c0c0c0);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffe6e6e6', endColorstr='#ffc0c0c0', GradientType=0);zoom:1;-webkit-box-shadow:inset 0 2px 4px rgba(0, 0, 0, 0.15), 0 1px 2px rgba(0, 0, 0, 0.05);-moz-box-shadow:inset 0 2px 4px rgba(0, 0, 0, 0.15), 0 1px 2px rgba(0, 0, 0, 0.05);box-shadow:inset 0 2px 4px rgba(0, 0, 0, 0.15), 0 1px 2px rgba(0, 0, 0, 0.05)}.mce-btn:active{background-color:#d6d6d6;background-image:-moz-linear-gradient(top, #e6e6e6, #c0c0c0);background-image:-webkit-gradient(linear, 0 0, 0 100%, from(#e6e6e6), to(#c0c0c0));background-image:-webkit-linear-gradient(top, #e6e6e6, #c0c0c0);background-image:-o-linear-gradient(top, #e6e6e6, #c0c0c0);background-image:linear-gradient(to bottom, #e6e6e6, #c0c0c0);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffe6e6e6', endColorstr='#ffc0c0c0', GradientType=0);zoom:1;-webkit-box-shadow:inset 0 2px 4px rgba(0, 0, 0, 0.15), 0 1px 2px rgba(0, 0, 0, 0.05);-moz-box-shadow:inset 0 2px 4px rgba(0, 0, 0, 0.15), 0 1px 2px rgba(0, 0, 0, 0.05);box-shadow:inset 0 2px 4px rgba(0, 0, 0, 0.15), 0 1px 2px rgba(0, 0, 0, 0.05)}.mce-btn button{padding:4px 10px;font-size:14px;line-height:20px;*line-height:16px;cursor:pointer;color:#333;text-align:center;overflow:visible;-webkit-appearance:none}.mce-btn button::-moz-focus-inner{border:0;padding:0}.mce-btn i{text-shadow:1px 1px #fff}.mce-primary{min-width:50px;color:#fff;border:1px solid #b1b1b1;border-color:rgba(0,0,0,0.1) rgba(0,0,0,0.1) rgba(0,0,0,0.25) rgba(0,0,0,0.25);background-color:#006dcc;background-image:-moz-linear-gradient(top, #08c, #04c);background-image:-webkit-gradient(linear, 0 0, 0 100%, from(#08c), to(#04c));background-image:-webkit-linear-gradient(top, #08c, #04c);background-image:-o-linear-gradient(top, #08c, #04c);background-image:linear-gradient(to bottom, #08c, #04c);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff0088cc', endColorstr='#ff0044cc', GradientType=0);zoom:1}.mce-primary:hover,.mce-primary:focus{background-color:#005fb3;background-image:-moz-linear-gradient(top, #0077b3, #003cb3);background-image:-webkit-gradient(linear, 0 0, 0 100%, from(#0077b3), to(#003cb3));background-image:-webkit-linear-gradient(top, #0077b3, #003cb3);background-image:-o-linear-gradient(top, #0077b3, #003cb3);background-image:linear-gradient(to bottom, #0077b3, #003cb3);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff0077b3', endColorstr='#ff003cb3', GradientType=0);zoom:1}.mce-primary.mce-disabled button,.mce-primary.mce-disabled:hover button{cursor:default;-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none;opacity:.4;filter:alpha(opacity=40);zoom:1}.mce-primary.mce-active,.mce-primary.mce-active:hover,.mce-primary:not(.mce-disabled):active{background-color:#005299;background-image:-moz-linear-gradient(top, #069, #039);background-image:-webkit-gradient(linear, 0 0, 0 100%, from(#069), to(#039));background-image:-webkit-linear-gradient(top, #069, #039);background-image:-o-linear-gradient(top, #069, #039);background-image:linear-gradient(to bottom, #069, #039);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff006699', endColorstr='#ff003399', GradientType=0);zoom:1;-webkit-box-shadow:inset 0 2px 4px rgba(0, 0, 0, 0.15), 0 1px 2px rgba(0, 0, 0, 0.05);-moz-box-shadow:inset 0 2px 4px rgba(0, 0, 0, 0.15), 0 1px 2px rgba(0, 0, 0, 0.05);box-shadow:inset 0 2px 4px rgba(0, 0, 0, 0.15), 0 1px 2px rgba(0, 0, 0, 0.05)}.mce-primary button,.mce-primary button i{color:#fff;text-shadow:1px 1px #333}.mce-btn-large button{padding:9px 14px;font-size:16px;line-height:normal;-webkit-border-radius:5px;-moz-border-radius:5px;border-radius:5px}.mce-btn-large i{margin-top:2px}.mce-btn-small button{padding:1px 5px;font-size:12px;*padding-bottom:2px}.mce-btn-small i{line-height:20px;vertical-align:top;*line-height:18px}.mce-btn .mce-caret{margin-top:8px;margin-left:0}.mce-btn-small .mce-caret{margin-top:8px;margin-left:0}.mce-caret{display:inline-block;*display:inline;*zoom:1;width:0;height:0;vertical-align:top;border-top:4px solid #333;border-right:4px solid transparent;border-left:4px solid transparent;content:""}.mce-disabled .mce-caret{border-top-color:#aaa}.mce-caret.mce-up{border-bottom:4px solid #333;border-top:0}.mce-btn-flat{border:0;background:transparent;-webkit-border-radius:0;-moz-border-radius:0;border-radius:0;-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none;filter:none}.mce-btn-flat:hover,.mce-btn-flat.mce-active,.mce-btn-flat:focus,.mce-btn-flat:active{border:0;background:#e6e6e6;filter:none;-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none}.mce-rtl .mce-btn button{direction:rtl}.mce-btn-group .mce-btn{border-width:1px 0 1px 0;margin:0;-webkit-border-radius:0;-moz-border-radius:0;border-radius:0}.mce-btn-group .mce-first{border-left:1px solid #b1b1b1;border-left:1px solid rgba(0,0,0,0.25);-webkit-border-radius:3px 0 0 3px;-moz-border-radius:3px 0 0 3px;border-radius:3px 0 0 3px}.mce-btn-group .mce-last{border-right:1px solid #b1b1b1;border-right:1px solid rgba(0,0,0,0.1);-webkit-border-radius:0 3px 3px 0;-moz-border-radius:0 3px 3px 0;border-radius:0 3px 3px 0}.mce-btn-group .mce-first.mce-last{-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px}.mce-btn-group .mce-btn.mce-flow-layout-item{margin:0}.mce-checkbox{cursor:pointer}i.mce-i-checkbox{margin:0 3px 0 0;border:1px solid #c5c5c5;-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px;-webkit-box-shadow:inset 0 1px 0 rgba(255, 255, 255, 0.2), 0 1px 2px rgba(0, 0, 0, 0.05);-moz-box-shadow:inset 0 1px 0 rgba(255, 255, 255, 0.2), 0 1px 2px rgba(0, 0, 0, 0.05);box-shadow:inset 0 1px 0 rgba(255, 255, 255, 0.2), 0 1px 2px rgba(0, 0, 0, 0.05);background-color:#f0f0f0;background-image:-moz-linear-gradient(top, #fff, #d9d9d9);background-image:-webkit-gradient(linear, 0 0, 0 100%, from(#fff), to(#d9d9d9));background-image:-webkit-linear-gradient(top, #fff, #d9d9d9);background-image:-o-linear-gradient(top, #fff, #d9d9d9);background-image:linear-gradient(to bottom, #fff, #d9d9d9);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffffff', endColorstr='#ffd9d9d9', GradientType=0);zoom:1;text-indent:-10em;*font-size:0;*line-height:0;*text-indent:0;overflow:hidden}.mce-checked i.mce-i-checkbox{color:#333;font-size:16px;line-height:16px;text-indent:0}.mce-checkbox:focus i.mce-i-checkbox,.mce-checkbox.mce-focus i.mce-i-checkbox{border:1px solid rgba(82,168,236,0.8);-webkit-box-shadow:inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 8px rgba(82, 168, 236, 0.65);-moz-box-shadow:inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 8px rgba(82, 168, 236, 0.65);box-shadow:inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 8px rgba(82, 168, 236, 0.65)}.mce-checkbox.mce-disabled .mce-label,.mce-checkbox.mce-disabled i.mce-i-checkbox{color:#acacac}.mce-rtl .mce-checkbox{direction:rtl;text-align:right}.mce-rtl i.mce-i-checkbox{margin:0 0 0 3px}.mce-combobox{display:inline-block;*display:inline;*zoom:1;-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px;-webkit-box-shadow:inset 0 1px 1px rgba(0, 0, 0, 0.075);-moz-box-shadow:inset 0 1px 1px rgba(0, 0, 0, 0.075);box-shadow:inset 0 1px 1px rgba(0, 0, 0, 0.075);*height:32px}.mce-combobox input{border:1px solid #c5c5c5;border-right-color:#c5c5c5;height:28px}.mce-combobox.mce-disabled input{color:#adadad}.mce-combobox.mce-has-open input{-webkit-border-radius:4px 0 0 4px;-moz-border-radius:4px 0 0 4px;border-radius:4px 0 0 4px}.mce-combobox .mce-btn{border-left:0;-webkit-border-radius:0 4px 4px 0;-moz-border-radius:0 4px 4px 0;border-radius:0 4px 4px 0}.mce-combobox button{padding-right:8px;padding-left:8px}.mce-combobox.mce-disabled .mce-btn button{cursor:default;-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none;opacity:.4;filter:alpha(opacity=40);zoom:1}.mce-colorbox i{border:1px solid #c5c5c5;width:14px;height:14px}.mce-colorbutton .mce-ico{position:relative}.mce-colorbutton-grid{margin:4px}.mce-colorbutton button{padding-right:4px}.mce-colorbutton .mce-preview{padding-right:3px;display:block;position:absolute;left:50%;top:50%;margin-left:-14px;margin-top:7px;background:gray;width:13px;height:2px;overflow:hidden}.mce-colorbutton.mce-btn-small .mce-preview{margin-left:-16px;padding-right:0;width:16px}.mce-colorbutton .mce-open{padding-left:4px;border-left:1px solid transparent;border-right:1px solid transparent}.mce-colorbutton:hover .mce-open{border-left-color:#bdbdbd;border-right-color:#bdbdbd}.mce-colorbutton.mce-btn-small .mce-open{padding:0 3px 0 3px}.mce-rtl .mce-colorbutton{direction:rtl}.mce-rtl .mce-colorbutton .mce-preview{margin-left:0;padding-right:0;padding-left:4px;margin-right:-14px}.mce-rtl .mce-colorbutton.mce-btn-small .mce-preview{margin-left:0;padding-right:0;margin-right:-17px;padding-left:0}.mce-rtl .mce-colorbutton button{padding-right:10px;padding-left:10px}.mce-rtl .mce-colorbutton .mce-open{padding-left:4px;padding-right:4px}.mce-colorpicker{position:relative;width:250px;height:220px}.mce-colorpicker-sv{position:absolute;top:0;left:0;width:90%;height:100%;border:1px solid #c5c5c5;cursor:crosshair;overflow:hidden}.mce-colorpicker-h-chunk{width:100%}.mce-colorpicker-overlay1,.mce-colorpicker-overlay2{width:100%;height:100%;position:absolute;top:0;left:0}.mce-colorpicker-overlay1{filter:progid:DXImageTransform.Microsoft.gradient(GradientType=1, startColorstr='#ffffff', endColorstr='#00ffffff');-ms-filter:"progid:DXImageTransform.Microsoft.gradient(GradientType=1,startColorstr='#ffffff', endColorstr='#00ffffff')";background:linear-gradient(to right, #fff, rgba(255,255,255,0))}.mce-colorpicker-overlay2{filter:progid:DXImageTransform.Microsoft.gradient(GradientType=0, startColorstr='#00000000', endColorstr='#000000');-ms-filter:"progid:DXImageTransform.Microsoft.gradient(GradientType=0,startColorstr='#00000000', endColorstr='#000000')";background:linear-gradient(to bottom, rgba(0,0,0,0), #000)}.mce-colorpicker-selector1{background:none;position:absolute;width:12px;height:12px;margin:-8px 0 0 -8px;border:1px solid black;border-radius:50%}.mce-colorpicker-selector2{position:absolute;width:10px;height:10px;border:1px solid white;border-radius:50%}.mce-colorpicker-h{position:absolute;top:0;right:0;width:6.5%;height:100%;border:1px solid #c5c5c5;cursor:crosshair}.mce-colorpicker-h-marker{margin-top:-4px;position:absolute;top:0;left:-1px;width:100%;border:1px solid #333;background:#fff;height:4px;z-index:100}.mce-path{display:inline-block;*display:inline;*zoom:1;padding:8px;white-space:normal}.mce-path .mce-txt{display:inline-block;padding-right:3px}.mce-path .mce-path-body{display:inline-block}.mce-path-item{display:inline-block;*display:inline;*zoom:1;cursor:pointer;color:#333}.mce-path-item:hover{text-decoration:underline}.mce-path-item:focus{background:#666;color:#fff}.mce-path .mce-divider{display:inline}.mce-disabled .mce-path-item{color:#aaa}.mce-rtl .mce-path{direction:rtl}.mce-fieldset{border:0 solid #9E9E9E;-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px}.mce-fieldset>.mce-container-body{margin-top:-15px}.mce-fieldset-title{margin-left:5px;padding:0 5px 0 5px}.mce-fit-layout{display:inline-block;*display:inline;*zoom:1}.mce-fit-layout-item{position:absolute}.mce-flow-layout-item{display:inline-block;*display:inline;*zoom:1}.mce-flow-layout-item{margin:2px 0 2px 2px}.mce-flow-layout-item.mce-last{margin-right:2px}.mce-flow-layout{white-space:normal}.mce-tinymce-inline .mce-flow-layout{white-space:nowrap}.mce-rtl .mce-flow-layout{text-align:right;direction:rtl}.mce-rtl .mce-flow-layout-item{margin:2px 2px 2px 0}.mce-rtl .mce-flow-layout-item.mce-last{margin-left:2px}.mce-iframe{border:0 solid #9e9e9e;width:100%;height:100%}.mce-label{display:inline-block;*display:inline;*zoom:1;text-shadow:0 1px 1px rgba(255,255,255,0.75);overflow:hidden}.mce-label.mce-autoscroll{overflow:auto}.mce-label.mce-disabled{color:#aaa}.mce-label.mce-multiline{white-space:pre-wrap}.mce-label.mce-error{color:#a00}.mce-rtl .mce-label{text-align:right;direction:rtl}.mce-menubar .mce-menubtn{border-color:transparent;background:transparent;-webkit-border-radius:0;-moz-border-radius:0;border-radius:0;-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none;filter:none}.mce-menubar{border:1px solid #c4c4c4}.mce-menubar .mce-menubtn button span{color:#333}.mce-menubar .mce-caret{border-top-color:#333}.mce-menubar .mce-menubtn:hover,.mce-menubar .mce-menubtn.mce-active,.mce-menubar .mce-menubtn:focus{border-color:transparent;background:#e6e6e6;filter:none;-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none}.mce-menubtn span{color:#333;margin-right:2px;line-height:20px;*line-height:16px}.mce-menubtn.mce-btn-small span{font-size:12px}.mce-menubtn.mce-fixed-width span{display:inline-block;overflow-x:hidden;text-overflow:ellipsis;width:90px}.mce-menubtn.mce-fixed-width.mce-btn-small span{width:70px}.mce-menubtn .mce-caret{*margin-top:6px}.mce-rtl .mce-menubtn button{direction:rtl;text-align:right}.mce-listbox button{text-align:left;padding-right:20px;position:relative}.mce-listbox .mce-caret{position:absolute;margin-top:-2px;right:8px;top:50%}.mce-rtl .mce-listbox .mce-caret{right:auto;left:8px}.mce-rtl .mce-listbox button{padding-right:10px;padding-left:20px}.mce-menu-item{display:block;padding:6px 15px 6px 12px;clear:both;font-weight:normal;line-height:20px;color:#333;white-space:nowrap;cursor:pointer;line-height:normal;border-left:4px solid transparent;margin-bottom:1px}.mce-menu-item .mce-ico,.mce-menu-item .mce-text{color:#333}.mce-menu-item.mce-disabled .mce-text,.mce-menu-item.mce-disabled .mce-ico{color:#adadad}.mce-menu-item:hover .mce-text,.mce-menu-item.mce-selected .mce-text,.mce-menu-item:focus .mce-text{color:#fff}.mce-menu-item:hover .mce-ico,.mce-menu-item.mce-selected .mce-ico,.mce-menu-item:focus .mce-ico{color:#fff}.mce-menu-item.mce-disabled:hover{background:#ccc}.mce-menu-shortcut{display:inline-block;color:#adadad}.mce-menu-shortcut{display:inline-block;*display:inline;*zoom:1;padding:0 15px 0 20px}.mce-menu-item:hover .mce-menu-shortcut,.mce-menu-item.mce-selected .mce-menu-shortcut,.mce-menu-item:focus .mce-menu-shortcut{color:#fff}.mce-menu-item .mce-caret{margin-top:4px;*margin-top:3px;margin-right:6px;border-top:4px solid transparent;border-bottom:4px solid transparent;border-left:4px solid #333}.mce-menu-item.mce-selected .mce-caret,.mce-menu-item:focus .mce-caret,.mce-menu-item:hover .mce-caret{border-left-color:#fff}.mce-menu-align .mce-menu-shortcut{*margin-top:-2px}.mce-menu-align .mce-menu-shortcut,.mce-menu-align .mce-caret{position:absolute;right:0}.mce-menu-item.mce-active i{visibility:visible}.mce-menu-item-normal.mce-active{background-color:#c8def4}.mce-menu-item-preview.mce-active{border-left:5px solid #aaa}.mce-menu-item-normal.mce-active .mce-text{color:#333}.mce-menu-item-normal.mce-active:hover .mce-text,.mce-menu-item-normal.mce-active:hover .mce-ico{color:#fff}.mce-menu-item-normal.mce-active:focus .mce-text,.mce-menu-item-normal.mce-active:focus .mce-ico{color:#fff}.mce-menu-item:hover,.mce-menu-item.mce-selected,.mce-menu-item:focus{text-decoration:none;color:#fff;background-color:#0081c2;background-image:-moz-linear-gradient(top, #08c, #0077b3);background-image:-webkit-gradient(linear, 0 0, 0 100%, from(#08c), to(#0077b3));background-image:-webkit-linear-gradient(top, #08c, #0077b3);background-image:-o-linear-gradient(top, #08c, #0077b3);background-image:linear-gradient(to bottom, #08c, #0077b3);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff0088cc', endColorstr='#ff0077b3', GradientType=0);zoom:1}div.mce-menu .mce-menu-item-sep,.mce-menu-item-sep:hover{border:0;padding:0;height:1px;margin:9px 1px;overflow:hidden;background:#cbcbcb;border-bottom:1px solid #fff;cursor:default;filter:none}.mce-menu.mce-rtl{direction:rtl}.mce-rtl .mce-menu-item{text-align:right;direction:rtl;padding:6px 12px 6px 15px}.mce-menu-align.mce-rtl .mce-menu-shortcut,.mce-menu-align.mce-rtl .mce-caret{right:auto;left:0}.mce-rtl .mce-menu-item .mce-caret{margin-left:6px;margin-right:0;border-right:4px solid #333;border-left:0}.mce-rtl .mce-menu-item.mce-selected .mce-caret,.mce-rtl .mce-menu-item:focus .mce-caret,.mce-rtl .mce-menu-item:hover .mce-caret{border-left-color:transparent;border-right-color:#fff}.mce-menu{position:absolute;left:0;top:0;filter:progid:DXImageTransform.Microsoft.gradient(enabled = false);background:transparent;z-index:1000;padding:5px 0 5px 0;margin:2px 0 0;min-width:160px;background:#fff;border:1px solid #989898;border:1px solid rgba(0,0,0,0.2);z-index:1002;-webkit-border-radius:6px;-moz-border-radius:6px;border-radius:6px;-webkit-box-shadow:0 5px 10px rgba(0, 0, 0, 0.2);-moz-box-shadow:0 5px 10px rgba(0, 0, 0, 0.2);box-shadow:0 5px 10px rgba(0, 0, 0, 0.2);max-height:400px;overflow:auto;overflow-x:hidden}.mce-menu i{display:none}.mce-menu-has-icons i{display:inline-block;*display:inline}.mce-menu-sub-tr-tl{margin:-6px 0 0 -1px}.mce-menu-sub-br-bl{margin:6px 0 0 -1px}.mce-menu-sub-tl-tr{margin:-6px 0 0 1px}.mce-menu-sub-bl-br{margin:6px 0 0 1px}.mce-container-body .mce-resizehandle{position:absolute;right:0;bottom:0;width:16px;height:16px;visibility:visible;cursor:s-resize;margin:0}.mce-container-body .mce-resizehandle-both{cursor:se-resize}i.mce-i-resize{color:#333}.mce-spacer{visibility:hidden}.mce-splitbtn .mce-open{border-left:1px solid transparent;border-right:1px solid transparent}.mce-splitbtn:hover .mce-open{border-left-color:#bdbdbd;border-right-color:#bdbdbd}.mce-splitbtn button{padding-right:4px}.mce-splitbtn .mce-open{padding-left:4px}.mce-splitbtn .mce-open.mce-active{-webkit-box-shadow:inset 0 2px 4px rgba(0, 0, 0, 0.15), 0 1px 2px rgba(0, 0, 0, 0.05);-moz-box-shadow:inset 0 2px 4px rgba(0, 0, 0, 0.15), 0 1px 2px rgba(0, 0, 0, 0.05);box-shadow:inset 0 2px 4px rgba(0, 0, 0, 0.15), 0 1px 2px rgba(0, 0, 0, 0.05)}.mce-splitbtn.mce-btn-small .mce-open{padding:0 3px 0 3px}.mce-rtl .mce-splitbtn{direction:rtl;text-align:right}.mce-rtl .mce-splitbtn button{padding-right:10px;padding-left:10px}.mce-rtl .mce-splitbtn .mce-open{padding-left:4px;padding-right:4px}.mce-stack-layout-item{display:block}.mce-tabs{display:block;border-bottom:1px solid #c5c5c5}.mce-tab{display:inline-block;*display:inline;*zoom:1;border:1px solid #c5c5c5;border-width:0 1px 0 0;background:#e3e3e3;padding:8px;text-shadow:0 1px 1px rgba(255,255,255,0.75);height:13px;cursor:pointer}.mce-tab:hover{background:#fdfdfd}.mce-tab.mce-active{background:#fdfdfd;border-bottom-color:transparent;margin-bottom:-1px;height:14px}.mce-rtl .mce-tabs{text-align:right;direction:rtl}.mce-rtl .mce-tab{border-width:0 0 0 1px}.mce-textbox{background:#fff;border:1px solid #c5c5c5;-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px;-webkit-box-shadow:inset 0 1px 1px rgba(0, 0, 0, 0.075);-moz-box-shadow:inset 0 1px 1px rgba(0, 0, 0, 0.075);box-shadow:inset 0 1px 1px rgba(0, 0, 0, 0.075);display:inline-block;-webkit-transition:border linear .2s, box-shadow linear .2s;transition:border linear .2s, box-shadow linear .2s;height:28px;resize:none;padding:0 4px 0 4px;white-space:pre-wrap;*white-space:pre;color:#333}.mce-textbox:focus,.mce-textbox.mce-focus{border-color:rgba(82,168,236,0.8);-webkit-box-shadow:inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 8px rgba(82, 168, 236, 0.65);-moz-box-shadow:inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 8px rgba(82, 168, 236, 0.65);box-shadow:inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 8px rgba(82, 168, 236, 0.65)}.mce-placeholder .mce-textbox{color:#aaa}.mce-textbox.mce-multiline{padding:4px}.mce-textbox.mce-disabled{color:#adadad}.mce-rtl .mce-textbox{text-align:right;direction:rtl}.mce-throbber{position:absolute;top:0;left:0;width:100%;height:100%;opacity:.6;filter:alpha(opacity=60);zoom:1;background:#fff url('img/loader.gif') no-repeat center center}.mce-throbber-inline{position:static;height:50px}@font-face{font-family:'tinymce';src:url('fonts/tinymce.eot');src:url('fonts/tinymce.eot?#iefix') format('embedded-opentype'),url('fonts/tinymce.woff') format('woff'),url('fonts/tinymce.ttf') format('truetype'),url('fonts/tinymce.svg#tinymce') format('svg');font-weight:normal;font-style:normal}@font-face{font-family:'tinymce-small';src:url('fonts/tinymce-small.eot');src:url('fonts/tinymce-small.eot?#iefix') format('embedded-opentype'),url('fonts/tinymce-small.woff') format('woff'),url('fonts/tinymce-small.ttf') format('truetype'),url('fonts/tinymce-small.svg#tinymce') format('svg');font-weight:normal;font-style:normal}.mce-ico{font-family:'tinymce',Arial;font-style:normal;font-weight:normal;font-variant:normal;font-size:16px;line-height:16px;speak:none;vertical-align:text-top;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;display:inline-block;background:transparent center center;background-size:cover;width:16px;height:16px;color:#333}.mce-btn-small .mce-ico{font-family:'tinymce-small',Arial}.mce-i-save:before{content:"\e000"}.mce-i-newdocument:before{content:"\e001"}.mce-i-fullpage:before{content:"\e002"}.mce-i-alignleft:before{content:"\e003"}.mce-i-aligncenter:before{content:"\e004"}.mce-i-alignright:before{content:"\e005"}.mce-i-alignjustify:before{content:"\e006"}.mce-i-cut:before{content:"\e007"}.mce-i-paste:before{content:"\e008"}.mce-i-searchreplace:before{content:"\e009"}.mce-i-bullist:before{content:"\e00a"}.mce-i-numlist:before{content:"\e00b"}.mce-i-indent:before{content:"\e00c"}.mce-i-outdent:before{content:"\e00d"}.mce-i-blockquote:before{content:"\e00e"}.mce-i-undo:before{content:"\e00f"}.mce-i-redo:before{content:"\e010"}.mce-i-link:before{content:"\e011"}.mce-i-unlink:before{content:"\e012"}.mce-i-anchor:before{content:"\e013"}.mce-i-image:before{content:"\e014"}.mce-i-media:before{content:"\e015"}.mce-i-help:before{content:"\e016"}.mce-i-code:before{content:"\e017"}.mce-i-insertdatetime:before{content:"\e018"}.mce-i-preview:before{content:"\e019"}.mce-i-forecolor:before{content:"\e01a"}.mce-i-backcolor:before{content:"\e01a"}.mce-i-table:before{content:"\e01b"}.mce-i-hr:before{content:"\e01c"}.mce-i-removeformat:before{content:"\e01d"}.mce-i-subscript:before{content:"\e01e"}.mce-i-superscript:before{content:"\e01f"}.mce-i-charmap:before{content:"\e020"}.mce-i-emoticons:before{content:"\e021"}.mce-i-print:before{content:"\e022"}.mce-i-fullscreen:before{content:"\e023"}.mce-i-spellchecker:before{content:"\e024"}.mce-i-nonbreaking:before{content:"\e025"}.mce-i-template:before{content:"\e026"}.mce-i-pagebreak:before{content:"\e027"}.mce-i-restoredraft:before{content:"\e028"}.mce-i-untitled:before{content:"\e029"}.mce-i-bold:before{content:"\e02a"}.mce-i-italic:before{content:"\e02b"}.mce-i-underline:before{content:"\e02c"}.mce-i-strikethrough:before{content:"\e02d"}.mce-i-visualchars:before{content:"\e02e"}.mce-i-visualblocks:before{content:"\e02e"}.mce-i-ltr:before{content:"\e02f"}.mce-i-rtl:before{content:"\e030"}.mce-i-copy:before{content:"\e031"}.mce-i-resize:before{content:"\e032"}.mce-i-browse:before{content:"\e034"}.mce-i-pastetext:before{content:"\e035"}.mce-i-checkbox:before,.mce-i-selected:before{content:"\e033"}.mce-i-selected{visibility:hidden}i.mce-i-backcolor{text-shadow:none;background:#bbb}
  • trunk/src/wp-includes/js/tinymce/themes/modern/theme.js

    r28568 r29203  
    343343            width = Math.min(settings.max_width || 0xFFFF, width);
    344344
    345             DOM.css(containerElm, 'width', width + (containerSize.width - iframeSize.width));
    346             DOM.css(iframeElm, 'width', width);
     345            DOM.setStyle(containerElm, 'width', width + (containerSize.width - iframeSize.width));
     346            DOM.setStyle(iframeElm, 'width', width);
    347347        }
    348348
    349349        height = Math.max(settings.min_height || 100, height);
    350350        height = Math.min(settings.max_height || 0xFFFF, height);
    351         DOM.css(iframeElm, 'height', height);
     351        DOM.setStyle(iframeElm, 'height', height);
    352352
    353353        editor.fire('ResizeEditor');
     
    384384                }
    385385
    386                 panel.fixed(false).moveRel(body, editor.rtl ? ['tr-br', 'br-tr'] : ['tl-bl', 'bl-tl']).moveBy(deltaX, deltaY);
     386                panel.fixed(false).moveRel(body, editor.rtl ? ['tr-br', 'br-tr'] : ['tl-bl', 'bl-tl', 'tr-br']).moveBy(deltaX, deltaY);
    387387            }
    388388        }
  • trunk/src/wp-includes/js/tinymce/themes/modern/theme.min.js

    r28568 r29203  
    1 tinymce.ThemeManager.add("modern",function(e){function t(){function t(t){var n,o=[];if(t)return d(t.split(/[ ,]/),function(t){function i(){var i=e.selection;"bullist"==r&&i.selectorChanged("ul > li",function(e,i){for(var n,o=i.parents.length;o--&&(n=i.parents[o].nodeName,"OL"!=n&&"UL"!=n););t.active(e&&"UL"==n)}),"numlist"==r&&i.selectorChanged("ol > li",function(e,i){for(var n,o=i.parents.length;o--&&(n=i.parents[o].nodeName,"OL"!=n&&"UL"!=n););t.active(e&&"OL"==n)}),t.settings.stateSelector&&i.selectorChanged(t.settings.stateSelector,function(e){t.active(e)},!0),t.settings.disabledStateSelector&&i.selectorChanged(t.settings.disabledStateSelector,function(e){t.disabled(e)})}var r;"|"==t?n=null:c.has(t)?(t={type:t},u.toolbar_items_size&&(t.size=u.toolbar_items_size),o.push(t),n=null):(n||(n={type:"buttongroup",items:[]},o.push(n)),e.buttons[t]&&(r=t,t=e.buttons[r],"function"==typeof t&&(t=t()),t.type=t.type||"button",u.toolbar_items_size&&(t.size=u.toolbar_items_size),t=c.create(t),n.items.push(t),e.initialized?i():e.on("init",i)))}),i.push({type:"toolbar",layout:"flow",items:o}),!0}var i=[];if(tinymce.isArray(u.toolbar)){if(0===u.toolbar.length)return;tinymce.each(u.toolbar,function(e,t){u["toolbar"+(t+1)]=e}),delete u.toolbar}for(var n=1;10>n&&t(u["toolbar"+n]);n++);return i.length||u.toolbar===!1||t(u.toolbar||f),i.length?{type:"panel",layout:"stack",classes:"toolbar-grp",ariaRoot:!0,ariaRemember:!0,items:i}:void 0}function i(){function t(t){var i;return"|"==t?{text:"|"}:i=e.menuItems[t]}function i(i){var n,o,r,a,s;if(s=tinymce.makeMap((u.removed_menuitems||"").split(/[ ,]/)),u.menu?(o=u.menu[i],a=!0):o=h[i],o){n={text:o.title},r=[],d((o.items||"").split(/[ ,]/),function(e){var i=t(e);i&&!s[e]&&r.push(t(e))}),a||d(e.menuItems,function(e){e.context==i&&("before"==e.separator&&r.push({text:"|"}),e.prependToContext?r.unshift(e):r.push(e),"after"==e.separator&&r.push({text:"|"}))});for(var l=0;l<r.length;l++)"|"==r[l].text&&(0===l||l==r.length-1)&&r.splice(l,1);if(n.menu=r,!n.menu.length)return null}return n}var n,o=[],r=[];if(u.menu)for(n in u.menu)r.push(n);else for(n in h)r.push(n);for(var a="string"==typeof u.menubar?u.menubar.split(/[ ,]/):r,s=0;s<a.length;s++){var l=a[s];l=i(l),l&&o.push(l)}return o}function n(t){function i(e){var i=t.find(e)[0];i&&i.focus(!0)}e.shortcuts.add("Alt+F9","",function(){i("menubar")}),e.shortcuts.add("Alt+F10","",function(){i("toolbar")}),e.shortcuts.add("Alt+F11","",function(){i("elementpath")}),t.on("cancel",function(){e.focus()})}function o(t,i){function n(e){return{width:e.clientWidth,height:e.clientHeight}}var o,r,a,s;o=e.getContainer(),r=e.getContentAreaContainer().firstChild,a=n(o),s=n(r),null!==t&&(t=Math.max(u.min_width||100,t),t=Math.min(u.max_width||65535,t),m.css(o,"width",t+(a.width-s.width)),m.css(r,"width",t)),i=Math.max(u.min_height||100,i),i=Math.min(u.max_height||65535,i),m.css(r,"height",i),e.fire("ResizeEditor")}function r(t,i){var n=e.getContentAreaContainer();l.resizeTo(n.clientWidth+t,n.clientHeight+i)}function a(o){function r(){if(h&&h.moveRel&&h.visible()&&!h._fixed){var t=e.selection.getScrollContainer(),i=e.getBody(),n=0,o=0;if(t){var r=m.getPos(i),a=m.getPos(t);n=Math.max(0,a.x-r.x),o=Math.max(0,a.y-r.y)}h.fixed(!1).moveRel(i,e.rtl?["tr-br","br-tr"]:["tl-bl","bl-tl"]).moveBy(n,o)}}function a(){h&&(h.show(),r(),m.addClass(e.getBody(),"mce-edit-focus"))}function s(){h&&(h.hide(),m.removeClass(e.getBody(),"mce-edit-focus"))}function d(){return h?void(h.visible()||a()):(h=l.panel=c.create({type:f?"panel":"floatpanel",role:"application",classes:"tinymce tinymce-inline",layout:"flex",direction:"column",align:"stretch",autohide:!1,autofix:!0,fixed:!!f,border:1,items:[u.menubar===!1?null:{type:"menubar",border:"0 0 1 0",items:i()},t()]}),e.fire("BeforeRenderUI"),h.renderTo(f||document.body).reflow(),n(h),a(),e.on("nodeChange",r),e.on("activate",a),e.on("deactivate",s),void e.nodeChanged())}var h,f;return u.fixed_toolbar_container&&(f=m.select(u.fixed_toolbar_container)[0]),u.content_editable=!0,e.on("focus",function(){o.skinUiCss?tinymce.DOM.styleSheetLoader.load(o.skinUiCss,d,d):d()}),e.on("blur hide",s),e.on("remove",function(){h&&(h.remove(),h=null)}),o.skinUiCss&&tinymce.DOM.styleSheetLoader.load(o.skinUiCss),{}}function s(r){var a,s,d;return r.skinUiCss&&tinymce.DOM.loadCSS(r.skinUiCss),a=l.panel=c.create({type:"panel",role:"application",classes:"tinymce",style:"visibility: hidden",layout:"stack",border:1,items:[u.menubar===!1?null:{type:"menubar",border:"0 0 1 0",items:i()},t(),{type:"panel",name:"iframe",layout:"stack",classes:"edit-area",html:"",border:"1 0 0 0"}]}),u.resize!==!1&&(s={type:"resizehandle",direction:u.resize,onResizeStart:function(){var t=e.getContentAreaContainer().firstChild;d={width:t.clientWidth,height:t.clientHeight}},onResize:function(e){"both"==u.resize?o(d.width+e.deltaX,d.height+e.deltaY):o(null,d.height+e.deltaY)}}),u.statusbar!==!1&&a.add({type:"panel",name:"statusbar",classes:"statusbar",layout:"flow",border:"1 0 0 0",ariaRoot:!0,items:[{type:"elementpath"},s]}),u.readonly&&a.find("*").disabled(!0),e.fire("BeforeRenderUI"),a.renderBefore(r.targetNode).reflow(),u.width&&tinymce.DOM.setStyle(a.getEl(),"width",u.width),e.on("remove",function(){a.remove(),a=null}),n(a),{iframeContainer:a.find("#iframe")[0].getEl(),editorContainer:a.getEl()}}var l=this,u=e.settings,c=tinymce.ui.Factory,d=tinymce.each,m=tinymce.DOM,h={file:{title:"File",items:"newdocument"},edit:{title:"Edit",items:"undo redo | cut copy paste pastetext | selectall"},insert:{title:"Insert",items:"|"},view:{title:"View",items:"visualaid |"},format:{title:"Format",items:"bold italic underline strikethrough superscript subscript | formats | removeformat"},table:{title:"Table"},tools:{title:"Tools"}},f="undo redo | styleselect | bold italic | alignleft aligncenter alignright alignjustify | bullist numlist outdent indent | link image";l.renderUI=function(t){var i=u.skin!==!1?u.skin||"lightgray":!1;if(i){var n=u.skin_url;n=n?e.documentBaseURI.toAbsolute(n):tinymce.baseURL+"/skins/"+i,t.skinUiCss=tinymce.Env.documentMode<=7?n+"/skin.ie7.min.css":n+"/skin.min.css",e.contentCSS.push(n+"/content"+(e.inline?".inline":"")+".min.css")}return e.on("ProgressState",function(e){l.throbber=l.throbber||new tinymce.ui.Throbber(l.panel.getEl("body")),e.state?l.throbber.show(e.time):l.throbber.hide()}),u.inline?a(t):s(t)},l.resizeTo=o,l.resizeBy=r});
     1tinymce.ThemeManager.add("modern",function(e){function t(){function t(t){var n,o=[];if(t)return d(t.split(/[ ,]/),function(t){function i(){var i=e.selection;"bullist"==r&&i.selectorChanged("ul > li",function(e,i){for(var n,o=i.parents.length;o--&&(n=i.parents[o].nodeName,"OL"!=n&&"UL"!=n););t.active(e&&"UL"==n)}),"numlist"==r&&i.selectorChanged("ol > li",function(e,i){for(var n,o=i.parents.length;o--&&(n=i.parents[o].nodeName,"OL"!=n&&"UL"!=n););t.active(e&&"OL"==n)}),t.settings.stateSelector&&i.selectorChanged(t.settings.stateSelector,function(e){t.active(e)},!0),t.settings.disabledStateSelector&&i.selectorChanged(t.settings.disabledStateSelector,function(e){t.disabled(e)})}var r;"|"==t?n=null:c.has(t)?(t={type:t},u.toolbar_items_size&&(t.size=u.toolbar_items_size),o.push(t),n=null):(n||(n={type:"buttongroup",items:[]},o.push(n)),e.buttons[t]&&(r=t,t=e.buttons[r],"function"==typeof t&&(t=t()),t.type=t.type||"button",u.toolbar_items_size&&(t.size=u.toolbar_items_size),t=c.create(t),n.items.push(t),e.initialized?i():e.on("init",i)))}),i.push({type:"toolbar",layout:"flow",items:o}),!0}var i=[];if(tinymce.isArray(u.toolbar)){if(0===u.toolbar.length)return;tinymce.each(u.toolbar,function(e,t){u["toolbar"+(t+1)]=e}),delete u.toolbar}for(var n=1;10>n&&t(u["toolbar"+n]);n++);return i.length||u.toolbar===!1||t(u.toolbar||f),i.length?{type:"panel",layout:"stack",classes:"toolbar-grp",ariaRoot:!0,ariaRemember:!0,items:i}:void 0}function i(){function t(t){var i;return"|"==t?{text:"|"}:i=e.menuItems[t]}function i(i){var n,o,r,a,s;if(s=tinymce.makeMap((u.removed_menuitems||"").split(/[ ,]/)),u.menu?(o=u.menu[i],a=!0):o=h[i],o){n={text:o.title},r=[],d((o.items||"").split(/[ ,]/),function(e){var i=t(e);i&&!s[e]&&r.push(t(e))}),a||d(e.menuItems,function(e){e.context==i&&("before"==e.separator&&r.push({text:"|"}),e.prependToContext?r.unshift(e):r.push(e),"after"==e.separator&&r.push({text:"|"}))});for(var l=0;l<r.length;l++)"|"==r[l].text&&(0===l||l==r.length-1)&&r.splice(l,1);if(n.menu=r,!n.menu.length)return null}return n}var n,o=[],r=[];if(u.menu)for(n in u.menu)r.push(n);else for(n in h)r.push(n);for(var a="string"==typeof u.menubar?u.menubar.split(/[ ,]/):r,s=0;s<a.length;s++){var l=a[s];l=i(l),l&&o.push(l)}return o}function n(t){function i(e){var i=t.find(e)[0];i&&i.focus(!0)}e.shortcuts.add("Alt+F9","",function(){i("menubar")}),e.shortcuts.add("Alt+F10","",function(){i("toolbar")}),e.shortcuts.add("Alt+F11","",function(){i("elementpath")}),t.on("cancel",function(){e.focus()})}function o(t,i){function n(e){return{width:e.clientWidth,height:e.clientHeight}}var o,r,a,s;o=e.getContainer(),r=e.getContentAreaContainer().firstChild,a=n(o),s=n(r),null!==t&&(t=Math.max(u.min_width||100,t),t=Math.min(u.max_width||65535,t),m.setStyle(o,"width",t+(a.width-s.width)),m.setStyle(r,"width",t)),i=Math.max(u.min_height||100,i),i=Math.min(u.max_height||65535,i),m.setStyle(r,"height",i),e.fire("ResizeEditor")}function r(t,i){var n=e.getContentAreaContainer();l.resizeTo(n.clientWidth+t,n.clientHeight+i)}function a(o){function r(){if(h&&h.moveRel&&h.visible()&&!h._fixed){var t=e.selection.getScrollContainer(),i=e.getBody(),n=0,o=0;if(t){var r=m.getPos(i),a=m.getPos(t);n=Math.max(0,a.x-r.x),o=Math.max(0,a.y-r.y)}h.fixed(!1).moveRel(i,e.rtl?["tr-br","br-tr"]:["tl-bl","bl-tl","tr-br"]).moveBy(n,o)}}function a(){h&&(h.show(),r(),m.addClass(e.getBody(),"mce-edit-focus"))}function s(){h&&(h.hide(),m.removeClass(e.getBody(),"mce-edit-focus"))}function d(){return h?void(h.visible()||a()):(h=l.panel=c.create({type:f?"panel":"floatpanel",role:"application",classes:"tinymce tinymce-inline",layout:"flex",direction:"column",align:"stretch",autohide:!1,autofix:!0,fixed:!!f,border:1,items:[u.menubar===!1?null:{type:"menubar",border:"0 0 1 0",items:i()},t()]}),e.fire("BeforeRenderUI"),h.renderTo(f||document.body).reflow(),n(h),a(),e.on("nodeChange",r),e.on("activate",a),e.on("deactivate",s),void e.nodeChanged())}var h,f;return u.fixed_toolbar_container&&(f=m.select(u.fixed_toolbar_container)[0]),u.content_editable=!0,e.on("focus",function(){o.skinUiCss?tinymce.DOM.styleSheetLoader.load(o.skinUiCss,d,d):d()}),e.on("blur hide",s),e.on("remove",function(){h&&(h.remove(),h=null)}),o.skinUiCss&&tinymce.DOM.styleSheetLoader.load(o.skinUiCss),{}}function s(r){var a,s,d;return r.skinUiCss&&tinymce.DOM.loadCSS(r.skinUiCss),a=l.panel=c.create({type:"panel",role:"application",classes:"tinymce",style:"visibility: hidden",layout:"stack",border:1,items:[u.menubar===!1?null:{type:"menubar",border:"0 0 1 0",items:i()},t(),{type:"panel",name:"iframe",layout:"stack",classes:"edit-area",html:"",border:"1 0 0 0"}]}),u.resize!==!1&&(s={type:"resizehandle",direction:u.resize,onResizeStart:function(){var t=e.getContentAreaContainer().firstChild;d={width:t.clientWidth,height:t.clientHeight}},onResize:function(e){"both"==u.resize?o(d.width+e.deltaX,d.height+e.deltaY):o(null,d.height+e.deltaY)}}),u.statusbar!==!1&&a.add({type:"panel",name:"statusbar",classes:"statusbar",layout:"flow",border:"1 0 0 0",ariaRoot:!0,items:[{type:"elementpath"},s]}),u.readonly&&a.find("*").disabled(!0),e.fire("BeforeRenderUI"),a.renderBefore(r.targetNode).reflow(),u.width&&tinymce.DOM.setStyle(a.getEl(),"width",u.width),e.on("remove",function(){a.remove(),a=null}),n(a),{iframeContainer:a.find("#iframe")[0].getEl(),editorContainer:a.getEl()}}var l=this,u=e.settings,c=tinymce.ui.Factory,d=tinymce.each,m=tinymce.DOM,h={file:{title:"File",items:"newdocument"},edit:{title:"Edit",items:"undo redo | cut copy paste pastetext | selectall"},insert:{title:"Insert",items:"|"},view:{title:"View",items:"visualaid |"},format:{title:"Format",items:"bold italic underline strikethrough superscript subscript | formats | removeformat"},table:{title:"Table"},tools:{title:"Tools"}},f="undo redo | styleselect | bold italic | alignleft aligncenter alignright alignjustify | bullist numlist outdent indent | link image";l.renderUI=function(t){var i=u.skin!==!1?u.skin||"lightgray":!1;if(i){var n=u.skin_url;n=n?e.documentBaseURI.toAbsolute(n):tinymce.baseURL+"/skins/"+i,t.skinUiCss=tinymce.Env.documentMode<=7?n+"/skin.ie7.min.css":n+"/skin.min.css",e.contentCSS.push(n+"/content"+(e.inline?".inline":"")+".min.css")}return e.on("ProgressState",function(e){l.throbber=l.throbber||new tinymce.ui.Throbber(l.panel.getEl("body")),e.state?l.throbber.show(e.time):l.throbber.hide()}),u.inline?a(t):s(t)},l.resizeTo=o,l.resizeBy=r});
  • trunk/src/wp-includes/js/tinymce/tinymce.js

    r28795 r29203  
    1 // 4.0.29 (2014-06-xx)
     1// 4.1.2 (2014-07-15)
    22
    33/**
     
    663663
    664664/*jshint bitwise:false, expr:true, noempty:false, sub:true, eqnull:true, latedef:false, maxlen:255 */
    665 /*eslint dot-notation:0, no-empty:0, no-cond-assign:0, no-unused-expressions:0, new-cap:0, no-nested-ternary:0, func-style:0, no-bitwise:0, max-len:0, brace-style:0 */
    666 
    667 /*
    668  * Sizzle CSS Selector Engine
    669  *  Copyright, The Dojo Foundation
    670  *  Released under the MIT, BSD, and GPL Licenses.
    671  *  More information: http://sizzlejs.com/
     665/*eslint dot-notation:0, no-empty:0, no-cond-assign:0, no-unused-expressions:0, new-cap:0 */
     666/*eslint no-nested-ternary:0, func-style:0, no-bitwise:0, max-len:0, brace-style:0, no-return-assign:0 */
     667
     668/**
     669 * Sizzle CSS Selector Engine v@VERSION
     670 * http://sizzlejs.com/
     671 *
     672 * Copyright 2008, 2014 jQuery Foundation, Inc. and other contributors
     673 * Released under the MIT license
     674 * http://jquery.org/license
     675 *
     676 * Date: @DATE
    672677 */
    673678define("tinymce/dom/Sizzle", [], function() {
    674679var i,
    675     cachedruns,
     680    support,
    676681    Expr,
    677682    getText,
    678683    isXML,
     684    tokenize,
    679685    compile,
     686    select,
    680687    outermostContext,
    681     recompare,
    682688    sortInput,
     689    hasDuplicate,
    683690
    684691    // Local document vars
     
    695702    expando = "sizzle" + -(new Date()),
    696703    preferredDoc = window.document,
    697     support = {},
    698704    dirruns = 0,
    699705    done = 0,
     
    701707    tokenCache = createCache(),
    702708    compilerCache = createCache(),
    703     hasDuplicate = false,
    704     sortOrder = function() { return 0; },
     709    sortOrder = function( a, b ) {
     710        if ( a === b ) {
     711            hasDuplicate = true;
     712        }
     713        return 0;
     714    },
    705715
    706716    // General-purpose constants
     
    708718    MAX_NEGATIVE = 1 << 31,
    709719
    710     // Array methods
     720    // Instance methods
     721    hasOwn = ({}).hasOwnProperty,
    711722    arr = [],
    712723    pop = arr.pop,
     
    726737    },
    727738
     739    booleans = "checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|ismap|loop|multiple|open|readonly|required|scoped",
    728740
    729741    // Regular expressions
    730742
    731     // Whitespace characters http://www.w3.org/TR/css3-selectors/#whitespace
     743    // http://www.w3.org/TR/css3-selectors/#whitespace
    732744    whitespace = "[\\x20\\t\\r\\n\\f]",
    733     // http://www.w3.org/TR/css3-syntax/#characters
    734     characterEncoding = "(?:\\\\.|[\\w-]|[^\\x00-\\xa0])+",
    735 
    736     // Loosely modeled on CSS identifier characters
    737     // An unquoted value should be a CSS identifier http://www.w3.org/TR/css3-selectors/#attribute-selectors
    738     // Proper syntax: http://www.w3.org/TR/CSS21/syndata.html#value-def-identifier
    739     identifier = characterEncoding.replace( "w", "w#" ),
    740 
    741     // Acceptable operators http://www.w3.org/TR/selectors/#attribute-selectors
    742     operators = "([*^$|!~]?=)",
    743     attributes = "\\[" + whitespace + "*(" + characterEncoding + ")" + whitespace +
    744         "*(?:" + operators + whitespace + "*(?:(['\"])((?:\\\\.|[^\\\\])*?)\\3|(" + identifier + ")|)|)" + whitespace + "*\\]",
    745 
    746     // Prefer arguments quoted,
    747     //   then not containing pseudos/brackets,
    748     //   then attribute selectors/non-parenthetical expressions,
    749     //   then anything else
    750     // These preferences are here to reduce the number of selectors
    751     //   needing tokenize in the PSEUDO preFilter
    752     pseudos = ":(" + characterEncoding + ")(?:\\(((['\"])((?:\\\\.|[^\\\\])*?)\\3|((?:\\\\.|[^\\\\()[\\]]|" + attributes.replace( 3, 8 ) + ")*)|.*)\\)|)",
     745
     746    // http://www.w3.org/TR/CSS21/syndata.html#value-def-identifier
     747    identifier = "(?:\\\\.|[\\w-]|[^\\x00-\\xa0])+",
     748
     749    // Attribute selectors: http://www.w3.org/TR/selectors/#attribute-selectors
     750    attributes = "\\[" + whitespace + "*(" + identifier + ")(?:" + whitespace +
     751        // Operator (capture 2)
     752        "*([*^$|!~]?=)" + whitespace +
     753        // "Attribute values must be CSS identifiers [capture 5] or strings [capture 3 or capture 4]"
     754        "*(?:'((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\"|(" + identifier + "))|)" + whitespace +
     755        "*\\]",
     756
     757    pseudos = ":(" + identifier + ")(?:\\((" +
     758        // To reduce the number of selectors needing tokenize in the preFilter, prefer arguments:
     759        // 1. quoted (capture 3; capture 4 or capture 5)
     760        "('((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\")|" +
     761        // 2. simple (capture 6)
     762        "((?:\\\\.|[^\\\\()[\\]]|" + attributes + ")*)|" +
     763        // 3. anything else (capture 2)
     764        ".*" +
     765        ")\\)|)",
    753766
    754767    // Leading and non-escaped trailing whitespace, capturing some non-whitespace characters preceding the latter
     
    756769
    757770    rcomma = new RegExp( "^" + whitespace + "*," + whitespace + "*" ),
    758     rcombinators = new RegExp( "^" + whitespace + "*([\\x20\\t\\r\\n\\f>+~])" + whitespace + "*" ),
     771    rcombinators = new RegExp( "^" + whitespace + "*([>+~]|" + whitespace + ")" + whitespace + "*" ),
     772
     773    rattributeQuotes = new RegExp( "=" + whitespace + "*([^\\]'\"]*?)" + whitespace + "*\\]", "g" ),
     774
    759775    rpseudo = new RegExp( pseudos ),
    760776    ridentifier = new RegExp( "^" + identifier + "$" ),
    761777
    762778    matchExpr = {
    763         "ID": new RegExp( "^#(" + characterEncoding + ")" ),
    764         "CLASS": new RegExp( "^\\.(" + characterEncoding + ")" ),
    765         "NAME": new RegExp( "^\\[name=['\"]?(" + characterEncoding + ")['\"]?\\]" ),
    766         "TAG": new RegExp( "^(" + characterEncoding.replace( "w", "w*" ) + ")" ),
     779        "ID": new RegExp( "^#(" + identifier + ")" ),
     780        "CLASS": new RegExp( "^\\.(" + identifier + ")" ),
     781        "TAG": new RegExp( "^(" + identifier + "|[*])" ),
    767782        "ATTR": new RegExp( "^" + attributes ),
    768783        "PSEUDO": new RegExp( "^" + pseudos ),
     
    770785            "*(even|odd|(([+-]|)(\\d*)n|)" + whitespace + "*(?:([+-]|)" + whitespace +
    771786            "*(\\d+)|))" + whitespace + "*\\)|)", "i" ),
     787        "bool": new RegExp( "^(?:" + booleans + ")$", "i" ),
    772788        // For use in libraries implementing .is()
    773789        // We use this for POS matching in `select`
     
    776792    },
    777793
    778     rsibling = /[\x20\t\r\n\f]*[+~]/,
    779 
    780     rnative = /^[^{]+\{\s*\[native code/,
    781 
    782     // Easily-parseable/retrievable ID or TAG or CLASS selectors
    783     rquickExpr = /^(?:#([\w\-]+)|(\w+)|\.([\w\-]+))$/,
    784 
    785794    rinputs = /^(?:input|select|textarea|button)$/i,
    786795    rheader = /^h\d$/i,
    787796
     797    rnative = /^[^{]+\{\s*\[native \w/,
     798
     799    // Easily-parseable/retrievable ID or TAG or CLASS selectors
     800    rquickExpr = /^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,
     801
     802    rsibling = /[+~]/,
    788803    rescape = /'|\\/g,
    789     rattributeQuotes = /\=[\x20\t\r\n\f]*([^'"\]]*)[\x20\t\r\n\f]*\]/g,
    790804
    791805    // CSS escapes http://www.w3.org/TR/CSS21/syndata.html#escaped-characters
    792     runescape = /\\([\da-fA-F]{1,6}[\x20\t\r\n\f]?|.)/g,
    793     funescape = function( _, escaped ) {
     806    runescape = new RegExp( "\\\\([\\da-f]{1,6}" + whitespace + "?|(" + whitespace + ")|.)", "ig" ),
     807    funescape = function( _, escaped, escapedWhitespace ) {
    794808        var high = "0x" + escaped - 0x10000;
    795809        // NaN means non-codepoint
    796         return high !== high ?
     810        // Support: Firefox<24
     811        // Workaround erroneous numeric interpretation of +"0x"
     812        return high !== high || escapedWhitespace ?
    797813            escaped :
    798             // BMP codepoint
    799814            high < 0 ?
     815                // BMP codepoint
    800816                String.fromCharCode( high + 0x10000 ) :
    801817                // Supplemental Plane codepoint (surrogate pair)
     
    832848}
    833849
    834 /**
    835  * For feature detection
    836  * @param {Function} fn The function to test for native support
    837  */
    838 function isNative( fn ) {
    839     return rnative.test( fn + "" );
    840 }
    841 
    842 /**
    843  * Create key-value caches of limited size
    844  * @returns {Function(string, Object)} Returns the Object data after storing it on itself with
    845  *  property name the (space-suffixed) string and (if the cache is larger than Expr.cacheLength)
    846  *  deleting the oldest entry
    847  */
    848 function createCache() {
    849     var cache,
    850         keys = [];
    851 
    852     cache = function( key, value ) {
    853         // Use (key + " ") to avoid collision with native prototype properties (see Issue #157)
    854         if ( keys.push( key += " " ) > Expr.cacheLength ) {
    855             // Only keep the most recent entries
    856             delete cache[ keys.shift() ];
    857         }
    858         cache[ key ] = value;
    859         return value;
    860     };
    861 
    862     return cache;
    863 }
    864 
    865 /**
    866  * Mark a function for special use by Sizzle
    867  * @param {Function} fn The function to mark
    868  */
    869 function markFunction( fn ) {
    870     fn[ expando ] = true;
    871     return fn;
    872 }
    873 
    874 /**
    875  * Support testing using an element
    876  * @param {Function} fn Passed the created div and expects a boolean result
    877  */
    878 function assert( fn ) {
    879     var div = document.createElement("div");
    880 
    881     try {
    882         return !!fn( div );
    883     } catch (e) {
    884         return false;
    885     } finally {
    886         // release memory in IE
    887         div = null;
    888     }
    889 }
    890 
    891850function Sizzle( selector, context, results, seed ) {
    892851    var match, elem, m, nodeType,
     
    918877                    elem = context.getElementById( m );
    919878                    // Check parentNode to catch when Blackberry 4.6 returns
    920                     // nodes that are no longer in the document #6963
     879                    // nodes that are no longer in the document (jQuery #6963)
    921880                    if ( elem && elem.parentNode ) {
    922881                        // Handle the case where IE, Opera, and Webkit return items
     
    944903
    945904            // Speed-up: Sizzle(".CLASS")
    946             } else if ( (m = match[3]) && support.getElementsByClassName && context.getElementsByClassName ) {
     905            } else if ( (m = match[3]) && support.getElementsByClassName ) {
    947906                push.apply( results, context.getElementsByClassName( m ) );
    948907                return results;
     
    951910
    952911        // QSA path
    953         if ( support.qsa && !rbuggyQSA.test(selector) ) {
    954             old = true;
    955             nid = expando;
     912        if ( support.qsa && (!rbuggyQSA || !rbuggyQSA.test( selector )) ) {
     913            nid = old = expando;
    956914            newContext = context;
    957915            newSelector = nodeType === 9 && selector;
     
    975933                    groups[i] = nid + toSelector( groups[i] );
    976934                }
    977                 newContext = rsibling.test( selector ) && context.parentNode || context;
     935                newContext = rsibling.test( selector ) && testContext( context.parentNode ) || context;
    978936                newSelector = groups.join(",");
    979937            }
     
    1000958
    1001959/**
    1002  * Detect xml
     960 * Create key-value caches of limited size
     961 * @returns {Function(string, Object)} Returns the Object data after storing it on itself with
     962 *  property name the (space-suffixed) string and (if the cache is larger than Expr.cacheLength)
     963 *  deleting the oldest entry
     964 */
     965function createCache() {
     966    var keys = [];
     967
     968    function cache( key, value ) {
     969        // Use (key + " ") to avoid collision with native prototype properties (see Issue #157)
     970        if ( keys.push( key + " " ) > Expr.cacheLength ) {
     971            // Only keep the most recent entries
     972            delete cache[ keys.shift() ];
     973        }
     974        return (cache[ key + " " ] = value);
     975    }
     976    return cache;
     977}
     978
     979/**
     980 * Mark a function for special use by Sizzle
     981 * @param {Function} fn The function to mark
     982 */
     983function markFunction( fn ) {
     984    fn[ expando ] = true;
     985    return fn;
     986}
     987
     988/**
     989 * Support testing using an element
     990 * @param {Function} fn Passed the created div and expects a boolean result
     991 */
     992function assert( fn ) {
     993    var div = document.createElement("div");
     994
     995    try {
     996        return !!fn( div );
     997    } catch (e) {
     998        return false;
     999    } finally {
     1000        // Remove from its parent by default
     1001        if ( div.parentNode ) {
     1002            div.parentNode.removeChild( div );
     1003        }
     1004        // release memory in IE
     1005        div = null;
     1006    }
     1007}
     1008
     1009/**
     1010 * Adds the same handler for all of the specified attrs
     1011 * @param {String} attrs Pipe-separated list of attributes
     1012 * @param {Function} handler The method that will be applied
     1013 */
     1014function addHandle( attrs, handler ) {
     1015    var arr = attrs.split("|"),
     1016        i = attrs.length;
     1017
     1018    while ( i-- ) {
     1019        Expr.attrHandle[ arr[i] ] = handler;
     1020    }
     1021}
     1022
     1023/**
     1024 * Checks document order of two siblings
     1025 * @param {Element} a
     1026 * @param {Element} b
     1027 * @returns {Number} Returns less than 0 if a precedes b, greater than 0 if a follows b
     1028 */
     1029function siblingCheck( a, b ) {
     1030    var cur = b && a,
     1031        diff = cur && a.nodeType === 1 && b.nodeType === 1 &&
     1032            ( ~b.sourceIndex || MAX_NEGATIVE ) -
     1033            ( ~a.sourceIndex || MAX_NEGATIVE );
     1034
     1035    // Use IE sourceIndex if available on both nodes
     1036    if ( diff ) {
     1037        return diff;
     1038    }
     1039
     1040    // Check if b follows a
     1041    if ( cur ) {
     1042        while ( (cur = cur.nextSibling) ) {
     1043            if ( cur === b ) {
     1044                return -1;
     1045            }
     1046        }
     1047    }
     1048
     1049    return a ? 1 : -1;
     1050}
     1051
     1052/**
     1053 * Returns a function to use in pseudos for input types
     1054 * @param {String} type
     1055 */
     1056function createInputPseudo( type ) {
     1057    return function( elem ) {
     1058        var name = elem.nodeName.toLowerCase();
     1059        return name === "input" && elem.type === type;
     1060    };
     1061}
     1062
     1063/**
     1064 * Returns a function to use in pseudos for buttons
     1065 * @param {String} type
     1066 */
     1067function createButtonPseudo( type ) {
     1068    return function( elem ) {
     1069        var name = elem.nodeName.toLowerCase();
     1070        return (name === "input" || name === "button") && elem.type === type;
     1071    };
     1072}
     1073
     1074/**
     1075 * Returns a function to use in pseudos for positionals
     1076 * @param {Function} fn
     1077 */
     1078function createPositionalPseudo( fn ) {
     1079    return markFunction(function( argument ) {
     1080        argument = +argument;
     1081        return markFunction(function( seed, matches ) {
     1082            var j,
     1083                matchIndexes = fn( [], seed.length, argument ),
     1084                i = matchIndexes.length;
     1085
     1086            // Match elements found at the specified indexes
     1087            while ( i-- ) {
     1088                if ( seed[ (j = matchIndexes[i]) ] ) {
     1089                    seed[j] = !(matches[j] = seed[j]);
     1090                }
     1091            }
     1092        });
     1093    });
     1094}
     1095
     1096/**
     1097 * Checks a node for validity as a Sizzle context
     1098 * @param {Element|Object=} context
     1099 * @returns {Element|Object|Boolean} The input node if acceptable, otherwise a falsy value
     1100 */
     1101function testContext( context ) {
     1102    return context && typeof context.getElementsByTagName !== strundefined && context;
     1103}
     1104
     1105// Expose support vars for convenience
     1106support = Sizzle.support = {};
     1107
     1108/**
     1109 * Detects XML nodes
    10031110 * @param {Element|Object} elem An element or a document
     1111 * @returns {Boolean} True iff elem is a non-HTML XML node
    10041112 */
    10051113isXML = Sizzle.isXML = function( elem ) {
     
    10161124 */
    10171125setDocument = Sizzle.setDocument = function( node ) {
    1018     var doc = node ? node.ownerDocument || node : preferredDoc;
     1126    var hasCompare,
     1127        doc = node ? node.ownerDocument || node : preferredDoc,
     1128        parent = doc.defaultView;
    10191129
    10201130    // If no document and documentElement is available, return
     
    10291139    // Support tests
    10301140    documentIsHTML = !isXML( doc );
     1141
     1142    // Support: IE>8
     1143    // If iframe document is assigned to "document" variable and if iframe has been reloaded,
     1144    // IE will throw "permission denied" error when accessing "document" variable, see jQuery #13936
     1145    // IE6-8 do not support the defaultView property so parent will be undefined
     1146    if ( parent && parent !== parent.top ) {
     1147        // IE11 does not have attachEvent, so all must suffer
     1148        if ( parent.addEventListener ) {
     1149            parent.addEventListener( "unload", function() {
     1150                setDocument();
     1151            }, false );
     1152        } else if ( parent.attachEvent ) {
     1153            parent.attachEvent( "onunload", function() {
     1154                setDocument();
     1155            });
     1156        }
     1157    }
     1158
     1159    /* Attributes
     1160    ---------------------------------------------------------------------- */
     1161
     1162    // Support: IE<8
     1163    // Verify that getAttribute really returns attributes and not properties (excepting IE8 booleans)
     1164    support.attributes = assert(function( div ) {
     1165        div.className = "i";
     1166        return !div.getAttribute("className");
     1167    });
     1168
     1169    /* getElement(s)By*
     1170    ---------------------------------------------------------------------- */
    10311171
    10321172    // Check if getElementsByTagName("*") returns only elements
     
    10361176    });
    10371177
    1038     // Check if attributes should be retrieved by attribute nodes
    1039     support.attributes = assert(function( div ) {
    1040         div.innerHTML = "<select></select>";
    1041         var type = typeof div.lastChild.getAttribute("multiple");
    1042         // IE8 returns a string for some attributes even when not present
    1043         return type !== "boolean" && type !== "string";
     1178    // Support: IE<9
     1179    support.getElementsByClassName = rnative.test( doc.getElementsByClassName );
     1180
     1181    // Support: IE<10
     1182    // Check if getElementById returns elements by name
     1183    // The broken getElementById methods don't pick up programatically-set names,
     1184    // so use a roundabout getElementsByName test
     1185    support.getById = assert(function( div ) {
     1186        docElem.appendChild( div ).id = expando;
     1187        return !doc.getElementsByName || !doc.getElementsByName( expando ).length;
    10441188    });
    10451189
    1046     // Check if getElementsByClassName can be trusted
    1047     support.getElementsByClassName = assert(function( div ) {
    1048         // Opera can't find a second classname (in 9.6)
    1049         div.innerHTML = "<div class='hidden e'></div><div class='hidden'></div>";
    1050         if ( !div.getElementsByClassName || !div.getElementsByClassName("e").length ) {
    1051             return false;
    1052         }
    1053 
    1054         // Safari 3.2 caches class attributes and doesn't catch changes
    1055         div.lastChild.className = "e";
    1056         return div.getElementsByClassName("e").length === 2;
    1057     });
    1058 
    1059     // Check if getElementsByName privileges form controls or returns elements by ID
    1060     // If so, assume (for broader support) that getElementById returns elements by name
    1061     support.getByName = assert(function( div ) {
    1062         // Inject content
    1063         div.id = expando + 0;
    1064         // Support: Windows 8 Native Apps
    1065         // Assigning innerHTML with "name" attributes throws uncatchable exceptions
    1066         // http://msdn.microsoft.com/en-us/library/ie/hh465388.aspx
    1067         div.appendChild( document.createElement("a") ).setAttribute( "name", expando );
    1068         div.appendChild( document.createElement("i") ).setAttribute( "name", expando );
    1069         docElem.appendChild( div );
    1070 
    1071         // Test
    1072         var pass = doc.getElementsByName &&
    1073             // buggy browsers will return fewer than the correct 2
    1074             doc.getElementsByName( expando ).length === 2 +
    1075             // buggy browsers will return more than the correct 0
    1076             doc.getElementsByName( expando + 0 ).length;
    1077 
    1078         // Cleanup
    1079         docElem.removeChild( div );
    1080 
    1081         return pass;
    1082     });
    1083 
    1084     // Support: Webkit<537.32
    1085     // Detached nodes confoundingly follow *each other*
    1086     support.sortDetached = assert(function( div1 ) {
    1087         return div1.compareDocumentPosition &&
    1088             // Should return 1, but Webkit returns 4 (following)
    1089             (div1.compareDocumentPosition( document.createElement("div") ) & 1);
    1090     });
    1091 
    1092     // IE6/7 return modified attributes
    1093     Expr.attrHandle = assert(function( div ) {
    1094         div.innerHTML = "<a href='#'></a>";
    1095         return div.firstChild && typeof div.firstChild.getAttribute !== strundefined &&
    1096             div.firstChild.getAttribute("href") === "#";
    1097     }) ?
    1098         {} :
    1099         {
    1100             "href": function( elem ) {
    1101                 return elem.getAttribute( "href", 2 );
    1102             },
    1103             "type": function( elem ) {
    1104                 return elem.getAttribute("type");
    1105             }
    1106         };
    1107 
    11081190    // ID find and filter
    1109     if ( support.getByName ) {
     1191    if ( support.getById ) {
    11101192        Expr.find["ID"] = function( id, context ) {
    11111193            if ( typeof context.getElementById !== strundefined && documentIsHTML ) {
     
    11131195                // Check parentNode to catch when Blackberry 4.6 returns
    11141196                // nodes that are no longer in the document #6963
    1115                 return m && m.parentNode ? [m] : [];
     1197                return m && m.parentNode ? [ m ] : [];
    11161198            }
    11171199        };
     
    11231205        };
    11241206    } else {
    1125         Expr.find["ID"] = function( id, context ) {
    1126             if ( typeof context.getElementById !== strundefined && documentIsHTML ) {
    1127                 var m = context.getElementById( id );
    1128 
    1129                 return m ?
    1130                     m.id === id || typeof m.getAttributeNode !== strundefined && m.getAttributeNode("id").value === id ?
    1131                         [m] :
    1132                         undefined :
    1133                     [];
    1134             }
    1135         };
     1207        // Support: IE6/7
     1208        // getElementById is not reliable as a find shortcut
     1209        delete Expr.find["ID"];
     1210
    11361211        Expr.filter["ID"] =  function( id ) {
    11371212            var attrId = id.replace( runescape, funescape );
     
    11691244        };
    11701245
    1171     // Name
    1172     Expr.find["NAME"] = support.getByName && function( tag, context ) {
    1173         if ( typeof context.getElementsByName !== strundefined ) {
    1174             return context.getElementsByName( name );
    1175         }
    1176     };
    1177 
    11781246    // Class
    11791247    Expr.find["CLASS"] = support.getElementsByClassName && function( className, context ) {
    1180         if ( typeof context.getElementsByClassName !== strundefined && documentIsHTML ) {
     1248        if ( documentIsHTML ) {
    11811249            return context.getElementsByClassName( className );
    11821250        }
    11831251    };
     1252
     1253    /* QSA/matchesSelector
     1254    ---------------------------------------------------------------------- */
    11841255
    11851256    // QSA and matchesSelector support
     
    11881259    rbuggyMatches = [];
    11891260
    1190     // qSa(:focus) reports false when true (Chrome 21),
    1191     // no need to also add to buggyMatches since matches checks buggyQSA
    1192     // A support test would require too much code (would include document ready)
    1193     rbuggyQSA = [ ":focus" ];
    1194 
    1195     if ( (support.qsa = isNative(doc.querySelectorAll)) ) {
     1261    // qSa(:focus) reports false when true (Chrome 21)
     1262    // We allow this because of a bug in IE8/9 that throws an error
     1263    // whenever `document.activeElement` is accessed on an iframe
     1264    // So, we allow :focus to pass through QSA all the time to avoid the IE error
     1265    // See http://bugs.jquery.com/ticket/13378
     1266    rbuggyQSA = [];
     1267
     1268    if ( (support.qsa = rnative.test( doc.querySelectorAll )) ) {
    11961269        // Build QSA regex
    11971270        // Regex strategy adopted from Diego Perini
     
    12021275            // since its presence should be enough
    12031276            // http://bugs.jquery.com/ticket/12359
    1204             div.innerHTML = "<select><option selected=''></option></select>";
    1205 
    1206             // IE8 - Some boolean attributes are not treated correctly
     1277            div.innerHTML = "<select msallowcapture=''><option selected=''></option></select>";
     1278
     1279            // Support: IE8, Opera 11-12.16
     1280            // Nothing should be selected when empty strings follow ^= or $= or *=
     1281            // The test attribute must be unknown in Opera but "safe" for WinRT
     1282            // http://msdn.microsoft.com/en-us/library/ie/hh465388.aspx#attribute_section
     1283            if ( div.querySelectorAll("[msallowcapture^='']").length ) {
     1284                rbuggyQSA.push( "[*^$]=" + whitespace + "*(?:''|\"\")" );
     1285            }
     1286
     1287            // Support: IE8
     1288            // Boolean attributes and "value" are not treated correctly
    12071289            if ( !div.querySelectorAll("[selected]").length ) {
    1208                 rbuggyQSA.push( "\\[" + whitespace + "*(?:checked|disabled|ismap|multiple|readonly|selected|value)" );
     1290                rbuggyQSA.push( "\\[" + whitespace + "*(?:value|" + booleans + ")" );
    12091291            }
    12101292
     
    12181300
    12191301        assert(function( div ) {
    1220 
    1221             // Opera 10-12/IE8 - ^= $= *= and empty values
    1222             // Should not select anything
    1223             div.innerHTML = "<input type='hidden' i=''/>";
    1224             if ( div.querySelectorAll("[i^='']").length ) {
    1225                 rbuggyQSA.push( "[*^$]=" + whitespace + "*(?:\"\"|'')" );
     1302            // Support: Windows 8 Native Apps
     1303            // The type and name attributes are restricted during .innerHTML assignment
     1304            var input = doc.createElement("input");
     1305            input.setAttribute( "type", "hidden" );
     1306            div.appendChild( input ).setAttribute( "name", "D" );
     1307
     1308            // Support: IE8
     1309            // Enforce case-sensitivity of name attribute
     1310            if ( div.querySelectorAll("[name=d]").length ) {
     1311                rbuggyQSA.push( "name" + whitespace + "*[*^$|!~]?=" );
    12261312            }
    12271313
     
    12381324    }
    12391325
    1240     if ( (support.matchesSelector = isNative( (matches = docElem.matchesSelector ||
     1326    if ( (support.matchesSelector = rnative.test( (matches = docElem.matches ||
     1327        docElem.webkitMatchesSelector ||
    12411328        docElem.mozMatchesSelector ||
    1242         docElem.webkitMatchesSelector ||
    12431329        docElem.oMatchesSelector ||
    12441330        docElem.msMatchesSelector) )) ) {
     
    12561342    }
    12571343
    1258     rbuggyQSA = new RegExp( rbuggyQSA.join("|") );
     1344    rbuggyQSA = rbuggyQSA.length && new RegExp( rbuggyQSA.join("|") );
    12591345    rbuggyMatches = rbuggyMatches.length && new RegExp( rbuggyMatches.join("|") );
    12601346
     1347    /* Contains
     1348    ---------------------------------------------------------------------- */
     1349    hasCompare = rnative.test( docElem.compareDocumentPosition );
     1350
    12611351    // Element contains another
    1262     // Purposefully does not implement inclusive descendant
     1352    // Purposefully does not implement inclusive descendent
    12631353    // As in, an element does not contain itself
    1264     contains = isNative(docElem.contains) || docElem.compareDocumentPosition ?
     1354    contains = hasCompare || rnative.test( docElem.contains ) ?
    12651355        function( a, b ) {
    12661356            var adown = a.nodeType === 9 ? a.documentElement : a,
     
    12831373        };
    12841374
     1375    /* Sorting
     1376    ---------------------------------------------------------------------- */
     1377
    12851378    // Document order sorting
    1286     sortOrder = docElem.compareDocumentPosition ?
     1379    sortOrder = hasCompare ?
    12871380    function( a, b ) {
    12881381
     
    12931386        }
    12941387
    1295         var compare = b.compareDocumentPosition && a.compareDocumentPosition && a.compareDocumentPosition( b );
    1296 
     1388        // Sort on method existence if only one input has compareDocumentPosition
     1389        var compare = !a.compareDocumentPosition - !b.compareDocumentPosition;
    12971390        if ( compare ) {
    1298             // Disconnected nodes
    1299             if ( compare & 1 ||
    1300                 (recompare && b.compareDocumentPosition( a ) === compare) ) {
    1301 
    1302                 // Choose the first element that is related to our preferred document
    1303                 if ( a === doc || contains(preferredDoc, a) ) {
    1304                     return -1;
    1305                 }
    1306                 if ( b === doc || contains(preferredDoc, b) ) {
    1307                     return 1;
    1308                 }
    1309 
    1310                 // Maintain original order
    1311                 return sortInput ?
    1312                     ( indexOf.call( sortInput, a ) - indexOf.call( sortInput, b ) ) :
    1313                     0;
    1314             }
    1315 
    1316             return compare & 4 ? -1 : 1;
    1317         }
    1318 
    1319         // Not directly comparable, sort on existence of method
    1320         return a.compareDocumentPosition ? -1 : 1;
     1391            return compare;
     1392        }
     1393
     1394        // Calculate position if both inputs belong to the same document
     1395        compare = ( a.ownerDocument || a ) === ( b.ownerDocument || b ) ?
     1396            a.compareDocumentPosition( b ) :
     1397
     1398            // Otherwise we know they are disconnected
     1399            1;
     1400
     1401        // Disconnected nodes
     1402        if ( compare & 1 ||
     1403            (!support.sortDetached && b.compareDocumentPosition( a ) === compare) ) {
     1404
     1405            // Choose the first element that is related to our preferred document
     1406            if ( a === doc || a.ownerDocument === preferredDoc && contains(preferredDoc, a) ) {
     1407                return -1;
     1408            }
     1409            if ( b === doc || b.ownerDocument === preferredDoc && contains(preferredDoc, b) ) {
     1410                return 1;
     1411            }
     1412
     1413            // Maintain original order
     1414            return sortInput ?
     1415                ( indexOf.call( sortInput, a ) - indexOf.call( sortInput, b ) ) :
     1416                0;
     1417        }
     1418
     1419        return compare & 4 ? -1 : 1;
    13211420    } :
    13221421    function( a, b ) {
     1422        // Exit early if the nodes are identical
     1423        if ( a === b ) {
     1424            hasDuplicate = true;
     1425            return 0;
     1426        }
     1427
    13231428        var cur,
    13241429            i = 0,
     
    13281433            bp = [ b ];
    13291434
    1330         // Exit early if the nodes are identical
    1331         if ( a === b ) {
    1332             hasDuplicate = true;
    1333             return 0;
    1334 
    13351435        // Parentless nodes are either documents or disconnected
    1336         } else if ( !aup || !bup ) {
     1436        if ( !aup || !bup ) {
    13371437            return a === doc ? -1 :
    13381438                b === doc ? 1 :
    13391439                aup ? -1 :
    13401440                bup ? 1 :
     1441                sortInput ?
     1442                ( indexOf.call( sortInput, a ) - indexOf.call( sortInput, b ) ) :
    13411443                0;
    13421444
     
    13711473    };
    13721474
    1373     return document;
     1475    return doc;
    13741476};
    13751477
     
    13871489    expr = expr.replace( rattributeQuotes, "='$1']" );
    13881490
    1389     // rbuggyQSA always contains :focus, so no need for an existence check
    1390     if ( support.matchesSelector && documentIsHTML && (!rbuggyMatches || !rbuggyMatches.test(expr)) && !rbuggyQSA.test(expr) ) {
     1491    if ( support.matchesSelector && documentIsHTML &&
     1492        ( !rbuggyMatches || !rbuggyMatches.test( expr ) ) &&
     1493        ( !rbuggyQSA     || !rbuggyQSA.test( expr ) ) ) {
     1494
    13911495        try {
    13921496            var ret = matches.call( elem, expr );
     
    14021506    }
    14031507
    1404     return Sizzle( expr, document, null, [elem] ).length > 0;
     1508    return Sizzle( expr, document, null, [ elem ] ).length > 0;
    14051509};
    14061510
     
    14141518
    14151519Sizzle.attr = function( elem, name ) {
    1416     var val;
    1417 
    14181520    // Set document vars if needed
    14191521    if ( ( elem.ownerDocument || elem ) !== document ) {
     
    14211523    }
    14221524
    1423     if ( documentIsHTML ) {
    1424         name = name.toLowerCase();
    1425     }
    1426     if ( (val = Expr.attrHandle[ name ]) ) {
    1427         return val( elem );
    1428     }
    1429     if ( !documentIsHTML || support.attributes ) {
    1430         return elem.getAttribute( name );
    1431     }
    1432     return ( (val = elem.getAttributeNode( name )) || elem.getAttribute( name ) ) && elem[ name ] === true ?
    1433         name :
    1434         val && val.specified ? val.value : null;
     1525    var fn = Expr.attrHandle[ name.toLowerCase() ],
     1526        // Don't get fooled by Object.prototype properties (jQuery #13807)
     1527        val = fn && hasOwn.call( Expr.attrHandle, name.toLowerCase() ) ?
     1528            fn( elem, name, !documentIsHTML ) :
     1529            undefined;
     1530
     1531    return val !== undefined ?
     1532        val :
     1533        support.attributes || !documentIsHTML ?
     1534            elem.getAttribute( name ) :
     1535            (val = elem.getAttributeNode(name)) && val.specified ?
     1536                val.value :
     1537                null;
    14351538};
    14361539
     
    14391542};
    14401543
    1441 // Document sorting and removing duplicates
     1544/**
     1545 * Document sorting and removing duplicates
     1546 * @param {ArrayLike} results
     1547 */
    14421548Sizzle.uniqueSort = function( results ) {
    14431549    var elem,
     
    14481554    // Unless we *know* we can detect duplicates, assume their presence
    14491555    hasDuplicate = !support.detectDuplicates;
    1450     // Compensate for sort limitations
    1451     recompare = !support.sortDetached;
    14521556    sortInput = !support.sortStable && results.slice( 0 );
    14531557    results.sort( sortOrder );
     
    14641568    }
    14651569
     1570    // Clear input after sorting to release objects
     1571    // See https://github.com/jquery/sizzle/pull/225
     1572    sortInput = null;
     1573
    14661574    return results;
    14671575};
    1468 
    1469 /**
    1470  * Checks document order of two siblings
    1471  * @param {Element} a
    1472  * @param {Element} b
    1473  * @returns Returns -1 if a precedes b, 1 if a follows b
    1474  */
    1475 function siblingCheck( a, b ) {
    1476     var cur = b && a,
    1477         diff = cur && ( ~b.sourceIndex || MAX_NEGATIVE ) - ( ~a.sourceIndex || MAX_NEGATIVE );
    1478 
    1479     // Use IE sourceIndex if available on both nodes
    1480     if ( diff ) {
    1481         return diff;
    1482     }
    1483 
    1484     // Check if b follows a
    1485     if ( cur ) {
    1486         while ( (cur = cur.nextSibling) ) {
    1487             if ( cur === b ) {
    1488                 return -1;
    1489             }
    1490         }
    1491     }
    1492 
    1493     return a ? 1 : -1;
    1494 }
    1495 
    1496 // Returns a function to use in pseudos for input types
    1497 function createInputPseudo( type ) {
    1498     return function( elem ) {
    1499         var name = elem.nodeName.toLowerCase();
    1500         return name === "input" && elem.type === type;
    1501     };
    1502 }
    1503 
    1504 // Returns a function to use in pseudos for buttons
    1505 function createButtonPseudo( type ) {
    1506     return function( elem ) {
    1507         var name = elem.nodeName.toLowerCase();
    1508         return (name === "input" || name === "button") && elem.type === type;
    1509     };
    1510 }
    1511 
    1512 // Returns a function to use in pseudos for positionals
    1513 function createPositionalPseudo( fn ) {
    1514     return markFunction(function( argument ) {
    1515         argument = +argument;
    1516         return markFunction(function( seed, matches ) {
    1517             var j,
    1518                 matchIndexes = fn( [], seed.length, argument ),
    1519                 i = matchIndexes.length;
    1520 
    1521             // Match elements found at the specified indexes
    1522             while ( i-- ) {
    1523                 if ( seed[ (j = matchIndexes[i]) ] ) {
    1524                     seed[j] = !(matches[j] = seed[j]);
    1525                 }
    1526             }
    1527         });
    1528     });
    1529 }
    15301576
    15311577/**
     
    15411587    if ( !nodeType ) {
    15421588        // If no nodeType, this is expected to be an array
    1543         for ( ; (node = elem[i]); i++ ) {
     1589        while ( (node = elem[i++]) ) {
    15441590            // Do not traverse comment nodes
    15451591            ret += getText( node );
     
    15471593    } else if ( nodeType === 1 || nodeType === 9 || nodeType === 11 ) {
    15481594        // Use textContent for elements
    1549         // innerText usage removed for consistency of new lines (see #11153)
     1595        // innerText usage removed for consistency of new lines (jQuery #11153)
    15501596        if ( typeof elem.textContent === "string" ) {
    15511597            return elem.textContent;
     
    15731619    match: matchExpr,
    15741620
     1621    attrHandle: {},
     1622
    15751623    find: {},
    15761624
     
    15871635
    15881636            // Move the given value to match[3] whether quoted or unquoted
    1589             match[3] = ( match[4] || match[5] || "" ).replace( runescape, funescape );
     1637            match[3] = ( match[3] || match[4] || match[5] || "" ).replace( runescape, funescape );
    15901638
    15911639            if ( match[2] === "~=" ) {
     
    16301678        "PSEUDO": function( match ) {
    16311679            var excess,
    1632                 unquoted = !match[5] && match[2];
     1680                unquoted = !match[6] && match[2];
    16331681
    16341682            if ( matchExpr["CHILD"].test( match[0] ) ) {
     
    16371685
    16381686            // Accept quoted arguments as-is
    1639             if ( match[4] ) {
    1640                 match[2] = match[4];
     1687            if ( match[3] ) {
     1688                match[2] = match[4] || match[5] || "";
    16411689
    16421690            // Strip excess characters from unquoted arguments
     
    16591707    filter: {
    16601708
    1661         "TAG": function( nodeName ) {
    1662             if ( nodeName === "*" ) {
    1663                 return function() { return true; };
    1664             }
    1665 
    1666             nodeName = nodeName.replace( runescape, funescape ).toLowerCase();
    1667             return function( elem ) {
    1668                 return elem.nodeName && elem.nodeName.toLowerCase() === nodeName;
    1669             };
     1709        "TAG": function( nodeNameSelector ) {
     1710            var nodeName = nodeNameSelector.replace( runescape, funescape ).toLowerCase();
     1711            return nodeNameSelector === "*" ?
     1712                function() { return true; } :
     1713                function( elem ) {
     1714                    return elem.nodeName && elem.nodeName.toLowerCase() === nodeName;
     1715                };
    16701716        },
    16711717
     
    16761722                (pattern = new RegExp( "(^|" + whitespace + ")" + className + "(" + whitespace + "|$)" )) &&
    16771723                classCache( className, function( elem ) {
    1678                     return pattern.test( elem.className || (typeof elem.getAttribute !== strundefined && elem.getAttribute("class")) || "" );
     1724                    return pattern.test( typeof elem.className === "string" && elem.className || typeof elem.getAttribute !== strundefined && elem.getAttribute("class") || "" );
    16791725                });
    16801726        },
     
    18681914
    18691915        "contains": markFunction(function( text ) {
     1916            text = text.replace( runescape, funescape );
    18701917            return function( elem ) {
    18711918                return ( elem.textContent || elem.innerText || getText( elem ) ).indexOf( text ) > -1;
     
    19441991        "empty": function( elem ) {
    19451992            // http://www.w3.org/TR/selectors/#empty-pseudo
    1946             // :empty is only affected by element nodes and content nodes(including text(3), cdata(4)),
    1947             //   not comment, processing instructions, or others
    1948             // Thanks to Diego Perini for the nodeName shortcut
    1949             //   Greater than "@" means alpha characters (specifically not starting with "#" or "?")
     1993            // :empty is negated by element (1) or content nodes (text: 3; cdata: 4; entity ref: 5),
     1994            //   but not by others (comment: 8; processing instruction: 7; etc.)
     1995            // nodeType < 6 works because attributes (2) do not appear as children
    19501996            for ( elem = elem.firstChild; elem; elem = elem.nextSibling ) {
    1951                 if ( elem.nodeName > "@" || elem.nodeType === 3 || elem.nodeType === 4 ) {
     1997                if ( elem.nodeType < 6 ) {
    19521998                    return false;
    19531999                }
     
    19762022        "text": function( elem ) {
    19772023            var attr;
    1978             // IE6 and 7 will map elem.type to 'text' for new HTML5 types (search, etc)
    1979             // use getAttribute instead to test this case
    19802024            return elem.nodeName.toLowerCase() === "input" &&
    19812025                elem.type === "text" &&
    1982                 ( (attr = elem.getAttribute("type")) == null || attr.toLowerCase() === elem.type );
     2026
     2027                // Support: IE<8
     2028                // New HTML5 attribute values (e.g., "search") appear with elem.type === "text"
     2029                ( (attr = elem.getAttribute("type")) == null || attr.toLowerCase() === "text" );
    19832030        },
    19842031
     
    20292076    }
    20302077};
     2078
     2079Expr.pseudos["nth"] = Expr.pseudos["eq"];
    20312080
    20322081// Add button/input type pseudos
     
    20382087}
    20392088
    2040 function tokenize( selector, parseOnly ) {
     2089// Easy API for creating new setFilters
     2090function setFilters() {}
     2091setFilters.prototype = Expr.filters = Expr.pseudos;
     2092Expr.setFilters = new setFilters();
     2093
     2094tokenize = Sizzle.tokenize = function( selector, parseOnly ) {
    20412095    var matched, match, tokens, type,
    20422096        soFar, groups, preFilters,
     
    20592113                soFar = soFar.slice( match[0].length ) || soFar;
    20602114            }
    2061             groups.push( tokens = [] );
     2115            groups.push( (tokens = []) );
    20622116        }
    20632117
     
    20672121        if ( (match = rcombinators.exec( soFar )) ) {
    20682122            matched = match.shift();
    2069             tokens.push( {
     2123            tokens.push({
    20702124                value: matched,
    20712125                // Cast descendant combinators to space
    20722126                type: match[0].replace( rtrim, " " )
    2073             } );
     2127            });
    20742128            soFar = soFar.slice( matched.length );
    20752129        }
     
    20802134                (match = preFilters[ type ]( match ))) ) {
    20812135                matched = match.shift();
    2082                 tokens.push( {
     2136                tokens.push({
    20832137                    value: matched,
    20842138                    type: type,
    20852139                    matches: match
    2086                 } );
     2140                });
    20872141                soFar = soFar.slice( matched.length );
    20882142            }
     
    21032157            // Cache the tokens
    21042158            tokenCache( selector, groups ).slice( 0 );
    2105 }
     2159};
    21062160
    21072161function toSelector( tokens ) {
     
    21322186        // Check against all ancestor/preceding elements
    21332187        function( elem, context, xml ) {
    2134             var data, cache, outerCache,
    2135                 dirkey = dirruns + " " + doneName;
     2188            var oldCache, outerCache,
     2189                newCache = [ dirruns, doneName ];
    21362190
    21372191            // We can't set arbitrary data on XML nodes, so they don't benefit from dir caching
     
    21482202                    if ( elem.nodeType === 1 || checkNonElements ) {
    21492203                        outerCache = elem[ expando ] || (elem[ expando ] = {});
    2150                         if ( (cache = outerCache[ dir ]) && cache[0] === dirkey ) {
    2151                             if ( (data = cache[1]) === true || data === cachedruns ) {
    2152                                 return data === true;
    2153                             }
     2204                        if ( (oldCache = outerCache[ dir ]) &&
     2205                            oldCache[ 0 ] === dirruns && oldCache[ 1 ] === doneName ) {
     2206
     2207                            // Assign to newCache so results back-propagate to previous elements
     2208                            return (newCache[ 2 ] = oldCache[ 2 ]);
    21542209                        } else {
    2155                             cache = outerCache[ dir ] = [ dirkey ];
    2156                             cache[1] = matcher( elem, context, xml ) || cachedruns;
    2157                             if ( cache[1] === true ) {
     2210                            // Reuse newcache so results back-propagate to previous elements
     2211                            outerCache[ dir ] = newCache;
     2212
     2213                            // A match means we're done; a fail means we have to keep checking
     2214                            if ( (newCache[ 2 ] = matcher( elem, context, xml )) ) {
    21582215                                return true;
    21592216                            }
     
    21772234        } :
    21782235        matchers[0];
     2236}
     2237
     2238function multipleContexts( selector, contexts, results ) {
     2239    var i = 0,
     2240        len = contexts.length;
     2241    for ( ; i < len; i++ ) {
     2242        Sizzle( selector, contexts[i], results );
     2243    }
     2244    return results;
    21792245}
    21802246
     
    23312397                return setMatcher(
    23322398                    i > 1 && elementMatcher( matchers ),
    2333                     i > 1 && toSelector( tokens.slice( 0, i - 1 ) ).replace( rtrim, "$1" ),
     2399                    i > 1 && toSelector(
     2400                        // If the preceding token was a descendant combinator, insert an implicit any-element `*`
     2401                        tokens.slice( 0, i - 1 ).concat({ value: tokens[ i - 2 ].type === " " ? "*" : "" })
     2402                    ).replace( rtrim, "$1" ),
    23342403                    matcher,
    23352404                    i < j && matcherFromTokens( tokens.slice( i, j ) ),
     
    23462415
    23472416function matcherFromGroupMatchers( elementMatchers, setMatchers ) {
    2348     // A counter to specify which element is currently being matched
    2349     var matcherCachedRuns = 0,
    2350         bySet = setMatchers.length > 0,
     2417    var bySet = setMatchers.length > 0,
    23512418        byElement = elementMatchers.length > 0,
    2352         superMatcher = function( seed, context, xml, results, expandContext ) {
     2419        superMatcher = function( seed, context, xml, results, outermost ) {
    23532420            var elem, j, matcher,
    2354                 setMatched = [],
    23552421                matchedCount = 0,
    23562422                i = "0",
    23572423                unmatched = seed && [],
    2358                 outermost = expandContext != null,
     2424                setMatched = [],
    23592425                contextBackup = outermostContext,
    2360                 // We must always have either seed elements or context
    2361                 elems = seed || byElement && Expr.find["TAG"]( "*", expandContext && context.parentNode || context ),
     2426                // We must always have either seed elements or outermost context
     2427                elems = seed || byElement && Expr.find["TAG"]( "*", outermost ),
    23622428                // Use integer dirruns iff this is the outermost matcher
    2363                 dirrunsUnique = (dirruns += contextBackup == null ? 1 : Math.random() || 0.1);
     2429                dirrunsUnique = (dirruns += contextBackup == null ? 1 : Math.random() || 0.1),
     2430                len = elems.length;
    23642431
    23652432            if ( outermost ) {
    23662433                outermostContext = context !== document && context;
    2367                 cachedruns = matcherCachedRuns;
    23682434            }
    23692435
    23702436            // Add elements passing elementMatchers directly to results
    23712437            // Keep `i` a string if there are no elements so `matchedCount` will be "00" below
    2372             for ( ; (elem = elems[i]) != null; i++ ) {
     2438            // Support: IE<9, Safari
     2439            // Tolerate NodeList properties (IE: "length"; Safari: <number>) matching elements by id
     2440            for ( ; i !== len && (elem = elems[i]) != null; i++ ) {
    23732441                if ( byElement && elem ) {
    23742442                    j = 0;
     
    23812449                    if ( outermost ) {
    23822450                        dirruns = dirrunsUnique;
    2383                         cachedruns = ++matcherCachedRuns;
    23842451                    }
    23852452                }
     
    24462513}
    24472514
    2448 compile = Sizzle.compile = function( selector, group /* Internal Use Only */ ) {
     2515compile = Sizzle.compile = function( selector, match /* Internal Use Only */ ) {
    24492516    var i,
    24502517        setMatchers = [],
     
    24542521    if ( !cached ) {
    24552522        // Generate a function of recursive functions that can be used to check each element
    2456         if ( !group ) {
    2457             group = tokenize( selector );
    2458         }
    2459         i = group.length;
     2523        if ( !match ) {
     2524            match = tokenize( selector );
     2525        }
     2526        i = match.length;
    24602527        while ( i-- ) {
    2461             cached = matcherFromTokens( group[i] );
     2528            cached = matcherFromTokens( match[i] );
    24622529            if ( cached[ expando ] ) {
    24632530                setMatchers.push( cached );
     
    24692536        // Cache the compiled function
    24702537        cached = compilerCache( selector, matcherFromGroupMatchers( elementMatchers, setMatchers ) );
     2538
     2539        // Save selector and tokenization
     2540        cached.selector = selector;
    24712541    }
    24722542    return cached;
    24732543};
    24742544
    2475 function multipleContexts( selector, contexts, results ) {
    2476     var i = 0,
    2477         len = contexts.length;
    2478     for ( ; i < len; i++ ) {
    2479         Sizzle( selector, contexts[i], results );
     2545/**
     2546 * A low-level selection function that works with Sizzle's compiled
     2547 *  selector functions
     2548 * @param {String|Function} selector A selector or a pre-compiled
     2549 *  selector function built with Sizzle.compile
     2550 * @param {Element} context
     2551 * @param {Array} [results]
     2552 * @param {Array} [seed] A set of elements to match against
     2553 */
     2554select = Sizzle.select = function( selector, context, results, seed ) {
     2555    var i, tokens, token, type, find,
     2556        compiled = typeof selector === "function" && selector,
     2557        match = !seed && tokenize( (selector = compiled.selector || selector) );
     2558
     2559    results = results || [];
     2560
     2561    // Try to minimize operations if there is no seed and only one group
     2562    if ( match.length === 1 ) {
     2563
     2564        // Take a shortcut and set the context if the root selector is an ID
     2565        tokens = match[0] = match[0].slice( 0 );
     2566        if ( tokens.length > 2 && (token = tokens[0]).type === "ID" &&
     2567                support.getById && context.nodeType === 9 && documentIsHTML &&
     2568                Expr.relative[ tokens[1].type ] ) {
     2569
     2570            context = ( Expr.find["ID"]( token.matches[0].replace(runescape, funescape), context ) || [] )[0];
     2571            if ( !context ) {
     2572                return results;
     2573
     2574            // Precompiled matchers will still verify ancestry, so step up a level
     2575            } else if ( compiled ) {
     2576                context = context.parentNode;
     2577            }
     2578
     2579            selector = selector.slice( tokens.shift().value.length );
     2580        }
     2581
     2582        // Fetch a seed set for right-to-left matching
     2583        i = matchExpr["needsContext"].test( selector ) ? 0 : tokens.length;
     2584        while ( i-- ) {
     2585            token = tokens[i];
     2586
     2587            // Abort if we hit a combinator
     2588            if ( Expr.relative[ (type = token.type) ] ) {
     2589                break;
     2590            }
     2591            if ( (find = Expr.find[ type ]) ) {
     2592                // Search, expanding context for leading sibling combinators
     2593                if ( (seed = find(
     2594                    token.matches[0].replace( runescape, funescape ),
     2595                    rsibling.test( tokens[0].type ) && testContext( context.parentNode ) || context
     2596                )) ) {
     2597
     2598                    // If seed is empty or no tokens remain, we can return early
     2599                    tokens.splice( i, 1 );
     2600                    selector = seed.length && toSelector( tokens );
     2601                    if ( !selector ) {
     2602                        push.apply( results, seed );
     2603                        return results;
     2604                    }
     2605
     2606                    break;
     2607                }
     2608            }
     2609        }
    24802610    }
    2481     return results;
    2482 }
    2483 
    2484 function select( selector, context, results, seed ) {
    2485     var i, tokens, token, type, find,
    2486         match = tokenize( selector );
    2487 
    2488     if ( !seed ) {
    2489         // Try to minimize operations if there is only one group
    2490         if ( match.length === 1 ) {
    2491 
    2492             // Take a shortcut and set the context if the root selector is an ID
    2493             tokens = match[0] = match[0].slice( 0 );
    2494             if ( tokens.length > 2 && (token = tokens[0]).type === "ID" &&
    2495                     context.nodeType === 9 && documentIsHTML &&
    2496                     Expr.relative[ tokens[1].type ] ) {
    2497 
    2498                 context = ( Expr.find["ID"]( token.matches[0].replace(runescape, funescape), context ) || [] )[0];
    2499                 if ( !context ) {
    2500                     return results;
    2501                 }
    2502 
    2503                 selector = selector.slice( tokens.shift().value.length );
    2504             }
    2505 
    2506             // Fetch a seed set for right-to-left matching
    2507             i = matchExpr["needsContext"].test( selector ) ? 0 : tokens.length;
    2508             while ( i-- ) {
    2509                 token = tokens[i];
    2510 
    2511                 // Abort if we hit a combinator
    2512                 if ( Expr.relative[ (type = token.type) ] ) {
    2513                     break;
    2514                 }
    2515                 if ( (find = Expr.find[ type ]) ) {
    2516                     // Search, expanding context for leading sibling combinators
    2517                     if ( (seed = find(
    2518                         token.matches[0].replace( runescape, funescape ),
    2519                         rsibling.test( tokens[0].type ) && context.parentNode || context
    2520                     )) ) {
    2521 
    2522                         // If seed is empty or no tokens remain, we can return early
    2523                         tokens.splice( i, 1 );
    2524                         selector = seed.length && toSelector( tokens );
    2525                         if ( !selector ) {
    2526                             push.apply( results, seed );
    2527                             return results;
    2528                         }
    2529 
    2530                         break;
    2531                     }
    2532                 }
    2533             }
    2534         }
    2535     }
    2536 
    2537     // Compile and execute a filtering function
     2611
     2612    // Compile and execute a filtering function if one is not provided
    25382613    // Provide `match` to avoid retokenization if we modified the selector above
    2539     compile( selector, match )(
     2614    ( compiled || compile( selector, match ) )(
    25402615        seed,
    25412616        context,
    25422617        !documentIsHTML,
    25432618        results,
    2544         rsibling.test( selector )
     2619        rsibling.test( selector ) && testContext( context.parentNode ) || context
    25452620    );
    25462621    return results;
     2622};
     2623
     2624// One-time assignments
     2625
     2626// Sort stability
     2627support.sortStable = expando.split("").sort( sortOrder ).join("") === expando;
     2628
     2629// Support: Chrome 14-35+
     2630// Always assume duplicates if they aren't passed to the comparison function
     2631support.detectDuplicates = !!hasDuplicate;
     2632
     2633// Initialize against the default document
     2634setDocument();
     2635
     2636// Support: Webkit<537.32 - Safari 6.0.3/Chrome 25 (fixed in Chrome 27)
     2637// Detached nodes confoundingly follow *each other*
     2638support.sortDetached = assert(function( div1 ) {
     2639    // Should return 1, but returns 4 (following)
     2640    return div1.compareDocumentPosition( document.createElement("div") ) & 1;
     2641});
     2642
     2643// Support: IE<8
     2644// Prevent attribute/property "interpolation"
     2645// http://msdn.microsoft.com/en-us/library/ms536429%28VS.85%29.aspx
     2646if ( !assert(function( div ) {
     2647    div.innerHTML = "<a href='#'></a>";
     2648    return div.firstChild.getAttribute("href") === "#" ;
     2649}) ) {
     2650    addHandle( "type|href|height|width", function( elem, name, isXML ) {
     2651        if ( !isXML ) {
     2652            return elem.getAttribute( name, name.toLowerCase() === "type" ? 1 : 2 );
     2653        }
     2654    });
    25472655}
    25482656
    2549 // Deprecated
    2550 Expr.pseudos["nth"] = Expr.pseudos["eq"];
    2551 
    2552 // Easy API for creating new setFilters
    2553 function setFilters() {}
    2554 setFilters.prototype = Expr.filters = Expr.pseudos;
    2555 Expr.setFilters = new setFilters();
    2556 
    2557 // Check sort stability
    2558 support.sortStable = expando.split("").sort( sortOrder ).join("") === expando;
    2559 
    2560 // Initialize with the default document
    2561 setDocument();
    2562 
    2563 // Always assume the presence of duplicates if sort doesn't
    2564 // pass them to our comparison function (as in Google Chrome).
    2565 [0, 0].sort( sortOrder );
    2566 support.detectDuplicates = hasDuplicate;
    2567 
    2568 /*
    2569 // EXPOSE
    2570 if ( typeof define === "function" && define.amd ) {
    2571     define(function() { return Sizzle; });
    2572 } else {
    2573     window.Sizzle = Sizzle;
     2657// Support: IE<9
     2658// Use defaultValue in place of getAttribute("value")
     2659if ( !support.attributes || !assert(function( div ) {
     2660    div.innerHTML = "<input/>";
     2661    div.firstChild.setAttribute( "value", "" );
     2662    return div.firstChild.getAttribute( "value" ) === "";
     2663}) ) {
     2664    addHandle( "value", function( elem, name, isXML ) {
     2665        if ( !isXML && elem.nodeName.toLowerCase() === "input" ) {
     2666            return elem.defaultValue;
     2667        }
     2668    });
    25742669}
    2575 */
     2670
     2671// Support: IE<9
     2672// Use getAttributeNode to fetch booleans when getAttribute lies
     2673if ( !assert(function( div ) {
     2674    return div.getAttribute("disabled") == null;
     2675}) ) {
     2676    addHandle( booleans, function( elem, name, isXML ) {
     2677        var val;
     2678        if ( !isXML ) {
     2679            return elem[ name ] === true ? name.toLowerCase() :
     2680                    (val = elem.getAttributeNode( name )) && val.specified ?
     2681                    val.value :
     2682                null;
     2683        }
     2684    });
     2685}
    25762686
    25772687// EXPOSE
    25782688return Sizzle;
    2579 });
    2580 
    2581 // Included from: js/tinymce/classes/dom/DomQuery.js
    2582 
    2583 /**
    2584  * DomQuery.js
    2585  *
    2586  * Copyright, Moxiecode Systems AB
    2587  * Released under LGPL License.
    2588  *
    2589  * License: http://www.tinymce.com/license
    2590  * Contributing: http://www.tinymce.com/contributing
    2591  *
    2592  * Some of this logic is based on jQuery code that is released under
    2593  * MIT license that grants us to sublicense it under LGPL.
    2594  *
    2595  * @ignore-file
    2596  */
    2597 
    2598 /**
    2599  * @class tinymce.dom.DomQuery
    2600  */
    2601 define("tinymce/dom/DomQuery", [
    2602     "tinymce/dom/EventUtils",
    2603     "tinymce/dom/Sizzle"
    2604 ], function(EventUtils, Sizzle) {
    2605     var doc = document, push = Array.prototype.push, slice = Array.prototype.slice;
    2606     var rquickExpr = /^(?:[^#<]*(<[\w\W]+>)[^>]*$|#([\w\-]*)$)/;
    2607     var Event = EventUtils.Event;
    2608 
    2609     function isDefined(obj) {
    2610         return typeof obj !== "undefined";
    2611     }
    2612 
    2613     function isString(obj) {
    2614         return typeof obj === "string";
    2615     }
    2616 
    2617     function createFragment(html) {
    2618         var frag, node, container;
    2619 
    2620         container = doc.createElement("div");
    2621         frag = doc.createDocumentFragment();
    2622         container.innerHTML = html;
    2623 
    2624         while ((node = container.firstChild)) {
    2625             frag.appendChild(node);
    2626         }
    2627 
    2628         return frag;
    2629     }
    2630 
    2631     function domManipulate(targetNodes, sourceItem, callback) {
    2632         var i;
    2633 
    2634         if (typeof sourceItem === "string") {
    2635             sourceItem = createFragment(sourceItem);
    2636         } else if (sourceItem.length) {
    2637             for (i = 0; i < sourceItem.length; i++) {
    2638                 domManipulate(targetNodes, sourceItem[i], callback);
    2639             }
    2640 
    2641             return targetNodes;
    2642         }
    2643 
    2644         i = targetNodes.length;
    2645         while (i--) {
    2646             callback.call(targetNodes[i], sourceItem.parentNode ? sourceItem : sourceItem);
    2647         }
    2648 
    2649         return targetNodes;
    2650     }
    2651 
    2652     function hasClass(node, className) {
    2653         return node && className && (' ' + node.className + ' ').indexOf(' ' + className + ' ') !== -1;
    2654     }
    2655 
    2656     /**
    2657      * Makes a map object out of a string that gets separated by a delimiter.
    2658      *
    2659      * @method makeMap
    2660      * @param {String} items Item string to split.
    2661      * @param {Object} map Optional object to add items to.
    2662      * @return {Object} name/value object with items as keys.
    2663      */
    2664     function makeMap(items, map) {
    2665         var i;
    2666 
    2667         items = items || [];
    2668 
    2669         if (typeof(items) == "string") {
    2670             items = items.split(' ');
    2671         }
    2672 
    2673         map = map || {};
    2674 
    2675         i = items.length;
    2676         while (i--) {
    2677             map[items[i]] = {};
    2678         }
    2679 
    2680         return map;
    2681     }
    2682 
    2683     var numericCssMap = makeMap('fillOpacity fontWeight lineHeight opacity orphans widows zIndex zoom');
    2684 
    2685     function DomQuery(selector, context) {
    2686         /*eslint new-cap:0 */
    2687         return new DomQuery.fn.init(selector, context);
    2688     }
    2689 
    2690     /**
    2691      * Extends the specified object with another object.
    2692      *
    2693      * @method extend
    2694      * @param {Object} target Object to extend.
    2695      * @param {Object..} obj Multiple objects to extend with.
    2696      * @return {Object} Same as target, the extended object.
    2697      */
    2698     function extend(target) {
    2699         var args = arguments, arg, i, key;
    2700 
    2701         for (i = 1; i < args.length; i++) {
    2702             arg = args[i];
    2703 
    2704             for (key in arg) {
    2705                 target[key] = arg[key];
    2706             }
    2707         }
    2708 
    2709         return target;
    2710     }
    2711 
    2712     /**
    2713      * Converts the specified object into a real JavaScript array.
    2714      *
    2715      * @method toArray
    2716      * @param {Object} obj Object to convert into array.
    2717      * @return {Array} Array object based in input.
    2718      */
    2719     function toArray(obj) {
    2720         var array = [], i, l;
    2721 
    2722         for (i = 0, l = obj.length; i < l; i++) {
    2723             array[i] = obj[i];
    2724         }
    2725 
    2726         return array;
    2727     }
    2728 
    2729     /**
    2730      * Returns the index of the specified item inside the array.
    2731      *
    2732      * @method inArray
    2733      * @param {Object} item Item to look for.
    2734      * @param {Array} array Array to look for item in.
    2735      * @return {Number} Index of the item or -1.
    2736      */
    2737     function inArray(item, array) {
    2738         var i;
    2739 
    2740         if (array.indexOf) {
    2741             return array.indexOf(item);
    2742         }
    2743 
    2744         i = array.length;
    2745         while (i--) {
    2746             if (array[i] === item) {
    2747                 return i;
    2748             }
    2749         }
    2750 
    2751         return -1;
    2752     }
    2753 
    2754     /**
    2755      * Returns true/false if the specified object is an array.
    2756      *
    2757      * @method isArray
    2758      * @param {Object} obj Object to check if it's an array.
    2759      * @return {Boolean} true/false if the input object is array or not.
    2760      */
    2761     var isArray = Array.isArray || function(obj) {
    2762         return Object.prototype.toString.call(obj) === "[object Array]";
    2763     };
    2764 
    2765     var whiteSpaceRegExp = /^\s*|\s*$/g;
    2766 
    2767     function trim(str) {
    2768         return (str === null || str === undefined) ? '' : ("" + str).replace(whiteSpaceRegExp, '');
    2769     }
    2770 
    2771     /**
    2772      * Executes the callback function for each item in array/object. If you return false in the
    2773      * callback it will break the loop.
    2774      *
    2775      * @method each
    2776      * @param {Object} obj Object to iterate.
    2777      * @param {function} callback Callback function to execute for each item.
    2778      */
    2779     function each(obj, callback) {
    2780         var length, key, i, undef, value;
    2781 
    2782         if (obj) {
    2783             length = obj.length;
    2784 
    2785             if (length === undef) {
    2786                 // Loop object items
    2787                 for (key in obj) {
    2788                     if (obj.hasOwnProperty(key)) {
    2789                         value = obj[key];
    2790                         if (callback.call(value, value, key) === false) {
    2791                             break;
    2792                         }
    2793                     }
    2794                 }
    2795             } else {
    2796                 // Loop array items
    2797                 for (i = 0; i < length; i++) {
    2798                     value = obj[i];
    2799                     if (callback.call(value, value, key) === false) {
    2800                         break;
    2801                     }
    2802                 }
    2803             }
    2804         }
    2805 
    2806         return obj;
    2807     }
    2808 
    2809     DomQuery.fn = DomQuery.prototype = {
    2810         constructor: DomQuery,
    2811         selector: "",
    2812         length: 0,
    2813 
    2814         init: function(selector, context) {
    2815             var self = this, match, node;
    2816 
    2817             if (!selector) {
    2818                 return self;
    2819             }
    2820 
    2821             if (selector.nodeType) {
    2822                 self.context = self[0] = selector;
    2823                 self.length = 1;
    2824 
    2825                 return self;
    2826             }
    2827 
    2828             if (isString(selector)) {
    2829                 if (selector.charAt(0) === "<" && selector.charAt(selector.length - 1) === ">" && selector.length >= 3) {
    2830                     match = [null, selector, null];
    2831                 } else {
    2832                     match = rquickExpr.exec(selector);
    2833                 }
    2834 
    2835                 if (match) {
    2836                     if (match[1]) {
    2837                         node = createFragment(selector).firstChild;
    2838                         while (node) {
    2839                             this.add(node);
    2840                             node = node.nextSibling;
    2841                         }
    2842                     } else {
    2843                         node = doc.getElementById(match[2]);
    2844 
    2845                         if (node.id !== match[2]) {
    2846                             return self.find(selector);
    2847                         }
    2848 
    2849                         self.length = 1;
    2850                         self[0] = node;
    2851                     }
    2852                 } else {
    2853                     return DomQuery(context || document).find(selector);
    2854                 }
    2855             } else {
    2856                 this.add(selector);
    2857             }
    2858 
    2859             return self;
    2860         },
    2861 
    2862         toArray: function() {
    2863             return toArray(this);
    2864         },
    2865 
    2866         add: function(items) {
    2867             var self = this;
    2868 
    2869             // Force single item into array
    2870             if (!isArray(items)) {
    2871                 if (items instanceof DomQuery) {
    2872                     self.add(items.toArray());
    2873                 } else {
    2874                     push.call(self, items);
    2875                 }
    2876             } else {
    2877                 push.apply(self, items);
    2878             }
    2879 
    2880             return self;
    2881         },
    2882 
    2883         attr: function(name, value) {
    2884             var self = this;
    2885 
    2886             if (typeof name === "object") {
    2887                 each(name, function(value, name) {
    2888                     self.attr(name, value);
    2889                 });
    2890             } else if (isDefined(value)) {
    2891                 this.each(function() {
    2892                     if (this.nodeType === 1) {
    2893                         this.setAttribute(name, value);
    2894                     }
    2895                 });
    2896             } else {
    2897                 return self[0] && self[0].nodeType === 1 ? self[0].getAttribute(name) : undefined;
    2898             }
    2899 
    2900             return self;
    2901         },
    2902 
    2903         css: function(name, value) {
    2904             var self = this;
    2905 
    2906             if (typeof name === "object") {
    2907                 each(name, function(value, name) {
    2908                     self.css(name, value);
    2909                 });
    2910             } else {
    2911                 // Camelcase it, if needed
    2912                 name = name.replace(/-(\D)/g, function(a, b) {
    2913                     return b.toUpperCase();
    2914                 });
    2915 
    2916                 if (isDefined(value)) {
    2917                     // Default px suffix on these
    2918                     if (typeof(value) === 'number' && !numericCssMap[name]) {
    2919                         value += 'px';
    2920                     }
    2921 
    2922                     self.each(function() {
    2923                         var style = this.style;
    2924 
    2925                         // IE specific opacity
    2926                         if (name === "opacity" && this.runtimeStyle && typeof(this.runtimeStyle.opacity) === "undefined") {
    2927                             style.filter = value === '' ? '' : "alpha(opacity=" + (value * 100) + ")";
    2928                         }
    2929 
    2930                         try {
    2931                             style[name] = value;
    2932                         } catch (ex) {
    2933                             // Ignore
    2934                         }
    2935                     });
    2936                 } else {
    2937                     return self[0] ? self[0].style[name] : undefined;
    2938                 }
    2939             }
    2940 
    2941             return self;
    2942         },
    2943 
    2944         remove: function() {
    2945             var self = this, node, i = this.length;
    2946 
    2947             while (i--) {
    2948                 node = self[i];
    2949                 Event.clean(node);
    2950 
    2951                 if (node.parentNode) {
    2952                     node.parentNode.removeChild(node);
    2953                 }
    2954             }
    2955 
    2956             return this;
    2957         },
    2958 
    2959         empty: function() {
    2960             var self = this, node, i = this.length;
    2961 
    2962             while (i--) {
    2963                 node = self[i];
    2964                 while (node.firstChild) {
    2965                     node.removeChild(node.firstChild);
    2966                 }
    2967             }
    2968 
    2969             return this;
    2970         },
    2971 
    2972         html: function(value) {
    2973             var self = this, i;
    2974 
    2975             if (isDefined(value)) {
    2976                 i = self.length;
    2977                 while (i--) {
    2978                     self[i].innerHTML = value;
    2979                 }
    2980 
    2981                 return self;
    2982             }
    2983 
    2984             return self[0] ? self[0].innerHTML : '';
    2985         },
    2986 
    2987         text: function(value) {
    2988             var self = this, i;
    2989 
    2990             if (isDefined(value)) {
    2991                 i = self.length;
    2992                 while (i--) {
    2993                     self[i].innerText = self[0].textContent = value;
    2994                 }
    2995 
    2996                 return self;
    2997             }
    2998 
    2999             return self[0] ? self[0].innerText || self[0].textContent : '';
    3000         },
    3001 
    3002         append: function() {
    3003             return domManipulate(this, arguments, function(node) {
    3004                 if (this.nodeType === 1) {
    3005                     this.appendChild(node);
    3006                 }
    3007             });
    3008         },
    3009 
    3010         prepend: function() {
    3011             return domManipulate(this, arguments, function(node) {
    3012                 if (this.nodeType === 1) {
    3013                     this.insertBefore(node, this.firstChild);
    3014                 }
    3015             });
    3016         },
    3017 
    3018         before: function() {
    3019             var self = this;
    3020 
    3021             if (self[0] && self[0].parentNode) {
    3022                 return domManipulate(self, arguments, function(node) {
    3023                     this.parentNode.insertBefore(node, this.nextSibling);
    3024                 });
    3025             }
    3026 
    3027             return self;
    3028         },
    3029 
    3030         after: function() {
    3031             var self = this;
    3032 
    3033             if (self[0] && self[0].parentNode) {
    3034                 return domManipulate(self, arguments, function(node) {
    3035                     this.parentNode.insertBefore(node, this);
    3036                 });
    3037             }
    3038 
    3039             return self;
    3040         },
    3041 
    3042         appendTo: function(val) {
    3043             DomQuery(val).append(this);
    3044 
    3045             return this;
    3046         },
    3047 
    3048         addClass: function(className) {
    3049             return this.toggleClass(className, true);
    3050         },
    3051 
    3052         removeClass: function(className) {
    3053             return this.toggleClass(className, false);
    3054         },
    3055 
    3056         toggleClass: function(className, state) {
    3057             var self = this;
    3058 
    3059             if (className.indexOf(' ') !== -1) {
    3060                 each(className.split(' '), function() {
    3061                     self.toggleClass(this, state);
    3062                 });
    3063             } else {
    3064                 self.each(function(node) {
    3065                     var existingClassName;
    3066 
    3067                     if (hasClass(node, className) !== state) {
    3068                         existingClassName = node.className;
    3069 
    3070                         if (state) {
    3071                             node.className += existingClassName ? ' ' + className : className;
    3072                         } else {
    3073                             node.className = trim((" " + existingClassName + " ").replace(' ' + className + ' ', ' '));
    3074                         }
    3075                     }
    3076                 });
    3077             }
    3078 
    3079             return self;
    3080         },
    3081 
    3082         hasClass: function(className) {
    3083             return hasClass(this[0], className);
    3084         },
    3085 
    3086         each: function(callback) {
    3087             return each(this, callback);
    3088         },
    3089 
    3090         on: function(name, callback) {
    3091             return this.each(function() {
    3092                 Event.bind(this, name, callback);
    3093             });
    3094         },
    3095 
    3096         off: function(name, callback) {
    3097             return this.each(function() {
    3098                 Event.unbind(this, name, callback);
    3099             });
    3100         },
    3101 
    3102         show: function() {
    3103             return this.css('display', '');
    3104         },
    3105 
    3106         hide: function() {
    3107             return this.css('display', 'none');
    3108         },
    3109 
    3110         slice: function() {
    3111             return new DomQuery(slice.apply(this, arguments));
    3112         },
    3113 
    3114         eq: function(index) {
    3115             return index === -1 ? this.slice(index) : this.slice(index, +index + 1);
    3116         },
    3117 
    3118         first: function() {
    3119             return this.eq(0);
    3120         },
    3121 
    3122         last: function() {
    3123             return this.eq(-1);
    3124         },
    3125 
    3126         replaceWith: function(content) {
    3127             var self = this;
    3128 
    3129             if (self[0]) {
    3130                 self[0].parentNode.replaceChild(DomQuery(content)[0], self[0]);
    3131             }
    3132 
    3133             return self;
    3134         },
    3135 
    3136         wrap: function(wrapper) {
    3137             wrapper = DomQuery(wrapper)[0];
    3138 
    3139             return this.each(function() {
    3140                 var self = this, newWrapper = wrapper.cloneNode(false);
    3141                 self.parentNode.insertBefore(newWrapper, self);
    3142                 newWrapper.appendChild(self);
    3143             });
    3144         },
    3145 
    3146         unwrap: function() {
    3147             return this.each(function() {
    3148                 var self = this, node = self.firstChild, currentNode;
    3149 
    3150                 while (node) {
    3151                     currentNode = node;
    3152                     node = node.nextSibling;
    3153                     self.parentNode.insertBefore(currentNode, self);
    3154                 }
    3155             });
    3156         },
    3157 
    3158         clone: function() {
    3159             var result = [];
    3160 
    3161             this.each(function() {
    3162                 result.push(this.cloneNode(true));
    3163             });
    3164 
    3165             return DomQuery(result);
    3166         },
    3167 
    3168         find: function(selector) {
    3169             var i, l, ret = [];
    3170 
    3171             for (i = 0, l = this.length; i < l; i++) {
    3172                 DomQuery.find(selector, this[i], ret);
    3173             }
    3174 
    3175             return DomQuery(ret);
    3176         },
    3177 
    3178         push: push,
    3179         sort: [].sort,
    3180         splice: [].splice
    3181     };
    3182 
    3183     // Static members
    3184     extend(DomQuery, {
    3185         extend: extend,
    3186         toArray: toArray,
    3187         inArray: inArray,
    3188         isArray: isArray,
    3189         each: each,
    3190         trim: trim,
    3191         makeMap: makeMap,
    3192 
    3193         // Sizzle
    3194         find: Sizzle,
    3195         expr: Sizzle.selectors,
    3196         unique: Sizzle.uniqueSort,
    3197         text: Sizzle.getText,
    3198         isXMLDoc: Sizzle.isXML,
    3199         contains: Sizzle.contains,
    3200         filter: function(expr, elems, not) {
    3201             if (not) {
    3202                 expr = ":not(" + expr + ")";
    3203             }
    3204 
    3205             if (elems.length === 1) {
    3206                 elems = DomQuery.find.matchesSelector(elems[0], expr) ? [elems[0]] : [];
    3207             } else {
    3208                 elems = DomQuery.find.matches(expr, elems);
    3209             }
    3210 
    3211             return elems;
    3212         }
    3213     });
    3214 
    3215     function dir(el, prop, until) {
    3216         var matched = [], cur = el[prop];
    3217 
    3218         while (cur && cur.nodeType !== 9 && (until === undefined || cur.nodeType !== 1 || !DomQuery(cur).is(until))) {
    3219             if (cur.nodeType === 1) {
    3220                 matched.push(cur);
    3221             }
    3222 
    3223             cur = cur[prop];
    3224         }
    3225 
    3226         return matched;
    3227     }
    3228 
    3229     function sibling(n, el, siblingName, nodeType) {
    3230         var r = [];
    3231 
    3232         for(; n; n = n[siblingName]) {
    3233             if ((!nodeType || n.nodeType === nodeType) && n !== el) {
    3234                 r.push(n);
    3235             }
    3236         }
    3237 
    3238         return r;
    3239     }
    3240 
    3241     each({
    3242         parent: function(node) {
    3243             var parent = node.parentNode;
    3244 
    3245             return parent && parent.nodeType !== 11 ? parent : null;
    3246         },
    3247 
    3248         parents: function(node) {
    3249             return dir(node, "parentNode");
    3250         },
    3251 
    3252         parentsUntil: function(node, until) {
    3253             return dir(node, "parentNode", until);
    3254         },
    3255 
    3256         next: function(node) {
    3257             return sibling(node, 'nextSibling', 1);
    3258         },
    3259 
    3260         prev: function(node) {
    3261             return sibling(node, 'previousSibling', 1);
    3262         },
    3263 
    3264         nextNodes: function(node) {
    3265             return sibling(node, 'nextSibling');
    3266         },
    3267 
    3268         prevNodes: function(node) {
    3269             return sibling(node, 'previousSibling');
    3270         },
    3271 
    3272         children: function(node) {
    3273             return sibling(node.firstChild, 'nextSibling', 1);
    3274         },
    3275 
    3276         contents: function(node) {
    3277             return toArray((node.nodeName === "iframe" ? node.contentDocument || node.contentWindow.document : node).childNodes);
    3278         }
    3279     }, function(name, fn){
    3280         DomQuery.fn[name] = function(selector) {
    3281             var self = this, result;
    3282 
    3283             if (self.length > 1) {
    3284                 throw new Error("DomQuery only supports traverse functions on a single node.");
    3285             }
    3286 
    3287             if (self[0]) {
    3288                 result = fn(self[0], selector);
    3289             }
    3290 
    3291             result = DomQuery(result);
    3292 
    3293             if (selector && name !== "parentsUntil") {
    3294                 return result.filter(selector);
    3295             }
    3296 
    3297             return result;
    3298         };
    3299     });
    3300 
    3301     DomQuery.fn.filter = function(selector) {
    3302         return DomQuery.filter(selector);
    3303     };
    3304 
    3305     DomQuery.fn.is = function(selector) {
    3306         return !!selector && this.filter(selector).length > 0;
    3307     };
    3308 
    3309     DomQuery.fn.init.prototype = DomQuery.fn;
    3310 
    3311     return DomQuery;
    3312 });
    3313 
    3314 // Included from: js/tinymce/classes/html/Styles.js
    3315 
    3316 /**
    3317  * Styles.js
    3318  *
    3319  * Copyright, Moxiecode Systems AB
    3320  * Released under LGPL License.
    3321  *
    3322  * License: http://www.tinymce.com/license
    3323  * Contributing: http://www.tinymce.com/contributing
    3324  */
    3325 
    3326 /**
    3327  * This class is used to parse CSS styles it also compresses styles to reduce the output size.
    3328  *
    3329  * @example
    3330  * var Styles = new tinymce.html.Styles({
    3331  *    url_converter: function(url) {
    3332  *       return url;
    3333  *    }
    3334  * });
    3335  *
    3336  * styles = Styles.parse('border: 1px solid red');
    3337  * styles.color = 'red';
    3338  *
    3339  * console.log(new tinymce.html.StyleSerializer().serialize(styles));
    3340  *
    3341  * @class tinymce.html.Styles
    3342  * @version 3.4
    3343  */
    3344 define("tinymce/html/Styles", [], function() {
    3345     return function(settings, schema) {
    3346         /*jshint maxlen:255 */
    3347         /*eslint max-len:0 */
    3348         var rgbRegExp = /rgb\s*\(\s*([0-9]+)\s*,\s*([0-9]+)\s*,\s*([0-9]+)\s*\)/gi,
    3349             urlOrStrRegExp = /(?:url(?:(?:\(\s*\"([^\"]+)\"\s*\))|(?:\(\s*\'([^\']+)\'\s*\))|(?:\(\s*([^)\s]+)\s*\))))|(?:\'([^\']+)\')|(?:\"([^\"]+)\")/gi,
    3350             styleRegExp = /\s*([^:]+):\s*([^;]+);?/g,
    3351             trimRightRegExp = /\s+$/,
    3352             undef, i, encodingLookup = {}, encodingItems, validStyles, invalidStyles, invisibleChar = '\uFEFF';
    3353 
    3354         settings = settings || {};
    3355 
    3356         if (schema) {
    3357             validStyles = schema.getValidStyles();
    3358             invalidStyles = schema.getInvalidStyles();
    3359         }
    3360 
    3361         encodingItems = ('\\" \\\' \\; \\: ; : ' + invisibleChar).split(' ');
    3362         for (i = 0; i < encodingItems.length; i++) {
    3363             encodingLookup[encodingItems[i]] = invisibleChar + i;
    3364             encodingLookup[invisibleChar + i] = encodingItems[i];
    3365         }
    3366 
    3367         function toHex(match, r, g, b) {
    3368             function hex(val) {
    3369                 val = parseInt(val, 10).toString(16);
    3370 
    3371                 return val.length > 1 ? val : '0' + val; // 0 -> 00
    3372             }
    3373 
    3374             return '#' + hex(r) + hex(g) + hex(b);
    3375         }
    3376 
    3377         return {
    3378             /**
    3379              * Parses the specified RGB color value and returns a hex version of that color.
    3380              *
    3381              * @method toHex
    3382              * @param {String} color RGB string value like rgb(1,2,3)
    3383              * @return {String} Hex version of that RGB value like #FF00FF.
    3384              */
    3385             toHex: function(color) {
    3386                 return color.replace(rgbRegExp, toHex);
    3387             },
    3388 
    3389             /**
    3390              * Parses the specified style value into an object collection. This parser will also
    3391              * merge and remove any redundant items that browsers might have added. It will also convert non hex
    3392              * colors to hex values. Urls inside the styles will also be converted to absolute/relative based on settings.
    3393              *
    3394              * @method parse
    3395              * @param {String} css Style value to parse for example: border:1px solid red;.
    3396              * @return {Object} Object representation of that style like {border: '1px solid red'}
    3397              */
    3398             parse: function(css) {
    3399                 var styles = {}, matches, name, value, isEncoded, urlConverter = settings.url_converter;
    3400                 var urlConverterScope = settings.url_converter_scope || this;
    3401 
    3402                 function compress(prefix, suffix, noJoin) {
    3403                     var top, right, bottom, left;
    3404 
    3405                     top = styles[prefix + '-top' + suffix];
    3406                     if (!top) {
    3407                         return;
    3408                     }
    3409 
    3410                     right = styles[prefix + '-right' + suffix];
    3411                     if (!right) {
    3412                         return;
    3413                     }
    3414 
    3415                     bottom = styles[prefix + '-bottom' + suffix];
    3416                     if (!bottom) {
    3417                         return;
    3418                     }
    3419 
    3420                     left = styles[prefix + '-left' + suffix];
    3421                     if (!left) {
    3422                         return;
    3423                     }
    3424 
    3425                     var box = [top, right, bottom, left];
    3426                     i = box.length - 1;
    3427                     while (i--) {
    3428                         if (box[i] !== box[i + 1]) {
    3429                             break;
    3430                         }
    3431                     }
    3432 
    3433                     if (i > -1 && noJoin) {
    3434                         return;
    3435                     }
    3436 
    3437                     styles[prefix + suffix] = i == -1 ? box[0] : box.join(' ');
    3438                     delete styles[prefix + '-top' + suffix];
    3439                     delete styles[prefix + '-right' + suffix];
    3440                     delete styles[prefix + '-bottom' + suffix];
    3441                     delete styles[prefix + '-left' + suffix];
    3442                 }
    3443 
    3444                 /**
    3445                  * Checks if the specific style can be compressed in other words if all border-width are equal.
    3446                  */
    3447                 function canCompress(key) {
    3448                     var value = styles[key], i;
    3449 
    3450                     if (!value) {
    3451                         return;
    3452                     }
    3453 
    3454                     value = value.split(' ');
    3455                     i = value.length;
    3456                     while (i--) {
    3457                         if (value[i] !== value[0]) {
    3458                             return false;
    3459                         }
    3460                     }
    3461 
    3462                     styles[key] = value[0];
    3463 
    3464                     return true;
    3465                 }
    3466 
    3467                 /**
    3468                  * Compresses multiple styles into one style.
    3469                  */
    3470                 function compress2(target, a, b, c) {
    3471                     if (!canCompress(a)) {
    3472                         return;
    3473                     }
    3474 
    3475                     if (!canCompress(b)) {
    3476                         return;
    3477                     }
    3478 
    3479                     if (!canCompress(c)) {
    3480                         return;
    3481                     }
    3482 
    3483                     // Compress
    3484                     styles[target] = styles[a] + ' ' + styles[b] + ' ' + styles[c];
    3485                     delete styles[a];
    3486                     delete styles[b];
    3487                     delete styles[c];
    3488                 }
    3489 
    3490                 // Encodes the specified string by replacing all \" \' ; : with _<num>
    3491                 function encode(str) {
    3492                     isEncoded = true;
    3493 
    3494                     return encodingLookup[str];
    3495                 }
    3496 
    3497                 // Decodes the specified string by replacing all _<num> with it's original value \" \' etc
    3498                 // It will also decode the \" \' if keep_slashes is set to fale or omitted
    3499                 function decode(str, keep_slashes) {
    3500                     if (isEncoded) {
    3501                         str = str.replace(/\uFEFF[0-9]/g, function(str) {
    3502                             return encodingLookup[str];
    3503                         });
    3504                     }
    3505 
    3506                     if (!keep_slashes) {
    3507                         str = str.replace(/\\([\'\";:])/g, "$1");
    3508                     }
    3509 
    3510                     return str;
    3511                 }
    3512 
    3513                 function processUrl(match, url, url2, url3, str, str2) {
    3514                     str = str || str2;
    3515 
    3516                     if (str) {
    3517                         str = decode(str);
    3518 
    3519                         // Force strings into single quote format
    3520                         return "'" + str.replace(/\'/g, "\\'") + "'";
    3521                     }
    3522 
    3523                     url = decode(url || url2 || url3);
    3524 
    3525                     if (!settings.allow_script_urls) {
    3526                         var scriptUrl = url.replace(/[\s\r\n]+/, '');
    3527 
    3528                         if (/(java|vb)script:/i.test(scriptUrl)) {
    3529                             return "";
    3530                         }
    3531 
    3532                         if (!settings.allow_svg_data_urls && /^data:image\/svg/i.test(scriptUrl)) {
    3533                             return "";
    3534                         }
    3535                     }
    3536 
    3537                     // Convert the URL to relative/absolute depending on config
    3538                     if (urlConverter) {
    3539                         url = urlConverter.call(urlConverterScope, url, 'style');
    3540                     }
    3541 
    3542                     // Output new URL format
    3543                     return "url('" + url.replace(/\'/g, "\\'") + "')";
    3544                 }
    3545 
    3546                 if (css) {
    3547                     css = css.replace(/[\u0000-\u001F]/g, '');
    3548 
    3549                     // Encode \" \' % and ; and : inside strings so they don't interfere with the style parsing
    3550                     css = css.replace(/\\[\"\';:\uFEFF]/g, encode).replace(/\"[^\"]+\"|\'[^\']+\'/g, function(str) {
    3551                         return str.replace(/[;:]/g, encode);
    3552                     });
    3553 
    3554                     // Parse styles
    3555                     while ((matches = styleRegExp.exec(css))) {
    3556                         name = matches[1].replace(trimRightRegExp, '').toLowerCase();
    3557                         value = matches[2].replace(trimRightRegExp, '');
    3558 
    3559                         // Decode escaped sequences like \65 -> e
    3560                         /*jshint loopfunc:true*/
    3561                         /*eslint no-loop-func:0 */
    3562                         value = value.replace(/\\[0-9a-f]+/g, function(e) {
    3563                             return String.fromCharCode(parseInt(e.substr(1), 16));
    3564                         });
    3565 
    3566                         if (name && value.length > 0) {
    3567                             // Don't allow behavior name or expression/comments within the values
    3568                             if (!settings.allow_script_urls && (name == "behavior" || /expression\s*\(|\/\*|\*\//.test(value))) {
    3569                                 continue;
    3570                             }
    3571 
    3572                             // Opera will produce 700 instead of bold in their style values
    3573                             if (name === 'font-weight' && value === '700') {
    3574                                 value = 'bold';
    3575                             } else if (name === 'color' || name === 'background-color') { // Lowercase colors like RED
    3576                                 value = value.toLowerCase();
    3577                             }
    3578 
    3579                             // Convert RGB colors to HEX
    3580                             value = value.replace(rgbRegExp, toHex);
    3581 
    3582                             // Convert URLs and force them into url('value') format
    3583                             value = value.replace(urlOrStrRegExp, processUrl);
    3584                             styles[name] = isEncoded ? decode(value, true) : value;
    3585                         }
    3586 
    3587                         styleRegExp.lastIndex = matches.index + matches[0].length;
    3588                     }
    3589                     // Compress the styles to reduce it's size for example IE will expand styles
    3590                     compress("border", "", true);
    3591                     compress("border", "-width");
    3592                     compress("border", "-color");
    3593                     compress("border", "-style");
    3594                     compress("padding", "");
    3595                     compress("margin", "");
    3596                     compress2('border', 'border-width', 'border-style', 'border-color');
    3597 
    3598                     // Remove pointless border, IE produces these
    3599                     if (styles.border === 'medium none') {
    3600                         delete styles.border;
    3601                     }
    3602 
    3603                     // IE 11 will produce a border-image: none when getting the style attribute from <p style="border: 1px solid red"></p>
    3604                     // So lets asume it shouldn't be there
    3605                     if (styles['border-image'] === 'none') {
    3606                         delete styles['border-image'];
    3607                     }
    3608                 }
    3609 
    3610                 return styles;
    3611             },
    3612 
    3613             /**
    3614              * Serializes the specified style object into a string.
    3615              *
    3616              * @method serialize
    3617              * @param {Object} styles Object to serialize as string for example: {border: '1px solid red'}
    3618              * @param {String} elementName Optional element name, if specified only the styles that matches the schema will be serialized.
    3619              * @return {String} String representation of the style object for example: border: 1px solid red.
    3620              */
    3621             serialize: function(styles, elementName) {
    3622                 var css = '', name, value;
    3623 
    3624                 function serializeStyles(name) {
    3625                     var styleList, i, l, value;
    3626 
    3627                     styleList = validStyles[name];
    3628                     if (styleList) {
    3629                         for (i = 0, l = styleList.length; i < l; i++) {
    3630                             name = styleList[i];
    3631                             value = styles[name];
    3632 
    3633                             if (value !== undef && value.length > 0) {
    3634                                 css += (css.length > 0 ? ' ' : '') + name + ': ' + value + ';';
    3635                             }
    3636                         }
    3637                     }
    3638                 }
    3639 
    3640                 function isValid(name, elementName) {
    3641                     var styleMap;
    3642 
    3643                     styleMap = invalidStyles['*'];
    3644                     if (styleMap && styleMap[name]) {
    3645                         return false;
    3646                     }
    3647 
    3648                     styleMap = invalidStyles[elementName];
    3649                     if (styleMap && styleMap[name]) {
    3650                         return false;
    3651                     }
    3652 
    3653                     return true;
    3654                 }
    3655 
    3656                 // Serialize styles according to schema
    3657                 if (elementName && validStyles) {
    3658                     // Serialize global styles and element specific styles
    3659                     serializeStyles('*');
    3660                     serializeStyles(elementName);
    3661                 } else {
    3662                     // Output the styles in the order they are inside the object
    3663                     for (name in styles) {
    3664                         value = styles[name];
    3665 
    3666                         if (value !== undef && value.length > 0) {
    3667                             if (!invalidStyles || isValid(name, elementName)) {
    3668                                 css += (css.length > 0 ? ' ' : '') + name + ': ' + value + ';';
    3669                             }
    3670                         }
    3671                     }
    3672                 }
    3673 
    3674                 return css;
    3675             }
    3676         };
    3677     };
    3678 });
    3679 
    3680 // Included from: js/tinymce/classes/dom/TreeWalker.js
    3681 
    3682 /**
    3683  * TreeWalker.js
    3684  *
    3685  * Copyright, Moxiecode Systems AB
    3686  * Released under LGPL License.
    3687  *
    3688  * License: http://www.tinymce.com/license
    3689  * Contributing: http://www.tinymce.com/contributing
    3690  */
    3691 
    3692 /**
    3693  * TreeWalker class enables you to walk the DOM in a linear manner.
    3694  *
    3695  * @class tinymce.dom.TreeWalker
    3696  */
    3697 define("tinymce/dom/TreeWalker", [], function() {
    3698     return function(start_node, root_node) {
    3699         var node = start_node;
    3700 
    3701         function findSibling(node, start_name, sibling_name, shallow) {
    3702             var sibling, parent;
    3703 
    3704             if (node) {
    3705                 // Walk into nodes if it has a start
    3706                 if (!shallow && node[start_name]) {
    3707                     return node[start_name];
    3708                 }
    3709 
    3710                 // Return the sibling if it has one
    3711                 if (node != root_node) {
    3712                     sibling = node[sibling_name];
    3713                     if (sibling) {
    3714                         return sibling;
    3715                     }
    3716 
    3717                     // Walk up the parents to look for siblings
    3718                     for (parent = node.parentNode; parent && parent != root_node; parent = parent.parentNode) {
    3719                         sibling = parent[sibling_name];
    3720                         if (sibling) {
    3721                             return sibling;
    3722                         }
    3723                     }
    3724                 }
    3725             }
    3726         }
    3727 
    3728         /**
    3729          * Returns the current node.
    3730          *
    3731          * @method current
    3732          * @return {Node} Current node where the walker is.
    3733          */
    3734         this.current = function() {
    3735             return node;
    3736         };
    3737 
    3738         /**
    3739          * Walks to the next node in tree.
    3740          *
    3741          * @method next
    3742          * @return {Node} Current node where the walker is after moving to the next node.
    3743          */
    3744         this.next = function(shallow) {
    3745             node = findSibling(node, 'firstChild', 'nextSibling', shallow);
    3746             return node;
    3747         };
    3748 
    3749         /**
    3750          * Walks to the previous node in tree.
    3751          *
    3752          * @method prev
    3753          * @return {Node} Current node where the walker is after moving to the previous node.
    3754          */
    3755         this.prev = function(shallow) {
    3756             node = findSibling(node, 'lastChild', 'previousSibling', shallow);
    3757             return node;
    3758         };
    3759     };
    37602689});
    37612690
     
    38312760     */
    38322761    function toArray(obj) {
    3833         var array = [], i, l;
    3834 
    3835         for (i = 0, l = obj.length; i < l; i++) {
    3836             array[i] = obj[i];
     2762        var array = obj, i, l;
     2763
     2764        if (!isArray(obj)) {
     2765            array = [];
     2766            for (i = 0, l = obj.length; i < l; i++) {
     2767                array[i] = obj[i];
     2768            }
    38372769        }
    38382770
     
    42663198});
    42673199
     3200// Included from: js/tinymce/classes/Env.js
     3201
     3202/**
     3203 * Env.js
     3204 *
     3205 * Copyright, Moxiecode Systems AB
     3206 * Released under LGPL License.
     3207 *
     3208 * License: http://www.tinymce.com/license
     3209 * Contributing: http://www.tinymce.com/contributing
     3210 */
     3211
     3212/**
     3213 * This class contains various environment constants like browser versions etc.
     3214 * Normally you don't want to sniff specific browser versions but sometimes you have
     3215 * to when it's impossible to feature detect. So use this with care.
     3216 *
     3217 * @class tinymce.Env
     3218 * @static
     3219 */
     3220define("tinymce/Env", [], function() {
     3221    var nav = navigator, userAgent = nav.userAgent;
     3222    var opera, webkit, ie, ie11, gecko, mac, iDevice;
     3223
     3224    opera = window.opera && window.opera.buildNumber;
     3225    webkit = /WebKit/.test(userAgent);
     3226    ie = !webkit && !opera && (/MSIE/gi).test(userAgent) && (/Explorer/gi).test(nav.appName);
     3227    ie = ie && /MSIE (\w+)\./.exec(userAgent)[1];
     3228    ie11 = userAgent.indexOf('Trident/') != -1 && (userAgent.indexOf('rv:') != -1 || nav.appName.indexOf('Netscape') != -1) ? 11 : false;
     3229    ie = ie || ie11;
     3230    gecko = !webkit && !ie11 && /Gecko/.test(userAgent);
     3231    mac = userAgent.indexOf('Mac') != -1;
     3232    iDevice = /(iPad|iPhone)/.test(userAgent);
     3233
     3234    // Is a iPad/iPhone and not on iOS5 sniff the WebKit version since older iOS WebKit versions
     3235    // says it has contentEditable support but there is no visible caret.
     3236    var contentEditable = !iDevice || userAgent.match(/AppleWebKit\/(\d*)/)[1] >= 534;
     3237
     3238    return {
     3239        /**
     3240         * Constant that is true if the browser is Opera.
     3241         *
     3242         * @property opera
     3243         * @type Boolean
     3244         * @final
     3245         */
     3246        opera: opera,
     3247
     3248        /**
     3249         * Constant that is true if the browser is WebKit (Safari/Chrome).
     3250         *
     3251         * @property webKit
     3252         * @type Boolean
     3253         * @final
     3254         */
     3255        webkit: webkit,
     3256
     3257        /**
     3258         * Constant that is more than zero if the browser is IE.
     3259         *
     3260         * @property ie
     3261         * @type Boolean
     3262         * @final
     3263         */
     3264        ie: ie,
     3265
     3266        /**
     3267         * Constant that is true if the browser is Gecko.
     3268         *
     3269         * @property gecko
     3270         * @type Boolean
     3271         * @final
     3272         */
     3273        gecko: gecko,
     3274
     3275        /**
     3276         * Constant that is true if the os is Mac OS.
     3277         *
     3278         * @property mac
     3279         * @type Boolean
     3280         * @final
     3281         */
     3282        mac: mac,
     3283
     3284        /**
     3285         * Constant that is true if the os is iOS.
     3286         *
     3287         * @property iOS
     3288         * @type Boolean
     3289         * @final
     3290         */
     3291        iOS: iDevice,
     3292
     3293        /**
     3294         * Constant that is true if the browser supports editing.
     3295         *
     3296         * @property contentEditable
     3297         * @type Boolean
     3298         * @final
     3299         */
     3300        contentEditable: contentEditable,
     3301
     3302        /**
     3303         * Transparent image data url.
     3304         *
     3305         * @property transparentSrc
     3306         * @type Boolean
     3307         * @final
     3308         */
     3309        transparentSrc: "data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7",
     3310
     3311        /**
     3312         * Returns true/false if the browser can or can't place the caret after a inline block like an image.
     3313         *
     3314         * @property noCaretAfter
     3315         * @type Boolean
     3316         * @final
     3317         */
     3318        caretAfter: ie != 8,
     3319
     3320        /**
     3321         * Constant that is true if the browser supports native DOM Ranges. IE 9+.
     3322         *
     3323         * @property range
     3324         * @type Boolean
     3325         */
     3326        range: window.getSelection && "Range" in window,
     3327
     3328        /**
     3329         * Returns the IE document mode for non IE browsers this will fake IE 10.
     3330         *
     3331         * @property documentMode
     3332         * @type Number
     3333         */
     3334        documentMode: ie ? (document.documentMode || 7) : 10
     3335    };
     3336});
     3337
     3338// Included from: js/tinymce/classes/dom/DomQuery.js
     3339
     3340/**
     3341 * DomQuery.js
     3342 *
     3343 * Copyright, Moxiecode Systems AB
     3344 * Released under LGPL License.
     3345 *
     3346 * License: http://www.tinymce.com/license
     3347 * Contributing: http://www.tinymce.com/contributing
     3348 */
     3349
     3350/**
     3351 * This class mimics most of the jQuery API:
     3352 *
     3353 * This is whats currently implemented:
     3354 * - Utility functions
     3355 * - DOM traversial
     3356 * - DOM manipulation
     3357 * - Event binding
     3358 *
     3359 * This is not currently implemented:
     3360 * - Dimension
     3361 * - Ajax
     3362 * - Animation
     3363 * - Advanced chaining
     3364 *
     3365 * @example
     3366 * var $ = tinymce.dom.DomQuery;
     3367 * $('p').attr('attr', 'value').addClass('class');
     3368 *
     3369 * @class tinymce.dom.DomQuery
     3370 */
     3371define("tinymce/dom/DomQuery", [
     3372    "tinymce/dom/EventUtils",
     3373    "tinymce/dom/Sizzle",
     3374    "tinymce/util/Tools",
     3375    "tinymce/Env"
     3376], function(EventUtils, Sizzle, Tools, Env) {
     3377    var doc = document, push = Array.prototype.push, slice = Array.prototype.slice;
     3378    var rquickExpr = /^(?:[^#<]*(<[\w\W]+>)[^>]*$|#([\w\-]*)$)/;
     3379    var Event = EventUtils.Event, undef;
     3380
     3381    function isDefined(obj) {
     3382        return typeof obj !== 'undefined';
     3383    }
     3384
     3385    function isString(obj) {
     3386        return typeof obj === 'string';
     3387    }
     3388
     3389    function createFragment(html, fragDoc) {
     3390        var frag, node, container;
     3391
     3392        fragDoc = fragDoc || doc;
     3393        container = fragDoc.createElement('div');
     3394        frag = fragDoc.createDocumentFragment();
     3395        container.innerHTML = html;
     3396
     3397        while ((node = container.firstChild)) {
     3398            frag.appendChild(node);
     3399        }
     3400
     3401        return frag;
     3402    }
     3403
     3404    function domManipulate(targetNodes, sourceItem, callback, reverse) {
     3405        var i;
     3406
     3407        if (isString(sourceItem)) {
     3408            sourceItem = createFragment(sourceItem, getElementDocument(targetNodes[0]));
     3409        } else if (sourceItem.length && !sourceItem.nodeType) {
     3410            sourceItem = DomQuery.makeArray(sourceItem);
     3411
     3412            if (reverse) {
     3413                for (i = sourceItem.length - 1; i >= 0; i--) {
     3414                    domManipulate(targetNodes, sourceItem[i], callback, reverse);
     3415                }
     3416            } else {
     3417                for (i = 0; i < sourceItem.length; i++) {
     3418                    domManipulate(targetNodes, sourceItem[i], callback, reverse);
     3419                }
     3420            }
     3421
     3422            return targetNodes;
     3423        }
     3424
     3425        if (sourceItem.nodeType) {
     3426            i = targetNodes.length;
     3427            while (i--) {
     3428                callback.call(targetNodes[i], sourceItem);
     3429            }
     3430        }
     3431
     3432        return targetNodes;
     3433    }
     3434
     3435    function hasClass(node, className) {
     3436        return node && className && (' ' + node.className + ' ').indexOf(' ' + className + ' ') !== -1;
     3437    }
     3438
     3439    function wrap(elements, wrapper, all) {
     3440        var lastParent, newWrapper;
     3441
     3442        wrapper = DomQuery(wrapper)[0];
     3443
     3444        elements.each(function() {
     3445            var self = this;
     3446
     3447            if (!all || lastParent != self.parentNode) {
     3448                lastParent = self.parentNode;
     3449                newWrapper = wrapper.cloneNode(false);
     3450                self.parentNode.insertBefore(newWrapper, self);
     3451                newWrapper.appendChild(self);
     3452            } else {
     3453                newWrapper.appendChild(self);
     3454            }
     3455        });
     3456
     3457        return elements;
     3458    }
     3459
     3460    var numericCssMap = Tools.makeMap('fillOpacity fontWeight lineHeight opacity orphans widows zIndex zoom', ' ');
     3461    var booleanMap = Tools.makeMap('checked compact declare defer disabled ismap multiple nohref noshade nowrap readonly selected', ' ');
     3462    var propFix = {
     3463        'for': 'htmlFor',
     3464        'class': 'className',
     3465        'readonly': 'readOnly'
     3466    };
     3467    var cssFix = {
     3468        float: 'cssFloat'
     3469    };
     3470
     3471    var attrHooks = {}, cssHooks = {};
     3472
     3473    function DomQuery(selector, context) {
     3474        /*eslint new-cap:0 */
     3475        return new DomQuery.fn.init(selector, context);
     3476    }
     3477
     3478    function inArray(item, array) {
     3479        var i;
     3480
     3481        if (array.indexOf) {
     3482            return array.indexOf(item);
     3483        }
     3484
     3485        i = array.length;
     3486        while (i--) {
     3487            if (array[i] === item) {
     3488                return i;
     3489            }
     3490        }
     3491
     3492        return -1;
     3493    }
     3494
     3495    var whiteSpaceRegExp = /^\s*|\s*$/g;
     3496
     3497    function trim(str) {
     3498        return (str === null || str === undef) ? '' : ("" + str).replace(whiteSpaceRegExp, '');
     3499    }
     3500
     3501    function each(obj, callback) {
     3502        var length, key, i, undef, value;
     3503
     3504        if (obj) {
     3505            length = obj.length;
     3506
     3507            if (length === undef) {
     3508                // Loop object items
     3509                for (key in obj) {
     3510                    if (obj.hasOwnProperty(key)) {
     3511                        value = obj[key];
     3512                        if (callback.call(value, key, value) === false) {
     3513                            break;
     3514                        }
     3515                    }
     3516                }
     3517            } else {
     3518                // Loop array items
     3519                for (i = 0; i < length; i++) {
     3520                    value = obj[i];
     3521                    if (callback.call(value, i, value) === false) {
     3522                        break;
     3523                    }
     3524                }
     3525            }
     3526        }
     3527
     3528        return obj;
     3529    }
     3530
     3531    function grep(array, callback) {
     3532        var out = [];
     3533
     3534        each(array, function(i, item) {
     3535            if (callback(item, i)) {
     3536                out.push(item);
     3537            }
     3538        });
     3539
     3540        return out;
     3541    }
     3542
     3543    function getElementDocument(element) {
     3544        if (!element) {
     3545            return doc;
     3546        }
     3547
     3548        if (element.nodeType == 9) {
     3549            return element;
     3550        }
     3551
     3552        return element.ownerDocument;
     3553    }
     3554
     3555    DomQuery.fn = DomQuery.prototype = {
     3556        constructor: DomQuery,
     3557
     3558        /**
     3559         * Selector for the current set.
     3560         *
     3561         * @property selector
     3562         * @type String
     3563         */
     3564        selector: "",
     3565
     3566        /**
     3567         * Context used to create the set.
     3568         *
     3569         * @property context
     3570         * @type Element
     3571         */
     3572        context: null,
     3573
     3574        /**
     3575         * Number of items in the current set.
     3576         *
     3577         * @property length
     3578         * @type Number
     3579         */
     3580        length: 0,
     3581
     3582        /**
     3583         * Constructs a new DomQuery instance with the specified selector or context.
     3584         *
     3585         * @constructor
     3586         * @method init
     3587         * @param {String/Array/DomQuery} selector Optional CSS selector/Array or array like object or HTML string.
     3588         * @param {Document/Element} context Optional context to search in.
     3589         */
     3590        init: function(selector, context) {
     3591            var self = this, match, node;
     3592
     3593            if (!selector) {
     3594                return self;
     3595            }
     3596
     3597            if (selector.nodeType) {
     3598                self.context = self[0] = selector;
     3599                self.length = 1;
     3600
     3601                return self;
     3602            }
     3603
     3604            if (context && context.nodeType) {
     3605                self.context = context;
     3606            } else {
     3607                if (context) {
     3608                    return DomQuery(selector).attr(context);
     3609                } else {
     3610                    self.context = context = document;
     3611                }
     3612            }
     3613
     3614            if (isString(selector)) {
     3615                self.selector = selector;
     3616
     3617                if (selector.charAt(0) === "<" && selector.charAt(selector.length - 1) === ">" && selector.length >= 3) {
     3618                    match = [null, selector, null];
     3619                } else {
     3620                    match = rquickExpr.exec(selector);
     3621                }
     3622
     3623                if (match) {
     3624                    if (match[1]) {
     3625                        node = createFragment(selector, getElementDocument(context)).firstChild;
     3626