updatePendingChanges: function() { var saveData = this.savestate.getData(), serialData = this.builder.serialize(null, true), different = false, equals = deepEquals(saveData, serialData), save = $('[data-save="Layout"]'), icon = save.find('i'), indicator = save.find('.changes-indicator'); if (equals && indicator) { save.hideIndicator(); } if (!equals && !indicator) { save.showIndicator('changes-indicator fa fa-fw fa-circle-o') } flags.set('pending', !equals); // Emits the changed event for all particles // Used for UI to show particles where there have been differences applied // After a saved state var saved, current, id; serialData.forEach(function(block) { id = keys(block)[0]; saved = find(saveData, function(data) { return data[id]; }); current = find(serialData, function(data) { return data[id]; }); different = !deepEquals(saved, current); id = this.builder.get(id); if (id) { id.emit('changed', different); } }, this); },
compare.whole = function() { var equals = deepEquals(originals, collectFieldsValues()), save = $('[data-save]'); if (!save) { return; } save[equals ? 'hideIndicator' : 'showIndicator']('changes-indicator fa fa-circle-o fa-fw'); };
serialData.forEach(function(block) { id = keys(block)[0]; saved = find(saveData, function(data) { return data[id]; }); current = find(serialData, function(data) { return data[id]; }); different = !deepEquals(saved, current); id = this.builder.get(id); if (id) { id.emit('changed', different); } }, this);
presetsCache.forEach(function(data, element) { fields = collectFieldsValues(data.map.keys()); // Do not consider __js__overrides when comparing for equality fields.unset('__js__overrides'); equals = deepEquals(fields, data.map, function(a, b) { return a == b; }); $($('[data-g-styles]')[data.index]).parent()[equals ? 'addClass' : 'removeClass']('g-preset-match'); });
compare.whole = function(force) { if (!originals) { return; } var equals = deepEquals(originals, collectFieldsValues(force ? originals.keys() : null), function(a, b) { if (isString(a) && isString(b) && a.substr(0, 1) == '#' && b.substr(0, 1) == '#') { return a.toLowerCase() == b.toLowerCase(); } else { return is(a, b); } }), save = $('[data-save]'); if (!save) { return; } flags.set('pending', !equals); save[equals ? 'hideIndicator' : 'showIndicator']('changes-indicator fa fa-circle-o fa-fw'); };
var StepOne = function(map, mode) { // mode [reorder, resize, evenResize] if (this.isNewParticle && mode !== 'reorder') { return; } this.resizer.updateItemSizes(); menumanager = this; var save = $('[data-save]'), current = { settings: this.settings, ordering: this.ordering, items: this.items }; if (!this.isNewParticle) { if (!deepEquals(map, current)) { save.showIndicator('fa fa-fw changes-indicator fa-circle-o'); flags.set('pending', true); } else { save.hideIndicator(); flags.set('pending', false); } } if (this.isParticle && this.isNewParticle) { var blocktype = this.block.data('mm-blocktype'); this.block.attribute('data-mm-blocktype', null).addClass('g-menu-item-' + blocktype).data('mm-original-type', blocktype); zen('span.menu-item-type.badge').text(blocktype).after(this.block.find('.menu-item .title')); modal.open({ content: 'Loading', method: 'post', //data: data, remote: parseAjaxURI($(this.block).find('.config-cog').attribute('href') + getAjaxSuffix()), remoteLoaded: function(response, modal) { var search = modal.elements.content.find('.search input'), blocks = modal.elements.content.search('[data-mm-type]'), filters = modal.elements.content.search('[data-mm-filter]'); if (!search || !filters || !blocks) { return; } search.on('input', function() { if (!this.value()) { blocks.removeClass('hidden'); return; } blocks.addClass('hidden'); var found = [], value = this.value().toLowerCase(), text; filters.forEach(function(filter) { filter = $(filter); text = trim(filter.data('mm-filter')).toLowerCase(); if (text.match(new RegExp("^" + value + '|\\s' + value, 'gi'))) { found.push(filter.matches('[data-mm-type]') ? filter : filter.parent('[data-mm-type]')); } }, this); if (found.length) { $(found).removeClass('hidden'); } }); setTimeout(function(){ search[0].focus(); }, 5); } }); } this.type = undefined; };
equals: function(session, compare) { if (!compare) { compare = this.get().data; } return deepEquals(session, compare); },