From 0c9f195e4f8ba172c62bb268586658b98201d803 Mon Sep 17 00:00:00 2001 From: soufiane Date: Thu, 18 Dec 2025 12:44:50 +0100 Subject: [PATCH] wait #7891 11:00 --- .../MarkdownOperation.php | 28 ++-- app/Models/FluidbookPublication.php | 13 +- resources/markdowneditor/js/markdowneditor.js | 9 +- .../markdowneditor/js/markdowneditor.save.js | 2 +- .../js/markdowneditor.toolbar.js | 1 + resources/markdowneditor/style/style.sass | 29 ++++- .../link_editor_icons.blade.php | 120 ++++++++---------- .../markdown_editor.blade.php | 15 ++- 8 files changed, 126 insertions(+), 91 deletions(-) diff --git a/app/Http/Controllers/Admin/Operations/FluidbookPublication/MarkdownOperation.php b/app/Http/Controllers/Admin/Operations/FluidbookPublication/MarkdownOperation.php index e737743d4..c8b4458b8 100644 --- a/app/Http/Controllers/Admin/Operations/FluidbookPublication/MarkdownOperation.php +++ b/app/Http/Controllers/Admin/Operations/FluidbookPublication/MarkdownOperation.php @@ -21,7 +21,7 @@ trait MarkdownOperation Route::match(['get'], $segment . '/{id}/edit/markdown/versions/restore/{version}', $controller . '@restoreMarkdowns'); Route::match(['get'], $segment . '/{id}/markdown', $controller . '@getFilesById'); Route::match(['put'], $segment . '/{id}/save/markdown', $controller . '@saveMarkdown'); - Route::match(['get'], $segment . '/{id}/import/markdown', $controller . '@importMarkdown'); + Route::match(['get'], $segment . '/{id}/import/markdown/{page?}', $controller . '@importMarkdown'); } public function markdown($id) @@ -33,16 +33,17 @@ trait MarkdownOperation $token = Str::random(10); $contents = $this->getLatestMarkdown($id); - $fluidbook=FluidbookPublication::find($id); + $fluidbook = FluidbookPublication::find($id); return view('fluidbook_publication.markdown_editor', ['contents' => $contents, 'version' => 'stable', 'id' => $id, 'fluidbook' => $fluidbook, 'access' => "", 'token' => $token]); } - protected function getLatestMarkdown($book_id) { - $fluidbook=FluidbookPublication::find($book_id); + protected function getLatestMarkdown($book_id) + { + $fluidbook = FluidbookPublication::find($book_id); $dir = self::getMarkdownsDir($book_id); $filePath = $dir . 'latest.accessible.gz'; - if(file_exists($filePath)) { + if (file_exists($filePath)) { if (is_file($filePath)) { $file = gzdecode(file_get_contents($filePath)); $typeOf = gettype($file); @@ -74,7 +75,7 @@ trait MarkdownOperation $base = self::getMarkdownsDir($fluidbook_id) . '/' . time(); $latestMarkdown = self::getMarkdownsDir($fluidbook_id) . '/latest.accessible.gz'; $latestMeta = self::getMarkdownsDir($fluidbook_id) . '/latest.meta.gz'; - file_put_contents($base . '.accessible.gz', gzencode(json_encode($markdowns, JSON_UNESCAPED_SLASHES ))); + file_put_contents($base . '.accessible.gz', gzencode(json_encode($markdowns, JSON_UNESCAPED_SLASHES))); file_put_contents($base . '.meta.gz', gzencode(json_encode($meta))); copy($base . '.accessible.gz', $latestMarkdown); copy($base . '.meta.gz', $latestMeta); @@ -158,18 +159,27 @@ trait MarkdownOperation return response()->json(['success' => 'ok']); } - public function importMarkdown($fluidbook_id) + public function importMarkdown($fluidbook_id, $page) { $fluidbook = FluidbookPublication::withoutGlobalScopes()->find($fluidbook_id); $base = Files::mkdir($fluidbook->protected_path('fluidbookpublication/accessible/' . $fluidbook_id . '/')); $file = $base . 'latest.accessible.gz'; $meta = $base . 'latest.meta.gz'; + + // get latest md + $markdowns = gzdecode(file_get_contents($file)); + $markdowns = json_decode($markdowns, true)['pages']; + Files::rmdir($file); Files::rmdir($meta); - $md = $fluidbook->getAccessibleContents(); + $md = $fluidbook->getAccessibleContents('latest', $page); - $message = "Markdown importé"; + if ($page) { + $markdowns[$page] = $md['pages'][$page]; + $md['pages'] = $markdowns; + } + $message = "Markdown importé"; $this->saveMarkdown($fluidbook_id, $message, $md['pages']); return response()->json(['success' => $md['pages']]); diff --git a/app/Models/FluidbookPublication.php b/app/Models/FluidbookPublication.php index a9637bd55..69965a686 100644 --- a/app/Models/FluidbookPublication.php +++ b/app/Models/FluidbookPublication.php @@ -469,16 +469,23 @@ class FluidbookPublication extends ToolboxStatusModel } } - public function getAccessibleContents($revision = 'latest') + public function getAccessibleContents($revision = 'latest', $specificPage = null) { $base = Files::mkdir($this->protected_path('fluidbookpublication/accessible/' . $this->id . '/')); $file = $base . $revision . '.accessible.gz'; $meta = $base . $revision . '.meta.gz'; - if (!file_exists($file)) { + if (!file_exists($file) || $specificPage !== null) { if ($revision === 'latest') { $json = ['pages' => []]; - foreach ($this->getComposition() as $page => $d) { + $compo = $this->getComposition(); + if($specificPage !== null) { + $compo = array_filter($compo, function($k) use($specificPage) { + return $k == $specificPage; + }, ARRAY_FILTER_USE_KEY); + } + + foreach ($compo as $page => $d) { try { $json['pages'][$page] = file_get_contents($this->getAccessibleFile($page)); }catch (\Exception $e) { diff --git a/resources/markdowneditor/js/markdowneditor.js b/resources/markdowneditor/js/markdowneditor.js index 692002634..d47a7cdd8 100644 --- a/resources/markdowneditor/js/markdowneditor.js +++ b/resources/markdowneditor/js/markdowneditor.js @@ -346,13 +346,18 @@ MarkdownEditor.prototype = { this.my = e.pageY; }, - importMarkdown: function() { + importMarkdown: function(page = null) { $.ajax({ - url: '/fluidbook-publication/' + FLUIDBOOK_DATA.id + '/import/markdown/', + url: '/fluidbook-publication/' + FLUIDBOOK_DATA.id + '/import/markdown/'+page, success: function (data) { + $("[data-action^=import]").parent('.loading-block').removeClass('is-loading') window.location.reload(); }, }); + }, + + importSingleMarkdown: function() { + this.importMarkdown(this.currentPage) } } diff --git a/resources/markdowneditor/js/markdowneditor.save.js b/resources/markdowneditor/js/markdowneditor.save.js index f45a9ccfe..ef843c3ff 100644 --- a/resources/markdowneditor/js/markdowneditor.save.js +++ b/resources/markdowneditor/js/markdowneditor.save.js @@ -80,7 +80,7 @@ MarkdowneditorSave.prototype = { $this.markdowneditor.notification(TRANSLATIONS.error_save + ' : ' + error, 'error'); }, complete: function() { - $(".markdown-toolbar-save-block").removeClass("is-saving") + $(".markdown-toolbar-save-block").removeClass("is-saving is-loading") } }); }, diff --git a/resources/markdowneditor/js/markdowneditor.toolbar.js b/resources/markdowneditor/js/markdowneditor.toolbar.js index 8c2eb1a06..8512bf402 100644 --- a/resources/markdowneditor/js/markdowneditor.toolbar.js +++ b/resources/markdowneditor/js/markdowneditor.toolbar.js @@ -14,6 +14,7 @@ MarkdowneditorToolbar.prototype = { }); $(document).on('click', '[data-action]', function () { + $(this).parent('.loading-block').addClass('is-loading') $this.markdowneditor.runAction($(this).data('action'), $(this).is('[data-action-args]') ? $(this).data('action-args') : []); return false; }); diff --git a/resources/markdowneditor/style/style.sass b/resources/markdowneditor/style/style.sass index 1cb0053da..ee6db7006 100644 --- a/resources/markdowneditor/style/style.sass +++ b/resources/markdowneditor/style/style.sass @@ -149,18 +149,37 @@ body &-save-block position: relative min-width: 26px - &.is-saving - [data-icon="save"] + + .loading-block + position: relative + width: 26px + height: 26px + &.is-loading + pointer-events: none + [data-icon] display: none [data-icon="loading"] - display: block !important + display: flex !important [data-icon="loading"] display: none position: absolute - left: 0 - animation: rotate 1.5s linear infinite + top: 50% + left: 50% + transform: translate(-50%,-50%) pointer-events: none + padding: 0 + margin: 0 + align-items: center + justify-content: center + svg + transform-origin: center + animation: rotate 1.5s linear infinite + + [data-icon^=import] + position: relative + [data-icon="loading"] + display: flex &-editor display: flex diff --git a/resources/views/fluidbook_publication/link_editor_icons.blade.php b/resources/views/fluidbook_publication/link_editor_icons.blade.php index b8ace8a39..23970d2a7 100644 --- a/resources/views/fluidbook_publication/link_editor_icons.blade.php +++ b/resources/views/fluidbook_publication/link_editor_icons.blade.php @@ -25,60 +25,20 @@ Edit here : https://toolbox.fluidbook.com/tool-sprite/3/edit Button Play Streamline Icon: https://streamlinehq.com - - - - - + - - - - - + - - - - - - - + + + - - - - - - - + + + - - - - - - + + @@ -89,25 +49,49 @@ Edit here : https://toolbox.fluidbook.com/tool-sprite/3/edit - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +