mirror of
				https://github.com/zadam/trilium.git
				synced 2025-10-31 18:36:30 +01:00 
			
		
		
		
	docs: Deploy first documentation
This commit is contained in:
		
							
								
								
									
										23
									
								
								docs/assets/v0.63.6/app-dist/share.js
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										23
									
								
								docs/assets/v0.63.6/app-dist/share.js
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,23 @@ | ||||
| /** | ||||
|  * Fetch note with given ID from backend | ||||
|  * | ||||
|  * @param noteId of the given note to be fetched. If false, fetches current note. | ||||
|  */ | ||||
| async function fetchNote(noteId = null) { | ||||
|     if (!noteId) { | ||||
|         noteId = document.body.getAttribute("data-note-id"); | ||||
|     } | ||||
|  | ||||
|     const resp = await fetch(`api/notes/${noteId}`); | ||||
|  | ||||
|     return await resp.json(); | ||||
| } | ||||
|  | ||||
| document.addEventListener('DOMContentLoaded', () => { | ||||
|     const toggleMenuButton = document.getElementById('toggleMenuButton'); | ||||
|     const layout = document.getElementById('layout'); | ||||
|  | ||||
|     if (toggleMenuButton && layout) { | ||||
|         toggleMenuButton.addEventListener('click', () => layout.classList.toggle('showMenu')); | ||||
|     } | ||||
| }, false); | ||||
							
								
								
									
										551
									
								
								docs/assets/v0.63.6/libraries/ckeditor/ckeditor-content.css
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										551
									
								
								docs/assets/v0.63.6/libraries/ckeditor/ckeditor-content.css
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,551 @@ | ||||
| /* !!!!!! TRILIUM CUSTOM CHANGES !!!!!! */ | ||||
|  | ||||
| .printed-content .ck-widget__selection-handle, .printed-content .ck-widget__type-around { /* gets rid of triangles: https://github.com/zadam/trilium/issues/1129 */ | ||||
|     display: none; | ||||
| } | ||||
|  | ||||
| /* | ||||
|  * CKEditor 5 (v41.0.0) content styles. | ||||
|  * Generated on Fri, 26 Jan 2024 10:23:49 GMT. | ||||
|  * For more information, check out https://ckeditor.com/docs/ckeditor5/latest/installation/advanced/content-styles.html | ||||
|  */ | ||||
|  | ||||
| :root { | ||||
|     --ck-color-image-caption-background: hsl(0, 0%, 97%); | ||||
|     --ck-color-image-caption-text: hsl(0, 0%, 20%); | ||||
|     --ck-color-mention-background: hsla(341, 100%, 30%, 0.1); | ||||
|     --ck-color-mention-text: hsl(341, 100%, 30%); | ||||
|     --ck-color-selector-caption-background: hsl(0, 0%, 97%); | ||||
|     --ck-color-selector-caption-text: hsl(0, 0%, 20%); | ||||
|     --ck-highlight-marker-blue: hsl(201, 97%, 72%); | ||||
|     --ck-highlight-marker-green: hsl(120, 93%, 68%); | ||||
|     --ck-highlight-marker-pink: hsl(345, 96%, 73%); | ||||
|     --ck-highlight-marker-yellow: hsl(60, 97%, 73%); | ||||
|     --ck-highlight-pen-green: hsl(112, 100%, 27%); | ||||
|     --ck-highlight-pen-red: hsl(0, 85%, 49%); | ||||
|     --ck-image-style-spacing: 1.5em; | ||||
|     --ck-inline-image-style-spacing: calc(var(--ck-image-style-spacing) / 2); | ||||
|     --ck-todo-list-checkmark-size: 16px; | ||||
| } | ||||
|  | ||||
| /* @ckeditor/ckeditor5-table/theme/tablecolumnresize.css */ | ||||
| .ck-content .table .ck-table-resized { | ||||
|     table-layout: fixed; | ||||
| } | ||||
| /* @ckeditor/ckeditor5-table/theme/tablecolumnresize.css */ | ||||
| .ck-content .table table { | ||||
|     overflow: hidden; | ||||
| } | ||||
| /* @ckeditor/ckeditor5-table/theme/tablecolumnresize.css */ | ||||
| .ck-content .table td, | ||||
| .ck-content .table th { | ||||
|     overflow-wrap: break-word; | ||||
|     position: relative; | ||||
| } | ||||
| /* @ckeditor/ckeditor5-table/theme/table.css */ | ||||
| .ck-content .table { | ||||
|     margin: 0.9em auto; | ||||
|     display: table; | ||||
| } | ||||
| /* @ckeditor/ckeditor5-table/theme/table.css */ | ||||
| .ck-content .table table { | ||||
|     border-collapse: collapse; | ||||
|     border-spacing: 0; | ||||
|     width: 100%; | ||||
|     height: 100%; | ||||
|     border: 1px double hsl(0, 0%, 70%); | ||||
| } | ||||
| /* @ckeditor/ckeditor5-table/theme/table.css */ | ||||
| .ck-content .table table td, | ||||
| .ck-content .table table th { | ||||
|     min-width: 2em; | ||||
|     padding: .4em; | ||||
|     border: 1px solid hsl(0, 0%, 75%); | ||||
| } | ||||
| /* @ckeditor/ckeditor5-table/theme/table.css */ | ||||
| .ck-content .table table th { | ||||
|     font-weight: bold; | ||||
|     background: hsla(0, 0%, 0%, 5%); | ||||
| } | ||||
| /* @ckeditor/ckeditor5-table/theme/table.css */ | ||||
| .ck-content[dir="rtl"] .table th { | ||||
|     text-align: right; | ||||
| } | ||||
| /* @ckeditor/ckeditor5-table/theme/table.css */ | ||||
| .ck-content[dir="ltr"] .table th { | ||||
|     text-align: left; | ||||
| } | ||||
| /* @ckeditor/ckeditor5-table/theme/tablecaption.css */ | ||||
| .ck-content .table > figcaption { | ||||
|     display: table-caption; | ||||
|     caption-side: top; | ||||
|     word-break: break-word; | ||||
|     text-align: center; | ||||
|     color: var(--ck-color-selector-caption-text); | ||||
|     background-color: var(--ck-color-selector-caption-background); | ||||
|     padding: .6em; | ||||
|     font-size: .75em; | ||||
|     outline-offset: -1px; | ||||
| } | ||||
| /* @ckeditor/ckeditor5-page-break/theme/pagebreak.css */ | ||||
| .ck-content .page-break { | ||||
|     position: relative; | ||||
|     clear: both; | ||||
|     padding: 5px 0; | ||||
|     display: flex; | ||||
|     align-items: center; | ||||
|     justify-content: center; | ||||
| } | ||||
| /* @ckeditor/ckeditor5-page-break/theme/pagebreak.css */ | ||||
| .ck-content .page-break::after { | ||||
|     content: ''; | ||||
|     position: absolute; | ||||
|     border-bottom: 2px dashed hsl(0, 0%, 77%); | ||||
|     width: 100%; | ||||
| } | ||||
| /* @ckeditor/ckeditor5-page-break/theme/pagebreak.css */ | ||||
| .ck-content .page-break__label { | ||||
|     position: relative; | ||||
|     z-index: 1; | ||||
|     padding: .3em .6em; | ||||
|     display: block; | ||||
|     text-transform: uppercase; | ||||
|     border: 1px solid hsl(0, 0%, 77%); | ||||
|     border-radius: 2px; | ||||
|     font-family: Helvetica, Arial, Tahoma, Verdana, Sans-Serif; | ||||
|     font-size: 0.75em; | ||||
|     font-weight: bold; | ||||
|     color: hsl(0, 0%, 20%); | ||||
|     background: hsl(0, 0%, 100%); | ||||
|     box-shadow: 2px 2px 1px hsla(0, 0%, 0%, 0.15); | ||||
|     -webkit-user-select: none; | ||||
|     -moz-user-select: none; | ||||
|     -ms-user-select: none; | ||||
|     user-select: none; | ||||
| } | ||||
| /* @ckeditor/ckeditor5-media-embed/theme/mediaembed.css */ | ||||
| .ck-content .media { | ||||
|     clear: both; | ||||
|     margin: 0.9em 0; | ||||
|     display: block; | ||||
|     min-width: 15em; | ||||
| } | ||||
| /* @ckeditor/ckeditor5-list/theme/todolist.css */ | ||||
| .ck-content .todo-list { | ||||
|     list-style: none; | ||||
| } | ||||
| /* @ckeditor/ckeditor5-list/theme/todolist.css */ | ||||
| .ck-content .todo-list li { | ||||
|     position: relative; | ||||
|     margin-bottom: 5px; | ||||
| } | ||||
| /* @ckeditor/ckeditor5-list/theme/todolist.css */ | ||||
| .ck-content .todo-list li .todo-list { | ||||
|     margin-top: 5px; | ||||
| } | ||||
| /* @ckeditor/ckeditor5-list/theme/todolist.css */ | ||||
| .ck-content .todo-list .todo-list__label > input { | ||||
|     -webkit-appearance: none; | ||||
|     display: inline-block; | ||||
|     position: relative; | ||||
|     width: var(--ck-todo-list-checkmark-size); | ||||
|     height: var(--ck-todo-list-checkmark-size); | ||||
|     vertical-align: middle; | ||||
|     border: 0; | ||||
|     left: -25px; | ||||
|     margin-right: -15px; | ||||
|     right: 0; | ||||
|     margin-left: 0; | ||||
| } | ||||
| /* @ckeditor/ckeditor5-list/theme/todolist.css */ | ||||
| .ck-content[dir=rtl] .todo-list .todo-list__label > input { | ||||
|     left: 0; | ||||
|     margin-right: 0; | ||||
|     right: -25px; | ||||
|     margin-left: -15px; | ||||
| } | ||||
| /* @ckeditor/ckeditor5-list/theme/todolist.css */ | ||||
| .ck-content .todo-list .todo-list__label > input::before { | ||||
|     display: block; | ||||
|     position: absolute; | ||||
|     box-sizing: border-box; | ||||
|     content: ''; | ||||
|     width: 100%; | ||||
|     height: 100%; | ||||
|     border: 1px solid hsl(0, 0%, 20%); | ||||
|     border-radius: 2px; | ||||
|     transition: 250ms ease-in-out box-shadow; | ||||
| } | ||||
| /* @ckeditor/ckeditor5-list/theme/todolist.css */ | ||||
| .ck-content .todo-list .todo-list__label > input::after { | ||||
|     display: block; | ||||
|     position: absolute; | ||||
|     box-sizing: content-box; | ||||
|     pointer-events: none; | ||||
|     content: ''; | ||||
|     left: calc( var(--ck-todo-list-checkmark-size) / 3 ); | ||||
|     top: calc( var(--ck-todo-list-checkmark-size) / 5.3 ); | ||||
|     width: calc( var(--ck-todo-list-checkmark-size) / 5.3 ); | ||||
|     height: calc( var(--ck-todo-list-checkmark-size) / 2.6 ); | ||||
|     border-style: solid; | ||||
|     border-color: transparent; | ||||
|     border-width: 0 calc( var(--ck-todo-list-checkmark-size) / 8 ) calc( var(--ck-todo-list-checkmark-size) / 8 ) 0; | ||||
|     transform: rotate(45deg); | ||||
| } | ||||
| /* @ckeditor/ckeditor5-list/theme/todolist.css */ | ||||
| .ck-content .todo-list .todo-list__label > input[checked]::before { | ||||
|     background: hsl(126, 64%, 41%); | ||||
|     border-color: hsl(126, 64%, 41%); | ||||
| } | ||||
| /* @ckeditor/ckeditor5-list/theme/todolist.css */ | ||||
| .ck-content .todo-list .todo-list__label > input[checked]::after { | ||||
|     border-color: hsl(0, 0%, 100%); | ||||
| } | ||||
| /* @ckeditor/ckeditor5-list/theme/todolist.css */ | ||||
| .ck-content .todo-list .todo-list__label .todo-list__label__description { | ||||
|     vertical-align: middle; | ||||
| } | ||||
| /* @ckeditor/ckeditor5-list/theme/todolist.css */ | ||||
| .ck-content .todo-list .todo-list__label.todo-list__label_without-description input[type=checkbox] { | ||||
|     position: absolute; | ||||
| } | ||||
| /* @ckeditor/ckeditor5-list/theme/todolist.css */ | ||||
| .ck-editor__editable.ck-content .todo-list .todo-list__label > input, | ||||
| .ck-editor__editable.ck-content .todo-list .todo-list__label > span[contenteditable=false] > input { | ||||
|     cursor: pointer; | ||||
| } | ||||
| /* @ckeditor/ckeditor5-list/theme/todolist.css */ | ||||
| .ck-editor__editable.ck-content .todo-list .todo-list__label > input:hover::before, .ck-editor__editable.ck-content .todo-list .todo-list__label > span[contenteditable=false] > input:hover::before { | ||||
|     box-shadow: 0 0 0 5px hsla(0, 0%, 0%, 0.1); | ||||
| } | ||||
| /* @ckeditor/ckeditor5-list/theme/todolist.css */ | ||||
| .ck-editor__editable.ck-content .todo-list .todo-list__label > span[contenteditable=false] > input { | ||||
|     -webkit-appearance: none; | ||||
|     display: inline-block; | ||||
|     position: relative; | ||||
|     width: var(--ck-todo-list-checkmark-size); | ||||
|     height: var(--ck-todo-list-checkmark-size); | ||||
|     vertical-align: middle; | ||||
|     border: 0; | ||||
|     left: -25px; | ||||
|     margin-right: -15px; | ||||
|     right: 0; | ||||
|     margin-left: 0; | ||||
| } | ||||
| /* @ckeditor/ckeditor5-list/theme/todolist.css */ | ||||
| .ck-editor__editable.ck-content[dir=rtl] .todo-list .todo-list__label > span[contenteditable=false] > input { | ||||
|     left: 0; | ||||
|     margin-right: 0; | ||||
|     right: -25px; | ||||
|     margin-left: -15px; | ||||
| } | ||||
| /* @ckeditor/ckeditor5-list/theme/todolist.css */ | ||||
| .ck-editor__editable.ck-content .todo-list .todo-list__label > span[contenteditable=false] > input::before { | ||||
|     display: block; | ||||
|     position: absolute; | ||||
|     box-sizing: border-box; | ||||
|     content: ''; | ||||
|     width: 100%; | ||||
|     height: 100%; | ||||
|     border: 1px solid hsl(0, 0%, 20%); | ||||
|     border-radius: 2px; | ||||
|     transition: 250ms ease-in-out box-shadow; | ||||
| } | ||||
| /* @ckeditor/ckeditor5-list/theme/todolist.css */ | ||||
| .ck-editor__editable.ck-content .todo-list .todo-list__label > span[contenteditable=false] > input::after { | ||||
|     display: block; | ||||
|     position: absolute; | ||||
|     box-sizing: content-box; | ||||
|     pointer-events: none; | ||||
|     content: ''; | ||||
|     left: calc( var(--ck-todo-list-checkmark-size) / 3 ); | ||||
|     top: calc( var(--ck-todo-list-checkmark-size) / 5.3 ); | ||||
|     width: calc( var(--ck-todo-list-checkmark-size) / 5.3 ); | ||||
|     height: calc( var(--ck-todo-list-checkmark-size) / 2.6 ); | ||||
|     border-style: solid; | ||||
|     border-color: transparent; | ||||
|     border-width: 0 calc( var(--ck-todo-list-checkmark-size) / 8 ) calc( var(--ck-todo-list-checkmark-size) / 8 ) 0; | ||||
|     transform: rotate(45deg); | ||||
| } | ||||
| /* @ckeditor/ckeditor5-list/theme/todolist.css */ | ||||
| .ck-editor__editable.ck-content .todo-list .todo-list__label > span[contenteditable=false] > input[checked]::before { | ||||
|     background: hsl(126, 64%, 41%); | ||||
|     border-color: hsl(126, 64%, 41%); | ||||
| } | ||||
| /* @ckeditor/ckeditor5-list/theme/todolist.css */ | ||||
| .ck-editor__editable.ck-content .todo-list .todo-list__label > span[contenteditable=false] > input[checked]::after { | ||||
|     border-color: hsl(0, 0%, 100%); | ||||
| } | ||||
| /* @ckeditor/ckeditor5-list/theme/todolist.css */ | ||||
| .ck-editor__editable.ck-content .todo-list .todo-list__label.todo-list__label_without-description input[type=checkbox] { | ||||
|     position: absolute; | ||||
| } | ||||
| /* @ckeditor/ckeditor5-list/theme/list.css */ | ||||
| .ck-content ol { | ||||
|     list-style-type: decimal; | ||||
| } | ||||
| /* @ckeditor/ckeditor5-list/theme/list.css */ | ||||
| .ck-content ol ol { | ||||
|     list-style-type: lower-latin; | ||||
| } | ||||
| /* @ckeditor/ckeditor5-list/theme/list.css */ | ||||
| .ck-content ol ol ol { | ||||
|     list-style-type: lower-roman; | ||||
| } | ||||
| /* @ckeditor/ckeditor5-list/theme/list.css */ | ||||
| .ck-content ol ol ol ol { | ||||
|     list-style-type: upper-latin; | ||||
| } | ||||
| /* @ckeditor/ckeditor5-list/theme/list.css */ | ||||
| .ck-content ol ol ol ol ol { | ||||
|     list-style-type: upper-roman; | ||||
| } | ||||
| /* @ckeditor/ckeditor5-list/theme/list.css */ | ||||
| .ck-content ul { | ||||
|     list-style-type: disc; | ||||
| } | ||||
| /* @ckeditor/ckeditor5-list/theme/list.css */ | ||||
| .ck-content ul ul { | ||||
|     list-style-type: circle; | ||||
| } | ||||
| /* @ckeditor/ckeditor5-list/theme/list.css */ | ||||
| .ck-content ul ul ul { | ||||
|     list-style-type: square; | ||||
| } | ||||
| /* @ckeditor/ckeditor5-list/theme/list.css */ | ||||
| .ck-content ul ul ul ul { | ||||
|     list-style-type: square; | ||||
| } | ||||
| /* @ckeditor/ckeditor5-image/theme/image.css */ | ||||
| .ck-content .image { | ||||
|     display: table; | ||||
|     clear: both; | ||||
|     text-align: center; | ||||
|     margin: 0.9em auto; | ||||
|     min-width: 50px; | ||||
| } | ||||
| /* @ckeditor/ckeditor5-image/theme/image.css */ | ||||
| .ck-content .image img { | ||||
|     display: block; | ||||
|     margin: 0 auto; | ||||
|     max-width: 100%; | ||||
|     min-width: 100%; | ||||
|     height: auto; | ||||
| } | ||||
| /* @ckeditor/ckeditor5-image/theme/image.css */ | ||||
| .ck-content .image-inline { | ||||
|     /* | ||||
|      * Normally, the .image-inline would have "display: inline-block" and "img { width: 100% }" (to follow the wrapper while resizing).; | ||||
|      * Unfortunately, together with "srcset", it gets automatically stretched up to the width of the editing root. | ||||
|      * This strange behavior does not happen with inline-flex. | ||||
|      */ | ||||
|     display: inline-flex; | ||||
|     max-width: 100%; | ||||
|     align-items: flex-start; | ||||
| } | ||||
| /* @ckeditor/ckeditor5-image/theme/image.css */ | ||||
| .ck-content .image-inline picture { | ||||
|     display: flex; | ||||
| } | ||||
| /* @ckeditor/ckeditor5-image/theme/image.css */ | ||||
| .ck-content .image-inline picture, | ||||
| .ck-content .image-inline img { | ||||
|     flex-grow: 1; | ||||
|     flex-shrink: 1; | ||||
|     max-width: 100%; | ||||
| } | ||||
| /* @ckeditor/ckeditor5-image/theme/imageresize.css */ | ||||
| .ck-content img.image_resized { | ||||
|     height: auto; | ||||
| } | ||||
| /* @ckeditor/ckeditor5-image/theme/imageresize.css */ | ||||
| .ck-content .image.image_resized { | ||||
|     max-width: 100%; | ||||
|     display: block; | ||||
|     box-sizing: border-box; | ||||
| } | ||||
| /* @ckeditor/ckeditor5-image/theme/imageresize.css */ | ||||
| .ck-content .image.image_resized img { | ||||
|     width: 100%; | ||||
| } | ||||
| /* @ckeditor/ckeditor5-image/theme/imageresize.css */ | ||||
| .ck-content .image.image_resized > figcaption { | ||||
|     display: block; | ||||
| } | ||||
| /* @ckeditor/ckeditor5-image/theme/imagecaption.css */ | ||||
| .ck-content .image > figcaption { | ||||
|     display: table-caption; | ||||
|     caption-side: bottom; | ||||
|     word-break: break-word; | ||||
|     color: var(--ck-color-image-caption-text); | ||||
|     background-color: var(--ck-color-image-caption-background); | ||||
|     padding: .6em; | ||||
|     font-size: .75em; | ||||
|     outline-offset: -1px; | ||||
| } | ||||
| /* @ckeditor/ckeditor5-image/theme/imagestyle.css */ | ||||
| .ck-content .image-style-block-align-left, | ||||
| .ck-content .image-style-block-align-right { | ||||
|     max-width: calc(100% - var(--ck-image-style-spacing)); | ||||
| } | ||||
| /* @ckeditor/ckeditor5-image/theme/imagestyle.css */ | ||||
| .ck-content .image-style-align-left, | ||||
| .ck-content .image-style-align-right { | ||||
|     clear: none; | ||||
| } | ||||
| /* @ckeditor/ckeditor5-image/theme/imagestyle.css */ | ||||
| .ck-content .image-style-side { | ||||
|     float: right; | ||||
|     margin-left: var(--ck-image-style-spacing); | ||||
|     max-width: 50%; | ||||
| } | ||||
| /* @ckeditor/ckeditor5-image/theme/imagestyle.css */ | ||||
| .ck-content .image-style-align-left { | ||||
|     float: left; | ||||
|     margin-right: var(--ck-image-style-spacing); | ||||
| } | ||||
| /* @ckeditor/ckeditor5-image/theme/imagestyle.css */ | ||||
| .ck-content .image-style-align-center { | ||||
|     margin-left: auto; | ||||
|     margin-right: auto; | ||||
| } | ||||
| /* @ckeditor/ckeditor5-image/theme/imagestyle.css */ | ||||
| .ck-content .image-style-align-right { | ||||
|     float: right; | ||||
|     margin-left: var(--ck-image-style-spacing); | ||||
| } | ||||
| /* @ckeditor/ckeditor5-image/theme/imagestyle.css */ | ||||
| .ck-content .image-style-block-align-right { | ||||
|     margin-right: 0; | ||||
|     margin-left: auto; | ||||
| } | ||||
| /* @ckeditor/ckeditor5-image/theme/imagestyle.css */ | ||||
| .ck-content .image-style-block-align-left { | ||||
|     margin-left: 0; | ||||
|     margin-right: auto; | ||||
| } | ||||
| /* @ckeditor/ckeditor5-image/theme/imagestyle.css */ | ||||
| .ck-content p + .image-style-align-left, | ||||
| .ck-content p + .image-style-align-right, | ||||
| .ck-content p + .image-style-side { | ||||
|     margin-top: 0; | ||||
| } | ||||
| /* @ckeditor/ckeditor5-image/theme/imagestyle.css */ | ||||
| .ck-content .image-inline.image-style-align-left, | ||||
| .ck-content .image-inline.image-style-align-right { | ||||
|     margin-top: var(--ck-inline-image-style-spacing); | ||||
|     margin-bottom: var(--ck-inline-image-style-spacing); | ||||
| } | ||||
| /* @ckeditor/ckeditor5-image/theme/imagestyle.css */ | ||||
| .ck-content .image-inline.image-style-align-left { | ||||
|     margin-right: var(--ck-inline-image-style-spacing); | ||||
| } | ||||
| /* @ckeditor/ckeditor5-image/theme/imagestyle.css */ | ||||
| .ck-content .image-inline.image-style-align-right { | ||||
|     margin-left: var(--ck-inline-image-style-spacing); | ||||
| } | ||||
| /* @ckeditor/ckeditor5-highlight/theme/highlight.css */ | ||||
| .ck-content .marker-yellow { | ||||
|     background-color: var(--ck-highlight-marker-yellow); | ||||
| } | ||||
| /* @ckeditor/ckeditor5-highlight/theme/highlight.css */ | ||||
| .ck-content .marker-green { | ||||
|     background-color: var(--ck-highlight-marker-green); | ||||
| } | ||||
| /* @ckeditor/ckeditor5-highlight/theme/highlight.css */ | ||||
| .ck-content .marker-pink { | ||||
|     background-color: var(--ck-highlight-marker-pink); | ||||
| } | ||||
| /* @ckeditor/ckeditor5-highlight/theme/highlight.css */ | ||||
| .ck-content .marker-blue { | ||||
|     background-color: var(--ck-highlight-marker-blue); | ||||
| } | ||||
| /* @ckeditor/ckeditor5-highlight/theme/highlight.css */ | ||||
| .ck-content .pen-red { | ||||
|     color: var(--ck-highlight-pen-red); | ||||
|     background-color: transparent; | ||||
| } | ||||
| /* @ckeditor/ckeditor5-highlight/theme/highlight.css */ | ||||
| .ck-content .pen-green { | ||||
|     color: var(--ck-highlight-pen-green); | ||||
|     background-color: transparent; | ||||
| } | ||||
| /* @ckeditor/ckeditor5-block-quote/theme/blockquote.css */ | ||||
| .ck-content blockquote { | ||||
|     overflow: hidden; | ||||
|     padding-right: 1.5em; | ||||
|     padding-left: 1.5em; | ||||
|     margin-left: 0; | ||||
|     margin-right: 0; | ||||
|     font-style: italic; | ||||
|     border-left: solid 5px hsl(0, 0%, 80%); | ||||
| } | ||||
| /* @ckeditor/ckeditor5-block-quote/theme/blockquote.css */ | ||||
| .ck-content[dir="rtl"] blockquote { | ||||
|     border-left: 0; | ||||
|     border-right: solid 5px hsl(0, 0%, 80%); | ||||
| } | ||||
| /* @ckeditor/ckeditor5-basic-styles/theme/code.css */ | ||||
| .ck-content code { | ||||
|     background-color: hsla(0, 0%, 78%, 0.3); | ||||
|     padding: .15em; | ||||
|     border-radius: 2px; | ||||
| } | ||||
| /* @ckeditor/ckeditor5-font/theme/fontsize.css */ | ||||
| .ck-content .text-tiny { | ||||
|     font-size: .7em; | ||||
| } | ||||
| /* @ckeditor/ckeditor5-font/theme/fontsize.css */ | ||||
| .ck-content .text-small { | ||||
|     font-size: .85em; | ||||
| } | ||||
| /* @ckeditor/ckeditor5-font/theme/fontsize.css */ | ||||
| .ck-content .text-big { | ||||
|     font-size: 1.4em; | ||||
| } | ||||
| /* @ckeditor/ckeditor5-font/theme/fontsize.css */ | ||||
| .ck-content .text-huge { | ||||
|     font-size: 1.8em; | ||||
| } | ||||
| /* @ckeditor/ckeditor5-mention/theme/mention.css */ | ||||
| .ck-content .mention { | ||||
|     background: var(--ck-color-mention-background); | ||||
|     color: var(--ck-color-mention-text); | ||||
| } | ||||
| /* @ckeditor/ckeditor5-horizontal-line/theme/horizontalline.css */ | ||||
| .ck-content hr { | ||||
|     margin: 15px 0; | ||||
|     height: 4px; | ||||
|     background: hsl(0, 0%, 87%); | ||||
|     border: 0; | ||||
| } | ||||
| /* @ckeditor/ckeditor5-code-block/theme/codeblock.css */ | ||||
| .ck-content pre { | ||||
|     padding: 1em; | ||||
|     color: hsl(0, 0%, 20.8%); | ||||
|     background: hsla(0, 0%, 78%, 0.3); | ||||
|     border: 1px solid hsl(0, 0%, 77%); | ||||
|     border-radius: 2px; | ||||
|     text-align: left; | ||||
|     direction: ltr; | ||||
|     tab-size: 4; | ||||
|     white-space: pre-wrap; | ||||
|     font-style: normal; | ||||
|     min-width: 200px; | ||||
| } | ||||
| /* @ckeditor/ckeditor5-code-block/theme/codeblock.css */ | ||||
| .ck-content pre code { | ||||
|     background: unset; | ||||
|     padding: 0; | ||||
|     border-radius: 0; | ||||
| } | ||||
| @media print { | ||||
|     /* @ckeditor/ckeditor5-page-break/theme/pagebreak.css */ | ||||
|     .ck-content .page-break { | ||||
|         padding: 0; | ||||
|     } | ||||
|     /* @ckeditor/ckeditor5-page-break/theme/pagebreak.css */ | ||||
|     .ck-content .page-break::after { | ||||
|         display: none; | ||||
|     } | ||||
| } | ||||
							
								
								
									
										2
									
								
								docs/assets/v0.63.6/libraries/normalize.min.css
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										2
									
								
								docs/assets/v0.63.6/libraries/normalize.min.css
									
									
									
									
										vendored
									
									
										Normal file
									
								
							| @@ -0,0 +1,2 @@ | ||||
| /*! normalize.css v8.0.1 | MIT License | github.com/necolas/normalize.css */html{line-height:1.15;-webkit-text-size-adjust:100%}body{margin:0}main{display:block}h1{font-size:2em;margin:.67em 0}hr{box-sizing:content-box;height:0;overflow:visible}pre{font-family:monospace,monospace;font-size:1em}a{background-color:transparent}abbr[title]{border-bottom:none;text-decoration:underline;text-decoration:underline dotted}b,strong{font-weight:bolder}code,kbd,samp{font-family:monospace,monospace;font-size:1em}small{font-size:80%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sub{bottom:-.25em}sup{top:-.5em}img{border-style:none}button,input,optgroup,select,textarea{font-family:inherit;font-size:100%;line-height:1.15;margin:0}button,input{overflow:visible}button,select{text-transform:none}[type=button],[type=reset],[type=submit],button{-webkit-appearance:button}[type=button]::-moz-focus-inner,[type=reset]::-moz-focus-inner,[type=submit]::-moz-focus-inner,button::-moz-focus-inner{border-style:none;padding:0}[type=button]:-moz-focusring,[type=reset]:-moz-focusring,[type=submit]:-moz-focusring,button:-moz-focusring{outline:1px dotted ButtonText}fieldset{padding:.35em .75em .625em}legend{box-sizing:border-box;color:inherit;display:table;max-width:100%;padding:0;white-space:normal}progress{vertical-align:baseline}textarea{overflow:auto}[type=checkbox],[type=radio]{box-sizing:border-box;padding:0}[type=number]::-webkit-inner-spin-button,[type=number]::-webkit-outer-spin-button{height:auto}[type=search]{-webkit-appearance:textfield;outline-offset:-2px}[type=search]::-webkit-search-decoration{-webkit-appearance:none}::-webkit-file-upload-button{-webkit-appearance:button;font:inherit}details{display:block}summary{display:list-item}template{display:none}[hidden]{display:none} | ||||
| /*# sourceMappingURL=normalize.min.css.map */ | ||||
							
								
								
									
										165
									
								
								docs/assets/v0.63.6/stylesheets/share.css
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										165
									
								
								docs/assets/v0.63.6/stylesheets/share.css
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,165 @@ | ||||
| body { | ||||
|     font-family: 'Lucida Grande', 'Lucida Sans Unicode', arial, sans-serif; | ||||
|     line-height: 1.5; | ||||
| } | ||||
|  | ||||
| #layout { | ||||
|     max-width: 1200px; | ||||
|     margin: 0 auto; | ||||
|     display: flex; | ||||
|     flex-direction: row-reverse; | ||||
| } | ||||
|  | ||||
| #menu { | ||||
|     padding: 25px; | ||||
|     flex-basis: 0; | ||||
|     flex-grow: 1; | ||||
|     overflow: auto; | ||||
| } | ||||
|  | ||||
| #menu p { | ||||
|     margin: 0; | ||||
| } | ||||
|  | ||||
| #menu > p { | ||||
|     font-weight: bold; | ||||
|     font-size: 110%; | ||||
| } | ||||
|  | ||||
| #menu ul { | ||||
|     padding-left: 20px; | ||||
| } | ||||
|  | ||||
| #main { | ||||
|     flex-basis: 0; | ||||
|     flex-grow: 3; | ||||
|     overflow: auto; | ||||
|     padding: 10px 20px 20px 20px; | ||||
| } | ||||
|  | ||||
| #parentLink { | ||||
|     float: right; | ||||
|     margin-top: 20px; | ||||
| } | ||||
|  | ||||
| #title { | ||||
|     margin: 0; | ||||
|     padding-top: 10px; | ||||
| } | ||||
|  | ||||
| img { | ||||
|     max-width: 100%; | ||||
| } | ||||
|  | ||||
| pre { | ||||
|     white-space: pre-wrap; | ||||
|     word-wrap: anywhere; | ||||
| } | ||||
|  | ||||
| iframe.pdf-view { | ||||
|     width: 100%; | ||||
|     height: 800px; | ||||
| } | ||||
|  | ||||
| #toggleMenuButton { | ||||
|     display: none; | ||||
|     position: fixed; | ||||
|     top: 8px; | ||||
|     left: 5px; | ||||
|     width: 1.4em; | ||||
|     border-radius: 5px; | ||||
|     border: 1px solid #aaa; | ||||
|     font-size: 2rem; | ||||
|     z-index: 10; | ||||
|     height: auto; | ||||
|     color: black; | ||||
|     cursor: pointer; | ||||
| } | ||||
|  | ||||
| #childLinks.grid ul { | ||||
|     list-style-type: none; | ||||
|     display: flex; | ||||
|     flex-wrap: wrap; | ||||
|     padding: 0; | ||||
| } | ||||
|  | ||||
| #childLinks.grid ul li { | ||||
|     width: 180px; | ||||
|     height: 140px; | ||||
|     padding: 10px; | ||||
| } | ||||
|  | ||||
| #childLinks.grid ul li a { | ||||
|     display: flex; | ||||
|     flex-direction: column; | ||||
|     height: 100%; | ||||
|     width: 100%; | ||||
|     border: 1px solid #ddd; | ||||
|     border-radius: 5px; | ||||
|     justify-content: center; | ||||
|     align-content: center; | ||||
|     text-align: center; | ||||
|     font-size: large; | ||||
| } | ||||
|  | ||||
| #childLinks.grid ul li a:hover { | ||||
|     background: #eee; | ||||
| } | ||||
|  | ||||
| #childLinks.list ul { | ||||
|     list-style-type: none; | ||||
|     display: inline-flex; | ||||
|     flex-wrap: wrap; | ||||
|     padding: 0; | ||||
|     margin-top: 5px; | ||||
| } | ||||
|  | ||||
| #childLinks.list ul li { | ||||
|     margin-right: 20px; | ||||
| } | ||||
|  | ||||
| #noteClippedFrom { | ||||
|     padding: 10px 0 10px 0; | ||||
|     margin: 20px 0 20px 0; | ||||
|     color: #666; | ||||
|     border: 1px solid #ddd; | ||||
|     border-left: 0; | ||||
|     border-right: 0; | ||||
| } | ||||
|  | ||||
| #toggleMenuButton::after { | ||||
|     position: relative; | ||||
|     top: -2px; | ||||
|     left: 1px; | ||||
| } | ||||
|  | ||||
| @media (max-width: 48em) { | ||||
|     #layout.showMenu #menu { | ||||
|         display: block; | ||||
|         margin-top: 40px; | ||||
|     } | ||||
|  | ||||
|     #toggleMenuButton { | ||||
|         display: block; | ||||
|     } | ||||
|  | ||||
|     #layout.showMenu #main { | ||||
|         display: none; | ||||
|     } | ||||
|  | ||||
|     #title { | ||||
|         padding-left: 60px; | ||||
|     } | ||||
|  | ||||
|     #layout.showMenu #toggleMenuButton::after { | ||||
|         content: "«"; | ||||
|     } | ||||
|  | ||||
|     #toggleMenuButton::after { | ||||
|         content: "»"; | ||||
|     } | ||||
|  | ||||
|     #menu { | ||||
|         display: none; | ||||
|     } | ||||
| } | ||||
							
								
								
									
										
											BIN
										
									
								
								docs/favicon.ico
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										
											BIN
										
									
								
								docs/favicon.ico
									
									
									
									
									
										Normal file
									
								
							
										
											Binary file not shown.
										
									
								
							| After Width: | Height: | Size: 111 KiB | 
							
								
								
									
										10
									
								
								docs/index.html
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										10
									
								
								docs/index.html
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,10 @@ | ||||
| <!DOCTYPE html> | ||||
| <html> | ||||
|     <head> | ||||
|         <meta http-equiv="refresh" content="0; url=./share/4yYHqKbLovVX" /> | ||||
|     </head> | ||||
|      | ||||
|     <body> | ||||
|      | ||||
|     </body> | ||||
| </html> | ||||
							
								
								
									
										126
									
								
								docs/share/4yYHqKbLovVX
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										126
									
								
								docs/share/4yYHqKbLovVX
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,126 @@ | ||||
| <!DOCTYPE html> | ||||
| <html lang="en"> | ||||
| <head> | ||||
|     <meta charset="utf-8"> | ||||
|      | ||||
|  | ||||
|     <meta name="viewport" content="width=device-width, initial-scale=1"> | ||||
|      | ||||
|     <link rel="shortcut icon" href="../favicon.ico"> | ||||
|      | ||||
|     <script src="../assets/v0.63.6/app-dist/share.js"></script> | ||||
|      | ||||
|         <link href="../assets/v0.63.6/libraries/normalize.min.css" rel="stylesheet"> | ||||
|         <link href="../assets/v0.63.6/stylesheets/share.css" rel="stylesheet"> | ||||
|      | ||||
|      | ||||
|         <link href="../assets/v0.63.6/libraries/ckeditor/ckeditor-content.css" rel="stylesheet"> | ||||
|      | ||||
|      | ||||
|      | ||||
|      | ||||
|      | ||||
|     <title>Developer's Guide</title> | ||||
| </head> | ||||
| <body data-note-id="4yYHqKbLovVX" data-ancestor-note-id="4yYHqKbLovVX"> | ||||
| <div id="layout"> | ||||
|     <div id="main"> | ||||
|          | ||||
|  | ||||
|         <h1 id="title">Developer's Guide</h1> | ||||
|  | ||||
|          | ||||
|  | ||||
|          | ||||
|  | ||||
|          | ||||
|             <nav id="childLinks" class="grid"> | ||||
|                  | ||||
|  | ||||
|                 <ul> | ||||
|                      | ||||
|                         <li> | ||||
|                             <a href="./hkrBX8KE1HQl"  | ||||
|                                class="type-text">Internationalisation</a> | ||||
|                         </li> | ||||
|                      | ||||
|                         <li> | ||||
|                             <a href="./VS22Hq5PBFNf"  | ||||
|                                class="type-text">Dependency Management</a> | ||||
|                         </li> | ||||
|                      | ||||
|                 </ul> | ||||
|             </nav> | ||||
|          | ||||
|     </div> | ||||
|  | ||||
|      | ||||
|         <button id="toggleMenuButton"></button> | ||||
|  | ||||
|         <nav id="menu"> | ||||
|              | ||||
| <p> | ||||
|      | ||||
|  | ||||
|      | ||||
|     <strong>Developer's Guide</strong> | ||||
|      | ||||
| </p> | ||||
|  | ||||
|  | ||||
| <ul> | ||||
|      | ||||
|         <li> | ||||
|              | ||||
| <p> | ||||
|      | ||||
|  | ||||
|      | ||||
|     <a class="type-text" href="./hkrBX8KE1HQl">Internationalisation</a> | ||||
|      | ||||
| </p> | ||||
|  | ||||
|  | ||||
|  | ||||
|         </li> | ||||
|      | ||||
|         <li> | ||||
|              | ||||
| <p> | ||||
|      | ||||
|  | ||||
|      | ||||
|     <a class="type-text" href="./VS22Hq5PBFNf">Dependency Management</a> | ||||
|      | ||||
| </p> | ||||
|  | ||||
|  | ||||
| <ul> | ||||
|      | ||||
|         <li> | ||||
|              | ||||
| <p> | ||||
|      | ||||
|  | ||||
|      | ||||
|     <a class="type-text" href="./QXCi6Y1SYulw">Adding a new client library</a> | ||||
|      | ||||
| </p> | ||||
|  | ||||
|  | ||||
|  | ||||
|         </li> | ||||
|      | ||||
| </ul> | ||||
|  | ||||
|  | ||||
|         </li> | ||||
|      | ||||
| </ul> | ||||
|  | ||||
|  | ||||
|         </nav> | ||||
|      | ||||
| </div> | ||||
| </body> | ||||
| </html> | ||||
							
								
								
									
										165
									
								
								docs/share/QXCi6Y1SYulw
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										165
									
								
								docs/share/QXCi6Y1SYulw
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,165 @@ | ||||
| <!DOCTYPE html> | ||||
| <html lang="en"> | ||||
| <head> | ||||
|     <meta charset="utf-8"> | ||||
|      | ||||
|  | ||||
|     <meta name="viewport" content="width=device-width, initial-scale=1"> | ||||
|      | ||||
|     <link rel="shortcut icon" href="../favicon.ico"> | ||||
|      | ||||
|     <script src="../assets/v0.63.6/app-dist/share.js"></script> | ||||
|      | ||||
|         <link href="../assets/v0.63.6/libraries/normalize.min.css" rel="stylesheet"> | ||||
|         <link href="../assets/v0.63.6/stylesheets/share.css" rel="stylesheet"> | ||||
|      | ||||
|      | ||||
|         <link href="../assets/v0.63.6/libraries/ckeditor/ckeditor-content.css" rel="stylesheet"> | ||||
|      | ||||
|      | ||||
|      | ||||
|      | ||||
|      | ||||
|     <title>Adding a new client library</title> | ||||
| </head> | ||||
| <body data-note-id="QXCi6Y1SYulw" data-ancestor-note-id="4yYHqKbLovVX"> | ||||
| <div id="layout"> | ||||
|     <div id="main"> | ||||
|          | ||||
|             <nav id="parentLink"> | ||||
|                 parent: <a href="VS22Hq5PBFNf" | ||||
|                            class="type-text">Dependency Management</a> | ||||
|             </nav> | ||||
|          | ||||
|  | ||||
|         <h1 id="title">Adding a new client library</h1> | ||||
|  | ||||
|          | ||||
|  | ||||
|          | ||||
|             <div id="content" class="type-text ck-content"> | ||||
|                 <p>In the past some libraries have been copy-pasted (and adapted if needed) to the repository. However, new libraries must be obtained exclusively through npm.</p><p>The first step is to install the desired library. As an example we are going to install <code>i18next</code>:</p><pre><code class="language-text-plain">npm i i18next</code></pre><h3>Step 1. Understanding the structure of the import</h3><p>After installing the dependency, it's important to know how it's structured. You can do this by looking at the directory structure of the newly imported dependency:</p><pre><code class="language-text-plain">$ tree node_modules/i18next | ||||
| node_modules/i18next | ||||
| ├── dist | ||||
| │   ├── cjs | ||||
| │   │   └── i18next.js | ||||
| │   ├── esm | ||||
| │   │   ├── i18next.bundled.js | ||||
| │   │   ├── i18next.js | ||||
| │   │   └── package.json | ||||
| │   └── umd | ||||
| │       ├── i18next.js | ||||
| │       └── i18next.min.js | ||||
| ├── i18next.js | ||||
| ├── i18next.min.js | ||||
| ├── index.d.mts | ||||
| ├── index.d.ts | ||||
| ├── index.js | ||||
| ├── index.v4.d.ts | ||||
| ├── LICENSE | ||||
| ├── package.json | ||||
| ├── README.md | ||||
| └── typescript | ||||
|     ├── helpers.d.ts | ||||
|     ├── options.d.ts | ||||
|     ├── t.d.ts | ||||
|     └── t.v4.d.ts</code></pre><p>Generally you should be looking for a <code>.min.js</code> file. Note that the <code>esm</code> and <code>cjs</code> variants generally don't work, we are looking for the classic, no module dependency.</p><h3>Step 2. Exposing the library from the server</h3><p>The library must be delivered by the server and this is done via <code>src/routes/assets.ts</code>. In the <code>register</code> function, add a new entry near the bottom of the function:</p><pre><code class="language-application-javascript-env-frontend">app.use(`/${assetPath}/node_modules/i18next/`, persistentCacheStatic(path.join(srcRoot, "..", 'node_modules/i18next/')));</code></pre><h3>Step 3. Adding it to the library loader</h3><p>The library loader is a client module which is in charge of downloading the library from the server and importing it. The loader is located in <code>src/public/app/services/library_loader.js</code>.</p><p>To add a new library, start by creating a constant for it, with the value pointing to the minified JS identified at the first step:</p><pre><code class="language-application-javascript-env-frontend">const I18NEXT = { | ||||
|     js: [ | ||||
|         "node_modules/i18next/i18next.min.js" | ||||
|     ] | ||||
| };</code></pre><p>Then add it to the <code>export default</code> section:</p><pre><code class="language-text-x-diff"> export default { | ||||
|      requireCss, | ||||
|      requireLibrary, | ||||
|      CKEDITOR, | ||||
|      CODE_MIRROR, | ||||
|      ESLINT, | ||||
|      RELATION_MAP, | ||||
|      PRINT_THIS, | ||||
|      CALENDAR_WIDGET, | ||||
|      KATEX, | ||||
|      WHEEL_ZOOM, | ||||
|      FORCE_GRAPH, | ||||
|      MERMAID, | ||||
|      EXCALIDRAW, | ||||
| -    MARKJS | ||||
| +    MARKJS, | ||||
| +    I18NEXT | ||||
|  }</code></pre><h3>Step 4. Using the library</h3><p>To import the library, simply use the following mechanism:</p><pre><code class="language-text-x-diff">import library_loader from "./library_loader.js"; | ||||
|  | ||||
| await library_loader.requireLibrary(library_loader.I18NEXT);</code></pre><p>Make sure to replace <code>I18NEXT</code> with the library that was created at the previous steps.</p><p>Note that because we are not using a module management mechanism such as ES Modules or Common.js modules, the <code>requireLibrary</code> method does not actually return anything. </p><p>To benefit from the library, it must export on its own an object in <code>window</code>.</p><p>In the case of <code>i18next</code>, it sets <code>window.i18next</code> and that can be used directly:</p><pre><code class="language-text-x-diff">i18next.init({});</code></pre> | ||||
|             </div> | ||||
|          | ||||
|  | ||||
|          | ||||
|     </div> | ||||
|  | ||||
|      | ||||
|         <button id="toggleMenuButton"></button> | ||||
|  | ||||
|         <nav id="menu"> | ||||
|              | ||||
| <p> | ||||
|      | ||||
|  | ||||
|      | ||||
|     <a class="type-text" href="./4yYHqKbLovVX">Developer's Guide</a> | ||||
|      | ||||
| </p> | ||||
|  | ||||
|  | ||||
| <ul> | ||||
|      | ||||
|         <li> | ||||
|              | ||||
| <p> | ||||
|      | ||||
|  | ||||
|      | ||||
|     <a class="type-text" href="./hkrBX8KE1HQl">Internationalisation</a> | ||||
|      | ||||
| </p> | ||||
|  | ||||
|  | ||||
|  | ||||
|         </li> | ||||
|      | ||||
|         <li> | ||||
|              | ||||
| <p> | ||||
|      | ||||
|  | ||||
|      | ||||
|     <a class="type-text" href="./VS22Hq5PBFNf">Dependency Management</a> | ||||
|      | ||||
| </p> | ||||
|  | ||||
|  | ||||
| <ul> | ||||
|      | ||||
|         <li> | ||||
|              | ||||
| <p> | ||||
|      | ||||
|  | ||||
|      | ||||
|     <strong>Adding a new client library</strong> | ||||
|      | ||||
| </p> | ||||
|  | ||||
|  | ||||
|  | ||||
|         </li> | ||||
|      | ||||
| </ul> | ||||
|  | ||||
|  | ||||
|         </li> | ||||
|      | ||||
| </ul> | ||||
|  | ||||
|  | ||||
|         </nav> | ||||
|      | ||||
| </div> | ||||
| </body> | ||||
| </html> | ||||
							
								
								
									
										126
									
								
								docs/share/VS22Hq5PBFNf
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										126
									
								
								docs/share/VS22Hq5PBFNf
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,126 @@ | ||||
| <!DOCTYPE html> | ||||
| <html lang="en"> | ||||
| <head> | ||||
|     <meta charset="utf-8"> | ||||
|      | ||||
|  | ||||
|     <meta name="viewport" content="width=device-width, initial-scale=1"> | ||||
|      | ||||
|     <link rel="shortcut icon" href="../favicon.ico"> | ||||
|      | ||||
|     <script src="../assets/v0.63.6/app-dist/share.js"></script> | ||||
|      | ||||
|         <link href="../assets/v0.63.6/libraries/normalize.min.css" rel="stylesheet"> | ||||
|         <link href="../assets/v0.63.6/stylesheets/share.css" rel="stylesheet"> | ||||
|      | ||||
|      | ||||
|         <link href="../assets/v0.63.6/libraries/ckeditor/ckeditor-content.css" rel="stylesheet"> | ||||
|      | ||||
|      | ||||
|      | ||||
|      | ||||
|      | ||||
|     <title>Dependency Management</title> | ||||
| </head> | ||||
| <body data-note-id="VS22Hq5PBFNf" data-ancestor-note-id="4yYHqKbLovVX"> | ||||
| <div id="layout"> | ||||
|     <div id="main"> | ||||
|          | ||||
|             <nav id="parentLink"> | ||||
|                 parent: <a href="4yYHqKbLovVX" | ||||
|                            class="type-text">Developer's Guide</a> | ||||
|             </nav> | ||||
|          | ||||
|  | ||||
|         <h1 id="title">Dependency Management</h1> | ||||
|  | ||||
|          | ||||
|  | ||||
|          | ||||
|  | ||||
|          | ||||
|             <nav id="childLinks" class="grid"> | ||||
|                  | ||||
|  | ||||
|                 <ul> | ||||
|                      | ||||
|                         <li> | ||||
|                             <a href="./QXCi6Y1SYulw"  | ||||
|                                class="type-text">Adding a new client library</a> | ||||
|                         </li> | ||||
|                      | ||||
|                 </ul> | ||||
|             </nav> | ||||
|          | ||||
|     </div> | ||||
|  | ||||
|      | ||||
|         <button id="toggleMenuButton"></button> | ||||
|  | ||||
|         <nav id="menu"> | ||||
|              | ||||
| <p> | ||||
|      | ||||
|  | ||||
|      | ||||
|     <a class="type-text" href="./4yYHqKbLovVX">Developer's Guide</a> | ||||
|      | ||||
| </p> | ||||
|  | ||||
|  | ||||
| <ul> | ||||
|      | ||||
|         <li> | ||||
|              | ||||
| <p> | ||||
|      | ||||
|  | ||||
|      | ||||
|     <a class="type-text" href="./hkrBX8KE1HQl">Internationalisation</a> | ||||
|      | ||||
| </p> | ||||
|  | ||||
|  | ||||
|  | ||||
|         </li> | ||||
|      | ||||
|         <li> | ||||
|              | ||||
| <p> | ||||
|      | ||||
|  | ||||
|      | ||||
|     <strong>Dependency Management</strong> | ||||
|      | ||||
| </p> | ||||
|  | ||||
|  | ||||
| <ul> | ||||
|      | ||||
|         <li> | ||||
|              | ||||
| <p> | ||||
|      | ||||
|  | ||||
|      | ||||
|     <a class="type-text" href="./QXCi6Y1SYulw">Adding a new client library</a> | ||||
|      | ||||
| </p> | ||||
|  | ||||
|  | ||||
|  | ||||
|         </li> | ||||
|      | ||||
| </ul> | ||||
|  | ||||
|  | ||||
|         </li> | ||||
|      | ||||
| </ul> | ||||
|  | ||||
|  | ||||
|         </nav> | ||||
|      | ||||
| </div> | ||||
| </body> | ||||
| </html> | ||||
							
								
								
									
										121
									
								
								docs/share/hkrBX8KE1HQl
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										121
									
								
								docs/share/hkrBX8KE1HQl
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,121 @@ | ||||
| <!DOCTYPE html> | ||||
| <html lang="en"> | ||||
| <head> | ||||
|     <meta charset="utf-8"> | ||||
|      | ||||
|  | ||||
|     <meta name="viewport" content="width=device-width, initial-scale=1"> | ||||
|      | ||||
|     <link rel="shortcut icon" href="../favicon.ico"> | ||||
|      | ||||
|     <script src="../assets/v0.63.6/app-dist/share.js"></script> | ||||
|      | ||||
|         <link href="../assets/v0.63.6/libraries/normalize.min.css" rel="stylesheet"> | ||||
|         <link href="../assets/v0.63.6/stylesheets/share.css" rel="stylesheet"> | ||||
|      | ||||
|      | ||||
|         <link href="../assets/v0.63.6/libraries/ckeditor/ckeditor-content.css" rel="stylesheet"> | ||||
|      | ||||
|      | ||||
|      | ||||
|      | ||||
|      | ||||
|     <title>Internationalisation</title> | ||||
| </head> | ||||
| <body data-note-id="hkrBX8KE1HQl" data-ancestor-note-id="4yYHqKbLovVX"> | ||||
| <div id="layout"> | ||||
|     <div id="main"> | ||||
|          | ||||
|             <nav id="parentLink"> | ||||
|                 parent: <a href="4yYHqKbLovVX" | ||||
|                            class="type-text">Developer's Guide</a> | ||||
|             </nav> | ||||
|          | ||||
|  | ||||
|         <h1 id="title">Internationalisation</h1> | ||||
|  | ||||
|          | ||||
|  | ||||
|          | ||||
|             <div id="content" class="type-text ck-content"> | ||||
|                 <p>During the initial development of Trilium Notes, internationalisation was not considered as it was meant to be an English-only product.</p><p>As the application and the user base grows, it makes sense to be able to reach out as many people as possible by providing translations in their native language.</p><p>The library used is <a href="https://www.i18next.com/">i18next</a>.</p><h2>What has been implemented so far</h2><ul class="todo-list"><li><label class="todo-list__label"><input type="checkbox" checked="checked" disabled="disabled"><span class="todo-list__label__description">Client component-level translations: <a href="https://github.com/TriliumNext/Notes/pull/248/files">#248</a></span></label></li><li><label class="todo-list__label"><input type="checkbox" disabled="disabled"><span class="todo-list__label__description">Client template-level translations</span></label></li><li><label class="todo-list__label"><input type="checkbox" disabled="disabled"><span class="todo-list__label__description">Server-side translations</span></label></li><li><label class="todo-list__label"><input type="checkbox" disabled="disabled"><span class="todo-list__label__description">Electron translations</span></label></li><li><label class="todo-list__label"><input type="checkbox" disabled="disabled"><span class="todo-list__label__description">Allowing the user to switch the language via options</span></label></li><li><label class="todo-list__label"><input type="checkbox" disabled="disabled"><span class="todo-list__label__description">Integrate with a translation service</span></label></li></ul><h2>Where are the translations?</h2><p>The translations are formatted as JSON files and they are located in <code>src/public/translations</code>. For every supported locale, there is a subdirectory in which there is a <code>translation.json</code> file (e.g. <code>src/public/translations/en/translation.json</code>).</p><h3>Message keys</h3><p>One important aspect is the fact that we are using a key-based approach. This means that each message is identified by an ID rather than a natural-language message (such as the default approach in gettext).</p><p>The key-based approach allows a hierarchical structure. For example, a key of <code>about.title</code> would be added in <code>translation.json</code> as follows:</p><pre><code class="language-application-json">{ | ||||
| 	"about": { | ||||
| 		"title": "About TriliumNext Notes" | ||||
| 	} | ||||
| } </code></pre><h3>Adding a new locale</h3><p>To add a new locale, go to <code>src/public/translations</code> with your favorite text editor and copy the <code>en</code> directory.</p><p>Rename the copy to the ISO code (e.g. <code>fr</code>, <code>ro</code>) of the language being translated.</p><p>Translations with a country-language combination, using their corresponding ISO code (e.g. <code>fr_FR</code>, <code>fr_BE</code>), has not been tested yet.</p><h3>Changing the language</h3><p>Since the internationalisation process is in its early stages, there is no user-facing way to switch the language.</p><p>To change the language manually, edit <code>src/public/app/services/i18n.js</code> and look for the line containing <code>lng: "en"</code>. Replace <code>en</code> with the desired language code (from the ones available in <code>src/public/translations</code>).</p><h2>Recommendations</h2><ul><li>Use hierarchy whenever appropriate, try to group the messages by:<ul><li>Modals (e.g. <code>about.foo</code>, <code>jump_to_note.foo</code>)</li></ul></li><li>Don't duplicate messages that are very widely used.<ul><li>One such example is <code>aria-label="Close"</code> which should go to a single message such as <code>modal.close</code> instead of being duplicated in every modal.</li></ul></li><li>On the other hand, don't overly generalise messages. A <code>close</code> message that is used whenever the “Close” word is encountered is not a good approach since it can potentially cause issues due to lack of context.</li><li>Use <a href="https://www.i18next.com/translation-function/interpolation">variable interpolation</a> whenever appropriate.<ul><li>If you see multiple messages joined together only to apply add a variable such as a user-inputted value, try to join those messages together into a single message containing a variable.</li><li>So instead of <code>“Number of updates: “ + numUpdates + “.”</code> use <code>$(t("number_updates", { numUpdates }))</code> where the message translation would appear as <code>Number of updates: {{numUpdates}}.</code></li></ul></li></ul><h2>Client-side translations</h2><h3>Component-level translations</h3><p>Most of the client translations are present in the various widgets and layouts.</p><p>Translation support has to be added manually for every file.</p><p>The first step is to add the translation import with a relative import. For example, if we are in the <code>src/public/app/widgets/dialogs</code> directory, the import would look as follows:</p><pre><code class="language-application-javascript-env-frontend">import { t } from "../../services/i18n.js";</code></pre><p>Afterwards, simply replace the hard-coded message with:</p><pre><code class="language-application-javascript-env-frontend">${t("msgid")}</code></pre><p>where <code>msgid</code> is the key of the message being translated.</p><h3>Template-level translations</h3><p>Templates are <code>.ejs</code> files present in <code>src/views</code>, these are used to prepare the root layout for desktop, mobile applications as well as setup (onboarding) and the shared notes view.</p><p>Due to using a different approach, it is not possible yet to translate those files.</p><h2>Server-side translations</h2><p>Currently the server-side messages are not translatable. They will be added as a separate step.</p> | ||||
|             </div> | ||||
|          | ||||
|  | ||||
|          | ||||
|     </div> | ||||
|  | ||||
|      | ||||
|         <button id="toggleMenuButton"></button> | ||||
|  | ||||
|         <nav id="menu"> | ||||
|              | ||||
| <p> | ||||
|      | ||||
|  | ||||
|      | ||||
|     <a class="type-text" href="./4yYHqKbLovVX">Developer's Guide</a> | ||||
|      | ||||
| </p> | ||||
|  | ||||
|  | ||||
| <ul> | ||||
|      | ||||
|         <li> | ||||
|              | ||||
| <p> | ||||
|      | ||||
|  | ||||
|      | ||||
|     <strong>Internationalisation</strong> | ||||
|      | ||||
| </p> | ||||
|  | ||||
|  | ||||
|  | ||||
|         </li> | ||||
|      | ||||
|         <li> | ||||
|              | ||||
| <p> | ||||
|      | ||||
|  | ||||
|      | ||||
|     <a class="type-text" href="./VS22Hq5PBFNf">Dependency Management</a> | ||||
|      | ||||
| </p> | ||||
|  | ||||
|  | ||||
| <ul> | ||||
|      | ||||
|         <li> | ||||
|              | ||||
| <p> | ||||
|      | ||||
|  | ||||
|      | ||||
|     <a class="type-text" href="./QXCi6Y1SYulw">Adding a new client library</a> | ||||
|      | ||||
| </p> | ||||
|  | ||||
|  | ||||
|  | ||||
|         </li> | ||||
|      | ||||
| </ul> | ||||
|  | ||||
|  | ||||
|         </li> | ||||
|      | ||||
| </ul> | ||||
|  | ||||
|  | ||||
|         </nav> | ||||
|      | ||||
| </div> | ||||
| </body> | ||||
| </html> | ||||
		Reference in New Issue
	
	Block a user