Add codemirror update script
This commit is contained in:
parent
0a4b9ceb2e
commit
aab29a809a
|
@ -482,6 +482,7 @@ onDOMscriptReady('/codemirror.js').then(() => {
|
||||||
if (!chrome.runtime.getPackageDirectoryEntry) {
|
if (!chrome.runtime.getPackageDirectoryEntry) {
|
||||||
const themes = [
|
const themes = [
|
||||||
chrome.i18n.getMessage('defaultTheme'),
|
chrome.i18n.getMessage('defaultTheme'),
|
||||||
|
/* populate-theme-start*/
|
||||||
'3024-day',
|
'3024-day',
|
||||||
'3024-night',
|
'3024-night',
|
||||||
'abcdef',
|
'abcdef',
|
||||||
|
@ -531,7 +532,8 @@ onDOMscriptReady('/codemirror.js').then(() => {
|
||||||
'xq-dark',
|
'xq-dark',
|
||||||
'xq-light',
|
'xq-light',
|
||||||
'yeti',
|
'yeti',
|
||||||
'zenburn',
|
'zenburn'
|
||||||
|
/* populate-theme-end */
|
||||||
];
|
];
|
||||||
localStorage.codeMirrorThemes = themes.join(' ');
|
localStorage.codeMirrorThemes = themes.join(' ');
|
||||||
return Promise.resolve(themes);
|
return Promise.resolve(themes);
|
||||||
|
|
14
package.json
14
package.json
|
@ -4,5 +4,17 @@
|
||||||
"description": "Redesign the web with Stylus, a user styles manager",
|
"description": "Redesign the web with Stylus, a user styles manager",
|
||||||
"license": "GPL-3.0-only",
|
"license": "GPL-3.0-only",
|
||||||
"repository": "openstyles/stylus",
|
"repository": "openstyles/stylus",
|
||||||
"author": "Stylus Team"
|
"author": "Stylus Team",
|
||||||
|
"devDependencies": {
|
||||||
|
"codemirror": "^5.39.0",
|
||||||
|
"eslint": "^5.1.0",
|
||||||
|
"fs-extra": "^7.0.0",
|
||||||
|
"updates": "^3.2.3"
|
||||||
|
},
|
||||||
|
"scripts": {
|
||||||
|
"build": "npm run update && npm run build:cm",
|
||||||
|
"build:cm": "node tools/update-libraries.js && node tools/update-codemirror-themes.js",
|
||||||
|
"lint": "eslint **/*.js || true",
|
||||||
|
"update": "updates -u && npm update"
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
40
tools/update-codemirror-themes.js
Normal file
40
tools/update-codemirror-themes.js
Normal file
|
@ -0,0 +1,40 @@
|
||||||
|
#!/usr/bin/env node
|
||||||
|
'use strict';
|
||||||
|
|
||||||
|
const fs = require('fs-extra');
|
||||||
|
const path = require('path');
|
||||||
|
|
||||||
|
// Update theme names list in codemirror-editing-hook.js
|
||||||
|
async function getThemes() {
|
||||||
|
const p = path.join(__dirname, '..', 'vendor/codemirror/theme/');
|
||||||
|
const files = await fs.readdir(p);
|
||||||
|
return files
|
||||||
|
.filter(name => name.endsWith('.css'))
|
||||||
|
.map(name => name.replace('.css', ''))
|
||||||
|
.sort();
|
||||||
|
}
|
||||||
|
|
||||||
|
function replaceThemes(content, themes) {
|
||||||
|
const list = JSON.stringify(themes, null, 8).replace(/"/g, '\'');
|
||||||
|
return content.replace(
|
||||||
|
/\/\*\s*populate-theme-start\s*\*\/[\s\S]+\/\*\s*populate-theme-end\s*\*\//,
|
||||||
|
// strip off square brackets & first 8 spaces
|
||||||
|
`/* populate-theme-start*/\n${list.substring(2, list.length - 2)}\n /* populate-theme-end */`
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
async function updateHook(themes) {
|
||||||
|
const fileName = path.join(__dirname, '..', 'edit/codemirror-editing-hooks.js');
|
||||||
|
const content = await fs.readFile(fileName, 'utf-8');
|
||||||
|
fs.writeFile(fileName, replaceThemes(content, themes));
|
||||||
|
}
|
||||||
|
|
||||||
|
function exit(err) {
|
||||||
|
if (err) console.error(err);
|
||||||
|
process.exit(err ? 1 : 0);
|
||||||
|
}
|
||||||
|
|
||||||
|
getThemes()
|
||||||
|
.then(themes => updateHook(themes))
|
||||||
|
.then(() => console.log('\x1b[32m%s\x1b[0m', `codemirror themes list updated`))
|
||||||
|
.catch(exit);
|
69
tools/update-libraries.js
Normal file
69
tools/update-libraries.js
Normal file
|
@ -0,0 +1,69 @@
|
||||||
|
#!/usr/bin/env node
|
||||||
|
'use strict';
|
||||||
|
|
||||||
|
const fs = require('fs-extra');
|
||||||
|
const path = require('path');
|
||||||
|
|
||||||
|
const root = path.join(__dirname, '..');
|
||||||
|
|
||||||
|
const files = {
|
||||||
|
'codemirror': [
|
||||||
|
'addon/comment/comment.js',
|
||||||
|
'addon/dialog',
|
||||||
|
'addon/edit/closebrackets.js',
|
||||||
|
'addon/edit/matchbrackets.js',
|
||||||
|
'addon/fold/brace-fold.js',
|
||||||
|
'addon/fold/comment-fold.js',
|
||||||
|
'addon/fold/foldcode.js',
|
||||||
|
'addon/fold/foldgutter.css',
|
||||||
|
'addon/fold/foldgutter.js',
|
||||||
|
'addon/fold/indent-fold.js',
|
||||||
|
'addon/hint/css-hint.js',
|
||||||
|
'addon/hint/show-hint.css',
|
||||||
|
'addon/hint/show-hint.js',
|
||||||
|
'addon/lint/css-lint.js',
|
||||||
|
'addon/lint/json-lint.js',
|
||||||
|
'addon/lint/lint.css',
|
||||||
|
'addon/lint/lint.js',
|
||||||
|
'addon/scroll/annotatescrollbar.js',
|
||||||
|
'addon/search/match-highlighter.js',
|
||||||
|
'addon/search/matchesonscrollbar.css',
|
||||||
|
'addon/search/matchesonscrollbar.js',
|
||||||
|
'addon/search/searchcursor.js',
|
||||||
|
'addon/selection/active-line.js',
|
||||||
|
'keymap',
|
||||||
|
'lib',
|
||||||
|
'mode/css',
|
||||||
|
'mode/javascript',
|
||||||
|
'mode/stylus',
|
||||||
|
'theme'
|
||||||
|
]
|
||||||
|
};
|
||||||
|
|
||||||
|
async function updateReadme(lib) {
|
||||||
|
const pkg = await fs.readJson(`${root}/node_modules/${lib}/package.json`);
|
||||||
|
const file = `${root}/vendor/${lib}/README.md`;
|
||||||
|
const txt = await fs.readFile(file, 'utf8');
|
||||||
|
return fs.writeFile(file, txt.replace(/##\s*v[-\w.]+/, `## v${pkg.version}`));
|
||||||
|
}
|
||||||
|
|
||||||
|
async function copy(lib, folder) {
|
||||||
|
try {
|
||||||
|
await fs.copy(`${root}/node_modules/${lib}/${folder}`, `${root}/vendor/${lib}/${folder}`);
|
||||||
|
} catch (err) {
|
||||||
|
exit(err);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
function exit(err) {
|
||||||
|
if (err) console.error(err);
|
||||||
|
process.exit(err ? 1 : 0);
|
||||||
|
}
|
||||||
|
|
||||||
|
Object.keys(files).forEach(lib => {
|
||||||
|
updateReadme(lib);
|
||||||
|
files[lib].forEach(folder => {
|
||||||
|
copy(lib, folder);
|
||||||
|
});
|
||||||
|
console.log('\x1b[32m%s\x1b[0m', `${lib} files updated`);
|
||||||
|
});
|
21
vendor/README
vendored
Normal file
21
vendor/README
vendored
Normal file
|
@ -0,0 +1,21 @@
|
||||||
|
# Vendor files are populated by the build script:
|
||||||
|
|
||||||
|
## What the build script does
|
||||||
|
|
||||||
|
Using this repo, run `npm install`... the latest versions of:
|
||||||
|
|
||||||
|
* `CodeMirror` (https://github.com/codemirror/CodeMirror) is installed.<br><br>
|
||||||
|
* **TODO**: `jsonlint` () is installed.
|
||||||
|
* **TODO**: `less` () is installed.
|
||||||
|
* **TODO**: `lz-string-unsafe` (https://github.com/openstyles/lz-string-unsafe) is installed.
|
||||||
|
* **TODO**: `node-semver` () is installed.
|
||||||
|
* **TODO**: `stylus-lang` () is installed.<br><br>
|
||||||
|
* The necessary build tools; see `devDependencies` in the `package.json`.
|
||||||
|
|
||||||
|
## Running the build script
|
||||||
|
|
||||||
|
Use `npm run build` to update packages in the `node_modules` folder & update the vendor folder.
|
||||||
|
|
||||||
|
The following changes are made:
|
||||||
|
|
||||||
|
* Only the essential CodeMirror files are copied directly from the `node_modules` folder to `vendor/codemirror`; see the `vendor/codemirror/README` for specifics.
|
43
vendor/codemirror/README.md
vendored
Normal file
43
vendor/codemirror/README.md
vendored
Normal file
|
@ -0,0 +1,43 @@
|
||||||
|
## v0.0.0
|
||||||
|
|
||||||
|
List of essential folders & files copied from `node_modules/codemirror` to `vendor/codemirror`:
|
||||||
|
|
||||||
|
_ addon/
|
||||||
|
| |_ comment/
|
||||||
|
| | |_ comment.js
|
||||||
|
| |_ dialog/* (all files)
|
||||||
|
| |_ edit/
|
||||||
|
| | |_ closebrackets.js
|
||||||
|
| | |_ matchbrackets.js
|
||||||
|
| |_ fold/
|
||||||
|
| | |_ brace-fold.js
|
||||||
|
| | |_ comment-fold.js
|
||||||
|
| | |_ foldcode.js
|
||||||
|
| | |_ foldgutter.css
|
||||||
|
| | |_ foldgutter.js
|
||||||
|
| | |_ indent-fold.js
|
||||||
|
| |_ hint/
|
||||||
|
| | |_ css-hint.js
|
||||||
|
| | |_ show-hint.css
|
||||||
|
| | |_ show-hint.js
|
||||||
|
| |_ lint/
|
||||||
|
| | |_ css-lint.js
|
||||||
|
| | |_ json-lint.js
|
||||||
|
| | |_ lint.css
|
||||||
|
| | |_ lint.js
|
||||||
|
| |_ scroll/
|
||||||
|
| | |_ annotatescrollbar.js
|
||||||
|
| |_ search/
|
||||||
|
| | |_ match-highlighter.js
|
||||||
|
| | |_ matchesonscrollbar.css
|
||||||
|
| | |_ matchesonscrollbar.js
|
||||||
|
| | |_ searchcursor.js
|
||||||
|
| |_ selection/
|
||||||
|
| | |_ active-line.js
|
||||||
|
|_ keymap/* (all files)
|
||||||
|
|_ lib/* (all files)
|
||||||
|
|_ mode/
|
||||||
|
| |_ css/* (all files)
|
||||||
|
| |_ javascript/* (all files)
|
||||||
|
| |_ stylus/* (all files)
|
||||||
|
|_ theme/* (all files)
|
Loading…
Reference in New Issue
Block a user