');editor.$box.append($back_button);editor.events.bindClick(editor.$box,'a.html-switch',function(){toggle(false);});}
var cancel=function(){return!isActive();}
editor.events.on('buttons.refresh',cancel);editor.events.on('copy',cancel,true);editor.events.on('cut',cancel,true);editor.events.on('paste',cancel,true);editor.events.on('destroy',_destroy,true);editor.events.on('html.set',function(){if(isActive())toggle(true);});editor.events.on('form.submit',function(){if(isActive()){editor.html.set(get());editor.events.trigger('contentChanged',[],true);}},true);}
@@ -45,11 +45,11 @@ $.FE.DefineIcon('html',{NAME:'code'});}));!function(a){"function"==typeof define
else{jQuery=require('jquery')(root);}}
factory(jQuery);return jQuery;};}else{factory(jQuery);}}(function($){'use strict';$.extend($.FE.POPUP_TEMPLATES,{'file.insert':'[_BUTTONS_][_UPLOAD_LAYER_][_BY_URL_LAYER_][_PROGRESS_BAR_]'})
$.extend($.FE.DEFAULTS,{fileUploadURL:'http://i.froala.com/upload',fileUploadParam:'file',fileUploadParams:{},fileUploadToS3:false,fileUploadMethod:'POST',fileMaxSize:10*1024*1024,fileAllowedTypes:['*'],fileInsertButtons:['fileBack','|','fileUpload','fileByURL'],fileUseSelectedText:false});$.FE.PLUGINS.file=function(editor){var BAD_LINK=1;var MISSING_LINK=2;var ERROR_DURING_UPLOAD=3;var BAD_RESPONSE=4;var MAX_SIZE_EXCEEDED=5;var BAD_FILE_TYPE=6;var NO_CORS_IE=7;var error_messages={};error_messages[BAD_LINK]='File cannot be loaded from the passed link.';error_messages[MISSING_LINK]='No link in upload response.';error_messages[ERROR_DURING_UPLOAD]='Error during file upload.';error_messages[BAD_RESPONSE]='Parsing response failed.';error_messages[MAX_SIZE_EXCEEDED]='File is too large.';error_messages[BAD_FILE_TYPE]='File file type is invalid.';error_messages[NO_CORS_IE]='Files can be uploaded only to same domain in IE 8 and IE 9.';function showInsertPopup(){var $btn=editor.$tb.find('.fr-command[data-cmd="insertFile"]');var $popup=editor.popups.get('file.insert');if(!$popup)$popup=_initInsertPopup();hideProgressBar();if(!$popup.hasClass('fr-active')){editor.popups.refresh('file.insert');editor.popups.setContainer('file.insert',editor.$tb);var left=$btn.offset().left+$btn.outerWidth()/2;var top=$btn.offset().top+(editor.opts.toolbarBottom?10:$btn.outerHeight()-10);editor.popups.show('file.insert',left,top,$btn.outerHeight());}}
-function showProgressBar(){var $popup=editor.popups.get('file.insert');if($popup){$popup.find('.fr-layer.fr-active').removeClass('fr-active').addClass('fr-pactive');$popup.find('.fr-file-progress-bar-layer').addClass('fr-active');$popup.find('.fr-buttons').hide();_setProgressMessage('Uploading',0);}}
+function showProgressBar(){var $popup=editor.popups.get('file.insert');if(!$popup)$popup=_initInsertPopup();$popup.find('.fr-layer.fr-active').removeClass('fr-active').addClass('fr-pactive');$popup.find('.fr-file-progress-bar-layer').addClass('fr-active');$popup.find('.fr-buttons').hide();_setProgressMessage('Uploading',0);}
function hideProgressBar(dismiss){var $popup=editor.popups.get('file.insert');if($popup){$popup.find('.fr-layer.fr-pactive').addClass('fr-active').removeClass('fr-pactive');$popup.find('.fr-file-progress-bar-layer').removeClass('fr-active');$popup.find('.fr-buttons').show();if(dismiss){editor.popups.show('file.insert',null,null);}}}
function _setProgressMessage(message,progress){var $popup=editor.popups.get('file.insert');if($popup){var $layer=$popup.find('.fr-file-progress-bar-layer');$layer.find('h3').text(message+(progress?' '+progress+'%':''));$layer.removeClass('fr-error');if(progress){$layer.find('div').removeClass('fr-indeterminate');$layer.find('div > span').css('width',progress+'%');}
else{$layer.find('div').addClass('fr-indeterminate');}}}
-function _showErrorMessage(message){var $popup=editor.popups.get('file.insert');var $layer=$popup.find('.fr-file-progress-bar-layer');$layer.addClass('fr-error')
+function _showErrorMessage(message){showProgressBar();var $popup=editor.popups.get('file.insert');var $layer=$popup.find('.fr-file-progress-bar-layer');$layer.addClass('fr-error')
$layer.find('h3').text(message);}
function insertByURL(){var $popup=editor.popups.get('file.insert');var $input=$popup.find('.fr-file-by-url-layer input');var url=$input.val()
if(url.length>0){var filename=url.substring(url.lastIndexOf('/')+1);insert(editor.helpers.sanitizeURL($input.val()),filename,[]);$input.val('');$input.blur();}}
@@ -86,8 +86,7 @@ by_url_layer='';var template={buttons:file_buttons,upload_layer:upload_layer,by_url_layer:by_url_layer,progress_bar:progress_bar_layer};var $popup=editor.popups.create('file.insert',template);_bindInsertEvents($popup);return $popup;}
function _onRemove(link){if($(link).hasClass('fr-file')){return editor.events.trigger('file.unlink',[link]);}}
function _drop(e){var dt=e.originalEvent.dataTransfer;if(dt&&dt.files&&dt.files.length){var file=dt.files[0];if(file&&typeof file.type!='undefined'){if(file.type.indexOf('image')<0&&(editor.opts.fileAllowedTypes.indexOf(file.type)>=0||editor.opts.fileAllowedTypes.indexOf('*')>=0)){editor.markers.remove();editor.markers.insertAtPoint(e.originalEvent);editor.$el.find('.fr-marker').replaceWith($.FE.MARKERS);editor.popups.hideAll();var $popup=editor.popups.get('file.insert');if(!$popup)$popup=_initInsertPopup();editor.popups.setContainer('file.insert',$(editor.opts.scrollableContainer));editor.popups.show('file.insert',e.originalEvent.pageX,e.originalEvent.pageY);showProgressBar();upload(dt.files);e.preventDefault();e.stopPropagation();return false;}}}}
-function _initEvents(){editor.events.on('drop',_drop);editor.events.$on(editor.$win,'keydown',function(e){var key_code=e.which;var $popup=editor.popups.get('file.insert')
-if($popup&&key_code==$.FE.KEYCODE.ESC){$popup.trigger('abortUpload');}});}
+function _initEvents(){editor.events.on('drop',_drop);editor.events.$on(editor.$win,'keydown',function(e){var key_code=e.which;var $popup=editor.popups.get('file.insert');if($popup&&key_code==$.FE.KEYCODE.ESC){$popup.trigger('abortUpload');}});editor.events.on('destroy',function(){var $popup=editor.popups.get('file.insert');if($popup){$popup.trigger('abortUpload');}});}
function back(){editor.events.disableBlur();editor.selection.restore();editor.events.enableBlur();editor.popups.hide('file.insert');editor.toolbar.showInline();}
function showLayer(name){var $popup=editor.popups.get('file.insert');var left;var top;if(!editor.opts.toolbarInline){var $btn=editor.$tb.find('.fr-command[data-cmd="insertFile"]');left=$btn.offset().left+$btn.outerWidth()/2;top=$btn.offset().top+(editor.opts.toolbarBottom?10:$btn.outerHeight()-10);}
else{top=$popup.offset().top-editor.helpers.getPX($popup.css('margin-top'));if($popup.hasClass('fr-above')){top+=$popup.outerHeight();}}
@@ -242,7 +241,7 @@ $audio_obj.css('width',width+diff_x);$audio_obj.css('height',height+diff_y);$aud
function _handlerMouseup(e){if(!editor.core.sameInstance($audio_resizer))return true;if($handler&&$current_audio){if(e)e.stopPropagation();$handler=null;$overlay.hide();_repositionResizer();_showEditPopup();editor.undo.saveStep();}}
function _getHandler(pos){return'';}
function _initResizer(){var doc;if(!editor.shared.$audio_resizer){editor.shared.$audio_resizer=$('');$audio_resizer=editor.shared.$audio_resizer;editor.events.$on($audio_resizer,'mousedown',function(e){e.stopPropagation();},true);if(editor.opts.audioResize){$audio_resizer.append(_getHandler('nw')+_getHandler('ne')+_getHandler('sw')+_getHandler('se'));editor.shared.$audio_overlay=$('');$overlay=editor.shared.$audio_overlay;doc=$audio_resizer.get(0).ownerDocument;$(doc).find('body').append($overlay);}}else{$audio_resizer=editor.shared.$audio_resizer;$overlay=editor.shared.$audio_overlay;editor.events.on('destroy',function(){$audio_resizer.removeClass('fr-active').appendTo($('body'));},true);}
-editor.events.on('shared.destroy',function(){$audio_resizer.html('').removeData().remove();if(editor.opts.audioResize){$overlay.remove();}},true);if(!editor.helpers.isMobile()){editor.events.$on($(editor.o_win),'resize.audio',function(){_exitEdit(true);});}
+editor.events.on('shared.destroy',function(){$audio_resizer.html('').removeData().remove();$audio_resizer=null;if(editor.opts.audioResize){$overlay.remove();$overlay=null;}},true);if(!editor.helpers.isMobile()){editor.events.$on($(editor.o_win),'resize.audio',function(){_exitEdit(true);});}
if(editor.opts.audioResize){doc=$audio_resizer.get(0).ownerDocument;editor.events.$on($audio_resizer,editor._mousedown,'.fr-handler',_handlerMousedown);editor.events.$on($(doc),editor._mousemove,_handlerMousemove);editor.events.$on($(doc.defaultView||doc.parentWindow),editor._mouseup,_handlerMouseup);editor.events.$on($overlay,'mouseleave',_handlerMouseup);}}
function _repositionResizer(){if(!$audio_resizer)_initResizer();(editor.$wp||$(editor.opts.scrollableContainer)).append($audio_resizer);$audio_resizer.data('instance',editor);var $audio_obj=$current_audio.find('iframe, embed, audio');$audio_resizer.css('top',(editor.opts.iframe?$audio_obj.offset().top-1:$audio_obj.offset().top-editor.$wp.offset().top-1)+editor.$wp.scrollTop()).css('left',(editor.opts.iframe?$audio_obj.offset().left-1:$audio_obj.offset().left-editor.$wp.offset().left-1)+editor.$wp.scrollLeft()).css('width',$audio_obj.outerWidth()).css('height',$audio_obj.height()).addClass('fr-active')}
var touchScroll;function _edit(e){if(e&&e.type=='touchend'&&touchScroll){return true;}
@@ -256,7 +255,7 @@ editor.shared.audio_exit_flag=false;function _markExit(){editor.shared.audio_exi
function _unmarkExit(){editor.shared.audio_exit_flag=false;}
function _canExit(){return editor.shared.audio_exit_flag;}
function _initEvents(){editor.events.on('mousedown window.mousedown',_markExit);editor.events.on('window.touchmove',_unmarkExit);editor.events.on('mouseup window.mouseup',_exitEdit);editor.events.on('commands.mousedown',function($btn){if($btn.parents('.fr-toolbar').length>0){_exitEdit();}});editor.events.on('blur audio.hideResizer commands.undo commands.redo element.dropped',function(){_exitEdit(true);});}
-function _initEditPopup(){var audio_buttons='';if(editor.opts.audioEditButtons.length>1){audio_buttons+='';audio_buttons+=editor.button.buildList(editor.opts.audioEditButtons);audio_buttons+='
';}
+function _initEditPopup(){var audio_buttons='';if(editor.opts.audioEditButtons.length>=1){audio_buttons+='';audio_buttons+=editor.button.buildList(editor.opts.audioEditButtons);audio_buttons+='
';}
var template={buttons:audio_buttons}
var $popup=editor.popups.create('audio.edit',template);editor.events.$on(editor.$wp,'scroll.audio-edit',function(){if($current_audio&&editor.popups.isVisible('audio.edit')){_showEditPopup();}});return $popup;}
function _refreshSizePopup(){if($current_audio){var $popup=editor.popups.get('audio.size');var $audio_obj=$current_audio.find('iframe, embed, audio')
@@ -372,7 +371,7 @@ editor.popups.hide('audio.insert')}
function _init(){editor.events.on('destroy',_destroy,true)
editor.events.on('video.linkError',_insertVideoFallback)
editor.events.on('audio.linkError',_insertAudioFallback)}
-function _destroy(){editor.$el.off('keydown','figure',_onFigureKeydown)}
+function _destroy(){}
return{_init:_init,insertFile:onInsertFile,insertImage:onInsertImage,insertVideo:onInsertVideo,insertAudio:onInsertAudio}}
if(!$.FE.PLUGINS.link||!$.FE.PLUGINS.file||!$.FE.PLUGINS.image||!$.FE.PLUGINS.video){throw new Error('Media manager plugin requires link, file, image and video plugin.');}
$.FE.DEFAULTS.imageInsertButtons.push('mmImageManager');$.FE.RegisterCommand('mmImageManager',{title:'Browse',undo:false,focus:false,callback:function(){this.mediaManager.insertImage();},plugin:'mediaManager'})
@@ -480,6 +479,9 @@ froalaOptions.htmlDoNotWrapTags=['figure','script','style']
froalaOptions.lineBreakerTags=['figure','table','hr','iframe','form','dl']
froalaOptions.shortcutsEnabled=['show','bold','italic','underline','indent','outdent','undo','redo']
froalaOptions.linkInsertButtons=['linkBack','|']
+froalaOptions.imageUploadURL=froalaOptions.fileUploadURL=window.location
+froalaOptions.imageUploadParam=froalaOptions.fileUploadParam='file_data'
+froalaOptions.imageUploadParams=froalaOptions.fileUploadParams={X_OCTOBER_MEDIA_MANAGER_QUICK_UPLOAD:1}
var placeholder=this.$textarea.attr('placeholder')
froalaOptions.placeholderText=placeholder?placeholder:''
froalaOptions.height=this.$el.hasClass('stretch')?Infinity:$('.height-indicator',this.$el).height()
diff --git a/modules/backend/formwidgets/richeditor/assets/js/plugins/mediamanager.js b/modules/backend/formwidgets/richeditor/assets/js/plugins/mediamanager.js
index f6210d77b..4aa9b6128 100644
--- a/modules/backend/formwidgets/richeditor/assets/js/plugins/mediamanager.js
+++ b/modules/backend/formwidgets/richeditor/assets/js/plugins/mediamanager.js
@@ -177,7 +177,6 @@
* Destroy.
*/
function _destroy () {
- editor.$el.off('keydown', 'figure', _onFigureKeydown)
}
// Expose public methods. If _init is not public then the plugin won't be initialized.
diff --git a/modules/backend/formwidgets/richeditor/assets/js/richeditor.js b/modules/backend/formwidgets/richeditor/assets/js/richeditor.js
index c3d89de01..cd4b4d2d7 100755
--- a/modules/backend/formwidgets/richeditor/assets/js/richeditor.js
+++ b/modules/backend/formwidgets/richeditor/assets/js/richeditor.js
@@ -99,6 +99,11 @@
froalaOptions.shortcutsEnabled = ['show', 'bold', 'italic', 'underline', 'indent', 'outdent', 'undo', 'redo']
froalaOptions.linkInsertButtons = ['linkBack', '|']
+ // File upload
+ froalaOptions.imageUploadURL = froalaOptions.fileUploadURL = window.location
+ froalaOptions.imageUploadParam = froalaOptions.fileUploadParam = 'file_data'
+ froalaOptions.imageUploadParams = froalaOptions.fileUploadParams = { X_OCTOBER_MEDIA_MANAGER_QUICK_UPLOAD: 1 }
+
var placeholder = this.$textarea.attr('placeholder')
froalaOptions.placeholderText = placeholder ? placeholder : ''
diff --git a/modules/cms/classes/MediaLibrary.php b/modules/cms/classes/MediaLibrary.php
index 7dc8e940a..b40a3a842 100644
--- a/modules/cms/classes/MediaLibrary.php
+++ b/modules/cms/classes/MediaLibrary.php
@@ -531,6 +531,7 @@ class MediaLibrary
: $this->getFolderItemCount($path);
$publicUrl = $this->storagePath.$relativePath;
+
return new MediaLibraryItem($relativePath, $size, $lastModified, $itemType, $publicUrl);
}
diff --git a/modules/cms/widgets/MediaManager.php b/modules/cms/widgets/MediaManager.php
index 69bf55858..0592a716c 100644
--- a/modules/cms/widgets/MediaManager.php
+++ b/modules/cms/widgets/MediaManager.php
@@ -954,8 +954,12 @@ class MediaManager extends WidgetBase
protected function checkUploadPostback()
{
$fileName = null;
+ $quickMode = false;
- if (!($uniqueId = Request::header('X-OCTOBER-FILEUPLOAD')) || $uniqueId != $this->getId()) {
+ if (
+ (!($uniqueId = Request::header('X-OCTOBER-FILEUPLOAD')) || $uniqueId != $this->getId()) &&
+ (!$quickMode = post('X_OCTOBER_MEDIA_MANAGER_QUICK_UPLOAD'))
+ ) {
return;
}
@@ -995,15 +999,19 @@ class MediaManager extends WidgetBase
throw new ApplicationException($uploadedFile->getErrorMessage());
}
- $path = Input::get('path');
+ $path = $quickMode ? '/uploaded-files' : Input::get('path');
$path = MediaLibrary::validatePath($path);
+ $filePath = $path.'/'.$fileName;
MediaLibrary::instance()->put(
- $path.'/'.$fileName,
+ $filePath,
File::get($uploadedFile->getRealPath())
);
- Response::json(['result' => 'success'])->send();
+ Response::json([
+ 'link' => MediaLibrary::url($filePath),
+ 'result' => 'success'
+ ])->send();
}
catch (Exception $ex) {
Response::json($ex->getMessage(), 400)->send();
diff --git a/modules/cms/widgets/mediamanager/assets/css/mediamanager.css b/modules/cms/widgets/mediamanager/assets/css/mediamanager.css
index 7579fdfbe..8d4a56ed7 100644
--- a/modules/cms/widgets/mediamanager/assets/css/mediamanager.css
+++ b/modules/cms/widgets/mediamanager/assets/css/mediamanager.css
@@ -62,6 +62,7 @@ div[data-control="media-manager"] .list-container{position:relative;z-index:100}
div[data-control="media-manager"] .list-container .no-data{font-size:13px}
div[data-control="media-manager"] .list-container p.no-data{padding:0 20px 20px 20px}
div[data-control="media-manager"] .list-container li.no-data{padding-top:20px;display:block !important;width:100% !important;border:none !important;background:transparent !important;cursor:default !important}
+div[data-control="media-manager"] .list-container table.table.data tbody tr:not(.no-data):active td{background:#4ea5e0 !important}
div[data-control="media-manager"] [data-control="item-list"]{position:relative;display:table-cell}
div[data-control="media-manager"] .control-scrollpad{position:absolute;left:0;top:0;min-height:300px}
div[data-control="media-manager"] .scroll-wrapper{position:relative}
diff --git a/modules/cms/widgets/mediamanager/assets/less/mediamanager.less b/modules/cms/widgets/mediamanager/assets/less/mediamanager.less
index 3dedc08f5..1652cd5c7 100644
--- a/modules/cms/widgets/mediamanager/assets/less/mediamanager.less
+++ b/modules/cms/widgets/mediamanager/assets/less/mediamanager.less
@@ -362,6 +362,12 @@ div[data-control="media-manager"] {
background: transparent !important;
cursor: default !important;
}
+
+ table.table.data {
+ tbody tr:not(.no-data):active td {
+ background: @color-list-hover-bg !important;
+ }
+ }
}
[data-control="item-list"] {