rich 1.4.2 → 1.4.3
Sign up to get free protection for your applications and to get access to all the features.
- data/lib/rich/version.rb +1 -1
- data/vendor/assets/ckeditor/ckeditor/CHANGES.md +60 -56
- data/vendor/assets/ckeditor/ckeditor/README.md +1 -1
- data/vendor/assets/ckeditor/ckeditor/build-config.js +2 -1
- data/vendor/assets/ckeditor/ckeditor/ckeditor.js +15 -10
- data/vendor/assets/ckeditor/ckeditor/config.js +1 -1
- data/vendor/assets/ckeditor/ckeditor/plugins/autogrow/plugin.js +178 -0
- data/vendor/assets/ckeditor/ckeditor/plugins/autogrow/samples/autogrow.html +99 -0
- data/vendor/assets/ckeditor/ckeditor/plugins/codemirror/css/codemirror.css +10 -9
- data/vendor/assets/ckeditor/ckeditor/plugins/codemirror/js/addon/edit/closetag.js +3 -0
- data/vendor/assets/ckeditor/ckeditor/plugins/codemirror/js/addon/edit/continuecomment.js +2 -0
- data/vendor/assets/ckeditor/ckeditor/plugins/codemirror/js/addon/edit/continuelist.js +1 -0
- data/vendor/assets/ckeditor/ckeditor/plugins/codemirror/js/addon/edit/matchbrackets.js +4 -0
- data/vendor/assets/ckeditor/ckeditor/plugins/codemirror/js/addon/format/formatting.js +5 -0
- data/vendor/assets/ckeditor/ckeditor/plugins/codemirror/js/codemirror.js +168 -160
- data/vendor/assets/ckeditor/ckeditor/plugins/codemirror/js/css.js +3 -3
- data/vendor/assets/ckeditor/ckeditor/plugins/codemirror/js/javascript.js +13 -12
- data/vendor/assets/ckeditor/ckeditor/plugins/codemirror/theme/rubyblue.css +1 -1
- data/vendor/assets/ckeditor/ckeditor/plugins/icons.png +0 -0
- data/vendor/assets/ckeditor/ckeditor/samples/assets/posteddata.php +59 -59
- data/vendor/assets/ckeditor/ckeditor/samples/index.html +3 -0
- data/vendor/assets/ckeditor/ckeditor/samples/plugins/autogrow/autogrow.html +99 -0
- data/vendor/assets/ckeditor/ckeditor/skins/moono/dialog_iequirks.css +1 -1
- data/vendor/assets/ckeditor/ckeditor/skins/moono/icons.png +0 -0
- metadata +10 -2
data/lib/rich/version.rb
CHANGED
@@ -1,56 +1,60 @@
|
|
1
|
-
CKEditor 4 Changelog
|
2
|
-
====================
|
3
|
-
|
4
|
-
## CKEditor 4.0.1
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
*
|
15
|
-
* [#
|
16
|
-
* [#
|
17
|
-
*
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
*
|
22
|
-
* [#
|
23
|
-
* [#
|
24
|
-
* [#
|
25
|
-
* [#
|
26
|
-
* [#
|
27
|
-
* [#
|
28
|
-
* [#
|
29
|
-
* [#
|
30
|
-
* [#
|
31
|
-
* [#
|
32
|
-
* [#
|
33
|
-
* [#
|
34
|
-
* [#
|
35
|
-
* [#
|
36
|
-
* [#
|
37
|
-
* [#
|
38
|
-
* [#
|
39
|
-
* [#
|
40
|
-
* [#
|
41
|
-
* [#
|
42
|
-
* [#
|
43
|
-
* [#
|
44
|
-
* [#
|
45
|
-
* [#
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
the CKEditor 4
|
55
|
-
|
56
|
-
|
1
|
+
CKEditor 4 Changelog
|
2
|
+
====================
|
3
|
+
|
4
|
+
## CKEditor 4.0.1.1
|
5
|
+
|
6
|
+
* Security update: Added protection against XSS attack and possible path disclosure in PHP sample.
|
7
|
+
|
8
|
+
## CKEditor 4.0.1
|
9
|
+
|
10
|
+
Fixed issues:
|
11
|
+
|
12
|
+
* [#9655](http://dev.ckeditor.com/ticket/9655): Support for IE Quirks Mode in new Moono skin.
|
13
|
+
* Accessibility issues (mainly on inline editor): [#9364](http://dev.ckeditor.com/ticket/9364), [#9368](http://dev.ckeditor.com/ticket/9368), [#9369](http://dev.ckeditor.com/ticket/9369), [#9370](http://dev.ckeditor.com/ticket/9370), [#9541](http://dev.ckeditor.com/ticket/9541), [#9543](http://dev.ckeditor.com/ticket/9543), [#9841](http://dev.ckeditor.com/ticket/9841), [#9844](http://dev.ckeditor.com/ticket/9844).
|
14
|
+
* Magic-line:
|
15
|
+
* [#9481](http://dev.ckeditor.com/ticket/9481): Added accessibility support for Magic-line.
|
16
|
+
* [#9509](http://dev.ckeditor.com/ticket/9509): Added Magic-line support for forms.
|
17
|
+
* [#9573](http://dev.ckeditor.com/ticket/9573): Magic-line doesn't disappear on `mouseout` in the specific case.
|
18
|
+
* [#9754](http://dev.ckeditor.com/ticket/9754): [Webkit] Cut & paste simple unformatted text generates inline wrapper in Webkits.
|
19
|
+
* [#9456](http://dev.ckeditor.com/ticket/9456): [Chrome] Properly paste bullet list style from MS-Word.
|
20
|
+
* [#9699](http://dev.ckeditor.com/ticket/9699), [#9758](http://dev.ckeditor.com/ticket/9758): Improved selection locking when selecting by dragging.
|
21
|
+
* Context menu:
|
22
|
+
* [#9712](http://dev.ckeditor.com/ticket/9712): Context menu open destroys editor focus.
|
23
|
+
* [#9366](http://dev.ckeditor.com/ticket/9366): Context menu should be displayed over floating toolbar.
|
24
|
+
* [#9706](http://dev.ckeditor.com/ticket/9706): Context menu generates JS error in inline mode when editor attached to header element.
|
25
|
+
* [#9800](http://dev.ckeditor.com/ticket/9800): Hide float panel when resizing window.
|
26
|
+
* [#9721](http://dev.ckeditor.com/ticket/9721): Padding in content of div based editor puts editing area under bottom UI space.
|
27
|
+
* [#9528](http://dev.ckeditor.com/ticket/9528): Host page's `box-sizing` style shouldn't influence editor UI elements.
|
28
|
+
* [#9503](http://dev.ckeditor.com/ticket/9503): Forms plugin adds context menu listeners only on supported input types. Added support for `tel, email, search` and `url` input types.
|
29
|
+
* [#9769](http://dev.ckeditor.com/ticket/9769): Improved floating toolbar positioning in narrow window.
|
30
|
+
* [#9875](http://dev.ckeditor.com/ticket/9875): Table dialog doesn't populate width correctly.
|
31
|
+
* [#8675](http://dev.ckeditor.com/ticket/8675): Deleting cells in nested table removes outer table cell.
|
32
|
+
* [#9815](http://dev.ckeditor.com/ticket/9815): Can't edit dialog fields on editor initialized in jQuery UI modal dialog.
|
33
|
+
* [#8888](http://dev.ckeditor.com/ticket/8888): CKEditor dialogs do not show completely in small window.
|
34
|
+
* [#9360](http://dev.ckeditor.com/ticket/9360): [Inline editor] Blocks shown for a div stay permanently even after user exists editing the div.
|
35
|
+
* [#9531](http://dev.ckeditor.com/ticket/9531): [Firefox & Inline editor] Toolbar is lost when closing format combo by clicking on its button.
|
36
|
+
* [#9553](http://dev.ckeditor.com/ticket/9553): Table width incorrectly set when `border-width` style is specified.
|
37
|
+
* [#9594](http://dev.ckeditor.com/ticket/9594): Cannot tab past CKEditor when it is in read only mode.
|
38
|
+
* [#9658](http://dev.ckeditor.com/ticket/9658): [IE9] Justify not working on selected image.
|
39
|
+
* [#9686](http://dev.ckeditor.com/ticket/9686): Added missing contents styles for `<pre>`.
|
40
|
+
* [#9709](http://dev.ckeditor.com/ticket/9709): PasteFromWord should not depend on configuration from other styles.
|
41
|
+
* [#9726](http://dev.ckeditor.com/ticket/9726): Removed color dialog dependency from table tools.
|
42
|
+
* [#9765](http://dev.ckeditor.com/ticket/9765): Toolbar Collapse command documented incorrectly on Accessibility Instructions dialog.
|
43
|
+
* [#9771](http://dev.ckeditor.com/ticket/9771): [Webkit & Opera] Fixed scrolling issues when pasting.
|
44
|
+
* [#9787](http://dev.ckeditor.com/ticket/9787): [IE9] onChange isn't fired for checkboxes in dialogs.
|
45
|
+
* [#9842](http://dev.ckeditor.com/ticket/9842): [Firefox 17] When we open toolbar menu for the first time & press down arrow key, focus goes to next toolbar button instead of menu options.
|
46
|
+
* [#9847](http://dev.ckeditor.com/ticket/9847): Elements path shouldn't be initialized on inline editor.
|
47
|
+
* [#9853](http://dev.ckeditor.com/ticket/9853): `Editor#addRemoveFormatFilter` is exposed before it really works.
|
48
|
+
* [#8893](http://dev.ckeditor.com/ticket/8893): Value of `pasteFromWordCleanupFile` config is now taken from instance configuration.
|
49
|
+
* [#9693](http://dev.ckeditor.com/ticket/9693): Removed "live preview" checkbox from UI color picker.
|
50
|
+
|
51
|
+
|
52
|
+
## CKEditor 4.0
|
53
|
+
|
54
|
+
The first stable release of the new CKEditor 4 code line.
|
55
|
+
|
56
|
+
The CKEditor JavaScript API has been kept compatible with CKEditor 4, whenever
|
57
|
+
possible. The list of relevant changes can be found in the [API Changes page of
|
58
|
+
the CKEditor 4 documentation][1].
|
59
|
+
|
60
|
+
[1]: http://docs.ckeditor.com/#!/guide/dev_api_changes "API Changes""
|
@@ -1,7 +1,7 @@
|
|
1
1
|
CKEditor 4
|
2
2
|
==========
|
3
3
|
|
4
|
-
Copyright (c) 2003-
|
4
|
+
Copyright (c) 2003-2013, CKSource - Frederico Knabben. All rights reserved.
|
5
5
|
http://ckeditor.com - See LICENSE.md for license information.
|
6
6
|
|
7
7
|
CKEditor is a text editor to be used inside web pages. It's not a replacement
|
@@ -2,7 +2,7 @@
|
|
2
2
|
Copyright (c) 2003-2013, CKSource - Frederico Knabben. All rights reserved.
|
3
3
|
For licensing, see LICENSE.html or http://ckeditor.com/license
|
4
4
|
*/
|
5
|
-
(function(){if(window.CKEDITOR&&window.CKEDITOR.dom)return;window.CKEDITOR||(window.CKEDITOR=function(){var b={timestamp:"D08E",version:"4.0.1",revision:"
|
5
|
+
(function(){if(window.CKEDITOR&&window.CKEDITOR.dom)return;window.CKEDITOR||(window.CKEDITOR=function(){var b={timestamp:"D08E",version:"4.0.1.1",revision:"270438fe31",rnd:Math.floor(900*Math.random())+100,_:{pending:[]},status:"unloaded",basePath:function(){var a=window.CKEDITOR_BASEPATH||"";if(!a)for(var b=document.getElementsByTagName("script"),d=0;d<b.length;d++){var c=b[d].src.match(/(^|.*[\\\/])ckeditor(?:_basic)?(?:_source)?.js(?:\?.*)?$/i);if(c){a=c[1];break}}-1==a.indexOf(":/")&&(a=0===a.indexOf("/")?location.href.match(/^.*?:\/\/[^\/]*/)[0]+a:location.href.match(/^[^\?]*\/(?:)/)[0]+
|
6
6
|
a);if(!a)throw'The CKEditor installation path could not be automatically detected. Please set the global variable "CKEDITOR_BASEPATH" before creating editor instances.';return a}(),getUrl:function(a){-1==a.indexOf(":/")&&0!==a.indexOf("/")&&(a=this.basePath+a);this.timestamp&&("/"!=a.charAt(a.length-1)&&!/[&?]t=/.test(a))&&(a+=(0<=a.indexOf("?")?"&":"?")+"t="+this.timestamp);return a},domReady:function(){function a(){try{document.addEventListener?(document.removeEventListener("DOMContentLoaded",a,
|
7
7
|
!1),b()):document.attachEvent&&"complete"===document.readyState&&(document.detachEvent("onreadystatechange",a),b())}catch(d){}}function b(){for(var a;a=d.shift();)a()}var d=[];return function(b){d.push(b);"complete"===document.readyState&&setTimeout(a,1);if(1==d.length)if(document.addEventListener)document.addEventListener("DOMContentLoaded",a,!1),window.addEventListener("load",a,!1);else if(document.attachEvent){document.attachEvent("onreadystatechange",a);window.attachEvent("onload",a);b=!1;try{b=
|
8
8
|
!window.frameElement}catch(e){}if(document.documentElement.doScroll&&b){var c=function(){try{document.documentElement.doScroll("left")}catch(b){setTimeout(c,1);return}a()};c()}}}}()},c=window.CKEDITOR_GETURL;if(c){var a=b.url;b.url=function(f){return c.call(b,f)||a.call(b,f)}}return b}());
|
@@ -378,7 +378,8 @@ a[g].$.styleSheet.cssText=a[g].$.styleSheet.cssText+f:a[g].$.innerHTML=a[g].$.in
|
|
378
378
|
(e=this.icons[a+"-rtl"]);e||(e=this.icons[a])}a=c||e&&e.path||"";d=d||e&&e.offset;return a&&"background-image:url("+CKEDITOR.getUrl(a)+");background-position:0 "+d+"px;"}};CKEDITOR.tools.extend(CKEDITOR.editor.prototype,{getUiColor:function(){return this.uiColor},setUiColor:function(a){var b=f(CKEDITOR.document);return(this.setUiColor=function(a){var c=CKEDITOR.skin.chameleon,d=[[h,a]];this.uiColor=a;e([b],c(this,"editor"),d);e(k,c(this,"panel"),d)}).call(this,a)}});var g="cke_ui_color",k=[],h=/\$color/g;
|
379
379
|
CKEDITOR.on("instanceLoaded",function(a){if(!CKEDITOR.env.ie||!CKEDITOR.env.quirks){var b=a.editor,a=function(a){a=(a.data[0]||a.data).element.getElementsByTag("iframe").getItem(0).getFrameDocument();if(!a.getById("cke_ui_color")){a=f(a);k.push(a);var c=b.getUiColor();c&&e([a],CKEDITOR.skin.chameleon(b,"panel"),[[h,c]])}};b.on("panelShow",a);b.on("menuShow",a);b.config.uiColor&&b.setUiColor(b.config.uiColor)}})})();
|
380
380
|
(function(){if(CKEDITOR.env.webkit)CKEDITOR.env.hc=false;else{var b=CKEDITOR.dom.element.createFromHtml('<div style="width:0px;height:0px;position:absolute;left:-10000px;border: 1px solid;border-color: red blue;"></div>',CKEDITOR.document);b.appendTo(CKEDITOR.document.getHead());try{CKEDITOR.env.hc=b.getComputedStyle("border-top-color")==b.getComputedStyle("border-right-color")}catch(c){CKEDITOR.env.hc=false}b.remove()}if(CKEDITOR.env.hc)CKEDITOR.env.cssClass=CKEDITOR.env.cssClass+" cke_hc";CKEDITOR.document.appendStyleText(".cke{visibility:hidden;}");
|
381
|
-
CKEDITOR.status="loaded";CKEDITOR.fireOnce("loaded");if(b=CKEDITOR._.pending){delete CKEDITOR._.pending;for(var a=0;a<b.length;a++){CKEDITOR.editor.prototype.constructor.apply(b[a][0],b[a][1]);CKEDITOR.add(b[a][0])}}})()
|
381
|
+
CKEDITOR.status="loaded";CKEDITOR.fireOnce("loaded");if(b=CKEDITOR._.pending){delete CKEDITOR._.pending;for(var a=0;a<b.length;a++){CKEDITOR.editor.prototype.constructor.apply(b[a][0],b[a][1]);CKEDITOR.add(b[a][0])}}})();
|
382
|
+
/*
|
382
383
|
Copyright (c) 2003-2013, CKSource - Frederico Knabben. All rights reserved.
|
383
384
|
For licensing, see LICENSE.html or http://ckeditor.com/license
|
384
385
|
*/
|
@@ -870,15 +871,19 @@ this.typesCount=0},fireChange:function(){this.hasUndo=!!this.getNextImage(!0);th
|
|
870
871
|
this.editor,b;a.bookmarks&&(c.focus(),b=c.getSelection());this.locked=1;this.editor.loadSnapshot(a.contents);a.bookmarks?b.selectBookmarks(a.bookmarks):CKEDITOR.env.ie&&(c=this.editor.document.getBody().$.createTextRange(),c.collapse(!0),c.select());this.locked=0;this.index=a.index;this.update();this.fireChange()},getNextImage:function(a){var c=this.snapshots,b=this.currentImage,d;if(b)if(a)for(d=this.index-1;0<=d;d--){if(a=c[d],!b.equals(a,!0))return a.index=d,a}else for(d=this.index+1;d<c.length;d++)if(a=
|
871
872
|
c[d],!b.equals(a,!0))return a.index=d,a;return null},redoable:function(){return this.enabled&&this.hasRedo},undoable:function(){return this.enabled&&this.hasUndo},undo:function(){if(this.undoable()){this.save(!0);var a=this.getNextImage(!0);if(a)return this.restoreImage(a),!0}return!1},redo:function(){if(this.redoable()&&(this.save(!0),this.redoable())){var a=this.getNextImage(!1);if(a)return this.restoreImage(a),!0}return!1},update:function(){this.locked||this.snapshots.splice(this.index,1,this.currentImage=
|
872
873
|
new i(this.editor))},lock:function(){if(!this.locked){var a=this.editor.getSnapshot();this.locked={update:this.currentImage&&a==this.currentImage.contents?a:null}}},unlock:function(){if(this.locked){var a=this.locked.update,c=this.editor.getSnapshot();this.locked=null;"string"==typeof a&&c!=a&&this.update()}}}})();CKEDITOR.plugins.add("wsc",{requires:"dialog",init:function(a){a.addCommand("checkspell",new CKEDITOR.dialogCommand("checkspell")).modes={wysiwyg:!CKEDITOR.env.opera&&!CKEDITOR.env.air&&document.domain==window.location.hostname};"undefined"==typeof a.plugins.scayt&&a.ui.addButton&&a.ui.addButton("SpellChecker",{label:a.lang.wsc.toolbar,command:"checkspell",toolbar:"spellchecker,10"});CKEDITOR.dialog.add("checkspell",this.path+"dialogs/wsc.js")}});
|
873
|
-
CKEDITOR.config.wsc_customerId=CKEDITOR.config.wsc_customerId||"1:ua3xw1-2XyGJ3-GWruD3-6OFNT1-oXcuB1-nR6Bp4-hgQHc-EcYng3-sdRXG3-NOfFk";CKEDITOR.config.wsc_customLoaderScript=CKEDITOR.config.wsc_customLoaderScript||null;(function(){CKEDITOR.plugins.add("codemirror",{lang:"af,ar,bg,bn,bs,ca,cs,cy,da,de,el,en-au,en-ca,en-gb,en,eo,es,et,eu,fa,fi,fo,fr-ca,fr,gl,gu,he,hi,hr,hu,is,it,ja,ka,km,ko,ku,lt,lv,mk,mn,ms,nb,nl,no,pl,pt-br,pt,ro,ru,sk,sl,sr-latn,sr,sv,th,tr,ug,uk,vi,zh-cn,zh",init:function(
|
874
|
-
|
875
|
-
|
876
|
-
"
|
877
|
-
|
878
|
-
|
879
|
-
|
874
|
+
CKEDITOR.config.wsc_customerId=CKEDITOR.config.wsc_customerId||"1:ua3xw1-2XyGJ3-GWruD3-6OFNT1-oXcuB1-nR6Bp4-hgQHc-EcYng3-sdRXG3-NOfFk";CKEDITOR.config.wsc_customLoaderScript=CKEDITOR.config.wsc_customLoaderScript||null;(function(){CKEDITOR.plugins.add("codemirror",{lang:"af,ar,bg,bn,bs,ca,cs,cy,da,de,el,en-au,en-ca,en-gb,en,eo,es,et,eu,fa,fi,fo,fr-ca,fr,gl,gu,he,hi,hr,hu,is,it,ja,ka,km,ko,ku,lt,lv,mk,mn,ms,nb,nl,no,pl,pt-br,pt,ro,ru,sk,sl,sr-latn,sr,sv,th,tr,ug,uk,vi,zh-cn,zh",init:function(c){function f(b){function c(){return{from:window["codemirror_"+b.id].getCursor(!0),to:window["codemirror_"+b.id].getCursor(!1)}}var a=b.ui.space("contents").getDocument().createElement("textarea");a.setStyles(CKEDITOR.tools.extend({width:CKEDITOR.env.ie7Compat?
|
875
|
+
"99%":"100%",height:"100%",resize:"none",outline:"none","text-align":"left"},CKEDITOR.tools.cssVendorPrefix("tab-size",b.config.sourceAreaTabSize||4)));var d=[b.lang.editor,b.name].join();a.setAttributes({dir:"ltr",tabIndex:CKEDITOR.env.webkit?-1:b.tabIndex,role:"textbox","aria-label":d});a.addClass("cke_source cke_reset cke_enable_context_menu");b.ui.space("contents").append(a);window["editable_"+b.id]=b.editable(new e(b,a));window["editable_"+b.id].setData(b.getData(1));window["editable_"+b.id].editorID=
|
876
|
+
b.id;b.fire("ariaWidget",this);var f,a=window["editable_"+b.id],g=a.getParent(),d=g.$.clientHeight+"px",g=g.$.clientWidth+"px";codemirror=b.id;window["codemirror_"+b.id]=CodeMirror.fromTextArea(a.$,{mode:"text/html",matchBrackets:!0,workDelay:300,workTime:35,lineNumbers:!0,lineWrapping:!0,theme:h,onKeyEvent:function(b,a){if("keydown"==a.type&&a.ctrlKey&&75==a.keyCode&&!a.shiftKey){var d=c();b.commentRange(!0,d.from,d.to)}else"keydown"==a.type&&a.ctrlKey&&75==a.keyCode&&a.shiftKey?(d=c(),b.commentRange(!1,
|
877
|
+
d.from,d.to)):"keydown"==a.type&&(a.ctrlKey&&70==a.keyCode&&a.shiftKey)&&(d=c(),b.autoFormatRange(d.from,d.to,!1))}});i&&window["codemirror_"+b.id].autoFormatRange({line:0,ch:0},{line:window["codemirror_"+b.id].lineCount(),ch:0},!0);window["codemirror_"+b.id].on("change",function(){clearTimeout(f);f=setTimeout(function(){window["codemirror_"+b.id].save()},300)});window["codemirror_"+b.id].setSize(g,d)}var a=this.path,d=c.config,h=null!=d.codemirror_theme?d.codemirror_theme:"default",i=null!=d.codemirror_autoFormatOnStart?
|
878
|
+
d.codemirror_autoFormatOnStart:!0;CKEDITOR.document.appendStyleSheet(a+"css/codemirror.css");h.length&&"default"!=h&&CKEDITOR.document.appendStyleSheet(a+"theme/"+h+".css");CKEDITOR.scriptLoader.load(a+"js/codemirror.js",function(){CKEDITOR.scriptLoader.load([a+"js/xml.js",a+"js/javascript.js",a+"js/css.js",a+"js/htmlmixed.js",a+"js/addon/format/formatting.js"])});c.elementMode!=CKEDITOR.ELEMENT_MODE_INLINE&&(d=CKEDITOR.plugins.sourcearea,c.addMode("source",function(b){"undefined"==typeof CodeMirror?
|
879
|
+
CKEDITOR.scriptLoader.load([a+"js/codemirror.js",a+"js/xml.js",a+"js/javascript.js",a+"js/css.js",a+"js/htmlmixed.js",a+"js/addon/format/formatting.js"],function(){f(c);b()}):(f(c),b())}),c.addCommand("source",d.commands.source),c.ui.addButton&&c.ui.addButton("Source",{label:c.lang.codemirror.toolbar,command:"source",toolbar:"mode,10"}),c.on("mode",function(){c.getCommand("source").setState("source"==c.mode?CKEDITOR.TRISTATE_ON:CKEDITOR.TRISTATE_OFF)}),c.on("resize",function(){if(window["editable_"+
|
880
|
+
c.id]&&"source"==c.mode){var a=window["editable_"+c.id].getParent();window["codemirror_"+c.id].setSize(a.$.clientWidth+"px",a.$.clientHeight+"px")}}))}});var e=CKEDITOR.tools.createClass({base:CKEDITOR.editable,proto:{setData:function(c){this.setValue(c);this.editor.fire("dataReady")},getData:function(){return this.getValue()},insertHtml:function(){},insertElement:function(){},insertText:function(){},setReadOnly:function(c){this[(c?"set":"remove")+"Attribute"]("readOnly","readonly")},editorID:null,
|
881
|
+
detach:function(){window["codemirror_"+this.editorID].toTextArea();e.baseProto.detach.call(this);this.clearCustomData();this.remove()}}})})();CKEDITOR.plugins.sourcearea={commands:{source:{modes:{wysiwyg:1,source:1},editorFocus:!1,readOnly:1,exec:function(e){"wysiwyg"==e.mode&&e.fire("saveSnapshot");e.getCommand("source").setState(CKEDITOR.TRISTATE_DISABLED);e.setMode("source"==e.mode?"wysiwyg":"source")},canUndo:!1}}};CKEDITOR.plugins.add("iframedialog",{requires:"dialog",onLoad:function(){CKEDITOR.dialog.addIframe=function(e,d,a,j,f,l,g){a={type:"iframe",src:a,width:"100%",height:"100%"};a.onContentLoad="function"==typeof l?l:function(){var a=this.getElement().$.contentWindow;if(a.onDialogEvent){var b=this.getDialog(),c=function(b){return a.onDialogEvent(b)};b.on("ok",c);b.on("cancel",c);b.on("resize",c);b.on("hide",function(a){b.removeListener("ok",c);b.removeListener("cancel",c);b.removeListener("resize",c);
|
880
882
|
a.removeListener()});a.onDialogEvent({name:"load",sender:this,editor:b._.editor})}};var h={title:d,minWidth:j,minHeight:f,contents:[{id:"iframe",label:d,expand:!0,elements:[a]}]},i;for(i in g)h[i]=g[i];this.add(e,function(){return h})};(function(){var e=function(d,a,j){if(!(3>arguments.length)){var f=this._||(this._={}),e=a.onContentLoad&&CKEDITOR.tools.bind(a.onContentLoad,this),g=CKEDITOR.tools.cssLength(a.width),h=CKEDITOR.tools.cssLength(a.height);f.frameId=CKEDITOR.tools.getNextId()+"_iframe";
|
881
883
|
d.on("load",function(){CKEDITOR.document.getById(f.frameId).getParent().setStyles({width:g,height:h})});var i={src:"%2",id:f.frameId,frameborder:0,allowtransparency:!0},k=[];"function"==typeof a.onContentLoad&&(i.onload="CKEDITOR.tools.callFunction(%1);");CKEDITOR.ui.dialog.uiElement.call(this,d,a,k,"iframe",{width:g,height:h},i,"");j.push('<div style="width:'+g+";height:"+h+';" id="'+this.domId+'"></div>');k=k.join("");d.on("show",function(){var b=CKEDITOR.document.getById(f.frameId).getParent(),
|
882
884
|
c=CKEDITOR.tools.addFunction(e),c=k.replace("%1",c).replace("%2",CKEDITOR.tools.htmlEncode(a.src));b.setHtml(c)})}};e.prototype=new CKEDITOR.ui.dialog.uiElement;CKEDITOR.dialog.addUIElement("iframe",{build:function(d,a,j){return new e(d,a,j)}})})()}});(function(){function i(b,h,d){var e=[],g=[],a;for(a=0;a<b.styleSheets.length;a++){var c=b.styleSheets[a];if(!(c.ownerNode||c.owningElement).getAttribute("data-cke-temp")&&!(c.href&&"chrome://"==c.href.substr(0,9)))try{for(var f=c.cssRules||c.rules,c=0;c<f.length;c++)g.push(f[c].selectorText)}catch(i){}}a=g.join(" ");a=a.replace(/(,|>|\+|~)/g," ");a=a.replace(/\[[^\]]*/g,"");a=a.replace(/#[^\s]*/g,"");a=a.replace(/\:{1,2}[^\s]*/g,"");a=a.replace(/\s+/g," ");a=a.split(" ");b=[];for(g=0;g<a.length;g++)f=
|
883
885
|
a[g],d.test(f)&&!h.test(f)&&-1==CKEDITOR.tools.indexOf(b,f)&&b.push(f);for(a=0;a<b.length;a++)d=b[a].split("."),h=d[0].toLowerCase(),d=d[1],e.push({name:h+"."+d,element:h,attributes:{"class":d}});return e}CKEDITOR.plugins.add("stylesheetparser",{onLoad:function(){var b=CKEDITOR.editor.prototype;b.getStylesSet=CKEDITOR.tools.override(b.getStylesSet,function(b){return function(d){var e=this;b.call(this,function(b){d(e._.stylesDefinitions=b.concat(i(e.document.$,e.config.stylesheetParser_skipSelectors||
|
884
|
-
/(^body\.|^\.)/i,e.config.stylesheetParser_validSelectors||/\w+\.\w+/)))})}})}})})();
|
886
|
+
/(^body\.|^\.)/i,e.config.stylesheetParser_validSelectors||/\w+\.\w+/)))})}})}})})();(function(){function h(a){var a=a.document,c=a.getBody(),d=a.getDocumentElement();return"BackCompat"==a.$.compatMode?c:d}var g=function(a){if(a.window){var c=a.getCommand("maximize");if(!(c&&c.state==CKEDITOR.TRISTATE_ON)){var c=h(a),d=a.window.getViewPaneSize().height,b;b=c.getStyle("overflow-y");var f=c.getDocument(),e=CKEDITOR.dom.element.createFromHtml('<span style="margin:0;padding:0;border:0;clear:both;width:1px;height:1px;display:block;">'+(CKEDITOR.env.webkit?" ":"")+"</span>",f);f[CKEDITOR.env.ie?
|
887
|
+
"getBody":"getDocumentElement"]().append(e);f=e.getDocumentPosition(f).y+e.$.offsetHeight;e.remove();c.setStyle("overflow-y",b);b=f+(a.config.autoGrow_bottomSpace||0);e=a.config.autoGrow_maxHeight||Infinity;b=Math.max(b,void 0!=a.config.autoGrow_minHeight?a.config.autoGrow_minHeight:200);b=Math.min(b,e);b!=d&&(b=a.fire("autoGrow",{currentHeight:d,newHeight:b}).newHeight,a.resize(a.container.getStyle("width"),b,!0));c.$.scrollHeight>c.$.clientHeight&&b<e?c.setStyle("overflow-y","hidden"):c.removeStyle("overflow-y")}}};
|
888
|
+
CKEDITOR.plugins.add("autogrow",{init:function(a){if(a.elementMode!=CKEDITOR.ELEMENT_MODE_INLINE)a.on("instanceReady",function(){if(a.editable().isInline())a.ui.space("contents").setStyle("height","auto");else{a.addCommand("autogrow",{exec:g,modes:{wysiwyg:1},readOnly:1,canUndo:!1,editorFocus:!1});var c={contentDom:1,key:1,selectionChange:1,insertElement:1,mode:1},d;for(d in c)a.on(d,function(a){"wysiwyg"==a.editor.mode&&setTimeout(function(){g(a.editor);g(a.editor)},100)});a.on("afterCommandExec",
|
889
|
+
function(b){"maximize"==b.data.name&&"wysiwyg"==b.editor.mode&&(b.data.command.state==CKEDITOR.TRISTATE_ON?h(a).removeStyle("overflow"):g(a))});a.config.autoGrow_onStartup&&a.execCommand("autogrow")}})}})})();CKEDITOR.config.plugins='dialogui,dialog,about,a11yhelp,dialogadvtab,basicstyles,bidi,blockquote,clipboard,button,panelbutton,panel,floatpanel,colorbutton,colordialog,templates,menu,contextmenu,div,resize,toolbar,elementspath,list,indent,enterkey,entities,popup,filebrowser,find,fakeobjects,flash,floatingspace,listblock,richcombo,font,forms,format,htmlwriter,horizontalrule,iframe,wysiwygarea,image,smiley,justify,link,liststyle,magicline,maximize,newpage,pagebreak,pastetext,pastefromword,preview,print,removeformat,save,selectall,showblocks,showborders,sourcearea,specialchar,menubutton,scayt,stylescombo,tab,table,tabletools,undo,wsc,codemirror,iframedialog,stylesheetparser,autogrow';CKEDITOR.config.skin='moono';(function() {var icons = ( 'about,0,bold,32,italic,64,strike,96,subscript,128,superscript,160,underline,192,bidiltr,224,bidirtl,256,blockquote,288,copy-rtl,320,copy,352,cut-rtl,384,cut,416,paste-rtl,448,paste,480,bgcolor,512,textcolor,544,templates-rtl,576,templates,608,creatediv,640,bulletedlist-rtl,672,bulletedlist,704,numberedlist-rtl,736,numberedlist,768,indent-rtl,800,indent,832,outdent-rtl,864,outdent,896,find-rtl,928,find,960,replace,992,flash,1024,button,1056,checkbox,1088,form,1120,hiddenfield,1152,imagebutton,1184,radio,1216,select-rtl,1248,select,1280,textarea-rtl,1312,textarea,1344,textfield-rtl,1376,textfield,1408,horizontalrule,1440,iframe,1472,image,1504,smiley,1536,justifyblock,1568,justifycenter,1600,justifyleft,1632,justifyright,1664,anchor-rtl,1696,anchor,1728,link,1760,unlink,1792,maximize,1824,newpage-rtl,1856,newpage,1888,pagebreak-rtl,1920,pagebreak,1952,pastetext-rtl,1984,pastetext,2016,pastefromword-rtl,2048,pastefromword,2080,preview-rtl,2112,preview,2144,print,2176,removeformat,2208,save,2240,selectall,2272,showblocks-rtl,2304,showblocks,2336,source-rtl,2368,source,2400,specialchar,2432,scayt,2464,table,2496,redo-rtl,2528,redo,2560,undo-rtl,2592,undo,2624,spellchecker,2656' ),path = CKEDITOR.getUrl( 'plugins/icons.png' ),icons = icons.split( ',' );for ( var i = 0; i < icons.length; i++ )CKEDITOR.skin.icons[ icons[ i ] ] = { path: path, offset: -icons[ ++i ] };})();CKEDITOR.lang.languages={"en":1};}());
|
@@ -0,0 +1,178 @@
|
|
1
|
+
/**
|
2
|
+
* @license Copyright (c) 2003-2013, CKSource - Frederico Knabben. All rights reserved.
|
3
|
+
* For licensing, see LICENSE.html or http://ckeditor.com/license
|
4
|
+
*/
|
5
|
+
|
6
|
+
/**
|
7
|
+
* @fileOverview AutoGrow plugin.
|
8
|
+
*/
|
9
|
+
|
10
|
+
(function() {
|
11
|
+
|
12
|
+
// Actual content height, figured out by appending check the last element's document position.
|
13
|
+
function contentHeight( scrollable ) {
|
14
|
+
var overflowY = scrollable.getStyle( 'overflow-y' );
|
15
|
+
|
16
|
+
var doc = scrollable.getDocument();
|
17
|
+
// Create a temporary marker element.
|
18
|
+
var marker = CKEDITOR.dom.element.createFromHtml( '<span style="margin:0;padding:0;border:0;clear:both;width:1px;height:1px;display:block;">' + ( CKEDITOR.env.webkit ? ' ' : '' ) + '</span>', doc );
|
19
|
+
doc[ CKEDITOR.env.ie ? 'getBody' : 'getDocumentElement' ]().append( marker );
|
20
|
+
|
21
|
+
var height = marker.getDocumentPosition( doc ).y + marker.$.offsetHeight;
|
22
|
+
marker.remove();
|
23
|
+
scrollable.setStyle( 'overflow-y', overflowY );
|
24
|
+
return height;
|
25
|
+
}
|
26
|
+
|
27
|
+
function getScrollable( editor ) {
|
28
|
+
var doc = editor.document,
|
29
|
+
body = doc.getBody(),
|
30
|
+
htmlElement = doc.getDocumentElement();
|
31
|
+
|
32
|
+
// Quirks mode overflows body, standards overflows document element
|
33
|
+
return doc.$.compatMode == 'BackCompat' ? body : htmlElement;
|
34
|
+
}
|
35
|
+
|
36
|
+
var resizeEditor = function( editor ) {
|
37
|
+
if ( !editor.window )
|
38
|
+
return;
|
39
|
+
|
40
|
+
var maximize = editor.getCommand( 'maximize' );
|
41
|
+
// Disable autogrow when the editor is maximized .(#6339)
|
42
|
+
if( maximize && maximize.state == CKEDITOR.TRISTATE_ON )
|
43
|
+
return;
|
44
|
+
|
45
|
+
var scrollable = getScrollable( editor ),
|
46
|
+
currentHeight = editor.window.getViewPaneSize().height,
|
47
|
+
newHeight = contentHeight( scrollable );
|
48
|
+
|
49
|
+
// Additional space specified by user.
|
50
|
+
newHeight += ( editor.config.autoGrow_bottomSpace || 0 );
|
51
|
+
|
52
|
+
var min = editor.config.autoGrow_minHeight != undefined ? editor.config.autoGrow_minHeight : 200,
|
53
|
+
max = editor.config.autoGrow_maxHeight || Infinity;
|
54
|
+
|
55
|
+
newHeight = Math.max( newHeight, min );
|
56
|
+
newHeight = Math.min( newHeight, max );
|
57
|
+
|
58
|
+
if ( newHeight != currentHeight ) {
|
59
|
+
newHeight = editor.fire( 'autoGrow', { currentHeight: currentHeight, newHeight: newHeight } ).newHeight;
|
60
|
+
editor.resize( editor.container.getStyle( 'width' ), newHeight, true );
|
61
|
+
}
|
62
|
+
|
63
|
+
if ( scrollable.$.scrollHeight > scrollable.$.clientHeight && newHeight < max )
|
64
|
+
scrollable.setStyle( 'overflow-y', 'hidden' );
|
65
|
+
else
|
66
|
+
scrollable.removeStyle( 'overflow-y' );
|
67
|
+
|
68
|
+
|
69
|
+
};
|
70
|
+
|
71
|
+
CKEDITOR.plugins.add( 'autogrow', {
|
72
|
+
init: function( editor ) {
|
73
|
+
|
74
|
+
// This feature is available only for themed ui instance.
|
75
|
+
if ( editor.elementMode == CKEDITOR.ELEMENT_MODE_INLINE )
|
76
|
+
return;
|
77
|
+
|
78
|
+
editor.on( 'instanceReady', function() {
|
79
|
+
|
80
|
+
var editable = editor.editable();
|
81
|
+
|
82
|
+
// Simply set auto height with div wysiwyg.
|
83
|
+
if ( editable.isInline() )
|
84
|
+
editor.ui.space( 'contents' ).setStyle( 'height', 'auto' );
|
85
|
+
// For framed wysiwyg we need to resize the editor.
|
86
|
+
else
|
87
|
+
{
|
88
|
+
editor.addCommand( 'autogrow', {
|
89
|
+
exec:resizeEditor,
|
90
|
+
modes:{ wysiwyg:1 },
|
91
|
+
readOnly: 1,
|
92
|
+
canUndo: false,
|
93
|
+
editorFocus: false
|
94
|
+
} );
|
95
|
+
|
96
|
+
var eventsList = { contentDom:1,key:1,selectionChange:1,insertElement:1,mode:1 };
|
97
|
+
for ( var eventName in eventsList ) {
|
98
|
+
editor.on( eventName, function( evt ) {
|
99
|
+
// Some time is required for insertHtml, and it gives other events better performance as well.
|
100
|
+
if ( evt.editor.mode == 'wysiwyg' ) {
|
101
|
+
setTimeout( function() {
|
102
|
+
resizeEditor( evt.editor );
|
103
|
+
// Second pass to make correction upon
|
104
|
+
// the first resize, e.g. scrollbar.
|
105
|
+
resizeEditor( evt.editor );
|
106
|
+
}, 100 );
|
107
|
+
}
|
108
|
+
});
|
109
|
+
}
|
110
|
+
|
111
|
+
// Coordinate with the "maximize" plugin. (#9311)
|
112
|
+
editor.on( 'afterCommandExec', function( evt ) {
|
113
|
+
if ( evt.data.name == 'maximize' && evt.editor.mode == 'wysiwyg' ) {
|
114
|
+
if ( evt.data.command.state == CKEDITOR.TRISTATE_ON ) {
|
115
|
+
var scrollable = getScrollable( editor );
|
116
|
+
scrollable.removeStyle( 'overflow' );
|
117
|
+
}
|
118
|
+
else
|
119
|
+
resizeEditor( editor );
|
120
|
+
}
|
121
|
+
});
|
122
|
+
|
123
|
+
editor.config.autoGrow_onStartup && editor.execCommand( 'autogrow' );
|
124
|
+
}
|
125
|
+
});
|
126
|
+
}
|
127
|
+
});
|
128
|
+
})();
|
129
|
+
|
130
|
+
/**
|
131
|
+
* The minimum height that the editor can reach using the AutoGrow feature.
|
132
|
+
*
|
133
|
+
* config.autoGrow_minHeight = 300;
|
134
|
+
*
|
135
|
+
* @since 3.4
|
136
|
+
* @cfg {Number} [autoGrow_minHeight=200]
|
137
|
+
* @member CKEDITOR.config
|
138
|
+
*/
|
139
|
+
|
140
|
+
/**
|
141
|
+
* The maximum height that the editor can reach using the AutoGrow feature. Zero means unlimited.
|
142
|
+
*
|
143
|
+
* config.autoGrow_maxHeight = 400;
|
144
|
+
*
|
145
|
+
* @since 3.4
|
146
|
+
* @cfg {Number} [autoGrow_maxHeight=0]
|
147
|
+
* @member CKEDITOR.config
|
148
|
+
*/
|
149
|
+
|
150
|
+
/**
|
151
|
+
* Whether to have the auto grow happen on editor creation.
|
152
|
+
*
|
153
|
+
* config.autoGrow_onStartup = true;
|
154
|
+
*
|
155
|
+
* @since 3.6.2
|
156
|
+
* @cfg {Boolean} [autoGrow_onStartup=false]
|
157
|
+
* @member CKEDITOR.config
|
158
|
+
*/
|
159
|
+
|
160
|
+
/**
|
161
|
+
* Extra height in pixel to leave between the bottom boundary of content with document size when auto resizing.
|
162
|
+
*
|
163
|
+
* @since 3.6.2
|
164
|
+
* @cfg {Number} [autoGrow_bottomSpace=0]
|
165
|
+
* @member CKEDITOR.config
|
166
|
+
*/
|
167
|
+
|
168
|
+
/**
|
169
|
+
* Fired when the AutoGrow plugin is about to change the size of the editor.
|
170
|
+
*
|
171
|
+
* @event autogrow
|
172
|
+
* @member CKEDITOR.editor
|
173
|
+
* @param {CKEDITOR.editor} editor This editor instance.
|
174
|
+
* @param data
|
175
|
+
* @param {Number} data.currentHeight The current height of the editor (before resizing).
|
176
|
+
* @param {Number} data.newHeight The new height of the editor (after resizing). It can be changed
|
177
|
+
* to determine a different height value to be used instead.
|
178
|
+
*/
|
@@ -0,0 +1,99 @@
|
|
1
|
+
<!DOCTYPE html>
|
2
|
+
<!--
|
3
|
+
Copyright (c) 2003-2013, CKSource - Frederico Knabben. All rights reserved.
|
4
|
+
For licensing, see LICENSE.html or http://ckeditor.com/license
|
5
|
+
-->
|
6
|
+
<html>
|
7
|
+
<head>
|
8
|
+
<title>AutoGrow Plugin — CKEditor Sample</title>
|
9
|
+
<meta charset="utf-8">
|
10
|
+
<script src="../../../ckeditor.js"></script>
|
11
|
+
<link rel="stylesheet" href="../../../samples/sample.css">
|
12
|
+
<meta name="ckeditor-sample-name" content="AutoGrow plugin">
|
13
|
+
<meta name="ckeditor-sample-group" content="Plugins">
|
14
|
+
<meta name="ckeditor-sample-description" content="Using the AutoGrow plugin in order to make the editor grow to fit the size of its content.">
|
15
|
+
</head>
|
16
|
+
<body>
|
17
|
+
<h1 class="samples">
|
18
|
+
<a href="../../../samples/index.html">CKEditor Samples</a> » Using AutoGrow Plugin
|
19
|
+
</h1>
|
20
|
+
<div class="description">
|
21
|
+
<p>
|
22
|
+
This sample shows how to configure CKEditor instances to use the
|
23
|
+
<strong>AutoGrow</strong> (<code>autogrow</code>) plugin that lets the editor window expand
|
24
|
+
and shrink depending on the amount and size of content entered in the editing area.
|
25
|
+
</p>
|
26
|
+
<p>
|
27
|
+
In its default implementation the <strong>AutoGrow feature</strong> can expand the
|
28
|
+
CKEditor window infinitely in order to avoid introducing scrollbars to the editing area.
|
29
|
+
</p>
|
30
|
+
<p>
|
31
|
+
It is also possible to set a maximum height for the editor window. Once CKEditor
|
32
|
+
editing area reaches the value in pixels specified in the
|
33
|
+
<code><a class="samples" href="http://docs.ckeditor.com/#!/api/CKEDITOR.config-cfg-autoGrow_maxHeight">autoGrow_maxHeight</a></code>
|
34
|
+
configuration setting, scrollbars will be added and the editor window will no longer expand.
|
35
|
+
</p>
|
36
|
+
<p>
|
37
|
+
To add a CKEditor instance using the <code>autogrow</code> plugin and its
|
38
|
+
<code>autoGrow_maxHeight</code> attribute, insert the following JavaScript call to your code:
|
39
|
+
</p>
|
40
|
+
<pre class="samples">
|
41
|
+
CKEDITOR.replace( '<em>textarea_id</em>', {
|
42
|
+
<strong>extraPlugins: 'autogrow',</strong>
|
43
|
+
autoGrow_maxHeight: 800,
|
44
|
+
|
45
|
+
// Remove the Resize plugin as it does not make sense to use it in conjunction with the AutoGrow plugin.
|
46
|
+
removePlugins: 'resize'
|
47
|
+
});</pre>
|
48
|
+
<p>
|
49
|
+
Note that <code><em>textarea_id</em></code> in the code above is the <code>id</code> attribute of
|
50
|
+
the <code><textarea></code> element to be replaced with CKEditor. The maximum height should
|
51
|
+
be given in pixels.
|
52
|
+
</p>
|
53
|
+
</div>
|
54
|
+
<form action="../../../samples/sample_posteddata.php" method="post">
|
55
|
+
<p>
|
56
|
+
<label for="editor1">
|
57
|
+
CKEditor using the <code>autogrow</code> plugin with its default configuration:
|
58
|
+
</label>
|
59
|
+
<textarea cols="80" id="editor1" name="editor1" rows="10"><p>This is some <strong>sample text</strong>. You are using <a href="http://ckeditor.com/">CKEditor</a>.</p></textarea>
|
60
|
+
<script>
|
61
|
+
|
62
|
+
CKEDITOR.replace( 'editor1', {
|
63
|
+
extraPlugins: 'autogrow',
|
64
|
+
removePlugins: 'resize'
|
65
|
+
});
|
66
|
+
|
67
|
+
</script>
|
68
|
+
</p>
|
69
|
+
<p>
|
70
|
+
<label for="editor2">
|
71
|
+
CKEditor using the <code>autogrow</code> plugin with maximum height set to 400 pixels:
|
72
|
+
</label>
|
73
|
+
<textarea cols="80" id="editor2" name="editor2" rows="10"><p>This is some <strong>sample text</strong>. You are using <a href="http://ckeditor.com/">CKEditor</a>.</p></textarea>
|
74
|
+
<script>
|
75
|
+
|
76
|
+
CKEDITOR.replace( 'editor2', {
|
77
|
+
extraPlugins: 'autogrow',
|
78
|
+
autoGrow_maxHeight: 400,
|
79
|
+
removePlugins: 'resize'
|
80
|
+
});
|
81
|
+
|
82
|
+
</script>
|
83
|
+
</p>
|
84
|
+
<p>
|
85
|
+
<input type="submit" value="Submit">
|
86
|
+
</p>
|
87
|
+
</form>
|
88
|
+
<div id="footer">
|
89
|
+
<hr>
|
90
|
+
<p>
|
91
|
+
CKEditor - The text editor for the Internet - <a class="samples" href="http://ckeditor.com/">http://ckeditor.com</a>
|
92
|
+
</p>
|
93
|
+
<p id="copy">
|
94
|
+
Copyright © 2003-2013, <a class="samples" href="http://cksource.com/">CKSource</a> - Frederico
|
95
|
+
Knabben. All rights reserved.
|
96
|
+
</p>
|
97
|
+
</div>
|
98
|
+
</body>
|
99
|
+
</html>
|