Compare commits

..

1 Commits

Author SHA1 Message Date
jywarren
fd82180f63 grunt built dist files 2022-01-15 18:58:05 +00:00
14 changed files with 192412 additions and 7339 deletions

View File

@@ -13,27 +13,26 @@ Discuss with @publiclab/is-maintainers if anything is ambiguous!
<!-- NOTE: Change v0.0.0 to the appropriate release version --> <!-- NOTE: Change v0.0.0 to the appropriate release version -->
* [x] open an issue using the "release" template with this checklist with title `Checklist and coordination for v0.0.0 major/minor/patch release` (see [semantic versioning](https://docs.npmjs.com/about-semantic-versioning/)) * [x] open an issue using the "release" template with this checklist with title `Checklist and coordination for v0.0.0 major/minor/patch release` (see [semantic versioning](https://docs.npmjs.com/about-semantic-versioning/))
* [ ] create a release draft in https://github.com/publiclab/image-sequencer/releases * [ ] create a release [project](https://github.com/publiclab/image-sequencer/projects) from [this template](https://github.com/publiclab/image-sequencer/projects/5). You can copy a project from its menu.
* [ ] auto-compile release notes and copy below from corresponding release draft * [ ] compile release notes below from corresponding [release project](https://github.com/publiclab/image-sequencer/projects).
* [ ] open a pull request with updated version numbers * [ ] open a pull request with updated version numbers
* [ ] update version number in `package.json` (ex #1695) * [ ] update version number in `examples/sw.js` (ex #1734) and `package.json` (ex #1695)
* [ ] update version number in `examples/sw.js` (ex #1734) * [ ] update version number in `package.json`
* [ ] run `npm install` to update `package-lock.json` (from recent node version - 16 at time of writing, in GitPod should work) * [ ] run `npm install` to update `package-lock.json` (from recent node version - 16 at time of writing, in GitPod should work)
* [ ] check in `package-lock.json`
* [ ] finalize and merge to `main` branch (freeze merges to `main` branch until next step) * [ ] finalize and merge to `main` branch (freeze merges to `main` branch until next step)
Now, move to `stable` branch: Now, move to `stable` branch:
* [ ] force push from `main` to `stable` * [ ] force push from `main` to `stable`
* [ ] then in `stable` branch, compile `dist/` files with `grunt build` * [ ] then in `stable` branch, compile `/dist/` files with `grunt build`
* [ ] add `dist/` files with `git add -f dist/*` and commit them to `stable` branch * [ ] add `/dist/` files with `git add -f /dist/*` and commit them to `stable` branch
* [ ] publish `stable` branch to `npm` with `npm publish` (logging in first as necessary) * [ ] run `npm publish`
* [ ] push local `stable` branch up to origin github.com/publiclab/image-sequencer.git with `git push`
Draft a release: Draft a release:
* [ ] [create a release on GitHub](https://github.com/publiclab/image-sequencer/releases) and reconcile with features description + release notes from below * [ ] [create a release on GitHub](https://github.com/publiclab/image-sequencer/releases) and use features description + release notes from below
* [ ] tag version number branch (i.e. `v0.0.0`) based on `stable` or choose `stable` * [ ] tag version number branch (i.e. `v0.0.0`) based on `stable` or choose `stable`
* [ ] publish tagged branch to `npm` with `npm publish` (logging in first as necessary)
* [ ] publish to live Github pages [demo](https://sequencer.publiclab.org) (with [bash script](https://github.com/publiclab/image-sequencer/pull/1703) from `/scripts/update-demo`) (from within GitPod works well) * [ ] publish to live Github pages [demo](https://sequencer.publiclab.org) (with [bash script](https://github.com/publiclab/image-sequencer/pull/1703) from `/scripts/update-demo`) (from within GitPod works well)
* [ ] move anything necessary to next release project, i.e. <!-- Update this link -->https://github.com/publiclab/image-sequencer/projects/[insert project number] * [ ] move anything necessary to next release project, i.e. <!-- Update this link -->https://github.com/publiclab/image-sequencer/projects/[insert project number]
* [ ] close this issue! * [ ] close this issue!

View File

@@ -1,8 +1,6 @@
<!--- (Replace `0000` with the Issue Number below) ---> Fixes #0000 (<=== Replace `0000` with the Issue Number)
Fixes #0000
Make sure these boxes are checked before your pull request (PR) is ready to be reviewed and merged. Thanks!
<!---Make sure these boxes are checked before your pull request (PR) is ready to be reviewed and merged. Thanks!--->
* [ ] tests pass -- look for a green checkbox ✔️ a few minutes after opening your PR -- or run tests locally with `npm run test-all` * [ ] tests pass -- look for a green checkbox ✔️ a few minutes after opening your PR -- or run tests locally with `npm run test-all`
* [ ] code is in uniquely-named feature branch and has no merge conflicts * [ ] code is in uniquely-named feature branch and has no merge conflicts
@@ -10,10 +8,10 @@ Fixes #0000
* [ ] ask `@publiclab/is-reviewers` for help, in a comment below * [ ] ask `@publiclab/is-reviewers` for help, in a comment below
* [ ] at least 2 reviews required for getting pull request merged * [ ] at least 2 reviews required for getting pull request merged
* [ ] Insert-step functionality is working correct as expected. * [ ] Insert-step functionality is working correct as expected.
<!--- We're happy to help you get this ready -- don't be afraid to ask for help, and **don't be discouraged** if your tests fail at first!---> > We're happy to help you get this ready -- don't be afraid to ask for help, and **don't be discouraged** if your tests fail at first!
<!---If tests do fail, click on the red `X` to learn why by reading the logs.---> If tests do fail, click on the red `X` to learn why by reading the logs.
<!---Please be sure you've reviewed our contribution guidelines at https://publiclab.org/contributing-to-public-lab-software---> Please be sure you've reviewed our contribution guidelines at https://publiclab.org/contributing-to-public-lab-software
<!---Please make sure to get at least two reviews before asking for merging the PR as that would make the PR more reliable on our part Please make sure to get at least two reviews before asking for merging the PR as that would make the PR more reliable on our part
Thanks!---> Thanks!

View File

@@ -8,7 +8,7 @@ jobs:
- name: Setup node - name: Setup node
uses: actions/setup-node@v2 uses: actions/setup-node@v2
with: with:
node-version: '14' node-version: '12'
check-latest: true check-latest: true
- name: Cache node modules - name: Cache node modules
uses: actions/cache@v2 uses: actions/cache@v2
@@ -33,7 +33,7 @@ jobs:
- name: Setup node - name: Setup node
uses: actions/setup-node@v2 uses: actions/setup-node@v2
with: with:
node-version: '14' node-version: '12'
check-latest: true check-latest: true
- name: Cache node modules - name: Cache node modules
uses: actions/cache@v2 uses: actions/cache@v2
@@ -58,7 +58,7 @@ jobs:
- name: Setup node - name: Setup node
uses: actions/setup-node@v2 uses: actions/setup-node@v2
with: with:
node-version: '14' node-version: '12'
check-latest: true check-latest: true
- name: Cache node modules - name: Cache node modules
uses: actions/cache@v2 uses: actions/cache@v2
@@ -83,7 +83,7 @@ jobs:
- name: Setup node - name: Setup node
uses: actions/setup-node@v2 uses: actions/setup-node@v2
with: with:
node-version: '14' node-version: '12'
check-latest: true check-latest: true
- name: Cache node modules - name: Cache node modules
uses: actions/cache@v2 uses: actions/cache@v2
@@ -109,7 +109,7 @@ jobs:
- name: Setup node - name: Setup node
uses: actions/setup-node@v2 uses: actions/setup-node@v2
with: with:
node-version: '14' node-version: '12'
check-latest: true check-latest: true
- name: Cache node modules - name: Cache node modules
uses: actions/cache@v2 uses: actions/cache@v2
@@ -134,7 +134,7 @@ jobs:
- name: Setup node - name: Setup node
uses: actions/setup-node@v2 uses: actions/setup-node@v2
with: with:
node-version: '14' node-version: '12'
check-latest: true check-latest: true
- name: Cache node modules - name: Cache node modules
uses: actions/cache@v2 uses: actions/cache@v2
@@ -159,7 +159,7 @@ jobs:
- name: Setup node - name: Setup node
uses: actions/setup-node@v2 uses: actions/setup-node@v2
with: with:
node-version: '14' node-version: '12'
check-latest: true check-latest: true
- name: Cache node modules - name: Cache node modules
uses: actions/cache@v2 uses: actions/cache@v2
@@ -184,7 +184,7 @@ jobs:
- name: Setup node - name: Setup node
uses: actions/setup-node@v2 uses: actions/setup-node@v2
with: with:
node-version: '14' node-version: '12'
check-latest: true check-latest: true
- name: Cache node modules - name: Cache node modules
uses: actions/cache@v2 uses: actions/cache@v2

View File

@@ -118,9 +118,9 @@ function ModuleName(options,UI) {
]; ];
``` ```
### Running a browser-only module in node ### Running a browser-only module in node
If your module has browser specific code or you are consuming a dependency which does the `gl-context` API. We designed this api especially for web-based modules but since it runs the module in a headless browser, it supports all browser specific APIs. If your module has browser specific code or you are consuming a dependency which does the `gl-context` api. We designed this api especially for webl based modules but since it runs the module in a headless browser, ti supports all browser specific APIs.
The API must be used in the following format The api must be used in the following format
```js ```js
var step = this; var step = this;
@@ -197,7 +197,7 @@ There are four events in all:
* `UI.onComplete(options.step)` must be emitted whenever the output of a draw call * `UI.onComplete(options.step)` must be emitted whenever the output of a draw call
is ready. An argument, that is the DataURL of the output image must be passed in. is ready. An argument, that is the DataURL of the output image must be passed in.
* `UI.onRemove(options.step)` is emitted automatically and the module should not emit it. * `UI.onRemove(options.step)` is emitted automatically and the module should not emit it.
* `UI.notify(msg,id)` must be emitted when a notification has to be produced. * `UI.notify(msg,id)` must be emmited when a notification has to be produced.
### Name and description ### Name and description
@@ -244,7 +244,7 @@ Also, A module may have output values. These must be defined as shown above.
### Progress reporting ### Progress reporting
The default "loading spinner" can be optionally overridden with a custom progress object to draw progress on the CLI, following is a basic module format for the same: The default "loading spinner" can be optionally overriden with a custom progress object to draw progress on the CLI, following is a basic module format for the same:
```js ```js
module.exports = function ModuleName(options,UI) { module.exports = function ModuleName(options,UI) {
@@ -279,7 +279,7 @@ module.exports = function ModuleName(options,UI) {
} }
``` ```
The `progressObj` parameter of `draw()` is not consumed unless a custom progress bar needs to be drawn, for which this default spinner should be stopped with `progressObj.stop()` and image-sequencer is informed about the custom progress bar with `progressObj.overrideFlag = true;` following which this object can be overridden with custom progress object. The `progressObj` parameter of `draw()` is not consumed unless a custom progress bar needs to be drawn, for which this default spinner should be stopped with `progressObj.stop()` and image-sequencer is informed about the custom progress bar with `progressObj.overrideFlag = true;` following which this object can be overriden with custom progress object.
### Module example ### Module example
@@ -292,7 +292,7 @@ For help integrating, please open an issue.
## Meta Module ## Meta Module
IMAGE SEQUENCER supports "meta modules" -- modules made of other modules. The syntax and structure of these meta modules is very similar to standard modules. Sequencer can also generate meta modules dynamically with the function `createMetaModule` which can be called in the following ways IMAGE SEQUENCER supports "meta modules" -- modules made of other modules. The syntax and structure of these meta modules is very similar to standard modules. Sequencer can also genarate meta modules dynamically with the function `createMetaModule` which can be called in the following ways
```js ```js
@@ -387,7 +387,7 @@ npx eslint <file path> --fix
``` ```
Be sure to not include the angular brackets(<>). Be sure to not include the angular brackets(<>).
Husky ensures automation of the above steps with git-hooks(eg. git add, git commit..). However we don't want to check and fix changes of the entire codebase with each commit and that the fixes made by eslint appear unstaged and require us to commit them again and that is where lint-staged helps. Husky ensures automation of the above steps with git-hooks(eg. git add,git commit..). However we don't want to check and fix changes of the entire codebase with each commit and that the fixes made by eslint appear unstaged and require us to commit them again and that is where lint-staged helps.
If we want `husky` to not verify the commit and push it anyway, use `git commit -m "message" --no-verify.` If we want `husky` to not verify the commit and push it anyway, use `git commit -m "message" --no-verify.`
@@ -479,13 +479,3 @@ The following shell scripts are present in the `scripts/` directory.
This script is safe to use directly because it separately clones the repo in a temporary directory. This script is safe to use directly because it separately clones the repo in a temporary directory.
Arguments: None since it is a an *interactive* script, ie it asks the user for input. Arguments: None since it is a an *interactive* script, ie it asks the user for input.
****
# Comments
1. Methods must be described using [JSDoc comments](https://devdocs.io/jsdoc/)
2. Misc code comments should be inline unless it is a long sentence.
3. No use of continuous tenses, no pronouns.
4. No redundant comments.
5. Each comment should start with an uppercase letter and end with a full stop.

50049
dist/image-sequencer-ui.js vendored Normal file

File diff suppressed because it is too large Load Diff

1
dist/image-sequencer-ui.min.js vendored Normal file

File diff suppressed because one or more lines are too long

133981
dist/image-sequencer.js vendored Normal file

File diff suppressed because one or more lines are too long

1
dist/image-sequencer.min.js vendored Normal file

File diff suppressed because one or more lines are too long

View File

@@ -407,7 +407,7 @@ function DefaultHtmlStepUi(_sequencer, options) {
*/ */
function updateDimensions(step){ function updateDimensions(step){
_sequencer.getImageDimensions(step.imgElement.src, function (dim) { _sequencer.getImageDimensions(step.imgElement.src, function (dim) {
step.ui.querySelector('.' + step.name).attributes['data-original-title'].value = `<div style="text-align: center"><p>Image Width: ${dim.width} px<br>Image Height: ${dim.height} px</br>${isGIF(step.output) ? `Frames: ${dim.frames}` : ''}</div>`; step.ui.querySelector('.' + step.name).attributes['data-original-title'].value = `<div style="text-align: center"><p>Image Width: ${dim.width}<br>Image Height: ${dim.height}</br>${isGIF(step.output) ? `Frames: ${dim.frames}` : ''}</div>`;
}); });
} }

View File

@@ -1,4 +1,4 @@
const staticCacheName = 'image-sequencer-static-v3.7.2'; const staticCacheName = 'image-sequencer-static-v3.7.1';
self.addEventListener('install', function(e) { self.addEventListener('install', function(e) {
e.waitUntil( e.waitUntil(
caches.open(staticCacheName).then(function(cache) { caches.open(staticCacheName).then(function(cache) {

15575
package-lock.json generated

File diff suppressed because it is too large Load Diff

View File

@@ -1,6 +1,6 @@
{ {
"name": "image-sequencer", "name": "image-sequencer",
"version": "3.7.2", "version": "3.7.1",
"description": "A modular JavaScript image manipulation library modeled on a storyboard.", "description": "A modular JavaScript image manipulation library modeled on a storyboard.",
"main": "src/ImageSequencer.js", "main": "src/ImageSequencer.js",
"scripts": { "scripts": {
@@ -41,29 +41,30 @@
"bootstrap": "^3.4.1", "bootstrap": "^3.4.1",
"bootstrap-colorpicker": "^2.5.3", "bootstrap-colorpicker": "^2.5.3",
"buffer": "~6.0.2", "buffer": "~6.0.2",
"commander": "^9.0.0", "commander": "^8.0.0",
"compressorjs": "^1.0.5", "compressorjs": "^1.0.5",
"data-uri-to-buffer": "^4.0.1", "data-uri-to-buffer": "^3.0.0",
"downloadjs": "^1.4.7", "downloadjs": "^1.4.7",
"eslint": "^8.0.0", "eslint": "^8.0.0",
"expr-eval": "^2.0.2", "expr-eval": "^2.0.2",
"fisheyegl": "^0.1.2", "fisheyegl": "^0.1.2",
"font-awesome": "~4.7.0", "font-awesome": "~4.7.0",
"geotiff": "^1.0.0-beta.6",
"get-pixels": "~3.3.0", "get-pixels": "~3.3.0",
"gifshot": "^0.4.5", "gifshot": "^0.4.5",
"glfx": "0.0.4", "glfx": "0.0.4",
"gpu.js": "^2.3.1", "gpu.js": "^2.3.1",
"imgareaselect": "git+https://git@github.com/jywarren/imgareaselect.git#v1.0.0-rc.2", "imgareaselect": "git+https://git@github.com/jywarren/imgareaselect.git#v1.0.0-rc.2",
"image-sequencer-invert": "^1.0.0", "image-sequencer-invert": "^1.0.0",
"imagejs": "git+https://git@github.com/glennjones/imagejs.git#1119a31e6eabc87563bc573cd62c11bd487ce8a9", "imagejs": "0.0.9",
"imagemin": "^7.0.1", "imagemin": "^7.0.1",
"imagemin-jpegtran": "^7.0.0", "imagemin-jpegtran": "^7.0.0",
"imagemin-pngquant": "^9.0.1", "imagemin-pngquant": "^9.0.1",
"istanbul": "^0.4.5", "istanbul": "^0.4.5",
"jasmine": "^4.0.2", "jasmine": "^3.4.0",
"jpegtran-bin": "^7.0.0", "jpegtran-bin": "^6.0.1",
"jquery": "^3.3.1", "jquery": "^3.3.1",
"jsdom": "^20.0.0", "jsdom": "^19.0.0",
"jspdf": "^2.1.1", "jspdf": "^2.1.1",
"jsqr": "^1.1.1", "jsqr": "^1.1.1",
"lodash": "^4.17.11", "lodash": "^4.17.11",
@@ -96,21 +97,21 @@
"grunt-contrib-uglify-es": "^3.3.0", "grunt-contrib-uglify-es": "^3.3.0",
"grunt-contrib-watch": "^1.1.0", "grunt-contrib-watch": "^1.1.0",
"grunt-text-replace": "^0.4.0", "grunt-text-replace": "^0.4.0",
"husky": "^8.0.1", "husky": "^7.0.0",
"image-filter-core": "~2.0.2", "image-filter-core": "~2.0.2",
"image-filter-threshold": "~2.0.1", "image-filter-threshold": "~2.0.1",
"jasmine-core": "^4.0.0", "jasmine-core": "^3.3.0",
"jasmine-jquery": "^2.1.1", "jasmine-jquery": "^2.1.1",
"jasmine-spec-reporter": "^7.0.0", "jasmine-spec-reporter": "^7.0.0",
"jest": "^29.0.0", "jest": "^27.0.1",
"jest-puppeteer": "^6.0.0", "jest-puppeteer": "^6.0.0",
"lint-staged": "^13.0.0", "lint-staged": "^12.1.3",
"looks-same": "^7.0.0", "looks-same": "^7.0.0",
"matchdep": "^2.0.0", "matchdep": "^2.0.0",
"resemblejs": "^4.0.1", "resemblejs": "^3.2.5",
"tap-spec": "^5.0.0", "tap-spec": "^5.0.0",
"tape": "^5.2.0", "tape": "^5.2.0",
"tape-run": "^10.0.0", "tape-run": "^9.0.0",
"uglify-es": "^3.3.7" "uglify-es": "^3.3.7"
}, },
"husky": { "husky": {

View File

@@ -10,15 +10,9 @@ module.exports = function BlobAnalysis(options, UI){
var step = this; var step = this;
function extraManipulation(pixels, setRenderState, generateOutput){ function extraManipulation(pixels){
setRenderState(false);
if (!options.inBrowser) { pixels = require('./BlobAnalysis')(pixels);
require('../_nomodule/gl-context')(input, callback, step, options);
} else{
pixels = require('./BlobAnalysis')(pixels);
setRenderState(true);
generateOutput();
}
return pixels; return pixels;
} }

View File

@@ -15,22 +15,20 @@ module.exports = function runInBrowserContext(input, callback, step, options) {
is not available otherwise */ is not available otherwise */
page.goto('https://google.com').then(() => { page.goto('https://google.com').then(() => {
page.addScriptTag({ path: require('path').join(__dirname, '../../../dist/image-sequencer.js') }).then(() => { page.addScriptTag({ path: require('path').join(__dirname, '../../../dist/image-sequencer.js') }).then(() => {
page.addScriptTag({path: require('path').join(__dirname, '../../../node_modules/opencv.js/opencv.js')}).then(() => { page.evaluate((options) => {
page.evaluate((options) => { return new Promise((resolve, reject) => {
return new Promise((resolve, reject) => { var sequencer = ImageSequencer();
var sequencer = ImageSequencer(); sequencer.loadImage(options.input.src);
sequencer.loadImage(options.input.src); sequencer.addSteps(options.modOptions.step, options.modOptions);
sequencer.addSteps(options.modOptions.step, options.modOptions); sequencer.run(function cb(out) {
sequencer.run(function cb(out) { resolve(sequencer.steps[1].output.src);
resolve(sequencer.steps[1].output.src);
});
});
}, obj).then(el => {
browser.close().then(() => {
step.output = { src: el, format: input.format };
callback();
}); });
}); });
}, obj).then(el => {
browser.close().then(() => {
step.output = { src: el, format: input.format };
callback();
});
}); });
}); });
}); });