var urlHash = require('./urlHash.js'), insertPreview = require('./insertPreview.js'); /** * @method IntermediateHtmlStepUi * @description Inserts a module selector in between the current sequence * @param {Object} _sequencer Sequencer instance * @param {Object} step Current step variable * @param {Object} options Optional options Object * @returns {Object} Object containing the insertStep function */ function IntermediateHtmlStepUi(_sequencer, step, options) { function stepUI() { // Basic markup for the selector return '
\
\ \
\
\

Select a new module to add to your sequence.

\
\
\
\ \
\

Resize

\
\
\
\ \
\

Brightness

\
\
\
\ \
\

Contrast

\
\
\
\ \
\

Saturation

\
\
\
\ \
\

Rotate

\
\
\
\ \
\

Crop

\
\
\
\
\ \
\
\ \
\
\
\
\
\
'; } /** * @method toggleDiv * @description Toggles the module selector dropdown. * @param {Object} $step $step util function * @param {Fucntion} callback Optional callback function * @returns {Null} */ var toggleDiv = function($step, callback = function(){}){ $step('.insertDiv').collapse('toggle'); if ($step('.insert-text').css('display') != 'none'){ $step('.insert-text').fadeToggle(200, function(){$step('.no-insert-text').fadeToggle(200, callback);}); } else { $step('.no-insert-text').fadeToggle(200, function(){$step('.insert-text').fadeToggle(200, callback);}); } }; /** * @method insertStep * @description Handler to insert selected module in the sequence * @returns {Null} */ insertStep = function (id) { const $step = step.$step, $stepAll = step.$stepAll; var modulesInfo = _sequencer.modulesInfo(); var parser = new DOMParser(); var addStepUI = stepUI(); addStepUI = parser.parseFromString(addStepUI, 'text/html').querySelector('div'); if ($step('.insertDiv').length > 0){ toggleDiv($step); } else { step.ui .querySelector('div.step') .insertAdjacentElement('afterend', addStepUI ); toggleDiv($step, function(){ if (step.name === 'load-image') insertPreview.updatePreviews(step.output.src, $step('.insertDiv').getDomElem()); else insertPreview.updatePreviews(step.output, $step('.insertDiv').getDomElem()); }); } $step('.insertDiv .close-insert-box').off('click').on('click', function(){ toggleDiv($step); $step('.insertDiv').removeClass('insertDiv'); }); var insertStepSelect = $step('.insert-step-select'); insertStepSelect.html(''); // Add modules to the insertStep dropdown for (var m in modulesInfo) { if (modulesInfo[m] && modulesInfo[m].name) insertStepSelect.append( '' ); } insertStepSelect.selectize({ sortField: 'text' }); $('.insertDiv .radio-group .radio').on('click', function () { var newStepName = $(this).attr('data-value'); // Get the name of the module to be inserted id = $($step('.insertDiv').parents()[3]).prevAll().length; insert(id, $step, newStepName); // Insert the selected module }); $step('.insertDiv .add-step-btn').on('click', function () { var newStepName = insertStepSelect.val(); id = $($step('.insertDiv').parents()[3]).prevAll().length; insert(id, $step, newStepName); }); }; /** * @method insert * @description Inserts the specified step at the specified index in the sequence * @param {Number} id Index of the step * @param {Function} $step $step util function * @param {String} newStepName Name of the new step */ function insert(id, $step, newStepName) { toggleDiv($step); $step('.insertDiv').removeClass('insertDiv'); _sequencer.insertSteps(id + 1, newStepName).run({ index: id }); urlHash.setUrlHashParameter('steps', _sequencer.toString()); } return { insertStep }; } module.exports = IntermediateHtmlStepUi;