onEnd: function(event) { var item = $(event.item), trash = $('#trash'), target = $(this.originalEvent.target), touchTrash = false; // workaround for touch devices if (this.originalEvent.type === 'touchend') { var trashSize = trash[0].getBoundingClientRect(), oE = this.originalEvent, position = (oE.pageY || oE.changedTouches[0].pageY) - window.scrollY; touchTrash = position <= trashSize.height; } if (target.matches('#trash') || target.parent('#trash') || touchTrash) { item.remove(); Atoms.eraser.hide(); this.options.onSort(); return; } item.removeClass('atom-dragging'); if ($(event.from).hasClass('atoms-list')) { Atoms.eraser.hide(); } },
body.delegate('click', '[data-collection-addnew]', function(event, element) { var param = element.parent('.settings-param'), list = param.find('ul'), editall = list.parent().find('[data-collection-editall]'), dataField = param.find('[data-collection-data]'), tmpl = param.find('[data-collection-template]'), items = list.search('> [data-collection-item]') || [], last = $(lastItem(items)); var clone = $(tmpl[0].cloneNode(true)), title, editable; if (last) { clone.after(last); } else { clone.top(list); } if (items.length && editall) { editall.style('display', 'inline-block'); } title = clone.find('a'); editable = title.find('[data-title-editable]'); var re = new RegExp('%id%', 'g'); title.href(title.href().replace(re, items.length)); clone.attribute('style', null).data('collection-item', clone.data('collection-template')); clone.attribute('data-collection-template', null); clone.attribute('data-collection-nosort', null); editable.CollectionNew = true; body.emit('click', { target: title.siblings('[data-title-edit]') }); editable.on('title-edit-exit', addNewByEnter); body.emit('change', { target: dataField }); });
insert: function(key, value, parent/*, object*/) { var root = $('[data-lm-root]'); if (!root) { return; } if (!Blocks[value.type]) { console[console.error ? 'error' : 'log'](value.type + ' does not exist'); } var Element = new (Blocks[value.type] || Blocks['section'])(deepFillIn({ id: key, attributes: {}, subtype: value.subtype || false, builder: this }, omit(value, 'children'))); if (!parent) { Element.block.insert(root); } else { Element.block.insert($('[data-lm-id="' + parent + '"]')); } if (Element.getType() === 'block') { Element.setSize(); } this.add(Element); Element.emit('rendered', Element, parent ? get(this.map, parent) : null); return Element; },
body.delegate('click', '.add-column', function(event, element) { if (event && event.preventDefault) { event.preventDefault(); } element = $(element); var container = element.parent('[data-g5-menu-columns]').find('.submenu-selector'), children = container.children(), last = container.find('> :last-child'), count = children ? children.length : 0, active = $('.menu-selector .active'), path = active ? active.data('mm-id') : null; // do not allow to create a new column if there's already one and it's empty if (count == 1 && !children.search('.submenu-items > [data-mm-id]')) { return false; } var block = $(last[0].cloneNode(true)); block.data('mm-id', 'list-' + count); block.find('.submenu-items').empty(); block.find('[data-mm-base-level]').data('mm-base-level', 1); block.find('.submenu-level').text('Level 1'); block.after(last); if (!menumanager.ordering[path]) { menumanager.ordering[path] = [[]]; } menumanager.ordering[path].push([]); menumanager.resizer.evenResize($('.submenu-selector > [data-mm-id]')); });
body.delegate(evt, '[data-g5-menu-columns] .submenu-items:empty', function(event, element) { var bounding = element[0].getBoundingClientRect(), x = event.pageX || event.changedTouches[0].pageX || 0, y = event.pageY || event.changedTouches[0].pageY || 0, siblings = $('.submenu-selector > [data-mm-id]'), deleter = { width: 36, height: 36 }; if (siblings.length <= 1) { return false; } if (x >= bounding.left + bounding.width - deleter.width && x <= bounding.left + bounding.width && Math.abs(window.scrollY - y) - bounding.top < deleter.height) { var parent = element.parent('[data-mm-id]'), container = parent.parent('.submenu-selector').children('[data-mm-id]'), index = indexOf(container, parent), active = $('.menu-selector .active'), path = active ? active.data('mm-id') : null; parent.remove(); siblings = $('.submenu-selector > [data-mm-id]'); menumanager.ordering[path].splice(index, 1); menumanager.resizer.evenResize(siblings); } });
constructor: function(slider, options){ this.slider = $(slider) this.doc = $(document) this.setOptions(options || {}) this.create() this.attach() this.position() },
onSort: function() { var serial = Atoms.serialize(), field = $(AtomsField); if (!field) { throw new Error('Field "' + AtomsField + '" not found in the DOM.'); } field.value(serial); $('body').emit('change', { target: field }); },
ready(function() { var atoms = $('#atoms'); $('body').delegate('mouseover', '#atoms', function(event, element) { AttachSortableAtoms(element); }); AttachSortableAtoms(atoms); AttachSettings(); });
onStart: function(event) { Atoms.attachEraser(); var item = $(event.item); item.addClass('atom-dragging'); if ($(event.from).hasClass('atoms-list')) { Atoms.eraser.show(); } },
onOver: function(evt) { if (!$(evt.from).matches('.atoms-list')) { return; } var over = $(evt.newIndex); if (over.matches('#trash') || over.parent('#trash')) { Atoms.eraser.over(); } else { Atoms.eraser.out(); } }
toggles = function(event, element) { if (event.type.match(/^touch/)) { event.preventDefault(); } element = $(element); hiddens = element.find('~~ [type=hidden]'); if (!hiddens) return true; hiddens.value(hiddens.value() == '0' ? '1' : '0'); hiddens.emit('change'); $('body').emit('change', { target: hiddens }); };
$('body').delegate(click, '.enabler .toggle', function(e, element){ console.log('a'); element = $(element); hiddens = element.find('~~ [type=hidden]'); if (!hiddens) return true; hiddens.value(hiddens.value() == '0' ? '1' : '0'); hiddens.emit('change'); $('body').emit('change', {target: hiddens}); });
request(fakeDOM.attribute('method'), parseAjaxURI(fakeDOM.attribute('action') + getAjaxSuffix()), dataString.join('&') || {}, function(error, response) { if (!response.body.success) { modal.open({ content: response.body.html || response.body, afterOpen: function(container) { if (!response.body.html) { container.style({ width: '90%' }); } } }); } else { // it's menu if (!picker) { var element = menumanager.element, path = element.data('mm-id') + '-', id = randomID(5), base = element.parent('[data-mm-base]').data('mm-base'), col = (element.parent('[data-mm-id]').data('mm-id').match(/\d+$/) || [0])[0], index = indexOf(element.parent().children('[data-mm-id]'), element[0]); while (menumanager.items[path + id]) { id = randomID(5); } menumanager.items[path + id] = response.body.item; if (!menumanager.ordering[base]) menumanager.ordering[base] = []; if (!menumanager.ordering[base][col]) menumanager.ordering[base][col] = []; menumanager.ordering[base][col].splice(index, 1, path + id); element.data('mm-id', path + id); if (response.body.html) { element.html(response.body.html); } menumanager.isNewParticle = false; menumanager.emit('dragEnd', menumanager.map); toastr.success('The Menu Item settings have been applied to the Main Menu. <br />Remember to click the Save button to store them.', 'Settings Applied'); } else { // it's field picker var field = $('[name="' + picker.field + '"]'), btnPicker = field.siblings('[data-g-instancepicker]'), label = field.siblings('.g-instancepicker-title'); if (field) { field.value(JSON.stringify(response.body.item)); $('body').emit('change', { target: field }); } if (label) { label.text(response.body.item.title); } if (item.type == 'particle') { btnPicker.text(btnPicker.data('g-instancepicker-alttext')); } } } modal.close(); submit.hideIndicator(); });
$(form[0].elements).forEach(function(input) { input = $(input); var name = input.attribute('name'), type = input.attribute('type'), value = input.value(), parent = input.parent('.settings-param, .card-overrideable'), override = parent ? parent.find('> input[type="checkbox"]') : null; override = override || $(input.data('override-target')); if (!name || input.disabled() || (override && !override.checked()) || (type == 'radio' && !input.checked())) { return; } if (!validateField(input)) { invalid.push(input); } data[name] = value; });
var resetSelectedActive = function() { var body = $('body'), mainNav = $('.g-main-nav'), selected, actives, levels; body.removeClass('g-nav-overlay-active'); selected = mainNav.search('.g-selected'); actives = mainNav.search('.g-active'); levels = mainNav.search('.g-toplevel, .g-sublevel'); if (selected) { selected.removeClass('g-selected'); } if (actives) { actives.removeClass('g-active').addClass('g-inactive'); } if (levels) { levels.removeClass('g-slide-out'); } };
toggles = function(event, element) { if (event.type.match(/^touch/) || event.type == 'click') { event.preventDefault(); } if (event.type == 'click') { return false; } element = $(element); hiddens = element.find('~~ [type=hidden]'); if (!hiddens) return true; hiddens.value(hiddens.value() == '0' ? '1' : '0'); element.parent('.enabler').attribute('aria-checked', hiddens.value() == '1' ? 'true' : 'false'); hiddens.emit('change'); $('body').emit('change', { target: hiddens }); return false; };
body.delegate('statechangeAfter', '#main-header [data-g5-ajaxify], select.menu-select-wrap', function(event, element) { menumanager.setRoot(); // refresh LM eraser menumanager.eraser.element = $('[data-mm-eraseparticle]'); menumanager.eraser.hide(); });
body.delegate(FOCUSOUT, '.percentage input', function(event, element) { element = $(element); var value = Number(element.value()); if (value < Number(element.attribute('min')) || value > Number(element.attribute('max'))) { element.value(element.currentSize); } }, true);
body.delegate('click', '[data-ajax-action]', function(event, element) { if (event && event.preventDefault) { event.preventDefault(); } var href = element.attribute('href') || element.data('ajax-action'), method = element.data('ajax-action-method') || 'post', indicator = $(element.data('ajax-action-indicator')) || element; if (!href) { return false; } indicator.showIndicator(); request(method, parseAjaxURI(href + getAjaxSuffix()), function(error, response) { if (!response.body.success) { modal.open({ content: response.body.html || response.body, afterOpen: function(container) { if (!response.body.html) { container.style({ width: '90%' }); } } }); indicator.hideIndicator(); return false; } else { toastr[response.body.warning ? 'warning' : 'success'](response.body.html || 'Action successfully completed.', response.body.title || ''); } indicator.hideIndicator(); }) });
cleanupLonely: function() { var ghosts = [], parent, children = $('[data-lm-root] > .g-section > .g-grid > .g-block .g-grid > .g-block, [data-lm-root] > .g-section > .g-grid > .g-block > .g-block'); if (!children) { return; } var isGrid; children.forEach(function(child) { child = $(child); parent = null; isGrid = child.parent().hasClass('g-grid'); if (isGrid && child.siblings()) { return false; } if (isGrid) { ghosts.push(child.data('lm-id')); parent = child.parent(); } ghosts.push(child.data('lm-id')); child.children().before(parent ? parent : child); (parent ? parent : child).remove(); }); return ghosts; },
forEach(blocks, function(element) { element = $(element); id = element.data('lm-id'); type = element.data('lm-blocktype'); subtype = element.data('lm-blocksubtype') || false; hasChildren = element.search('> [data-lm-id]'); if (flat) { children = hasChildren ? hasChildren.map(function(element){ return $(element).data('lm-id'); }) : false; } else { children = hasChildren ? this.serialize(element) : []; } serial = { id: id, type: type, subtype: subtype, title: get(this.map, id) ? get(this.map, id).getTitle() : 'Untitled', attributes: get(this.map, id) ? get(this.map, id).getAttributes() : {}, children: children }; if (flat) { var obj = {}; obj[id] = serial; serial = obj; } serieChildren.push(serial); }, this);
lists.forEach(function(list) { list = $(list); list.SimpleSort = simpleSort.create(list[0], { handle: '.fa-reorder', filter: '[data-collection-nosort]', scroll: false, animation: 150, onStart: function() { $(this.el).addClass('collection-sorting'); }, onEnd: function(evt) { var element = $(this.el); element.removeClass('collection-sorting'); if (evt.oldIndex === evt.newIndex) { return; } var dataField = element.parent('.settings-param').find('[data-collection-data]'), data = dataField.value(); data = JSON.parse(data); data.splice(evt.newIndex, 0, data.splice(evt.oldIndex, 1)[0]); dataField.value(JSON.stringify(data)); body.emit('change', { target: dataField }); } }); });
element.parent('.settings-param-field').search('ul > [data-collection-item]').forEach(function(item, index){ item = $(item); var label = item.find('[data-title-editable]'), text = dataValue[index][item.data('collection-item')]; label.data('title-editable', text).text(text); });
request(fakeDOM.attribute('method'), parseAjaxURI(fakeDOM.attribute('action') + getAjaxSuffix()), post.valid.join('&') || {}, function(error, response) { if (!response.body.success) { modal.open({ content: response.body.html || response.body, afterOpen: function(container) { if (!response.body.html) { container.style({ width: '90%' }); } } }); } else { var label = field.siblings('.g-instancepicker-title'); if (field) { field.value(JSON.stringify(response.body.item)); $('body').emit('change', { target: field }); } if (label) { label.text(response.body.item.title); } } modal.close(); submit.hideIndicator(); WordpressWidgetsCustomizer(field); });
body.delegate('blur', '[data-title-editable]', function(event, element) { element = $(element); element.attribute('contenteditable', null); element.data('title-editable', trim(element.text())); window.getSelection().removeAllRanges(); element.emit('title-edit-end', element.data('title-editable')); }, true);
body.delegate(FOCUSIN, '.percentage input', function(event, element) { element = $(element); element.currentSize = Number(element.value()); element[0].focus(); element[0].select(); }, true);
body.delegate('keyup', '.percentage input', function(event, element) { element = $(element); var value = Number(element.value()), min = Number(element.attribute('min')), max = Number(element.attribute('max')); var resizer = menumanager.resizer, parent = element.parent('[data-mm-id]'), sibling = parent.nextSibling('[data-mm-id]') || parent.previousSibling('[data-mm-id]'); if (!value || value < min || value > max) { return; } var sizes = { current: Number(element.currentSize), sibling: Number(resizer.getSize(sibling)) }; element.currentSize = value; sizes.total = sizes.current + sizes.sibling; sizes.diff = sizes.total - value; resizer.setSize(parent, value); resizer.setSize(sibling, sizes.diff); menumanager.resizer.updateItemSizes(parent.parent('.submenu-selector').search('> [data-mm-id]')); menumanager.emit('dragEnd', menumanager.map, 'inputChange'); });
$(fakeDOM[0].elements).forEach(function(input) { input = $(input); var name = input.attribute('name'); if (!name || input.disabled()) { return; } input = content.elements.content.find('[name="' + name + '"]'); var value = input.type() == 'checkbox' ? Number(input.checked()) : input.value(), parent = input.parent('.settings-param'), override = parent ? parent.find('> input[type="checkbox"]') : null; override = override || $(input.data('override-target')); if (override && !override.checked()) { return; } if (!validateField(input)) { invalid.push(input); } dataString.push(name + '=' + encodeURIComponent(value)); });
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);
request(fakeDOM.attribute('method'), parseAjaxURI(fakeDOM.attribute('action') + getAjaxSuffix()), dataString.join('&') || {}, function(error, response) { if (!response.body.success) { modal.open({ content: response.body.html || response.body, afterOpen: function(container) { if (!response.body.html) { container.style({ width: '90%' }); } } }); } else { var index = indexOf(items, item[0]); dataValue[index] = response.body.item; dataField.value(JSON.stringify(dataValue).replace(/\//g, '\\/')); item.find('.atom-title').text(dataValue[index].title); item.data('atom-picked', JSON.stringify(dataValue[index]).replace(/\//g, '\\/')); // toggle enabled/disabled status as needed var enabled = Number(dataValue[index].attributes.enabled); item[enabled ? 'removeClass' : 'addClass']('atom-disabled'); item.attribute('title', enabled ? null : 'This atom has been disabled and it won\'t be rendered on front-end. You can still configure, move and delete.'); body.emit('change', { target: dataField }); // if it's apply and save we also save the panel if (target.data('apply-and-save') !== null) { var save = $('body').find('.button-save'); if (save) { body.emit('click', { target: save }); } } modal.close(); toastr.success('Atom Item updated', 'Item Updated'); } target.hideIndicator(); });