123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218 |
- /*!
- * Image (upload) dialog plugin for Editor.md
- *
- * @file image-dialog.js
- * @author pandao
- * @version 1.3.4
- * @updateTime 2015-06-09
- * {@link https://github.com/pandao/editor.md}
- * @license MIT
- */
- (function() {
- var factory = function (exports) {
- var pluginName = "image-dialog";
- exports.fn.imageDialog = function() {
- var _this = this;
- var cm = this.cm;
- var lang = this.lang;
- var editor = this.editor;
- var settings = this.settings;
- var cursor = cm.getCursor();
- var selection = cm.getSelection();
- var imageLang = lang.dialog.image;
- var classPrefix = this.classPrefix;
- var iframeName = classPrefix + "image-iframe";
- var dialogName = classPrefix + pluginName, dialog;
- cm.focus();
- var loading = function(show) {
- var _loading = dialog.find("." + classPrefix + "dialog-mask");
- _loading[(show) ? "show" : "hide"]();
- };
- if (editor.find("." + dialogName).length < 1)
- {
- var guid = (new Date).getTime();
- var action = settings.imageUploadURL + (settings.imageUploadURL.indexOf("?") >= 0 ? "&" : "?") + "guid=" + guid;
- if (settings.crossDomainUpload)
- {
- action += "&callback=" + settings.uploadCallbackURL + "&dialog_id=editormd-image-dialog-" + guid;
- }
- var dialogContent = ( (settings.imageUpload) ? "<form action=\"" + action +"\" target=\"" + iframeName + "\" method=\"post\" enctype=\"multipart/form-data\" class=\"" + classPrefix + "form\">" : "<div class=\"" + classPrefix + "form\">" ) +
- ( (settings.imageUpload) ? "<iframe name=\"" + iframeName + "\" id=\"" + iframeName + "\" guid=\"" + guid + "\"></iframe>" : "" ) +
- "<label>" + imageLang.url + "</label>" +
- "<input type=\"text\" data-url />" + (function(){
- return (settings.imageUpload) ? "<div class=\"" + classPrefix + "file-input\">" +
- "<input type=\"file\" name=\"" + classPrefix + "image-file\" accept=\"image/*\" />" +
- "<input type=\"submit\" value=\"" + imageLang.uploadButton + "\" />" +
- "</div>" : "";
- })() +
- "<br/>" +
- "<label>" + imageLang.alt + "</label>" +
- "<input type=\"text\" value=\"" + selection + "\" data-alt />" +
- "<br/>" +
- "<label>" + imageLang.link + "</label>" +
- "<input type=\"text\" value=\"http://\" data-link />" +
- "<br/>" +
- ( (settings.imageUpload) ? "</form>" : "</div>");
- //var imageFooterHTML = "<button class=\"" + classPrefix + "btn " + classPrefix + "image-manager-btn\" style=\"float:left;\">" + imageLang.managerButton + "</button>";
- dialog = this.createDialog({
- title : imageLang.title,
- width : (settings.imageUpload) ? 465 : 380,
- height : 254,
- name : dialogName,
- content : dialogContent,
- mask : settings.dialogShowMask,
- drag : settings.dialogDraggable,
- lockScreen : settings.dialogLockScreen,
- maskStyle : {
- opacity : settings.dialogMaskOpacity,
- backgroundColor : settings.dialogMaskBgColor
- },
- buttons : {
- enter : [lang.buttons.enter, function() {
- var url = this.find("[data-url]").val();
- var alt = this.find("[data-alt]").val();
- var link = this.find("[data-link]").val();
- if (url === "")
- {
- alert(imageLang.imageURLEmpty);
- return false;
- }
- var altAttr = (alt !== "") ? " \"" + alt + "\"" : "";
- if (link === "" || link === "http://")
- {
- cm.replaceSelection("![" + alt + "](" + url + altAttr + ")");
- }
- else
- {
- cm.replaceSelection("[![" + alt + "](" + url + altAttr + ")](" + link + altAttr + ")");
- }
- if (alt === "") {
- cm.setCursor(cursor.line, cursor.ch + 2);
- }
- this.hide().lockScreen(false).hideMask();
- return false;
- }],
- cancel : [lang.buttons.cancel, function() {
- this.hide().lockScreen(false).hideMask();
- return false;
- }]
- }
- });
- dialog.attr("id", classPrefix + "image-dialog-" + guid);
- if (!settings.imageUpload) {
- return ;
- }
- var fileInput = dialog.find("[name=\"" + classPrefix + "image-file\"]");
- fileInput.bind("change", function() {
- var fileName = fileInput.val();
- var isImage = new RegExp("(\\.(" + settings.imageFormats.join("|") + "))$"); // /(\.(webp|jpg|jpeg|gif|bmp|png))$/
- if (fileName === "")
- {
- alert(imageLang.uploadFileEmpty);
-
- return false;
- }
-
- if (!isImage.test(fileName))
- {
- alert(imageLang.formatNotAllowed + settings.imageFormats.join(", "));
-
- return false;
- }
- loading(true);
- var submitHandler = function() {
- var uploadIframe = document.getElementById(iframeName);
- uploadIframe.onload = function() {
-
- loading(false);
- var body = (uploadIframe.contentWindow ? uploadIframe.contentWindow : uploadIframe.contentDocument).document.body;
- var json = (body.innerText) ? body.innerText : ( (body.textContent) ? body.textContent : null);
- json = (typeof JSON.parse !== "undefined") ? JSON.parse(json) : eval("(" + json + ")");
- if (json.success === 1)
- {
- dialog.find("[data-url]").val(json.url);
- }
- else
- {
- alert(json.message);
- }
- return false;
- };
- };
- dialog.find("[type=\"submit\"]").bind("click", submitHandler).trigger("click");
- });
- }
- dialog = editor.find("." + dialogName);
- dialog.find("[type=\"text\"]").val("");
- dialog.find("[type=\"file\"]").val("");
- dialog.find("[data-link]").val("http://");
- this.dialogShowMask(dialog);
- this.dialogLockScreen();
- dialog.show();
- };
- };
- // CommonJS/Node.js
- if (typeof require === "function" && typeof exports === "object" && typeof module === "object")
- {
- module.exports = factory;
- }
- else if (typeof define === "function") // AMD/CMD/Sea.js
- {
- if (define.amd) { // for Require.js
- define(["editormd"], function(editormd) {
- factory(editormd);
- });
- } else { // for Sea.js
- define(function(require) {
- var editormd = require("./../../editormd");
- factory(editormd);
- });
- }
- }
- else
- {
- factory(window.editormd);
- }
- })();
|