(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);
$('
').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);
$('
').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,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';
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 = $('
');
});
$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($('