-
-
Save arsalanshah/10623688 to your computer and use it in GitHub Desktop.
| /** | |
| * Buddyexpress Desk | |
| * | |
| * @package Bdesk | |
| * @author Buddyexpress Core Team <[email protected] | |
| * @copyright 2014 BUDDYEXPRESS NETWORKS. | |
| * @license Buddyexpress Public License http://www.buddyexpress.net/Licences/bpl/ | |
| * @link http://labs.buddyexpress.net/bdesk.b | |
| */ | |
| tinymce.PluginManager.add("bdesk_photo", function (editor, f) { | |
| /** | |
| * Setup buttons for Bdesk Editor | |
| * @lastchange: $arsalanshah | |
| */ | |
| editor.addButton("bdesk_photo", { | |
| icon: 'image', | |
| title: 'Image Embed Upload', | |
| cmd: "bdesk_photo" | |
| }); | |
| /** | |
| * Init the plugin | |
| * @lastchange $arsalanshah | |
| */ | |
| editor.addCommand("bdesk_photo", function () { | |
| editor.windowManager.open({ | |
| //text for dialog | |
| title: "Embed a image", | |
| width: 450, | |
| //location: | |
| height: 80, | |
| //we need a to put a base64 encode image into texteditor | |
| html: '<input type="file" class="input" name="bdesk_image" id="image_embed" style="font-size:14px;padding:30px;" accept="image/x-png, image/gif, image/jpeg"/>', | |
| buttons: [{ | |
| text: "Insert", | |
| subtype: "primary", | |
| /** | |
| * Triger a OnClick | |
| * @lastchange: $arsalanshah | |
| */ | |
| onclick: function () { | |
| if (window.File && window.FileReader && window.FileList && window.Blob) { | |
| var imagefile = document.getElementsByName("bdesk_image")[0].files; | |
| var class_filereader = new FileReader(); | |
| for (var i = 0, f; f = imagefile[i]; i++) { | |
| var filesiz = f.size; | |
| } | |
| if(filesiz > 512000){ | |
| //alert("The image is big in size. The image must be 500KB or less."); | |
| //(this).parent().parent().close(); | |
| } | |
| class_filereader.onload = function (base64) { | |
| imgData = base64.target.result; | |
| var img = new Image(); | |
| img.src = imgData; | |
| editor.execCommand("mceInsertContent", false, "<img src='" + imgData + "' />"); | |
| }; | |
| /** | |
| * Log errors | |
| * @lastchange: $arsalanshah | |
| */ | |
| class_filereader.onerror = function (err) { | |
| console.log("error", err); | |
| console.log(err.getMessage()); | |
| }; | |
| if (imagefile.length > 0) { | |
| class_filereader.readAsDataURL(imagefile[0]); | |
| } | |
| else { | |
| alert("No File selected"); | |
| }} | |
| else { | |
| alert("Please change your browser to modern one"); | |
| } | |
| (this).parent().parent().close(); | |
| }}, | |
| { | |
| text: "Close", | |
| onclick: function () { | |
| (this).parent().parent().close(); | |
| } | |
| }], | |
| }); | |
| }); | |
| /** | |
| * Setup Insert buttons for Bdesk Editor Dialog | |
| * @lastchange: $arsalanshah | |
| */ | |
| editor.addMenuItem("bdesk_photo", { | |
| cmd: "bdesk_photo", | |
| context: "insert", | |
| text: 'Embed Image', | |
| icon: 'image', | |
| }); | |
| }); |
tinymce was stripping the base64 node, so nothing was being inserted. . If you are experiencing this problem make the following modifications.
1- The insertContent command parses the node and deletes the content. Even mceInsertRawHTML doesn't work because it has the raw parameter turned off, so we need a new command.
After the addButton sentence add the following command to tinymce.
//---------------------------
editor.addCommand("trueInsertRawHTML", function (value) {
this.selection.setContent('tiny_mce_marker');
editor.setContent(
editor.getContent().replace(/tiny_mce_marker/g, function () {
return value;
}), { format: "raw" }
);
});
//-------------------
2- Replace this line:
editor.execCommand("mceInsertContent", false, "");
With:
editor.execCommand("trueInsertRawHTML", "");
Hope this helps the next customer...
Thank you for your help. I had the same issue, and this resolution work fine.
Thank you very much :)
FYI - changing this line:
editor.execCommand("mceInsertContent", false, "<img src='" + imgData + "' />");
to:
editor.execCommand("mceInsertContent", false, "<img src='" + escape(imgData) + "' />");
fixes problems when the image data encodes to contain javascript control characters.