From: Vincent Vanwaelscappel Date: Wed, 7 Dec 2022 17:44:30 +0000 (+0100) Subject: wip #5468 @12 X-Git-Url: http://git.cubedesigners.com/?a=commitdiff_plain;h=2c6302576d22cd44a8c7a492b044cdee562621b4;p=fluidbook-toolbox.git wip #5468 @12 --- diff --git a/.docker/docker-compose.yml b/.docker/docker-compose.yml index 055e8f397..8ee1e7132 100644 --- a/.docker/docker-compose.yml +++ b/.docker/docker-compose.yml @@ -14,7 +14,8 @@ services: - '/home/toolbox/www/storage/app/public/:/application/public/storage/' - '/home/toolbox/www/.docker/config/php.ini:/etc/php/8.1/fpm/conf.d/99-overrides.ini' - '/home/toolbox/www/.docker/config/cron/crontab:/etc/crontab' - - '/mnt/sshfs/godzilla/data/fluidbook/docs/:/application/protected/fluidbook/docs/' + - '/mnt/sshfs/godzilla/data/fluidbook/docs/:/application/protected/fluidbookpublication/docs/' + - '/data/extranet/www/fluidbook/books/working/:/application/protected/fluidbookpublication/working/' - '/home/extranet:/home/extranet' - '/data/extranet:/data/extranet' ports: @@ -55,7 +56,8 @@ services: - '/home/toolbox/www/storage/app/public/:/application/public/storage/' - '/home/toolbox/www/.docker/config/php.ini:/etc/php/8.1/fpm/conf.d/99-overrides.ini' - '/home/toolbox/www/.docker/config/cron/crontab:/etc/crontab' - - '/mnt/sshfs/godzilla/data/fluidbook/docs/:/application/protected/fluidbook/docs/' + - '/mnt/sshfs/godzilla/data/fluidbook/docs/:/application/protected/fluidbookpublication/docs/' + - '/data/extranet/www/fluidbook/books/working/:/application/protected/fluidbookpublication/working/' - '/home/extranet:/home/extranet' - '/data/extranet:/data/extranet' tmpfs: diff --git a/app/Console/Commands/WorkshopMigration.php b/app/Console/Commands/WorkshopMigration.php index b02f0238b..7da8eef26 100644 --- a/app/Console/Commands/WorkshopMigration.php +++ b/app/Console/Commands/WorkshopMigration.php @@ -190,7 +190,6 @@ class WorkshopMigration extends CubistCommand foreach ($q->get() as $e) { $this->line('Import ' . $e->book_id); - $oldRoot = $this->_oldRoot . 'books/working/' . $e->book_id . '/'; $c = new FluidbookPublication(); $c->setIncrementing(false); $c->id = $e->book_id; diff --git a/app/Jobs/Tools/FluidbookAssetsDownloader.php b/app/Jobs/Tools/FluidbookAssetsDownloader.php index 53596fc26..2454cc388 100644 --- a/app/Jobs/Tools/FluidbookAssetsDownloader.php +++ b/app/Jobs/Tools/FluidbookAssetsDownloader.php @@ -24,7 +24,7 @@ class FluidbookAssetsDownloader extends Base throw new \Exception('Fluidbook has not be set'); } $this->setJobName(__('Téléchargement massif d\'assets dans un fluidbook')); - $this->dest = '/home/extranet/www/fluidbook/books/working/' . $fluidbook . '/'; + $this->dest = '/application/protected/fluidbookpublication/working/' . $fluidbook . '/'; if ($folder !== 'working') { $this->dest .= $folder . '/'; } diff --git a/app/Models/FluidbookDocument.php b/app/Models/FluidbookDocument.php index 442845c0f..ded006f17 100644 --- a/app/Models/FluidbookDocument.php +++ b/app/Models/FluidbookDocument.php @@ -17,7 +17,7 @@ use Illuminate\Support\Facades\Cache; class FluidbookDocument extends ToolboxModel { - public const WS_DOCS = '/application/protected/fluidbook/docs/'; + public const WS_DOCS = '/application/protected/fluidbookpublication/docs/'; protected $table = 'fluidbook_document'; protected $_options = ['name' => 'fluidbook-document', 'singular' => 'document', diff --git a/app/Models/FluidbookPublication.php b/app/Models/FluidbookPublication.php index 0519c9e9c..9cba16bce 100644 --- a/app/Models/FluidbookPublication.php +++ b/app/Models/FluidbookPublication.php @@ -183,7 +183,7 @@ class FluidbookPublication extends ToolboxSettingsModel */ protected function _getFreeFileBaseDirectory() { - return '/data/extranet/www/fluidbook/books/working/' . $this->id; + return '/application/protected/fluidbookpublication/working/' . $this->id; } /** @@ -320,7 +320,7 @@ class FluidbookPublication extends ToolboxSettingsModel public function getAssetDir() { - return Files::mkdir('/data/extranet/www/fluidbook/books/working/' . $this->id); + return Files::mkdir('/application/protected/fluidbookpublication/working/' . $this->id); } public function getCompositionUpdate(): int diff --git a/package-lock.json b/package-lock.json index 895aff9e1..a2037b847 100644 --- a/package-lock.json +++ b/package-lock.json @@ -9,8 +9,8 @@ "codemirror": "^5", "command-line-args": "^5.2.1", "jquery-contextmenu": "^2.9.2", + "jquery-form": "^4.3.0", "jquery.scrollto": "^2.1.3", - "keymaster": "^1.6.2", "keymaster-reloaded": "^1.7.2", "lz4js": "^0.2.0", "noty": "^3.2.0-beta-deprecated", @@ -21,6 +21,7 @@ "puppeteer": "^17.0.0", "select2": "^4.1.0-rc.0", "select2-bootstrap-theme": "^0.1.0-beta.10", + "spectrum-colorpicker": "^1.8.1", "tippy.js": "^6.3.7" }, "devDependencies": { @@ -7587,6 +7588,14 @@ "jquery": ">=1.8.2" } }, + "node_modules/jquery-form": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/jquery-form/-/jquery-form-4.3.0.tgz", + "integrity": "sha512-q3uaVCEWdLOYUCI6dpNdwf/7cJFOsUgdpq6r0taxtGQ5NJSkOzofyWm4jpOuJ5YxdmL1FI5QR+q+HB63HHLGnQ==", + "dependencies": { + "jquery": ">=1.7.2" + } + }, "node_modules/jquery.scrollto": { "version": "2.1.3", "resolved": "https://registry.npmjs.org/jquery.scrollto/-/jquery.scrollto-2.1.3.tgz", @@ -7665,11 +7674,6 @@ "graceful-fs": "^4.1.6" } }, - "node_modules/keymaster": { - "version": "1.6.2", - "resolved": "https://registry.npmjs.org/keymaster/-/keymaster-1.6.2.tgz", - "integrity": "sha512-OvA/AALN8IDKKkTk2Z+bDrzs/SQao4lo/QPbwSdDvm+frxfiYiYCSn1aHFUypJY3SruAO1y/c771agBmTXqUtg==" - }, "node_modules/keymaster-reloaded": { "version": "1.7.2", "resolved": "https://registry.npmjs.org/keymaster-reloaded/-/keymaster-reloaded-1.7.2.tgz", @@ -12062,6 +12066,11 @@ "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", "dev": true }, + "node_modules/spectrum-colorpicker": { + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/spectrum-colorpicker/-/spectrum-colorpicker-1.8.1.tgz", + "integrity": "sha512-x1picQ5giVso71ESII7jZ3+ZFdit8WthNkzwJqLNdPDPzrltKUQGpTohWyPfSAID+bK1zGdO6bDbSh1S6GoLYA==" + }, "node_modules/split-string": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/split-string/-/split-string-3.1.0.tgz", @@ -21241,6 +21250,14 @@ "jquery": "^3.5.0" } }, + "jquery-form": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/jquery-form/-/jquery-form-4.3.0.tgz", + "integrity": "sha512-q3uaVCEWdLOYUCI6dpNdwf/7cJFOsUgdpq6r0taxtGQ5NJSkOzofyWm4jpOuJ5YxdmL1FI5QR+q+HB63HHLGnQ==", + "requires": { + "jquery": ">=1.7.2" + } + }, "jquery.scrollto": { "version": "2.1.3", "resolved": "https://registry.npmjs.org/jquery.scrollto/-/jquery.scrollto-2.1.3.tgz", @@ -21304,11 +21321,6 @@ "graceful-fs": "^4.1.6" } }, - "keymaster": { - "version": "1.6.2", - "resolved": "https://registry.npmjs.org/keymaster/-/keymaster-1.6.2.tgz", - "integrity": "sha512-OvA/AALN8IDKKkTk2Z+bDrzs/SQao4lo/QPbwSdDvm+frxfiYiYCSn1aHFUypJY3SruAO1y/c771agBmTXqUtg==" - }, "keymaster-reloaded": { "version": "1.7.2", "resolved": "https://registry.npmjs.org/keymaster-reloaded/-/keymaster-reloaded-1.7.2.tgz", @@ -24912,6 +24924,11 @@ } } }, + "spectrum-colorpicker": { + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/spectrum-colorpicker/-/spectrum-colorpicker-1.8.1.tgz", + "integrity": "sha512-x1picQ5giVso71ESII7jZ3+ZFdit8WthNkzwJqLNdPDPzrltKUQGpTohWyPfSAID+bK1zGdO6bDbSh1S6GoLYA==" + }, "split-string": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/split-string/-/split-string-3.1.0.tgz", diff --git a/package.json b/package.json index f9040b15b..12597d54d 100644 --- a/package.json +++ b/package.json @@ -47,6 +47,7 @@ "codemirror": "^5", "command-line-args": "^5.2.1", "jquery-contextmenu": "^2.9.2", + "jquery-form": "^4.3.0", "jquery.scrollto": "^2.1.3", "keymaster-reloaded": "^1.7.2", "lz4js": "^0.2.0", @@ -58,6 +59,7 @@ "puppeteer": "^17.0.0", "select2": "^4.1.0-rc.0", "select2-bootstrap-theme": "^0.1.0-beta.10", + "spectrum-colorpicker": "^1.8.1", "tippy.js": "^6.3.7" } } diff --git a/public/images/linkeditor/dots-animated.svg b/public/images/linkeditor/dots-animated.svg new file mode 100644 index 000000000..590de1af0 --- /dev/null +++ b/public/images/linkeditor/dots-animated.svg @@ -0,0 +1,30 @@ + + + + + + + + + + + diff --git a/public/images/linkeditor/dots-dark-animated.svg b/public/images/linkeditor/dots-dark-animated.svg new file mode 100644 index 000000000..08f4c8d1c --- /dev/null +++ b/public/images/linkeditor/dots-dark-animated.svg @@ -0,0 +1,30 @@ + + + + + + + + + + + diff --git a/public/images/linkeditor/dots-dark.svg b/public/images/linkeditor/dots-dark.svg new file mode 100644 index 000000000..d41b0c936 --- /dev/null +++ b/public/images/linkeditor/dots-dark.svg @@ -0,0 +1,9 @@ + + + + + + + + diff --git a/public/images/linkeditor/dots.svg b/public/images/linkeditor/dots.svg new file mode 100644 index 000000000..a1f1a17b8 --- /dev/null +++ b/public/images/linkeditor/dots.svg @@ -0,0 +1,9 @@ + + + + + + + + diff --git a/resources/linkeditor/js/form.js b/resources/linkeditor/js/form.js deleted file mode 100644 index 326ef621e..000000000 --- a/resources/linkeditor/js/form.js +++ /dev/null @@ -1,2 +0,0 @@ -window.$ = window.jQuery = require('jquery'); -window.key = require('keymaster-reloaded'); diff --git a/resources/linkeditor/js/linkeditor.form.js b/resources/linkeditor/js/linkeditor.form.js index 6672fcbcf..463d337ab 100644 --- a/resources/linkeditor/js/linkeditor.form.js +++ b/resources/linkeditor/js/linkeditor.form.js @@ -21,8 +21,33 @@ LinkeditorForm.prototype = { if ($this._maskChangeEvent) { return; } + $this.saveFormDataInLink(); }); + + + $(document).on('change', ".freefile-file-input", function () { + var form = $('#linkupload').clone(); + + + var id = 'linkupload_' + Math.round(Math.random() * 10000000); + $(form).attr('id', id); + $(this).attr('form', id); + $('body').append(form); + + var parent = $(this).closest('.freefile-file'); + $(parent).addClass('loading'); + var f = $(form).ajaxSubmit({dataType: 'json'}); + var xhr = f.data('jqxhr'); + xhr.done(function (data) { + var tf = $(parent).find('.freefile-text-input'); + tf.val(data[0]); + tf.trigger('change'); + $(parent).removeClass('loading'); + }); + }); + + }, saveFormDataInLink: function () { @@ -91,6 +116,7 @@ LinkeditorForm.prototype = { container.append(form); this.initSelect2(); + this.initSpectrum(); }, updateFormData: function (form) { @@ -167,5 +193,29 @@ LinkeditorForm.prototype = { }); }, + initSpectrum: function () { + $("#linkeditor-panel-form .spectrum:not(.init)").each(function () { + var t=$(this); + $(this).spectrum({ + preferredFormat: 'hex3', + showAlpha: true, + allowEmpty: false, + showInput: true, + showInitial: true, + showButtons:false, + flat: true, + move:function(color){ + t.val(color.toString()); + $(t).trigger('change'); + }, + dragend:function(color){ + t.val(color.toString()); + $(t).trigger('change'); + } + }); + $(this).addClass('init'); + }); + } + }; module.exports = LinkeditorForm; diff --git a/resources/linkeditor/js/linkeditor.js b/resources/linkeditor/js/linkeditor.js index 229b8f78e..f3d9e12ef 100644 --- a/resources/linkeditor/js/linkeditor.js +++ b/resources/linkeditor/js/linkeditor.js @@ -33,6 +33,9 @@ window.key.filter = function (event) { require('jquery.scrollto'); require('jquery-contextmenu'); +require('jquery-form'); +require('spectrum-colorpicker'); +import 'spectrum-colorpicker/spectrum.css'; require('select2'); import 'select2/dist/css/select2.css'; diff --git a/resources/linkeditor/style/form.sass b/resources/linkeditor/style/form.sass index 507dc2be3..e8f714700 100644 --- a/resources/linkeditor/style/form.sass +++ b/resources/linkeditor/style/form.sass @@ -4,7 +4,6 @@ #linkeditor-form-templates display: none - .linkeditor-linktype &::before display: inline-block @@ -69,19 +68,31 @@ .freefile-file position: relative + &.loading + &::after + background-image: url("/images/linkeditor/dots-animated.svg") + @media (prefers-color-scheme: dark) + background-image: url("/images/linkeditor/dots-dark-animated.svg") + input + pointer-events: none + cursor: wait + &::after - content: "..." + content: "" position: absolute display: block padding: 6px right: 0 - top: -3px - width: 34px - height: 34px + top: 6px + width: 25px + height: 25px + background-image: url("/images/linkeditor/dots.svg") color: var(--field-color) box-sizing: border-box pointer-events: none font-size: 17px + @media (prefers-color-scheme: dark) + background-image: url("/images/linkeditor/dots-dark.svg") input[type=file] position: absolute @@ -91,6 +102,7 @@ height: 100% cursor: pointer + .input-group position: relative .input-group-append diff --git a/resources/linkeditor/webpack.mix.js b/resources/linkeditor/webpack.mix.js index 423b5efba..8088c5499 100644 --- a/resources/linkeditor/webpack.mix.js +++ b/resources/linkeditor/webpack.mix.js @@ -1,4 +1,3 @@ const mix = require("laravel-mix"); - mix.setPublicPath('public/packages/linkeditor').js('resources/linkeditor/js/linkeditor.js', 'js') .sass('resources/linkeditor/style/style.sass', 'css').options({processCssUrls: false}).version(); diff --git a/resources/views/fluidbook_publication/link_editor.blade.php b/resources/views/fluidbook_publication/link_editor.blade.php index e6e51a3ef..22a87ba7a 100644 --- a/resources/views/fluidbook_publication/link_editor.blade.php +++ b/resources/views/fluidbook_publication/link_editor.blade.php @@ -15,6 +15,10 @@ ]; $rulers=!count($rulers)?'{}':json_encode($rulers); + + if(can('fluidbook-publication:links:edit-animations')){ + $links=\Fluidbook\Tools\Links\Link::decryptLinks($links); + } $links=!count($links)?'{}':json_encode($links); /** @var \App\Models\User $user */ $user=backpack_user(); @@ -132,6 +136,12 @@ @endphp @endforeach +
+ + + +
@endsection @push('linkeditor_scripts') diff --git a/resources/views/layouts/linkeditor.blade.php b/resources/views/layouts/linkeditor.blade.php index f2ba37aac..c3fb87f71 100644 --- a/resources/views/layouts/linkeditor.blade.php +++ b/resources/views/layouts/linkeditor.blade.php @@ -21,5 +21,6 @@ @yield('content') @yield('linkeditor_scripts') @stack('linkeditor_scripts') +