From 2e53ea1e633d39d5d841625826c2eda10929585b Mon Sep 17 00:00:00 2001 From: ckonstanski Date: Sat, 23 Dec 2023 18:58:54 -0700 Subject: ckeditor --- src/org_ckons_cljs/form/core.cljs | 119 ++++++++++++++++++++++++++++++++++++++ 1 file changed, 119 insertions(+) (limited to 'src') diff --git a/src/org_ckons_cljs/form/core.cljs b/src/org_ckons_cljs/form/core.cljs index 025c963..31486ff 100644 --- a/src/org_ckons_cljs/form/core.cljs +++ b/src/org_ckons_cljs/form/core.cljs @@ -2,8 +2,114 @@ (:require-macros [hiccups.core :as hiccups :refer [html]] [clojure.string :as str])) +(declare editor-init) (declare template-generic-form) +(def ckeditor-config (js->clj (js/JSON.parse "{ + \"toolbar\": { + \"items\": [ + \"exportPDF\", \"exportWord\", \"|\", + \"findAndReplace\", \"selectAll\", \"|\", + \"heading\", \"|\", + \"bold\", \"italic\", \"strikethrough\", \"underline\", \"code\", \"subscript\", \"superscript\", \"removeFormat\", \"|\", + \"bulletedList\", \"numberedList\", \"todoList\", \"|\", + \"outdent\", \"indent\", \"|\", + \"undo\", \"redo\", + \"-\", + \"fontSize\", \"fontFamily\", \"fontColor\", \"fontBackgroundColor\", \"highlight\", \"|\", + \"alignment\", \"|\", + \"link\", \"insertImage\", \"blockQuote\", \"insertTable\", \"mediaEmbed\", \"codeBlock\", \"htmlEmbed\", \"|\", + \"specialCharacters\", \"horizontalLine\", \"pageBreak\", \"|\", + \"textPartLanguage\", \"|\", + \"sourceEditing\" + ], + \"shouldNotGroupWhenFull\": true + }, + \"list\": { + \"properties\": { + \"styles\": true, + \"startIndex\": true, + \"reversed\": true + } + }, + \"heading\": { + \"options\": [ + { \"model\": \"paragraph\", \"title\": \"Paragraph\", \"class\": \"ck-heading_paragraph\" }, + { \"model\": \"heading1\", \"view\": \"h1\", \"title\": \"Heading 1\", \"class\": \"ck-heading_heading1\" }, + { \"model\": \"heading2\", \"view\": \"h2\", \"title\": \"Heading 2\", \"class\": \"ck-heading_heading2\" }, + { \"model\": \"heading3\", \"view\": \"h3\", \"title\": \"Heading 3\", \"class\": \"ck-heading_heading3\" }, + { \"model\": \"heading4\", \"view\": \"h4\", \"title\": \"Heading 4\", \"class\": \"ck-heading_heading4\" }, + { \"model\": \"heading5\", \"view\": \"h5\", \"title\": \"Heading 5\", \"class\": \"ck-heading_heading5\" }, + { \"model\": \"heading6\", \"view\": \"h6\", \"title\": \"Heading 6\", \"class\": \"ck-heading_heading6\" } + ] + }, + \"fontFamily\": { + \"options\": [ + \"default\", + \"Arial, Helvetica, sans-serif\", + \"Courier New, Courier, monospace\", + \"Georgia, serif\", + \"Lucida Sans Unicode, Lucida Grande, sans-serif\", + \"Tahoma, Geneva, sans-serif\", + \"Times New Roman, Times, serif\", + \"Trebuchet MS, Helvetica, sans-serif\", + \"Verdana, Geneva, sans-serif\" + ], + \"supportAllValues\": true + }, + \"fontSize\": { + \"options\": [10, 12, 14, \"default\", 18, 20, 22], + \"supportAllValues\": true + }, + \"htmlSupport\": { + \"allow\": [ + { + \"name\": \"/.*/\", + \"attributes\": true, + \"classes\": true, + \"styles\": true + } + ] + }, + \"htmlEmbed\": { + \"showPreviews\": true + }, + \"link\": { + \"decorators\": { + \"addTargetToExternalLinks\": true, + \"defaultProtocol\": \"https://\", + \"toggleDownloadable\": { + \"mode\": \"manual\", + \"label\": \"Downloadable\", + \"attributes\": { + \"download\": \"file\" + } + } + } + }, + \"removePlugins\": [ + \"CKBox\", + \"CKFinder\", + \"EasyImage\", + \"RealTimeCollaborativeComments\", + \"RealTimeCollaborativeTrackChanges\", + \"RealTimeCollaborativeRevisionHistory\", + \"PresenceList\", + \"Comments\", + \"TrackChanges\", + \"TrackChangesData\", + \"RevisionHistory\", + \"Pagination\", + \"WProofreader\", + \"MathType\" + ] +}"))) + +(defn editor-init [elem] + (-> js/ClassicEditor + (.create elem ckeditor-config) + (.catch (fn [err] (js/console (.error err)))))) + (hiccups/defhtml template-generic-form [jsonobj namespace] [:div {:id "form-errormsg"}] [:form {:name (get jsonobj "name") @@ -72,6 +178,19 @@ :rows "10" :cols "80"} (get form-field "value")]]] + (= (get form-field "fieldType") "ckeditor") + [:div {:class "form-group row"} + (when (get form-field "label") + [:label {:for (get form-field "name") + :class "col-form-label col-sm-2" + :style "text-align: right"} + (get form-field "label") + (when (get form-field "required") + " *")]) + [:div {:class "col-sm-10"} + [:textarea {:name (get form-field "name") + :id (get form-field "name")} + (get form-field "value")]]] (= (get form-field "fieldType") "datetime-local") [:div {:class "form-group row"} (when (get form-field "label") -- cgit v1.3