├── src
├── test
│ ├── resources
│ │ ├── dummy.txt
│ │ ├── LookAndFeel
│ │ │ ├── [Test1] test1.htm
│ │ │ ├── [Test1] test2.htm
│ │ │ ├── [Test2] test3.htm
│ │ │ ├── [Test3] test1.htm
│ │ │ └── MetaData
│ │ │ │ └── tag_info.xml
│ │ ├── OwnNoteEditorManager.jpg
│ │ ├── [Test] TestVerify_OK.htm
│ │ ├── [Test] TestLinks.htm
│ │ ├── MetaData
│ │ │ └── tag_info.xml
│ │ ├── [Test] TestVerify_DUPL_ID.htm
│ │ ├── [Test] TestVerify_ADD_ATTR.htm
│ │ ├── [Test] TestVerify_DUPL_COM.htm
│ │ └── [Test] TestTasks.htm
│ └── java
│ │ └── tf
│ │ └── ownnote
│ │ └── ui
│ │ ├── testsuites
│ │ └── NonUITests.java
│ │ └── notes
│ │ └── TestNoteAppVersion.java
└── main
│ ├── resources
│ ├── css
│ │ ├── delete.png
│ │ ├── delete-hover.png
│ │ ├── customize-metro.min.css
│ │ └── customize-metro.css
│ ├── insertimage.png
│ ├── insertcheckbox.png
│ ├── OwnNoteEditorManager.ico
│ ├── OwnNoteEditorManager.png
│ ├── tinymce
│ │ ├── tinymce_5.10.7.7z
│ │ ├── langs
│ │ │ └── README.md
│ │ ├── skins
│ │ │ ├── ui
│ │ │ │ ├── oxide
│ │ │ │ │ ├── skin.shadowdom.min.css
│ │ │ │ │ └── skin.shadowdom.js
│ │ │ │ ├── oxide-dark
│ │ │ │ │ ├── skin.shadowdom.min.css
│ │ │ │ │ └── skin.shadowdom.js
│ │ │ │ ├── tinymce-5
│ │ │ │ │ ├── skin.shadowdom.min.css
│ │ │ │ │ └── skin.shadowdom.js
│ │ │ │ └── tinymce-5-dark
│ │ │ │ │ ├── skin.shadowdom.min.css
│ │ │ │ │ └── skin.shadowdom.js
│ │ │ └── content
│ │ │ │ ├── default
│ │ │ │ ├── content.min.css
│ │ │ │ └── content.js
│ │ │ │ ├── tinymce-5
│ │ │ │ ├── content.min.css
│ │ │ │ └── content.js
│ │ │ │ ├── writer
│ │ │ │ ├── content.min.css
│ │ │ │ └── content.js
│ │ │ │ ├── dark
│ │ │ │ ├── content.min.css
│ │ │ │ └── content.js
│ │ │ │ ├── tinymce-5-dark
│ │ │ │ ├── content.min.css
│ │ │ │ └── content.js
│ │ │ │ └── document
│ │ │ │ ├── content.min.css
│ │ │ │ └── content.js
│ │ ├── plugins
│ │ │ ├── code
│ │ │ │ └── plugin.min.js
│ │ │ ├── visualblocks
│ │ │ │ └── plugin.min.js
│ │ │ ├── nonbreaking
│ │ │ │ └── plugin.min.js
│ │ │ ├── save
│ │ │ │ └── plugin.min.js
│ │ │ ├── pagebreak
│ │ │ │ └── plugin.min.js
│ │ │ ├── preview
│ │ │ │ └── plugin.min.js
│ │ │ ├── autoresize
│ │ │ │ └── plugin.min.js
│ │ │ ├── anchor
│ │ │ │ └── plugin.min.js
│ │ │ ├── help.6.8.2
│ │ │ │ └── js
│ │ │ │ │ └── i18n
│ │ │ │ │ └── keynav
│ │ │ │ │ ├── zh_CN.js
│ │ │ │ │ ├── zh_TW.js
│ │ │ │ │ ├── ja.js
│ │ │ │ │ ├── ko_KR.js
│ │ │ │ │ ├── he_IL.js
│ │ │ │ │ ├── th_TH.js
│ │ │ │ │ ├── en.js
│ │ │ │ │ ├── hi.js
│ │ │ │ │ ├── fa.js
│ │ │ │ │ ├── ms.js
│ │ │ │ │ ├── sv_SE.js
│ │ │ │ │ ├── da.js
│ │ │ │ │ ├── id.js
│ │ │ │ │ ├── ar.js
│ │ │ │ │ ├── pt_BR.js
│ │ │ │ │ ├── eu.js
│ │ │ │ │ ├── tr.js
│ │ │ │ │ └── vi.js
│ │ │ ├── insertdatetime
│ │ │ │ └── plugin.min.js
│ │ │ ├── autolink
│ │ │ │ └── plugin.min.js
│ │ │ ├── autosave
│ │ │ │ └── plugin.min.js
│ │ │ ├── advlist
│ │ │ │ └── plugin.min.js
│ │ │ ├── importcss
│ │ │ │ └── plugin.min.js
│ │ │ └── directionality
│ │ │ │ └── plugin.min.js
│ │ └── license.txt
│ ├── editor.min.css
│ ├── insertimage.svg
│ ├── insertcheckbox.svg
│ ├── editor.css
│ ├── testBrowser.min.html
│ └── testBrowser.html
│ └── java
│ └── tf
│ └── ownnote
│ └── ui
│ ├── helper
│ ├── FileContentChangeType.java
│ ├── IFileChangeSubscriber.java
│ ├── IFileContentChangeSubscriber.java
│ ├── IGroupListContainer.java
│ └── RecentNoteForGroup.java
│ ├── xstreamfx
│ ├── StringPropertyConverter.java
│ ├── LongPropertyConverter.java
│ ├── FXConverters.java
│ ├── DoublePropertyConverter.java
│ ├── IntegerPropertyConverter.java
│ ├── BooleanPropertyConverter.java
│ ├── ObservableSetConverter.java
│ ├── ObservableListConverter.java
│ ├── ObjectPropertyConverter.java
│ └── AbstractPropertyConverter.java
│ ├── tags
│ ├── ITagHolder.java
│ ├── ITagTreeCell.java
│ ├── TagDataWrapper.java
│ └── TagTextFieldTreeCell.java
│ ├── commentdata
│ ├── ICommentDataInfo.java
│ └── ICommentDataHolder.java
│ ├── notes
│ ├── INoteCRMDS.java
│ └── NoteVersion.java
│ └── tasks
│ └── TaskCount.java
├── manifest.mf
├── gradle
└── wrapper
│ └── gradle-wrapper.properties
├── gradle.properties
├── .gitignore
├── settings.gradle
├── .nb-gradle-properties
└── LICENSE.md
/src/test/resources/dummy.txt:
--------------------------------------------------------------------------------
1 | das ist mal ein sinnvoller text...
--------------------------------------------------------------------------------
/manifest.mf:
--------------------------------------------------------------------------------
1 | Manifest-Version: 1.0
2 | X-COMMENT: Main-Class will be added automatically by build
3 |
4 |
--------------------------------------------------------------------------------
/src/main/resources/css/delete.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ThomasDaheim/ownNoteEditor/HEAD/src/main/resources/css/delete.png
--------------------------------------------------------------------------------
/src/main/resources/insertimage.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ThomasDaheim/ownNoteEditor/HEAD/src/main/resources/insertimage.png
--------------------------------------------------------------------------------
/src/test/resources/LookAndFeel/[Test1] test1.htm:
--------------------------------------------------------------------------------
1 |
2 |
Test1
--------------------------------------------------------------------------------
/src/test/resources/LookAndFeel/[Test1] test2.htm:
--------------------------------------------------------------------------------
1 |
2 | Test2
--------------------------------------------------------------------------------
/src/test/resources/LookAndFeel/[Test2] test3.htm:
--------------------------------------------------------------------------------
1 |
2 | Test3
--------------------------------------------------------------------------------
/src/main/resources/insertcheckbox.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ThomasDaheim/ownNoteEditor/HEAD/src/main/resources/insertcheckbox.png
--------------------------------------------------------------------------------
/src/main/resources/css/delete-hover.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ThomasDaheim/ownNoteEditor/HEAD/src/main/resources/css/delete-hover.png
--------------------------------------------------------------------------------
/src/main/resources/OwnNoteEditorManager.ico:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ThomasDaheim/ownNoteEditor/HEAD/src/main/resources/OwnNoteEditorManager.ico
--------------------------------------------------------------------------------
/src/main/resources/OwnNoteEditorManager.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ThomasDaheim/ownNoteEditor/HEAD/src/main/resources/OwnNoteEditorManager.png
--------------------------------------------------------------------------------
/src/test/resources/OwnNoteEditorManager.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ThomasDaheim/ownNoteEditor/HEAD/src/test/resources/OwnNoteEditorManager.jpg
--------------------------------------------------------------------------------
/src/test/resources/[Test] TestVerify_OK.htm:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ThomasDaheim/ownNoteEditor/HEAD/src/test/resources/[Test] TestVerify_OK.htm
--------------------------------------------------------------------------------
/src/main/resources/tinymce/tinymce_5.10.7.7z:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ThomasDaheim/ownNoteEditor/HEAD/src/main/resources/tinymce/tinymce_5.10.7.7z
--------------------------------------------------------------------------------
/src/test/resources/LookAndFeel/[Test3] test1.htm:
--------------------------------------------------------------------------------
1 |
2 | Test1 - mit SUCH text
--------------------------------------------------------------------------------
/src/main/resources/css/customize-metro.min.css:
--------------------------------------------------------------------------------
1 | .check-box>.box>.mark{-fx-pref-width:14px;-fx-pref-height:12px}.button,.toggle-button{-fx-border-width:2}.menu .context-menu{-fx-padding:1 1 1 1}
--------------------------------------------------------------------------------
/src/main/resources/editor.min.css:
--------------------------------------------------------------------------------
1 | body,html{height:100%;width:100%}#editorBase,body,html{margin:0!important;padding:0!important}#editorBase{display:block!important;height:100%!important;width:100%!important}
--------------------------------------------------------------------------------
/src/main/resources/tinymce/langs/README.md:
--------------------------------------------------------------------------------
1 | This is where language files should be placed.
2 |
3 | Please DO NOT translate these directly, use this service instead: https://crowdin.com/project/tinymce
4 |
--------------------------------------------------------------------------------
/gradle/wrapper/gradle-wrapper.properties:
--------------------------------------------------------------------------------
1 | distributionBase=GRADLE_USER_HOME
2 | distributionPath=wrapper/dists
3 | distributionUrl=https\://services.gradle.org/distributions/gradle-7.3-bin.zip
4 | zipStoreBase=GRADLE_USER_HOME
5 | zipStorePath=wrapper/dists
6 |
--------------------------------------------------------------------------------
/gradle.properties:
--------------------------------------------------------------------------------
1 | netbeans.org-netbeans-modules-javascript2-requirejs.enabled=true
2 | action.custom-1=unzip
3 | action.custom-1.args=--configure-on-demand -w -x check unzip
4 | action.custom-2=dependencyUpdates
5 | action.custom-2.args=--configure-on-demand -w -x check -x test dependencyUpdates
6 |
--------------------------------------------------------------------------------
/.gitignore:
--------------------------------------------------------------------------------
1 | *.class
2 |
3 | # Mobile Tools for Java (J2ME)
4 | .mtj.tmp/
5 |
6 | # Package Files #
7 | *.jar
8 | *.war
9 | *.ear
10 |
11 | # virtual machine crash logs, see http://www.java.com/en/download/help/error_hotspot.xml
12 | hs_err_pid*
13 |
14 | build
15 | .gradle
16 |
17 | #NetBeans ignores
18 | nbproject/private/
19 | build/
20 | nbbuild/
21 | dist/
22 | nbdist/
23 | nbactions.xml
24 | nb-configuration.xml
25 | .nb-gradle/
26 |
--------------------------------------------------------------------------------
/src/main/java/tf/ownnote/ui/helper/FileContentChangeType.java:
--------------------------------------------------------------------------------
1 | /*
2 | * To change this license header, choose License Headers in Project Properties.
3 | * To change this template file, choose Tools | Templates
4 | * and open the template in the editor.
5 | */
6 | package tf.ownnote.ui.helper;
7 |
8 | /**
9 | *
10 | * @author thomas
11 | */
12 | public enum FileContentChangeType {
13 | CHECKBOX_CHANGED,
14 | CONTENT_CHANGED
15 | }
16 |
--------------------------------------------------------------------------------
/src/test/resources/[Test] TestLinks.htm:
--------------------------------------------------------------------------------
1 | &lmr;
2 | [Test] TestTasks
3 | [Test] TestVerify_OK
4 |
--------------------------------------------------------------------------------
/src/main/resources/tinymce/skins/ui/oxide/skin.shadowdom.min.css:
--------------------------------------------------------------------------------
1 | body.tox-dialog__disable-scroll{overflow:hidden}.tox-fullscreen{border:0;height:100%;margin:0;overflow:hidden;overscroll-behavior:none;padding:0;touch-action:pinch-zoom;width:100%}.tox.tox-tinymce.tox-fullscreen .tox-statusbar__resize-handle{display:none}.tox-shadowhost.tox-fullscreen,.tox.tox-tinymce.tox-fullscreen{left:0;position:fixed;top:0;z-index:1200}.tox.tox-tinymce.tox-fullscreen{background-color:transparent}.tox-fullscreen .tox.tox-tinymce-aux,.tox-fullscreen~.tox.tox-tinymce-aux{z-index:1201}
2 |
--------------------------------------------------------------------------------
/src/main/resources/tinymce/skins/ui/oxide-dark/skin.shadowdom.min.css:
--------------------------------------------------------------------------------
1 | body.tox-dialog__disable-scroll{overflow:hidden}.tox-fullscreen{border:0;height:100%;margin:0;overflow:hidden;overscroll-behavior:none;padding:0;touch-action:pinch-zoom;width:100%}.tox.tox-tinymce.tox-fullscreen .tox-statusbar__resize-handle{display:none}.tox-shadowhost.tox-fullscreen,.tox.tox-tinymce.tox-fullscreen{left:0;position:fixed;top:0;z-index:1200}.tox.tox-tinymce.tox-fullscreen{background-color:transparent}.tox-fullscreen .tox.tox-tinymce-aux,.tox-fullscreen~.tox.tox-tinymce-aux{z-index:1201}
2 |
--------------------------------------------------------------------------------
/src/main/resources/tinymce/skins/ui/tinymce-5/skin.shadowdom.min.css:
--------------------------------------------------------------------------------
1 | body.tox-dialog__disable-scroll{overflow:hidden}.tox-fullscreen{border:0;height:100%;margin:0;overflow:hidden;overscroll-behavior:none;padding:0;touch-action:pinch-zoom;width:100%}.tox.tox-tinymce.tox-fullscreen .tox-statusbar__resize-handle{display:none}.tox-shadowhost.tox-fullscreen,.tox.tox-tinymce.tox-fullscreen{left:0;position:fixed;top:0;z-index:1200}.tox.tox-tinymce.tox-fullscreen{background-color:transparent}.tox-fullscreen .tox.tox-tinymce-aux,.tox-fullscreen~.tox.tox-tinymce-aux{z-index:1201}
2 |
--------------------------------------------------------------------------------
/src/main/resources/tinymce/skins/ui/tinymce-5-dark/skin.shadowdom.min.css:
--------------------------------------------------------------------------------
1 | body.tox-dialog__disable-scroll{overflow:hidden}.tox-fullscreen{border:0;height:100%;margin:0;overflow:hidden;overscroll-behavior:none;padding:0;touch-action:pinch-zoom;width:100%}.tox.tox-tinymce.tox-fullscreen .tox-statusbar__resize-handle{display:none}.tox-shadowhost.tox-fullscreen,.tox.tox-tinymce.tox-fullscreen{left:0;position:fixed;top:0;z-index:1200}.tox.tox-tinymce.tox-fullscreen{background-color:transparent}.tox-fullscreen .tox.tox-tinymce-aux,.tox-fullscreen~.tox.tox-tinymce-aux{z-index:1201}
2 |
--------------------------------------------------------------------------------
/src/main/resources/tinymce/skins/ui/oxide-dark/skin.shadowdom.js:
--------------------------------------------------------------------------------
1 | tinymce.Resource.add('ui/dark/skin.shadowdom.css', "body.tox-dialog__disable-scroll{overflow:hidden}.tox-fullscreen{border:0;height:100%;margin:0;overflow:hidden;overscroll-behavior:none;padding:0;touch-action:pinch-zoom;width:100%}.tox.tox-tinymce.tox-fullscreen .tox-statusbar__resize-handle{display:none}.tox-shadowhost.tox-fullscreen,.tox.tox-tinymce.tox-fullscreen{left:0;position:fixed;top:0;z-index:1200}.tox.tox-tinymce.tox-fullscreen{background-color:transparent}.tox-fullscreen .tox.tox-tinymce-aux,.tox-fullscreen~.tox.tox-tinymce-aux{z-index:1201}")
2 | //# sourceMappingURL=skin.shadowdom.js.map
3 |
--------------------------------------------------------------------------------
/src/main/resources/tinymce/skins/ui/oxide/skin.shadowdom.js:
--------------------------------------------------------------------------------
1 | tinymce.Resource.add('ui/default/skin.shadowdom.css', "body.tox-dialog__disable-scroll{overflow:hidden}.tox-fullscreen{border:0;height:100%;margin:0;overflow:hidden;overscroll-behavior:none;padding:0;touch-action:pinch-zoom;width:100%}.tox.tox-tinymce.tox-fullscreen .tox-statusbar__resize-handle{display:none}.tox-shadowhost.tox-fullscreen,.tox.tox-tinymce.tox-fullscreen{left:0;position:fixed;top:0;z-index:1200}.tox.tox-tinymce.tox-fullscreen{background-color:transparent}.tox-fullscreen .tox.tox-tinymce-aux,.tox-fullscreen~.tox.tox-tinymce-aux{z-index:1201}")
2 | //# sourceMappingURL=skin.shadowdom.js.map
3 |
--------------------------------------------------------------------------------
/src/main/resources/tinymce/skins/ui/tinymce-5/skin.shadowdom.js:
--------------------------------------------------------------------------------
1 | tinymce.Resource.add('ui/tinymce-5/skin.shadowdom.css', "body.tox-dialog__disable-scroll{overflow:hidden}.tox-fullscreen{border:0;height:100%;margin:0;overflow:hidden;overscroll-behavior:none;padding:0;touch-action:pinch-zoom;width:100%}.tox.tox-tinymce.tox-fullscreen .tox-statusbar__resize-handle{display:none}.tox-shadowhost.tox-fullscreen,.tox.tox-tinymce.tox-fullscreen{left:0;position:fixed;top:0;z-index:1200}.tox.tox-tinymce.tox-fullscreen{background-color:transparent}.tox-fullscreen .tox.tox-tinymce-aux,.tox-fullscreen~.tox.tox-tinymce-aux{z-index:1201}")
2 | //# sourceMappingURL=skin.shadowdom.js.map
3 |
--------------------------------------------------------------------------------
/src/main/resources/tinymce/skins/ui/tinymce-5-dark/skin.shadowdom.js:
--------------------------------------------------------------------------------
1 | tinymce.Resource.add('ui/tinymce-5-dark/skin.shadowdom.css', "body.tox-dialog__disable-scroll{overflow:hidden}.tox-fullscreen{border:0;height:100%;margin:0;overflow:hidden;overscroll-behavior:none;padding:0;touch-action:pinch-zoom;width:100%}.tox.tox-tinymce.tox-fullscreen .tox-statusbar__resize-handle{display:none}.tox-shadowhost.tox-fullscreen,.tox.tox-tinymce.tox-fullscreen{left:0;position:fixed;top:0;z-index:1200}.tox.tox-tinymce.tox-fullscreen{background-color:transparent}.tox-fullscreen .tox.tox-tinymce-aux,.tox-fullscreen~.tox.tox-tinymce-aux{z-index:1201}")
2 | //# sourceMappingURL=skin.shadowdom.js.map
3 |
--------------------------------------------------------------------------------
/src/main/java/tf/ownnote/ui/helper/IFileChangeSubscriber.java:
--------------------------------------------------------------------------------
1 | /*
2 | * To change this license header, choose License Headers in Project Properties.
3 | * To change this template file, choose Tools | Templates
4 | * and open the template in the editor.
5 | */
6 | package tf.ownnote.ui.helper;
7 |
8 | import java.nio.file.Path;
9 | import java.nio.file.WatchEvent;
10 |
11 | /**
12 | * Subscriber interface for file changes.
13 | *
14 | * Option to break propagation chain by returning FALSE.
15 | *
16 | * @author thomas
17 | */
18 | public interface IFileChangeSubscriber {
19 | abstract boolean processFileChange(final WatchEvent.Kind> eventKind, final Path filePath);
20 | }
21 |
--------------------------------------------------------------------------------
/settings.gradle:
--------------------------------------------------------------------------------
1 | /*
2 | * This settings file was auto generated by the Gradle buildInit task
3 | * by 'markus' at '06.10.15 11:58' with Gradle 2.7
4 | *
5 | * The settings file is used to specify which projects to include in your build.
6 | * In a single project build this file can be empty or even removed.
7 | *
8 | * Detailed information about configuring a multi-project build in Gradle can be found
9 | * in the user guide at https://docs.gradle.org/2.7/userguide/multi_project_builds.html
10 | */
11 |
12 | /*
13 | // To declare projects as part of a multi-project build use the 'include' method
14 | include 'shared'
15 | include 'api'
16 | include 'services:webservice'
17 | */
18 |
19 | rootProject.name = 'ownNoteEditor'
20 |
--------------------------------------------------------------------------------
/src/main/java/tf/ownnote/ui/helper/IFileContentChangeSubscriber.java:
--------------------------------------------------------------------------------
1 | /*
2 | * To change this license header, choose License Headers in Project Properties.
3 | * To change this template file, choose Tools | Templates
4 | * and open the template in the editor.
5 | */
6 | package tf.ownnote.ui.helper;
7 |
8 | import tf.ownnote.ui.notes.Note;
9 |
10 | /**
11 | * Subscriber interface for editor content changes.
12 | *
13 | * Option to break propagation chain by returning FALSE.
14 | *
15 | * @author thomas
16 | */
17 | public interface IFileContentChangeSubscriber {
18 | abstract boolean processFileContentChange(final FileContentChangeType changeType, final Note note, final String oldContent, final String newContent);
19 | }
20 |
--------------------------------------------------------------------------------
/src/main/resources/tinymce/plugins/code/plugin.min.js:
--------------------------------------------------------------------------------
1 | /**
2 | * TinyMCE version 6.8.2 (2023-12-11)
3 | */
4 | !function(){"use strict";tinymce.util.Tools.resolve("tinymce.PluginManager").add("code",(e=>((e=>{e.addCommand("mceCodeEditor",(()=>{(e=>{const o=(e=>e.getContent({source_view:!0}))(e);e.windowManager.open({title:"Source Code",size:"large",body:{type:"panel",items:[{type:"textarea",name:"code"}]},buttons:[{type:"cancel",name:"cancel",text:"Cancel"},{type:"submit",name:"save",text:"Save",primary:!0}],initialData:{code:o},onSubmit:o=>{((e,o)=>{e.focus(),e.undoManager.transact((()=>{e.setContent(o)})),e.selection.setCursorLocation(),e.nodeChanged()})(e,o.getData().code),o.close()}})})(e)}))})(e),(e=>{const o=()=>e.execCommand("mceCodeEditor");e.ui.registry.addButton("code",{icon:"sourcecode",tooltip:"Source code",onAction:o}),e.ui.registry.addMenuItem("code",{icon:"sourcecode",text:"Source code",onAction:o})})(e),{})))}();
--------------------------------------------------------------------------------
/src/main/resources/insertimage.svg:
--------------------------------------------------------------------------------
1 |
2 |
4 |
20 |
--------------------------------------------------------------------------------
/src/main/resources/insertcheckbox.svg:
--------------------------------------------------------------------------------
1 |
2 |
4 |
19 |
--------------------------------------------------------------------------------
/src/main/java/tf/ownnote/ui/xstreamfx/StringPropertyConverter.java:
--------------------------------------------------------------------------------
1 | package tf.helper.xstreamfx;
2 |
3 | import com.thoughtworks.xstream.converters.Converter;
4 | import com.thoughtworks.xstream.io.HierarchicalStreamReader;
5 | import com.thoughtworks.xstream.mapper.Mapper;
6 | import javafx.beans.property.SimpleStringProperty;
7 | import javafx.beans.property.StringProperty;
8 | import javafx.beans.value.WritableValue;
9 |
10 | /**
11 | * Created at 17/09/11 10:52.
12 | *
13 | * @author antoine
14 | */
15 | public class StringPropertyConverter extends AbstractPropertyConverter implements Converter {
16 |
17 | public StringPropertyConverter(Mapper mapper) {
18 | super(StringProperty.class, mapper);
19 | }
20 |
21 | @Override
22 | protected WritableValue createProperty() {
23 | return new SimpleStringProperty();
24 | }
25 |
26 | @Override
27 | protected Class extends String> readType(HierarchicalStreamReader reader) {
28 | return String.class;
29 | }
30 | }
--------------------------------------------------------------------------------
/src/main/java/tf/ownnote/ui/xstreamfx/LongPropertyConverter.java:
--------------------------------------------------------------------------------
1 | package tf.helper.xstreamfx;
2 |
3 | import com.thoughtworks.xstream.converters.Converter;
4 | import com.thoughtworks.xstream.io.HierarchicalStreamReader;
5 | import com.thoughtworks.xstream.mapper.Mapper;
6 | import javafx.beans.property.LongProperty;
7 | import javafx.beans.property.SimpleLongProperty;
8 | import javafx.beans.value.WritableValue;
9 |
10 | /**
11 | * Created at 17/09/11 11:17.
12 | *
13 | * @author Antoine Mischler
14 | */
15 | public class LongPropertyConverter extends AbstractPropertyConverter implements Converter {
16 |
17 | public LongPropertyConverter(Mapper mapper) {
18 | super(LongProperty.class, mapper);
19 | }
20 |
21 | @Override
22 | protected WritableValue createProperty() {
23 | return new SimpleLongProperty();
24 | }
25 |
26 | @Override
27 | protected Class extends Number> readType(HierarchicalStreamReader reader) {
28 | return Long.class;
29 | }
30 | }
--------------------------------------------------------------------------------
/src/main/java/tf/ownnote/ui/xstreamfx/FXConverters.java:
--------------------------------------------------------------------------------
1 | package tf.helper.xstreamfx;
2 |
3 | import com.thoughtworks.xstream.XStream;
4 |
5 | /**
6 | * Utility to configure a xStream with JavaFX property converters.
7 | *
8 | * Created at 17/09/11 11:18.
9 | *
10 | * @author Antoine Mischler
11 | */
12 | public class FXConverters {
13 | public static void configure(XStream xStream) {
14 | xStream.registerConverter(new StringPropertyConverter(xStream.getMapper()));
15 | xStream.registerConverter(new BooleanPropertyConverter(xStream.getMapper()));
16 | xStream.registerConverter(new ObjectPropertyConverter(xStream.getMapper()));
17 | xStream.registerConverter(new DoublePropertyConverter(xStream.getMapper()));
18 | xStream.registerConverter(new LongPropertyConverter(xStream.getMapper()));
19 | xStream.registerConverter(new IntegerPropertyConverter(xStream.getMapper()));
20 | xStream.registerConverter(new ObservableListConverter(xStream.getMapper()));
21 | }
22 | }
--------------------------------------------------------------------------------
/src/main/java/tf/ownnote/ui/xstreamfx/DoublePropertyConverter.java:
--------------------------------------------------------------------------------
1 | package tf.helper.xstreamfx;
2 |
3 | import com.thoughtworks.xstream.converters.Converter;
4 | import com.thoughtworks.xstream.io.HierarchicalStreamReader;
5 | import com.thoughtworks.xstream.mapper.Mapper;
6 | import javafx.beans.property.DoubleProperty;
7 | import javafx.beans.property.SimpleDoubleProperty;
8 | import javafx.beans.value.WritableValue;
9 |
10 | /**
11 | * Created at 17/09/11 11:12.
12 | *
13 | * @author Antoine Mischler
14 | */
15 | public class DoublePropertyConverter extends AbstractPropertyConverter implements Converter {
16 |
17 | public DoublePropertyConverter(Mapper mapper) {
18 | super(DoubleProperty.class, mapper);
19 | }
20 |
21 | @Override
22 | protected WritableValue createProperty() {
23 | return new SimpleDoubleProperty();
24 | }
25 |
26 | @Override
27 | protected Class extends Number> readType(HierarchicalStreamReader reader) {
28 | return Double.class;
29 | }
30 | }
--------------------------------------------------------------------------------
/src/main/java/tf/ownnote/ui/xstreamfx/IntegerPropertyConverter.java:
--------------------------------------------------------------------------------
1 | package tf.helper.xstreamfx;
2 |
3 | import com.thoughtworks.xstream.converters.Converter;
4 | import com.thoughtworks.xstream.io.HierarchicalStreamReader;
5 | import com.thoughtworks.xstream.mapper.Mapper;
6 | import javafx.beans.property.IntegerProperty;
7 | import javafx.beans.property.SimpleIntegerProperty;
8 | import javafx.beans.value.WritableValue;
9 |
10 | /**
11 | * Created at 17/09/11 11:16.
12 | *
13 | * @author Antoine Mischler
14 | */
15 | public class IntegerPropertyConverter extends AbstractPropertyConverter implements Converter {
16 |
17 | public IntegerPropertyConverter(Mapper mapper) {
18 | super(IntegerProperty.class, mapper);
19 | }
20 |
21 | @Override
22 | protected WritableValue createProperty() {
23 | return new SimpleIntegerProperty();
24 | }
25 |
26 | @Override
27 | protected Class extends Number> readType(HierarchicalStreamReader reader) {
28 | return Integer.class;
29 | }
30 | }
--------------------------------------------------------------------------------
/src/main/java/tf/ownnote/ui/xstreamfx/BooleanPropertyConverter.java:
--------------------------------------------------------------------------------
1 | package tf.helper.xstreamfx;
2 |
3 | import com.thoughtworks.xstream.converters.Converter;
4 | import com.thoughtworks.xstream.io.HierarchicalStreamReader;
5 | import com.thoughtworks.xstream.mapper.Mapper;
6 | import javafx.beans.property.BooleanProperty;
7 | import javafx.beans.property.SimpleBooleanProperty;
8 | import javafx.beans.value.WritableValue;
9 |
10 | /**
11 | * Created at 17/09/11 11:09.
12 | *
13 | * @author Antoine Mischler
14 | */
15 | public class BooleanPropertyConverter extends AbstractPropertyConverter implements Converter {
16 |
17 | public BooleanPropertyConverter(Mapper mapper) {
18 | super(BooleanProperty.class, mapper);
19 | }
20 |
21 | @Override
22 | protected WritableValue createProperty() {
23 | return new SimpleBooleanProperty();
24 | }
25 |
26 | @Override
27 | protected Class extends Boolean> readType(HierarchicalStreamReader reader) {
28 | return Boolean.class;
29 | }
30 | }
--------------------------------------------------------------------------------
/src/main/resources/tinymce/skins/content/default/content.min.css:
--------------------------------------------------------------------------------
1 | body{font-family:-apple-system,BlinkMacSystemFont,'Segoe UI',Roboto,Oxygen,Ubuntu,Cantarell,'Open Sans','Helvetica Neue',sans-serif;line-height:1.4;margin:1rem}table{border-collapse:collapse}table:not([cellpadding]) td,table:not([cellpadding]) th{padding:.4rem}table[border]:not([border="0"]):not([style*=border-width]) td,table[border]:not([border="0"]):not([style*=border-width]) th{border-width:1px}table[border]:not([border="0"]):not([style*=border-style]) td,table[border]:not([border="0"]):not([style*=border-style]) th{border-style:solid}table[border]:not([border="0"]):not([style*=border-color]) td,table[border]:not([border="0"]):not([style*=border-color]) th{border-color:#ccc}figure{display:table;margin:1rem auto}figure figcaption{color:#999;display:block;margin-top:.25rem;text-align:center}hr{border-color:#ccc;border-style:solid;border-width:1px 0 0 0}code{background-color:#e8e8e8;border-radius:3px;padding:.1rem .2rem}.mce-content-body:not([dir=rtl]) blockquote{border-left:2px solid #ccc;margin-left:1.5rem;padding-left:1rem}.mce-content-body[dir=rtl] blockquote{border-right:2px solid #ccc;margin-right:1.5rem;padding-right:1rem}
2 |
--------------------------------------------------------------------------------
/src/main/resources/tinymce/skins/content/tinymce-5/content.min.css:
--------------------------------------------------------------------------------
1 | body{font-family:-apple-system,BlinkMacSystemFont,'Segoe UI',Roboto,Oxygen,Ubuntu,Cantarell,'Open Sans','Helvetica Neue',sans-serif;line-height:1.4;margin:1rem}table{border-collapse:collapse}table:not([cellpadding]) td,table:not([cellpadding]) th{padding:.4rem}table[border]:not([border="0"]):not([style*=border-width]) td,table[border]:not([border="0"]):not([style*=border-width]) th{border-width:1px}table[border]:not([border="0"]):not([style*=border-style]) td,table[border]:not([border="0"]):not([style*=border-style]) th{border-style:solid}table[border]:not([border="0"]):not([style*=border-color]) td,table[border]:not([border="0"]):not([style*=border-color]) th{border-color:#ccc}figure{display:table;margin:1rem auto}figure figcaption{color:#999;display:block;margin-top:.25rem;text-align:center}hr{border-color:#ccc;border-style:solid;border-width:1px 0 0 0}code{background-color:#e8e8e8;border-radius:3px;padding:.1rem .2rem}.mce-content-body:not([dir=rtl]) blockquote{border-left:2px solid #ccc;margin-left:1.5rem;padding-left:1rem}.mce-content-body[dir=rtl] blockquote{border-right:2px solid #ccc;margin-right:1.5rem;padding-right:1rem}
2 |
--------------------------------------------------------------------------------
/src/main/resources/tinymce/skins/content/writer/content.min.css:
--------------------------------------------------------------------------------
1 | body{font-family:-apple-system,BlinkMacSystemFont,'Segoe UI',Roboto,Oxygen,Ubuntu,Cantarell,'Open Sans','Helvetica Neue',sans-serif;line-height:1.4;margin:1rem auto;max-width:900px}table{border-collapse:collapse}table:not([cellpadding]) td,table:not([cellpadding]) th{padding:.4rem}table[border]:not([border="0"]):not([style*=border-width]) td,table[border]:not([border="0"]):not([style*=border-width]) th{border-width:1px}table[border]:not([border="0"]):not([style*=border-style]) td,table[border]:not([border="0"]):not([style*=border-style]) th{border-style:solid}table[border]:not([border="0"]):not([style*=border-color]) td,table[border]:not([border="0"]):not([style*=border-color]) th{border-color:#ccc}figure{display:table;margin:1rem auto}figure figcaption{color:#999;display:block;margin-top:.25rem;text-align:center}hr{border-color:#ccc;border-style:solid;border-width:1px 0 0 0}code{background-color:#e8e8e8;border-radius:3px;padding:.1rem .2rem}.mce-content-body:not([dir=rtl]) blockquote{border-left:2px solid #ccc;margin-left:1.5rem;padding-left:1rem}.mce-content-body[dir=rtl] blockquote{border-right:2px solid #ccc;margin-right:1.5rem;padding-right:1rem}
2 |
--------------------------------------------------------------------------------
/src/main/resources/tinymce/license.txt:
--------------------------------------------------------------------------------
1 | MIT License
2 |
3 | Copyright (c) 2022 Ephox Corporation DBA Tiny Technologies, Inc.
4 |
5 | Permission is hereby granted, free of charge, to any person obtaining a copy
6 | of this software and associated documentation files (the "Software"), to deal
7 | in the Software without restriction, including without limitation the rights
8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9 | copies of the Software, and to permit persons to whom the Software is
10 | furnished to do so, subject to the following conditions:
11 |
12 | The above copyright notice and this permission notice shall be included in all
13 | copies or substantial portions of the Software.
14 |
15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21 | SOFTWARE.
22 |
--------------------------------------------------------------------------------
/src/main/resources/tinymce/skins/content/dark/content.min.css:
--------------------------------------------------------------------------------
1 | body{background-color:#222f3e;color:#fff;font-family:-apple-system,BlinkMacSystemFont,'Segoe UI',Roboto,Oxygen,Ubuntu,Cantarell,'Open Sans','Helvetica Neue',sans-serif;line-height:1.4;margin:1rem}a{color:#4099ff}table{border-collapse:collapse}table:not([cellpadding]) td,table:not([cellpadding]) th{padding:.4rem}table[border]:not([border="0"]):not([style*=border-width]) td,table[border]:not([border="0"]):not([style*=border-width]) th{border-width:1px}table[border]:not([border="0"]):not([style*=border-style]) td,table[border]:not([border="0"]):not([style*=border-style]) th{border-style:solid}table[border]:not([border="0"]):not([style*=border-color]) td,table[border]:not([border="0"]):not([style*=border-color]) th{border-color:#6d737b}figure{display:table;margin:1rem auto}figure figcaption{color:#8a8f97;display:block;margin-top:.25rem;text-align:center}hr{border-color:#6d737b;border-style:solid;border-width:1px 0 0 0}code{background-color:#6d737b;border-radius:3px;padding:.1rem .2rem}.mce-content-body:not([dir=rtl]) blockquote{border-left:2px solid #6d737b;margin-left:1.5rem;padding-left:1rem}.mce-content-body[dir=rtl] blockquote{border-right:2px solid #6d737b;margin-right:1.5rem;padding-right:1rem}
2 |
--------------------------------------------------------------------------------
/.nb-gradle-properties:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 | j2se
5 | 11
6 | 1.9
7 |
8 |
9 | debugWithArgs
10 | no
11 |
12 | ${project}:debug
13 |
14 |
15 | -PcmdLineArgs=-lookAndFeel="classic"
16 |
17 |
18 |
19 |
20 | runWithArgs
21 | no
22 |
23 | ${project}:run
24 |
25 |
26 | -PcmdLineArgs=-lookAndFeel="oneNote"
27 |
28 |
29 |
30 |
31 |
32 | j2se
33 | 11
34 |
35 |
36 |
--------------------------------------------------------------------------------
/src/main/resources/tinymce/skins/content/tinymce-5-dark/content.min.css:
--------------------------------------------------------------------------------
1 | body{background-color:#2f3742;color:#dfe0e4;font-family:-apple-system,BlinkMacSystemFont,'Segoe UI',Roboto,Oxygen,Ubuntu,Cantarell,'Open Sans','Helvetica Neue',sans-serif;line-height:1.4;margin:1rem}a{color:#4099ff}table{border-collapse:collapse}table:not([cellpadding]) td,table:not([cellpadding]) th{padding:.4rem}table[border]:not([border="0"]):not([style*=border-width]) td,table[border]:not([border="0"]):not([style*=border-width]) th{border-width:1px}table[border]:not([border="0"]):not([style*=border-style]) td,table[border]:not([border="0"]):not([style*=border-style]) th{border-style:solid}table[border]:not([border="0"]):not([style*=border-color]) td,table[border]:not([border="0"]):not([style*=border-color]) th{border-color:#6d737b}figure{display:table;margin:1rem auto}figure figcaption{color:#8a8f97;display:block;margin-top:.25rem;text-align:center}hr{border-color:#6d737b;border-style:solid;border-width:1px 0 0 0}code{background-color:#6d737b;border-radius:3px;padding:.1rem .2rem}.mce-content-body:not([dir=rtl]) blockquote{border-left:2px solid #6d737b;margin-left:1.5rem;padding-left:1rem}.mce-content-body[dir=rtl] blockquote{border-right:2px solid #6d737b;margin-right:1.5rem;padding-right:1rem}
2 |
--------------------------------------------------------------------------------
/src/main/resources/tinymce/plugins/visualblocks/plugin.min.js:
--------------------------------------------------------------------------------
1 | /**
2 | * TinyMCE version 6.8.2 (2023-12-11)
3 | */
4 | !function(){"use strict";var t=tinymce.util.Tools.resolve("tinymce.PluginManager");const s=(t,s,o)=>{t.dom.toggleClass(t.getBody(),"mce-visualblocks"),o.set(!o.get()),((t,s)=>{t.dispatch("VisualBlocks",{state:s})})(t,o.get())},o=("visualblocks_default_state",t=>t.options.get("visualblocks_default_state"));const e=(t,s)=>o=>{o.setActive(s.get());const e=t=>o.setActive(t.state);return t.on("VisualBlocks",e),()=>t.off("VisualBlocks",e)};t.add("visualblocks",((t,l)=>{(t=>{(0,t.options.register)("visualblocks_default_state",{processor:"boolean",default:!1})})(t);const a=(t=>{let s=!1;return{get:()=>s,set:t=>{s=t}}})();((t,o,e)=>{t.addCommand("mceVisualBlocks",(()=>{s(t,0,e)}))})(t,0,a),((t,s)=>{const o=()=>t.execCommand("mceVisualBlocks");t.ui.registry.addToggleButton("visualblocks",{icon:"visualblocks",tooltip:"Show blocks",onAction:o,onSetup:e(t,s)}),t.ui.registry.addToggleMenuItem("visualblocks",{text:"Show blocks",icon:"visualblocks",onAction:o,onSetup:e(t,s)})})(t,a),((t,e,l)=>{t.on("PreviewFormats AfterPreviewFormats",(s=>{l.get()&&t.dom.toggleClass(t.getBody(),"mce-visualblocks","afterpreviewformats"===s.type)})),t.on("init",(()=>{o(t)&&s(t,0,l)}))})(t,0,a)}))}();
--------------------------------------------------------------------------------
/src/main/resources/tinymce/skins/content/document/content.min.css:
--------------------------------------------------------------------------------
1 | @media screen{html{background:#f4f4f4;min-height:100%}}body{font-family:-apple-system,BlinkMacSystemFont,'Segoe UI',Roboto,Oxygen,Ubuntu,Cantarell,'Open Sans','Helvetica Neue',sans-serif}@media screen{body{background-color:#fff;box-shadow:0 0 4px rgba(0,0,0,.15);box-sizing:border-box;margin:1rem auto 0;max-width:820px;min-height:calc(100vh - 1rem);padding:4rem 6rem 6rem 6rem}}table{border-collapse:collapse}table:not([cellpadding]) td,table:not([cellpadding]) th{padding:.4rem}table[border]:not([border="0"]):not([style*=border-width]) td,table[border]:not([border="0"]):not([style*=border-width]) th{border-width:1px}table[border]:not([border="0"]):not([style*=border-style]) td,table[border]:not([border="0"]):not([style*=border-style]) th{border-style:solid}table[border]:not([border="0"]):not([style*=border-color]) td,table[border]:not([border="0"]):not([style*=border-color]) th{border-color:#ccc}figure figcaption{color:#999;margin-top:.25rem;text-align:center}hr{border-color:#ccc;border-style:solid;border-width:1px 0 0 0}.mce-content-body:not([dir=rtl]) blockquote{border-left:2px solid #ccc;margin-left:1.5rem;padding-left:1rem}.mce-content-body[dir=rtl] blockquote{border-right:2px solid #ccc;margin-right:1.5rem;padding-right:1rem}
2 |
--------------------------------------------------------------------------------
/src/main/resources/tinymce/skins/content/default/content.js:
--------------------------------------------------------------------------------
1 | tinymce.Resource.add('content/default/content.css', "body{font-family:-apple-system,BlinkMacSystemFont,'Segoe UI',Roboto,Oxygen,Ubuntu,Cantarell,'Open Sans','Helvetica Neue',sans-serif;line-height:1.4;margin:1rem}table{border-collapse:collapse}table:not([cellpadding]) td,table:not([cellpadding]) th{padding:.4rem}table[border]:not([border=\"0\"]):not([style*=border-width]) td,table[border]:not([border=\"0\"]):not([style*=border-width]) th{border-width:1px}table[border]:not([border=\"0\"]):not([style*=border-style]) td,table[border]:not([border=\"0\"]):not([style*=border-style]) th{border-style:solid}table[border]:not([border=\"0\"]):not([style*=border-color]) td,table[border]:not([border=\"0\"]):not([style*=border-color]) th{border-color:#ccc}figure{display:table;margin:1rem auto}figure figcaption{color:#999;display:block;margin-top:.25rem;text-align:center}hr{border-color:#ccc;border-style:solid;border-width:1px 0 0 0}code{background-color:#e8e8e8;border-radius:3px;padding:.1rem .2rem}.mce-content-body:not([dir=rtl]) blockquote{border-left:2px solid #ccc;margin-left:1.5rem;padding-left:1rem}.mce-content-body[dir=rtl] blockquote{border-right:2px solid #ccc;margin-right:1.5rem;padding-right:1rem}")
2 | //# sourceMappingURL=content.js.map
3 |
--------------------------------------------------------------------------------
/src/main/resources/tinymce/skins/content/tinymce-5/content.js:
--------------------------------------------------------------------------------
1 | tinymce.Resource.add('content/tinymce-5/content.css', "body{font-family:-apple-system,BlinkMacSystemFont,'Segoe UI',Roboto,Oxygen,Ubuntu,Cantarell,'Open Sans','Helvetica Neue',sans-serif;line-height:1.4;margin:1rem}table{border-collapse:collapse}table:not([cellpadding]) td,table:not([cellpadding]) th{padding:.4rem}table[border]:not([border=\"0\"]):not([style*=border-width]) td,table[border]:not([border=\"0\"]):not([style*=border-width]) th{border-width:1px}table[border]:not([border=\"0\"]):not([style*=border-style]) td,table[border]:not([border=\"0\"]):not([style*=border-style]) th{border-style:solid}table[border]:not([border=\"0\"]):not([style*=border-color]) td,table[border]:not([border=\"0\"]):not([style*=border-color]) th{border-color:#ccc}figure{display:table;margin:1rem auto}figure figcaption{color:#999;display:block;margin-top:.25rem;text-align:center}hr{border-color:#ccc;border-style:solid;border-width:1px 0 0 0}code{background-color:#e8e8e8;border-radius:3px;padding:.1rem .2rem}.mce-content-body:not([dir=rtl]) blockquote{border-left:2px solid #ccc;margin-left:1.5rem;padding-left:1rem}.mce-content-body[dir=rtl] blockquote{border-right:2px solid #ccc;margin-right:1.5rem;padding-right:1rem}")
2 | //# sourceMappingURL=content.js.map
3 |
--------------------------------------------------------------------------------
/src/main/resources/tinymce/skins/content/writer/content.js:
--------------------------------------------------------------------------------
1 | tinymce.Resource.add('content/writer/content.css', "body{font-family:-apple-system,BlinkMacSystemFont,'Segoe UI',Roboto,Oxygen,Ubuntu,Cantarell,'Open Sans','Helvetica Neue',sans-serif;line-height:1.4;margin:1rem auto;max-width:900px}table{border-collapse:collapse}table:not([cellpadding]) td,table:not([cellpadding]) th{padding:.4rem}table[border]:not([border=\"0\"]):not([style*=border-width]) td,table[border]:not([border=\"0\"]):not([style*=border-width]) th{border-width:1px}table[border]:not([border=\"0\"]):not([style*=border-style]) td,table[border]:not([border=\"0\"]):not([style*=border-style]) th{border-style:solid}table[border]:not([border=\"0\"]):not([style*=border-color]) td,table[border]:not([border=\"0\"]):not([style*=border-color]) th{border-color:#ccc}figure{display:table;margin:1rem auto}figure figcaption{color:#999;display:block;margin-top:.25rem;text-align:center}hr{border-color:#ccc;border-style:solid;border-width:1px 0 0 0}code{background-color:#e8e8e8;border-radius:3px;padding:.1rem .2rem}.mce-content-body:not([dir=rtl]) blockquote{border-left:2px solid #ccc;margin-left:1.5rem;padding-left:1rem}.mce-content-body[dir=rtl] blockquote{border-right:2px solid #ccc;margin-right:1.5rem;padding-right:1rem}")
2 | //# sourceMappingURL=content.js.map
3 |
--------------------------------------------------------------------------------
/src/main/resources/tinymce/skins/content/dark/content.js:
--------------------------------------------------------------------------------
1 | tinymce.Resource.add('content/dark/content.css', "body{background-color:#222f3e;color:#fff;font-family:-apple-system,BlinkMacSystemFont,'Segoe UI',Roboto,Oxygen,Ubuntu,Cantarell,'Open Sans','Helvetica Neue',sans-serif;line-height:1.4;margin:1rem}a{color:#4099ff}table{border-collapse:collapse}table:not([cellpadding]) td,table:not([cellpadding]) th{padding:.4rem}table[border]:not([border=\"0\"]):not([style*=border-width]) td,table[border]:not([border=\"0\"]):not([style*=border-width]) th{border-width:1px}table[border]:not([border=\"0\"]):not([style*=border-style]) td,table[border]:not([border=\"0\"]):not([style*=border-style]) th{border-style:solid}table[border]:not([border=\"0\"]):not([style*=border-color]) td,table[border]:not([border=\"0\"]):not([style*=border-color]) th{border-color:#6d737b}figure{display:table;margin:1rem auto}figure figcaption{color:#8a8f97;display:block;margin-top:.25rem;text-align:center}hr{border-color:#6d737b;border-style:solid;border-width:1px 0 0 0}code{background-color:#6d737b;border-radius:3px;padding:.1rem .2rem}.mce-content-body:not([dir=rtl]) blockquote{border-left:2px solid #6d737b;margin-left:1.5rem;padding-left:1rem}.mce-content-body[dir=rtl] blockquote{border-right:2px solid #6d737b;margin-right:1.5rem;padding-right:1rem}")
2 | //# sourceMappingURL=content.js.map
3 |
--------------------------------------------------------------------------------
/src/main/resources/tinymce/skins/content/tinymce-5-dark/content.js:
--------------------------------------------------------------------------------
1 | tinymce.Resource.add('content/tinymce-5-dark/content.css', "body{background-color:#2f3742;color:#dfe0e4;font-family:-apple-system,BlinkMacSystemFont,'Segoe UI',Roboto,Oxygen,Ubuntu,Cantarell,'Open Sans','Helvetica Neue',sans-serif;line-height:1.4;margin:1rem}a{color:#4099ff}table{border-collapse:collapse}table:not([cellpadding]) td,table:not([cellpadding]) th{padding:.4rem}table[border]:not([border=\"0\"]):not([style*=border-width]) td,table[border]:not([border=\"0\"]):not([style*=border-width]) th{border-width:1px}table[border]:not([border=\"0\"]):not([style*=border-style]) td,table[border]:not([border=\"0\"]):not([style*=border-style]) th{border-style:solid}table[border]:not([border=\"0\"]):not([style*=border-color]) td,table[border]:not([border=\"0\"]):not([style*=border-color]) th{border-color:#6d737b}figure{display:table;margin:1rem auto}figure figcaption{color:#8a8f97;display:block;margin-top:.25rem;text-align:center}hr{border-color:#6d737b;border-style:solid;border-width:1px 0 0 0}code{background-color:#6d737b;border-radius:3px;padding:.1rem .2rem}.mce-content-body:not([dir=rtl]) blockquote{border-left:2px solid #6d737b;margin-left:1.5rem;padding-left:1rem}.mce-content-body[dir=rtl] blockquote{border-right:2px solid #6d737b;margin-right:1.5rem;padding-right:1rem}")
2 | //# sourceMappingURL=content.js.map
3 |
--------------------------------------------------------------------------------
/src/main/resources/tinymce/skins/content/document/content.js:
--------------------------------------------------------------------------------
1 | tinymce.Resource.add('content/document/content.css', "@media screen{html{background:#f4f4f4;min-height:100%}}body{font-family:-apple-system,BlinkMacSystemFont,'Segoe UI',Roboto,Oxygen,Ubuntu,Cantarell,'Open Sans','Helvetica Neue',sans-serif}@media screen{body{background-color:#fff;box-shadow:0 0 4px rgba(0,0,0,.15);box-sizing:border-box;margin:1rem auto 0;max-width:820px;min-height:calc(100vh - 1rem);padding:4rem 6rem 6rem 6rem}}table{border-collapse:collapse}table:not([cellpadding]) td,table:not([cellpadding]) th{padding:.4rem}table[border]:not([border=\"0\"]):not([style*=border-width]) td,table[border]:not([border=\"0\"]):not([style*=border-width]) th{border-width:1px}table[border]:not([border=\"0\"]):not([style*=border-style]) td,table[border]:not([border=\"0\"]):not([style*=border-style]) th{border-style:solid}table[border]:not([border=\"0\"]):not([style*=border-color]) td,table[border]:not([border=\"0\"]):not([style*=border-color]) th{border-color:#ccc}figure figcaption{color:#999;margin-top:.25rem;text-align:center}hr{border-color:#ccc;border-style:solid;border-width:1px 0 0 0}.mce-content-body:not([dir=rtl]) blockquote{border-left:2px solid #ccc;margin-left:1.5rem;padding-left:1rem}.mce-content-body[dir=rtl] blockquote{border-right:2px solid #ccc;margin-right:1.5rem;padding-right:1rem}")
2 | //# sourceMappingURL=content.js.map
3 |
--------------------------------------------------------------------------------
/src/test/resources/MetaData/tag_info.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 | Groups
5 |
6 |
7 | All
8 |
9 |
10 | #F4A6A6
11 | 5910f367ed69
12 |
13 |
14 | Not grouped
15 |
16 |
17 | #F4A6A6
18 | d0e3cbd827cd
19 |
20 |
21 | Test
22 |
23 |
24 | darkgrey
25 | e5699f358d92
26 |
27 |
28 | Archive
29 |
30 |
31 | #F4A6A6
32 | 53675d0a4b68
33 |
34 |
35 |
36 |
37 | 5fda0dc60dec
38 |
39 |
--------------------------------------------------------------------------------
/src/main/resources/tinymce/plugins/nonbreaking/plugin.min.js:
--------------------------------------------------------------------------------
1 | /**
2 | * TinyMCE version 6.8.2 (2023-12-11)
3 | */
4 | !function(){"use strict";var n=tinymce.util.Tools.resolve("tinymce.PluginManager");const e=n=>e=>typeof e===n,o=e("boolean"),a=e("number"),t=n=>e=>e.options.get(n),i=t("nonbreaking_force_tab"),s=t("nonbreaking_wrap"),r=(n,e)=>{let o="";for(let a=0;a{const o=s(n)||n.plugins.visualchars?`${r(" ",e)}`:r(" ",e);n.undoManager.transact((()=>n.insertContent(o)))};var l=tinymce.util.Tools.resolve("tinymce.util.VK");const u=n=>e=>{const o=()=>{e.setEnabled(n.selection.isEditable())};return n.on("NodeChange",o),o(),()=>{n.off("NodeChange",o)}};n.add("nonbreaking",(n=>{(n=>{const e=n.options.register;e("nonbreaking_force_tab",{processor:n=>o(n)?{value:n?3:0,valid:!0}:a(n)?{value:n,valid:!0}:{valid:!1,message:"Must be a boolean or number."},default:!1}),e("nonbreaking_wrap",{processor:"boolean",default:!0})})(n),(n=>{n.addCommand("mceNonBreaking",(()=>{c(n,1)}))})(n),(n=>{const e=()=>n.execCommand("mceNonBreaking");n.ui.registry.addButton("nonbreaking",{icon:"non-breaking",tooltip:"Nonbreaking space",onAction:e,onSetup:u(n)}),n.ui.registry.addMenuItem("nonbreaking",{icon:"non-breaking",text:"Nonbreaking space",onAction:e,onSetup:u(n)})})(n),(n=>{const e=i(n);e>0&&n.on("keydown",(o=>{if(o.keyCode===l.TAB&&!o.isDefaultPrevented()){if(o.shiftKey)return;o.preventDefault(),o.stopImmediatePropagation(),c(n,e)}}))})(n)}))}();
--------------------------------------------------------------------------------
/src/main/resources/tinymce/plugins/save/plugin.min.js:
--------------------------------------------------------------------------------
1 | /**
2 | * TinyMCE version 6.8.2 (2023-12-11)
3 | */
4 | !function(){"use strict";var e=tinymce.util.Tools.resolve("tinymce.PluginManager");const n=("function",e=>"function"==typeof e);var o=tinymce.util.Tools.resolve("tinymce.dom.DOMUtils"),t=tinymce.util.Tools.resolve("tinymce.util.Tools");const a=e=>n=>n.options.get(e),c=a("save_enablewhendirty"),i=a("save_onsavecallback"),s=a("save_oncancelcallback"),r=(e,n)=>{e.notificationManager.open({text:n,type:"error"})},l=e=>n=>{const o=()=>{n.setEnabled(!c(e)||e.isDirty())};return o(),e.on("NodeChange dirty",o),()=>e.off("NodeChange dirty",o)};e.add("save",(e=>{(e=>{const n=e.options.register;n("save_enablewhendirty",{processor:"boolean",default:!0}),n("save_onsavecallback",{processor:"function"}),n("save_oncancelcallback",{processor:"function"})})(e),(e=>{e.ui.registry.addButton("save",{icon:"save",tooltip:"Save",enabled:!1,onAction:()=>e.execCommand("mceSave"),onSetup:l(e)}),e.ui.registry.addButton("cancel",{icon:"cancel",tooltip:"Cancel",enabled:!1,onAction:()=>e.execCommand("mceCancel"),onSetup:l(e)}),e.addShortcut("Meta+S","","mceSave")})(e),(e=>{e.addCommand("mceSave",(()=>{(e=>{const t=o.DOM.getParent(e.id,"form");if(c(e)&&!e.isDirty())return;e.save();const a=i(e);if(n(a))return a.call(e,e),void e.nodeChanged();t?(e.setDirty(!1),t.onsubmit&&!t.onsubmit()||("function"==typeof t.submit?t.submit():r(e,"Error: Form submit field collision.")),e.nodeChanged()):r(e,"Error: No form element found.")})(e)})),e.addCommand("mceCancel",(()=>{(e=>{const o=t.trim(e.startContent),a=s(e);n(a)?a.call(e,e):e.resetContent(o)})(e)}))})(e)}))}();
--------------------------------------------------------------------------------
/LICENSE.md:
--------------------------------------------------------------------------------
1 | BSD 3-Clause License
2 |
3 | Copyright (c) 2016, Thomas Feuster
4 | All rights reserved.
5 |
6 | Redistribution and use in source and binary forms, with or without
7 | modification, are permitted provided that the following conditions are met:
8 |
9 | * Redistributions of source code must retain the above copyright notice, this
10 | list of conditions and the following disclaimer.
11 |
12 | * Redistributions in binary form must reproduce the above copyright notice,
13 | this list of conditions and the following disclaimer in the documentation
14 | and/or other materials provided with the distribution.
15 |
16 | * Neither the name of the copyright holder nor the names of its
17 | contributors may be used to endorse or promote products derived from
18 | this software without specific prior written permission.
19 |
20 | THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
21 | AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
22 | IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
23 | DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
24 | FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
25 | DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
26 | SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
27 | CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
28 | OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
29 | OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
30 |
--------------------------------------------------------------------------------
/src/main/java/tf/ownnote/ui/xstreamfx/ObservableSetConverter.java:
--------------------------------------------------------------------------------
1 | package tf.helper.xstreamfx;
2 |
3 | import com.sun.javafx.collections.ObservableSetWrapper;
4 | import com.thoughtworks.xstream.converters.Converter;
5 | import com.thoughtworks.xstream.converters.collections.CollectionConverter;
6 | import com.thoughtworks.xstream.mapper.Mapper;
7 | import javafx.beans.property.SimpleSetProperty;
8 | import javafx.collections.FXCollections;
9 | import javafx.collections.ObservableSet;
10 |
11 | /**
12 | * TODO write documentation
13 | *
14 | * Created at 21/09/11 09:32.
15 | *
16 | * @author Antoine Mischler
17 | * @since 2.2
18 | *
19 | * using implementation from https://stackoverflow.com/a/33298946
20 | */
21 | public class ObservableSetConverter extends CollectionConverter implements Converter {
22 |
23 | public ObservableSetConverter(Mapper mapper) {
24 | super(mapper);
25 | }
26 |
27 | @Override
28 | public boolean canConvert(Class type) {
29 | return ObservableSet.class.isAssignableFrom(type);
30 | }
31 |
32 | @Override
33 | protected Object createCollection(Class type) {
34 | if (type == ObservableSetWrapper.class) {
35 | return FXCollections.observableSet();
36 | }
37 | if (type.getName().indexOf("$") > 0) {
38 | if (type.getName().equals("javafx.collections.FXCollections$SynchronizedObservableSet")) {
39 | return FXCollections.synchronizedObservableSet(FXCollections.observableSet());
40 | }
41 | }
42 | return new SimpleSetProperty<>(FXCollections.observableSet());
43 | }
44 | }
--------------------------------------------------------------------------------
/src/main/resources/tinymce/plugins/pagebreak/plugin.min.js:
--------------------------------------------------------------------------------
1 | /**
2 | * TinyMCE version 6.8.2 (2023-12-11)
3 | */
4 | !function(){"use strict";var e=tinymce.util.Tools.resolve("tinymce.PluginManager"),a=tinymce.util.Tools.resolve("tinymce.Env");const t=e=>a=>a.options.get(e),n=t("pagebreak_separator"),o=t("pagebreak_split_block"),r="mce-pagebreak",s=e=>{const t=`
`;return e?`${t}
`:t},c=e=>a=>{const t=()=>{a.setEnabled(e.selection.isEditable())};return e.on("NodeChange",t),t(),()=>{e.off("NodeChange",t)}};e.add("pagebreak",(e=>{(e=>{const a=e.options.register;a("pagebreak_separator",{processor:"string",default:"\x3c!-- pagebreak --\x3e"}),a("pagebreak_split_block",{processor:"boolean",default:!1})})(e),(e=>{e.addCommand("mcePageBreak",(()=>{e.insertContent(s(o(e)))}))})(e),(e=>{const a=()=>e.execCommand("mcePageBreak");e.ui.registry.addButton("pagebreak",{icon:"page-break",tooltip:"Page break",onAction:a,onSetup:c(e)}),e.ui.registry.addMenuItem("pagebreak",{text:"Page break",icon:"page-break",onAction:a,onSetup:c(e)})})(e),(e=>{const a=n(e),t=()=>o(e),c=new RegExp(a.replace(/[\?\.\*\[\]\(\)\{\}\+\^\$\:]/g,(e=>"\\"+e)),"gi");e.on("BeforeSetContent",(e=>{e.content=e.content.replace(c,s(t()))})),e.on("PreInit",(()=>{e.serializer.addNodeFilter("img",(n=>{let o,s,c=n.length;for(;c--;)if(o=n[c],s=o.attr("class"),s&&-1!==s.indexOf(r)){const n=o.parent;if(n&&e.schema.getBlockElements()[n.name]&&t()){n.type=3,n.value=a,n.raw=!0,o.remove();continue}o.type=3,o.value=a,o.raw=!0}}))}))})(e),(e=>{e.on("ResolveName",(a=>{"IMG"===a.target.nodeName&&e.dom.hasClass(a.target,r)&&(a.name="pagebreak")}))})(e)}))}();
--------------------------------------------------------------------------------
/src/main/java/tf/ownnote/ui/xstreamfx/ObservableListConverter.java:
--------------------------------------------------------------------------------
1 | package tf.helper.xstreamfx;
2 |
3 | import com.sun.javafx.collections.ObservableListWrapper;
4 | import com.thoughtworks.xstream.converters.Converter;
5 | import com.thoughtworks.xstream.converters.collections.CollectionConverter;
6 | import com.thoughtworks.xstream.mapper.Mapper;
7 | import javafx.beans.property.SimpleListProperty;
8 | import javafx.collections.FXCollections;
9 | import javafx.collections.ObservableList;
10 |
11 | /**
12 | * TODO write documentation
13 | *
14 | * Created at 21/09/11 09:32.
15 | *
16 | * @author Antoine Mischler
17 | * @since 2.2
18 | *
19 | * using implementation from https://stackoverflow.com/a/33298946
20 | */
21 | public class ObservableListConverter extends CollectionConverter implements Converter {
22 |
23 | public ObservableListConverter(Mapper mapper) {
24 | super(mapper);
25 | }
26 |
27 | @Override
28 | public boolean canConvert(Class type) {
29 | return ObservableList.class.isAssignableFrom(type);
30 | }
31 |
32 | @Override
33 | protected Object createCollection(Class type) {
34 | if (type == ObservableListWrapper.class) {
35 | return FXCollections.observableArrayList();
36 | }
37 | if (type.getName().indexOf("$") > 0) {
38 | if (type.getName().equals("javafx.collections.FXCollections$SynchronizedObservableList")) {
39 | return FXCollections.synchronizedObservableList(FXCollections.observableArrayList());
40 | }
41 | }
42 | return new SimpleListProperty<>(FXCollections.observableArrayList());
43 | }
44 | }
--------------------------------------------------------------------------------
/src/main/java/tf/ownnote/ui/xstreamfx/ObjectPropertyConverter.java:
--------------------------------------------------------------------------------
1 | package tf.helper.xstreamfx;
2 |
3 | import com.thoughtworks.xstream.converters.Converter;
4 | import com.thoughtworks.xstream.converters.MarshallingContext;
5 | import com.thoughtworks.xstream.io.HierarchicalStreamReader;
6 | import com.thoughtworks.xstream.io.HierarchicalStreamWriter;
7 | import com.thoughtworks.xstream.mapper.Mapper;
8 | import javafx.beans.property.ObjectProperty;
9 | import javafx.beans.property.SimpleObjectProperty;
10 | import javafx.beans.value.WritableValue;
11 | import tf.helper.general.ObjectsHelper;
12 |
13 | /**
14 | * Created at 17/09/11 11:10.
15 | *
16 | * @author Antoine Mischler
17 | */
18 | public class ObjectPropertyConverter extends AbstractPropertyConverter