*/ 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)

Neptune 2.05m


Technical Specifications

ValueStandards
Solution Dyed Acrylic UV Stabilised Water Resistant Mould and Mildew Resistant 10 Year Warranty
  • Features
  • Ensure smooth sailing and cool environments with Neptune, our European designed and crafted solution dyed acrylic. With exceptional durability, UV stability, mould and mildew resistance, Neptune is easy to maintain and will exceed expectations. This collection features a modern marine colour palette in two qualities: Neptune is finished with a premium water repellency treatment, while Neptune Extra has the added benefit of a highperforming waterproof acrylic backing.

Plain

Navy
Stone
Terra
Basalt
Black
Grey
Lunar
Anthracite

** Values for the metallic side exposed
to the exterior.