const valid_modals = [ // supported sort-code keys
'product',
'store'
];
const symbol_escapes = [
{ esc: '>', chr: '>' },
{ esc: '<', chr: '<' },
{ esc: '&', chr: '&' },
{ esc: '"', chr: '\"' },
{ esc: ''', chr: '\'' },
{ esc: '€', chr: '€' },
{ esc: '©', chr: '©' },
{ esc: '®', chr: '®' }
];
/** inject_codeblocks
* --- -- -- - - -
*
* NOTE:
* a short-code is a mustache block of 3 parametres:
* {{ object = someID ; some label description }}
* ex. `{{product=1507175; Coca Cola Zero}}`
*
* The short-code is parsed to a code-block:
* an `a` modal-toggler link with certain data-attributes (+label), ex:
* `Coca Cola Zero`
*
* @param code (string): original content html with short-codes
* @returns (string): html content with code-blocks
*/
function inject_codeblocks(code) {
// isolate all mustache blocks
const regexp = /{{(.*?)}}/g; // regex makes multiple-matching easier
const matches = [...code.matchAll(regexp)];
// console.log(matches);
var output = code; // use a copy of (source) code
matches.forEach( match => {
// parse (every) match
// NOTE:
// match array has 3 items; example:
// match[0] : `{{store=247; Pasalimani Market}}`
// match[1] : `store=247; Pasalimani Market`
// match[3] : the (source) code string
let blockparts = unescaped_str( match[1] ).split(';');
let main_unit = blockparts[0].replaceAll(' ','').split('=');
let target = main_unit[0].toLowerCase();
let id = main_unit[1];
let label = escaped_str(blockparts[1]);
if (valid_modals.includes(target)) {
let codeblock = `${label}`;
output = output.replaceAll(match[0], codeblock);
}
});
return output;
}
// pair of function to escepe/unescape special html symbols
// --- -- -- - - -
function unescaped_str(txt) {
symbol_escapes.forEach( pair => { txt = txt.replaceAll(pair.esc, pair.chr); })
return txt;
}
function escaped_str(txt) {
symbol_escapes.forEach( pair => { txt = txt.replaceAll(pair.chr, pair.esc); })
return txt;
}
$(document).ready(function() {
/** translate short-codes to code-blocks
* -------------------------------------------------------------------------
*/
var content = $('.content .article-body').html(); // get code with shorts
$('.content .article-body').html( inject_codeblocks(content) ); // put code with blocks
/** modal listeners
* -------------------------------------------------------------------------
*/
// open store modal listener
// --- -- -- - - -
$(document).on('click', '.js-get_store', function (e) {
e.preventDefault();
var id = $(this).data('id'); // id for requesting content via ajax
$('#dynamic-content').html('');
$('#modal-loader').show();
$.ajax({
url: '/libs/modals/modalStore.php',
type: 'POST',
cache: false,
data: 'id=' + id,
dataType: 'html'
})
.done(function (data) {
$('#dynamic-content').html('');
$('#dynamic-content').html(data);
$('#modal-loader').hide();
})
.fail(function () {
$('#dynamic-content').html(' Υπήρξε κάποιο πρόβλημα, παρακαλώ προσπαθήστε ξανά.');
$('#modal-loader').hide();
});
});
// open product modal listener
// ---
$(document).on('click', '.js-get_product', function (e) {
e.preventDefault();
var id = $(this).data('id'); // id for requesting content via ajax
$('#dynamic-product').html('');
$('#modal-loader').show();
$.ajax({
url: '/products/ajax/get_product_full',
cache: false,
type: 'POST',
data: { id: id },
dataType: 'html'
})
.done(function (data) {
$('#dynamic-product').html('');
$('#dynamic-product').html(data);
$('#modal-loader').hide();
})
.fail(function () {
$('#dynamic-product').html(' Υπήρξε κάποιο πρόβλημα, παρακαλώ προσπαθήστε ξανά.');
$('#modal-loader').hide();
});
});
});