- Introduced new templates for catalog, checkout, contact, and error pages. - Implemented caching headers and redirection in index.php files across various directories. - Enhanced product and layout templates for better integration with Creative Elements. - Added backoffice header styles and scripts for improved UI/UX in the admin panel.
579 lines
17 KiB
JavaScript
579 lines
17 KiB
JavaScript
/*!
|
|
* Creative Elements - live Theme & Page Builder
|
|
* Copyright 2019-2022 WebshopWorks.com & Elementor.com
|
|
*/
|
|
|
|
/******/ (function(modules) { // webpackBootstrap
|
|
/******/ // The module cache
|
|
/******/ var installedModules = {};
|
|
/******/
|
|
/******/ // The require function
|
|
/******/ function __webpack_require__(moduleId) {
|
|
/******/
|
|
/******/ // Check if module is in cache
|
|
/******/ if(installedModules[moduleId]) {
|
|
/******/ return installedModules[moduleId].exports;
|
|
/******/ }
|
|
/******/ // Create a new module (and put it into the cache)
|
|
/******/ var module = installedModules[moduleId] = {
|
|
/******/ i: moduleId,
|
|
/******/ l: false,
|
|
/******/ exports: {}
|
|
/******/ };
|
|
/******/
|
|
/******/ // Execute the module function
|
|
/******/ modules[moduleId].call(module.exports, module, module.exports, __webpack_require__);
|
|
/******/
|
|
/******/ // Flag the module as loaded
|
|
/******/ module.l = true;
|
|
/******/
|
|
/******/ // Return the exports of the module
|
|
/******/ return module.exports;
|
|
/******/ }
|
|
/******/
|
|
/******/
|
|
/******/ // expose the modules object (__webpack_modules__)
|
|
/******/ __webpack_require__.m = modules;
|
|
/******/
|
|
/******/ // expose the module cache
|
|
/******/ __webpack_require__.c = installedModules;
|
|
/******/
|
|
/******/ // define getter function for harmony exports
|
|
/******/ __webpack_require__.d = function(exports, name, getter) {
|
|
/******/ if(!__webpack_require__.o(exports, name)) {
|
|
/******/ Object.defineProperty(exports, name, { enumerable: true, get: getter });
|
|
/******/ }
|
|
/******/ };
|
|
/******/
|
|
/******/ // define __esModule on exports
|
|
/******/ __webpack_require__.r = function(exports) {
|
|
/******/ if(typeof Symbol !== 'undefined' && Symbol.toStringTag) {
|
|
/******/ Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
|
|
/******/ }
|
|
/******/ Object.defineProperty(exports, '__esModule', { value: true });
|
|
/******/ };
|
|
/******/
|
|
/******/ // create a fake namespace object
|
|
/******/ // mode & 1: value is a module id, require it
|
|
/******/ // mode & 2: merge all properties of value into the ns
|
|
/******/ // mode & 4: return value when already ns object
|
|
/******/ // mode & 8|1: behave like require
|
|
/******/ __webpack_require__.t = function(value, mode) {
|
|
/******/ if(mode & 1) value = __webpack_require__(value);
|
|
/******/ if(mode & 8) return value;
|
|
/******/ if((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;
|
|
/******/ var ns = Object.create(null);
|
|
/******/ __webpack_require__.r(ns);
|
|
/******/ Object.defineProperty(ns, 'default', { enumerable: true, value: value });
|
|
/******/ if(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));
|
|
/******/ return ns;
|
|
/******/ };
|
|
/******/
|
|
/******/ // getDefaultExport function for compatibility with non-harmony modules
|
|
/******/ __webpack_require__.n = function(module) {
|
|
/******/ var getter = module && module.__esModule ?
|
|
/******/ function getDefault() { return module['default']; } :
|
|
/******/ function getModuleExports() { return module; };
|
|
/******/ __webpack_require__.d(getter, 'a', getter);
|
|
/******/ return getter;
|
|
/******/ };
|
|
/******/
|
|
/******/ // Object.prototype.hasOwnProperty.call
|
|
/******/ __webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };
|
|
/******/
|
|
/******/ // __webpack_public_path__
|
|
/******/ __webpack_require__.p = "";
|
|
/******/
|
|
/******/
|
|
/******/ // Load entry module and return exports
|
|
/******/ return __webpack_require__(__webpack_require__.s = 56);
|
|
/******/ })
|
|
/************************************************************************/
|
|
/******/ ({
|
|
|
|
/***/ 56:
|
|
/***/ (function(module, exports, __webpack_require__) {
|
|
|
|
"use strict";
|
|
|
|
|
|
var modules = {
|
|
AssetsManager: __webpack_require__(61)
|
|
};
|
|
|
|
window.ceAdmin = {
|
|
assetsManager: new modules.AssetsManager()
|
|
};
|
|
|
|
jQuery(function () {
|
|
ceAdmin.assetsManager.fontManager.init();
|
|
});
|
|
|
|
/***/ }),
|
|
|
|
/***/ 61:
|
|
/***/ (function(module, exports, __webpack_require__) {
|
|
|
|
"use strict";
|
|
|
|
|
|
module.exports = function () {
|
|
var FontManager = __webpack_require__(62);
|
|
|
|
this.fontManager = new FontManager();
|
|
};
|
|
|
|
/***/ }),
|
|
|
|
/***/ 62:
|
|
/***/ (function(module, exports, __webpack_require__) {
|
|
|
|
"use strict";
|
|
|
|
|
|
module.exports = function () {
|
|
var self = this;
|
|
|
|
self.fields = {
|
|
upload: __webpack_require__(63),
|
|
repeater: __webpack_require__(64)
|
|
};
|
|
|
|
self.selectors = {
|
|
title: '#family',
|
|
repeaterBlock: '.repeater-block',
|
|
repeaterTitle: '.repeater-title',
|
|
removeRowBtn: '.remove-repeater-row',
|
|
editRowBtn: '.toggle-repeater-row',
|
|
closeRowBtn: '.close-repeater-row',
|
|
styleInput: '.font_style',
|
|
weightInput: '.font_weight',
|
|
customFontsMetaBox: '#elementor-font-custommetabox',
|
|
closeHandle: 'button.handlediv',
|
|
toolbar: '.elementor-field-toolbar',
|
|
inlinePreview: '.inline-preview',
|
|
fileUrlInput: '.elementor-field-file input[type="text"]'
|
|
};
|
|
|
|
self.fontLabelTemplate = '<ul class="row-font-label"><li class="row-font-weight">{{weight}}</li><li class="row-font-style">{{style}}</li><li class="row-font-preview">{{preview}}</li>{{toolbar}}</ul>';
|
|
|
|
self.renderTemplate = function (tpl, data) {
|
|
var re = /{{([^}}]+)?}}/g,
|
|
match;
|
|
while (match = re.exec(tpl)) {
|
|
// eslint-disable-line no-cond-assign
|
|
tpl = tpl.replace(match[0], data[match[1]]);
|
|
}
|
|
return tpl;
|
|
};
|
|
|
|
self.ucFirst = function (string) {
|
|
return string.charAt(0).toUpperCase() + string.slice(1);
|
|
};
|
|
|
|
self.getPreviewStyle = function ($table) {
|
|
var fontFamily = "'" + jQuery(self.selectors.title).val() + "'",
|
|
style = $table.find('select' + self.selectors.styleInput).first().val(),
|
|
weight = $table.find('select' + self.selectors.weightInput).first().val();
|
|
|
|
return {
|
|
style: self.ucFirst(style),
|
|
weight: self.ucFirst(weight),
|
|
styleAttribute: 'font-family: ' + fontFamily + '; font-style: ' + style + '; font-weight: ' + weight + ';'
|
|
};
|
|
};
|
|
|
|
self.updateRowLabel = function (event, $table) {
|
|
var $block = $table.closest(self.selectors.repeaterBlock),
|
|
$deleteBtn = $block.find(self.selectors.removeRowBtn).first(),
|
|
$editBtn = $block.find(self.selectors.editRowBtn).first(),
|
|
$closeBtn = $block.find(self.selectors.closeRowBtn).first(),
|
|
$toolbar = $table.find(self.selectors.toolbar).last().clone(),
|
|
previewStyle = self.getPreviewStyle($table),
|
|
toolbarHtml;
|
|
|
|
if ($editBtn.length > 0) {
|
|
$editBtn.not(self.selectors.toolbar + ' ' + self.selectors.editRowBtn).remove();
|
|
}
|
|
|
|
if ($closeBtn.length > 0) {
|
|
$closeBtn.not(self.selectors.toolbar + ' ' + self.selectors.closeRowBtn).remove();
|
|
}
|
|
|
|
if ($deleteBtn.length > 0) {
|
|
$deleteBtn.not(self.selectors.toolbar + ' ' + self.selectors.removeRowBtn).remove();
|
|
}
|
|
|
|
toolbarHtml = jQuery('<li class="row-font-actions">').append($toolbar)[0].outerHTML;
|
|
|
|
return self.renderTemplate(self.fontLabelTemplate, {
|
|
weight: '<span class="label">Weight:</span>' + previewStyle.weight,
|
|
style: '<span class="label">Style:</span>' + previewStyle.style,
|
|
preview: '<span style="' + previewStyle.styleAttribute + '">Creative Elements Module Is Making The Web Beautiful!</span>',
|
|
toolbar: toolbarHtml
|
|
});
|
|
};
|
|
|
|
self.onRepeaterToggleVisible = function (event, $btn, $table) {
|
|
var $previewElement = $table.find(self.selectors.inlinePreview),
|
|
previewStyle = self.getPreviewStyle($table);
|
|
|
|
$previewElement.attr('style', previewStyle.styleAttribute);
|
|
};
|
|
|
|
self.onRepeaterNewRow = function (event, $btn, $block) {
|
|
$block.find(self.selectors.removeRowBtn).first().remove();
|
|
$block.find(self.selectors.editRowBtn).first().remove();
|
|
$block.find(self.selectors.closeRowBtn).first().remove();
|
|
};
|
|
|
|
self.maybeToggle = function (event) {
|
|
event.preventDefault();
|
|
|
|
if (jQuery(this).is(':visible') && !jQuery(event.target).hasClass(self.selectors.editRowBtn)) {
|
|
jQuery(this).find(self.selectors.editRowBtn).click();
|
|
}
|
|
};
|
|
|
|
self.onInputChange = function (event) {
|
|
var $el = jQuery(event.target).next();
|
|
|
|
self.fields.upload.setFields($el);
|
|
self.fields.upload.setLabels($el);
|
|
self.fields.upload.replaceButtonClass($el);
|
|
};
|
|
|
|
self.bind = function () {
|
|
jQuery(document).on('repeaterComputedLabel', this.updateRowLabel).on('onRepeaterToggleVisible', this.onRepeaterToggleVisible).on('onRepeaterNewRow', this.onRepeaterNewRow).on('click', this.selectors.repeaterTitle, this.maybeToggle).on('input', this.selectors.fileUrlInput, this.onInputChange.bind(this));
|
|
};
|
|
|
|
self.removeCloseHandle = function () {
|
|
jQuery(this.selectors.closeHandle).remove();
|
|
jQuery(this.selectors.customFontsMetaBox).removeClass('closed').removeClass('postbox');
|
|
};
|
|
|
|
self.titleRequired = function () {
|
|
jQuery(self.selectors.title).prop('required', true);
|
|
};
|
|
|
|
self.init = function () {
|
|
if (!jQuery('#ce_font_form #files').length) {
|
|
return;
|
|
}
|
|
|
|
this.removeCloseHandle();
|
|
this.titleRequired();
|
|
this.bind();
|
|
this.fields.upload.init();
|
|
this.fields.repeater.init();
|
|
|
|
// Init font URLs
|
|
var fonts = JSON.parse($('#files').val() || '[]');
|
|
|
|
fonts.forEach(function(font, i) {
|
|
$('.add-repeater-row').click();
|
|
|
|
$('select[name="font_face['+ i +'][font_weight]"]').val(font.font_weight);
|
|
$('select[name="font_face['+ i +'][font_style]"]').val(font.font_style);
|
|
$('input[name="font_face['+ i +'][woff][url]"]').val(font.woff && font.woff.url || '').trigger('input');
|
|
$('input[name="font_face['+ i +'][woff2][url]"]').val(font.woff2 && font.woff2.url || '').trigger('input');
|
|
$('input[name="font_face['+ i +'][ttf][url]"]').val(font.ttf && font.ttf.url || '').trigger('input');
|
|
$('input[name="font_face['+ i +'][otf][url]"]').val(font.otf && font.otf.url || '').trigger('input');
|
|
|
|
$('.close-repeater-row:last').click();
|
|
});
|
|
|
|
// Cancel button fix
|
|
$('.btn[id$=_form_cancel_btn]')
|
|
.removeAttr('onclick')
|
|
.attr('href', location.href.replace(/&id\w*=\d+|&(add|update)\w+(=[^&]*)?/g, ''))
|
|
;
|
|
};
|
|
};
|
|
|
|
/***/ }),
|
|
|
|
/***/ 63:
|
|
/***/ (function(module, exports, __webpack_require__) {
|
|
|
|
"use strict";
|
|
|
|
|
|
module.exports = {
|
|
$btn: null,
|
|
fileFont: null,
|
|
fileUrl: null,
|
|
fileFrame: [],
|
|
|
|
selectors: {
|
|
uploadBtnClass: 'elementor-upload-btn',
|
|
clearBtnClass: 'elementor-upload-clear-btn',
|
|
uploadBtn: '.elementor-upload-btn',
|
|
clearBtn: '.elementor-upload-clear-btn'
|
|
},
|
|
|
|
hasValue: function hasValue() {
|
|
return '' !== jQuery(this.fileUrl).val();
|
|
},
|
|
|
|
setLabels: function setLabels($el) {
|
|
if (!this.hasValue()) {
|
|
$el.val($el.data('upload_text'));
|
|
} else {
|
|
$el.val($el.data('remove_text'));
|
|
}
|
|
},
|
|
|
|
setFields: function setFields(el) {
|
|
var self = this;
|
|
self.fileUrl = jQuery(el).prev();
|
|
self.fileFont = jQuery(self.fileUrl).prev();
|
|
},
|
|
|
|
replaceButtonClass: function replaceButtonClass(el) {
|
|
if (this.hasValue()) {
|
|
jQuery(el).removeClass(this.selectors.uploadBtnClass).addClass(this.selectors.clearBtnClass);
|
|
} else {
|
|
jQuery(el).removeClass(this.selectors.clearBtnClass).addClass(this.selectors.uploadBtnClass);
|
|
}
|
|
this.setLabels(el);
|
|
},
|
|
|
|
updatePreview: function updatePreview(el) {
|
|
var self = this,
|
|
$ul = jQuery(el).parent().find('ul'),
|
|
$li = jQuery('<li>'),
|
|
showUrlType = jQuery(el).data('preview_anchor') || 'full';
|
|
|
|
$ul.html('');
|
|
|
|
if (self.hasValue() && 'none' !== showUrlType) {
|
|
var anchor = jQuery(self.fileUrl).val();
|
|
if ('full' !== showUrlType) {
|
|
anchor = anchor.substring(anchor.lastIndexOf('/') + 1);
|
|
}
|
|
|
|
$li.html('<a href="' + jQuery(self.fileUrl).val() + '" download>' + anchor + '</a>');
|
|
$ul.append($li);
|
|
}
|
|
},
|
|
|
|
setup: function setup() {
|
|
var self = this;
|
|
jQuery(self.selectors.uploadBtn + ', ' + self.selectors.clearBtn).each(function () {
|
|
self.setFields(jQuery(this));
|
|
self.updatePreview(jQuery(this));
|
|
self.setLabels(jQuery(this));
|
|
self.replaceButtonClass(jQuery(this));
|
|
});
|
|
},
|
|
|
|
init: function init() {
|
|
var self = this;
|
|
|
|
jQuery(document).on('click', self.selectors.uploadBtn, function (event) {
|
|
event.preventDefault();
|
|
self.setFields(jQuery(this));
|
|
self.fileFont[0].click();
|
|
});
|
|
|
|
jQuery(document).on('click', self.selectors.clearBtn, function (event) {
|
|
event.preventDefault();
|
|
self.setFields(jQuery(this));
|
|
jQuery(self.fileUrl).val('')
|
|
.removeAttr('readonly');
|
|
jQuery(self.fileFont).val('');
|
|
|
|
self.updatePreview(jQuery(this));
|
|
self.replaceButtonClass(jQuery(this));
|
|
});
|
|
|
|
jQuery(document).on('change', '.font_face input[type=file]', function (event) {
|
|
var el = jQuery(this).next().next(),
|
|
ext = el.data('ext');
|
|
|
|
self.setFields(el);
|
|
|
|
if (this.files[0] && this.files[0].name && this.files[0].name.endsWith('.' + ext)) {
|
|
jQuery(self.fileUrl)
|
|
.val(this.files[0].name)
|
|
.attr('readonly', true)
|
|
;
|
|
self.replaceButtonClass(el);
|
|
self.updatePreview(el);
|
|
} else {
|
|
jQuery(self.fileFont).val('');
|
|
}
|
|
});
|
|
|
|
this.setup();
|
|
|
|
jQuery(document).on('onRepeaterNewRow', function () {
|
|
self.setup();
|
|
});
|
|
}
|
|
};
|
|
|
|
/***/ }),
|
|
|
|
/***/ 64:
|
|
/***/ (function(module, exports, __webpack_require__) {
|
|
|
|
"use strict";
|
|
|
|
|
|
var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; };
|
|
|
|
module.exports = {
|
|
selectors: {
|
|
add: '.add-repeater-row',
|
|
remove: '.remove-repeater-row',
|
|
toggle: '.toggle-repeater-row',
|
|
close: '.close-repeater-row',
|
|
sort: '.sort-repeater-row',
|
|
table: '.form-table',
|
|
block: '.repeater-block',
|
|
repeaterLabel: '.repeater-title',
|
|
repeaterField: '.elementor-field-repeater'
|
|
},
|
|
|
|
counters: [],
|
|
|
|
trigger: function trigger(eventName, params) {
|
|
jQuery(document).trigger(eventName, params);
|
|
},
|
|
|
|
triggerHandler: function triggerHandler(eventName, params) {
|
|
return jQuery(document).triggerHandler(eventName, params);
|
|
},
|
|
|
|
countBlocks: function countBlocks($btn) {
|
|
return $btn.closest(this.selectors.repeaterField).find(this.selectors.block).length || 0;
|
|
},
|
|
|
|
add: function add(btn) {
|
|
var self = this,
|
|
$btn = jQuery(btn),
|
|
id = $btn.data('template-id'),
|
|
repeaterBlock;
|
|
if (!self.counters.hasOwnProperty(id)) {
|
|
self.counters[id] = self.countBlocks($btn);
|
|
}
|
|
repeaterBlock = jQuery('#' + id).html();
|
|
repeaterBlock = self.replaceAll('__counter__', self.counters[id], repeaterBlock);
|
|
self.counters[id] += 1;
|
|
$btn.before(repeaterBlock);
|
|
self.trigger('onRepeaterNewRow', [$btn, $btn.prev()]);
|
|
},
|
|
|
|
remove: function remove(btn) {
|
|
var self = this;
|
|
jQuery(btn).closest(self.selectors.block).remove();
|
|
},
|
|
|
|
toggle: function toggle(btn) {
|
|
var self = this,
|
|
$btn = jQuery(btn),
|
|
$table = $btn.closest(self.selectors.block).find(self.selectors.table),
|
|
$toggleLabel = $btn.closest(self.selectors.block).find(self.selectors.repeaterLabel);
|
|
|
|
$table.toggle();
|
|
|
|
if ($table.is(':visible')) {
|
|
$table.closest(self.selectors.block).addClass('block-visible');
|
|
self.trigger('onRepeaterToggleVisible', [$btn, $table, $toggleLabel]);
|
|
} else {
|
|
$table.closest(self.selectors.block).removeClass('block-visible');
|
|
self.trigger('onRepeaterToggleHidden', [$btn, $table, $toggleLabel]);
|
|
}
|
|
|
|
$toggleLabel.toggle();
|
|
|
|
// Update row label
|
|
self.updateRowLabel(btn);
|
|
},
|
|
|
|
close: function close(btn) {
|
|
var self = this,
|
|
$btn = jQuery(btn),
|
|
$table = $btn.closest(self.selectors.block).find(self.selectors.table),
|
|
$toggleLabel = $btn.closest(self.selectors.block).find(self.selectors.repeaterLabel);
|
|
|
|
$table.closest(self.selectors.block).removeClass('block-visible');
|
|
$table.hide();
|
|
self.trigger('onRepeaterToggleHidden', [$btn, $table, $toggleLabel]);
|
|
$toggleLabel.show();
|
|
self.updateRowLabel(btn);
|
|
},
|
|
|
|
updateRowLabel: function updateRowLabel(btn) {
|
|
var self = this,
|
|
$btn = jQuery(btn),
|
|
$table = $btn.closest(self.selectors.block).find(self.selectors.table),
|
|
$toggleLabel = $btn.closest(self.selectors.block).find(self.selectors.repeaterLabel);
|
|
|
|
var selector = $toggleLabel.data('selector');
|
|
// For some browsers, `attr` is undefined; for others, `attr` is false. Check for both.
|
|
if ((typeof selector === 'undefined' ? 'undefined' : _typeof(selector)) !== ( true ? 'undefined' : undefined) && false !== selector) {
|
|
var value = false,
|
|
std = $toggleLabel.data('default');
|
|
|
|
if ($table.find(selector).length) {
|
|
value = $table.find(selector).val();
|
|
}
|
|
|
|
//filter hook
|
|
var computedLabel = self.triggerHandler('repeaterComputedLabel', [$table, $toggleLabel, value]);
|
|
|
|
// For some browsers, `attr` is undefined; for others, `attr` is false. Check for both.
|
|
if (undefined !== computedLabel && false !== computedLabel) {
|
|
value = computedLabel;
|
|
}
|
|
|
|
// Fallback to default row label
|
|
if (undefined === value || false === value) {
|
|
value = std;
|
|
}
|
|
|
|
$toggleLabel.html(value);
|
|
}
|
|
},
|
|
|
|
replaceAll: function replaceAll(search, replace, string) {
|
|
return string.replace(new RegExp(search, 'g'), replace);
|
|
},
|
|
|
|
init: function init() {
|
|
var self = this;
|
|
jQuery(document).on('click', this.selectors.add, function (event) {
|
|
event.preventDefault();
|
|
self.add(jQuery(this), event);
|
|
}).on('click', this.selectors.remove, function (event) {
|
|
event.preventDefault();
|
|
var result = confirm(jQuery(this).data('confirm').toString());
|
|
if (!result) {
|
|
return;
|
|
}
|
|
self.remove(jQuery(this), event);
|
|
}).on('click', this.selectors.toggle, function (event) {
|
|
event.preventDefault();
|
|
event.stopPropagation();
|
|
self.toggle(jQuery(this), event);
|
|
}).on('click', this.selectors.close, function (event) {
|
|
event.preventDefault();
|
|
event.stopPropagation();
|
|
self.close(jQuery(this), event);
|
|
});
|
|
|
|
jQuery(this.selectors.toggle).each(function () {
|
|
self.updateRowLabel(jQuery(this));
|
|
});
|
|
|
|
this.trigger('onRepeaterLoaded', [this]);
|
|
}
|
|
};
|
|
|
|
/***/ })
|
|
|
|
/******/ });
|