diff --git a/cache/timer.yaml b/cache/timer.yaml index 35c2dcf..bbdb945 100644 --- a/cache/timer.yaml +++ b/cache/timer.yaml @@ -1 +1 @@ -licenseupdate: 1750186868 +licenseupdate: 1750964534 diff --git a/content/index.txt b/content/index.txt new file mode 100644 index 0000000..3956c8b --- /dev/null +++ b/content/index.txt @@ -0,0 +1 @@ +["# Typemill","Typemill is a lightweight, flat-file CMS designed for simple, fast, and flexible website and eBook creation using Markdown. Create handbooks, documentation, manuals, reports, traditional websites, online novels, and more.","Log in to the author area at [\/tm\/login](\/tm\/login).","{.center loading=\"lazy\" width=\"820\" height=\"470\"}","Stay in the loop and subscribe to the [Typemill newsletter](https:\/\/typemill.net\/news)!"] \ No newline at end of file diff --git a/data/security/securitylog.txt b/data/security/securitylog.txt deleted file mode 100644 index 9b43804..0000000 --- a/data/security/securitylog.txt +++ /dev/null @@ -1,11 +0,0 @@ -127.0.0.1;2024-03-25 21:48:49;login: wrong password -127.0.0.1;2024-04-20 12:51:39;login: wrong password -127.0.0.1;2024-04-21 19:24:11;login: invalid data -127.0.0.1;2024-04-22 14:38:20;loginlink: loginlink for user member is not activated. -127.0.0.1;2024-04-23 11:16:24;loginlink: invalid data -127.0.0.1;2024-09-01 13:59:35;login: invalid data -127.0.0.1;2025-02-27 19:22:45;login: wrong password -127.0.0.1;2025-02-27 19:23:07;login: wrong password -127.0.0.1;2025-02-27 19:25:24;login: invalid data -127.0.0.1;2025-02-27 20:14:02;login: wrong password -127.0.0.1;2025-04-13 02:23:28;login: invalid data diff --git a/system/typemill/author/css/output.css b/system/typemill/author/css/output.css index 37d66fc..ad949f6 100644 --- a/system/typemill/author/css/output.css +++ b/system/typemill/author/css/output.css @@ -652,11 +652,6 @@ video { inset: 0px; } -.inset-x-0 { - left: 0px; - right: 0px; -} - .inset-y-0 { top: 0px; bottom: 0px; @@ -678,10 +673,6 @@ video { bottom: 0px; } -.bottom-3 { - bottom: 0.75rem; -} - .left-0 { left: 0px; } @@ -862,10 +853,6 @@ video { margin-top: 0.5rem; } -.mt-20 { - margin-top: 5rem; -} - .mt-3 { margin-top: 0.75rem; } @@ -1090,10 +1077,6 @@ video { width: 48%; } -.max-w-4xl { - max-width: 56rem; -} - .max-w-6xl { max-width: 72rem; } @@ -1221,6 +1204,12 @@ video { margin-left: calc(1rem * calc(1 - var(--tw-space-x-reverse))); } +.space-y-1 > :not([hidden]) ~ :not([hidden]) { + --tw-space-y-reverse: 0; + margin-top: calc(0.25rem * calc(1 - var(--tw-space-y-reverse))); + margin-bottom: calc(0.25rem * var(--tw-space-y-reverse)); +} + .space-y-2 > :not([hidden]) ~ :not([hidden]) { --tw-space-y-reverse: 0; margin-top: calc(0.5rem * calc(1 - var(--tw-space-y-reverse))); @@ -1239,16 +1228,16 @@ video { overflow-y: auto; } +.scroll-smooth { + scroll-behavior: smooth; +} + .truncate { overflow: hidden; text-overflow: ellipsis; white-space: nowrap; } -.rounded { - border-radius: 0.25rem; -} - .rounded-lg { border-radius: 0.5rem; } @@ -1337,11 +1326,6 @@ video { border-color: rgb(209 213 219 / var(--tw-border-opacity)); } -.border-gray-500 { - --tw-border-opacity: 1; - border-color: rgb(107 114 128 / var(--tw-border-opacity)); -} - .border-red-500 { --tw-border-opacity: 1; border-color: rgb(239 68 68 / var(--tw-border-opacity)); @@ -1397,6 +1381,11 @@ video { border-color: rgb(20 184 166 / var(--tw-border-opacity)); } +.border-teal-600 { + --tw-border-opacity: 1; + border-color: rgb(13 148 136 / var(--tw-border-opacity)); +} + .border-white { --tw-border-opacity: 1; border-color: rgb(255 255 255 / var(--tw-border-opacity)); @@ -1531,6 +1520,10 @@ video { background-clip: padding-box; } +.p-0 { + padding: 0px; +} + .p-1 { padding: 0.25rem; } @@ -1650,6 +1643,10 @@ video { padding-bottom: 1.5rem; } +.pb-8 { + padding-bottom: 2rem; +} + .pl-10 { padding-left: 2.5rem; } @@ -1714,6 +1711,10 @@ video { padding-top: 0.75rem; } +.pt-4 { + padding-top: 1rem; +} + .pt-6 { padding-top: 1.5rem; } @@ -1810,6 +1811,10 @@ video { text-transform: capitalize; } +.italic { + font-style: italic; +} + .leading-tight { line-height: 1.25; } @@ -2015,6 +2020,11 @@ video { border-color: rgb(20 184 166 / var(--tw-border-opacity)); } +.hover\:border-teal-600:hover { + --tw-border-opacity: 1; + border-color: rgb(13 148 136 / var(--tw-border-opacity)); +} + .hover\:bg-rose-500:hover { --tw-bg-opacity: 1; background-color: rgb(244 63 94 / var(--tw-bg-opacity)); @@ -2050,11 +2060,6 @@ video { background-color: rgb(250 250 249 / var(--tw-bg-opacity)); } -.hover\:bg-stone-600:hover { - --tw-bg-opacity: 1; - background-color: rgb(87 83 78 / var(--tw-bg-opacity)); -} - .hover\:bg-stone-700:hover { --tw-bg-opacity: 1; background-color: rgb(68 64 60 / var(--tw-bg-opacity)); @@ -2090,11 +2095,6 @@ video { background-color: rgb(202 138 4 / var(--tw-bg-opacity)); } -.hover\:text-rose-500:hover { - --tw-text-opacity: 1; - color: rgb(244 63 94 / var(--tw-text-opacity)); -} - .hover\:text-stone-100:hover { --tw-text-opacity: 1; color: rgb(245 245 244 / var(--tw-text-opacity)); @@ -2115,14 +2115,9 @@ video { color: rgb(41 37 36 / var(--tw-text-opacity)); } -.hover\:text-teal-300:hover { +.hover\:text-teal-600:hover { --tw-text-opacity: 1; - color: rgb(94 234 212 / var(--tw-text-opacity)); -} - -.hover\:text-teal-500:hover { - --tw-text-opacity: 1; - color: rgb(20 184 166 / var(--tw-text-opacity)); + color: rgb(13 148 136 / var(--tw-text-opacity)); } .hover\:text-white:hover { @@ -2286,6 +2281,15 @@ video { color: rgb(28 25 23 / var(--tw-text-opacity)); } +.dark\:text-white:is(.dark *) { + --tw-text-opacity: 1; + color: rgb(255 255 255 / var(--tw-text-opacity)); +} + +.dark\:caret-white:is(.dark *) { + caret-color: #fff; +} + .hover\:dark\:border-rose-500:is(.dark *):hover { --tw-border-opacity: 1; border-color: rgb(244 63 94 / var(--tw-border-opacity)); @@ -2301,6 +2305,11 @@ video { border-color: rgb(87 83 78 / var(--tw-border-opacity)); } +.hover\:dark\:border-stone-700:is(.dark *):hover { + --tw-border-opacity: 1; + border-color: rgb(68 64 60 / var(--tw-border-opacity)); +} + .dark\:hover\:bg-stone-200:hover:is(.dark *) { --tw-bg-opacity: 1; background-color: rgb(231 229 228 / var(--tw-bg-opacity)); diff --git a/system/typemill/author/js/vue-kixote.js b/system/typemill/author/js/vue-kixote.js index 1f398e9..0afc6ed 100644 --- a/system/typemill/author/js/vue-kixote.js +++ b/system/typemill/author/js/vue-kixote.js @@ -15,114 +15,253 @@ const getKixoteError = function(error) return ['something went wrong']; } +const kixoteCommands = [ + { + name: 'help', + description: 'List all available commands with a short description.', + method: function() + { + let result = ['
You can use the following commands:
', + }, + { + name: 'exit', + description: 'Exit Kixote and close the Kixote window.', + }, + { + name: 'clear navigation', + description: 'Clear the cached navigation.', + method: function() + { + var self = this; + + tmaxios.delete('/api/v1/clearnavigation',{ + }) + .then(function (response) + { + eventBus.$emit('answer', ['navigation has been cleared']); + }) + .catch(function (error) + { + eventBus.$emit('answer', getKixoteError(error)); + }); + }, + answer: ['Asking server ...'], + }, + { + name: 'clear cache', + description: 'Clear the cache-folder and delete cached files.', + method: function() + { + var self = this; + + tmaxios.delete('/api/v1/cache',{ + }) + .then(function (response) + { + eventBus.$emit('answer', ['cache has been cleared']); + }) + .catch(function (error) + { + eventBus.$emit('answer', getKixoteError(error)); + }); + }, + answer: ['Asking server ...'], + }, + { + name: 'show security log', + description: 'Show the security log that you can activate in the security tab of the system settings.', + method: function() + { + var self = this; + + tmaxios.get('/api/v1/securitylog',{ + }) + .then(function (response) + { + eventBus.$emit('answer', response.data.lines); + eventBus.$emit('nextCommands', ['clear security log']); + }) + .catch(function (error) + { + eventBus.$emit('answer', getKixoteError(error)); + }); + }, + answer: ['Asking server ...'], + }, + { + name: 'clear security log', + description: 'Clear the security log.', + method: function() + { + var self = this; + + tmaxios.delete('/api/v1/securitylog',{ + }) + .then(function (response) + { + eventBus.$emit('answer', ['Security log has been cleared.']); + }) + .catch(function (error) + { + eventBus.$emit('answer', getKixoteError(error)); + }); + }, + answer: ['Asking server ...'], + }, /* -+ If you change page and open kixote, then the old version without changes is loaded -+ store kixoteSettings + { + name: 'skip', + description: 'Skip the current task and start a new command.', + answer: ['We skipped the current task. Waiting for your next command.'], + }, + { + name: 'create content', + description: 'Create content with artificial intelligence.', + params: [ + { + name: 'topic', + value: false, + question: 'Please describe a topic in few words:', + required: true, + regex: false, + }, + { + name: 'length', + value: false, + question: 'How many words should the text have?', + required: true, + regex: false, + }, + ], + method: function(params) + { + eventBus.$emit('storable', ['Lorem ipsum in markdown.']); + eventBus.$emit('nextCommands', ['transform', 'translate', 'save to page']); + eventBus.$emit('answer', ['This is the answer from the server. The server can ask an AI service with the collected parameters and return any kind of answer in HTML and preferably in markdown, so that typemill can process the content again (e.g. store, translate, and more).']); + }, + answer: ['Creating content...'], + }, + { + name: 'save to page', + description: 'Save markdown to current page.', + method: function(params) + { + console.info(params[0]); + eventBus.$emit('answer', ['saved content to page']); + }, + answer: ['Save content...'], + }, */ +]; const kixote = Vue.createApp({ - template: `+ Ki> + +
+ +Enter "help" to see a list of commands
+