From 72e00189b52acf530dd93e715a7824b33a662618 Mon Sep 17 00:00:00 2001 From: Ryan Cramer Date: Fri, 23 Feb 2018 10:56:32 -0500 Subject: [PATCH] Some adjustments to InputfieldCKEditor for future support of external asset pages. Not currently enabled, just getting some foundational stuff in place for future use. --- .../InputfieldCKEditor/InputfieldCKEditor.js | 37 +++++++++----- .../InputfieldCKEditor.min.js | 2 +- .../InputfieldCKEditor.module | 48 ++++++++++++++++--- .../plugins/pwimage/plugin.js | 3 ++ .../plugins/pwimage/plugin.min.js | 2 +- .../ProcessPageLister.module | 7 +-- 6 files changed, 76 insertions(+), 23 deletions(-) diff --git a/wire/modules/Inputfield/InputfieldCKEditor/InputfieldCKEditor.js b/wire/modules/Inputfield/InputfieldCKEditor/InputfieldCKEditor.js index ad3f2178..cbe5b926 100644 --- a/wire/modules/Inputfield/InputfieldCKEditor/InputfieldCKEditor.js +++ b/wire/modules/Inputfield/InputfieldCKEditor/InputfieldCKEditor.js @@ -5,6 +5,29 @@ * */ +/** + * Get ProcessWire config settings for given CKE editor object or name + * + * @param editor + * @returns {*} + * + */ +function ckeGetProcessWireConfig(editor) { + + var configName = typeof editor == "string" ? editor : editor.name; + configName = configName.replace('Inputfield_', 'InputfieldCKEditor_'); + + if(typeof ProcessWire.config[configName] == "undefined") { + configName = configName.replace(/_ckeditor$/, ''); // inline only + if(typeof ProcessWire.config[configName] == "undefined") { + return false; + } + } + + return ProcessWire.config[configName]; +} + + /** * Add external plugins * @@ -75,18 +98,8 @@ function ckeUploadEvent(event) { var xhr = event.data.fileLoader.xhr; var fileLoader = event.data.fileLoader; - var configName = event.editor.name; - - configName = configName.replace('Inputfield_', 'InputfieldCKEditor_'); - - if(typeof ProcessWire.config[configName] == "undefined") { - configName = configName.replace(/_ckeditor$/, ''); // inline only - if(typeof ProcessWire.config[configName] == "undefined") { - return false; - } - } - - var uploadFieldName = ProcessWire.config[configName].pwUploadField; + var settings = ckeGetProcessWireConfig(event.editor); + var uploadFieldName = settings ? settings.pwUploadField : '_unknown'; var $imageInputfield = $('#Inputfield_' + uploadFieldName); if($imageInputfield.length) { diff --git a/wire/modules/Inputfield/InputfieldCKEditor/InputfieldCKEditor.min.js b/wire/modules/Inputfield/InputfieldCKEditor/InputfieldCKEditor.min.js index c5741648..5c4dc483 100644 --- a/wire/modules/Inputfield/InputfieldCKEditor/InputfieldCKEditor.min.js +++ b/wire/modules/Inputfield/InputfieldCKEditor/InputfieldCKEditor.min.js @@ -1 +1 @@ -function ckeLoadPlugins(){for(var a in ProcessWire.config.InputfieldCKEditor.plugins){var b=ProcessWire.config.InputfieldCKEditor.plugins[a];CKEDITOR.plugins.addExternal(a,b,"")}}ckeLoadPlugins();function ckeBlurEvent(b){var a=b.editor;var c=$(a.element.$);if(a.checkDirty()){if(c.length){if(c.is("textarea")){c.change()}c.closest(".Inputfield").addClass("InputfieldStateChanged")}}}function ckeFocusEvent(b){var a=b.editor;var c=$(a.element.$);c.trigger("pw-focus")}function ckeResizeEvent(b){var a=b.editor;var c=$(a.element.$);if(c.length){c.closest(".Inputfield").trigger("heightChanged")}}function ckeUploadEvent(c){var f=c.data.fileLoader.xhr;var a=c.data.fileLoader;var d=c.editor.name;d=d.replace("Inputfield_","InputfieldCKEditor_");if(typeof ProcessWire.config[d]=="undefined"){d=d.replace(/_ckeditor$/,"");if(typeof ProcessWire.config[d]=="undefined"){return false}}var b=ProcessWire.config[d].pwUploadField;var e=$("#Inputfield_"+b);if(e.length){f.open("POST",a.uploadUrl,true);e.trigger("pwimageupload",{name:a.fileName,file:a.file,xhr:f});c.stop()}}function ckeInitEvents(b){b.on("blur",ckeBlurEvent);b.on("focus",ckeFocusEvent);b.on("change",ckeBlurEvent);b.on("resize",ckeResizeEvent);b.on("fileUploadRequest",ckeUploadEvent,null,null,4);var c=$(b.element.$);var a=c.closest(".Inputfield.InputfieldColumnWidth");if(a.length){setTimeout(function(){a.trigger("heightChanged")},1000)}}function ckeSaveReadyInline(b){if(!b.length){return}var a=b.hasClass(".InputfieldCKEditorInline")?b:b.find(".InputfieldCKEditorInline");if(a.length){a.each(function(){var f=$(this);var d;if(f.hasClass("InputfieldCKEditorLoaded")){var c=CKEDITOR.instances[f.attr("id")];if(typeof c!="undefined"){if(c.focusManager.hasFocus){c.focusManager.focus(true);c.focus()}d=c.getData()}}else{d=f.html()}var e=f.next("input");e.attr("value",d)})}}function ckeSaveReadyNormal(b){var a=b.hasClass("InputfieldCKEditorNormal")?b:b.find(".InputfieldCKEditorNormal");a.each(function(){var d=$(this);if(!d.hasClass("InputfieldCKEditorLoaded")){return}var c=CKEDITOR.instances[d.attr("id")];c.updateElement()})}function ckeInlineMouseoverEvent(b){var d=$(this);if(d.hasClass("InputfieldCKEditorLoaded")){return}d.effect("highlight",{},500);d.attr("contenteditable","true");var c=d.attr("data-configName");var a=CKEDITOR.inline($(this).attr("id"),ProcessWire.config[c]);ckeInitEvents(a);d.addClass("InputfieldCKEditorLoaded")}function ckeInitTab(c,e){var h=e.newTab;var d=h.find("a");if(d.hasClass("InputfieldCKEditor_init")){return}var a=d.attr("data-editorID");var g=d.attr("data-configName");var b=CKEDITOR.replace(a,config[g]);ckeInitEvents(b);d.addClass("InputfieldCKEditor_init");e.oldTab.find("a").addClass("InputfieldCKEditor_init");var f=$("#"+a);f.addClass("InputfieldCKEditorLoaded")}function ckeInitNormal(a){var f=$("#"+a);var e=f.parent();if(typeof ProcessWire.config.InputfieldCKEditor.editors[a]!="undefined"){var d=ProcessWire.config.InputfieldCKEditor.editors[a]}else{var d=f.attr("data-configName")}if(e.hasClass("ui-tabs-panel")&&e.css("display")=="none"){var g=f.parent().attr("id");var c=e.closest(".ui-tabs, .langTabs").find("a[href=#"+g+"]");c.attr("data-editorID",a).attr("data-configName",d);e.closest(".ui-tabs, .langTabs").on("tabsactivate",ckeInitTab)}else{var b=CKEDITOR.replace(a,ProcessWire.config[d]);ckeInitEvents(b);f.addClass("InputfieldCKEditorLoaded")}}$(document).ready(function(){CKEDITOR.timestamp=ProcessWire.config.InputfieldCKEditor.timestamp;for(var a in ProcessWire.config.InputfieldCKEditor.editors){ckeInitNormal(a)}$(document).on("reloaded",".InputfieldCKEditor",function(){var b=$(this).find(".InputfieldCKEditorNormal:not(.InputfieldCKEditorLoaded)");b.each(function(){ckeInitNormal($(this).attr("id"))});return false});CKEDITOR.disableAutoInline=true;$(document).on("mouseover",".InputfieldCKEditorInlineEditor",ckeInlineMouseoverEvent);$(document).on("submit","form.InputfieldForm",function(){ckeSaveReadyInline($(this))});$(document).on("saveReady",".InputfieldCKEditor",function(){ckeSaveReadyNormal($(this));ckeSaveReadyInline($(this))})}); \ No newline at end of file +function ckeGetProcessWireConfig(a){var b=typeof a=="string"?a:a.name;b=b.replace("Inputfield_","InputfieldCKEditor_");if(typeof ProcessWire.config[b]=="undefined"){b=b.replace(/_ckeditor$/,"");if(typeof ProcessWire.config[b]=="undefined"){return false}}return ProcessWire.config[b]}function ckeLoadPlugins(){for(var a in ProcessWire.config.InputfieldCKEditor.plugins){var b=ProcessWire.config.InputfieldCKEditor.plugins[a];CKEDITOR.plugins.addExternal(a,b,"")}}ckeLoadPlugins();function ckeBlurEvent(b){var a=b.editor;var c=$(a.element.$);if(a.checkDirty()){if(c.length){if(c.is("textarea")){c.change()}c.closest(".Inputfield").addClass("InputfieldStateChanged")}}}function ckeFocusEvent(b){var a=b.editor;var c=$(a.element.$);c.trigger("pw-focus")}function ckeResizeEvent(b){var a=b.editor;var c=$(a.element.$);if(c.length){c.closest(".Inputfield").trigger("heightChanged")}}function ckeUploadEvent(d){var f=d.data.fileLoader.xhr;var a=d.data.fileLoader;var c=ckeGetProcessWireConfig(d.editor);var b=c?c.pwUploadField:"_unknown";var e=$("#Inputfield_"+b);if(e.length){f.open("POST",a.uploadUrl,true);e.trigger("pwimageupload",{name:a.fileName,file:a.file,xhr:f});d.stop()}}function ckeInitEvents(b){b.on("blur",ckeBlurEvent);b.on("focus",ckeFocusEvent);b.on("change",ckeBlurEvent);b.on("resize",ckeResizeEvent);b.on("fileUploadRequest",ckeUploadEvent,null,null,4);var c=$(b.element.$);var a=c.closest(".Inputfield.InputfieldColumnWidth");if(a.length){setTimeout(function(){a.trigger("heightChanged")},1000)}}function ckeSaveReadyInline(b){if(!b.length){return}var a=b.hasClass(".InputfieldCKEditorInline")?b:b.find(".InputfieldCKEditorInline");if(a.length){a.each(function(){var f=$(this);var d;if(f.hasClass("InputfieldCKEditorLoaded")){var c=CKEDITOR.instances[f.attr("id")];if(typeof c!="undefined"){if(c.focusManager.hasFocus){c.focusManager.focus(true);c.focus()}d=c.getData()}}else{d=f.html()}var e=f.next("input");e.attr("value",d)})}}function ckeSaveReadyNormal(b){var a=b.hasClass("InputfieldCKEditorNormal")?b:b.find(".InputfieldCKEditorNormal");a.each(function(){var d=$(this);if(!d.hasClass("InputfieldCKEditorLoaded")){return}var c=CKEDITOR.instances[d.attr("id")];c.updateElement()})}function ckeInlineMouseoverEvent(b){var d=$(this);if(d.hasClass("InputfieldCKEditorLoaded")){return}d.effect("highlight",{},500);d.attr("contenteditable","true");var c=d.attr("data-configName");var a=CKEDITOR.inline($(this).attr("id"),ProcessWire.config[c]);ckeInitEvents(a);d.addClass("InputfieldCKEditorLoaded")}function ckeInitTab(c,e){var h=e.newTab;var d=h.find("a");if(d.hasClass("InputfieldCKEditor_init")){return}var a=d.attr("data-editorID");var g=d.attr("data-configName");var b=CKEDITOR.replace(a,config[g]);ckeInitEvents(b);d.addClass("InputfieldCKEditor_init");e.oldTab.find("a").addClass("InputfieldCKEditor_init");var f=$("#"+a);f.addClass("InputfieldCKEditorLoaded")}function ckeInitNormal(a){var f=$("#"+a);var e=f.parent();if(typeof ProcessWire.config.InputfieldCKEditor.editors[a]!="undefined"){var d=ProcessWire.config.InputfieldCKEditor.editors[a]}else{var d=f.attr("data-configName")}if(e.hasClass("ui-tabs-panel")&&e.css("display")=="none"){var g=f.parent().attr("id");var c=e.closest(".ui-tabs, .langTabs").find("a[href=#"+g+"]");c.attr("data-editorID",a).attr("data-configName",d);e.closest(".ui-tabs, .langTabs").on("tabsactivate",ckeInitTab)}else{var b=CKEDITOR.replace(a,ProcessWire.config[d]);ckeInitEvents(b);f.addClass("InputfieldCKEditorLoaded")}}$(document).ready(function(){CKEDITOR.timestamp=ProcessWire.config.InputfieldCKEditor.timestamp;for(var a in ProcessWire.config.InputfieldCKEditor.editors){ckeInitNormal(a)}$(document).on("reloaded",".InputfieldCKEditor",function(){var b=$(this).find(".InputfieldCKEditorNormal:not(.InputfieldCKEditorLoaded)");b.each(function(){ckeInitNormal($(this).attr("id"))});return false});CKEDITOR.disableAutoInline=true;$(document).on("mouseover",".InputfieldCKEditorInlineEditor",ckeInlineMouseoverEvent);$(document).on("submit","form.InputfieldForm",function(){ckeSaveReadyInline($(this))});$(document).on("saveReady",".InputfieldCKEditor",function(){ckeSaveReadyNormal($(this));ckeSaveReadyInline($(this))})}); \ No newline at end of file diff --git a/wire/modules/Inputfield/InputfieldCKEditor/InputfieldCKEditor.module b/wire/modules/Inputfield/InputfieldCKEditor/InputfieldCKEditor.module index e2e7c487..a2903e69 100644 --- a/wire/modules/Inputfield/InputfieldCKEditor/InputfieldCKEditor.module +++ b/wire/modules/Inputfield/InputfieldCKEditor/InputfieldCKEditor.module @@ -23,6 +23,7 @@ * @property string $formatTags * @property string $customOptions * @property array $imageFields + * @property int $assetPageID * * */ @@ -121,6 +122,7 @@ class InputfieldCKEditor extends InputfieldTextarea { $this->set('useACF', 1); $this->set('toggles', array()); $this->set('imageFields', array()); + $this->set('assetPageID', 0); // FUTURE USE $this->set('toolbar', '' . "Format, Styles, -, Bold, Italic, -, RemoveFormat\n" . @@ -214,14 +216,14 @@ class InputfieldCKEditor extends InputfieldTextarea { /** * Get field name to use for images, or blank if disabled (or unavailable) * + * @param Page $page Asset page * @return string * */ - protected function getImagesFieldName() { + protected function getImagesFieldName($page) { $imageFields = $this->imageFields; if(!is_array($imageFields)) $imageFields = array(); if(in_array('x', $imageFields)) return ''; - $page = $this->hasPage; if(!$page || !$page->id || !$page->template) return ''; $result = ''; foreach($imageFields as $name) { @@ -280,9 +282,15 @@ class InputfieldCKEditor extends InputfieldTextarea { if(stripos($this->toolbar, 'Anchor') !== false && stripos($this->removePlugins, 'link') !== false) { $this->removePlugins = preg_replace('/\blink,?\b/i','', $this->removePlugins); } - + + // FUTURE USE + // $assetPage = $this->assetPageID ? $this->wire('pages')->get((int) $this->assetPageID) : $this->hasPage; + // if(!$assetPage || !$assetPage->id) $assetPage = $this->hasPage; + $assetPage = $this->hasPage; + if(!$assetPage) $assetPage = new NullPage(); + $extraPlugins = $this->extraPlugins; - $imagesField = $this->getImagesFieldName(); + $imagesField = $this->getImagesFieldName($assetPage); if($imagesField) $extraPlugins[] = 'uploadimage'; $settings = array( @@ -296,11 +304,28 @@ class InputfieldCKEditor extends InputfieldTextarea { 'language' => $this->_x('en', 'language-pack'), // CKEditor default language pack to use // 'enterMode' => 'CKEDITOR.ENTER_P', // already the default, can be left out 'entities' => false, - 'pwUploadField' => $imagesField, 'uploadUrl' => '', + 'pwUploadField' => $imagesField, + 'pwAssetPageID' => $assetPage->id, ); + + if($assetPage !== $this->hasPage && $assetPage->id) { + // external asset page (FUTURE USE) + $imagesInputfield = $this->wire('modules')->get('InputfieldImage'); + $imagesInputfield->set('hasPage', $assetPage); + $imagesInputfield->renderReady($parent, $renderValueMode); + $assetPageEditURL = $assetPage->editUrl() . "&InputfieldFileAjax=noTemp"; + } else if($assetPage->id) { + // assetPage is hasPage + $assetPageEditURL = $assetPage->editUrl() . '&InputfieldFileAjax=1'; + } else { + $assetPageEditURL = ''; + } - if($imagesField) $settings['uploadUrl'] = $this->hasPage->editUrl() . '&InputfieldFileAjax=1&ckeupload=1'; + if($imagesField && $assetPageEditURL) { + $settings['uploadUrl'] = $assetPageEditURL . '&ckeupload=1'; + } + if(!$this->useACF) $settings['allowedContent'] = true; // disables ACF, per CKEditor docs if($this->rows) $settings['height'] = ($this->rows*2) . 'em'; // set editor height, based on rows value @@ -772,7 +797,18 @@ class InputfieldCKEditor extends InputfieldTextarea { } $f->addOption('x', $this->_('None (disable drag/paste image uploads)')); $f->attr('value', $imageFields); + // $f->columnWidth = 50; $wrapper->add($f); + + /* FUTURE USE + $f = $this->modules->get('InputfieldPageListSelect'); + $f->attr('name', 'assetPageID'); + $f->label = $this->_('Page to use for image/asset storage'); + $f->description = $this->_('By default, uploaded images will be stored with the page being edited. If you want to use a shared page for these assets instead, select it here.'); + $f->columnWidth = 50; + $f->attr('value', (int) $this->assetPageID); + $wrapper->add($f); + */ $f = $this->modules->get("InputfieldCheckboxes"); $f->label = $this->_('Beautify Markup Toggles'); diff --git a/wire/modules/Inputfield/InputfieldCKEditor/plugins/pwimage/plugin.js b/wire/modules/Inputfield/InputfieldCKEditor/plugins/pwimage/plugin.js index 9c0a4aa0..57be8521 100644 --- a/wire/modules/Inputfield/InputfieldCKEditor/plugins/pwimage/plugin.js +++ b/wire/modules/Inputfield/InputfieldCKEditor/plugins/pwimage/plugin.js @@ -103,6 +103,9 @@ var $figureCaption = null; var nodeParentName = nodeParent.$.nodeName.toUpperCase(); var nodeGrandparentName = nodeGrandparent ? nodeGrandparent.$.nodeName.toUpperCase() : ''; + var pwCkeSettings = ckeGetProcessWireConfig(editor); + + if(pwCkeSettings && pwCkeSettings['pwAssetPageID']) page_id = pwCkeSettings['pwAssetPageID']; selection.lock(); editor.lockSelection(); diff --git a/wire/modules/Inputfield/InputfieldCKEditor/plugins/pwimage/plugin.min.js b/wire/modules/Inputfield/InputfieldCKEditor/plugins/pwimage/plugin.min.js index 93fae4dd..c9b32534 100644 --- a/wire/modules/Inputfield/InputfieldCKEditor/plugins/pwimage/plugin.min.js +++ b/wire/modules/Inputfield/InputfieldCKEditor/plugins/pwimage/plugin.min.js @@ -1 +1 @@ -(function(){CKEDITOR.plugins.add("pwimage",{requires:"dialog",init:function(c){var d="pwimage";var f="img[alt,id,!src,title,width](align_left,align_center,align_right,hidpi,align-left,align-center,align-right);a[!href];figure{width}(align_left,align_center,align_right,hidpi,align-left,align-center,align-right);figcaption;";var e="img[alt,src]";c.addCommand(d,{allowedContent:f,requiredContent:e,exec:b});c.ui.addButton("PWImage",{label:c.lang.common.image,command:d,hidpi:true,icon:(CKEDITOR.env.hidpi?this.path+"images/hidpi/pwimage.png":this.path+"images/pwimage.png")});c.on("doubleclick",function(g){var h=g.data.element;if((h.is("img"))&&!h.data("cke-realelement")&&!h.isReadOnly()){g.cancel();c.commands.pwimage.exec()}});if(c.addMenuItems){c.addMenuItems({image:{label:c.lang.image.menu,command:"pwimage",group:"image"}})}if(c.contextMenu){c.contextMenu.addListener(function(g,h){if(a(c,g)){return{image:CKEDITOR.TRISTATE_OFF}}})}}});function a(d,c){if(!c){var e=d.getSelection();c=e.getSelectedElement()}if(c&&c.is("img")&&!c.data("cke-realelement")&&!c.isReadOnly()){return c}}function b(h){var o=jQuery("#Inputfield_id");if(o.length){var p=o.val()}else{var p=jQuery("#"+h.name).closest(".Inputfield").attr("data-pid")}var j=p;var B="";var k="";var s=0;var A=0;var y="";var i="";var c=false;var E=h.getSelection();var F=E.getSelectedElement();var z=E.getStartElement();var C=jQuery(z);var g=z.getParent();var r=g.getParent();var m=C.attr("src");var q=null;var D=null;var v=null;var e=g.$.nodeName.toUpperCase();var l=r?r.$.nodeName.toUpperCase():"";E.lock();h.lockSelection();if(l=="FIGURE"){D=jQuery(r.getOuterHtml());v=D.find("figcaption");D.find("img").remove()}else{if(e=="FIGURE"){D=jQuery(g.getOuterHtml());v=D.find("figcaption");D.find("img").remove()}}if(e==="A"){q=jQuery(g.getOuterHtml());q.find("img").remove()}if(m){k=D?D.attr("class"):C.attr("class");c=k&&k.indexOf("hidpi")>-1;s=C.attr("width");A=C.attr("height");y=C.attr("alt");i=e==="A"?g.$.href:"";var x=m.split("/");B=x.pop();x=x.reverse();p="";for(var w=0;w "+ProcessWire.config.InputfieldCKEditor.pwimage.selectLabel,open:function(){if(jQuery(".cke_maximized").length>0){jQuery(".ui-dialog").css("z-index",9999);jQuery(".ui-widget-overlay").css("z-index",9998)}}};var u=pwModalWindow(t+f,d,"large");u.load(function(){var H=u.contents();if(H.find("#selected_image").length>0){var n=[{html:" "+ProcessWire.config.InputfieldCKEditor.pwimage.insertBtn,click:function(){function N(T){var ad=u.contents();var U=jQuery("#selected_image",ad);var V=U.attr("width");var ae=U.attr("height");var Z=jQuery("#selected_image_description",ad).val();var ag=jQuery("#selected_image_caption",ad).is(":checked")?true:false;var ac=jQuery("#selected_image_hidpi",ad).is(":checked")?true:false;var af=U.removeClass("ui-resizable No Alignment resizable_setup").removeClass("rotate90 rotate180 rotate270 rotate-90 rotate-180 rotate-270").removeClass("flip_vertical flip_horizontal").attr("class");var S=jQuery("#selected_image_link",ad);var aa=S.is(":checked")?S.val():"";var ab=jQuery("").attr("src",T).attr("alt",Z);if(ac){af+=(af.length>0?" ":"")+"hidpi"}if(ag===false){ab.addClass(af)}if(V>0&&U.attr("data-nosize")!="1"){ab.attr("width",V)}if(q){if(aa&&aa.length>0){q.attr("href",aa).attr("data-cke-saved-href",aa)}else{if(S.attr("data-was-checked")==1){q=null}}if(q!==null){q.append(ab);ab=q}}else{if(aa&&aa.length>0){var X=jQuery("").attr("href",aa).append(ab);ab=X}}if(ag){var W=jQuery("
");if(af.length){W.addClass(af)}if(!v){v=jQuery("
");if(Z.length>1){v.append(Z)}else{v.append(ProcessWire.config.InputfieldCKEditor.pwimage.captionLabel)}}if(v){W.append(v)}W.prepend(ab);ab=W}if(l==="FIGURE"){h.unlockSelection();E.unlock();E.selectElement(r)}else{if(e==="A"||e=="FIGURE"){h.unlockSelection();E.unlock();E.selectElement(g)}}var Y=ab[0].outerHTML;h.insertHtml(Y);h.fire("change");u.dialog("close")}var P=u.contents();var I=jQuery("#selected_image",P);u.dialog("disable");u.setTitle(" "+ProcessWire.config.InputfieldCKEditor.pwimage.savingNote);I.removeClass("resized");var J=I.attr("width");if(!J){J=I.width()}var Q=I.attr("height");if(!Q){Q=I.height()}var K=I.attr("src");var R=jQuery("#page_id",P).val();var O=jQuery("#selected_image_hidpi",P).is(":checked")?1:0;var M=parseInt(jQuery("#selected_image_rotate",P).val());K=K.substring(K.lastIndexOf("/")+1);var L=t+"resize?id="+R+"&file="+K+"&width="+J+"&height="+Q+"&hidpi="+O;if(M){L+="&rotate="+M}if(I.hasClass("flip_horizontal")){L+="&flip=h"}else{if(I.hasClass("flip_vertical")){L+="&flip=v"}}jQuery.get(L,function(T){var S=jQuery("
").html(T);var U=S.find("#selected_image").attr("src");N(U)})}},{html:" "+ProcessWire.config.InputfieldCKEditor.pwimage.selectBtn,"class":"ui-priority-secondary",click:function(){var J=u.contents();var I=jQuery("#page_id",J).val();u.attr("src",t+"?id="+I+"&modal=1");u.setButtons({})}},{html:" "+ProcessWire.config.InputfieldCKEditor.pwimage.cancelBtn,"class":"ui-priority-secondary",click:function(){u.dialog("close")}}];u.setButtons(n);u.setTitle(" "+H.find("title").html())}else{var n=[];jQuery("button.pw-modal-button, button[type=submit]:visible",H).each(function(){var J=jQuery(this);var I={html:J.html(),click:function(){J.click()}};n.push(I);if(!J.hasClass("pw-modal-button-visible")){J.hide()}});var G={html:" "+ProcessWire.config.InputfieldCKEditor.pwimage.cancelBtn,"class":"ui-priority-secondary",click:function(){u.dialog("close")}};n.push(G);u.setButtons(n)}})}})(); \ No newline at end of file +(function(){CKEDITOR.plugins.add("pwimage",{requires:"dialog",init:function(c){var d="pwimage";var f="img[alt,id,!src,title,width](align_left,align_center,align_right,hidpi,align-left,align-center,align-right);a[!href];figure{width}(align_left,align_center,align_right,hidpi,align-left,align-center,align-right);figcaption;";var e="img[alt,src]";c.addCommand(d,{allowedContent:f,requiredContent:e,exec:b});c.ui.addButton("PWImage",{label:c.lang.common.image,command:d,hidpi:true,icon:(CKEDITOR.env.hidpi?this.path+"images/hidpi/pwimage.png":this.path+"images/pwimage.png")});c.on("doubleclick",function(g){var h=g.data.element;if((h.is("img"))&&!h.data("cke-realelement")&&!h.isReadOnly()){g.cancel();c.commands.pwimage.exec()}});if(c.addMenuItems){c.addMenuItems({image:{label:c.lang.image.menu,command:"pwimage",group:"image"}})}if(c.contextMenu){c.contextMenu.addListener(function(g,h){if(a(c,g)){return{image:CKEDITOR.TRISTATE_OFF}}})}}});function a(d,c){if(!c){var e=d.getSelection();c=e.getSelectedElement()}if(c&&c.is("img")&&!c.data("cke-realelement")&&!c.isReadOnly()){return c}}function b(h){var o=jQuery("#Inputfield_id");if(o.length){var p=o.val()}else{var p=jQuery("#"+h.name).closest(".Inputfield").attr("data-pid")}var j=p;var C="";var k="";var s=0;var B=0;var y="";var i="";var c=false;var F=h.getSelection();var G=F.getSelectedElement();var z=F.getStartElement();var D=jQuery(z);var g=z.getParent();var r=g.getParent();var m=D.attr("src");var q=null;var E=null;var v=null;var e=g.$.nodeName.toUpperCase();var l=r?r.$.nodeName.toUpperCase():"";var A=ckeGetProcessWireConfig(h);if(A&&A.pwAssetPageID){p=A.pwAssetPageID}F.lock();h.lockSelection();if(l=="FIGURE"){E=jQuery(r.getOuterHtml());v=E.find("figcaption");E.find("img").remove()}else{if(e=="FIGURE"){E=jQuery(g.getOuterHtml());v=E.find("figcaption");E.find("img").remove()}}if(e==="A"){q=jQuery(g.getOuterHtml());q.find("img").remove()}if(m){k=E?E.attr("class"):D.attr("class");c=k&&k.indexOf("hidpi")>-1;s=D.attr("width");B=D.attr("height");y=D.attr("alt");i=e==="A"?g.$.href:"";var x=m.split("/");C=x.pop();x=x.reverse();p="";for(var w=0;w "+ProcessWire.config.InputfieldCKEditor.pwimage.selectLabel,open:function(){if(jQuery(".cke_maximized").length>0){jQuery(".ui-dialog").css("z-index",9999);jQuery(".ui-widget-overlay").css("z-index",9998)}}};var u=pwModalWindow(t+f,d,"large");u.load(function(){var I=u.contents();if(I.find("#selected_image").length>0){var n=[{html:" "+ProcessWire.config.InputfieldCKEditor.pwimage.insertBtn,click:function(){function O(U){var ae=u.contents();var V=jQuery("#selected_image",ae);var W=V.attr("width");var af=V.attr("height");var aa=jQuery("#selected_image_description",ae).val();var ah=jQuery("#selected_image_caption",ae).is(":checked")?true:false;var ad=jQuery("#selected_image_hidpi",ae).is(":checked")?true:false;var ag=V.removeClass("ui-resizable No Alignment resizable_setup").removeClass("rotate90 rotate180 rotate270 rotate-90 rotate-180 rotate-270").removeClass("flip_vertical flip_horizontal").attr("class");var T=jQuery("#selected_image_link",ae);var ab=T.is(":checked")?T.val():"";var ac=jQuery("").attr("src",U).attr("alt",aa);if(ad){ag+=(ag.length>0?" ":"")+"hidpi"}if(ah===false){ac.addClass(ag)}if(W>0&&V.attr("data-nosize")!="1"){ac.attr("width",W)}if(q){if(ab&&ab.length>0){q.attr("href",ab).attr("data-cke-saved-href",ab)}else{if(T.attr("data-was-checked")==1){q=null}}if(q!==null){q.append(ac);ac=q}}else{if(ab&&ab.length>0){var Y=jQuery("
").attr("href",ab).append(ac);ac=Y}}if(ah){var X=jQuery("
");if(ag.length){X.addClass(ag)}if(!v){v=jQuery("
");if(aa.length>1){v.append(aa)}else{v.append(ProcessWire.config.InputfieldCKEditor.pwimage.captionLabel)}}if(v){X.append(v)}X.prepend(ac);ac=X}if(l==="FIGURE"){h.unlockSelection();F.unlock();F.selectElement(r)}else{if(e==="A"||e=="FIGURE"){h.unlockSelection();F.unlock();F.selectElement(g)}}var Z=ac[0].outerHTML;h.insertHtml(Z);h.fire("change");u.dialog("close")}var Q=u.contents();var J=jQuery("#selected_image",Q);u.dialog("disable");u.setTitle(" "+ProcessWire.config.InputfieldCKEditor.pwimage.savingNote);J.removeClass("resized");var K=J.attr("width");if(!K){K=J.width()}var R=J.attr("height");if(!R){R=J.height()}var L=J.attr("src");var S=jQuery("#page_id",Q).val();var P=jQuery("#selected_image_hidpi",Q).is(":checked")?1:0;var N=parseInt(jQuery("#selected_image_rotate",Q).val());L=L.substring(L.lastIndexOf("/")+1);var M=t+"resize?id="+S+"&file="+L+"&width="+K+"&height="+R+"&hidpi="+P;if(N){M+="&rotate="+N}if(J.hasClass("flip_horizontal")){M+="&flip=h"}else{if(J.hasClass("flip_vertical")){M+="&flip=v"}}jQuery.get(M,function(U){var T=jQuery("
").html(U);var V=T.find("#selected_image").attr("src");O(V)})}},{html:" "+ProcessWire.config.InputfieldCKEditor.pwimage.selectBtn,"class":"ui-priority-secondary",click:function(){var K=u.contents();var J=jQuery("#page_id",K).val();u.attr("src",t+"?id="+J+"&modal=1");u.setButtons({})}},{html:" "+ProcessWire.config.InputfieldCKEditor.pwimage.cancelBtn,"class":"ui-priority-secondary",click:function(){u.dialog("close")}}];u.setButtons(n);u.setTitle(" "+I.find("title").html())}else{var n=[];jQuery("button.pw-modal-button, button[type=submit]:visible",I).each(function(){var K=jQuery(this);var J={html:K.html(),click:function(){K.click()}};n.push(J);if(!K.hasClass("pw-modal-button-visible")){K.hide()}});var H={html:" "+ProcessWire.config.InputfieldCKEditor.pwimage.cancelBtn,"class":"ui-priority-secondary",click:function(){u.dialog("close")}};n.push(H);u.setButtons(n)}})}})(); \ No newline at end of file diff --git a/wire/modules/Process/ProcessPageLister/ProcessPageLister.module b/wire/modules/Process/ProcessPageLister/ProcessPageLister.module index 6b1c38d4..b4e96936 100644 --- a/wire/modules/Process/ProcessPageLister/ProcessPageLister.module +++ b/wire/modules/Process/ProcessPageLister/ProcessPageLister.module @@ -906,19 +906,20 @@ class ProcessPageLister extends Process implements ConfigurableModule { $showIncludeWarnings = $this->showIncludeWarnings; // whether to show warning message about removed include modes if($user->isSuperuser()) { - if(!preg_match('/(^|\s|,)include=/', $selector)) { + if(!preg_match('/(^|,\s|,)include=/', $selector)) { $selector .= ", include=unpublished"; } return $selector; } - if(!preg_match('/(^|\s|,)include=/', $selector)) { + if(!preg_match('/(^|,\s|,)include=/', $selector)) { // if user has page-edit access, they can see unpublished pages by default if($user->hasPermission('page-edit')) { $selector .= ", include=unpublished"; } } - + + /** @var Selectors $selectors */ $selectors = $this->wire(new Selectors($selector)); $templates = array(); $changed = false;