joplock/package.json
igor 9fe3409b1c
Some checks are pending
Build and push Joplock image / build-and-push (push) Waiting to run
feat(editor): dual-mode editor — CodeMirror 6 markdown + TinyMCE 8 rendered
Squash-merge of the `tinymce` branch: replaces the previous editor with a
dual-mode setup backed by the hidden #note-body textarea.

- Rendered mode = TinyMCE 8 (persistent singleton over #tinymce-slot),
  markdown round-trip via Turndown (tinymceToMarkdown).
- Markdown mode = CodeMirror 6 mounted in #cm-host (initCM/getCM/
  cmSyncToTA/cmSetVal/mountMarkdownEditor); codemirror.min.js loaded
  before app.js. Full-screen CM6 code modal + language picker.
- Code highlighting: hljs in preview/markdown, Prism (codesample) in
  rendered mode.

Text expander + AI prose completion wired for both modes:
- Text triggers expand in CM6 and in TinyMCE.
- AI-action triggers and Ctrl/Cmd-Space run prose completion; in rendered
  mode the completion is offered in the same accept/dismiss popup as
  markdown mode (Enter/Tab insert, Esc discard), positioned at the iframe
  caret, inserted as DOM text nodes and synced to #note-body.

Uploads: upload modal + direct drag/paste into TinyMCE and CM6, admin
maxUploadMb limit with fast 413 pre-check, dropped images get a trailing
blank line, upload-reload sync.

Also included: per-user spellcheck toggle, runtime-toggleable debug
logging, settings-page Esc dismiss, separate render/markdown font sizes,
persisted editor mode, blank-line/image-spacing fixes across mode
switches.

Tests: cm6MarkdownMode, expanderRuntime, appRuntime, markdownToolbarClicks
unit suites (558 total, all passing) + playwright specs (desktop,
ai-rendered live provider E2E, upload-reload, resource-lifecycle).
2026-07-06 17:00:57 +12:00

40 lines
1.4 KiB
JSON

{
"name": "joplock",
"private": true,
"version": "0.1.0",
"description": "Thin-client sidecar web UI for stock Joplin Server",
"main": "server.js",
"scripts": {
"start": "node server.js",
"test": "node --test tests/*.test.js",
"build:cm": "cd cm-build && npm install && npm run build",
"build:hljs": "cd hljs-build && npm install && npm run build",
"test:ui": "playwright test",
"test:ui:headed": "playwright test --headed",
"generate:pwa-assets": "node ./scripts/generatePwaAssets.mjs",
"docker:build": "docker build -t joplock .",
"docker:up": "docker compose up -d",
"docker:down": "docker compose down",
"docker:up:build": "docker compose -f docker-compose-build.yml up -d --build",
"docker:down:build": "docker compose -f docker-compose-build.yml down",
"docker:up:dev": "docker compose -f docker-compose.dev.yml up -d --build",
"docker:down:dev": "docker compose -f docker-compose.dev.yml down",
"docker:up:full": "docker compose -f docker-compose.example-full.yml up -d",
"docker:down:full": "docker compose -f docker-compose.example-full.yml down"
},
"dependencies": {
"@adobe/css-tools": "4.4.4",
"@mixmark-io/domino": "2.2.0",
"bcryptjs": "^3.0.3",
"html-entities": "1.4.0",
"markdown-it": "^14.1.1",
"pg": "8.16.3",
"qr-image": "^3.2.0",
"tinymce": "^8.6.0"
},
"devDependencies": {
"@playwright/test": "^1.59.1",
"jsdom": "26.1.0",
"sharp": "^0.34.5"
}
}