1
0
mirror of https://github.com/processwire/processwire.git synced 2025-08-13 18:24:57 +02:00

Some adjustments to InputfieldCKEditor for future support of external asset pages. Not currently enabled, just getting some foundational stuff in place for future use.

This commit is contained in:
Ryan Cramer
2018-02-23 10:56:32 -05:00
parent dd9f215247
commit 72e00189b5
6 changed files with 76 additions and 23 deletions

View File

@@ -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) {

View File

@@ -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))})});
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))})});

View File

@@ -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');

View File

@@ -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();

File diff suppressed because one or more lines are too long

View File

@@ -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;