ep_author_hover 0.3.54 → 1.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,7 +1,8 @@
1
- name: "Backend tests"
1
+ name: Backend Tests
2
2
 
3
3
  # any branch is useful for testing before a PR is submitted
4
- on: [push, pull_request]
4
+ on:
5
+ workflow_call:
5
6
 
6
7
  jobs:
7
8
  withplugins:
@@ -12,66 +13,80 @@ jobs:
12
13
  || (github.event.pull_request.head.repo.id != github.event.pull_request.base.repo.id)
13
14
  name: with Plugins
14
15
  runs-on: ubuntu-latest
15
-
16
16
  steps:
17
17
  -
18
18
  name: Install libreoffice
19
- run: |
20
- sudo add-apt-repository -y ppa:libreoffice/ppa
21
- sudo apt update
22
- sudo apt install -y --no-install-recommends libreoffice libreoffice-pdfimport
19
+ uses: awalsh128/cache-apt-pkgs-action@v1.4.2
20
+ with:
21
+ packages: libreoffice libreoffice-pdfimport
22
+ version: 1.0
23
23
  -
24
24
  name: Install etherpad core
25
25
  uses: actions/checkout@v3
26
26
  with:
27
27
  repository: ether/etherpad-lite
28
+ path: etherpad-lite
29
+ - uses: pnpm/action-setup@v3
30
+ name: Install pnpm
31
+ with:
32
+ version: 8
33
+ run_install: false
34
+ - name: Get pnpm store directory
35
+ shell: bash
36
+ run: |
37
+ echo "STORE_PATH=$(pnpm store path --silent)" >> $GITHUB_ENV
38
+ - uses: actions/cache@v4
39
+ name: Setup pnpm cache
40
+ with:
41
+ path: ${{ env.STORE_PATH }}
42
+ key: ${{ runner.os }}-pnpm-store-${{ hashFiles('**/pnpm-lock.yaml') }}
43
+ restore-keys: |
44
+ ${{ runner.os }}-pnpm-store-
28
45
  -
29
46
  name: Checkout plugin repository
30
47
  uses: actions/checkout@v3
31
48
  with:
32
- path: ./node_modules/__tmp
49
+ path: plugin
33
50
  -
34
51
  name: Determine plugin name
35
52
  id: plugin_name
53
+ working-directory: ./plugin
36
54
  run: |
37
- cd ./node_modules/__tmp
38
55
  npx -c 'printf %s\\n "::set-output name=plugin_name::${npm_package_name}"'
39
56
  -
40
- name: Rename plugin directory
57
+ name: Link plugin directory
58
+ working-directory: ./plugin
41
59
  run: |
42
- mv ./node_modules/__tmp ./node_modules/"${PLUGIN_NAME}"
43
- env:
44
- PLUGIN_NAME: ${{ steps.plugin_name.outputs.plugin_name }}
60
+ pnpm link --global
61
+ - name: Remove tests
62
+ working-directory: ./etherpad-lite
63
+ run: rm -rf ./src/tests/backend/specs
45
64
  -
46
- uses: actions/setup-node@v3
47
- with:
48
- node-version: 20
49
- cache: 'npm'
50
- cache-dependency-path: |
51
- src/package-lock.json
52
- src/bin/doc/package-lock.json
53
- node_modules/${{ steps.plugin_name.outputs.plugin_name }}/package-lock.json
54
- - run: npm install npm@6.14.18 -g
55
- name: Install legacy npm for correct dependency resolution
56
- -
57
- name: Install plugin dependencies
65
+ name: Install Etherpad core dependencies
66
+ working-directory: ./etherpad-lite
67
+ run: bin/installDeps.sh
68
+ - name: Link plugin to etherpad-lite
69
+ working-directory: ./etherpad-lite
58
70
  run: |
59
- cd ./node_modules/"${PLUGIN_NAME}"
60
- npm ci
71
+ pnpm link --global $PLUGIN_NAME
72
+ pnpm run install-plugins --path ../../plugin
61
73
  env:
62
74
  PLUGIN_NAME: ${{ steps.plugin_name.outputs.plugin_name }}
63
- # Etherpad core dependencies must be installed after installing the
64
- # plugin's dependencies, otherwise npm will try to hoist common
65
- # dependencies by removing them from src/node_modules and installing them
66
- # in the top-level node_modules. As of v6.14.10, npm's hoist logic appears
67
- # to be buggy, because it sometimes removes dependencies from
68
- # src/node_modules but fails to add them to the top-level node_modules.
69
- # Even if npm correctly hoists the dependencies, the hoisting seems to
70
- # confuse tools such as `npm outdated`, `npm update`, and some ESLint
71
- # rules.
72
- -
73
- name: Install Etherpad core dependencies
74
- run: src/bin/installDeps.sh
75
+ - name: Link ep_etherpad-lite
76
+ working-directory: ./etherpad-lite/src
77
+ run: |
78
+ pnpm link --global
79
+ - name: Link etherpad to plugin
80
+ working-directory: ./plugin
81
+ run: |
82
+ pnpm link --global ep_etherpad-lite
75
83
  -
76
84
  name: Run the backend tests
77
- run: cd src && npm test
85
+ working-directory: ./etherpad-lite
86
+ run: |
87
+ res=$(find .. -path "./node_modules/ep_*/static/tests/backend/specs/**" | wc -l)
88
+ if [ $res -eq 0 ]; then
89
+ echo "No backend tests found"
90
+ else
91
+ pnpm run test
92
+ fi
@@ -24,7 +24,7 @@ jobs:
24
24
 
25
25
  steps:
26
26
  - name: Checkout
27
- uses: actions/checkout@v3
27
+ uses: actions/checkout@v4
28
28
 
29
29
  - name: Initialize CodeQL
30
30
  uses: github/codeql-action/init@v2
@@ -1,46 +1,36 @@
1
1
  # Publicly credit Sauce Labs because they generously support open source
2
2
  # projects.
3
- name: "frontend tests powered by Sauce Labs"
3
+ name: Frontend Tests
4
4
 
5
- on: [push]
5
+ on:
6
+ workflow_call:
6
7
 
7
8
  jobs:
8
- test:
9
+ test-frontend:
9
10
  runs-on: ubuntu-latest
10
11
 
11
12
  steps:
12
- -
13
- name: Fail if Dependabot
14
- if: github.actor == 'dependabot[bot]'
15
- run: |
16
- cat <<EOF >&2
17
- Frontend tests skipped because Dependabot can't access secrets.
18
- Manually re-run the jobs to run the frontend tests.
19
- For more information, see:
20
- https://github.blog/changelog/2021-02-19-github-actions-workflows-triggered-by-dependabot-prs-will-run-with-read-only-permissions/
21
- EOF
22
- exit 1
23
- -
24
- name: Generate Sauce Labs strings
25
- id: sauce_strings
26
- run: |
27
- printf %s\\n '::set-output name=name::${{github.event.repository.name}} ${{ github.workflow }} - ${{ github.job }}'
28
- printf %s\\n '::set-output name=tunnel_id::${{ github.run_id }}-${{ github.run_number }}-${{ github.job }}'
29
13
  -
30
14
  name: Check out Etherpad core
31
15
  uses: actions/checkout@v3
32
16
  with:
33
17
  repository: ether/etherpad-lite
34
- -
35
- uses: actions/setup-node@v3
18
+ - uses: pnpm/action-setup@v3
19
+ name: Install pnpm
20
+ with:
21
+ version: 8
22
+ run_install: false
23
+ - name: Get pnpm store directory
24
+ shell: bash
25
+ run: |
26
+ echo "STORE_PATH=$(pnpm store path --silent)" >> $GITHUB_ENV
27
+ - uses: actions/cache@v4
28
+ name: Setup pnpm cache
36
29
  with:
37
- node-version: 20
38
- cache: 'npm'
39
- cache-dependency-path: |
40
- src/package-lock.json
41
- src/bin/doc/package-lock.json
42
- - run: npm install npm@6.14.18 -g
43
- name: Install legacy npm for correct dependency resolution
30
+ path: ${{ env.STORE_PATH }}
31
+ key: ${{ runner.os }}-pnpm-store-${{ hashFiles('**/pnpm-lock.yaml') }}
32
+ restore-keys: |
33
+ ${{ runner.os }}-pnpm-store-
44
34
  -
45
35
  name: Check out the plugin
46
36
  uses: actions/checkout@v3
@@ -70,7 +60,7 @@ jobs:
70
60
  PLUGIN_NAME: ${{ steps.plugin_name.outputs.plugin_name }}
71
61
  run: |
72
62
  cd ./node_modules/"${PLUGIN_NAME}"
73
- npm ci
63
+ pnpm i
74
64
  # Etherpad core dependencies must be installed after installing the
75
65
  # plugin's dependencies, otherwise npm will try to hoist common
76
66
  # dependencies by removing them from src/node_modules and installing them
@@ -82,31 +72,23 @@ jobs:
82
72
  # rules.
83
73
  -
84
74
  name: Install Etherpad core dependencies
85
- run: src/bin/installDeps.sh
86
- -
87
- name: Create settings.json
88
- run: cp settings.json.template settings.json
89
- -
90
- name: Disable import/export rate limiting
91
- run: |
92
- sed -e '/^ *"importExportRateLimiting":/,/^ *\}/ s/"max":.*/"max": 0/' -i settings.json
93
- -
94
- name: Remove standard frontend test files
95
- run: rm -rf src/tests/frontend/specs
96
- -
97
- uses: saucelabs/sauce-connect-action@v2.1.1
98
- with:
99
- username: ${{ secrets.SAUCE_USERNAME }}
100
- accessKey: ${{ secrets.SAUCE_ACCESS_KEY }}
101
- tunnelIdentifier: ${{ steps.sauce_strings.outputs.tunnel_id }}
102
- -
103
- name: Run the frontend tests
75
+ run: bin/installDeps.sh
76
+ - name: Create settings.json
77
+ run: cp ./src/tests/settings.json settings.json
78
+ - name: Run the frontend tests
104
79
  shell: bash
105
- env:
106
- SAUCE_USERNAME: ${{ secrets.SAUCE_USERNAME }}
107
- SAUCE_ACCESS_KEY: ${{ secrets.SAUCE_ACCESS_KEY }}
108
- SAUCE_NAME: ${{ steps.sauce_strings.outputs.name }}
109
- TRAVIS_JOB_NUMBER: ${{ steps.sauce_strings.outputs.tunnel_id }}
110
- GIT_HASH: ${{ steps.environment.outputs.sha_short }}
111
80
  run: |
112
- src/tests/frontend/travis/runner.sh
81
+ pnpm run dev &
82
+ connected=false
83
+ can_connect() {
84
+ curl -sSfo /dev/null http://localhost:9001/ || return 1
85
+ connected=true
86
+ }
87
+ now() { date +%s; }
88
+ start=$(now)
89
+ while [ $(($(now) - $start)) -le 15 ] && ! can_connect; do
90
+ sleep 1
91
+ done
92
+ cd src
93
+ pnpm exec playwright install chromium --with-deps
94
+ pnpm run test-ui --project=chromium
@@ -4,92 +4,40 @@
4
4
  name: Node.js Package
5
5
 
6
6
  on:
7
- pull_request:
8
- push:
9
- branches:
10
- - main
11
- - master
7
+ workflow_call:
12
8
 
13
9
  jobs:
14
- test:
10
+ publish-npm:
15
11
  runs-on: ubuntu-latest
16
12
  steps:
17
- # Clone ether/etherpad-lite to ../etherpad-lite so that ep_etherpad-lite
18
- # can be "installed" in this plugin's node_modules. The checkout v2 action
19
- # doesn't support cloning outside of $GITHUB_WORKSPACE (see
20
- # https://github.com/actions/checkout/issues/197), so the repo is first
21
- # cloned to etherpad-lite then moved to ../etherpad-lite. To avoid
22
- # conflicts with this plugin's clone, etherpad-lite must be cloned and
23
- # moved out before this plugin's repo is cloned to $GITHUB_WORKSPACE.
24
- -
13
+ - uses: actions/setup-node@v4
14
+ with:
15
+ node-version: 20
16
+ registry-url: https://registry.npmjs.org/
17
+ - name: Check out Etherpad core
25
18
  uses: actions/checkout@v3
26
19
  with:
27
20
  repository: ether/etherpad-lite
28
- path: etherpad-lite
29
- -
30
- run: mv etherpad-lite ..
31
- # etherpad-lite has been moved outside of $GITHUB_WORKSPACE, so it is now
32
- # safe to clone this plugin's repo to $GITHUB_WORKSPACE.
33
- -
34
- uses: actions/checkout@v3
35
- # This is necessary for actions/setup-node because '..' can't be used in
36
- # cache-dependency-path.
37
- -
38
- name: Create ep_etherpad-lite symlink
21
+ - uses: pnpm/action-setup@v3
22
+ name: Install pnpm
23
+ with:
24
+ version: 8
25
+ run_install: false
26
+ - name: Get pnpm store directory
27
+ shell: bash
39
28
  run: |
40
- mkdir -p node_modules
41
- ln -s ../../etherpad-lite/src node_modules/ep_etherpad-lite
42
- -
43
- uses: actions/setup-node@v3
29
+ echo "STORE_PATH=$(pnpm store path --silent)" >> $GITHUB_ENV
30
+ - uses: actions/cache@v4
31
+ name: Setup pnpm cache
44
32
  with:
45
- node-version: 20
46
- cache: 'npm'
47
- cache-dependency-path: |
48
- node_modules/ep_etherpad-lite/package-lock.json
49
- node_modules/ep_etherpad-lite/bin/doc/package-lock.json
50
- package-lock.json
51
- - run: npm install npm@6.14.18 -g
52
- name: Install legacy npm for correct dependency resolution
53
- # All of ep_etherpad-lite's devDependencies are installed because the
54
- # plugin might do `require('ep_etherpad-lite/node_modules/${devDep}')`.
55
- # Eventually it would be nice to create an ESLint plugin that prohibits
56
- # Etherpad plugins from piggybacking off of ep_etherpad-lite's
57
- # devDependencies. If we had that, we could change this line to only
58
- # install production dependencies.
59
- -
60
- run: cd ../etherpad-lite/src && npm ci
61
- -
62
- run: npm ci
63
- # This runs some sanity checks and creates a symlink at
64
- # node_modules/ep_etherpad-lite that points to ../../etherpad-lite/src.
65
- # This step must be done after `npm ci` installs the plugin's dependencies
66
- # because npm "helpfully" cleans up such symlinks. :( Installing
67
- # ep_etherpad-lite in the plugin's node_modules prevents lint errors and
68
- # unit test failures if the plugin does `require('ep_etherpad-lite/foo')`.
69
- -
70
- run: npm install --no-save ep_etherpad-lite@file:../etherpad-lite/src
71
- -
72
- run: npm test
73
- -
74
- run: npm run lint
75
-
76
- publish-npm:
77
- if: github.event_name == 'push'
78
- needs: test
79
- runs-on: ubuntu-latest
80
- steps:
33
+ path: ${{ env.STORE_PATH }}
34
+ key: ${{ runner.os }}-pnpm-store-${{ hashFiles('**/pnpm-lock.yaml') }}
35
+ restore-keys: |
36
+ ${{ runner.os }}-pnpm-store-
81
37
  -
82
38
  uses: actions/checkout@v3
83
39
  with:
84
40
  fetch-depth: 0
85
- -
86
- uses: actions/setup-node@v3
87
- with:
88
- node-version: 20
89
- registry-url: https://registry.npmjs.org/
90
- cache: 'npm'
91
- - run: npm install npm@6.14.18 -g
92
- name: Install legacy npm for correct dependency resolution
93
41
  -
94
42
  name: Bump version (patch)
95
43
  run: |
@@ -98,13 +46,13 @@ jobs:
98
46
  [ "${NEW_COMMITS}" -gt 0 ] || exit 0
99
47
  git config user.name 'github-actions[bot]'
100
48
  git config user.email '41898282+github-actions[bot]@users.noreply.github.com'
101
- npm ci
102
- npm version patch
49
+ pnpm i
50
+ pnpm version patch
103
51
  git push --follow-tags
104
52
  # This is required if the package has a prepare script that uses something
105
53
  # in dependencies or devDependencies.
106
54
  -
107
- run: npm ci
55
+ run: pnpm i
108
56
  # `npm publish` must come after `git push` otherwise there is a race
109
57
  # condition: If two PRs are merged back-to-back then master/main will be
110
58
  # updated with the commits from the second PR before the first PR's
@@ -116,11 +64,11 @@ jobs:
116
64
  # back-to-back merges will cause the first merge's workflow to fail but
117
65
  # the second's will succeed.
118
66
  -
119
- run: npm publish
120
- env:
121
- NODE_AUTH_TOKEN: ${{secrets.NPM_TOKEN}}
122
- -
123
- name: Add package to etherpad organization
124
- run: npm access grant read-write etherpad:developers
67
+ run: pnpm publish
125
68
  env:
126
69
  NODE_AUTH_TOKEN: ${{secrets.NPM_TOKEN}}
70
+ #-
71
+ # name: Add package to etherpad organization
72
+ # run: pnpm access grant read-write etherpad:developers
73
+ # env:
74
+ # NODE_AUTH_TOKEN: ${{secrets.NPM_TOKEN}}
@@ -0,0 +1,18 @@
1
+ name: Node.js Package
2
+ on: [push]
3
+
4
+
5
+ jobs:
6
+ backend:
7
+ uses: ./.github/workflows/backend-tests.yml
8
+ secrets: inherit
9
+ frontend:
10
+ uses: ./.github/workflows/frontend-tests.yml
11
+ secrets: inherit
12
+ release:
13
+ if: ${{ github.ref == 'refs/heads/master' || github.ref == 'refs/heads/main' }}
14
+ needs:
15
+ - backend
16
+ - frontend
17
+ uses: ./.github/workflows/npmpublish.yml
18
+ secrets: inherit
@@ -0,0 +1,10 @@
1
+ {
2
+ "@metadata": {
3
+ "authors": [
4
+ "Atriwidada"
5
+ ]
6
+ },
7
+ "ep_author_hover.me": "Saya",
8
+ "ep_author_hover.unknow_author": "Penulis Tidak Diketahui",
9
+ "ep_author_hover.showHoverLabel": "Tampilkan Penulis saat Mengapung"
10
+ }
@@ -0,0 +1,10 @@
1
+ {
2
+ "@metadata": {
3
+ "authors": [
4
+ "Inabat Allanova"
5
+ ]
6
+ },
7
+ "ep_author_hover.me": "Ózim",
8
+ "ep_author_hover.unknow_author": "Belgisiz avtor",
9
+ "ep_author_hover.showHoverLabel": "Avtordı Hoverde kórsetiw"
10
+ }
@@ -0,0 +1,10 @@
1
+ {
2
+ "@metadata": {
3
+ "authors": [
4
+ "Nokeoo"
5
+ ]
6
+ },
7
+ "ep_author_hover.me": "Aš",
8
+ "ep_author_hover.unknow_author": "Nežinomas autorius",
9
+ "ep_author_hover.showHoverLabel": "Rodyti autorių užvedus pelę"
10
+ }
package/package.json CHANGED
@@ -6,7 +6,7 @@
6
6
  },
7
7
  "name": "ep_author_hover",
8
8
  "description": "Adds author names to span titles (shows on hover), works as authors change their name. Hover includes author color and fast switching between author spans. Hat tip to Martyn York for the initial work on this.",
9
- "version": "0.3.54",
9
+ "version": "1.0.1",
10
10
  "repository": {
11
11
  "type": "git",
12
12
  "url": "git@github.com:JohnMcLear/ep_author_hover.git"
@@ -16,18 +16,15 @@
16
16
  "url": "https://etherpad.org/"
17
17
  },
18
18
  "devDependencies": {
19
- "eslint": "^8.11.0",
20
- "eslint-config-etherpad": "^3.0.9",
21
- "typescript": "^4.6.2"
19
+ "eslint": "^8.57.0",
20
+ "eslint-config-etherpad": "^3.0.22",
21
+ "typescript": "^5.4.2"
22
+ },
23
+ "engines": {
24
+ "node": ">=18.0.0"
22
25
  },
23
26
  "scripts": {
24
27
  "lint": "eslint .",
25
28
  "lint:fix": "eslint --fix ."
26
- },
27
- "engines": {
28
- "node": ">=12.17.0"
29
- },
30
- "peerDependencies": {
31
- "ep_etherpad-lite": ">=1.8.6"
32
29
  }
33
- }
30
+ }
@@ -1,20 +1,19 @@
1
1
  'use strict';
2
2
 
3
3
  const padcookie = require('ep_etherpad-lite/static/js/pad_cookie').padcookie;
4
+ import html10n from 'ep_etherpad-lite/static/js/vendors/html10n'
4
5
 
5
6
  let timer = 0;
6
7
 
7
8
  const showAuthor = {
8
- enable: (context) => {
9
- context.ace.callWithAce((ace) => {
10
- const doc = ace.ace_getDocument();
11
- $(doc).find('#innerdocbody').mousemove(exports.showAuthor.hover.bind(ace));
12
- }, 'showAuthor', true);
9
+ enable: () => {
10
+ $('iframe[name="ace_outer"]').contents().find('iframe')
11
+ .contents().find('#innerdocbody').on('mousemove',exports.showAuthor.hover);
13
12
  },
14
13
  disable: (context) => {
15
14
  context.ace.callWithAce((ace) => {
16
15
  const doc = ace.ace_getDocument();
17
- $(doc).find('#innerdocbody').mousemove(null.bind(ace));
16
+ $(doc).find('#innerdocbody').on('mousemove',null.bind(ace));
18
17
  }, 'showAuthor', true);
19
18
  },
20
19
  hover: (span) => {
@@ -34,7 +33,7 @@ const showAuthor = {
34
33
  if (!authorId) { return; } // Default text isn't shown
35
34
  showAuthor.destroy(); // Destroy existing
36
35
  const authorNameAndColor =
37
- showAuthor.authorNameAndColorFromAuthorId(authorId); // Get the authorName And Color
36
+ showAuthor.authorNameAndColorFromAuthorId(authorId); // Get the authorName And Color
38
37
  showAuthor.draw(span, authorNameAndColor.name, authorNameAndColor.color);
39
38
  }
40
39
  },
@@ -57,7 +56,7 @@ const showAuthor = {
57
56
  const myAuthorId = pad.myUserInfo.userId.substring(0, 14);
58
57
  if (myAuthorId === authorId) {
59
58
  return {
60
- name: window._('ep_author_hover.me'),
59
+ name: html10n.get('ep_author_hover.me'),
61
60
  color: '#fff',
62
61
  };
63
62
  }
@@ -68,7 +67,7 @@ const showAuthor = {
68
67
  if (authorId === $(this).data('authorid').substring(0, 14)) {
69
68
  $(this).find('.usertdname').each(function () {
70
69
  authorObj.name = $(this).text();
71
- if (authorObj.name === '') authorObj.name = window._('ep_author_hover.unknow_author');
70
+ if (authorObj.name === '') authorObj.name = html10n.get('ep_author_hover.unknow_author');
72
71
  });
73
72
  $(this).find('.usertdswatch > div').each(function () {
74
73
  authorObj.color = $(this).css('background-color');
@@ -83,12 +82,12 @@ const showAuthor = {
83
82
  authorObj = clientVars.collab_client_vars.historicalAuthorData[fullAuthorId];
84
83
  }
85
84
 
86
- return authorObj || {name: window._('ep_author_hover.unknow_author'), color: '#fff'};
85
+ return authorObj || {name: html10n.get('ep_author_hover.unknow_author'), color: '#fff'};
87
86
  },
88
87
  draw: (target, authorName, authorColor) => {
89
88
  if (!authorName) {
90
89
  const warning =
91
- 'No authorName, I have no idea why! Help me debug this by providing steps to replicate!';
90
+ 'No authorName, I have no idea why! Help me debug this by providing steps to replicate!';
92
91
  console.warn(warning);
93
92
  return;
94
93
  }
@@ -144,11 +143,7 @@ exports.postAceInit = (hookName, context) => {
144
143
  $('#options-author-hover').attr('checked', 'checked');
145
144
  }
146
145
 
147
- if ($('#options-author-hover').is(':checked')) {
148
- clientVars.plugins.plugins.ep_author_hover.enabled = true;
149
- } else {
150
- clientVars.plugins.plugins.ep_author_hover.enabled = false;
151
- }
146
+ clientVars.plugins.plugins.ep_author_hover.enabled = !!$('#options-author-hover').is(':checked');
152
147
 
153
148
  /* on click */
154
149
  $('#options-author-hover').on('click', () => {