*/
var
lineNo = 1,
buffer = [ "with (this.data) { \nwith (this.customData) { \nthis.buffer.push('" ],
matches = html.split(new RegExp(regExpEscape(options.open) + '((?:.|[\r\n])+?)(?:' + regExpEscape(options.close) + '|$)')),
length, i, text, prefix, postfix, line, tmp, jsFromPos, state;
for (i = 0, length = matches.length; i < length; i++) {
text = matches[i];
if (i % 2 === 1) {
line = "\nthis.line=" + lineNo;
jsFromPos = 1;
state = STATE_RAW;
switch (text.charAt(0)) {
case '@':
prefix = '\',(' + line + ', this.partial(';
postfix = ')),\'';
state = STATE_PARTIAL;
break;
case '!':
prefix = '\',(' + line + ', this.extend(';
postfix = ')),\'';
state = STATE_EXTEND;
break;
case '*':
prefix = '\',(' + line + ', this.child(\'';
postfix = '\')),\'';
break;
case '[':
prefix = '\');' + line + ';this.blockStart(\'';
postfix = '\');this.buffer.push(\'';
break;
case ']':
prefix = '\');' + line + ';this.blockEnd(\'';
postfix = '\');this.buffer.push(\'';
break;
case '=':
prefix = '\',(' + line + ', ';
postfix = '),\'';
state = STATE_HTML;
break;
case '-':
prefix = '\',(' + line + ', ';
postfix = '),\'';
state = STATE_TEXT;
break;
case '-':
prefix = '\',(' + line + ', ';
postfix = '),\'';
state = STATE_TEXT;
break;
case '?':
prefix = '\');' + line + ';';
postfix = 'this.buffer.push(\'';
state = STATE_CONDITION;
break;
case ':':
prefix = '\');' + line + ';}else';
postfix = 'this.buffer.push(\'';
state = STATE_ELSE;
break;
case '|':
prefix = '\');' + line + ';';
postfix = 'this.buffer.push(\'';
state = STATE_LOOP;
break;
case '~':
prefix = '\');' + line + ';';
postfix = 'this.buffer.push(\'';
state = STATE_SUBBLOK;
break;
default:
prefix = '\');' + line + ';';
postfix = ';this.buffer.push(\'';
jsFromPos = 0;
}
switch (state) {
case STATE_RAW:
buffer.push(prefix, text.substr(jsFromPos).replace(trimExp, ''), postfix);
break;
case STATE_HTML:
buffer.push(prefix, 'JustWaitResults('+text.substr(jsFromPos).replace(trimExp, '')+')', postfix);
break;
case STATE_TEXT:
buffer.push(prefix, 'JustEscapeHtml('+text.substr(jsFromPos).replace(trimExp, '')+')', postfix);
break;
case STATE_CONDITION:
tmp = text.substr(jsFromPos).replace(trimExp, '');
if (!tmp.length) {
buffer.push(prefix, '}', postfix);
} else {
buffer.push(prefix, 'if(', tmp, '){', postfix);
}
tmp = undefined;
break;
case STATE_ELSE:
tmp = text.substr(jsFromPos).replace(trimExp, '');
if (!tmp.length) {
buffer.push(prefix, '{', postfix);
} else {
buffer.push(prefix, ' if(', tmp, '){', postfix);
}
tmp = undefined;
break;
case STATE_PARTIAL:
case STATE_EXTEND:
tmp = text.substr(jsFromPos).replace(trimExp, '').split(/\s+/);
tmp = ['\'' + tmp[0] + '\'', tmp.splice(1).join(' ')];
if (!tmp[1].length) {
tmp = tmp[0];
} else {
tmp = tmp.join('');
}
buffer.push(prefix, tmp, postfix);
tmp = undefined;
break;
case STATE_LOOP:
tmp = text.substr(jsFromPos).replace(trimExp, '').split(/\s+/);
if (!tmp[0].length) {
buffer.push('\');' + line + ';}, this);this.buffer.push(\'');
} else {
buffer.push(prefix, tmp[0], '.forEach(function(', tmp[1], '){this.buffer.push(\'');
}
tmp = undefined;
break;
case STATE_SUBBLOK:
buffer.push(prefix, text.substr(jsFromPos).replace(trimExp, ''), postfix);
break;
}
} else {
buffer.push(text.replace(/[\\']/g, '\\$&').replace(/\r/g, ' ').replace(/\n/g, '\\n'));
}
lineNo += text.split(/\n/).length - 1;
}
buffer.push("'); \n} \n} return this.buffer;");
return buffer = buffer.join('');
},
parse = function (html) {
return new Function(parseToCode(html));
},
readSync = function (file) {
var data = eval('(options.root[\'' + file + '\'])');
if (Object.prototype.toString.call(data) === '[object String]') {
return data;
} else {
console.error('Failed to load template', file)
throw 'Failed to load template ' + file
}
},
loadSync = function (file) {
var data = readSync(file)
var blank = parse(data);
return blank;
},
Template = function (file, data, customData) {
this.file = file;
if (Object.prototype.toString.call(options.root) === '[object String]') {
this.file = path.normalize((options.root.length ? (options.root + '/') : '') + file + options.ext);
}
this.data = data;
this.customData = customData || {};
this.buffer = [];
this.tmpBuffer = {};
this.tmpBufferNames = [];
this.watcher = undefined;
this.line = 1;
this.partials = [];
this.childData = [];
this.childError = undefined;
this.childCallback = undefined;
this.callback = undefined;
this.blocks = {};
};
Template.prototype.blockStart = function (name) {
this.tmpBufferNames.push(name)
this.tmpBuffer[name] = this.buffer;
if (!this.blocks[name])
{
this.blocks[name] = [];
}
if (!this.blocks[name].length)
{
this.buffer = this.blocks[name];
}
else
{
this.buffer = [];
}
};
Template.prototype.blockEnd = function () {
var name = this.tmpBufferNames.pop(name)
this.buffer = this.tmpBuffer[name];
delete (this.tmpBuffer[name]);
};
// Включить результат рендера шаблона template с данными customData
Template.prototype.partial = function (template, customData) {
var page = new Template(template, this.data, customData);
return page.renderSync();
};
Template.prototype.partialWatch = function (v, data) {
var template = data[0]
var customData = data[1]
var page = new Template(template, customData, undefined);
return page.renderSync();
};
Template.prototype.extend = function (template, customData)
{
var page = new Template(template, this.data, customData)
var callback = this.callback;
page.blocks = this.blocks;
this.callback = function (error, data) {
if (error) {
page.childError = error;
if (page.childCallback) { page.childCallback(error); }
} else {
page.childData.push(data);
if (page.childCallback) { page.childCallback(); }
}
};
page.partials.push(function (callback) {
if (page.childError) {
callback(page.childError);
} else if (page.childData.length) {
callback();
} else {
page.childCallback = callback;
}
});
//callback(undefined, page.renderSync());
return page.renderSync();
};
Template.prototype.child = function (block) {
if (block && block.length) {
if (!this.blocks[block]) { this.blocks[block] = []; }
return this.blocks[block];
}
return this.childData;
};
function arrayRender(arr){
let html = ''
for(let i in arr)
{
html += (Array.isArray(arr[i])) ? arrayRender(arr[i]) : arr[i];
}
return html
}
Template.prototype.renderSync = function () {
var that = this;
var blank = loadSync(this.file)
// try {
var buffer = blank.call(that);
for(var i = 0; i < that.partials.length; i++)
{
that.partials[i].call();
}
var html = '', length, i;
for (i = 0, length = buffer.length; i < length; i++)
{
html += (Array.isArray(buffer[i])) ? arrayRender(buffer[i]) : buffer[i];
}
return html;
// } catch (e) {
// console.error(e.message + ' in ' + that.file + ' on line ' + that.line);
// throw e.message + ' in ' + that.file + ' on line ' + that.line
// return;
// }
};
this.configure = function (newOptions) {
var option;
newOptions = newOptions || {};
for (option in options) {
options[option] = newOptions[option] || options[option];
}
};
this.renderSync = function (template, data, onInsertFunc)
{
if(data === undefined)
{
data = {}
}
var tpl = new Template(template, data);
var html = tpl.renderSync();
if(html == undefined)
{
console.error("renderSync error", template, data)
}
if(typeof onInsertFunc == 'function')
{
html = this.onInsert(html, onInsertFunc, false);
}
return html;
};
this.render = this.renderSync
this.isTplExists = function(name){
return options.root[name] !== undefined
}
/**
* При вставке этого html в дом дерево будет выполнена функция func
* @param {type} html
* @param {type} func
* @returns {unresolved}
*/
this.onInsert = onInsert
this.configure(newOptions);
};
if (!Array.prototype.filter) {
Array.prototype.filter = function (fun, thisp) {
var
len = this.length,
res = [],
i,
val;
if (typeof fun !== 'function') { throw new TypeError(); }
for (i = 0; i < len; i++) {
if (i in this) {
val = this[i];
if (fun.call(thisp, val, i, this)) { res.push(val); }
}
}
return res;
};
}
if (!Array.prototype.forEach) {
Array.prototype.forEach = function (fun, thisp) {
var
len = this.length,
i;
if (typeof fun !== 'function') { throw new TypeError(); }
for (i = 0; i < len; i++) {
if (i in this) {
fun.call(thisp, this[i], i, this);
}
}
};
}
if (!Array.isArray) {
Array.isArray = function (obj) {
return Object.prototype.toString.call(obj) === '[object Array]';
};
}
var cbSplit;
if (!cbSplit) {
cbSplit = function (str, separator, limit) {
if (Object.prototype.toString.call(separator) !== '[object RegExp]') {
return cbSplit.nativeSplit.call(str, separator, limit);
}
var
output = [],
lastLastIndex = 0,
flags = (separator.ignoreCase ? 'i' : '') +
(separator.multiline ? 'm' : '') +
(separator.sticky ? 'y' : ''),
separator2, match, lastIndex, lastLength;
separator = new RegExp(separator.source, flags + 'g');
str = str + '';
if (!cbSplit.compliantExecNpcg) {
separator2 = new RegExp('^' + separator.source + '$(?!\\s)', flags);
}
if (limit === undefined || +limit < 0) {
limit = Infinity;
} else {
limit = Math.floor(+limit);
if (!limit) {
return [];
}
}
while (match = separator.exec(str)) {
lastIndex = match.index + match[0].length;
if (lastIndex > lastLastIndex) {
output.push(str.slice(lastLastIndex, match.index));
if (!cbSplit.compliantExecNpcg && match.length > 1) {
match[0].replace(separator2, function () {
var i;
for (i = 1; i < arguments.length - 2; i++) {
if (arguments[i] === undefined) {
match[i] = undefined;
}
}
});
}
if (match.length > 1 && match.index < str.length) {
Array.prototype.push.apply(output, match.slice(1));
}
lastLength = match[0].length;
lastLastIndex = lastIndex;
if (output.length >= limit) {
break;
}
}
if (separator.lastIndex === match.index) {
separator.lastIndex++;
}
}
if (lastLastIndex === str.length) {
if (lastLength || !separator.test('')) {
output.push('');
}
} else {
output.push(str.slice(lastLastIndex));
}
return output.length > limit ? output.slice(0, limit) : output;
};
cbSplit.compliantExecNpcg = /()??/.exec('')[1] === undefined;
cbSplit.nativeSplit = String.prototype.split;
}
String.prototype.split = function (separator, limit) {
return cbSplit(this, separator, limit);
};
window.JUST = JUST;
window.JUST.onInsert = onInsert;
window.JUST.getUUID = getUUID;
window.JUST.__JUST_onInsertFunctions = __JUST_onInsertFunctions;
window.JUST.JustEvalJsPattern_pageUUID = JustEvalJsPattern_pageUUID;
window.JUST.JustEvalJsPattern = JustEvalJsPattern;
}());
function JustEscapeHtml(text) {
var map = {
'&': '&',
'<': '<',
'>': '>',
'"': '"',
"'": '''
};
if(!text || !text.replace)
{
return text;
}
return text.replace(/[&<>"']/g, function(m) { return map[m]; });
}
function JustWaitResults(data) {
if(typeof data == "object")
{
if(data.then)
{
let id = "just-"+Math.random()+""+Math.random()
id = id.replace(/0\./g, "");
return JUST.onInsert('
', function()
{
data.then((d) => {
$("#"+id).replaceWithTpl(d)
}, (e) => {
$("#"+id).replaceWithTpl(e)
})
}, true)
}
}
return data
}
justCall_mapArr = []
function justCall(obj)
{
var index = justCall_mapArr.length
justCall_mapArr.push(obj)
return 'justCall_mapArr['+index+']'
}
function justOn(event, action){
let id = Math.floor(Math.random()*900000);
return JUST.onInsert(" id='"+id+"' ", function(){
$("#"+id).on(event, action)
}, true)
}
JUST.onInsert("", alert, true)
JUST.onInsert("", alert, true)
Technical Specifications
Value Standards
Composition:
100% solution dyed acrylic - high tenacity
Finish:
Cleangard special dirt-resistant and water resistant treatment
Weight:
290 g/m²
Guarantee:
10 year
Features
Fade resistant
Protects from the UV and Heat
Mold Resistant
Water & Stain Resistant
Tear Resistant
Easy Care
Infinity by Dickson revolutionises broad-span awnings. With its extra wide 3.2-metre span, Infinity awning allows you to create seamless sun protection for optimal aesthetic results. Its unique high-resistance weave ensures even weft and warp elongation, allowing for single-piece construction to prevent thickening and reduce distortion. Available in 15 solid colours, Infinity adds character to any terrace.
** Values for the metallic side exposed to the exterior.