This repository has no description
0

Configure Feed

Select the types of activity you want to include in your feed.

core / appview / pages / templates / fragments / markdownEditor.html
2.8 kB 69 lines
1{{ define "fragments/markdownEditor" }} 2 {{ $name := .Name }} 3 {{ $value := .Value }} 4 {{ $blobName := .BlobName }} 5 {{ $blobValues := .BlobValues }} 6 {{ $rows := (or .Rows 5) }} 7 {{ $required := .Required }} 8 {{ $autofocus := .AutoFocus }} 9 {{ $placeholder := .Placeholder }} 10 <div 11 class="flex flex-col gap-2" 12 data-md-editor 13 hx-disinherit="*" 14 hx-include="this" 15 > 16 <div class="btn-group self-start text-gray-600 dark:text-gray-300"> 17 <button type="button" data-md-mode="write" 18 class="btn-group-item active group"> 19 {{ i "pencil" "w-3.5 h-3.5" }} 20 Write 21 </button> 22 <button type="button" data-md-mode="preview" 23 hx-post="/markup/preview" 24 hx-target="next [data-md-preview]" 25 hx-swap="innerHTML" 26 hx-indicator="this" 27 hx-disabled-elt="this" 28 class="btn-group-item group"> 29 {{ i "eye" "w-3.5 h-3.5 inline group-[.htmx-request]:hidden" }} 30 {{ i "loader-circle" "w-3.5 h-3.5 animate-spin hidden group-[.htmx-request]:inline" }} 31 Preview 32 </button> 33 </div> 34 <div data-md-panel="write"> 35 <textarea 36 name="{{ $name }}" 37 rows="{{ $rows }}" 38 class="w-full resize-y dark:bg-gray-800 dark:text-white dark:border-gray-700" 39 {{if $required}}required{{end}} 40 {{if $autofocus}}autofocus{{end}} 41 placeholder="{{ $placeholder }}" 42 >{{with $value}}{{.}}{{end}}</textarea> 43 </div> 44 <div data-md-panel="preview" class="hidden"> 45 <div data-md-preview class="min-h-[6rem] p-3 border border-gray-200 dark:border-gray-700 rounded bg-gray-50 dark:bg-gray-900/30"> 46 <span class="text-gray-400 dark:text-gray-500 italic">Loading preview...</span> 47 </div> 48 </div> 49 </div> 50 <script> 51 (() => { 52 if (window.__mdEditorWired) return; 53 window.__mdEditorWired = true; 54 document.body.addEventListener('click', (e) => { 55 const btn = e.target.closest('[data-md-mode]'); 56 if (!btn) return; 57 const editor = btn.closest('[data-md-editor]'); 58 if (!editor) return; 59 const mode = btn.dataset.mdMode; 60 editor.querySelectorAll('[data-md-panel]').forEach(p => { 61 p.classList.toggle('hidden', p.dataset.mdPanel !== mode); 62 }); 63 editor.querySelectorAll('[data-md-mode]').forEach(b => { 64 b.classList.toggle('active', b === btn); 65 }); 66 }); 67 })(); 68 </script> 69{{ end }}