diff --git a/COPYRIGHT.txt b/COPYRIGHT.txt index 1d0d752..9d49c97 100644 --- a/COPYRIGHT.txt +++ b/COPYRIGHT.txt @@ -42,8 +42,6 @@ license, including: Password Compat - (c) Anthony Ferrara - jQuery.AjaxFileUpload.js - (c) Jordan Feldstein - URLify for PHP by jbroadway based on URLify.js - (c) Django Software Foundation and individual contributors Twenty Fifteen & Twenty Sixteen theme - (c) WordPress.org & Automattic.com diff --git a/system/admin/editor/js/Markdown.Editor.js b/system/admin/editor/js/Markdown.Editor.js index 6e8faf1..67d8de7 100644 --- a/system/admin/editor/js/Markdown.Editor.js +++ b/system/admin/editor/js/Markdown.Editor.js @@ -74,6 +74,23 @@ var imageDefaultText = "http://"; var linkDefaultText = "http://"; + //Polyfill for node.remove() from MDN + // from:https://github.com/jserz/js_piece/blob/master/DOM/ChildNode/remove()/remove().md + (function (arr) { + arr.forEach(function (item) { + if (item.hasOwnProperty('remove')) { + return; + } + Object.defineProperty(item, 'remove', { + configurable: true, + enumerable: true, + writable: true, + value: function remove() { + this.parentNode.removeChild(this); + } + }); + }); + })([Element.prototype, CharacterData.prototype, DocumentType.prototype]); // ------------------------------------------------------------------- // END OF YOUR CHANGES // ------------------------------------------------------------------- @@ -1757,7 +1774,7 @@ // Marks up the link and adds the ref. var linkEnteredCallback = function (link) { - background.parentNode.removeChild(background); + background.remove(); if (link !== null) { // ( $1 diff --git a/system/admin/editor/js/editor.js b/system/admin/editor/js/editor.js index 203d360..d4560e6 100644 --- a/system/admin/editor/js/editor.js +++ b/system/admin/editor/js/editor.js @@ -1,67 +1,69 @@ (function () { - var converter = new Markdown.Converter(); Markdown.Extra.init(converter); var editor = new Markdown.Editor(converter); - var $dialog = $('#insertImageDialog').dialog({ - autoOpen: false, - closeOnEscape: false, - open: function(event, ui) { $(".ui-dialog-titlebar-close").hide(); } + //======Image Uploader===== + var callbackFunc; + var dialogClose = function() { + $('#insertImageDialog').modal('hide'); + $('#insertImageDialogURL').val(''); + $('#insertImageDialogFile').val(''); + }; + $('#insertImageDialogInsert').click( function() { + callbackFunc( $('#insertImageDialogURL').val().length > 0 ? $('#insertImageDialogURL').val() : null ); + dialogClose(); }); - - var $url = $('input[type=text]', $dialog); - var $file = $('input[type=file]', $dialog); - - editor.hooks.set('insertImageDialog', function(callback) { - - var dialogClose = function() { - $url.val(''); - $file.val(''); - $dialog.dialog('close'); - }; - - $dialog.dialog({ - buttons : { - "Insert" : { - text: "Insert", - id: "insert", - click: function(){ - callback($url.val().length > 0 ? $url.val(): null); - dialogClose(); - } - }, - "Cancel" : { - text: "Cancel", - id: "cancel", - click: function(){ - dialogClose(); - callback(null); - } - } - } - }); - - var uploadComplete = function(response) { - if (response.error == '0') { - $url.val(base_path + response.path); - $("#insert").trigger('click'); - } else { - alert(response.error); - $file.val(''); + $('#insertImageDialogClose').click( function() { + callbackFunc(null); + dialogClose(); + }); + $('#insertImageDialogCancel').click( function() { + callbackFunc(null); + dialogClose(); + }); + $('#insertImageDialogFile').on('input', function(){ + var file = $("#insertImageDialogFile").prop("files"); + var formData = new FormData(); + formData.append('file', file[0], file[0].name); + // Set up the request. + $.ajax({ + type: "POST", + url: base_path + 'upload.php', + data: formData, + processData: false, + contentType: false, + success: function (response) { + if (response.error == '0') + { + callbackFunc(base_path + response.path); + dialogClose(); + } + else + { + if (response.error !== '') alert(response.error); + else alert("An unknown error has occurred"); + console.error("Bad Response"); + console.error(response); + $('#insertImageDialogFile').val(''); + } + }, + failure: function (response) { + if (response.error !== '') alert(response.error); + else alert("An unknown error has occurred"); + console.error("Unable to Upload"); + console.error(response); + $('#insertImageDialogFile').val(''); } - }; - - $file.ajaxfileupload({ - 'action': base_path + 'upload.php', - 'onComplete': uploadComplete, - }); - - $dialog.dialog('open'); + });//ajax + });//oninput + editor.hooks.set('insertImageDialog', function(callback) { + $('#insertImageDialog').modal('show'); + callbackFunc = callback; return true; // tell the editor that we'll take care of getting the image url }); - + //=====end image uploader===== editor.run(); })(); \ No newline at end of file diff --git a/system/admin/editor/js/jquery.ajaxfileupload.js b/system/admin/editor/js/jquery.ajaxfileupload.js deleted file mode 100644 index cab9b01..0000000 --- a/system/admin/editor/js/jquery.ajaxfileupload.js +++ /dev/null @@ -1,165 +0,0 @@ -/* -// jQuery Ajax File Uploader -// -// @author: Jordan Feldstein -// -// - Ajaxifies an individual -// - Files are sandboxed. Doesn't matter how many, or where they are, on the page. -// - Allows for extra parameters to be included with the file -// - onStart callback can cancel the upload by returning false -*/ - - -(function($) { - $.fn.ajaxfileupload = function(options) { - var settings = { - params: {}, - action: '', - onStart: function() { }, - onComplete: function(response) { }, - onCancel: function() { }, - validate_extensions : true, - valid_extensions : ['gif','png','jpg','jpeg'], - submit_button : null - }; - - var uploading_file = false; - - if ( options ) { - $.extend( settings, options ); - } - - - // 'this' is a jQuery collection of one or more (hopefully) - // file elements, but doesn't check for this yet - return this.each(function() { - var $element = $(this); - - // Skip elements that are already setup. May replace this - // with uninit() later, to allow updating that settings - if($element.data('ajaxUploader-setup') === true) return; - - $element.change(function() - { - // since a new image was selected, reset the marker - uploading_file = false; - - // only update the file from here if we haven't assigned a submit button - if (settings.submit_button == null) - { - upload_file(); - } - }); - - if (settings.submit_button == null) - { - // do nothing - } else - { - settings.submit_button.click(function(e) - { - // Prevent non-AJAXy submit - e.preventDefault(); - - // only attempt to upload file if we're not uploading - if (!uploading_file) - { - upload_file(); - } - }); - } - - var upload_file = function() - { - if($element.val() == '') return settings.onCancel.apply($element, [settings.params]); - - // make sure extension is valid - var ext = $element.val().split('.').pop().toLowerCase(); - if(true === settings.validate_extensions && $.inArray(ext, settings.valid_extensions) == -1) - { - // Pass back to the user - settings.onComplete.apply($element, [{status: false, message: 'The select file type is invalid. File must be ' + settings.valid_extensions.join(', ') + '.'}, settings.params]); - } else - { - uploading_file = true; - - // Creates the form, extra inputs and iframe used to - // submit / upload the file - wrapElement($element); - - // Call user-supplied (or default) onStart(), setting - // it's this context to the file DOM element - var ret = settings.onStart.apply($element, [settings.params]); - - // let onStart have the option to cancel the upload - if(ret !== false) - { - $element.parent('form').submit(function(e) { e.stopPropagation(); }).submit(); - } - } - }; - - // Mark this element as setup - $element.data('ajaxUploader-setup', true); - - /* - // Internal handler that tries to parse the response - // and clean up after ourselves. - */ - var handleResponse = function(loadedFrame, element) { - var response, responseStr = $(loadedFrame).contents()[0].body.textContent; - try { - //response = $.parseJSON($.trim(responseStr)); - response = JSON.parse(responseStr); - } catch(e) { - console.error(e); - response = responseStr; - } - - // Tear-down the wrapper form - element.siblings().remove(); - element.unwrap(); - - uploading_file = false; - - // Pass back to the user - settings.onComplete.apply(element, [response, settings.params]); - }; - - /* - // Wraps element in a
tag, and inserts hidden inputs for each - // key:value pair in settings.params so they can be sent along with - // the upload. Then, creates an iframe that the whole thing is - // uploaded through. - */ - var wrapElement = function(element) { - // Create an iframe to submit through, using a semi-unique ID - var frame_id = 'ajaxUploader-iframe-' + Math.round(new Date().getTime() / 1000) - $('body').after('