(function ($) { "use strict"; $(function () { var dateFormat = (function () { var token = /d{1,4}|m{1,4}|yy(?:yy)?|([HhMsTt])\1?|[LloSZWN]|"[^"]*"|'[^']*'/g; var timezone = /\b(?:[PMCEA][SDP]T|(?:Pacific|Mountain|Central|Eastern|Atlantic) (?:Standard|Daylight|Prevailing) Time|(?:GMT|UTC)(?:[-+]\d{4})?)\b/g; var timezoneClip = /[^-+\dA-Z]/g; // Regexes and supporting functions are cached through closure return function (date, mask, utc, gmt) { // You can't provide utc if you skip other args (use the 'UTC:' mask prefix) if (arguments.length === 1 && kindOf(date) === 'string' && !/\d/.test(date)) { mask = date; date = undefined; } date = date || new Date; if (!(date instanceof Date)) { date = new Date(date); } if (isNaN(date)) { throw TypeError('Invalid date'); } mask = String(dateFormat.masks[mask] || mask || dateFormat.masks['default']); // Allow setting the utc/gmt argument via the mask var maskSlice = mask.slice(0, 4); if (maskSlice === 'UTC:' || maskSlice === 'GMT:') { mask = mask.slice(4); utc = true; if (maskSlice === 'GMT:') { gmt = true; } } var _ = utc ? 'getUTC' : 'get'; var d = date[_ + 'Date'](); var D = date[_ + 'Day'](); var m = date[_ + 'Month'](); var y = date[_ + 'FullYear'](); var H = date[_ + 'Hours'](); var M = date[_ + 'Minutes'](); var s = date[_ + 'Seconds'](); var L = date[_ + 'Milliseconds'](); var o = utc ? 0 : date.getTimezoneOffset(); var W = getWeek(date); var N = getDayOfWeek(date); var flags = { d: d, dd: pad(d), ddd: dateFormat.i18n.dayNames[D], dddd: dateFormat.i18n.dayNames[D + 7], m: m + 1, mm: pad(m + 1), mmm: dateFormat.i18n.monthNames[m], mmmm: dateFormat.i18n.monthNames[m + 12], yy: String(y).slice(2), yyyy: y, h: H % 12 || 12, hh: pad(H % 12 || 12), H: H, HH: pad(H), M: M, MM: pad(M), s: s, ss: pad(s), l: pad(L, 3), L: pad(Math.round(L / 10)), t: H < 12 ? dateFormat.i18n.timeNames[0] : dateFormat.i18n.timeNames[1], tt: H < 12 ? dateFormat.i18n.timeNames[2] : dateFormat.i18n.timeNames[3], T: H < 12 ? dateFormat.i18n.timeNames[4] : dateFormat.i18n.timeNames[5], TT: H < 12 ? dateFormat.i18n.timeNames[6] : dateFormat.i18n.timeNames[7], Z: gmt ? 'GMT' : utc ? 'UTC' : (String(date).match(timezone) || ['']).pop().replace(timezoneClip, ''), o: (o > 0 ? '-' : '+') + pad(Math.floor(Math.abs(o) / 60) * 100 + Math.abs(o) % 60, 4), S: ['th', 'st', 'nd', 'rd'][d % 10 > 3 ? 0 : (d % 100 - d % 10 != 10) * d % 10], W: W, N: N }; return mask.replace(token, function (match) { if (match in flags) { return flags[match]; } return match.slice(1, match.length - 1); }); }; })(); dateFormat.masks = { 'default': 'ddd mmm dd yyyy HH:MM:ss', 'shortDate': 'm/d/yy', 'mediumDate': 'mmm d, yyyy', 'longDate': 'mmmm d, yyyy', 'fullDate': 'dddd, mmmm d, yyyy', 'shortTime': 'h:MM TT', 'mediumTime': 'h:MM:ss TT', 'longTime': 'h:MM:ss TT Z', 'isoDate': 'yyyy-mm-dd', 'isoTime': 'HH:MM:ss', 'isoDateTime': 'yyyy-mm-dd\'T\'HH:MM:sso', 'isoUtcDateTime': 'UTC:yyyy-mm-dd\'T\'HH:MM:ss\'Z\'', 'expiresHeaderFormat': 'ddd, dd mmm yyyy HH:MM:ss Z' }; dateFormat.i18n = { dayNames: [ 'Sun', 'Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat', 'Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday' ], monthNames: [ 'Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec', 'January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December' ], timeNames: [ 'a', 'p', 'am', 'pm', 'A', 'P', 'AM', 'PM' ] }; function pad(val, len) { val = String(val); len = len || 2; while (val.length < len) { val = '0' + val; } return val; } function getWeek(date) { // Remove time components of date var targetThursday = new Date(date.getFullYear(), date.getMonth(), date.getDate()); // Change date to Thursday same week targetThursday.setDate(targetThursday.getDate() - ((targetThursday.getDay() + 6) % 7) + 3); // Take January 4th as it is always in week 1 (see ISO 8601) var firstThursday = new Date(targetThursday.getFullYear(), 0, 4); // Change date to Thursday same week firstThursday.setDate(firstThursday.getDate() - ((firstThursday.getDay() + 6) % 7) + 3); // Check if daylight-saving-time-switch occurred and correct for it var ds = targetThursday.getTimezoneOffset() - firstThursday.getTimezoneOffset(); targetThursday.setHours(targetThursday.getHours() - ds); // Number of weeks between target Thursday and first Thursday var weekDiff = (targetThursday - firstThursday) / (86400000 * 7); return 1 + Math.floor(weekDiff); } function getDayOfWeek(date) { var dow = date.getDay(); if (dow === 0) { dow = 7; } return dow; } function kindOf(val) { if (val === null) { return 'null'; } if (val === undefined) { return 'undefined'; } if (typeof val !== 'object') { return typeof val; } if (Array.isArray(val)) { return 'array'; } return {}.toString.call(val) .slice(8, -1).toLowerCase(); } function makeid() { var text = "id"; var possible = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789"; for (var i = 0; i < 5; i++) text += possible.charAt(Math.floor(Math.random() * possible.length)); return text; } function toCsvValue(theValue, sDelimiter) { var t = typeof (theValue), output; if (typeof (sDelimiter) === "undefined" || sDelimiter === null) { sDelimiter = '"'; } if (t === "undefined" || t === null) { output = ""; } else if (t === "string") { output = sDelimiter + theValue + sDelimiter; } else { output = String(theValue); } return output; } function toCsv(objArray, sDelimiter, cDelimiter) { var i, l, names = [], name, value, obj, row, output = "", n, nl; // Initialize default parameters. if (typeof (sDelimiter) === "undefined" || sDelimiter === null) { sDelimiter = '"'; } if (typeof (cDelimiter) === "undefined" || cDelimiter === null) { cDelimiter = ","; } for (i = 0, l = objArray.length; i < l; i += 1) { // Get the names of the properties. obj = objArray[i]; row = ""; if (i === 0) { // Loop through the names for (name in obj) { if (obj.hasOwnProperty(name)) { names.push(name); row += [sDelimiter, name, sDelimiter, cDelimiter].join(""); } } row = row.substring(0, row.length - 1); output += row; } output += "\n"; row = ""; for (n = 0, nl = names.length; n < nl; n += 1) { name = names[n]; value = obj[name]; if (n > 0) { row += ","; } row += toCsvValue(value, '"'); } output += row; } return output; } function hexToRgbA(hex, alpha) { var c; if (/^#([A-Fa-f0-9]{3}){1,2}$/.test(hex)) { c = hex.substring(1).split(''); if (c.length === 3) { c = [c[0], c[0], c[1], c[1], c[2], c[2]]; } c = '0x' + c.join(''); return 'rgba(' + [(c >> 16) & 255, (c >> 8) & 255, c & 255].join(',') + ',' + alpha + ')'; } return hex; } function dateToStr(d) { var day = ("0" + d.getDate()).slice(-2); var month = ("0" + (d.getMonth() + 1)).slice(-2); var date = d.getFullYear() + "-" + (month) + "-" + (day); return date; } function open_alert(title, desc, callback, ok_callback) { var $modal = $('
'); if (title) { $('
' + title + '
').appendTo($modal); } if (desc) { $('
' + desc + '
').appendTo($modal); } var $actions = $('
').appendTo($modal); $('
' + azd.i18n.ok + '
').appendTo($actions).on('click', function () { $.simplemodal.close(); if (ok_callback) { ok_callback(); } return false; }); $modal.simplemodal({ autoResize: true, overlayClose: true, opacity: 0, overlayCss: { "background-color": "black" }, closeClass: "azd-close", onClose: function () { $.simplemodal.close(); if (callback) { callback(); } } }); } function open_simple_modal(options, value, callback) { var $modal = $('
'); $('
' + options['title'] + '
').appendTo($modal); if (options['desc']) { $('
' + options['desc'] + '
').appendTo($modal); } if (options['label']) { $('
' + options['label'] + '
').appendTo($modal); } if ('options' in options) { var $radio = $('
').appendTo($modal); var name = makeid(); for (var v in options['options']) { var id = makeid(); $('').appendTo($radio).on('change', function () { if ($(this).prop('checked')) { value = $(this).val(); } }).trigger('change'); if (options['options'][v].label && options['options'][v].details) { $('').appendTo($radio); $('
' + options['options'][v].details + '
').appendTo($radio); } else { $('').appendTo($radio); } } } else { $('').appendTo($modal).on('change', function () { value = $(this).val(); }); } var $actions = $('
').appendTo($modal); $('
' + azd.i18n.ok + '
').appendTo($actions).on('click', function () { $.simplemodal.close(); setTimeout(function () { callback(value); }, 0); return false; }); $('
' + azd.i18n.cancel + '
').appendTo($actions).on('click', function () { $.simplemodal.close(); return false; }); $modal.simplemodal({ autoResize: true, overlayClose: true, opacity: 0, overlayCss: { "background-color": "black" }, closeClass: "azd-close", onClose: function () { $.simplemodal.close(); } }); } function open_modal(options, values, callback) { var $modal = $('
'); $('
' + options['title'] + '
').appendTo($modal); $('
' + options['desc'] + '
').appendTo($modal); var $controls = $('
').appendTo($modal); $controls.css('column-count', '2'); if ('columns' in options) { $controls.css('column-count', options.columns); } if ('fields' in options) { for (var name in options['fields']) { (function (name) { var field = options['fields'][name]; var $control = $('
').appendTo($controls); $('
' + field['label'] + '
').appendTo($control); if ('options' in field) { var $select = $('').appendTo($control).on('change', function () { if (('multiple' in field && field['label'])) { values[name] = $(this).find('option:selected').map(function () { return $(this).attr('value'); }).toArray(); } else { values[name] = $(this).find('option:selected').attr('value'); } }); for (var value in field['options']) { if (value === values[name] || ('multiple' in field && values[name].indexOf(value) >= 0)) { $('').appendTo($select); } else { $('').appendTo($select); } } $select.trigger('change'); } else { $('').appendTo($control).on('change', function () { values[name] = $(this).val(); }); } })(name); } } var $actions = $('
').appendTo($modal); $('
' + azd.i18n.ok + '
').appendTo($actions).on('click', function () { $.simplemodal.close(); setTimeout(function () { callback(values); }, 0); return false; }); $('
' + azd.i18n.cancel + '
').appendTo($actions).on('click', function () { $.simplemodal.close(); return false; }); $modal.simplemodal({ autoResize: true, overlayClose: true, opacity: 0, overlayCss: { "background-color": "black" }, closeClass: "azd-close", onClose: function () { $.simplemodal.close(); } }); } function image_library(callback) { function add_image(file, url) { var $image = $('
').appendTo($images).on('click', function () { $image.toggleClass('azd-selected'); if ($image.is('.azd-selected')) { $images.children().not($image).removeClass('azd-selected'); image_url = url; } else { image_url = false; } }); $('').appendTo($image); $('
').appendTo($image).on('click', function () { $.get(azd.ajaxurl + '?action=files_library_delete&file=' + file, function () { $image.remove(); }); }); } var $modal = $('
'); $('
' + azd.i18n.select_upload_image + '
').appendTo($modal); var $images = $('
').appendTo($modal); var image_url = false; $.get(azd.ajaxurl + '?action=files_library', function (files) { for (var file in files) { add_image(file, files[file]); } }, 'json'); var $actions = $('
').appendTo($modal); $('
' + azd.i18n.ok + '
').appendTo($actions).on('click', function () { $.simplemodal.close(); setTimeout(function () { callback(image_url); }, 0); return false; }); $('
' + azd.i18n.upload + '
').appendTo($actions).on('click', function () { upload_file($images, function (url) { if (url) { var file = url.split('/'); file = file[file.length - 1]; add_image(file, url); } }); return false; }); $('
' + azd.i18n.cancel + '
').appendTo($actions).on('click', function () { $.simplemodal.close(); return false; }); $modal.simplemodal({ autoResize: true, overlayClose: true, opacity: 0, overlayCss: { "background-color": "black" }, closeClass: "azd-close", onClose: function () { $.simplemodal.close(); } }); } function reload_templates(callback) { $.get(azd.ajaxurl + '?action=get_templates', function (data) { azd.templates = JSON.parse(data); callback(); }); } function init_dialog($dialog) { $dialog.find('script[data-liquid]').each(function () { var $snippet = $(this); $snippet.parent().children().not($snippet).remove(); var liquid_doc = Liquid.parse($snippet.html()); var html = liquid_doc.render(azd); $snippet.after(html); $snippet.parent().find('.azd-rename').on('click', function () { var $row = $(this).closest('[data-name]'); var name = $row.data('name'); var type = $row.data('type'); open_simple_modal({ title: azd.i18n.rename, desc: '', label: azd.i18n.name }, name, function (new_name) { if (!$.trim(new_name)) { alert(azd.i18n.name_can_not_be_empty); return; } $('.azd-loader').fadeIn(); $.post(azd.ajaxurl + '?action=rename_template', { type: type, name: name, new_name: new_name }, function (data) { reload_templates(function () { init_dialog($dialog); $('.azd-loader').fadeOut(); }); }); }); return false; }); $snippet.parent().find('.azd-duplicate').on('click', function () { var $row = $(this).closest('[data-name]'); var name = $row.data('name'); var type = $row.data('type'); $('.azd-loader').fadeIn(); $.post(azd.ajaxurl + '?action=duplicate_template', { type: type, name: name, }, function (data) { reload_templates(function () { init_dialog($dialog); $('.azd-loader').fadeOut(); }); }); return false; }); $snippet.parent().find('.azd-delete').on('click', function () { var $row = $(this).closest('[data-name]'); var name = $row.data('name'); var type = $row.data('type'); $('.azd-loader').fadeIn(); $.post(azd.ajaxurl + '?action=delete_template', { type: type, name: name, }, function (data) { reload_templates(function () { init_dialog($dialog); $('.azd-loader').fadeOut(); }); }); return false; }); $snippet.parent().find('a.azd-make-default').on('click', function () { var $row = $(this).closest('[data-name]'); var name = $row.data('name'); var type = $row.data('type'); $('.azd-loader').fadeIn(); $.post(azd.ajaxurl + '?action=make_default', { type: type, name: name, }, function (data) { reload_templates(function () { init_dialog($dialog); $('.azd-loader').fadeOut(); }); }); return false; }); $snippet.parent().find('select.azd-make-default').on('change', function () { if ($(this).val()) { var $row = $(this).closest('[data-name]'); var name = $row.data('name'); var type = $(this).val(); $('.azd-loader').fadeIn(); $.post(azd.ajaxurl + '?action=make_default', { type: type, name: name, }, function (data) { reload_templates(function () { init_dialog($dialog); $('.azd-loader').fadeOut(); }); }); } return false; }); }); } function tabs_init($wrapper) { $wrapper.each(function () { var $tabs = $(this); $tabs.find('> div:first-child > span > a[href^="#"]').off('click').on('click', function (event) { var $this = $(this); event.preventDefault(); event.stopPropagation(); $this.parent().addClass("azd-active"); $this.parent().siblings().removeClass("azd-active"); var tab = $this.attr("href"); $tabs.find('> div:last-child > div').not(tab).css("display", "none"); $(tab).fadeIn(); }); $tabs.find('> div:first-child > span:first-child > a[href^="#"]').click(); }); } function accordion_init($wrapper) { $wrapper.each(function () { var $accordion = $(this); $accordion.find('> div > div:first-child').off('click').on('click', function (event) { var $this = $(this); if ($this.parent().is('.azd-active')) { $this.parent().removeClass("azd-active").find('> div:last-child').slideUp(); } else { $this.parent().addClass("azd-active").find('> div:last-child').slideDown(); $this.parent().siblings().removeClass("azd-active").find('> div:last-child').slideUp(); } }); setTimeout(function () { $accordion.children().find('> div:last-child').slideUp(0); }); $accordion.find('> div.azd-active').removeClass('azd-active'); }); } function open_dialog(dialog, event, data) { window.location.hash = dialog; var $dialog = $(dialog); if ($('.azd-dialogs > div').filter(dialog).length > 0) { $('.azd-dialogs > div').not(dialog).css("display", "none"); $dialog.fadeIn(); init_dialog($dialog); $dialog.triggerHandler('azd-show', {click: event, data: data}); } else { $('.azd-dialog-toggle').parent().removeClass("azd-active"); $dialog.parentsUntil('.azd-dialogs').last().siblings().css("display", "none"); $dialog.parentsUntil('.azd-dialogs').last().fadeIn(); $dialog.parentsUntil('.azd-dialogs').last().find('a[href="' + dialog + '"]').click(); init_dialog($dialog); $dialog.triggerHandler('azd-show', {click: event, data: data}); } } function dialog_toggle($button, event, data) { $('.azd-dialog-toggle').parent().removeClass("azd-active"); $button.parent().addClass("azd-active").closest('.azd-with-submenu').find('.azd-submenu-root').addClass("azd-active"); if (!$button.closest('.azd-sidebar-menu').length && $button.closest('.azd-dialog').length) { $('.azd-sidebar-menu [href="#' + $button.closest('.azd-dialog').attr('id') + '"]').parent().addClass("azd-active").closest('.azd-with-submenu').find('.azd-submenu-root').addClass("azd-active"); } var dialog = $button.attr("href"); open_dialog(dialog, event, data); } function init_toggle($button, callback) { $button.on('click', function (event, data) { if (callback) { callback(); } event.preventDefault(); setTimeout(function () { $(window).scrollTop(0); }, 0); dialog_toggle($(this), event, data); return false; }); } function init_toggles() { $('.azd-tabs').each(function () { var $tabs = $(this); if (!$tabs.data('azd-tabs')) { $tabs.find('> div:first-child > span > a[href^="#"]').on('click', function (event) { var $this = $(this); event.preventDefault(); $this.parent().addClass("azd-active"); $this.parent().siblings().removeClass("azd-active"); var tab = $this.attr("href"); $tabs.find('> div:last-child > div').not(tab).css("display", "none"); $(tab).fadeIn(); }); $tabs.find('> div:first-child > span:first-child > a[href^="#"]').click(); $tabs.data('azd-tabs', true); } }); init_toggle($('a.azd-dialog-toggle[href^="#"]')); $('.azd-dialogs > div').css("display", "none"); if (window.location.hash && $('a[href="' + window.location.hash + '"]').length) { $('a[href="' + window.location.hash + '"]').click(); } else { $('.azd-sidebar-menu > div:first-child > a[href^="#"]').click(); } } function init_datatable($pages_table, type, callback) { function convert_table_row(tr) { var item = {}; for (var name in columns_index) { item[name] = table.row(tr).data()[columns_index[name]]; } return item; } if (!$pages_table.length) { return; } var columns = [ {sName: "id", bVisible: false}, {sName: "handle", bVisible: false}, {sName: "blog_id", bVisible: false}, {sName: "template_suffix", bVisible: false}, {sName: "published_at", bVisible: false}, {sName: "title", sClass: 'azd-title', orderable: false}, {sName: "actions", sClass: 'azd-actions', orderable: false}, ]; var columns_index = {}; columns.map(function (column, i) { columns_index[column.sName] = i; }); var table = $pages_table.DataTable({ serverSide: true, ajax: { url: azd.ajaxurl + '?action=get_datatable&type=' + type, type: 'POST' }, aoColumns: columns, fnDrawCallback: function (oSettings) { function get_front_url(page) { var front_url = 'https://' + azd.shop_slug + '.myshopify.com/' + type + 's/' + page.handle + '?view=' + page.template_suffix; if (type === 'article') { front_url = 'https://' + azd.shop_slug + '.myshopify.com/blogs/' + azd.blogs[page.blog_id].handle + '/' + page.handle + '?view=' + page.template_suffix; } return front_url; } function get_edit_url(page) { var template_suffix = 'azexo-' + page.id; if (page.template_suffix.indexOf('azexo-') >= 0) { template_suffix = page.template_suffix; } var front_path = '/' + type + 's/' + page.handle + '?view=' + template_suffix; if (type === 'article') { front_path = '/blogs/' + azd.blogs[page.blog_id].handle + '/' + page.handle + '?view=' + template_suffix; } var url = azd.builder_url + '/builder.php?azh=customize&shop=' + azd.shop + '&template=' + type + '.' + template_suffix + '&front_path=' + encodeURI(front_path); if (page.template_suffix.indexOf('azexo-') < 0) { url += '&id=' + page.id; } return url; } $('.azd-loader').fadeOut(); $pages_table.find('tbody tr .azd-title').each(function () { var page = convert_table_row(this); var $title = $(this); if (page.template_suffix.indexOf('azexo-') >= 0) { $title.closest('tr').addClass('azd-azexo-tempalte'); } //$title.empty(); //$title.append('' + page.title + ''); }); $pages_table.find('tbody tr .azd-actions').each(function () { var page = convert_table_row(this); var $actions = $(this); if (page.published_at) { $('' + azd.i18n.view + '').appendTo($actions); if (page.template_suffix.indexOf('azexo-') >= 0) { $('' + azd.i18n.edit + '').appendTo($actions); $('' + azd.i18n.rename + '').appendTo($actions).on('click', function () { open_simple_modal({ title: azd.i18n.rename, desc: '', label: azd.i18n.name }, page.title, function (new_title) { if (!$.trim(new_title)) { alert(azd.i18n.name_can_not_be_empty); return; } $('.azd-loader').fadeIn(); $.post(azd.ajaxurl + '?action=rename_page', { id: page.id, type: type, title: new_title }, function (data) { table.ajax.reload(); }); }); return false; }); $('' + azd.i18n.duplicate + '').appendTo($actions).on('click', function () { $('.azd-loader').fadeIn(); $.post(azd.ajaxurl + '?action=duplicate_page', { id: page.id, type: type, }, function (data) { table.ajax.reload(); }); return false; }); $('' + azd.i18n.delete + '').appendTo($actions).on('click', function () { if (confirm(azd.i18n.page_delete_confirmation)) { $('.azd-loader').fadeIn(); $.post(azd.ajaxurl + '?action=delete_page', { id: page.id, type: type, }, function (data) { table.ajax.reload(); }); } return false; }); } else { $('' + azd.i18n.convert_edit + '').appendTo($actions); } } else { $('' + azd.i18n.unpublished + '').appendTo($actions); } }); if (callback) { callback(); } }, oLanguage: azd.i18n.dataTable }); return table; } function template_key_to_name(key) { var match = /templates\/(\w+)\.liquid/.exec(key); if (match) { return ''; } match = /templates\/(\w+)\.azexo-(.*?)\.liquid/.exec(key); if (match) { return match[2]; } return false; } function template_key_to_suffix(key) { var match = /templates\/(\w+)\.liquid/.exec(key); if (match) { return ''; } match = /templates\/(\w+)\.(azexo-.*?)\.liquid/.exec(key); if (match) { return match[2]; } return false; } function init_assignments_datatable($pages_table, type, callback) { function convert_table_row(tr) { var item = {}; for (var name in columns_index) { item[name] = table.row(tr).data()[columns_index[name]]; } return item; } if (!$pages_table.length) { return; } var columns = [ {sName: "id", bVisible: false}, {sName: "handle", bVisible: false}, {sName: "blog_id", bVisible: false}, {sName: "template_suffix", bVisible: false}, {sName: "title", sClass: 'azd-title', orderable: false}, {sName: "actions", sClass: 'azd-actions', orderable: false}, {sName: "template", sClass: 'azd-template', orderable: false}, ]; var columns_index = {}; columns.map(function (column, i) { columns_index[column.sName] = i; }); var table = $pages_table.DataTable({ serverSide: true, ajax: { url: azd.ajaxurl + '?action=get_datatable&type=' + type, type: 'POST' }, aoColumns: columns, fnDrawCallback: function (oSettings) { function get_front_url(page) { var front_url = 'https://' + azd.shop_slug + '.myshopify.com/' + type + 's/' + page.handle; if (type === 'custom_collection' || type === 'smart_collection') { front_url = 'https://' + azd.shop_slug + '.myshopify.com/collections/' + page.handle; } if (type === 'article') { front_url = 'https://' + azd.shop_slug + '.myshopify.com/blogs/' + azd.blogs[page.blog_id].handle + '/' + page.handle; } return front_url; } $('.azd-loader').fadeOut(); $pages_table.find('tbody tr .azd-template').each(function () { var page = convert_table_row(this); var $template = $(this); var $select = $('').appendTo($template).on('change', function () { $('.azd-loader').fadeIn(); $.post(azd.ajaxurl + '?action=set_template_suffix', { id: page.id, type: type, template_suffix: $(this).val() }, function (data) { table.ajax.reload(); }); }); var selected = false; var templates = azd.templates[type]; if (['smart_collection', 'custom_collection'].indexOf(type) >= 0) { templates = azd.templates['collection']; } $(templates).each(function () { var label = template_key_to_name(this.key); if (label === '' || label === 'default') { label = azd.i18n.default_template; } if (label === 'original') { label = azd.i18n.original_template; } if (page.template_suffix == template_key_to_suffix(this.key)) { selected = true; $('').appendTo($select); } else { $('').appendTo($select); } }); if (!selected) { $('').appendTo($select); } }); $pages_table.find('tbody tr .azd-actions').each(function () { var page = convert_table_row(this); var $actions = $(this); $('' + azd.i18n.view + '').appendTo($actions); }); if (callback) { callback(); } }, oLanguage: azd.i18n.dataTable }); return table; } function upload_file($target, callback) { $('.azd-file-input').remove(); $('.azd-progress').remove(); var $input = $('').insertBefore($target).css({ position: 'fixed', left: '-1000px', top: '-1000px' }).on('click', function (event) { event.stopPropagation(); }); var $progress = $(''); $progress.appendTo($target); $input.on('change', function () { var file = $input.get(0).files[0]; var xhr = new XMLHttpRequest(); if (xhr.upload) { xhr.upload.addEventListener("progress", function (e) { $progress.find('.azd-status').width((e.loaded / e.total * 100) + '%'); }, false); xhr.onreadystatechange = function (e) { if (xhr.readyState === 4) { if (xhr.status === 200) { $progress.remove(); $input.remove; if (xhr.response) { callback(xhr.response); } } } }; xhr.open("POST", azd.ajaxurl + '?action=files_library_upload', true); xhr.setRequestHeader("X-FILENAME", file.name); xhr.send(file); $progress.find('.azd-status').width('0%'); $progress.fadeIn("slow"); } }); $input.trigger('click'); } function rich_text_editor($textarea) { var id = makeid(); $textarea.attr('id', id); setTimeout(function () { tinymce.init({ selector: 'textarea#' + id, plugins: 'link', menubar: false, //icons: 'small', //skin: 'small', toolbar: 'bold italic link fontsizeselect alignleft aligncenter alignright forecolor backcolor removeformat', setup: function (ed) { ed.on('change', function (e) { $textarea.val(tinymce.get(id).getContent()).trigger('change'); }); } }); if (tinymce.get(id)) { tinymce.get(id).setContent($textarea.val()); } }); } function fill_hours($select) { var hours = ['00', '01', '02', '03', '04', '05', '06', '07', '08', '09', '10', '11', '12', '13', '14', '15', '16', '17', '18', '19', '20', '21', '22', '23']; hours.forEach(function (hour, i) { $('').appendTo($select); }); } function fill_minutes($select) { var minutes = ['00', '15', '30', '45']; minutes.forEach(function (minute, i) { $('').appendTo($select); }); } function fill_timezone($select) { $select.append( '' + '' + '' + '' + '' + '' + '' + '' + '' + '' + '' + '' + '' + '' + '' + '' + '' + '' + '' + '' + '' + '' + '' + '' + '' + '' + '' + '' + '' + '' + '' + '' + '' + '' + '' + '' + '' + '' + '' + '' + '' + '' + '' + '' + '' + '' + '' + '' + '' + '' + '' + '' + '' + '' + '' ); } function timezone_fill_timezone($select) { $select.append( '' + '' + '' + '' + '' + '' + '' + '' + '' + '' + '' + '' + '' + '' + '' + '' + '' + '' + '' + '' + '' + '' + '' + '' + '' + '' + '' + '' + '' + '' + '' + '' + '' + '' + '' + '' + '' + '' + '' + '' + '' + '' + '' + '' + '' + '' + '' + '' + '' + '' + '' + '' + '' + '' + '' ); } var no_image = 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAGQAAABkCAMAAABHPGVmAAAB8lBMVEUAAABcXFxmZmZnZ2eZmZmampqrq6uwsLC9vb2+vr7AwMDBwcHCwsLExMTFxcXGxsbJycnS0tLT09PZ2dna2trb29vd3d3f39/g4ODl5eXp6enq6urr6+vw8PDy8vLz8/P19fX4+Pj6+vr9/f3////V1dX////////S0tLT09PT09PU1NTAwMDCwsLCwsLOzs7h4eHi4uLk5OTl5eXm5ubPz8/a2trb29ve3t6+vr7R0dHQ0NDU1NTS0tLT09PU1NTDw8PAwMDBwcHR0dHR0dHU1NSoqKjS0tLR0dHS0tLT09POzs7Pz8/Q0NDOzs7Pz8/Ozs7Pz8/Q0NDOzs7Pz8+oqKioqKjPz8+mpqanp6fOzs7Pz8/Q0NDOzs7Pz8+jo6Ojo6OioqLR0dHS0tKjo6PNzc3Ozs6hoaHOzs7Ozs6ioqLNzc3Nzc3Nzc3Nzc3Nzc3Nzc3MzMzNzc2goKDNzc2goKDNzc3Ozs7Nzc3Nzc3Nzc2enp6fn5/Nzc3MzMzNzc3Nzc2enp6enp6enp7Nzc3Nzc3Nzc2dnZ2enp6cnJycnJzMzMzMzMzMzMzNzc3MzMzNzc3Nzc2dnZ2bm5ucnJzNzc3Nzc2bm5ucnJycnJzMzMzMzMzMzMzMzMzMzMzMzMyamprMzMyYmJiZmZmamprMzMyJ6HxFAAAAonRSTlMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgIDBgYLCwwMDQ4ODg4ODg8PDw8RFBUVFhYWGhsbGxwcJiYnJyc2NjY3Nzg4OTo6P0BAQkJGRkxOTlVWV1dXWFpaXmJjcHd4eXt9foODhYWGhoaeoKGoqKiqqquwsbKyubq7u8HCxs3Oz9DQ0dTh4u3v8PDy9Pb4+fr7/f5KuRpkAAAEXUlEQVR4Ae2Z6VcUVxDFr1kUYaKORjQuiQpxXDRmiUlQY3DBRaMCmowLjLssw4IiKigusqhxj9EkgCwN9X/mve4+3V1Mk65uOPOpf2c+zXnn3HNfvXqvqhp5JSYmJiYm5nMoKqprLl6sqa6w/5hZPgWOtPW/I4d3/W1H9N8zyZl75MO9M5ghvsDa1gGagoHWtWrBDHCTXN6+6uvt7Xv1llxuYrosxJVhsnjf3XAIDvvru9+TxfAVtWw6bHhKFl1VwGx4mA8c7SSLpxswDdJjpBlpKkUxcigGspbPsTQi8hmyZHID/8M1Msmq5RFYjFukebETqzAly7HjGWluYXEUH3dJ0xIU1YVoJs3dKF5MH0MnIKDK9hIaOx61kLB30IpLSNKkkaoUbDdV0ghDcuOY3ivSZEQqe8yTvDGJEJg5eLxW7gWVZlYiBJetc4WM3It1xi5DymroPH4JRRgvz/U9htUQcoMUvyShyIhVktvc20FAihTXYVEr37GrpEhBRqu+E7GGqdSi9O9xzm8fg2Pucitk6HewCTZu9FNvuMifvgk8AAmLTpMCGu5lsorx+0fggBSnF0HAff1GwUvGo2Lo31RW9Ct2HxJIUbkENhPjf6Wc6Kdun98FlJ99wCxNwGbpYVIgmJJj+j0HXJHxNyk3XwqLgWVzUfbYtmMYrohCv/vHShBIm1rXzUSUipv7J9s76rYggUZT48k33z7xinSrRW0Ipl+ta5jjFWFe1uvo92yehUYdne8SRV8brsiCBrWmH8HoWvQgc+J6cc7Y6L4P8EiJfF/4yU8eERzQFaww7mAizEvGVtlUVKa364cf//BuF2SRr9B1IhcxuQOeLz3Aw9zAQ9eWFQiiWq167SNyKQGe+1vnneNH2OS1WlCNIGrUqr5cEWP3ilPrmJe6leVGrkgfEdUgiAtqVa+PE6CdR78D8HHSS0QXpiHSwaPfLhcRb1f5yjqWL+tOrdgt3y5h4M/N28pzH4lLwsDLj/BDoIfnPu5wEX6Ewyejpqxo02hu7mvEycivlQM+Io/w4b7R3NznIgf1tSK8IOsX5IoYjZi12dyx9Z584SJz2AUZ7qq3aUQCW+o62k/y3A+46mWPloPxuAxzlwHFhWBeJj1av5YIr+HDS5mIw4Oz5cCu87dZ9B2RJZWkgLSQ6IS/iF1I8Oi7TrpYISEviSb8+ecrd8f+jVASYUDSNX3pU/M3mcWdvEwdhgBe86/BiKBMZQX3VQjgNf91ScHNW4dtSQTBav7kz7x1EDVBzxFyx17yJkjWzjVDgBv9Ft7OSRvTyjBejvPGVNxi054CuZch3mLLhwWD2wvEXjTpSGOPwb0IoZKNOMChKgg4MRR+gMNGUc3Bo6iWSKMoNlR7tgPLMSWrsPNF1KEaGw9eC7gdBONBwaBzOAv/QWdp04hg0Cke2XYeBebDw2ygqks8spUPn+v3w+FQAx8+52uMnv8PAvn/tJH/jzT5/9wkJyYmJiYm5j/qBxqDoN+AlgAAAABJRU5ErkJggg=='; if ('air_datepicker' in $.fn) { $.fn.air_datepicker.language['en'] = { days: ['Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday'], daysShort: ['Sun', 'Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat'], daysMin: ['Su', 'Mo', 'Tu', 'We', 'Th', 'Fr', 'Sa'], months: ['January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December'], monthsShort: ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'], today: 'Today', clear: 'Clear', dateFormat: 'yyyy-mm-dd', timeFormat: 'hh:ii', firstDay: 0 }; } azd.create_parameter = function (parameter, settings, obj) { var value = ''; if (parameter in obj) { value = obj[parameter]; if (value == 'true') { value = true; } if (value == 'false') { value = false; } } else { if (settings.default) { value = settings.default; obj[parameter] = settings.default; } } var $parameter = $('
'); if (settings.label) { $('
' + settings.label + '
').appendTo($parameter); } switch (settings.type) { case 'color': var $input = $('').appendTo($parameter).on('change', function () { var color = hexToRgbA($input.val(), 1); obj[parameter] = color; }); $input.val(value); if ($input.closest('.wp-picker-container').length) { $input.wpColorPicker('color', value); } else { $input.wpColorPicker({ change: function (event, ui) { var color = ui.color.toString(); if (hexToRgbA($input.val(), 1) !== hexToRgbA(color, 1)) { $input.val(color); $input.trigger('change'); } }, clear: function (event) { if (event.type === 'click') { $input.trigger('change'); } } }); } break; case 'integer': $('
').appendTo($parameter); var units = settings.units ? settings.units : ''; if (value.split(/[\-\.0-9]+/g).length === 2) { units = value.split(/[\-\.0-9]+/g).pop(); } var $input = $('').appendTo($parameter).on('change', function () { var v = $input.val() ? $input.val() + units : ''; obj[parameter] = v; }).on('mousewheel', function (e) { var step = settings.step ? settings.step : 1; if ($input.data('focus')) { var d = step * e.originalEvent.wheelDelta / 120; $input.val($input.val() + d); $input.trigger('change'); return false; } }); if ('min' in settings && 'max' in settings && 'step' in settings || settings.slider) { if ($parameter.find('.azd-slider.ui-slider').length) { var v = $parameter.find('.azd-slider.ui-slider').slider('value'); if (v !== parseFloat(value)) { $parameter.find('.azd-slider.ui-slider').slider('value', value); } } else { var min = 0; var max = 100; var step = 1; if (settings.min) { min = parseFloat(settings.min); } else if (units && settings.units && settings.units[units] && settings.units[units]['min']) { min = parseFloat(settings.units[units]['min']); } if (settings.max) { max = parseFloat(settings.max); } else if (units && settings.units && settings.units[units] && settings.units[units]['max']) { max = parseFloat(settings.units[units]['max']); } if (settings.step) { step = parseFloat(settings.step); } else if (units && settings.units && settings.units[units] && settings.units[units]['step']) { step = parseFloat(settings.units[units]['step']); } $parameter.find('.azd-slider').slider({ min: min, max: max, step: step, value: value ? parseFloat(value) : 0, slide: function (event, ui) { if (event.which) { $input.val(parseFloat(ui.value)).trigger('change'); } }, change: function (event, ui) { if (event.which) { $input.val(parseFloat(ui.value)).trigger('change'); } } }).find('.ui-slider-handle').on('contextmenu', function () { $parameter.closest('.azd-slider').slider("option", "value", 0); $input.val('').trigger('change'); return false; }); } } if (!settings.slider && settings.units) { $input.wrap('
').parent().append('
' + settings.units + '
'); } $input.val(parseFloat(value)).trigger('change'); break; case 'autocomplete': if (settings.options) { var $select = $('').appendTo($parameter).on('change', function () { obj[parameter] = $(this).val(); }); if (settings.options.length) { for (var v in settings.options) { $('').appendTo($select); } } $select.select2({ width: '100%', tags: 'true', placeholder: settings.placeholder ? settings.placeholder : '', allowClear: true, createTag: function (params) { var term = $.trim(params.term); if (term === '') { return null; } return { id: term, text: term, value: true }; } }); $select.val(value).trigger('change'); } else { if (settings.no_options) { $('
' + settings.no_options + '
').appendTo($parameter); } } break; case 'dropdown': if (settings.options && Object.keys(settings.options).length) { var $select = $('').appendTo($parameter).on('change', function () { obj[parameter] = $(this).val(); }); for (var v in settings.options) { $('').appendTo($select); } $select.select2({ width: '100%', placeholder: settings.placeholder ? settings.placeholder : '', }); $select.val(value).trigger('change'); } else { if (settings.no_options) { $('
' + settings.no_options + '
').appendTo($parameter); } } break; case 'multiselect': if (settings.options && Object.keys(settings.options).length) { var $select = $('').appendTo($parameter).on('change', function () { obj[parameter] = $(this).val(); }); for (var value in settings.options) { $('').appendTo($select); } $select.select2({ width: '100%', placeholder: settings.placeholder ? settings.placeholder : '', }); $select.val(value).trigger('change'); } else { if (settings.no_options) { $('
' + settings.no_options + '
').appendTo($parameter); } } break; case 'radio': var $radio = $('
').appendTo($parameter); for (var v in settings.options) { var id = makeid(); $('').appendTo($radio).on('change', function () { if ($(this).prop('checked')) { obj[parameter] = $(this).val(); } }).trigger('change'); if (settings.options[v].label && settings.options[v].details) { $('').appendTo($radio); $('
' + settings.options[v].details + '
').appendTo($radio); } else { $('').appendTo($radio); } } break; case 'checkbox': var id = makeid(); $('').appendTo($parameter).on('change', function () { obj[parameter] = $(this).prop('checked'); }).trigger('change'); $parameter.append('
'); var $label = $parameter.find('.azd-label'); $label.detach(); $parameter.children().wrapAll('
'); $parameter.find('.azd-checkbox-wrapper').append($label); break; case 'date': $('').appendTo($parameter).air_datepicker({ language: 'en', onSelect: function (fd, d, picker) { if (d) { obj[parameter] = fd; } } }); break; case 'datetime': function change_date() { obj[parameter] = $date.val() + 'T' + $hours.val() + ':' + $minutes.val(); $parameter.trigger('change'); } var $row = $('
').appendTo($parameter); var datetime = false; if (value) { datetime = value; } else { var now = new Date(); datetime = dateFormat(now, 'yyyy-mm-dd\'T\'HH:MM'); } datetime = datetime.split('T'); var $date = $('').appendTo($('
').appendTo($row)).on('change', change_date).air_datepicker({ language: 'en', onSelect: function (fd, d, picker) { change_date(); } }); var $hours = $('').appendTo($('
').appendTo($row)).on('change', change_date); fill_hours($hours); $hours.val(datetime[1].split(':')[0]); $('
:
').appendTo($row) var $minutes = $('').appendTo($('
').appendTo($row)).on('change', change_date); fill_minutes($minutes); $minutes.val(datetime[1].split(':')[1]); if (!$minutes.val()) { $minutes.val('00'); } change_date(); break; case 'timezone': var $select = $('').appendTo($parameter).on('change', function () { obj[parameter] = $(this).val(); }); timezone_fill_timezone($select); $select.val(value); break; case 'text': case 'number': case 'email': var $input = $('').appendTo($parameter).on('change', function () { obj[parameter] = $(this).val(); }); if (settings.units) { $input.wrap('
').parent().append('
' + settings.units + '
'); } $input.val(value).trigger('change'); break; case 'days_with_units': var $input = $('').appendTo($parameter).on('change', function () { switch ($select.val()) { case 'minutes': obj[parameter] = $(this).val() / 24 / 60; break; case 'hours': obj[parameter] = $(this).val() / 24; break; case 'days': obj[parameter] = $(this).val(); break; case 'weeks': obj[parameter] = $(this).val() * 7; break; } }); var $select = $('').appendTo($parameter).on('change', function () { $input.val('1').trigger('change'); }); $('').appendTo($select); $('').appendTo($select); $('').appendTo($select); $('').appendTo($select); $input.val(value).trigger('change'); break; case 'image': var $image_wrapper = $('
').appendTo($parameter); var $image = $('').appendTo($image_wrapper); var $actions = $('
').appendTo($image_wrapper); $('
' + azd.i18n.change + '
').appendTo($actions).on('click', function () { image_library(function (url) { if (url) { obj[parameter] = url; $image.attr('src', url); $image_wrapper.trigger('change'); } }); }); $('
' + azd.i18n.remove + '
').appendTo($actions).on('click', function () { obj[parameter] = ''; $image.attr('src', no_image); $image_wrapper.trigger('change'); }); break; case 'file': break; case 'ajax_dropdown': var $select = $('').appendTo($parameter).on('change', function () { obj[parameter] = $(this).val(); }); $select.select2({ placeholder: settings.placeholder ? settings.placeholder : '', allowClear: true, ajax: { url: settings.url, dataType: 'json', allowClear: true }, width: '100%' }); $.post(settings.url, { 'values': [value] }, function (data) { for (var v in data) { $('').appendTo($select); } $select.val(value).trigger('change'); }, 'json'); break; case 'ajax_multiselect': var $select = $('').appendTo($parameter).on('change', function () { obj[parameter] = $(this).val(); }); $select.select2({ placeholder: settings.placeholder ? settings.placeholder : '', ajax: { url: settings.url, dataType: 'json' }, width: '100%' }); if ($.isArray(value)) { $.post(settings.url, { 'values': value }, function (data) { for (var v in data) { $('').appendTo($select); } $select.val(value).trigger('change'); }, 'json'); } else if (settings.default) { $.post(settings.url, { 'values': settings.default }, function (data) { for (var v in data) { $('').appendTo($select); } $select.val(settings.default).trigger('change'); }, 'json'); } break; case 'richtext': case 'textarea': var $textarea = $('').appendTo($parameter).on('change', function () { obj[parameter] = $(this).val(); }); $textarea.val(value).trigger('change'); if (settings.type == 'richtext') { rich_text_editor($textarea); } break; case 'blocks': function add_item(row) { var $row = $('
').appendTo($blocks).data('row', row); var index = 0; for (var i = 0; i < obj[parameter].length; i++) { if (obj[parameter][i] == row) { index = i; } } var $title = $('
' + (settings.item_title ? settings.item_title : '') + '
').appendTo($row); var $content = $('
').appendTo($row); for (var name in settings.fields) { (function(name){ var $parameter = azd.create_parameter(name, settings.fields[name], row).appendTo($content); if (settings.fields[name].item_title && row[name]) { $parameter.on('change', function () { $title.find('.azd-text').text($row.data('row')[name]); }); $title.find('.azd-text').text($row.data('row')[name]); } })(name); } if (settings.add_remove_rows) { $('' + settings.remove_label + '').appendTo($content).on('click', function () { obj[parameter].splice(index, 1); $row.remove(); $blocks.trigger('change'); return false; }); } $blocks.sortable({ handle: '.azd-dragable', update: function (event, ui) { obj[parameter] = []; $blocks.children().each(function () { obj[parameter].push($(this).data('row')); }); $blocks.trigger('change'); }, }); accordion_init($blocks); } var $blocks = $('
').appendTo($parameter); if (settings.add_remove_rows) { $('' + settings.add_label + '').appendTo($parameter).on('click', function () { var new_row = {}; obj[parameter].push(new_row); add_item(new_row); $blocks.trigger('change'); return false; }); } if ($.isArray(value)) { $(value).each(function () { add_item(this); }); } else { obj[parameter] = []; } break; case 'group': function refresh_head() { $thead.empty(); var $tr = $('').appendTo($thead); $group_list.find('tr').last().find('td').each(function () { $tr.append('' + $(this).find('.azd-label').text() + ''); }); $group_list.find('.azd-label').remove(); } function add_row(row) { var $row = $('').appendTo($group_list).data('row', row); var index = 0; for (var i = 0; i < obj[parameter].length; i++) { if (obj[parameter][i] == row) { index = i; } } for (var name in settings.fields) { azd.create_parameter(name, settings.fields[name], row).appendTo($('').appendTo($row)); } if (settings.add_remove_rows) { $('' + settings.remove_label + '').appendTo($('').appendTo($row)).on('click', function () { obj[parameter].splice(index, 1); $row.remove(); $group_table.trigger('change'); return false; }); } $group_list.sortable({ update: function (event, ui) { obj[parameter] = []; $group_list.children().each(function () { obj[parameter].push($(this).data('row')); }); }, }); } var $group_table = $('
').appendTo($parameter); var $thead = $('').appendTo($group_table); var $group_list = $('').appendTo($group_table); if (settings.add_remove_rows) { $('' + settings.add_label + '').appendTo($parameter).on('click', function () { var new_row = {}; obj[parameter].push(new_row); add_row(new_row); refresh_head(); return false; }); } if ($.isArray(value)) { $(value).each(function () { add_row(this); }); refresh_head(); } else { obj[parameter] = []; } break; } if (settings.description) { $('
' + settings.description + '
').appendTo($parameter); } return $parameter; } azd.init_datatable = function ($table, columns, url, callback, simple) { var table = $table.DataTable({ serverSide: true, //pageLength: 25, paging: simple ? false : true, searching: simple ? false : true, ordering: simple ? false : true, ajax: { url: url, type: 'POST' }, aoColumns: columns, fnDrawCallback: function (oSettings) { $('.azd-loader').fadeOut(); if (callback) { callback($table, table); } }, oLanguage: azd.i18n.dataTable }); return table; }; azd.open_alert = open_alert; azd.open_simple_modal = open_simple_modal; azd.open_modal = open_modal; azd.open_dialog = open_dialog; azd.tabs_init = tabs_init; azd.accordion_init = accordion_init; $('.azd-loader').fadeOut("slow"); init_toggles(); var pages_datatable = init_datatable($('table.azd-pages'), 'page'); var articles_datatable = init_assignments_datatable($('table.azd-article-assignments'), 'article'); var products_datatable = init_assignments_datatable($('table.azd-product-assignments'), 'product'); var custom_collection_datatable = init_assignments_datatable($('table.azd-custom-collection-assignments'), 'custom_collection'); var smart_collection_datatable = init_assignments_datatable($('table.azd-smart-collection-assignments'), 'smart_collection'); $('#azd-pages .azd-create-blank').on('click', function () { open_simple_modal({ title: azd.i18n.create_subpage, desc: '', label: azd.i18n.name }, '', function (title) { if (!$.trim(title)) { alert(azd.i18n.name_can_not_be_empty); return; } $('.azd-loader').fadeIn(); $.post(azd.ajaxurl + '?action=create_page', { type: 'page', title: title }, function (data) { pages_datatable.ajax.reload(); }); }); }); $('#azd-article-pages .azd-create-blank').on('click', function () { open_simple_modal({ title: azd.i18n.create_article, desc: '', label: azd.i18n.name }, '', function (title) { if (!$.trim(title)) { alert(azd.i18n.name_can_not_be_empty); return; } $('.azd-loader').fadeIn(); $.post(azd.ajaxurl + '?action=create_template', { type: 'article', title: title }, function (data) { reload_templates(function () { init_dialog($('#azd-article-pages')); $('.azd-loader').fadeOut(); articles_datatable.ajax.reload(); }); }); }); }); $('#azd-product-pages .azd-create-blank').on('click', function () { open_simple_modal({ title: azd.i18n.create_product_page, desc: '', label: azd.i18n.name }, '', function (title) { if (!$.trim(title)) { alert(azd.i18n.name_can_not_be_empty); return; } $('.azd-loader').fadeIn(); $.post(azd.ajaxurl + '?action=create_template', { type: 'product', title: title }, function (data) { reload_templates(function () { init_dialog($('#azd-product-pages')); $('.azd-loader').fadeOut(); products_datatable.ajax.reload(); }); }); }); }); $('#azd-collection-pages .azd-create-blank').on('click', function () { open_simple_modal({ title: azd.i18n.create_collection_page, desc: '', label: azd.i18n.name }, '', function (title) { if (!$.trim(title)) { alert(azd.i18n.name_can_not_be_empty); return; } $('.azd-loader').fadeIn(); $.post(azd.ajaxurl + '?action=create_template', { type: 'collection', title: title }, function (data) { reload_templates(function () { init_dialog($('#azd-collection-pages')); $('.azd-loader').fadeOut(); custom_collection_datatable.ajax.reload(); smart_collection_datatable.ajax.reload(); }); }); }); }); $('#azd-index-pages .azd-create-blank').on('click', function () { open_simple_modal({ title: azd.i18n.create_home_page, desc: '', label: azd.i18n.name }, '', function (title) { if (!$.trim(title)) { alert(azd.i18n.name_can_not_be_empty); return; } $('.azd-loader').fadeIn(); $.post(azd.ajaxurl + '?action=create_template', { type: 'index', title: title }, function (data) { reload_templates(function () { init_dialog($('#azd-index-pages')); $('.azd-loader').fadeOut(); }); }); }); }); $('#azd-blog-pages .azd-create-blank').on('click', function () { open_simple_modal({ title: azd.i18n.create_blog_list_page, desc: '', label: azd.i18n.name }, '', function (title) { if (!$.trim(title)) { alert(azd.i18n.name_can_not_be_empty); return; } $('.azd-loader').fadeIn(); $.post(azd.ajaxurl + '?action=create_template', { type: 'blog', title: title }, function (data) { reload_templates(function () { init_dialog($('#azd-blog-pages')); $('.azd-loader').fadeOut(); }); }); }); }); $('#azd-misc-pages .azd-create-blank').on('click', function () { open_modal({ title: azd.i18n.create_template, desc: '', fields: { title: { label: azd.i18n.name }, type: { label: azd.i18n.type, options: { 'password': azd.i18n.password, 'cart': azd.i18n.cart, '404': azd.i18n['404'], 'list-collections': azd.i18n.collections_list, 'gift_card': azd.i18n.gift_card, 'search': azd.i18n.search } }, } }, {title: '', type: ''}, function (fields) { $('.azd-loader').fadeIn(); $.post(azd.ajaxurl + '?action=create_template', fields, function (data) { reload_templates(function () { init_dialog($('#azd-misc-pages')); $('.azd-loader').fadeOut(); }); }); }); }); $('#azd-templates').on('azd-show', function (e, data) { var $dialog = $(this); var $type_dialog = $(data.click.target).closest('.azd-dialog'); var type = $type_dialog.data('type'); $dialog.find('.azd-template').closest('.azd-col-sm-3').hide(); if (type === 'page' || type === 'index') { $dialog.find('.azd-template[data-type="page"]').closest('.azd-col-sm-3').show(); } else { $dialog.find('.azd-template[data-type="' + type + '"]').closest('.azd-col-sm-3').show(); } $dialog.find('.azd-template').off('click').on('click', function () { if (!azd.active_plan) { alert(azd.i18n.available_only_in_premium_plan); return false; } var $template = $(this); var modal_title = ''; switch (type) { case 'misc': modal_title = azd.i18n.create_template; break; case 'collection': modal_title = azd.i18n.create_collection_page; break; case 'product': modal_title = azd.i18n.create_product_page; break; case 'blog': modal_title = azd.i18n.create_blog_list_page; break; case 'index': modal_title = azd.i18n.create_home_page; break; case 'page': modal_title = azd.i18n.create_subpage; break; case 'article': modal_title = azd.i18n.create_article; break; } open_simple_modal({ title: modal_title, desc: '', label: azd.i18n.name }, '', function (title) { if (!$.trim(title)) { alert(azd.i18n.name_can_not_be_empty); return; } $('.azd-loader').fadeIn(); var action = ''; switch (type) { case 'misc': case 'collection': case 'article': case 'product': case 'blog': case 'index': action = 'create_template'; break; case 'page': action = 'create_page'; break; } $.post(azd.ajaxurl + '?action=' + action, { type: type, title: title, template_path: $template.data('template-path') }, function (data) { switch (type) { case 'misc': case 'collection': case 'article': case 'product': case 'blog': case 'index': reload_templates(function () { $('a.azd-dialog-toggle[href="#' + $type_dialog.attr('id') + '"]').trigger('click'); $('.azd-loader').fadeOut(); switch (type) { case 'collection': custom_collection_datatable.ajax.reload(); smart_collection_datatable.ajax.reload(); break; case 'article': articles_datatable.ajax.reload(); break; case 'product': products_datatable.ajax.reload(); break; } }); break; case 'page': $('a.azd-dialog-toggle[href="#' + $type_dialog.attr('id') + '"]').trigger('click'); pages_datatable.ajax.reload(); break; } }); }); }); }); $('.azd-customize').find('a').on('click', function () { var $this = $(this); var url = $this.attr('href'); $('.azd-loader').fadeIn(); $.post(azd.ajaxurl + '?action=prepre_sections_assets', { }, function (data) { $('.azd-loader').fadeOut(); window.open(url); }); return false; }); function make_field(field, $control, data) { var value = false; if (field.variable in data) { value = data[field.variable]; } if (typeof value === 'number') { value = value.toString(); } switch (field.type) { case 'color': var $input = $('').appendTo($control).on('change', function () { var color = hexToRgbA($input.val(), 1); data[field.variable] = color; }); $input.val(value); if ($input.closest('.wp-picker-container').length) { $input.wpColorPicker('color', value); } else { $input.wpColorPicker({ change: function (event, ui) { var color = ui.color.toString(); if (hexToRgbA($input.val(), 1) !== hexToRgbA(color, 1)) { $input.val(color); $input.trigger('change'); } }, clear: function (event) { if (event.type === 'click') { $input.trigger('change'); } } }); } break; case 'integer': $('
').appendTo($control); var units = field.units ? field.units : ''; if (value) { if (value.split(/[\-\.0-9]+/g).length === 2) { units = value.split(/[\-\.0-9]+/g).pop(); } } var $input = $('').appendTo($control).on('change', function () { var v = $input.val() ? $input.val() + units : ''; data[field.variable] = v; }).on('mousewheel', function (e) { var step = field.step ? field.step : 1; if ($input.data('focus')) { var d = step * e.originalEvent.wheelDelta / 120; $input.val($input.val() + d); $input.trigger('change'); return false; } }); if ('min' in field && 'max' in field && 'step' in field || field.slider) { if ($control.find('.azd-slider.ui-slider').length) { if (value) { var v = $control.find('.azd-slider.ui-slider').slider('value'); if (v !== parseFloat(value)) { $control.find('.azd-slider.ui-slider').slider('value', value); } } } else { var min = 0; var max = 100; var step = 1; if (field.min) { min = parseFloat(field.min); } else if (units && field.units && field.units[units] && field.units[units]['min']) { min = parseFloat(field.units[units]['min']); } if (field.max) { max = parseFloat(field.max); } else if (units && field.units && field.units[units] && field.units[units]['max']) { max = parseFloat(field.units[units]['max']); } if (field.step) { step = parseFloat(field.step); } else if (units && field.units && field.units[units] && field.units[units]['step']) { step = parseFloat(field.units[units]['step']); } $control.find('.azd-slider').slider({ min: min, max: max, step: step, value: value ? parseFloat(value) : 0, slide: function (event, ui) { if (event.which) { $input.val(parseFloat(ui.value)).trigger('change'); } }, change: function (event, ui) { if (event.which) { $input.val(parseFloat(ui.value)).trigger('change'); } } }).find('.ui-slider-handle').on('contextmenu', function () { $control.closest('.azd-slider').slider("option", "value", 0); $input.val('').trigger('change'); return false; }); } } $input.val(parseFloat(value)); break; case 'dropdown': case 'font-family': var $dropdown = $('').appendTo($control).on('change', function () { data[field.variable] = $dropdown.val(); }); if (field.type === 'font-family') { for (var v in azd.google_fonts) { $dropdown.append(''); } } else { for (var v in field.options) { $dropdown.append(''); } } $dropdown.val(value); if (field.select2) { $dropdown.select2({ width: '100%' }); } break; } } $('#azd-extensions .azd-extension .azd-options').on('click', function () { var $this = $(this); var $extension = $this.closest('.azd-extension'); var extension = $this.data('name'); var $wrapper = $extension.find('[data-settings-wrapper]'); if (!$wrapper.children().length) { $extension.find('.azd-preview').hide(); $extension.find('.azd-demo').hide(); if (!azd.less_variables || $.isArray(azd.less_variables)) { azd.less_variables = {}; } if (!(extension in azd.less_variables)) { azd.less_variables[extension] = {}; } for (var name in azd.extensions_settings) { var settings = azd.extensions_settings[name]; if (settings.category === extension) { if ('less-variables' in settings) { var $tabs = $('
').appendTo($wrapper); var $tabs_buttons = $('
').appendTo($tabs); var $tabs_content = $('
').appendTo($tabs); var tabs = {}; $(settings['less-variables']).each(function () { var field = this; if (!(field.group in tabs)) { var id = makeid(); $('' + field.group + '').appendTo($tabs_buttons); tabs[field.group] = $('
').appendTo($tabs_content); } var $control = $('
').appendTo(tabs[field.group]); $('').appendTo($control); if (!(extension in azd.less_variables)) { azd.less_variables[extension] = {}; } make_field(field, $control, azd.less_variables[extension]); }); tabs_init($tabs); $this.text(azd.i18n.apply_options); $this.off('click').on('click', function () { $('.azd-loader').fadeIn(); $.post(azd.ajaxurl + '?action=save_less_variables', { less_variables: JSON.stringify(azd.less_variables) }, function (data) { $('.azd-loader').fadeOut(); }); }); } } } } }); $('#azd-themes .azd-theme .azd-install').on('click', function () { var $this = $(this); $('.azd-loader').fadeIn(); $.post(azd.ajaxurl + '?action=install_theme', { name: $this.data('name') }, function (data) { $this.closest('.azd-theme').addClass('azd-installed'); $('.azd-loader').fadeOut(); }); }); $('#azd-themes .azd-theme .azd-publish').on('click', function () { var $this = $(this); $('.azd-loader').fadeIn(); $.post(azd.ajaxurl + '?action=publish_theme', { name: $this.data('name') }, function (data) { window.location.reload(); }); }); $('#azd-themes-library .azd-install, #dashboard .azd-dialog-header .azd-install').on('click', function () { var $this = $(this); $('.azd-loader').fadeIn(); $.post(azd.ajaxurl + '?action=install_theme', { name: $this.data('name') }, function (data) { window.location.reload(); }); }); $('#azd-themes-library .azd-update, #dashboard [data-theme-id] .azd-update').on('click', function () { var $this = $(this); $('.azd-loader').fadeIn(); $.post(azd.ajaxurl + '?action=update_theme', { id: $this.closest('data-theme-id').data('theme-id'), name: $this.data('name') }, function (data) { window.location.reload(); }); }); $('form.azd-update-shop, form.azd-update-partner').each(function () { function report_validity(form) { var valid = true; if ('reportValidity' in form) { valid = form.reportValidity(); } else { $(form).find('[name]').each(function () { var $this = $(this); $this.off('change.az-report-validity').on('change.az-report-validity', function () { $(this).removeClass('az-not-valid'); }); $this.removeClass('az-not-valid'); if (!this.checkValidity()) { valid = false; $this.addClass('az-not-valid'); } }); } return valid; } var $form = $(this); var action = false; if ($form.is('.azd-update-shop')) { action = 'update_shop'; } if ($form.is('.azd-update-partner')) { action = 'update_partner'; } if (action) { $form.find('button').on('click', function () { if (report_validity($form.get(0))) { $('.azd-loader').fadeIn(); var data = {}; $.map($form.serializeArray(), function (n, i) { if (n['name']) { if (data[n['name']]) { if (!$.isArray(data[n['name']])) { data[n['name']] = [data[n['name']]]; } data[n['name']].push(n['value']); } else { data[n['name']] = n['value']; } } }); $.post(azd.ajaxurl + '?action=' + action, data, function (data) { if (data) { alert(data); } $('.azd-loader').fadeOut(); }); } return false; }); } }); $('input.azd-file-upload').on('mousedown', function () { var $upload = $(this); upload_file($upload.parent().find('.azd-uploader'), function (url) { $upload.val(url); }); }); if ('isotope' in $.fn) { $('.azd-isotope-items').each(function () { function isotope_get_params($grid) { var options = { }; var data_attributes = { layoutMode: 'masonry', masonry: { gutter: 30 } }; for (var key in data_attributes) { if (typeof data_attributes[key] === 'object') { for (var k in data_attributes[key]) { var value = $grid.attr('data-' + key + '-' + k); if (typeof value !== typeof undefined) { if (!options[key]) { options[key] = {}; } $grid.removeData((key + '-' + k).toLocaleLowerCase()); options[key][k] = $grid.data((key + '-' + k).toLocaleLowerCase()); } } } else { var value = $grid.attr('data-' + key); if (typeof value !== typeof undefined) { $grid.removeData(key.toLocaleLowerCase()); options[key] = $grid.data(key.toLocaleLowerCase()); } } } return options; } var $grid = $(this); $grid.isotope(isotope_get_params($grid)); $grid.imagesLoaded().progress(function () { $grid.isotope('layout'); }); $grid.one('arrangeComplete', function () { }); var $filters = $grid.closest('.azd-isotope').find('.azd-isotope-filters').first(); if ($filters && $filters.length) { $filters.data('grid', $grid); $filters.find('[data-filter]').on('click', function () { var $this = $(this); var $filters = $this.closest('.azd-isotope-filters'); var $grid = $filters.data('grid'); $grid.isotope({filter: $this.attr('data-filter')}); $filters.find('[data-filter].azd-active').removeClass('azd-active'); $this.addClass('azd-active'); return false; }); $filters.find('[data-filter].azd-active').trigger('click'); } }); $('.azd-dialog').on('azd-show', function (e, data) { $(this).find('.azd-isotope-items').isotope('layout'); }); } $('.azd-section .azd-import').on('click', function () { var $this = $(this); $('.azd-loader').fadeIn(); $.post(azd.ajaxurl + '?action=import_section', { theme: $this.data('theme'), file: $this.data('file') }, function (data) { $('.azd-loader').fadeOut(); //open_alert(azd.i18n.how_to_use, '
'); }); return false; }); $('.azd-template .azd-import').on('click', function () { var $this = $(this); $('.azd-loader').fadeIn(); $.post(azd.ajaxurl + '?action=import_template', { theme: $this.data('theme'), file: $this.data('file'), type: $this.data('type') }, function (data) { $('.azd-loader').fadeOut(); //open_alert(azd.i18n.how_to_use, '
'); }); return false; }); $('.azd-restore-original-template').on('click', function () { var $this = $(this); $('.azd-loader').fadeIn(); $.post(azd.ajaxurl + '?action=restore_original_template', { type: $this.data('type') }, function (data) { $('.azd-loader').fadeOut(); }); return false; }); $('#azd-migrate-templates').on('azd-show', function (event, data) { var $dialog = $(this); var $select = $dialog.find('select'); var $button = $dialog.find('button'); $select.empty(); $select.append(''); $('.azd-loader').fadeIn(); $.post(azd.ajaxurl + '?action=themes_for_migration', { }, function (data) { $('.azd-loader').fadeOut(); var themes = JSON.parse(data); if (themes && themes.unpublished && themes.main) { for (var id in themes.unpublished) { $select.append(''); } $button.off('click').on('click', function () { if ($select.val()) { $('.azd-loader').fadeIn(); $.post(azd.ajaxurl + '?action=migrate_templates', { from: $select.val(), to: Object.keys(themes.main)[0] }, function (data) { $('.azd-loader').fadeOut(); }); } return false; }); } }); }); $('#azd-migrate-sections').on('azd-show', function (event, data) { var $dialog = $(this); var $select = $dialog.find('select'); var $button = $dialog.find('button'); $select.empty(); $select.append(''); $('.azd-loader').fadeIn(); $.post(azd.ajaxurl + '?action=themes_for_migration', { }, function (data) { $('.azd-loader').fadeOut(); var themes = JSON.parse(data); if (themes && themes.unpublished && themes.main) { for (var id in themes.unpublished) { $select.append(''); } $button.off('click').on('click', function () { if ($select.val()) { $('.azd-loader').fadeIn(); $.post(azd.ajaxurl + '?action=migrate_sections', { from: $select.val(), to: Object.keys(themes.main)[0] }, function (data) { $('.azd-loader').fadeOut(); }); } return false; }); } }); }); $('.azd-purchase-code-validate button').on('click', function () { var $this = $(this); $('.azd-loader').fadeIn(); $.post(azd.ajaxurl + '?action=purchase_code_validate', { code: $this.closest('form').find('[name="code"]').val() }, function (result) { result = JSON.parse(result); if (result && result.item && result.item.id) { $('.azd-purchase-code-validate').hide(); $('.azd-active-license').show(); } $('.azd-loader').fadeOut(); }); return false; }); var review_url = 'https://apps.shopify.com/azexo#modal-show=ReviewListingModal'; if (azd.app != 'azexo') { review_url = azd.review_url; } if (!azd.reviewed) { //$('.azd-dialog-header .azd-actions').prepend('Leave a review'); } if (azd.app == 'azexo' || azd.app == 'local') { window.azexo_tutorial_complete = function () { $.post(azd.ajaxurl + '?action=set_tutorial_status', { tutorial: window.azexo_tutorial, status: 1 }, function (data) { }); }; function how_to_start() { if ((!('how_to_start' in azd.tutorials) || !azd.tutorials['how_to_start'])) { window.azexo_tutorial = 'how_to_start'; window.azexo_tutorial_proceed(); } } if (azd.shop) { if (!('how_to_uninstall' in azd.tutorials)) { open_alert(azd.i18n.how_to_uninstall, azd.i18n.uninstall_instruction, function () { //how_to_start(); }, function () { $.post(azd.ajaxurl + '?action=set_tutorial_status', { tutorial: 'how_to_uninstall', status: 1 }, function (data) { }); }); init_toggle($('a.azd-how-to-uninstall[href^="#"]'), function () { $.post(azd.ajaxurl + '?action=set_tutorial_status', { tutorial: 'how_to_uninstall', status: 1 }, function (data) { }); $.simplemodal.close(); }); } else { //how_to_start(); } } } if (!['updater', 'staging', 'conversion', 'sectionhub', 'section-hub'].includes(azd.app)) { $.post(azd.ajaxurl + '?action=dashboard_loaded', { }, function (data) { }); } if (['updater', 'staging', 'conversion'].includes(azd.app)) { $.post(azd.ajaxurl + '?action=updater_loaded', { }, function (data) { }); } if (azd.app == 'sectionhub') { if (!azd.os2) { open_alert(azd.i18n.request_os2_activation, '
' + azd.i18n.os2_contact_us_via_chat + '
', function () { }); } else { if (azd.shop && !('sh_how_to_start' in azd.tutorials)) { open_alert(azd.i18n.how_to_use, '' + azd.i18n.click_here_for_start_building + '
', function () { }, function () { $.post(azd.ajaxurl + '?action=set_tutorial_status', { tutorial: 'sh_how_to_start', status: 1 }, function (data) { }); }); } } } }); })(jQuery);