ep_hljs 0.1.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.
Files changed (55) hide show
  1. package/.eslintrc.cjs +10 -0
  2. package/.github/workflows/automerge.yml +45 -0
  3. package/.github/workflows/backend-tests.yml +75 -0
  4. package/.github/workflows/codeql.yml +41 -0
  5. package/.github/workflows/frontend-tests.yml +72 -0
  6. package/.github/workflows/npmpublish.yml +124 -0
  7. package/.github/workflows/test-and-release.yml +32 -0
  8. package/CLAUDE.md +141 -0
  9. package/LICENSE +201 -0
  10. package/README.md +56 -0
  11. package/demo.gif +0 -0
  12. package/demo.png +0 -0
  13. package/ep.json +26 -0
  14. package/index.js +109 -0
  15. package/lib/exportRenderer.js +39 -0
  16. package/lib/languageAllowlist.js +16 -0
  17. package/lib/padLanguageStore.js +27 -0
  18. package/locales/en.json +10 -0
  19. package/package.json +59 -0
  20. package/pnpm-workspace.yaml +2 -0
  21. package/scripts/build-vendor.js +45 -0
  22. package/static/css/editor.css +94 -0
  23. package/static/css/themes/github-dark.css +118 -0
  24. package/static/css/themes/github.css +118 -0
  25. package/static/js/codeIndent.js +107 -0
  26. package/static/js/constants.js +7 -0
  27. package/static/js/domOverlay.js +16 -0
  28. package/static/js/highlightRegistry.js +109 -0
  29. package/static/js/hljsAdapter.js +80 -0
  30. package/static/js/index.js +124 -0
  31. package/static/js/lruCache.js +28 -0
  32. package/static/js/syntaxRenderer.js +201 -0
  33. package/static/js/themeBridge.js +76 -0
  34. package/static/js/vendor/hljs.min.js +5 -0
  35. package/static/tests/backend/specs/codeIndent.test.js +144 -0
  36. package/static/tests/backend/specs/export.test.js +47 -0
  37. package/static/tests/backend/specs/highlightRegistry.test.js +59 -0
  38. package/static/tests/backend/specs/hljsAdapter.test.js +43 -0
  39. package/static/tests/backend/specs/lruCache.test.js +45 -0
  40. package/static/tests/backend/specs/padLanguageStore.test.js +63 -0
  41. package/static/tests/backend/specs/socket.test.js +54 -0
  42. package/static/tests/frontend-new/helper/highlights.ts +64 -0
  43. package/static/tests/frontend-new/specs/caret-stability.spec.ts +106 -0
  44. package/static/tests/frontend-new/specs/code-indent.spec.ts +78 -0
  45. package/static/tests/frontend-new/specs/collaboration.spec.ts +59 -0
  46. package/static/tests/frontend-new/specs/content-sync.spec.ts +45 -0
  47. package/static/tests/frontend-new/specs/dark-mode.spec.ts +87 -0
  48. package/static/tests/frontend-new/specs/export.spec.ts +31 -0
  49. package/static/tests/frontend-new/specs/initial-paint.spec.ts +49 -0
  50. package/static/tests/frontend-new/specs/language-picker.spec.ts +54 -0
  51. package/static/tests/frontend-new/specs/large-pad.spec.ts +36 -0
  52. package/static/tests/frontend-new/specs/lifecycle.spec.ts +27 -0
  53. package/static/tests/frontend-new/specs/multi-user-caret.spec.ts +167 -0
  54. package/static/tests/frontend-new/specs/single-line-while.spec.ts +50 -0
  55. package/templates/editbarButtons.ejs +29 -0
@@ -0,0 +1,50 @@
1
+ import {expect, test, Page} from '@playwright/test';
2
+ import {goToNewPad} from 'ep_etherpad-lite/tests/frontend-new/helper/padHelper';
3
+ import {expectHighlightWithin, highlightTexts} from '../helper/highlights';
4
+
5
+ test.setTimeout(20_000);
6
+
7
+ const inner = (page: Page) => page
8
+ .frameLocator('iframe[name="ace_outer"]')
9
+ .frameLocator('iframe[name="ace_inner"]');
10
+
11
+ const setupPad = async (page: Page) => {
12
+ await goToNewPad(page);
13
+ await page.waitForTimeout(1500);
14
+ await inner(page).locator('body').click();
15
+ await page.keyboard.press('Control+A');
16
+ await page.keyboard.press('Delete');
17
+ await page.waitForTimeout(300);
18
+ };
19
+
20
+ const pickLanguage = async (page: Page, value: string) => {
21
+ const niceWrapper = page.locator('#ep_hljs_li .nice-select');
22
+ if (await niceWrapper.count() > 0) {
23
+ await niceWrapper.click();
24
+ await page.locator(`#ep_hljs_li .nice-select .option[data-value="${value}"]`).click();
25
+ } else {
26
+ await page.locator('#ep_hljs_select').selectOption(value);
27
+ }
28
+ };
29
+
30
+ test('single line "while" with JS gets ::highlight(hljs-keyword)', async ({page}) => {
31
+ await setupPad(page);
32
+ await pickLanguage(page, 'javascript');
33
+ await inner(page).locator('body').click();
34
+ await page.keyboard.type('while');
35
+ await page.waitForTimeout(2000);
36
+ await expectHighlightWithin(page, 'hljs-keyword', 5_000);
37
+ const texts = await highlightTexts(page, 'hljs-keyword');
38
+ expect(texts).toContain('while');
39
+ });
40
+
41
+ test('single line "while" caret stays after typing', async ({page}) => {
42
+ await setupPad(page);
43
+ await pickLanguage(page, 'javascript');
44
+ await inner(page).locator('body').click();
45
+ await page.keyboard.type('while');
46
+ await page.waitForTimeout(2000);
47
+ await page.keyboard.type('X');
48
+ const lineText = await inner(page).locator('div[id^="magicdomid"]').first().innerText();
49
+ expect(lineText).toBe('whileX');
50
+ });
@@ -0,0 +1,29 @@
1
+ <li class="separator acl-write"></li>
2
+ <li id="ep_hljs_li" class="acl-write">
3
+ <select id="ep_hljs_select"
4
+ aria-label="Syntax language"
5
+ data-l10n-id="ep_hljs.label"
6
+ data-l10n-attr="aria-label">
7
+ <option value="auto" data-l10n-id="ep_hljs.auto">Auto-detect</option>
8
+ <option value="off" data-l10n-id="ep_hljs.off">Off</option>
9
+ <option value="javascript">JavaScript</option>
10
+ <option value="typescript">TypeScript</option>
11
+ <option value="python">Python</option>
12
+ <option value="java">Java</option>
13
+ <option value="c">C</option>
14
+ <option value="cpp">C++</option>
15
+ <option value="csharp">C#</option>
16
+ <option value="go">Go</option>
17
+ <option value="ruby">Ruby</option>
18
+ <option value="rust">Rust</option>
19
+ <option value="php">PHP</option>
20
+ <option value="bash">Bash</option>
21
+ <option value="sql">SQL</option>
22
+ <option value="json">JSON</option>
23
+ <option value="yaml">YAML</option>
24
+ <option value="xml">XML</option>
25
+ <option value="html">HTML</option>
26
+ <option value="css">CSS</option>
27
+ <option value="markdown">Markdown</option>
28
+ </select>
29
+ </li>