rich 1.4.2 → 1.4.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- 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>
|