Sfoglia il codice sorgente

ckeditor 增加保存为base64选项

unknown 5 anni fa
parent
commit
0c2afe815a

+ 1 - 1
o2web/source/o2_core/o2/widget/ImageClipper.js

@@ -439,7 +439,7 @@ o2.widget.HTML5ImageClipper = new Class({
 
 			this.fileNode = new Element("input.file", {
 				"type" : "file",
-				"accept":"images/*",
+				"accept":"image/*",
 				"styles" : {"display":"none"}
 			}).inject(this.container);
 			this.fileNode.addEvent("change", function(event){

+ 131 - 6
o2web/source/o2_lib/htmleditor/ckeditor4114/plugins/iframe/dialogs/iframe.js

@@ -2,9 +2,134 @@
  Copyright (c) 2003-2019, CKSource - Frederico Knabben. All rights reserved.
  For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license
 */
-(function(){function c(b){var c=this instanceof CKEDITOR.ui.dialog.checkbox;b.hasAttribute(this.id)&&(b=b.getAttribute(this.id),c?this.setValue(e[this.id]["true"]==b.toLowerCase()):this.setValue(b))}function d(b){var c=""===this.getValue(),a=this instanceof CKEDITOR.ui.dialog.checkbox,d=this.getValue();c?b.removeAttribute(this.att||this.id):a?b.setAttribute(this.id,e[this.id][d]):b.setAttribute(this.att||this.id,d)}var e={scrolling:{"true":"yes","false":"no"},frameborder:{"true":"1","false":"0"}};
-CKEDITOR.dialog.add("iframe",function(b){var f=b.lang.iframe,a=b.lang.common,e=b.plugins.dialogadvtab;return{title:f.title,minWidth:350,minHeight:260,onShow:function(){this.fakeImage=this.iframeNode=null;var a=this.getSelectedElement();a&&a.data("cke-real-element-type")&&"iframe"==a.data("cke-real-element-type")&&(this.fakeImage=a,this.iframeNode=a=b.restoreRealElement(a),this.setupContent(a))},onOk:function(){var a;a=this.fakeImage?this.iframeNode:new CKEDITOR.dom.element("iframe");var c={},d={};
-this.commitContent(a,c,d);a=b.createFakeElement(a,"cke_iframe","iframe",!0);a.setAttributes(d);a.setStyles(c);this.fakeImage?(a.replace(this.fakeImage),b.getSelection().selectElement(a)):b.insertElement(a)},contents:[{id:"info",label:a.generalTab,accessKey:"I",elements:[{type:"vbox",padding:0,children:[{id:"src",type:"text",label:a.url,required:!0,validate:CKEDITOR.dialog.validate.notEmpty(f.noUrl),setup:c,commit:d}]},{type:"hbox",children:[{id:"width",type:"text",requiredContent:"iframe[width]",
-style:"width:100%",labelLayout:"vertical",label:a.width,validate:CKEDITOR.dialog.validate.htmlLength(a.invalidHtmlLength.replace("%1",a.width)),setup:c,commit:d},{id:"height",type:"text",requiredContent:"iframe[height]",style:"width:100%",labelLayout:"vertical",label:a.height,validate:CKEDITOR.dialog.validate.htmlLength(a.invalidHtmlLength.replace("%1",a.height)),setup:c,commit:d},{id:"align",type:"select",requiredContent:"iframe[align]","default":"",items:[[a.notSet,""],[a.left,"left"],[a.right,
-"right"],[a.alignTop,"top"],[a.alignMiddle,"middle"],[a.alignBottom,"bottom"]],style:"width:100%",labelLayout:"vertical",label:a.align,setup:function(a,b){c.apply(this,arguments);if(b){var d=b.getAttribute("align");this.setValue(d&&d.toLowerCase()||"")}},commit:function(a,b,c){d.apply(this,arguments);this.getValue()&&(c.align=this.getValue())}}]},{type:"hbox",widths:["50%","50%"],children:[{id:"scrolling",type:"checkbox",requiredContent:"iframe[scrolling]",label:f.scrolling,setup:c,commit:d},{id:"frameborder",
-type:"checkbox",requiredContent:"iframe[frameborder]",label:f.border,setup:c,commit:d}]},{type:"hbox",widths:["50%","50%"],children:[{id:"name",type:"text",requiredContent:"iframe[name]",label:a.name,setup:c,commit:d},{id:"title",type:"text",requiredContent:"iframe[title]",label:a.advisoryTitle,setup:c,commit:d}]},{id:"longdesc",type:"text",requiredContent:"iframe[longdesc]",label:a.longDescr,setup:c,commit:d}]},e&&e.createAdvancedTab(b,{id:1,classes:1,styles:1},"iframe")]}})})();
+(function () {
+    function c(b) {
+        var c = this instanceof CKEDITOR.ui.dialog.checkbox;
+        b.hasAttribute(this.id) && (b = b.getAttribute(this.id), c ? this.setValue(e[this.id]["true"] == b.toLowerCase()) : this.setValue(b))
+    }
+
+    function d(b) {
+        var c = "" === this.getValue(), a = this instanceof CKEDITOR.ui.dialog.checkbox, d = this.getValue();
+        c ? b.removeAttribute(this.att || this.id) : a ? b.setAttribute(this.id, e[this.id][d]) : b.setAttribute(this.att || this.id, d)
+    }
+
+    var e = {scrolling: {"true": "yes", "false": "no"}, frameborder: {"true": "1", "false": "0"}};
+    CKEDITOR.dialog.add("iframe", function (b) {
+        var f = b.lang.iframe, a = b.lang.common, e = b.plugins.dialogadvtab;
+        return {
+            title: f.title, minWidth: 350, minHeight: 260, onShow: function () {
+                this.fakeImage = this.iframeNode = null;
+                var a = this.getSelectedElement();
+                a && a.data("cke-real-element-type") && "iframe" == a.data("cke-real-element-type") && (this.fakeImage = a, this.iframeNode = a = b.restoreRealElement(a), this.setupContent(a))
+            }, onOk: function () {
+                var a;
+                a = this.fakeImage ? this.iframeNode : new CKEDITOR.dom.element("iframe");
+                var c = {}, d = {};
+                this.commitContent(a, c, d);
+                a = b.createFakeElement(a, "cke_iframe", "iframe", !0);
+                a.setAttributes(d);
+                a.setStyles(c);
+                this.fakeImage ? (a.replace(this.fakeImage), b.getSelection().selectElement(a)) : b.insertElement(a)
+            }, contents: [{
+                id: "info",
+                label: a.generalTab,
+                accessKey: "I",
+                elements: [{
+                    type: "vbox",
+                    padding: 0,
+                    children: [{
+                        id: "src",
+                        type: "text",
+                        label: a.url,
+                        required: !0,
+                        validate: CKEDITOR.dialog.validate.notEmpty(f.noUrl),
+                        setup: c,
+                        commit: d
+                    }]
+                }, {
+                    type: "hbox", children: [{
+                        id: "width",
+                        type: "text",
+                        requiredContent: "iframe[width]",
+                        style: "width:100%",
+                        labelLayout: "vertical",
+                        label: a.width,
+                        validate: CKEDITOR.dialog.validate.htmlLength(a.invalidHtmlLength.replace("%1", a.width)),
+                        setup: c,
+                        commit: d
+                    }, {
+                        id: "height",
+                        type: "text",
+                        requiredContent: "iframe[height]",
+                        style: "width:100%",
+                        labelLayout: "vertical",
+                        label: a.height,
+                        validate: CKEDITOR.dialog.validate.htmlLength(a.invalidHtmlLength.replace("%1", a.height)),
+                        setup: c,
+                        commit: d
+                    }, {
+                        id: "align",
+                        type: "select",
+                        requiredContent: "iframe[align]",
+                        "default": "",
+                        items: [[a.notSet, ""], [a.left, "left"], [a.right,
+                            "right"], [a.alignTop, "top"], [a.alignMiddle, "middle"], [a.alignBottom, "bottom"]],
+                        style: "width:100%",
+                        labelLayout: "vertical",
+                        label: a.align,
+                        setup: function (a, b) {
+                            c.apply(this, arguments);
+                            if (b) {
+                                var d = b.getAttribute("align");
+                                this.setValue(d && d.toLowerCase() || "")
+                            }
+                        },
+                        commit: function (a, b, c) {
+                            d.apply(this, arguments);
+                            this.getValue() && (c.align = this.getValue())
+                        }
+                    }]
+                }, {
+                    type: "hbox",
+                    widths: ["50%", "50%"],
+                    children: [{
+                        id: "scrolling",
+                        type: "checkbox",
+                        requiredContent: "iframe[scrolling]",
+                        label: f.scrolling,
+                        setup: c,
+                        commit: d
+                    }, {
+                        id: "frameborder",
+                        type: "checkbox", requiredContent: "iframe[frameborder]", label: f.border, setup: c, commit: d
+                    }]
+                }, {
+                    type: "hbox",
+                    widths: ["50%", "50%"],
+                    children: [{
+                        id: "name",
+                        type: "text",
+                        requiredContent: "iframe[name]",
+                        label: a.name,
+                        setup: c,
+                        commit: d
+                    }, {
+                        id: "title",
+                        type: "text",
+                        requiredContent: "iframe[title]",
+                        label: a.advisoryTitle,
+                        setup: c,
+                        commit: d
+                    }]
+                }, {
+                    id: "longdesc",
+                    type: "text",
+                    requiredContent: "iframe[longdesc]",
+                    label: a.longDescr,
+                    setup: c,
+                    commit: d
+                }]
+            }, e && e.createAdvancedTab(b, {id: 1, classes: 1, styles: 1}, "iframe")]
+        }
+    })
+})();

+ 75 - 20
o2web/source/o2_lib/htmleditor/ckeditor4114/plugins/image/dialogs/image.js

@@ -3,6 +3,20 @@
  For licensing, see LICENSE.md or http://ckeditor.com/license
  */
 (function () {
+    function setupCheckbox(b) {
+        debugger;
+        var c = this instanceof CKEDITOR.ui.dialog.checkbox;
+        b.hasAttribute(this.id) && (b = b.getAttribute(this.id), c ? this.setValue(checboxOptions[this.id]["true"] == b.toLowerCase()) : this.setValue(b))
+    }
+
+    function commitCheckbox(b) {
+        return true;
+        // var c = "" === this.getValue(), a = this instanceof CKEDITOR.ui.dialog.checkbox, d = this.getValue();
+        // c ? b.removeAttribute(this.att || this.id) : a ? b.setAttribute(this.id, checboxOptions[this.id][d]) : b.setAttribute(this.att || this.id, d)
+    }
+
+    var checboxOptions = {base64enable: {"true": "yes", "false": "no"}};
+
     var v = function (d, l) {
         function v() {
             var a = arguments, b = this.getContentElement("advanced", "txtdlgGenStyle");
@@ -221,25 +235,55 @@
                         onClick: function (e) {
                             //var fileNode = document.getElementById("fckLocalFileUpload");
                             //fileNode.click();
-                            MWF.require("MWF.widget.Upload", function(){
-                                var action =  new MWF.xDesktop.Actions.RestActions("/xDesktop/Actions/action.json", "x_file_assemble_control");
-                                var dialogElement = CKEDITOR.currentImageDialog._.element.$;
-                                var contentElement = dialogElement.getElement(".cke_dialog_body").getParent();
-                                var upload = new MWF.widget.Upload(contentElement, {
-                                    "data": null,
-                                    "parameter": {"reference" : d.config.reference, "referencetype": d.config.referenceType, "scale" : 800 },
-                                    "action": action,
-                                    "method": "uploadImageByScale",
-                                    "onEvery": function(json){
-                                        var id = json.data ? json.data.id : json.id;
-                                        var src = MWF.xDesktop.getImageSrc( id );
-                                        MWF.xDesktop.uploadedImageId = id;
-                                        var txtUrlElement = CKEDITOR.currentImageDialog.getContentElement("info", "txtUrl");
-                                        txtUrlElement.setValue( src );
-                                    }.bind(this)
-                                });
-                                upload.load();
-                            }.bind(this));
+                            var base64enable = CKEDITOR.currentImageDialog.getContentElement("info", "base64enable");
+                            if( base64enable && base64enable.getValue() ){
+                                var fileNode = document.getElementById("fckLocalFileUpload");
+                                if( !fileNode ){
+                                    fileNode = new Element("input", {
+                                        "id" : "fckLocalFileUpload",
+                                        "type" : "file",
+                                        "accept":"image/*",
+                                        "styles" : {"display":"none"}
+                                    }).inject(document.body);
+                                    fileNode.addEvent("change", function(event){
+                                        var file= fileNode.files[0];
+                                        if(!/image\/\w+/.test(file.type)){           //判断获取的是否为图片文件
+                                            MWF.xDesktop.notice("请确保文件为图像文件","error");
+                                            return false;
+                                        }
+                                        var reader=new FileReader();
+                                        reader.readAsDataURL(file);
+                                        reader.onload = function(e){
+                                            var txtUrlElement = CKEDITOR.currentImageDialog.getContentElement("info", "txtUrl");
+                                            txtUrlElement.setValue( this.result );
+                                        }
+
+                                    }.bind( this ));
+                                    fileNode.click();
+                                }else{
+                                    fileNode.click();
+                                }
+                            }else{
+                                MWF.require("MWF.widget.Upload", function(){
+                                    var action =  new MWF.xDesktop.Actions.RestActions("/xDesktop/Actions/action.json", "x_file_assemble_control");
+                                    var dialogElement = CKEDITOR.currentImageDialog._.element.$;
+                                    var contentElement = dialogElement.getElement(".cke_dialog_body").getParent();
+                                    var upload = new MWF.widget.Upload(contentElement, {
+                                        "data": null,
+                                        "parameter": {"reference" : d.config.reference, "referencetype": d.config.referenceType, "scale" : 800 },
+                                        "action": action,
+                                        "method": "uploadImageByScale",
+                                        "onEvery": function(json){
+                                            var id = json.data ? json.data.id : json.id;
+                                            var src = MWF.xDesktop.getImageSrc( id );
+                                            MWF.xDesktop.uploadedImageId = id;
+                                            var txtUrlElement = CKEDITOR.currentImageDialog.getContentElement("info", "txtUrl");
+                                            txtUrlElement.setValue( src );
+                                        }.bind(this)
+                                    });
+                                    upload.load();
+                                }.bind(this));
+                            }
                         },
                         onLoad: function () {
                             //var fileNode = document.getElementById("fckLocalFileUpload");
@@ -307,7 +351,18 @@
                             });
                         }
                     }]
-                },  {
+                }, {
+                    type: "hbox",
+                    widths: ["100%"],
+                    children: [{
+                        id: "base64enable",
+                        type: "checkbox",
+                        requiredContent: "img{src}",
+                        label: "存为Base64编码",
+                        setup: setupCheckbox,
+                        commit: commitCheckbox
+                    }]
+                }, {
                     id: "txtAlt",
                     type: "text",
                     label: d.lang.image.alt,