From 94aa5018835b53e6dc851bb79eea8aa9da9d6398 Mon Sep 17 00:00:00 2001 From: Vincent Vanwaelscappel Date: Mon, 8 Aug 2022 19:45:14 +0200 Subject: [PATCH] wait #5374 @1.5 --- app/Models/Traits/PublicationSettings.php | 5 +- .../fields/fluidbook_composition.blade.php | 116 +++++++++++++++--- 2 files changed, 103 insertions(+), 18 deletions(-) diff --git a/app/Models/Traits/PublicationSettings.php b/app/Models/Traits/PublicationSettings.php index 237e5586d..6e8afeba1 100644 --- a/app/Models/Traits/PublicationSettings.php +++ b/app/Models/Traits/PublicationSettings.php @@ -10,6 +10,7 @@ use Cubist\Backpack\Magic\Fields\FilesOrURL; use Cubist\Backpack\Magic\Fields\FormSection; use Cubist\Backpack\Magic\Fields\FormSeparator; use Cubist\Backpack\Magic\Fields\FormSuperSection; +use Cubist\Backpack\Magic\Fields\Hidden; use Cubist\Backpack\Magic\Fields\Integer; use Cubist\Backpack\Magic\Fields\LongText; use Cubist\Backpack\Magic\Fields\Number; @@ -374,7 +375,7 @@ trait PublicationSettings 'store_in' => 'settings', 'translatable' => false, ]); - $this->addField('rasterizePages', Textarea::class, $this->__('Ecraser les pages'), [ + $this->addField('rasterizePages', Hidden::class, $this->__('Ecraser les pages'), [ 'v2' => '{"type":"textarea","default":"","editable":true,"label":"\\u00a7!\\u00a7Ecraser les pages!\\u00a7!","hint":"1-3,5 = 1,2,3,5","grade":1}', 'hint' => '1-3,5 = 1,2,3,5', 'default' => '', @@ -382,7 +383,7 @@ trait PublicationSettings 'store_in' => 'settings', 'translatable' => false, ]); - $this->addField('vectorPages', Textarea::class, $this->__('Conserver les pages en vecteur'), [ + $this->addField('vectorPages', Hidden::class, $this->__('Conserver les pages en vecteur'), [ 'v2' => '{"type":"textarea","default":"","editable":true,"label":"\\u00a7!\\u00a7Conserver les pages en vecteur!\\u00a7!","hint":"1-3,5 = 1,2,3,5","grade":1}', 'hint' => '1-3,5 = 1,2,3,5', 'default' => '', diff --git a/resources/views/fields/fluidbook_composition.blade.php b/resources/views/fields/fluidbook_composition.blade.php index 6fcd987b6..dbbe0f39a 100644 --- a/resources/views/fields/fluidbook_composition.blade.php +++ b/resources/views/fields/fluidbook_composition.blade.php @@ -12,14 +12,17 @@ var data = JSON.parse($("#compositionField").val()); var numbers = $('input[name="page_numbers"]').val().split(','); var sizes = $("#compositionField").data('doc-sizes'); - + var vectors = parseRange($('input[name="vectorPages"]').val()); + var rasters = parseRange($('input[name="rasterizePages"]').val()); $.each(data, function (pageNr, page) { + pageNr = parseInt(pageNr); var size = sizes[page[0]]; if (size === undefined) { size = [210, 297] } - addPage(page[0], page[1], numbers[pageNr - 1], size); + var conversion = rasters.indexOf(pageNr) >= 0 ? 'raster' : (vectors.indexOf(pageNr) >= 0 ? 'vector' : 'default'); + addPage(page[0], page[1], numbers[pageNr - 1], conversion, size); }); var composition = $('#composition_pages').get(0); @@ -42,10 +45,6 @@ } }); - // $(document).on('blur', '#pagenumber_input', function () { - // $("#pagenumber_input").remove(); - // }); - $(document).on('change blur', '#pagenumber_input', function () { var v = $(this).val(); @@ -219,14 +218,28 @@ function updateComposition() { var res = {}; var numbers = []; + var raster = []; + var vector = []; var i = 1; $("#composition_pages .page").each(function () { res[i] = $(this).data('id'); numbers.push($(this).find('span').text()); + switch ($(this).attr('data-conversion')) { + case 'raster': + raster.push($(this).index() + 1); + break; + case 'vector': + vector.push($(this).index() + 1); + break; + default: + break; + } i++; }); - $("#compositionField").val(JSON.stringify(res)); + $("#compositionFiel").val(JSON.stringify(res)); $('input[name="page_numbers"]').val(numbers.join(',')); + $('input[name="vectorPages"]').val(vector.join(',')); + $('input[name="rasterizePages"]').val(raster.join(',')); } function compositionSelectAll() { @@ -257,24 +270,24 @@ return $("#composition_pages .page.selected").length > 0; } - function addPage(document_id, document_page, pageNumber, size, selector, operation) { + function addPage(document_id, document_page, pageNumber, conversion, size, selector, operation) { if (selector === undefined) { selector = "#composition_pages"; } if (operation === undefined) { operation = 'append'; } - $(selector)[operation](getPage(document_id, document_page, pageNumber, size)); + $(selector)[operation](getPage(document_id, document_page, pageNumber, conversion, size)); } - function getPage(document_id, document_page, pageNumber, size) { - return '
' + pageNumber + '
'; + function getPage(document_id, document_page, pageNumber, conversion, size) { + return '
' + pageNumber + '
'; } function addPages(pages, selector, operation) { var p = ''; $.each(pages, function (k, v) { - p += getPage(v.document_id, v.document_page, v.pageNumber, v.size); + p += getPage(v.document_id, v.document_page, v.pageNumber, 'default', v.size); }); if (selector === undefined) { selector = "#composition_pages"; @@ -298,8 +311,44 @@ $("#compositionUploadBrowse").click(); } - function compositionContextMulti() { + function compositionContextConversionSettings() { return { + sepconvset: "---------", + foldconversion: { + name: "{{__('Paramètres de conversion')}}", + items: { + conversiondefault: { + name: "{{__('Textes en vecteur')}}", + callback: function (key, opt) { + compositionConversion('default'); + }, + }, + conversionraster: { + name: "{{__('Tout image')}}", + callback: function (key, opt) { + compositionConversion('raster'); + }, + }, + conversionvector: { + name: "{{__('Tout vecteur')}}", + callback: function (key, opt) { + compositionConversion('vector'); + }, + }, + } + } + } + } + + function compositionConversion(type) { + $.each(selected, function (k, v) { + $(v).attr('data-conversion', type); + }); + updateComposition(); + } + + function compositionContextMulti() { + return $.extend({ selectall: { name: "{{__('Tout sélectionner')}}", callback: function (key, opt) { @@ -330,7 +379,8 @@ compositionBrowse('replace', selection); } }, - }; + + }, compositionContextConversionSettings()); } function getSelectedPages() { @@ -342,7 +392,7 @@ } function compositionContextSimple() { - return { + return $.extend({ selectall: { name: "{{__('Tout sélectionner')}}", callback: function (key, opt) { @@ -404,7 +454,7 @@ }, }, - } + }, compositionContextConversionSettings()); } function getPageNumber() { @@ -574,6 +624,40 @@ $(".pdfselected").removeClass('pdfselected'); } + function parseRange(string) { + if (string === undefined) { + return []; + } + string = string.replace(/;/g, ','); + let res = []; + let m; + + for (let str of string.split(",").map((str) => str.trim())) { + // just a number + if (/^-?\d+$/.test(str)) { + res.push(parseInt(str, 10)); + } else if ( + (m = str.match(/^(-?\d+)(-|\.\.\.?|\u2025|\u2026|\u22EF)(-?\d+)$/)) + ) { + // 1-5 or 1..5 (equivalent) or 1...5 (doesn't include 5) + let [_, lhs, sep, rhs] = m; + + if (lhs && rhs) { + lhs = parseInt(lhs); + rhs = parseInt(rhs); + const incr = lhs < rhs ? 1 : -1; + + // Make it inclusive by moving the right 'stop-point' away by one. + if (sep === "-" || sep === ".." || sep === "\u2025") rhs += incr; + + for (let i = lhs; i !== rhs; i += incr) res.push(i); + } + } + } + + return res; + } + initPages(); }); -- 2.39.5