diff --git a/eejs.js b/eejs.js deleted file mode 100644 index 51f1884..0000000 --- a/eejs.js +++ /dev/null @@ -1,20 +0,0 @@ -'use strict'; - -const eejs = require('ep_etherpad-lite/node/eejs/'); - -exports.eejsBlock_mySettings = (hookName, args, cb) => { - args.content += eejs.require( - 'ep_reference/templates/referenceSettings.ejs', {settings: false}); - cb(); -}; - -exports.eejsBlock_body = (hookName, args, cb) => { - args.content += eejs.require('ep_reference/templates/reference.ejs'); - cb(); -}; - -exports.eejsBlock_dd_help = (hookName, args, cb) => { - // args.content = eejs.require('ep_reference/templates/reference.ejs', - // {settings : false}) + args.content; - cb(); -}; diff --git a/ep.json b/ep.json index 24f664d..0b88959 100644 --- a/ep.json +++ b/ep.json @@ -5,6 +5,7 @@ "client_hooks": { "postAceInit": "ep_reference/static/js/index:postAceInit", "handleClientMessage_CUSTOM": "ep_reference/static/js/index", + "handleClientMessage_CLIENT_MESSAGE": "ep_reference/static/js/index:handleClientMessage_CLIENT_MESSAGE", "aceInitialized": "ep_reference/static/js/index", "aceAttribsToClasses": "ep_reference/static/js/index", "aceDomLineProcessLineAttributes": "ep_reference/static/js/index", @@ -15,9 +16,12 @@ "aceRegisterLineAttributes":"ep_reference/static/js/index" }, "hooks": { - "eejsBlock_body":"ep_reference/eejs", - "eejsBlock_mySettings":"ep_reference/eejs", - "eejsBlock_dd_help":"ep_reference/eejs" + "loadSettings": "ep_reference/index", + "clientVars": "ep_reference/index", + "eejsBlock_body": "ep_reference/index", + "eejsBlock_mySettings": "ep_reference/index", + "eejsBlock_padSettings": "ep_reference/index", + "eejsBlock_dd_help": "ep_reference/index" } } ] diff --git a/index.js b/index.js new file mode 100644 index 0000000..724e56b --- /dev/null +++ b/index.js @@ -0,0 +1,29 @@ +'use strict'; + +const eejs = require('ep_etherpad-lite/node/eejs/'); +const {padToggle} = require('ep_plugin_helpers/pad-toggle-server'); + +// Parallel User Settings + Pad Wide Settings checkboxes for the reference +// pane visibility. Helper owns the storage, broadcast, enforce, and i18n +// wiring. +const referenceToggle = padToggle({ + pluginName: 'ep_reference', + settingId: 'reference', + l10nId: 'ep_reference.title', + defaultLabel: 'Show Reference / Quote creator', + defaultEnabled: false, +}); + +exports.loadSettings = referenceToggle.loadSettings; +exports.clientVars = referenceToggle.clientVars; +exports.eejsBlock_mySettings = referenceToggle.eejsBlock_mySettings; +exports.eejsBlock_padSettings = referenceToggle.eejsBlock_padSettings; + +exports.eejsBlock_body = (hookName, args, cb) => { + args.content += eejs.require('ep_reference/templates/reference.ejs'); + cb(); +}; + +exports.eejsBlock_dd_help = (hookName, args, cb) => { + cb(); +}; diff --git a/package.json b/package.json index 05b5fe9..7c2e426 100644 --- a/package.json +++ b/package.json @@ -1,7 +1,7 @@ { "name": "ep_reference", "description": "Reference content from other Pads", - "version": "0.0.65", + "version": "0.1.0", "author": "johnyma22 (John McLear) ", "repository": { "type": "git", @@ -11,6 +11,9 @@ "type": "individual", "url": "https://etherpad.org/" }, + "dependencies": { + "ep_plugin_helpers": "^0.3.0" + }, "devDependencies": { "eslint": "^8.57.1", "eslint-config-etherpad": "^4.0.5", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 17baff3..1f3f39a 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -7,6 +7,10 @@ settings: importers: .: + dependencies: + ep_plugin_helpers: + specifier: ^0.3.0 + version: 0.3.1 devDependencies: eslint: specifier: ^8.57.1 @@ -181,31 +185,37 @@ packages: resolution: {integrity: sha512-p+s/Wp8rf75Qqs2EPw4HC0xVLLW+/60MlVAsB7TYLoeg1e1CU/QCis36FxpziLS0ZY2+wXdTnPUxr+5kkThzwQ==} cpu: [arm64] os: [linux] + libc: [glibc] '@unrs/rspack-resolver-binding-linux-arm64-musl@1.3.0': resolution: {integrity: sha512-cZEL9jmZ2kAN53MEk+fFCRJM8pRwOEboDn7sTLjZW+hL6a0/8JNfHP20n8+MBDrhyD34BSF4A6wPCj/LNhtOIQ==} cpu: [arm64] os: [linux] + libc: [musl] '@unrs/rspack-resolver-binding-linux-ppc64-gnu@1.3.0': resolution: {integrity: sha512-IOeRhcMXTNlk2oApsOozYVcOHu4t1EKYKnTz4huzdPyKNPX0Y9C7X8/6rk4aR3Inb5s4oVMT9IVKdgNXLcpGAQ==} cpu: [ppc64] os: [linux] + libc: [glibc] '@unrs/rspack-resolver-binding-linux-s390x-gnu@1.3.0': resolution: {integrity: sha512-op54XrlEbhgVRCxzF1pHFcLamdOmHDapwrqJ9xYRB7ZjwP/zQCKzz/uAsSaAlyQmbSi/PXV7lwfca4xkv860/Q==} cpu: [s390x] os: [linux] + libc: [glibc] '@unrs/rspack-resolver-binding-linux-x64-gnu@1.3.0': resolution: {integrity: sha512-orbQF7sN02N/b9QF8Xp1RBO5YkfI+AYo9VZw0H2Gh4JYWSuiDHjOPEeFPDIRyWmXbQJuiVNSB+e1pZOjPPKIyg==} cpu: [x64] os: [linux] + libc: [glibc] '@unrs/rspack-resolver-binding-linux-x64-musl@1.3.0': resolution: {integrity: sha512-kpjqjIAC9MfsjmlgmgeC8U9gZi6g/HTuCqpI7SBMjsa7/9MvBaQ6TJ7dtnsV/+DXvfJ2+L5teBBXG+XxfpvIFA==} cpu: [x64] os: [linux] + libc: [musl] '@unrs/rspack-resolver-binding-wasm32-wasi@1.3.0': resolution: {integrity: sha512-JAg0hY3kGsCPk7Jgh16yMTBZ6VEnoNR1DFZxiozjKwH+zSCfuDuM5S15gr50ofbwVw9drobIP2TTHdKZ15MJZQ==} @@ -394,6 +404,10 @@ packages: resolution: {integrity: sha512-Qohcme7V1inbAfvjItgw0EaxVX5q2rdVEZHRBrEQdRZTssLDGsL8Lwrznl8oQ/6kuTJONLaDcGjkNP247XEhcA==} engines: {node: '>=10.13.0'} + ep_plugin_helpers@0.3.1: + resolution: {integrity: sha512-PHvLsJGJHQNLvP4R4k+D54f6JasD/uv9T4S0UaLHePjQBy0INpiS8iFXLeAY60EbgeznhMJLgE2DVy+32bZTLQ==} + engines: {node: '>=18.0.0'} + es-abstract@1.24.2: resolution: {integrity: sha512-2FpH9Q5i2RRwyEP1AylXe6nYLR5OhaJTZwmlcP0dL/+JCbgg7yyEo/sEK6HeGZRf3dFpWwThaRHVApXSkW3xeg==} engines: {node: '>= 0.4'} @@ -1667,6 +1681,8 @@ snapshots: graceful-fs: 4.2.11 tapable: 2.3.2 + ep_plugin_helpers@0.3.1: {} + es-abstract@1.24.2: dependencies: array-buffer-byte-length: 1.0.2 diff --git a/static/js/index.js b/static/js/index.js index 462419b..4989cfe 100644 --- a/static/js/index.js +++ b/static/js/index.js @@ -3,8 +3,27 @@ /* Include the Security module, we will use this later to escape a HTML attribute*/ const Security = require('ep_etherpad-lite/static/js/security'); const underscore = require('ep_etherpad-lite/static/js/underscore'); +// Sub-path import keeps the client bundle clean. Importing the top-level +// `ep_plugin_helpers` index pulls in every helper's getters; `settings` and +// `toggle` reach server-only modules (eejs, Settings) which esbuild can't +// resolve for the browser. +const {padToggle} = require('ep_plugin_helpers/pad-toggle'); let originalRight = 0; +// Same config as the server-side instance — must agree on pluginName, +// settingId, and l10nId for the checkbox ids and clientVars lookup to line up. +const referenceToggle = padToggle({ + pluginName: 'ep_reference', + settingId: 'reference', + l10nId: 'ep_reference.title', + defaultLabel: 'Show Reference / Quote creator', + defaultEnabled: false, +}); + +// Re-export so the helper sees pad-wide broadcasts and refreshes our state +// when another user toggles the pad-wide checkbox. +exports.handleClientMessage_CLIENT_MESSAGE = referenceToggle.handleClientMessage_CLIENT_MESSAGE; + exports.aceEditorCSS = () => ['ep_reference/static/css/editor.css']; exports.aceRegisterBlockElements = () => ['reference', 'quotation']; @@ -47,12 +66,8 @@ exports.postAceInit = (name, context) => { }); }); - $('#options-reference').click(function () { - if ($(this).is(':checked')) { - referenceShow(); - } else { - referenceHide(); - } + referenceToggle.init({ + onChange: (enabled) => { enabled ? referenceShow() : referenceHide(); }, }); $('#referenceForm').submit((e) => { diff --git a/templates/referenceSettings.ejs b/templates/referenceSettings.ejs deleted file mode 100644 index b770f5d..0000000 --- a/templates/referenceSettings.ejs +++ /dev/null @@ -1,4 +0,0 @@ -

- - -