From a6c492c30500e1b8f1051e133096be31d408fbaa Mon Sep 17 00:00:00 2001 From: Jan Kristinus Date: Sat, 23 Sep 2023 15:53:05 +0200 Subject: [PATCH 1/2] Linkaufrufe, datavars und mediapool mehr als widget bestrachten --- .../src/addons/mediapool/assets/deprecated.js | 104 +++++++++ .../src/addons/mediapool/assets/mediapool.js | 205 ++++++++++-------- redaxo/src/addons/mediapool/lib/var_media.php | 24 +- .../addons/mediapool/lib/var_medialist.php | 8 + .../addons/mediapool/pages/media.detail.php | 7 +- .../src/addons/mediapool/pages/media.list.php | 5 +- 6 files changed, 245 insertions(+), 108 deletions(-) create mode 100644 redaxo/src/addons/mediapool/assets/deprecated.js diff --git a/redaxo/src/addons/mediapool/assets/deprecated.js b/redaxo/src/addons/mediapool/assets/deprecated.js new file mode 100644 index 0000000000..5dd148a67b --- /dev/null +++ b/redaxo/src/addons/mediapool/assets/deprecated.js @@ -0,0 +1,104 @@ +/** deprecated */ +function openREXMedia(id,param) +{ + console.log("openREXMedia deprecated, use var_media markup instead"); + var mediaid = 'REX_MEDIA_'+id; + if (typeof(param) == 'undefined') + { + param = ''; + } + return newPoolWindow('index.php?page=mediapool/media' + param + '&opener_input_field=' + mediaid); +} + +/** deprecated */ +function viewREXMedia(id,param) +{ + console.log("deleteREXMedia deprecated, use var_media markup instead"); + var mediaid = 'REX_MEDIA_'+id; + var value = document.getElementById(mediaid).value; + if ( typeof(param) == 'undefined') + { + param = ''; + } + if (value != '') { + param = param + '&file_name='+ value; + return newPoolWindow('index.php?page=mediapool/media' + param + '&opener_input_field=' + mediaid); + } +} + +/** deprecated */ +function deleteREXMedia(id) +{ + console.log("deleteREXMedia deprecated, use var_media markup instead"); + var input = new getObj("REX_MEDIA_" + id).obj; + if (input !== null) { + input.value = ""; + jQuery(input).trigger('change'); + } else { + console.log("Media input field not found"); + } +} + +/** deprecated */ +function addREXMedia(id,params) +{ + console.log("addREXMedia deprecated, use var_media markup instead"); + if (typeof(params) == 'undefined') + { + params = ''; + } + return newPoolWindow('index.php?page=mediapool/upload&opener_input_field=REX_MEDIA_'+id+params); +} + +/** deprecated */ +/* + selectMedia + instead of + + use this + + */ + +function selectMedia(filename, alt) +{ + console.log("selectMedia deprecated, use var_media markup instead"); + var event = opener.jQuery.Event("rex:selectMedia"); + opener.jQuery(window).trigger(event, [filename, alt]); + if (!event.isDefaultPrevented()) { + if (rex.mediapoolOpenerInputField) { + var input = opener.document.getElementById(rex.mediapoolOpenerInputField); + if (input !== null) { + input.value = filename; + opener.jQuery(input).trigger('change'); + self.close(); + } else { + console.log("Media input field not found"); + } + } else { + self.close(); + } + } +} + + +// selectMedialist + +function selectMedialist(filename) +{ + if (rex.mediapoolOpenerInputField && 0 === rex.mediapoolOpenerInputField.indexOf('REX_MEDIALIST_')) { + var openerId = rex.mediapoolOpenerInputField.slice('REX_MEDIALIST_'.length); + var medialist = "REX_MEDIALIST_SELECT_" + openerId; + + var source = opener.document.getElementById(medialist); + var sourcelength = source.options.length; + + option = opener.document.createElement("OPTION"); + option.text = filename; + option.value = filename; + + source.options.add(option, sourcelength); + opener.writeREXMedialist(openerId); + } +} diff --git a/redaxo/src/addons/mediapool/assets/mediapool.js b/redaxo/src/addons/mediapool/assets/mediapool.js index 68b6ccdc66..220b697cbd 100644 --- a/redaxo/src/addons/mediapool/assets/mediapool.js +++ b/redaxo/src/addons/mediapool/assets/mediapool.js @@ -2,6 +2,120 @@ REDAXO Mediapool JavaScript library */ +$(document).on('rex:ready',function() { + + $(".rex-js-widget-media").each(function () { + + // todo: + // additional params + + let id = this.dataset.id; + let media_field = 'REX_MEDIA_'+id; + let params = this.dataset.params; + let category = intval(this.dataset.category); + let media_input = $(this).find("input"); + if (media_input[0] === undefined) { + console.log("Media input field " + media_field + "not found"); + } + media_input = $(media_input[0]); + + // TODO: params ergänzen aus array umbauen + params = ''; + + if(0 < category) { + params += '&rex_file_category=' + category; + } + + $(this).find("a").each(function () { + if (this.classList.contains('rex-js-widget-media-open')) { + this.onclick = function () { + return newPoolWindow('index.php?page=mediapool/media' + params + '&opener_input_field=' + media_field); + } + } + + if (this.classList.contains('rex-js-widget-media-add')) { + this.onclick = function () { + return newPoolWindow('index.php?page=mediapool/upload' + params + '&opener_input_field=' + media_field); + } + } + + if (this.classList.contains('rex-js-widget-media-delete')) { + this.onclick = function () { + media_input.val(""); + media_input.trigger('change'); + } + } + + if (this.classList.contains('rex-js-widget-media-view')) { + this.onclick = function () { + media_file_name = media_input.val(); + return newPoolWindow('index.php?page=mediapool/media' + params + '&opener_input_field=' + media_field + "&file_name=" + media_file_name); + } + } + + }); + }); + + $(".rex-js-media-select").each(function () { + this.onclick = function () { + let id = this.dataset.id || ''; + let file_name = this.dataset.file_name || ''; + let title = this.dataset.title || ''; + let select_type = this.dataset.select_type || 'single'; + + if (select_type === 'single') { + var event = opener.jQuery.Event("rex:selectMedia"); + opener.jQuery(window).trigger(event, [file_name, title]); + if (!event.isDefaultPrevented()) { + if (rex.mediapoolOpenerInputField) { + var input = opener.document.getElementById(rex.mediapoolOpenerInputField); + if (input !== null) { + input.value = file_name; + opener.jQuery(input).trigger('change'); + self.close(); + } else { + console.log("Media input field not found"); + } + } else { + self.close(); + } + } + } + + if (select_type === 'multiple') { + if (rex.mediapoolOpenerInputField && 0 === rex.mediapoolOpenerInputField.indexOf('REX_MEDIALIST_')) { + var openerId = rex.mediapoolOpenerInputField.slice('REX_MEDIALIST_'.length); + var medialist = "REX_MEDIALIST_SELECT_" + openerId; + + var source = opener.document.getElementById(medialist); + var sourcelength = source.options.length; + + option = opener.document.createElement("OPTION"); + option.text = file_name; + option.value = file_name; + + source.options.add(option, sourcelength); + opener.writeREX(openerId, 'REX_MEDIALIST_', 'REX_MEDIALIST_SELECT_'); + } + } + } + }); + +}); + +// TODO +// writeREXMedialist + + +// rex-js-media-select + + + + + + + + function setAllCheckBoxes(FieldName, mthis) { var CheckValue; @@ -57,50 +171,6 @@ function openMediaPool(id) return newPoolWindow('index.php?page=mediapool/media&opener_input_field='+ id); } -function openREXMedia(id,param) -{ - var mediaid = 'REX_MEDIA_'+id; - if (typeof(param) == 'undefined') - { - param = ''; - } - return newPoolWindow('index.php?page=mediapool/media' + param + '&opener_input_field=' + mediaid); -} - -function viewREXMedia(id,param) -{ - var mediaid = 'REX_MEDIA_'+id; - var value = document.getElementById(mediaid).value; - if ( typeof(param) == 'undefined') - { - param = ''; - } - if (value != '') { - param = param + '&file_name='+ value; - return newPoolWindow('index.php?page=mediapool/media' + param + '&opener_input_field=' + mediaid); - } -} - -function deleteREXMedia(id) -{ - var input = new getObj("REX_MEDIA_" + id).obj; - if (input !== null) { - input.value = ""; - jQuery(input).trigger('change'); - } else { - console.log("Media input field not found"); - } -} - -function addREXMedia(id,params) -{ - if (typeof(params) == 'undefined') - { - params = ''; - } - return newPoolWindow('index.php?page=mediapool/upload&opener_input_field=REX_MEDIA_'+id+params); -} - function openREXMedialist(id,param) { var medialist = 'REX_MEDIALIST_' + id; @@ -182,7 +252,7 @@ $(document).ready(function () { var url; var width = 0; - if('.svg' != value.substr(value.length - 4) && $(this).hasClass("rex-js-widget-preview-media-manager")) + if('.svg' !== value.substr(value.length - 4) && $(this).hasClass("rex-js-widget-preview-media-manager")) url = './index.php?rex_media_type='+ img_type +'&rex_media_file='+ value; else { @@ -190,17 +260,17 @@ $(document).ready(function () { width = 246; } - if(value && value.length != 0 && $.inArray(value.split('.').pop(), rex.imageExtensions)) + if(value && value.length !== 0 && $.inArray(value.split('.').pop(), rex.imageExtensions)) { // img tag nur einmalig einfuegen, ggf erzeugen wenn nicht vorhanden var img = $('img', div); - if(img.length == 0) + if(img.length === 0) { div.html(''); img = $('img', div); } img.attr('src', url); - if (width != 0) + if (width !== 0) img.attr('width', width); div.stop(true, false).slideDown("fast"); @@ -217,7 +287,7 @@ $(document).ready(function () { .on('mouseenter', '.rex-js-widget-media.rex-js-widget-preview, .rex-js-widget-medialist.rex-js-widget-preview', rexShowMediaPreview) .on('mouseleave', '.rex-js-widget-media.rex-js-widget-preview, .rex-js-widget-medialist.rex-js-widget-preview', function() { var div = $('.rex-js-media-preview', this); - if(div.css('height') != 'auto') + if(div.css('height') !== 'auto') { div.slideUp("normal"); } @@ -227,44 +297,7 @@ $(document).ready(function () { }); -function selectMedia(filename, alt) -{ - var event = opener.jQuery.Event("rex:selectMedia"); - - opener.jQuery(window).trigger(event, [filename, alt]); - if (!event.isDefaultPrevented()) { - if (rex.mediapoolOpenerInputField) { - var input = opener.document.getElementById(rex.mediapoolOpenerInputField); - if (input !== null) { - input.value = filename; - opener.jQuery(input).trigger('change'); - self.close(); - } else { - console.log("Media input field not found"); - } - } else { - self.close(); - } - } -} - -function selectMedialist(filename) -{ - if (rex.mediapoolOpenerInputField && 0 === rex.mediapoolOpenerInputField.indexOf('REX_MEDIALIST_')) { - var openerId = rex.mediapoolOpenerInputField.slice('REX_MEDIALIST_'.length); - var medialist = "REX_MEDIALIST_SELECT_" + openerId; - - var source = opener.document.getElementById(medialist); - var sourcelength = source.options.length; - - option = opener.document.createElement("OPTION"); - option.text = filename; - option.value = filename; - source.options.add(option, sourcelength); - opener.writeREXMedialist(openerId); - } -} function selectMediaListArray(files) { diff --git a/redaxo/src/addons/mediapool/lib/var_media.php b/redaxo/src/addons/mediapool/lib/var_media.php index 47718c9bd3..1b80dde898 100644 --- a/redaxo/src/addons/mediapool/lib/var_media.php +++ b/redaxo/src/addons/mediapool/lib/var_media.php @@ -57,6 +57,7 @@ protected function getOutput() */ public static function getWidget($id, $name, $value, array $args = []) { + // TODO $openParams = ''; if (isset($args['category']) && ($category = (int) $args['category'])) { $openParams .= '&rex_file_category=' . $category; @@ -75,27 +76,22 @@ public static function getWidget($id, $name, $value, array $args = []) } $disabled = ' disabled'; - $openFunc = ''; - $addFunc = ''; - $deleteFunc = ''; - $viewFunc = ''; if (rex::requireUser()->getComplexPerm('media')->hasMediaPerm()) { $disabled = ''; - $quotedId = "'" . rex_escape($id, 'js') . "'"; - $openFunc = 'openREXMedia(' . $quotedId . ', \'' . $openParams . '\');'; - $addFunc = 'addREXMedia(' . $quotedId . ', \'' . $openParams . '\');'; - $deleteFunc = 'deleteREXMedia(' . $quotedId . ');'; - $viewFunc = 'viewREXMedia(' . $quotedId . ', \'' . $openParams . '\');'; } $e = []; - $e['before'] = '
'; + $e['before'] = '
'; $e['field'] = ''; $e['functionButtons'] = ' - - - - '; + + + + '; $e['after'] = '
'; $fragment = new rex_fragment(); diff --git a/redaxo/src/addons/mediapool/lib/var_medialist.php b/redaxo/src/addons/mediapool/lib/var_medialist.php index 085a637fec..dee27ffe1b 100644 --- a/redaxo/src/addons/mediapool/lib/var_medialist.php +++ b/redaxo/src/addons/mediapool/lib/var_medialist.php @@ -88,6 +88,14 @@ public static function getWidget($id, $name, $value, array $args = []) $e = []; $e['before'] = '
'; + + $e['before'] = '
'; + + $e['field'] = ''; $e['moveButtons'] = ' diff --git a/redaxo/src/addons/mediapool/pages/media.detail.php b/redaxo/src/addons/mediapool/pages/media.detail.php index 55bd0bc08e..7e4d4ad4de 100644 --- a/redaxo/src/addons/mediapool/pages/media.detail.php +++ b/redaxo/src/addons/mediapool/pages/media.detail.php @@ -175,10 +175,9 @@ } if ('' != $openerInputField) { - $openerLink = '' . rex_i18n::msg('pool_file_get') . ''; - if (str_starts_with($openerInputField, 'REX_MEDIALIST_')) { - $openerLink = '' . rex_i18n::msg('pool_file_get') . ''; - } + $openerLink = '' . rex_i18n::msg('pool_file_get') . ''; } if ('' != $openerLink) { diff --git a/redaxo/src/addons/mediapool/pages/media.list.php b/redaxo/src/addons/mediapool/pages/media.list.php index c947cbe349..a0fe214c13 100644 --- a/redaxo/src/addons/mediapool/pages/media.list.php +++ b/redaxo/src/addons/mediapool/pages/media.list.php @@ -288,10 +288,7 @@ $openerLink = ''; if ('' != $openerInputField) { - $openerLink = '' . rex_i18n::msg('pool_file_get') . ''; - if (str_starts_with($openerInputField, 'REX_MEDIALIST_')) { - $openerLink = '' . rex_i18n::msg('pool_file_get') . ''; - } + $openerLink = '' . rex_i18n::msg('pool_file_get') . ''; } $ilink = rex_url::currentBackendPage(array_merge(['file_id' => $media->getId(), 'rex_file_category' => $rexFileCategory], $argUrl)); From 22a3fee34461864cd114afd9ff636a39f7b2a279 Mon Sep 17 00:00:00 2001 From: Jan Kristinus Date: Wed, 2 Jul 2025 16:40:40 +0200 Subject: [PATCH 2/2] Popup aktivieren ohne eine JS Funktion zu setzen --- redaxo/src/addons/mediapool/package.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/redaxo/src/addons/mediapool/package.yml b/redaxo/src/addons/mediapool/package.yml index 96d00c09f9..2c57913eda 100644 --- a/redaxo/src/addons/mediapool/package.yml +++ b/redaxo/src/addons/mediapool/package.yml @@ -7,7 +7,7 @@ rows_per_page: 100 page: title: translate:mediapool - popup: openMediaPool(); return false; + popup: 1 perm: media/hasMediaPerm prio: 20 block: system