From a71e3c6e7bdac555ce3b4f4f936d7b66ca1646d0 Mon Sep 17 00:00:00 2001 From: soufiane Date: Tue, 8 Jul 2025 18:59:44 +0200 Subject: [PATCH] wip #7634 @6:00 --- .../FluidbookPublicationCrudController.php | 19 ++++--- .../MarkdownOperation.php | 27 +++++++++ app/Models/FluidbookPublication.php | 2 + package.json | 3 +- resources/markdowneditor/js/markdowneditor.js | 57 +++++++++++++++++++ resources/markdowneditor/style/style.sass | 26 +++++++++ resources/markdowneditor/webpack.mix.js | 3 + .../markdown_editor.blade.php | 42 ++++++++++++++ .../views/layouts/markdowneditor.blade.php | 26 +++++++++ 9 files changed, 195 insertions(+), 10 deletions(-) create mode 100644 app/Http/Controllers/Admin/Operations/FluidbookPublication/MarkdownOperation.php create mode 100644 resources/markdowneditor/js/markdowneditor.js create mode 100644 resources/markdowneditor/style/style.sass create mode 100644 resources/markdowneditor/webpack.mix.js create mode 100644 resources/views/fluidbook_publication/markdown_editor.blade.php create mode 100644 resources/views/layouts/markdowneditor.blade.php diff --git a/app/Http/Controllers/Admin/FluidbookPublicationCrudController.php b/app/Http/Controllers/Admin/FluidbookPublicationCrudController.php index fd2f95024..53ccafe7f 100644 --- a/app/Http/Controllers/Admin/FluidbookPublicationCrudController.php +++ b/app/Http/Controllers/Admin/FluidbookPublicationCrudController.php @@ -15,15 +15,16 @@ class FluidbookPublicationCrudController extends \Cubist\Backpack\Magic\Controll use \App\Http\Controllers\Admin\Operations\FluidbookPublication\CloneOperation; use \App\Http\Controllers\Admin\Operations\FluidbookPublication\DeletefbOperation; use \App\Http\Controllers\Admin\Operations\FluidbookPublication\EditOperation; - use \App\Http\Controllers\Admin\Operations\ChangeownerOperation; - use \App\Http\Controllers\Admin\Operations\ChangestatusOperation; - use \App\Http\Controllers\Admin\Operations\InvoiceOperation; - use \App\Http\Controllers\Admin\Operations\FluidbookPublication\SettingsExportOperation; - use \App\Http\Controllers\Admin\Operations\FluidbookPublication\Services\SocialImageOperation; - use \App\Http\Controllers\Admin\Operations\FluidbookPublication\Services\ExportPdfOperation; - use \App\Http\Controllers\Admin\Operations\FluidbookPublication\Services\GetPageFromWebsiteOperation; - use \App\Http\Controllers\Admin\Operations\FluidbookPublication\Services\BastideOperation; - + use \App\Http\Controllers\Admin\Operations\FluidbookPublication\MarkdownOperation; + use \App\Http\Controllers\Admin\Operations\ChangeownerOperation; + use \App\Http\Controllers\Admin\Operations\ChangestatusOperation; + use \App\Http\Controllers\Admin\Operations\InvoiceOperation; + use \App\Http\Controllers\Admin\Operations\FluidbookPublication\SettingsExportOperation; + use \App\Http\Controllers\Admin\Operations\FluidbookPublication\Services\SocialImageOperation; + use \App\Http\Controllers\Admin\Operations\FluidbookPublication\Services\ExportPdfOperation; + use \App\Http\Controllers\Admin\Operations\FluidbookPublication\Services\GetPageFromWebsiteOperation; + use \App\Http\Controllers\Admin\Operations\FluidbookPublication\Services\BastideOperation; + /* diff --git a/app/Http/Controllers/Admin/Operations/FluidbookPublication/MarkdownOperation.php b/app/Http/Controllers/Admin/Operations/FluidbookPublication/MarkdownOperation.php new file mode 100644 index 000000000..3e4e1c035 --- /dev/null +++ b/app/Http/Controllers/Admin/Operations/FluidbookPublication/MarkdownOperation.php @@ -0,0 +1,27 @@ +name('fluidbook_markdowneditor'); + } + + public function markdown($id, Request $request) + { + if (!FluidbookPublication::hasPermission($id)) { + abort(401); + } + + $token = Str::random(10); + + return view('fluidbook_publication.markdown_editor', ['version' => 'stable', 'id' => $id, 'fluidbook' => FluidbookPublication::find($id), 'access' => "", 'token' => $token]); + } +} diff --git a/app/Models/FluidbookPublication.php b/app/Models/FluidbookPublication.php index 59d53ad64..df76a1968 100644 --- a/app/Models/FluidbookPublication.php +++ b/app/Models/FluidbookPublication.php @@ -26,6 +26,7 @@ use App\Http\Controllers\Admin\Operations\FluidbookPublication\DeletefbOperation use App\Http\Controllers\Admin\Operations\FluidbookPublication\DownloadOperation; use App\Http\Controllers\Admin\Operations\FluidbookPublication\EditOperation; use App\Http\Controllers\Admin\Operations\FluidbookPublication\LinksOperation; +use App\Http\Controllers\Admin\Operations\FluidbookPublication\MarkdownOperation; use App\Http\Controllers\Admin\Operations\FluidbookPublication\PreviewOperation; use App\Http\Controllers\Admin\Operations\FluidbookPublication\Services\BastideOperation; use App\Http\Controllers\Admin\Operations\FluidbookPublication\Services\ExportPdfOperation; @@ -109,6 +110,7 @@ class FluidbookPublication extends ToolboxStatusModel ChangestatusOperation::class, InvoiceOperation::class, SettingsExportOperation::class, + MarkdownOperation::class, // Services SocialImageOperation::class, ExportPdfOperation::class, diff --git a/package.json b/package.json index 3ac00ed3f..8897bbb42 100644 --- a/package.json +++ b/package.json @@ -13,7 +13,8 @@ "linkeditor": "cross-env process.env.section=linkeditor-stable mix --production", "linkeditor-beta-dev": "cross-env process.env.section=linkeditor mix", "linkeditor-beta-watch": "cross-env process.env.section=linkeditor mix watch", - "linkeditor-beta": "cross-env process.env.section=linkeditor mix --production" + "linkeditor-beta": "cross-env process.env.section=linkeditor mix --production", + "markdowneditor-watch": "cross-env process.env.section=markdowneditor mix watch" }, "devDependencies": { "axios": "^1.3.5", diff --git a/resources/markdowneditor/js/markdowneditor.js b/resources/markdowneditor/js/markdowneditor.js new file mode 100644 index 000000000..d89096a98 --- /dev/null +++ b/resources/markdowneditor/js/markdowneditor.js @@ -0,0 +1,57 @@ +function MarkdownEditor() { + this.init() +} + +MarkdownEditor.prototype = { + init: function() { + this.pagesSource = 'pages'; + this.rasterizePages = this.splitPages(FLUIDBOOK_DATA.settings.rasterizePages); + this.vectorPages = this.splitPages(FLUIDBOOK_DATA.settings.vectorPages); + this.noCache = '?t=' + (new Date(FLUIDBOOK_DATA.composition_updated_at)).getTime(); + this.loadPage(2) + }, + + loadPage: function(p,side) { + const container = document.querySelector("#markdown-preview") + var imageFormat = FLUIDBOOK_DATA.settings.imageFormat ?? 'jpg'; + var c = '
'; + //if (this.linkeditor.utils.isSpecialPage(p)) { + //let data = this.linkeditor.utils.getSpecialPageAssetData(p); + //c += ''; + //} else { + if (this.pagesSource === 'pages') { + if (this.rasterizePages.indexOf(p) >= 0) { + c += ''; + } else if (this.vectorPages.indexOf(p) >= 0) { + c += ''; + } else { + c += ''; + c += ''; + } + } else if (this.pagesSource === 'thumbnails') { + c += ''; + } + //} + c += '
'; + container.innerHTML = c; + }, + + splitPages: function (str) { + let res = []; + if (str === undefined || str === null) { + return res; + } + str = str.toString(); + if (str == '') { + return res; + } + let pages = str.split(','); + for (let p in pages) { + res.push(parseInt(pages[p])); + } + return res; + }, +} + + +new MarkdownEditor(); diff --git a/resources/markdowneditor/style/style.sass b/resources/markdowneditor/style/style.sass new file mode 100644 index 000000000..8c27bf512 --- /dev/null +++ b/resources/markdowneditor/style/style.sass @@ -0,0 +1,26 @@ +body + padding: 0 + margin: 0 +.markdown + &-editor + display: flex + height: 100vh + overflow: hidden + &-container, + &-editor-container + height: 100% !important + + &-editor-container + width: 100% + &-container + position: relative + width: calc(100% / 3) + flex-shrink: 0 + align-items: center + justify-content: center + img + width: 100% + position: absolute + top: 50% + left: 50% + transform: translate(-50%,-50%) diff --git a/resources/markdowneditor/webpack.mix.js b/resources/markdowneditor/webpack.mix.js new file mode 100644 index 000000000..9193da118 --- /dev/null +++ b/resources/markdowneditor/webpack.mix.js @@ -0,0 +1,3 @@ +const mix = require("laravel-mix"); +mix.setPublicPath('public/packages/markdowneditor').js('resources/markdowneditor/js/markdowneditor.js', 'js') + .sass('resources/markdowneditor/style/style.sass', 'css').options({processCssUrls: false}).version(); diff --git a/resources/views/fluidbook_publication/markdown_editor.blade.php b/resources/views/fluidbook_publication/markdown_editor.blade.php new file mode 100644 index 000000000..84ab323b4 --- /dev/null +++ b/resources/views/fluidbook_publication/markdown_editor.blade.php @@ -0,0 +1,42 @@ +@php + $content = "ok"; + $fbdata=$fluidbook->getPageData()->getRawData(); + $fbdata['settings']['imageFormat']=$fluidbook->getImageFormat(); + $fbdata['page_dimensions']=[]; +@endphp + +@extends('layouts.markdowneditor') + +@section('content') +
+
+
+ +
+
+
+@endsection + +@push('markdown_styles') + + +@endpush +@push('markdown_scripts') + + + + +@endpush diff --git a/resources/views/layouts/markdowneditor.blade.php b/resources/views/layouts/markdowneditor.blade.php new file mode 100644 index 000000000..951529c70 --- /dev/null +++ b/resources/views/layouts/markdowneditor.blade.php @@ -0,0 +1,26 @@ +{{-- __('!! Editeur de liens') --}} + + + + + + + @if (config('backpack.base.meta_robots_content')) + + @endif + {{-- Encrypted CSRF token for Laravel, in order for Ajax requests to work --}} + {{ isset($title) ? $title.' :: '.config('backpack.base.project_name') : config('backpack.base.project_name') }} + + + + @yield('markdown_styles') + @stack('markdown_styles') + + +@yield('header') +@yield('content') +@stack('markdown_scripts') + + + -- 2.39.5