]> _ Git - fluidbook-toolbox.git/commitdiff
wait #5374 @1.5
authorVincent Vanwaelscappel <vincent@cubedesigners.com>
Mon, 8 Aug 2022 17:45:14 +0000 (19:45 +0200)
committerVincent Vanwaelscappel <vincent@cubedesigners.com>
Mon, 8 Aug 2022 17:45:14 +0000 (19:45 +0200)
app/Models/Traits/PublicationSettings.php
resources/views/fields/fluidbook_composition.blade.php

index 237e5586d3d12d8506dcfa490c37cdcabcb59e87..6e8afeba1f78b92634dcb65604f06ec79a73ec01 100644 (file)
@@ -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' => '',
index 6fcd987b6c525b8e96c602fcff60608a19f11bc9..dbbe0f39a6c9ff04ac7c0f3252610a1dff247fe8 100644 (file)
                     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);
                         }
                     });
 
-                    // $(document).on('blur', '#pagenumber_input', function () {
-                    //     $("#pagenumber_input").remove();
-                    // });
-
                     $(document).on('change blur', '#pagenumber_input', function () {
 
                         var v = $(this).val();
                 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() {
                     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 '<div class="page" data-id="[' + document_id + ',' + document_page + ']"><div class="handle"><img width="' + size[0] + '" height="' + size[1] + '" src="/fluidbook-publication/docs/' + document_id + '/thumb_' + document_page + '.jpg" /></div><span>' + pageNumber + '</span></div>';
+                function getPage(document_id, document_page, pageNumber, conversion, size) {
+                    return '<div class="page" data-conversion="' + conversion + '" data-id="[' + document_id + ',' + document_page + ']"><div class="handle"><img width="' + size[0] + '" height="' + size[1] + '" src="/fluidbook-publication/docs/' + document_id + '/thumb_' + document_page + '.jpg" /></div><span>' + pageNumber + '</span></div>';
                 }
 
                 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";
                     $("#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) {
                                 compositionBrowse('replace', selection);
                             }
                         },
-                    };
+
+                    }, compositionContextConversionSettings());
                 }
 
                 function getSelectedPages() {
                 }
 
                 function compositionContextSimple() {
-                    return {
+                    return $.extend({
                         selectall: {
                             name: "{{__('Tout sélectionner')}}",
                             callback: function (key, opt) {
 
                             },
                         },
-                    }
+                    }, compositionContextConversionSettings());
                 }
 
                 function getPageNumber() {
                     $(".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();
             });
         </script>