├── .editorconfig ├── .eslintrc.js ├── .gitignore ├── .vscode └── spellright.dict ├── BrowserView ├── Groups │ ├── browserview │ │ ├── did-topic.html │ │ ├── did.html │ │ ├── epub-a11y.html │ │ ├── epub-fxl.html │ │ ├── epub-locators.html │ │ ├── epub.html │ │ ├── json-ld.html │ │ ├── pwg.html │ │ └── vcwg.html │ ├── configurations │ │ ├── did.json │ │ ├── epub.json │ │ ├── json-ld.json │ │ ├── pmwg.json │ │ ├── pwg.json │ │ └── vcwg.json │ └── index.md ├── did-wg-topic-calls.html ├── did-wg.html ├── docs │ ├── .nojekyll │ ├── assets │ │ ├── highlight.css │ │ ├── icons.css │ │ ├── icons.png │ │ ├── icons@2x.png │ │ ├── main.js │ │ ├── search.js │ │ ├── style.css │ │ ├── widgets.png │ │ └── widgets@2x.png │ ├── index.html │ └── modules.html ├── epub-wg-a11y-calls.html ├── epub-wg.html ├── index.html ├── js │ ├── scribejs.js │ └── scribejs.min.js └── lib │ ├── Makefile │ ├── bridge.js │ ├── nicknames.js │ ├── page.js │ └── schema.js ├── CODEOWNERS ├── LICENSE ├── README.md ├── TODO.md ├── changes.md ├── configuration.md ├── features.md ├── lib ├── actions.js ├── actions.js.map ├── conf.js ├── conf.js.map ├── convert.js ├── convert.js.map ├── front_matter.js ├── front_matter.js.map ├── io.js ├── io.js.map ├── issues.js ├── issues.js.map ├── js │ ├── githubapi.js │ └── githubapi.js.map ├── jsonld_header.js ├── jsonld_header.js.map ├── rdf_to_log.js ├── rdf_to_log.js.map ├── schemas.js ├── schemas.js.map ├── types.js ├── types.js.map ├── utils.js └── utils.js.map ├── main.js ├── main.js.map ├── package-lock.json ├── package.json ├── schemas ├── config_schema.json └── nicknames_schema.json ├── src ├── lib │ ├── actions.ts │ ├── conf.ts │ ├── convert.ts │ ├── front_matter.ts │ ├── io.ts │ ├── issues.ts │ ├── js │ │ ├── githubapi.d.ts │ │ └── githubapi.js │ ├── rdf_to_log.ts │ ├── schemas.ts │ ├── types.ts │ └── utils.ts └── main.ts ├── test ├── 01-vcwg-irc.txt ├── 04-did-irc.rdf ├── 12-epub-irc.txt ├── 2023-11-01-vcwg.md ├── Minutes │ ├── 2019-04-23-pbg.md │ ├── Minutes-2017-02-27.md │ ├── Minutes-2017-03-06.md │ └── README.md ├── agenda.txt ├── agendum_bug.txt ├── anno-test.txt ├── config.json.sample ├── deno-test.txt ├── did-issue-title-expected.md ├── did-issue-title.txt ├── did-issue-url.txt ├── did-slides.txt ├── dottest.txt ├── dpub-nicknames.json ├── dpub-test.txt ├── dpub-test2.txt ├── epub-test.txt ├── guest.txt ├── irccloud.txt ├── issue_with_space.txt ├── json-ld-preamble-examples │ ├── 2019-03-15-json-ld.md │ └── 2019-04-01-pwg.md ├── link_test_mini.txt ├── link_tests.txt ├── minitest.txt ├── mocha.opts ├── pbg-test.txt ├── poe-test.md ├── poe-test.txt ├── regexproblem.txt ├── repeated.txt ├── scribe-test.txt ├── scribe1.txt ├── speakers_interrupted.txt ├── speakers_interrupted_detail.txt ├── test.js ├── test.txt ├── textual.txt └── tpac.pdf ├── tsconfig.json ├── vocab ├── index.md └── index.ttl └── w3c.json /.editorconfig: -------------------------------------------------------------------------------- 1 | root = true 2 | 3 | [*] 4 | indent_style = space 5 | indent_size = 4 6 | end_of_line = lf 7 | charset = utf-8 8 | trim_trailing_whitespace = true 9 | insert_final_newline = true 10 | -------------------------------------------------------------------------------- /.eslintrc.js: -------------------------------------------------------------------------------- 1 | module.exports = { 2 | parser: '@typescript-eslint/parser', 3 | parserOptions: { 4 | ecmaVersion: 2018, 5 | sourceType: 'module', 6 | }, 7 | plugins: ['@typescript-eslint'], 8 | env: { 9 | browser: true, 10 | node: true, 11 | }, 12 | extends: [ 13 | 'eslint:recommended', 14 | "plugin:@typescript-eslint/eslint-recommended", 15 | "plugin:@typescript-eslint/recommended" 16 | ], 17 | "rules" : { 18 | "no-console" : 0, // set it to 0 if it is o.k. to have console.log 19 | "@typescript-eslint/no-explicit-any" : 0, 20 | "no-constant-condition": [ 21 | "error", 22 | { 23 | "checkLoops" : false 24 | } 25 | ], 26 | "indent" : [ 27 | "error", 4 28 | ], 29 | "no-var-requires": 0, 30 | "no-multi-spaces": [ 31 | "error", 32 | { 33 | "exceptions": { 34 | "VariableDeclarator": true, 35 | "ImportDeclaration" : true 36 | } 37 | } 38 | ], 39 | "no-else-return": 0, 40 | "max-len": [ 41 | "error", 42 | { 43 | "code": 150, 44 | "ignoreComments" : true, 45 | "ignoreUrls" : true, 46 | "ignoreStrings" : true, 47 | "ignoreTemplateLiterals" : true, 48 | "ignoreRegExpLiterals" : true 49 | } 50 | ], 51 | "key-spacing" : [ 52 | "error", 53 | { 54 | "align" : { 55 | "beforeColon" : true, 56 | "afterColon" : true, 57 | "on" : "colon" 58 | }, 59 | "multiLine" : { 60 | "beforeColon" : true, 61 | "afterColon" : true 62 | } 63 | } 64 | ], 65 | "comma-dangle" : [ 66 | "error", 67 | "always-multiline", 68 | { 69 | "functions" : "never", 70 | } 71 | ], 72 | "arrow-parens" : [ 73 | "error", 74 | "always" 75 | ], 76 | "no-plusplus": [ 77 | "error", 78 | { 79 | "allowForLoopAfterthoughts": true 80 | } 81 | ], 82 | "no-param-reassign" : [ 83 | "error", 84 | { 85 | "props" : false 86 | } 87 | ], 88 | "prefer-destructuring": 0, 89 | "consistent-return": 2, 90 | "no-eval": 2, 91 | "no-implied-eval": 2, 92 | 93 | "array-callback-return": 2, 94 | 95 | "eqeqeq": [ 96 | "error", 97 | "smart" 98 | ], 99 | 100 | "no-label-var": 2, 101 | "no-shadow": 2, 102 | "func-name-matching": 2, 103 | 104 | "keyword-spacing" : [ 105 | "error", 106 | { 107 | "before" : true, 108 | "after" : true 109 | } 110 | ], 111 | 112 | "max-lines-per-function": [ 113 | 1, 114 | { 115 | "max": 80, 116 | "skipBlankLines": true, 117 | "skipComments": true, 118 | } 119 | ] 120 | } 121 | }; 122 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | node_modules/ 2 | test/*.json 3 | .vscode/*.json 4 | LocalScript/* 5 | nami.md 6 | test.js 7 | test.ts 8 | notes.md 9 | test_run 10 | Attic/* 11 | src/lib/js/lo.js 12 | BrowserView/Groups/config/epub_local.json 13 | BrowserView/Groups/config/epub-a11y_local.json 14 | BrowserView/Groups/config/epub-fxl_local.json 15 | BrowserView/Groups/config/epub-locators_local.json 16 | BrowserView/Groups/config/did_local.json 17 | BrowserView/Groups/config/did-topic_local.json 18 | BrowserView/Groups/config/pwg_local.json 19 | BrowserView/Groups/config/json-ld_local.json 20 | BrowserView/Groups/postprocessing/test_local.json 21 | BrowserView/did-wg-topic-calls.html 22 | BrowserView/did-wg.html 23 | BrowserView/epub-wg-a11y-calls.html 24 | BrowserView/epub-wg.html 25 | 26 | 27 | -------------------------------------------------------------------------------- /.vscode/spellright.dict: -------------------------------------------------------------------------------- 1 | scribejs 2 | -------------------------------------------------------------------------------- /BrowserView/Groups/configurations/did.json: -------------------------------------------------------------------------------- 1 | { 2 | "jekyll" : "kd", 3 | "auto" : false, 4 | "final" : false, 5 | "ghrepo" : "w3c/did-wg", 6 | "issuerepo" : "w3c/did-core", 7 | "ghpath" : "_minutes", 8 | "ghbranch" : "main", 9 | "group" : "did", 10 | "nicknames" : "https://www.w3.org/2019/did-wg/assets/nicknames.json", 11 | "acrepo" : "w3c/did-wg", 12 | "acurlpattern" : "https://www.w3.org/2019/did-wg/Meetings/Minutes/%DATE%-did", 13 | "owner" : "w3c", 14 | "repo" : "did-wg", 15 | "current" : "assets/minute_processing.json", 16 | "minutes" : "_minutes", 17 | "handle_issues" : true, 18 | "handle_actions" : true, 19 | "group_mail" : "public-did-wg@w3.org", 20 | "mail_subject" : "DID Working Group", 21 | "local": { 22 | "nicknames" : "/Users/ivan/W3C/github/DID/did-wg/assets/nicknames.json", 23 | "dir" : "/Users/ivan/W3C/github/DID/did-wg" 24 | }, 25 | "extra_calls": { 26 | "did-topic": { 27 | "acurlpattern" : "https://www.w3.org/2019/did-wg/Meetings/Minutes/%DATE%-did-topic", 28 | "final" : true, 29 | "mail_subject" : "DID Working Group Topic Call" 30 | } 31 | } 32 | } 33 | -------------------------------------------------------------------------------- /BrowserView/Groups/configurations/epub.json: -------------------------------------------------------------------------------- 1 | { 2 | "jekyll" : "kd", 3 | "auto" : false, 4 | "final" : false, 5 | "ghrepo" : "w3c/epub-wg", 6 | "issuerepo" : "w3c/epub-specs", 7 | "ghpath" : "_minutes", 8 | "ghbranch" : "main", 9 | "group" : "epub", 10 | "nicknames" : "https://www.w3.org/publishing/groups/epub-wg/assets/nicknames.json", 11 | "acrepo" : "w3c/epub-wg", 12 | "acurlpattern" : "https://www.w3.org/publishing/groups/epub-wg/Meetings/Minutes/%DATE%-epub", 13 | "owner" : "w3c", 14 | "repo" : "epub-wg", 15 | "current" : "assets/minute_processing.json", 16 | "minutes" : "_minutes", 17 | "handle_issues" : true, 18 | "handle_actions" : true, 19 | "group_mail" : "public-epub-wg@w3.org", 20 | "mail_subject" : "EPUB Working Group", 21 | "local": { 22 | "dir" : "/Users/ivan/W3C/github/EPUB/epub-wg", 23 | "nicknames" : "/Users/ivan/W3C/github/EPUB/epub-wg/assets/nicknames.json" 24 | }, 25 | "extra_calls": { 26 | "epub-locators": { 27 | "acurlpattern" : "https://www.w3.org/publishing/groups/epub-wg/Meetings/Minutes/%DATE%-epub-locators", 28 | "final" : true, 29 | "mail_subject" : "EPUB Working Group Locator Task Force" 30 | }, 31 | "epub-fxl": { 32 | "acurlpattern" : "https://www.w3.org/publishing/groups/epub-wg/Meetings/Minutes/%DATE%-epub-fxl", 33 | "final" : true, 34 | "mail_subject" : "EPUB Working Group Fixed Layout Accessibility Task Force" 35 | }, 36 | "epub-a11y": { 37 | "acurlpattern" : "https://www.w3.org/publishing/groups/epub-wg/Meetings/Minutes/%DATE%-epub-a11y", 38 | "final" : true, 39 | "mail_subject" : "EPUB Working Group Accessibility Task Force" 40 | } 41 | } 42 | } 43 | -------------------------------------------------------------------------------- /BrowserView/Groups/configurations/json-ld.json: -------------------------------------------------------------------------------- 1 | { 2 | "jekyll" : "kd", 3 | "auto" : false, 4 | "final" : false, 5 | "ghrepo" : "w3c/json-ld-wg", 6 | "issuerepo" : "w3c/json-ld-syntax", 7 | "ghpath" : "_minutes", 8 | "ghbranch" : "master", 9 | "group" : "json-ld", 10 | "nicknames" : "https://www.w3.org/2018/json-ld-wg/assets/nicknames.json", 11 | "acrepo" : "w3c/json-ld-wg", 12 | "acurlpattern" : "https://www.w3.org/2018/json-ld-wg/Meetings/Minutes/%YEAR%/%DATE%-json-ld", 13 | "minutes" : "_minutes", 14 | "group_mail" : "public-json-ld-wg@w3.org", 15 | "mail_subject" : "JSON-LD Working Group", 16 | "local" : { 17 | "dir" : "/Users/ivan/W3C/github/JSON-LD/json-ld-wg", 18 | "nicknames" : "/Users/ivan/W3C/github/JSON-LD/json-ld-wg/assets/nicknames.json" 19 | } 20 | } 21 | -------------------------------------------------------------------------------- /BrowserView/Groups/configurations/pmwg.json: -------------------------------------------------------------------------------- 1 | { 2 | "jekyll" : "none", 3 | "auto" : false, 4 | "final" : true, 5 | "ghrepo" : "w3c/pmwg", 6 | "issuerepo" : "w3c/pmwg", 7 | "ghpath" : "minutes", 8 | "ghbranch" : "main", 9 | "group" : "pmwg", 10 | "nicknames" : "https://iherman.github.io/pmwg/assets/nicknames.json", 11 | "acrepo" : "w3c/pm-wg", 12 | "acurlpattern" : "https://iherman.github.io/pmwg/minutes/%DATE%-pmwg", 13 | "owner" : "w3c", 14 | "repo" : "pmwg", 15 | "current" : "assets/minute_processing.json", 16 | "minutes" : "minutes", 17 | "handle_issues" : true, 18 | "handle_actions" : true, 19 | "group_mail" : "public-pm-wg@w3.org", 20 | "mail_subject" : "Publishing Maintenance Working Group", 21 | "local": { 22 | "dir" : "/Users/ivan/W3C/github/Publishing/pmwg", 23 | "nicknames" : "/Users/ivan/W3C/github/Publishing/pmwg/assets/nicknames.json" 24 | }, 25 | "extra_calls": { 26 | } 27 | } 28 | -------------------------------------------------------------------------------- /BrowserView/Groups/configurations/pwg.json: -------------------------------------------------------------------------------- 1 | { 2 | "jekyll" : "kd", 3 | "auto" : false, 4 | "final" : false, 5 | "ghrepo" : "w3c/publ-wg", 6 | "issuerepo" : "w3c/pub-manifest", 7 | "ghpath" : "Meetings/Minutes/2022", 8 | "ghbranch" : "main", 9 | "group" : "pwg", 10 | "nicknames" : "https://www.w3.org/publishing/groups/publ-wg/assets/nicknames.json", 11 | "acrepo" : "w3c/publ-wg", 12 | "acurlpattern" : "https://www.w3.org/publishing/groups/epub-wg/Meetings/Minutes/%YEAR%/%DATE%-pwg", 13 | "owner" : "w3c", 14 | "repo" : "publ-wg", 15 | "current" : "assets/minute_processing.json", 16 | "minutes" : "Minutes/%YEAR%", 17 | "handle_issues" : true, 18 | "handle_actions" : true, 19 | "group_mail" : "public-publ-wg@w3.org", 20 | "mail_subject" : "Audiobooks Working Group", 21 | "local": { 22 | "dir" : "/Users/ivan/W3C/github/Audiobooks/publ-wg", 23 | "nicknames" : "/Users/ivan/W3C/github/Audiobooks/publ-wg/assets/nicknames.json" 24 | } 25 | } 26 | -------------------------------------------------------------------------------- /BrowserView/Groups/configurations/vcwg.json: -------------------------------------------------------------------------------- 1 | { 2 | "jekyll" : "kd", 3 | "auto" : false, 4 | "final" : false, 5 | "ghrepo" : "w3c/verifiable-credentials/", 6 | "issuerepo" : "w3c/vc-data-model", 7 | "ghpath" : "_minutes", 8 | "ghbranch" : "main", 9 | "group" : "vcwg", 10 | "nicknames" : "https://www.w3.org/2017/vc/WG/assets/nicknames.json", 11 | "acrepo" : "w3c/verifiable-credentials", 12 | "acurlpattern" : "https://www.w3.org/2017/vc/WG/Meetings/Minutes/%DATE%-vcwg", 13 | "owner" : "w3c", 14 | "repo" : "verifiable-credentials", 15 | "current" : "assets/minute_processing.json", 16 | "minutes" : "_minutes", 17 | "handle_issues" : true, 18 | "handle_actions" : true, 19 | "group_mail" : "public-vc-wg@w3.org", 20 | "mail_subject" : "Verifiable Credentials Working Group", 21 | "local": { 22 | "nicknames" : "/Users/ivan/W3C/github/VC/verifiable-credentials/assets/nicknames.json", 23 | "dir" : "/Users/ivan/W3C/github/VC/verifiable-credentials" 24 | }, 25 | "extra_calls": { 26 | "vcwg-special": { 27 | "acurlpattern" : "https://www.w3.org/2017/vc/WG/Meetings/Minutes/%DATE%-vcwg-special", 28 | "final" : true, 29 | "mail_subject" : "VC Working Group Special Call" 30 | 31 | } 32 | } 33 | } 34 | -------------------------------------------------------------------------------- /BrowserView/Groups/index.md: -------------------------------------------------------------------------------- 1 | # Group specific setups 2 | 3 | `scribejs` configuration files, as well as browser views, are set up and free to use. Other working groups are welcome to add their own configurations into this directory. The configuration files are actually a combination of information needed by `scribejs`, as well as the configuration data used by separate utilities, like the separate [scribejs post-processing utility](https://github.com/iherman/scribejs-postprocessing/); 4 | 5 | Current groups: 6 | 7 | * [EPUB 3 Working Group](https://www.w3.org//publishing/groups/epub-wg/): 8 | * The [configuration file](./configurations/epub.json) contains entries for the following extra calls: `epub-a11y`, `epub-fxl`, and `epub-locators` for the Accessibility, Fixed Layout Accessibility, and Locators Task Forces, respectively. 9 | * [HTML file with client side processing for the core WG call](./browserview/epub.html) can also be used 10 | * [HTML file with client side processing for the accessibility task force](./browserview/epub-a11y.html) can also be used 11 | * [DID Working Group](https://www.w3.org/2019/did-wg/): 12 | * The [configuration file](./configurations/did.json) contains entries for the following extra calls: `epub-topic` for the “Topical Calls” (as they are referred to in the Working Group). 13 | * The [HTML file with client side processing for the core WG call](./browserview/did.html) can also be used 14 | * The [HTML file with client side processing for the topical calls](./browserview/did-topic.html) can also be used 15 | * [Verifiable Credentials Working Group](https://www.w3.org/2017/vc/WG/): 16 | * The [configuration file](./configurations/vcwg.json) conly contains the basic setup. 17 | * The [HTML file with client side processing for the core WG call](./browserview/vcwg.html) can also be used 18 | * [Audiobook (formerly Publishing) Working Group](https://www.w3.org/publishing/groups/publ-wg/) 19 | * The [configuration file](./configurations/pwg.json) only contains the basic setup. 20 | * The [HTML file with client side processing for the core WG call](./browserview/pwg.html) can also be used 21 | * [JSON-LD) Working Group](https://www.w3.org/2018/json-ld-wg/) 22 | * The [configuration file](./configurations/json-ld.json) only contains the basic setup. 23 | * The [HTML file with client side processing for the core WG call](./browserview/json-ld.html) can also be used 24 | 25 | 26 | New configurations can be uploaded to this folder; when doing so, the naming scheme should be kept. Files (configurations, client side processing, etc.) are named using the IRC channels they rely on. 27 | -------------------------------------------------------------------------------- /BrowserView/docs/.nojekyll: -------------------------------------------------------------------------------- 1 | TypeDoc added this file to prevent GitHub Pages from using Jekyll. You can turn off this behavior by setting the `githubPages` option to false. -------------------------------------------------------------------------------- /BrowserView/docs/assets/highlight.css: -------------------------------------------------------------------------------- 1 | :root { 2 | --light-hl-0: #000000; 3 | --dark-hl-0: #D4D4D4; 4 | --light-hl-1: #AF00DB; 5 | --dark-hl-1: #C586C0; 6 | --light-hl-2: #A31515; 7 | --dark-hl-2: #CE9178; 8 | --light-hl-3: #000000; 9 | --dark-hl-3: #C8C8C8; 10 | --light-hl-4: #001080; 11 | --dark-hl-4: #9CDCFE; 12 | --light-hl-5: #0000FF; 13 | --dark-hl-5: #569CD6; 14 | --light-hl-6: #795E26; 15 | --dark-hl-6: #DCDCAA; 16 | --light-hl-7: #008000; 17 | --dark-hl-7: #6A9955; 18 | --light-code-background: #F5F5F5; 19 | --dark-code-background: #1E1E1E; 20 | } 21 | 22 | @media (prefers-color-scheme: light) { :root { 23 | --hl-0: var(--light-hl-0); 24 | --hl-1: var(--light-hl-1); 25 | --hl-2: var(--light-hl-2); 26 | --hl-3: var(--light-hl-3); 27 | --hl-4: var(--light-hl-4); 28 | --hl-5: var(--light-hl-5); 29 | --hl-6: var(--light-hl-6); 30 | --hl-7: var(--light-hl-7); 31 | --code-background: var(--light-code-background); 32 | } } 33 | 34 | @media (prefers-color-scheme: dark) { :root { 35 | --hl-0: var(--dark-hl-0); 36 | --hl-1: var(--dark-hl-1); 37 | --hl-2: var(--dark-hl-2); 38 | --hl-3: var(--dark-hl-3); 39 | --hl-4: var(--dark-hl-4); 40 | --hl-5: var(--dark-hl-5); 41 | --hl-6: var(--dark-hl-6); 42 | --hl-7: var(--dark-hl-7); 43 | --code-background: var(--dark-code-background); 44 | } } 45 | 46 | body.light { 47 | --hl-0: var(--light-hl-0); 48 | --hl-1: var(--light-hl-1); 49 | --hl-2: var(--light-hl-2); 50 | --hl-3: var(--light-hl-3); 51 | --hl-4: var(--light-hl-4); 52 | --hl-5: var(--light-hl-5); 53 | --hl-6: var(--light-hl-6); 54 | --hl-7: var(--light-hl-7); 55 | --code-background: var(--light-code-background); 56 | } 57 | 58 | body.dark { 59 | --hl-0: var(--dark-hl-0); 60 | --hl-1: var(--dark-hl-1); 61 | --hl-2: var(--dark-hl-2); 62 | --hl-3: var(--dark-hl-3); 63 | --hl-4: var(--dark-hl-4); 64 | --hl-5: var(--dark-hl-5); 65 | --hl-6: var(--dark-hl-6); 66 | --hl-7: var(--dark-hl-7); 67 | --code-background: var(--dark-code-background); 68 | } 69 | 70 | .hl-0 { color: var(--hl-0); } 71 | .hl-1 { color: var(--hl-1); } 72 | .hl-2 { color: var(--hl-2); } 73 | .hl-3 { color: var(--hl-3); } 74 | .hl-4 { color: var(--hl-4); } 75 | .hl-5 { color: var(--hl-5); } 76 | .hl-6 { color: var(--hl-6); } 77 | .hl-7 { color: var(--hl-7); } 78 | pre, code { background: var(--code-background); } 79 | -------------------------------------------------------------------------------- /BrowserView/docs/assets/icons.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/w3c/scribejs/9e39fe4a2ce1d9c1dc093275af924ba6e1962e2f/BrowserView/docs/assets/icons.png -------------------------------------------------------------------------------- /BrowserView/docs/assets/icons@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/w3c/scribejs/9e39fe4a2ce1d9c1dc093275af924ba6e1962e2f/BrowserView/docs/assets/icons@2x.png -------------------------------------------------------------------------------- /BrowserView/docs/assets/search.js: -------------------------------------------------------------------------------- 1 | window.searchData = JSON.parse("{\"kinds\":{},\"rows\":[],\"index\":{\"version\":\"2.3.9\",\"fields\":[\"name\",\"parent\"],\"fieldVectors\":[],\"invertedIndex\":[],\"pipeline\":[]}}"); -------------------------------------------------------------------------------- /BrowserView/docs/assets/widgets.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/w3c/scribejs/9e39fe4a2ce1d9c1dc093275af924ba6e1962e2f/BrowserView/docs/assets/widgets.png -------------------------------------------------------------------------------- /BrowserView/docs/assets/widgets@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/w3c/scribejs/9e39fe4a2ce1d9c1dc093275af924ba6e1962e2f/BrowserView/docs/assets/widgets@2x.png -------------------------------------------------------------------------------- /BrowserView/docs/modules.html: -------------------------------------------------------------------------------- 1 | Converter of RSSAgent IRC logs into minutes in markdown - v2.0.3
Options
All
  • Public
  • Public/Protected
  • All
Menu

Converter of RSSAgent IRC logs into minutes in markdown - v2.0.3

-------------------------------------------------------------------------------- /BrowserView/lib/Makefile: -------------------------------------------------------------------------------- 1 | ../js/scribejs.js : bridge.js nicknames.js page.js schema.js ../../lib/conf.js ../../lib/convert.js ../../lib/io.js ../../lib/schemas.js ../../lib/actions.js ../../lib/jsonld_header.js ../../lib/types.js ../../lib/utils.js ../../lib/js/githubapi.js 2 | browserify page.js bridge.js > ../js/scribejs.js 3 | terser ../js/scribejs.js > ../js/scribejs.min.js 4 | -------------------------------------------------------------------------------- /BrowserView/lib/bridge.js: -------------------------------------------------------------------------------- 1 | /* eslint-disable @typescript-eslint/no-var-requires */ 2 | /* eslint-disable no-alert */ 3 | /* eslint-env browser */ 4 | 5 | 'use strict'; 6 | 7 | /** 8 | * The "bridge" between the HTML Form and the scribejs environment. 9 | */ 10 | 11 | const { marked } = require('marked'); 12 | 13 | const nicknames = require('./nicknames'); 14 | const convert = require('../../lib/convert'); 15 | const schema = require('./schema'); 16 | const { Actions } = require('../../lib/actions'); 17 | 18 | // This is used to export the calculated actions to the separate module 19 | // that saves the minutes, as well as 'stores' the actions as issues. 20 | let theActions = {}; 21 | const getActions = () => theActions; 22 | 23 | 24 | /** 25 | * The main entry point, invoked when the user pushes the submit. Collect the 26 | * configuration date, call the converter, and store the minutes in the 27 | * relevant text area. 28 | * 29 | * This function is set as the call back for the form submission. 30 | * 31 | * @param {HTMLFormElement} form 32 | */ 33 | async function bridge(form) { 34 | const config = { 35 | date : form.elements.date.value, 36 | final : form.elements.final.value === 'true', 37 | torepo : false, 38 | jekyll : form.elements.jekyll.value, 39 | pandoc : true, 40 | nick_mappings : [], 41 | nicknames : form.elements.nicknames.value, 42 | irc_format : undefined, 43 | ghname : form.elements.ghname.value, 44 | issuerepo : form.elements.issuerepo.value, 45 | ghemail : '', 46 | ghrepo : '', 47 | ghpath : '', 48 | ghbranch : '', 49 | ghtoken : form.elements.ghtoken.value, 50 | acrepo : form.elements.acrepo.value, 51 | acurlpattern : form.elements.acurlpattern.value 52 | }; 53 | config.nicks = await nicknames.get_nick_mapping(config); 54 | 55 | // Validate the nickname mapping object against the appropriate JSON schema 56 | if (!schema.validate_nicknames(config.nicks)) { 57 | const errors = schema.validation_errors(schema.validate_nicknames); 58 | console.warn(`Warning: scribejs validation error in nicknames: ${errors} 59 | (nicknames ignored)`); 60 | alert(`Warning: scribejs validation error in nicknames: ${errors} 61 | (nicknames ignored)`); 62 | config.nicks = []; 63 | } 64 | 65 | // Set up the action handling 66 | theActions = new Actions(config); 67 | 68 | const irc_log = form.elements.text.value; 69 | // undefined for testing... 70 | return new convert.Converter(config, theActions).convert_to_markdown(irc_log); 71 | } 72 | 73 | function emptyNode(n) { 74 | while (n.hasChildNodes()) { 75 | n.removeChild(n.lastChild); 76 | } 77 | } 78 | 79 | function renderPreview(markdown) { 80 | const preview = document.getElementById('preview'); 81 | const content = marked.parse(markdown); 82 | emptyNode(preview); 83 | preview.innerHTML = content; 84 | } 85 | 86 | function previewToggle(ev, minutes) { 87 | const editorTab = document.getElementById('editor-tab'); 88 | const previewerTab = document.getElementById('previewer-tab'); 89 | if (ev.target.checked) { 90 | renderPreview(minutes.value); 91 | editorTab.classList.remove('active'); 92 | previewerTab.classList.add('active'); 93 | } else { 94 | editorTab.classList.add('active'); 95 | previewerTab.classList.remove('active'); 96 | } 97 | } 98 | 99 | function submit(minutes) { 100 | const the_form = document.getElementById('main_form'); 101 | const markdown = bridge(the_form); 102 | markdown.then((md) => { 103 | minutes.value = md; 104 | renderPreview(md); 105 | }); 106 | } 107 | 108 | window.addEventListener('load', () => { 109 | const minutes = document.getElementById('minutes'); 110 | const preview_markdown = document.getElementById('preview_markdown'); 111 | preview_markdown.checked = false; 112 | preview_markdown.addEventListener('change', (ev) => previewToggle(ev, minutes)); 113 | 114 | // Set up the event handler 115 | const submit_button = document.getElementById('submit_button'); 116 | submit_button.addEventListener('click', () => submit(minutes)); 117 | }); 118 | 119 | module.exports = { getActions }; 120 | -------------------------------------------------------------------------------- /BrowserView/lib/nicknames.js: -------------------------------------------------------------------------------- 1 | /* eslint-disable no-alert */ 2 | /* eslint-env browser */ 3 | 4 | 'use strict'; 5 | 6 | /** 7 | * Get the nickname files via its URL, with a basic sanity check on the URL 8 | * (Just to be on the safe side) 9 | */ 10 | 11 | const url = require('url'); 12 | const validUrl = require('valid-url'); 13 | const _ = require('underscore'); 14 | 15 | /** 16 | * Basic sanity check on the URL. 17 | * 18 | * The function returns a (possibly slightly modified) version of the URL if 19 | * everything is fine, or a null value if the input argument is not a URL (but 20 | * should be used as a filename) 21 | * 22 | * There might be errors, however, in the case it is a URL. In such cases the 23 | * function raises an exception; this should be caught to end all processing. 24 | * 25 | * The checks are as follows: 26 | * 27 | * 1. Check whether the protocol is http(s). Other protocols are not accepted 28 | * (actually rejected by fetch, too) 29 | * 2. Run the URL through a valid-url check, which looks at the validity of the 30 | * URL in terms of characters used, for example 31 | * 3. Check that the port (if specified) is in the allowed range, ie, > 1024 32 | * 4. Don't allow localhost in a CGI answer... 33 | * 34 | * @param {string} _address: the URL to be checked. 35 | * @return {string}: the URL itself (which might be slightly improved by the 36 | * valid-url method) or null this is, in fact, not a URL 37 | * @throws {exception}: if it pretends to be a URL, but it is not acceptable for some reasons. 38 | */ 39 | function check_url(_address) { 40 | const address = _address.trim(); 41 | const parsed = url.parse(address); 42 | if (parsed.protocol === null) { 43 | // This is not a URL, should be used as a file name 44 | return null; 45 | } 46 | // Check whether we use the right protocol 47 | if (_.contains(['http:', 'https:'], parsed.protocol) === false) { 48 | throw new Error(`Only http(s) url-s are accepted (${address})`); 49 | } 50 | 51 | // Run through the URL validator 52 | const retval = validUrl.isWebUri(address); 53 | if (retval === undefined) { 54 | throw new Error(`The url ${address} isn't valid`); 55 | } 56 | 57 | // Check the port 58 | if (parsed.port !== null && parsed.port <= 1024) { 59 | throw new Error(`Unsafe port number used in ${address} (${parsed.port})`); 60 | } 61 | 62 | // If we got this far, this is a proper URL, ready to be used. 63 | return retval; 64 | } 65 | 66 | /** 67 | * Get the nickname mapping file (if any). The input provided in the 68 | * configuration is examined whether it is a URL (in which case this is 69 | * retrieved via HTTP) or not (in which case it is considered to be a local file). 70 | * Returns a Promise with the content of the input as an object. 71 | * 72 | * @param {object} conf - Overall configuration; the only field that matter 73 | * here is "conf.nicknames" 74 | * @returns {Promise} - a promise containing the nicknames as an object parsed from JSON. 75 | */ 76 | exports.get_nick_mapping = (conf) => { 77 | /** 78 | * Minimal cleanup on nicknames: allow irc log to be lower or upper case, 79 | * internal comparisons should use the lower case only 80 | */ 81 | function lower_nicks(nicks) { 82 | return _.map(nicks, (nick_structure) => { 83 | const lowered = _.map(nick_structure.nick, (nick) => nick.toLowerCase()); 84 | nick_structure.nick = lowered; 85 | return nick_structure; 86 | }); 87 | } 88 | return new Promise((resolve, reject) => { 89 | if (conf.nicknames) { 90 | const address = check_url(conf.nicknames); 91 | if (address !== null) { 92 | // This is a resource on the Web that must be fetched 93 | fetch(address) 94 | .then((response) => { 95 | if (response.ok) { 96 | // I need to check whether the returned data is genuine json; however, 97 | // alas!, github does not set the content type of the returned raw data 98 | // to json, ie, the response header cannot be used for that purpose. 99 | // Instead, the value is sent to a next step to parse it explicitly 100 | return response.text(); 101 | } 102 | reject(new Error(`HTTP response ${response.status}: ${response.statusText}`)); 103 | }) 104 | .then((body) => { 105 | // Try to parse the content as JSON and, if it works, that is almost 106 | // the final result, module turn all the nicknames to lowercase 107 | let json_content = {}; 108 | try { 109 | json_content = JSON.parse(body); 110 | } catch (err) { 111 | alert(`JSON parsing error in ${conf.nicknames}: ${err}`) 112 | reject(new Error(`JSON parsing error in ${conf.nicknames}: ${err}`)); 113 | } 114 | resolve(lower_nicks(json_content)); 115 | }) 116 | .catch((err) => { 117 | alert(`problem accessing remote file ${conf.nicknames}: ${err.message}`); 118 | reject(new Error(`problem accessing remote file ${conf.nicknames}: ${err.message}`)); 119 | }); 120 | } 121 | } else { 122 | resolve([]); 123 | } 124 | }); 125 | }; 126 | -------------------------------------------------------------------------------- /BrowserView/lib/schema.js: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env node 2 | 3 | 'use strict'; 4 | 5 | /** 6 | * 7 | * Interface to the JSON Schema processor package "ajv". It is used to check 8 | * the nicknames' file. 9 | * 10 | * (This is a somewhat cut-back version of the general 'schemas.js' file that takes the schema from a local file and 11 | * also checks the configuration file). 12 | * 13 | */ 14 | 15 | 16 | const nicknames_schema = require('../../schemas/nicknames_schema.json'); 17 | 18 | /* 19 | * The real interface... creation of a new Ajv object, and then the creation of 20 | * the two separate "validators" for the two schemas. 21 | * 22 | */ 23 | const Ajv = require('ajv'); 24 | 25 | const ajv = new Ajv({ allErrors: true }); 26 | // I am not sure why this is necessary and not done automatically. Oh well... 27 | ajv.addMetaSchema(require('ajv/lib/refs/json-schema-draft-06.json')); 28 | 29 | /** 30 | * The two validator objects/functions 31 | * 32 | */ 33 | exports.validate_nicknames = ajv.compile(nicknames_schema); 34 | 35 | /** 36 | * This is the ajv idiom for producing a human readable set of error messages... 37 | * The Ajv object is initialized with the option of gathering all errors in one 38 | * message, so the expected output is a series of errors. 39 | * 40 | * @param {object} validator - an ajv validator object (result of compilation) 41 | * @return {string} - string version of the errors, separated by new line characters. 42 | * 43 | */ 44 | exports.validation_errors = (validator) => ajv.errorsText(validator.errors, { separator: '\n' }); 45 | -------------------------------------------------------------------------------- /CODEOWNERS: -------------------------------------------------------------------------------- 1 | * @iherman 2 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | W3C SOFTWARE NOTICE AND LICENSE 2 | 3 | Copyright (c) 2020 W3C® (MIT, ERCIM, Keio, Beihang) 4 | 5 | License 6 | 7 | By obtaining and/or copying this work, you (the licensee) agree that you have read, understood, and will comply 8 | with the following terms and conditions. 9 | 10 | Permission to copy, modify, and distribute this work, with or without modification, for any purpose and without fee 11 | or royalty is hereby granted, provided that you include the following on ALL copies of the work or portions thereof, 12 | including modifications: 13 | 14 | - The full text of this NOTICE in a location viewable to users of the redistributed or derivative work. 15 | - Any pre-existing intellectual property disclaimers, notices, or terms and conditions. If none exist, 16 | the W3C Software and Document Short Notice should be included, see 17 | https://www.w3.org/Consortium/Legal/2015/copyright-software-short-notice.html 18 | - Notice of any changes or modifications, through a copyright statement on the new code or document such as 19 | "This software or document includes material copied from or derived from [title and URI of the W3C document]. 20 | Copyright © [YEAR] W3C® (MIT, ERCIM, Keio, Beihang)." 21 | 22 | Disclaimers 23 | 24 | THIS WORK IS PROVIDED "AS IS," AND COPYRIGHT HOLDERS MAKE NO REPRESENTATIONS OR WARRANTIES, EXPRESS OR IMPLIED, 25 | INCLUDING BUT NOT LIMITED TO, WARRANTIES OF MERCHANTABILITY OR FITNESS FOR ANY PARTICULAR PURPOSE OR THAT THE USE OF 26 | THE SOFTWARE OR DOCUMENT WILL NOT INFRINGE ANY THIRD PARTY PATENTS, COPYRIGHTS, TRADEMARKS OR OTHER RIGHTS. 27 | 28 | COPYRIGHT HOLDERS WILL NOT BE LIABLE FOR ANY DIRECT, INDIRECT, SPECIAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF ANY 29 | USE OF THE SOFTWARE OR DOCUMENT. 30 | 31 | The name and trademarks of copyright holders may NOT be used in advertising or publicity pertaining to the work 32 | without specific, written prior permission. Title to copyright in this work will at all times remain with copyright 33 | holders. 34 | -------------------------------------------------------------------------------- /TODO.md: -------------------------------------------------------------------------------- 1 | # Known bugs or problems, missing features 2 | ß 3 | * At the moment the handling of XML tags (ie, '') is a bit shaky. Maybe a more radical change that turns all '<', resp. '>' signs into a special tag (e.g., `<r;`, resp. `$gt;`) at the start of processing is a better option (currently it is artificially put into a pair of backquotes, but this should be fenced against the user already doing that...) 4 | 5 | 6 | # Long term 7 | 8 | * If and when the [github markdown](https://github.github.com/gfm/) is really implemented on github (at present it is not), it should be possible to add `