Shorten UI code with new $step method (#710)

* update dist

Signed-off-by: tech4GT <varun.gupta1798@gmail.com>

dist update

Revert "dist update"

This reverts commit 9ee2a987e8f978961656ae8f71f6e6702bbbd30d.

* Merge remote-tracking branch 'upstream/main' into main

* add dist

* add new func

* update itermediate

* changes

* fix gitignore

* use scopeQuery

* add mapHtmlTypes test

* scopeQuery tests added

* try something

* change

* fix stepui test

* Remove double quotes

* update new code

* refactor to spec
This commit is contained in:
Harsh Khandeparkar
2019-06-22 00:41:10 +05:30
committed by Jeffrey Warren
parent 0eb3f263f9
commit 257113a948
22 changed files with 274 additions and 313 deletions

View File

@@ -8,18 +8,22 @@
// output values, step information. // output values, step information.
// See documetation for more details. // See documetation for more details.
var intermediateHtmlStepUi = require('./intermediateHtmlStepUi.js'); var intermediateHtmlStepUi = require('./intermediateHtmlStepUi.js'),
var urlHash = require('./urlHash.js'); urlHash = require('./urlHash.js'),
var _ = require('lodash'); _ = require('lodash'),
var mapHtmlTypes = require('./mapHtmltypes'); mapHtmlTypes = require('./mapHtmltypes'),
scopeQuery = require('./scopeQuery'),
$stepAll,
$step;
function DefaultHtmlStepUi(_sequencer, options) { function DefaultHtmlStepUi(_sequencer, options) {
options = options || {}; options = options || {};
var stepsEl = options.stepsEl || document.querySelector('#steps'); var stepsEl = options.stepsEl || document.querySelector('#steps');
var selectStepSel = options.selectStepSel = options.selectStepSel || '#selectStep'; var selectStepSel = options.selectStepSel = options.selectStepSel || '#selectStep';
function onSetup(step, stepOptions) { function onSetup(step, stepOptions) {
if (step.options && step.options.description) if (step.options && step.options.description)
step.description = step.options.description; step.description = step.options.description;
@@ -67,8 +71,12 @@ function DefaultHtmlStepUi(_sequencer, options) {
var parser = new DOMParser(); var parser = new DOMParser();
step.ui = parser.parseFromString(step.ui, 'text/html'); step.ui = parser.parseFromString(step.ui, 'text/html');
step.ui = step.ui.querySelector('div.container-fluid'); step.ui = step.ui.querySelector('div.container-fluid');
step.linkElements = step.ui.querySelectorAll('a');
step.imgElement = step.ui.querySelector('a img.img-thumbnail'); $step = scopeQuery.scopeSelector(step.ui);
$stepAll = scopeQuery.scopeSelectorAll(step.ui);
step.linkElements = $stepAll('a');
step.imgElement = $step('a img.img-thumbnail')[0];
if (_sequencer.modulesInfo().hasOwnProperty(step.name)) { if (_sequencer.modulesInfo().hasOwnProperty(step.name)) {
var inputs = _sequencer.modulesInfo(step.name).inputs; var inputs = _sequencer.modulesInfo(step.name).inputs;
@@ -144,12 +152,12 @@ function DefaultHtmlStepUi(_sequencer, options) {
html + html +
'\ '\
</div>'; </div>';
step.ui.querySelector('div.details').appendChild(div); $step('div.details').append(div);
} }
$(step.ui.querySelector('div.panel-footer')).append( $step('div.panel-footer').append(
'<div class="cal collapse in"><button type="submit" class="btn btn-sm btn-default btn-save" disabled = "true" >Apply</button> <small style="padding-top:2px;">Press apply to see changes</small></div>' '<div class="cal collapse in"><button type="submit" class="btn btn-sm btn-default btn-save" disabled = "true" >Apply</button> <small style="padding-top:2px;">Press apply to see changes</small></div>'
); );
$(step.ui.querySelector('div.panel-footer')).prepend( $step('div.panel-footer').prepend(
'<button class="pull-right btn btn-default btn-sm insert-step" >\ '<button class="pull-right btn btn-default btn-sm insert-step" >\
<span class="insert-text"><i class="fa fa-plus"></i> Insert Step</span><span class="no-insert-text" style="display:none">Close</span></button>\ <span class="insert-text"><i class="fa fa-plus"></i> Insert Step</span><span class="no-insert-text" style="display:none">Close</span></button>\
<button class="pull-right btn btn-default btn-sm download-btn" style="margin-right:2px" >\ <button class="pull-right btn btn-default btn-sm download-btn" style="margin-right:2px" >\
@@ -159,13 +167,13 @@ function DefaultHtmlStepUi(_sequencer, options) {
} }
if (step.name != 'load-image') { if (step.name != 'load-image') {
step.ui $step('div.trash-container')
.querySelector('div.trash-container')
.prepend( .prepend(
parser.parseFromString(tools, 'text/html').querySelector('div') parser.parseFromString(tools, 'text/html').querySelector('div')
); );
$(step.ui.querySelectorAll('.remove')).on('click', function() {notify('Step Removed', 'remove-notification');});
$(step.ui.querySelectorAll('.insert-step')).on('click', function() { util.insertStep(step.ID); }); $stepAll('.remove').on('click', function() {notify('Step Removed', 'remove-notification');});
$stepAll('.insert-step').on('click', function() { util.insertStep(step.ID); });
// Insert the step's UI in the right place // Insert the step's UI in the right place
if (stepOptions.index == _sequencer.steps.length) { if (stepOptions.index == _sequencer.steps.length) {
stepsEl.appendChild(step.ui); stepsEl.appendChild(step.ui);
@@ -179,19 +187,19 @@ function DefaultHtmlStepUi(_sequencer, options) {
else { else {
$('#load-image').append(step.ui); $('#load-image').append(step.ui);
} }
$(step.ui.querySelector('.toggle')).on('click', () => { $step('.toggle').on('click', () => {
$(step.ui.querySelector('.toggleIcon')).toggleClass('rotated'); $step('.toggleIcon').toggleClass('rotated');
$(step.ui.querySelectorAll('.cal')).collapse('toggle'); $stepAll('.cal').collapse('toggle');
}); });
$(step.imgElement).on('mousemove', _.debounce(() => imageHover(step), 150)); $(step.imgElement).on('mousemove', _.debounce(() => imageHover(step), 150));
$(step.imgElement).on('click', (e) => {e.preventDefault(); }); $(step.imgElement).on('click', (e) => {e.preventDefault(); });
$(step.ui.querySelectorAll('#color-picker')).colorpicker(); $stepAll('#color-picker').colorpicker();
function saveOptions(e) { function saveOptions(e) {
e.preventDefault(); e.preventDefault();
if (optionsChanged){ if (optionsChanged){
$(step.ui.querySelector('div.details')) $step('div.details')
.find('input,select') .find('input,select')
.each(function(i, input) { .each(function(i, input) {
$(input) $(input)
@@ -204,7 +212,7 @@ function DefaultHtmlStepUi(_sequencer, options) {
// modify the url hash // modify the url hash
urlHash.setUrlHashParameter('steps', _sequencer.toString()); urlHash.setUrlHashParameter('steps', _sequencer.toString());
// disable the save button // disable the save button
$(step.ui.querySelector('.btn-save')).prop('disabled', true); $step('.btn-save').prop('disabled', true);
optionsChanged = false; optionsChanged = false;
changedInputs = 0; changedInputs = 0;
} }
@@ -215,15 +223,15 @@ function DefaultHtmlStepUi(_sequencer, options) {
changedInputs += hasChangedBefore ? inputChanged ? 0 : -1 : inputChanged ? 1 : 0; changedInputs += hasChangedBefore ? inputChanged ? 0 : -1 : inputChanged ? 1 : 0;
optionsChanged = changedInputs > 0; optionsChanged = changedInputs > 0;
$(step.ui.querySelector('.btn-save')).prop('disabled', !optionsChanged); $step('.btn-save').prop('disabled', !optionsChanged);
return inputChanged; return inputChanged;
} }
var var
changedInputs = 0, changedInputs = 0,
optionsChanged = false; optionsChanged = false;
$(step.ui.querySelector('.input-form')).on('submit', saveOptions); $step('.input-form').on('submit', saveOptions);
$(step.ui.querySelectorAll('.target')).each(function(i, input) { $stepAll('.target').each(function(i, input) {
$(input) $(input)
.data('initValue', $(input).val()) .data('initValue', $(input).val())
.data('hasChangedBefore', false) .data('hasChangedBefore', false)
@@ -248,19 +256,19 @@ function DefaultHtmlStepUi(_sequencer, options) {
} }
function onDraw(step) { function onDraw() {
$(step.ui.querySelector('.load')).show(); $step('.load').show();
$(step.ui.querySelector('img')).hide(); $step('img').hide();
$(step.ui.querySelectorAll('.load-spin')).show(); $stepAll('.load-spin').show();
} }
function onComplete(step) { function onComplete(step) {
$(step.ui.querySelector('img')).show(); $step('img').show();
$(step.ui.querySelectorAll('.load-spin')).hide(); $stepAll('.load-spin').hide();
$(step.ui.querySelector('.load')).hide(); $step('.load').hide();
step.imgElement.src = (step.name == 'load-image') ? step.output.src : step.output; step.imgElement.src = (step.name == 'load-image') ? step.output.src : step.output;
var imgthumbnail = step.ui.querySelector('.img-thumbnail'); var imgthumbnail = $step('.img-thumbnail');
for (let index = 0; index < step.linkElements.length; index++) { for (let index = 0; index < step.linkElements.length; index++) {
if (step.linkElements[index].contains(imgthumbnail)) if (step.linkElements[index].contains(imgthumbnail))
step.linkElements[index].href = step.imgElement.src; step.linkElements[index].href = step.imgElement.src;
@@ -271,7 +279,7 @@ function DefaultHtmlStepUi(_sequencer, options) {
return output.split('/')[1].split(';')[0]; return output.split('/')[1].split(';')[0];
} }
$(step.ui.querySelectorAll('.download-btn')).on('click', () => { $stepAll('.download-btn').on('click', () => {
for (let index = 0; index < step.linkElements.length; index++){ for (let index = 0; index < step.linkElements.length; index++){
@@ -294,18 +302,18 @@ function DefaultHtmlStepUi(_sequencer, options) {
for (var i in inputs) { for (var i in inputs) {
if (step.options[i] !== undefined) { if (step.options[i] !== undefined) {
if (inputs[i].type.toLowerCase() === 'input') if (inputs[i].type.toLowerCase() === 'input')
$(step.ui.querySelector('div[name="' + i + '"] input')) $step('div[name="' + i + '"] input')
.val(step.options[i]) .val(step.options[i])
.data('initValue', step.options[i]); .data('initValue', step.options[i]);
if (inputs[i].type.toLowerCase() === 'select') if (inputs[i].type.toLowerCase() === 'select')
$(step.ui.querySelector('div[name="' + i + '"] select')) $step('div[name="' + i + '"] select')
.val(step.options[i]) .val(step.options[i])
.data('initValue', step.options[i]); .data('initValue', step.options[i]);
} }
} }
for (var i in outputs) { for (var i in outputs) {
if (step[i] !== undefined) if (step[i] !== undefined)
$(step.ui.querySelector('div[name="' + i + '"] input')) $step('div[name="' + i + '"] input')
.val(step[i]); .val(step[i]);
} }
} }

View File

@@ -66,20 +66,20 @@ function IntermediateHtmlStepUi(_sequencer, step, options) {
function selectNewStepUi() { function selectNewStepUi() {
var insertSelect = $(step.ui.querySelector('.insert-step-select')); var insertSelect = $step('.insert-step-select');
var m = insertSelect.val(); var m = insertSelect.val();
$(step.ui.querySelector('.insertDiv .info')).html(_sequencer.modulesInfo(m).description); $step('.insertDiv .info').html(_sequencer.modulesInfo(m).description);
$(step.ui.querySelector('.insertDiv .add-step-btn')).prop('disabled', false); $step('.insertDiv .add-step-btn').prop('disabled', false);
} }
var toggleDiv = function(callback = function(){}){ var toggleDiv = function(callback = function(){}){
$(step.ui.querySelector('.insertDiv')).collapse('toggle'); $step('.insertDiv').collapse('toggle');
if ($(step.ui.querySelector('.insert-text')).css('display') != 'none'){ if ($step('.insert-text').css('display') != 'none'){
$(step.ui.querySelector('.insert-text')).fadeToggle(200, function(){$(step.ui.querySelector('.no-insert-text')).fadeToggle(200, callback);}); $step('.insert-text').fadeToggle(200, function(){$step('.no-insert-text').fadeToggle(200, callback)});
} }
else { else {
$(step.ui.querySelector('.no-insert-text')).fadeToggle(200, function(){$(step.ui.querySelector('.insert-text')).fadeToggle(200, callback);}); $step('.no-insert-text').fadeToggle(200, function(){$step('.insert-text').fadeToggle(200, callback)});
} }
}; };
@@ -89,7 +89,7 @@ function IntermediateHtmlStepUi(_sequencer, step, options) {
var addStepUI = stepUI(); var addStepUI = stepUI();
addStepUI = parser.parseFromString(addStepUI, 'text/html').querySelector('div'); addStepUI = parser.parseFromString(addStepUI, 'text/html').querySelector('div');
if ($(step.ui.querySelector('.insertDiv')).length > 0){ if ($step('.insertDiv').length > 0){
toggleDiv(); toggleDiv();
} }
else { else {
@@ -103,9 +103,9 @@ function IntermediateHtmlStepUi(_sequencer, step, options) {
}); });
} }
$(step.ui.querySelector('.insertDiv .close-insert-box')).off('click').on('click', function(){toggleDiv(function(){});}); $step('.insertDiv .close-insert-box').off('click').on('click', function(){toggleDiv(function(){})});
var insertStepSelect = $(step.ui.querySelector('.insert-step-select')); var insertStepSelect = $step('.insert-step-select');
insertStepSelect.html(''); insertStepSelect.html('');
// Add modules to the insertStep dropdown // Add modules to the insertStep dropdown
for (var m in modulesInfo) { for (var m in modulesInfo) {
@@ -117,26 +117,26 @@ function IntermediateHtmlStepUi(_sequencer, step, options) {
insertStepSelect.selectize({ insertStepSelect.selectize({
sortField: 'text' sortField: 'text'
}); });
$(step.ui.querySelector('.inserDiv .add-step-btn')).prop('disabled', true); $step('.inserDiv .add-step-btn').prop('disabled', true);
insertStepSelect.append('<option value="" disabled selected>Select a Module</option>'); insertStepSelect.append('<option value="" disabled selected>Select a Module</option>');
$(step.ui.querySelector('.insertDiv .radio-group .radio')).on('click', function () { $step('.insertDiv .radio-group .radio').on('click', function () {
$(this).parent().find('.radio').removeClass('selected'); $(this).parent().find('.radio').removeClass('selected');
$(this).addClass('selected'); $(this).addClass('selected');
newStep = $(this).attr('data-value'); newStep = $(this).attr('data-value');
$(step.ui.querySelector('.insert-step-select')).val(newStep); $step('.insert-step-select').val(newStep);
selectNewStepUi(); selectNewStepUi();
insert(id); insert(id);
$(this).removeClass('selected'); $(this).removeClass('selected');
}); });
insertStepSelect.on('change', selectNewStepUi); insertStepSelect.on('change', selectNewStepUi);
$(step.ui.querySelector('.insertDiv .add-step-btn')).on('click', function () { insert(id); }); $step('.insertDiv .add-step-btn').on('click', function () { insert(id) });
}; }
function insert(id) { function insert(id) {
options = options || {}; options = options || {};
var insertStepSelect = $(step.ui.querySelector('.insert-step-select')); var insertStepSelect = $step('.insert-step-select');
if (insertStepSelect.val() == 'none') return; if (insertStepSelect.val() == 'none') return;
var newStepName = insertStepSelect.val(); var newStepName = insertStepSelect.val();

View File

@@ -0,0 +1,60 @@
/**
* @method $scope
* @param {"DOMNode"} scope A DOM Node as the scope
*/
function $scope(scope) {
return function(queryString){
var element = $(scope.querySelector(queryString));
element.elem = function(queryString){
return new $scope(scope)(queryString);
}
element.elemAll = function(queryString){
return new $scopeAll(scope)(queryString);
}
return element;
}
}
/**
* @method $scopeAll
* @param {"DOMNode"} scope A DOM Node as the scope
*/
function $scopeAll(scope){
return function(queryString){
var element = $(scope.querySelectorAll(queryString));
element.elem = function(queryString){
return new $scope(scope)(queryString);
}
element.elemAll = function(queryString){
return new $scopeAll(scope)(queryString);
}
return element;
}
}
/**
* @method scopeSelector
* @description A scoped jQuery selector
* @param {"DOMNode"} scope DOM Node as the scope
*/
function scopeSelector(scope){
return $scope(scope);
}
/**
* @method scopeSelectorAll
* @description A scoped jQuery multiple selector
* @param {"DOMNode} scope DOM Node as the scope
*/
function scopeSelectorAll(scope){
return $scopeAll(scope);
}
module.exports = {
scopeSelector,
scopeSelectorAll
}

33
package-lock.json generated
View File

@@ -3581,8 +3581,7 @@
"ansi-regex": { "ansi-regex": {
"version": "2.1.1", "version": "2.1.1",
"bundled": true, "bundled": true,
"dev": true, "dev": true
"optional": true
}, },
"aproba": { "aproba": {
"version": "1.2.0", "version": "1.2.0",
@@ -3625,8 +3624,7 @@
"code-point-at": { "code-point-at": {
"version": "1.1.0", "version": "1.1.0",
"bundled": true, "bundled": true,
"dev": true, "dev": true
"optional": true
}, },
"concat-map": { "concat-map": {
"version": "0.0.1", "version": "0.0.1",
@@ -3637,8 +3635,7 @@
"console-control-strings": { "console-control-strings": {
"version": "1.1.0", "version": "1.1.0",
"bundled": true, "bundled": true,
"dev": true, "dev": true
"optional": true
}, },
"core-util-is": { "core-util-is": {
"version": "1.0.2", "version": "1.0.2",
@@ -3755,8 +3752,7 @@
"inherits": { "inherits": {
"version": "2.0.3", "version": "2.0.3",
"bundled": true, "bundled": true,
"dev": true, "dev": true
"optional": true
}, },
"ini": { "ini": {
"version": "1.3.5", "version": "1.3.5",
@@ -3768,7 +3764,6 @@
"version": "1.0.0", "version": "1.0.0",
"bundled": true, "bundled": true,
"dev": true, "dev": true,
"optional": true,
"requires": { "requires": {
"number-is-nan": "^1.0.0" "number-is-nan": "^1.0.0"
} }
@@ -3791,14 +3786,12 @@
"minimist": { "minimist": {
"version": "0.0.8", "version": "0.0.8",
"bundled": true, "bundled": true,
"dev": true, "dev": true
"optional": true
}, },
"minipass": { "minipass": {
"version": "2.3.5", "version": "2.3.5",
"bundled": true, "bundled": true,
"dev": true, "dev": true,
"optional": true,
"requires": { "requires": {
"safe-buffer": "^5.1.2", "safe-buffer": "^5.1.2",
"yallist": "^3.0.0" "yallist": "^3.0.0"
@@ -3817,7 +3810,6 @@
"version": "0.5.1", "version": "0.5.1",
"bundled": true, "bundled": true,
"dev": true, "dev": true,
"optional": true,
"requires": { "requires": {
"minimist": "0.0.8" "minimist": "0.0.8"
} }
@@ -3898,8 +3890,7 @@
"number-is-nan": { "number-is-nan": {
"version": "1.0.1", "version": "1.0.1",
"bundled": true, "bundled": true,
"dev": true, "dev": true
"optional": true
}, },
"object-assign": { "object-assign": {
"version": "4.1.1", "version": "4.1.1",
@@ -3911,7 +3902,6 @@
"version": "1.4.0", "version": "1.4.0",
"bundled": true, "bundled": true,
"dev": true, "dev": true,
"optional": true,
"requires": { "requires": {
"wrappy": "1" "wrappy": "1"
} }
@@ -3997,8 +3987,7 @@
"safe-buffer": { "safe-buffer": {
"version": "5.1.2", "version": "5.1.2",
"bundled": true, "bundled": true,
"dev": true, "dev": true
"optional": true
}, },
"safer-buffer": { "safer-buffer": {
"version": "2.1.2", "version": "2.1.2",
@@ -4034,7 +4023,6 @@
"version": "1.0.2", "version": "1.0.2",
"bundled": true, "bundled": true,
"dev": true, "dev": true,
"optional": true,
"requires": { "requires": {
"code-point-at": "^1.0.0", "code-point-at": "^1.0.0",
"is-fullwidth-code-point": "^1.0.0", "is-fullwidth-code-point": "^1.0.0",
@@ -4054,7 +4042,6 @@
"version": "3.0.1", "version": "3.0.1",
"bundled": true, "bundled": true,
"dev": true, "dev": true,
"optional": true,
"requires": { "requires": {
"ansi-regex": "^2.0.0" "ansi-regex": "^2.0.0"
} }
@@ -4098,14 +4085,12 @@
"wrappy": { "wrappy": {
"version": "1.0.2", "version": "1.0.2",
"bundled": true, "bundled": true,
"dev": true, "dev": true
"optional": true
}, },
"yallist": { "yallist": {
"version": "3.0.3", "version": "3.0.3",
"bundled": true, "bundled": true,
"dev": true, "dev": true
"optional": true
} }
} }
}, },

View File

@@ -6,7 +6,7 @@
"scripts": { "scripts": {
"debug": "TEST=true node ./index.js -i ./examples/images/monarch.png -s invert", "debug": "TEST=true node ./index.js -i ./examples/images/monarch.png -s invert",
"test": "TEST=true istanbul cover tape test/core/*.js test/core/ui/user-interface.js test/core/modules/*.js | tap-spec; node test/core/sequencer/benchmark.js; browserify test/core/sequencer/meta-modules.js test/core/sequencer/image-sequencer.js test/core/sequencer/chain.js test/core/sequencer/replace.js test/core/sequencer/import-export.js test/core/sequencer/run.js test/core/sequencer/dynamic-imports.js test/core/util/*.js | tape-run --render=\"tap-spec\"", "test": "TEST=true istanbul cover tape test/core/*.js test/core/ui/user-interface.js test/core/modules/*.js | tap-spec; node test/core/sequencer/benchmark.js; browserify test/core/sequencer/meta-modules.js test/core/sequencer/image-sequencer.js test/core/sequencer/chain.js test/core/sequencer/replace.js test/core/sequencer/import-export.js test/core/sequencer/run.js test/core/sequencer/dynamic-imports.js test/core/util/*.js | tape-run --render=\"tap-spec\"",
"test-ui": "node node_modules/jasmine/bin/jasmine test/spec/*.js", "test-ui": "node node_modules/jasmine/bin/jasmine test/ui/spec/*.js",
"setup": "npm i && npm i -g grunt grunt-cli && grunt build", "setup": "npm i && npm i -g grunt grunt-cli && grunt build",
"start": "grunt serve" "start": "grunt serve"
}, },

View File

@@ -1,26 +0,0 @@
describe('Preview UI HTML', function() {
var InsertPreview = require('../examples/lib/insertPreview');
var sequencer = require('../src/ImageSequencer')();
var insertPreview;
var options = { brightness: 50 };
beforeEach(()=>{
insertPreview = InsertPreview;
spyOn(insertPreview, 'generatePreview');
spyOn(insertPreview, 'updatePreviews');
insertPreview.generatePreview('brightness', options, 'src', 'selector');
insertPreview.updatePreviews('src', 'selector');
});
it('generate preview ui', function() {
expect(insertPreview.generatePreview).toHaveBeenCalledWith('brightness', options, 'src', 'selector');
});
it('update preview ui', function() {
expect(insertPreview.updatePreviews).toHaveBeenCalledWith('src', 'selector');
});
});

View File

@@ -1,19 +0,0 @@
describe('Intermediate step HTML', function() {
var IntermediateHtmlStepUi = require('../examples/lib/intermediateHtmlStepUi');
var sequencer = require('../src/ImageSequencer')();
var intermediateHtmlStepUi;
beforeEach(()=>{
intermediateHtmlStepUi = new IntermediateHtmlStepUi(sequencer);
spyOn(intermediateHtmlStepUi, 'insertStep');
intermediateHtmlStepUi.insertStep();
});
it('insert step ui', function() {
expect(intermediateHtmlStepUi.insertStep).toHaveBeenCalled();
});
});

View File

@@ -1,11 +0,0 @@
{
"spec_dir": "spec",
"spec_files": [
"**/*[sS]pec.js"
],
"helpers": [
"helpers/**/*.js"
],
"stopSpecOnExpectationFailure": false,
"random": true
}

View File

@@ -1,40 +0,0 @@
describe('URL manipulation methods', function() {
var UrlHash = require('../examples/lib/urlHash');
var urlHash;
var params = {
module: 'brightness',
brightness: 50
};
beforeEach(()=>{
urlHash = UrlHash;
spyOn(urlHash, 'getUrlHashParameters');
spyOn(urlHash, 'getUrlHashParameter');
spyOn(urlHash, 'setUrlHashParameters');
spyOn(urlHash, 'setUrlHashParameter');
urlHash.getUrlHashParameters();
urlHash.getUrlHashParameter('module');
urlHash.setUrlHashParameters(params);
urlHash.setUrlHashParameter('module', 'brightness');
});
it('gets url hash params from window hash', function() {
expect(urlHash.getUrlHashParameters).toHaveBeenCalled();
});
it('gets url hash param from params object', function() {
expect(urlHash.getUrlHashParameter).toHaveBeenCalledWith('module');
});
it('accepts param object and sets url hash params', function() {
expect(urlHash.setUrlHashParameters).toHaveBeenCalledWith(params);
});
it('accepts param key-value pair and sets url hash params', function() {
expect(urlHash.setUrlHashParameter).toHaveBeenCalledWith('module', 'brightness');
});
});

View File

@@ -6,7 +6,7 @@ module.exports = function Noise(pixels, method) {
for(let y = 0; y < pixels.shape[1]; y++){ for(let y = 0; y < pixels.shape[1]; y++){
for(let x = 0; x < pixels.shape[0]; x++){ for(let x = 0; x < pixels.shape[0]; x++){
let i = 0, k = 0, windowr = [],windowg = [], windowb = []; let i = 0, k = 0, windowr = [], windowg = [], windowb = [];
while( k <= 8){ while( k <= 8){
let newX = x + neighbourX[k], newY = y + neighbourY[k]; let newX = x + neighbourX[k], newY = y + neighbourY[k];
@@ -14,9 +14,9 @@ module.exports = function Noise(pixels, method) {
if( newX >= 0 && newX < pixels.shape[0]) if( newX >= 0 && newX < pixels.shape[0])
{ {
if( newY >= 0 && newY < pixels.shape[1]){ if( newY >= 0 && newY < pixels.shape[1]){
windowr[i] = pixels.get((newX),(newY),0); windowr[i] = pixels.get((newX), (newY), 0);
windowg[i] = pixels.get((newX),(newY),1); windowg[i] = pixels.get((newX), (newY), 1);
windowb[i] = pixels.get((newX),(newY),2); windowb[i] = pixels.get((newX), (newY), 2);
i++; i++;
} }
} }
@@ -27,22 +27,22 @@ module.exports = function Noise(pixels, method) {
windowg.sort(); windowg.sort();
windowb.sort(); windowb.sort();
if(i%2 == 0) if(i % 2 == 0)
{ {
let value = windowr[i/2] + windowr[(i/2)-1]; let value = windowr[i / 2] + windowr[(i / 2) - 1];
pixels.set(x,y,0,value); pixels.set(x, y, 0, value);
value = windowg[i/2] + windowg[(i/2)-1]; value = windowg[i / 2] + windowg[(i / 2) - 1];
pixels.set(x,y,1,value); pixels.set(x, y, 1, value);
value = windowb[i/2] + windowb[(i/2)-1]; value = windowb[i / 2] + windowb[(i / 2) - 1];
pixels.set(x,y,2,value); pixels.set(x, y, 2, value);
} }
else { else {
pixels.set(x, y, 0, windowr[Math.floor(i/2)]); pixels.set(x, y, 0, windowr[Math.floor(i / 2)]);
pixels.set(x, y, 1, windowg[Math.floor(i/2)]); pixels.set(x, y, 1, windowg[Math.floor(i / 2)]);
pixels.set(x, y, 2, windowb[Math.floor(i/2)]); pixels.set(x, y, 2, windowb[Math.floor(i / 2)]);
} }
} }
@@ -52,7 +52,7 @@ module.exports = function Noise(pixels, method) {
for(let y = 0; y < pixels.shape[1]; y++){ for(let y = 0; y < pixels.shape[1]; y++){
for(let x = 0; x < pixels.shape[0]; x++){ for(let x = 0; x < pixels.shape[0]; x++){
let i = 0, k = 0, sumR=0, sumG = 0, sumB =0; let i = 0, k = 0, sumR = 0, sumG = 0, sumB = 0;
while( k <= 8){ while( k <= 8){
let newX = x + neighbourX[k], newY = y + neighbourY[k]; let newX = x + neighbourX[k], newY = y + neighbourY[k];
@@ -60,18 +60,18 @@ module.exports = function Noise(pixels, method) {
if( newX >= 0 && newX < pixels.shape[0]) if( newX >= 0 && newX < pixels.shape[0])
{ {
if( newY >= 0 && newY < pixels.shape[1]){ if( newY >= 0 && newY < pixels.shape[1]){
sumR += pixels.get(newX,newY,0); sumR += pixels.get(newX, newY, 0);
sumG += pixels.get(newX,newY,1); sumG += pixels.get(newX, newY, 1);
sumB += pixels.get(newX,newY,2); sumB += pixels.get(newX, newY, 2);
i++; i++;
} }
} }
k++; k++;
} }
pixels.set(x, y, 0, sumR/i); pixels.set(x, y, 0, sumR / i);
pixels.set(x, y, 1, sumG/i); pixels.set(x, y, 1, sumG / i);
pixels.set(x, y, 2, sumB/i); pixels.set(x, y, 2, sumB / i);
} }
} }

View File

@@ -1,42 +0,0 @@
describe('Default sequencer HTML', function() {
var DefaultHtmlSequencerUi = require('../../examples/lib/defaultHtmlSequencerUi');
var sequencer = require('../../src/ImageSequencer')();
var defaultHtmlSequencerUi;
beforeEach(()=>{
defaultHtmlSequencerUi = new DefaultHtmlSequencerUi(sequencer);
spyOn(defaultHtmlSequencerUi, 'onLoad');
spyOn(defaultHtmlSequencerUi, 'selectNewStepUi');
spyOn(defaultHtmlSequencerUi, 'removeStepUi');
spyOn(defaultHtmlSequencerUi, 'addStepUi');
spyOn(defaultHtmlSequencerUi, 'importStepsFromUrlHash');
defaultHtmlSequencerUi.onLoad();
defaultHtmlSequencerUi.selectNewStepUi();
defaultHtmlSequencerUi.addStepUi();
defaultHtmlSequencerUi.removeStepUi();
defaultHtmlSequencerUi.importStepsFromUrlHash();
});
it('load default ui', function() {
expect(defaultHtmlSequencerUi.onLoad).toHaveBeenCalled();
});
it('select step ui', function() {
expect(defaultHtmlSequencerUi.selectNewStepUi).toHaveBeenCalled();
});
it('add step ui', function() {
expect(defaultHtmlSequencerUi.addStepUi).toHaveBeenCalled();
});
it('remove step ui', function() {
expect(defaultHtmlSequencerUi.removeStepUi).toHaveBeenCalled();
});
it('import options from url', function() {
expect(defaultHtmlSequencerUi.importStepsFromUrlHash).toHaveBeenCalled();
});
});

View File

@@ -1,61 +0,0 @@
var { JSDOM } = require('jsdom');
var DOM = new JSDOM('<body></body>');
global.document = DOM.window.document;
describe('Sequencer step HTML', function() {
var DefaultHtmlStepUi = require('../../examples/lib/defaultHtmlStepUi');
var sequencer = require('../../src/ImageSequencer')();
var defaultHtmlStepUi;
var step = 'brightness';
var options = {
name: 'Brightness',
description: 'Change the brightness of the image by given percent value'
};
// options = JSON.parse(options)
beforeEach(()=>{
defaultHtmlStepUi = new DefaultHtmlStepUi(sequencer);
spyOn(defaultHtmlStepUi, 'getPreview');
spyOn(defaultHtmlStepUi, 'onSetup');
spyOn(defaultHtmlStepUi, 'onComplete');
spyOn(defaultHtmlStepUi, 'onDraw');
spyOn(defaultHtmlStepUi, 'onRemove');
spyOn(defaultHtmlStepUi, 'notify');
defaultHtmlStepUi.getPreview();
defaultHtmlStepUi.onSetup(step, options);
defaultHtmlStepUi.onComplete(step);
defaultHtmlStepUi.onDraw(step);
defaultHtmlStepUi.onRemove(step);
defaultHtmlStepUi.notify('Step removed', 'remove-notification');
});
it('result preview ui', function() {
expect(defaultHtmlStepUi.getPreview).toHaveBeenCalled();
});
it('load initial setup ui', function() {
expect(defaultHtmlStepUi.onSetup).toHaveBeenCalledWith(step, options);
});
it('load completion ui', function() {
expect(defaultHtmlStepUi.onComplete).toHaveBeenCalledWith(step);
});
it('draw step ui', function() {
expect(defaultHtmlStepUi.onDraw).toHaveBeenCalledWith(step);
});
it('remove step ui', function() {
expect(defaultHtmlStepUi.onRemove).toHaveBeenCalledWith(step);
});
it('notification ui', function() {
expect(defaultHtmlStepUi.notify).toHaveBeenCalledWith('Step removed', 'remove-notification');
});
});

View File

@@ -1,8 +0,0 @@
var SpecReporter = require('jasmine-spec-reporter').SpecReporter;
jasmine.getEnv().clearReporters(); // remove default reporter logs
jasmine.getEnv().addReporter(new SpecReporter({ // add jasmine-spec-reporter
spec: {
displayPending: true
}
}));

View File

@@ -1,7 +1,7 @@
describe('Default sequencer HTML', function() { describe('Default sequencer HTML', function() {
var DefaultHtmlSequencerUi = require('../examples/lib/defaultHtmlSequencerUi'); var DefaultHtmlSequencerUi = require('../../../examples/lib/defaultHtmlSequencerUi');
var sequencer = require('../src/ImageSequencer')(); var sequencer = require('../../../src/ImageSequencer')();
var defaultHtmlSequencerUi; var defaultHtmlSequencerUi;
beforeEach(()=>{ beforeEach(()=>{

View File

@@ -5,8 +5,8 @@ global.document = DOM.window.document;
describe('Sequencer step HTML', function() { describe('Sequencer step HTML', function() {
var DefaultHtmlStepUi = require('../examples/lib/defaultHtmlStepUi'); var DefaultHtmlStepUi = require('../../../examples/lib/defaultHtmlStepUi');
var sequencer = require('../src/ImageSequencer')(); var sequencer = require('../../../src/ImageSequencer')();
var defaultHtmlStepUi; var defaultHtmlStepUi;
var step = 'brightness'; var step = 'brightness';
var options = { var options = {
@@ -15,6 +15,16 @@ describe('Sequencer step HTML', function() {
}; };
// options = JSON.parse(options) // options = JSON.parse(options)
beforeAll(() => {
const { JSDOM } = require('jsdom');
var { window } = new JSDOM();
const { document } = window;
global.window = window;
global.document = document;
const $ = global.jQuery = global.$ = require('jquery');
});
beforeEach(()=>{ beforeEach(()=>{
defaultHtmlStepUi = new DefaultHtmlStepUi(sequencer); defaultHtmlStepUi = new DefaultHtmlStepUi(sequencer);

View File

@@ -1,7 +1,7 @@
describe('Preview UI HTML', function() { describe('Preview UI HTML', function() {
var InsertPreview = require('../../examples/lib/insertPreview'); var InsertPreview = require('../../../examples/lib/insertPreview');
var sequencer = require('../../src/ImageSequencer')(); var sequencer = require('../../../src/ImageSequencer')();
var insertPreview; var insertPreview;
var options = { brightness: 50 }; var options = { brightness: 50 };

View File

@@ -1,7 +1,7 @@
describe('Intermediate step HTML', function() { describe('Intermediate step HTML', function() {
var IntermediateHtmlStepUi = require('../../examples/lib/intermediateHtmlStepUi'); var IntermediateHtmlStepUi = require('../../../examples/lib/intermediateHtmlStepUi');
var sequencer = require('../../src/ImageSequencer')(); var sequencer = require('../../../src/ImageSequencer')();
var intermediateHtmlStepUi; var intermediateHtmlStepUi;
beforeEach(()=>{ beforeEach(()=>{

View File

@@ -0,0 +1,24 @@
describe('HTML Types Mapping Function', function() {
var mapHtmlTypes = require('../../../examples/lib/mapHtmltypes');
it('maps range and number types', function() {
expect(mapHtmlTypes({type: 'percentage'})).toEqual({type: 'number'});
expect(mapHtmlTypes({type: 'integer'})).toEqual({type: 'number'});
expect(mapHtmlTypes({type: 'integer', min: 20, max: 100})).toEqual({type: 'range', min: 20, max: 100});
expect(mapHtmlTypes({type: 'float'})).toEqual({type: 'text'});
expect(mapHtmlTypes({type: 'float', min: 20, max: 100})).toEqual({type: 'range', min: 20, max: 100});
});
it('maps text type', function() {
expect(mapHtmlTypes({type: 'string'})).toEqual({type: 'text'});
expect(mapHtmlTypes({type: 'anything'})).toEqual({type: 'text'});
});
it('maps select type', function() {
expect(mapHtmlTypes({type: 'select'})).toEqual({type: 'select'});
});
});

View File

@@ -0,0 +1,81 @@
const scopeQuery = require('../../../examples/lib/scopeQuery');
describe('scopeQuery Method', function() {
beforeAll(() => {
const { JSDOM } = require('jsdom');
var { window } = new JSDOM(`
<body>
<div id="scope1">
<div class="child" id="child1">Child1</div>
<div class="child" id="child2">Child2</div>
<div class="child" id="child3">Child3</div>
<div class="child" id="child4">Child4</div>
<div class="child" id="child5">Child5</div>
<div class="child" id="child6">Child6</div>
</div>
<div id="scope2">
<div class="child" id="child1">Child1Scope2</div>
<div class="child" id="child2">Child2Scope2</div>
<div class="child" id="child3">Child3Scope2</div>
<div class="child" id="child4">Child4Scope2</div>
<div class="child" id="child5">Child5Scope2</div>
</div>
</body>`);
const { document } = window;
global.window = window;
global.document = document;
const $ = global.jQuery = global.$ = require('jquery');
});
it('scope 1 querySelector', function() {
const $scope1 = scopeQuery.scopeSelector(document.querySelector('#scope1'));
const $scope1All = scopeQuery.scopeSelectorAll(document.querySelector('#scope1'));
expect($scope1('.child').length).toBe(1);
expect($scope1All('.child').length).toBe(6);
expect($scope1('#child1').text()).toBe('Child1');
expect($scope1('#child2').text()).toBe('Child2');
expect($scope1All('#child1').text()).toBe('Child1');
expect($scope1All('#child2').text()).toBe('Child2');
expect($scope1().elem('.child').length).toBe(1);
expect($scope1().elemAll('.child').length).toBe(6);
expect($scope1All().elem('.child').length).toBe(1);
expect($scope1All().elemAll('.child').length).toBe(6);
});
it('scope 2 querySelector', function() {
const $scope2 = scopeQuery.scopeSelector(document.querySelector('#scope2'));
const $scope2All = scopeQuery.scopeSelectorAll(document.querySelector('#scope2'));
expect($scope2('.child').length).toBe(1);
expect($scope2All('.child').length).toBe(5);
expect($scope2('#child1').text()).toBe('Child1Scope2');
expect($scope2('#child2').text()).toBe('Child2Scope2');
expect($scope2All('#child1').text()).toBe('Child1Scope2');
expect($scope2All('#child2').text()).toBe('Child2Scope2');
expect($scope2().elem('.child').length).toBe(1);
expect($scope2().elemAll('.child').length).toBe(5);
expect($scope2All().elem('.child').length).toBe(1);
expect($scope2All().elemAll('.child').length).toBe(5);
});
});
global.document = null;
global.$ = null;
DOM = null;

View File

@@ -1,6 +1,6 @@
describe('URL manipulation methods', function() { describe('URL manipulation methods', function() {
var UrlHash = require('../../examples/lib/urlHash'); var UrlHash = require('../../../examples/lib/urlHash');
var urlHash; var urlHash;
var params = { var params = {
module: 'brightness', module: 'brightness',