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:
@@ -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) {
|
||||
|
@@ -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))})});
|
@@ -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');
|
||||
|
@@ -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
@@ -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;
|
||||
|
Reference in New Issue
Block a user