/** * @license text 2.0.15 Copyright jQuery Foundation and other contributors. * Released under MIT license, http://github.com/requirejs/text/LICENSE */ /*jslint regexp: true */ /*global require, XMLHttpRequest, ActiveXObject, define, window, process, Packages, java, location, Components, FileUtils */ define('text',['module'], function (module) { 'use strict'; var text, fs, Cc, Ci, xpcIsWindows, progIds = ['Msxml2.XMLHTTP', 'Microsoft.XMLHTTxP', 'Msxml2.XMLHTTP.4.0'], xmlRegExp = /^\s*<\?xml(\s)+version=[\'\"](\d)*.(\d)*[\'\"](\s)*\?>/im, bodyRegExp = /]*>\s*([\s\S]+)\s*<\/body>/im, hasLocation = typeof location !== 'undefined' && location.href, defaultProtocol = hasLocation && location.protocol && location.protocol.replace(/\:/, ''), defaultHostName = hasLocation && location.hostname, defaultPort = hasLocation && (location.port || undefined), buildMap = {}, masterConfig = (module.config && module.config()) || {}; function useDefault(value, defaultValue) { return value === undefined || value === '' ? defaultValue : value; } //Allow for default ports for http and https. function isSamePort(protocol1, port1, protocol2, port2) { if (port1 === port2) { return true; } else if (protocol1 === protocol2) { if (protocol1 === 'http') { return useDefault(port1, '80') === useDefault(port2, '80'); } else if (protocol1 === 'https') { return useDefault(port1, '443') === useDefault(port2, '443'); } } return false; } text = { version: '2.0.15', strip: function (content) { //Strips declarations so that external SVG and XML //documents can be added to a document without worry. Also, if the string //is an HTML document, only the part inside the body tag is returned. if (content) { content = content.replace(xmlRegExp, ""); var matches = content.match(bodyRegExp); if (matches) { content = matches[1]; } } else { content = ""; } return content; }, jsEscape: function (content) { return content.replace(/(['\\])/g, '\\$1') .replace(/[\f]/g, "\\f") .replace(/[\b]/g, "\\b") .replace(/[\n]/g, "\\n") .replace(/[\t]/g, "\\t") .replace(/[\r]/g, "\\r") .replace(/[\u2028]/g, "\\u2028") .replace(/[\u2029]/g, "\\u2029"); }, createXhr: masterConfig.createXhr || function () { //Would love to dump the ActiveX crap in here. Need IE 6 to die first. var xhr, i, progId; if (typeof XMLHttpRequest !== "undefined") { return new XMLHttpRequest(); } else if (typeof ActiveXObject !== "undefined") { for (i = 0; i < 3; i += 1) { progId = progIds[i]; try { xhr = new ActiveXObject(progId); } catch (e) { } if (xhr) { progIds = [progId]; // so faster next time break; } } } return xhr; }, /** * Parses a resource name into its component parts. Resource names * look like: module/name.ext!strip, where the !strip part is * optional. * @param {String} name the resource name * @returns {Object} with properties "moduleName", "ext" and "strip" * where strip is a boolean. */ parseName: function (name) { var modName, ext, temp, strip = false, index = name.lastIndexOf("."), isRelative = name.indexOf('./') === 0 || name.indexOf('../') === 0; if (index !== -1 && (!isRelative || index > 1)) { modName = name.substring(0, index); ext = name.substring(index + 1); } else { modName = name; } temp = ext || modName; index = temp.indexOf("!"); if (index !== -1) { //Pull off the strip arg. strip = temp.substring(index + 1) === "strip"; temp = temp.substring(0, index); if (ext) { ext = temp; } else { modName = temp; } } return { moduleName: modName, ext: ext, strip: strip }; }, xdRegExp: /^((\w+)\:)?\/\/([^\/\\]+)/, /** * Is an URL on another domain. Only works for browser use, returns * false in non-browser environments. Only used to know if an * optimized .js version of a text resource should be loaded * instead. * @param {String} url * @returns Boolean */ useXhr: function (url, protocol, hostname, port) { var uProtocol, uHostName, uPort, match = text.xdRegExp.exec(url); if (!match) { return true; } uProtocol = match[2]; uHostName = match[3]; uHostName = uHostName.split(':'); uPort = uHostName[1]; uHostName = uHostName[0]; return (!uProtocol || uProtocol === protocol) && (!uHostName || uHostName.toLowerCase() === hostname.toLowerCase()) && ((!uPort && !uHostName) || isSamePort(uProtocol, uPort, protocol, port)); }, finishLoad: function (name, strip, content, onLoad) { content = strip ? text.strip(content) : content; content = content.split('\n').join('').split('\t').join('').split(/>\s+<').split(/\s+/g).join(' '); if (masterConfig.isBuild) { buildMap[name] = content; } onLoad(content); }, load: function (name, req, onLoad, config) { //Name has format: some.module.filext!strip //The strip part is optional. //if strip is present, then that means only get the string contents //inside a body tag in an HTML string. For XML/SVG content it means //removing the declarations so the content can be inserted //into the current doc without problems. // Do not bother with the work if a build and text will // not be inlined. if (config && config.isBuild && !config.inlineText) { onLoad(); return; } masterConfig.isBuild = config && config.isBuild; var parsed = text.parseName(name), nonStripName = parsed.moduleName + (parsed.ext ? '.' + parsed.ext : ''), url = req.toUrl(nonStripName), useXhr = (masterConfig.useXhr) || text.useXhr; // Do not load if it is an empty: url if (url.indexOf('empty:') === 0) { onLoad(); return; } //Load the text. Use XHR if possible and in a browser. if (!hasLocation || useXhr(url, defaultProtocol, defaultHostName, defaultPort)) { text.get(url, function (content) { text.finishLoad(name, parsed.strip, content, onLoad); }, function (err) { if (onLoad.error) { onLoad.error(err); } }); } else { //Need to fetch the resource across domains. Assume //the resource has been optimized into a JS module. Fetch //by the module name + extension, but do not include the //!strip part to avoid file system issues. req([nonStripName], function (content) { text.finishLoad(parsed.moduleName + '.' + parsed.ext, parsed.strip, content, onLoad); }); } }, write: function (pluginName, moduleName, write, config) { if (buildMap.hasOwnProperty(moduleName)) { var content = text.jsEscape(buildMap[moduleName]); write.asModule(pluginName + "!" + moduleName, "define(function () { return '" + content + "';});\n"); } }, writeFile: function (pluginName, moduleName, req, write, config) { var parsed = text.parseName(moduleName), extPart = parsed.ext ? '.' + parsed.ext : '', nonStripName = parsed.moduleName + extPart, //Use a '.js' file name so that it indicates it is a //script that can be loaded across domains. fileName = req.toUrl(parsed.moduleName + extPart) + '.js'; //Leverage own load() method to load plugin value, but only //write out values that do not have the strip argument, //to avoid any potential issues with ! in file names. text.load(nonStripName, req, function (value) { //Use own write() method to construct full module value. //But need to create shell that translates writeFile's //write() to the right interface. var textWrite = function (contents) { return write(fileName, contents); }; textWrite.asModule = function (moduleName, contents) { return write.asModule(moduleName, fileName, contents); }; text.write(pluginName, nonStripName, textWrite, config); }, config); } }; if (masterConfig.env === 'node' || (!masterConfig.env && typeof process !== "undefined" && process.versions && !!process.versions.node && !process.versions['node-webkit'] && !process.versions['atom-shell'])) { //Using special require.nodeRequire, something added by r.js. fs = require.nodeRequire('fs'); text.get = function (url, callback, errback) { try { var file = fs.readFileSync(url, 'utf8'); //Remove BOM (Byte Mark Order) from utf8 files if it is there. if (file[0] === '\uFEFF') { file = file.substring(1); } callback(file); } catch (e) { if (errback) { errback(e); } } }; } else if (masterConfig.env === 'xhr' || (!masterConfig.env && text.createXhr())) { text.get = function (url, callback, errback, headers) { var xhr = text.createXhr(), header; xhr.open('GET', url, true); //Allow plugins direct access to xhr headers if (headers) { for (header in headers) { if (headers.hasOwnProperty(header)) { xhr.setRequestHeader(header.toLowerCase(), headers[header]); } } } //Allow overrides specified in config if (masterConfig.onXhr) { masterConfig.onXhr(xhr, url); } xhr.onreadystatechange = function (evt) { var status, err; //Do not explicitly handle errors, those should be //visible via console output in the browser. if (xhr.readyState === 4) { status = xhr.status || 0; if (status > 399 && status < 600) { //An http 4xx or 5xx error. Signal an error. err = new Error(url + ' HTTP status: ' + status); err.xhr = xhr; if (errback) { errback(err); } } else { callback(xhr.responseText); } if (masterConfig.onXhrComplete) { masterConfig.onXhrComplete(xhr, url); } } }; xhr.send(null); }; } else if (masterConfig.env === 'rhino' || (!masterConfig.env && typeof Packages !== 'undefined' && typeof java !== 'undefined')) { //Why Java, why is this so awkward? text.get = function (url, callback) { var stringBuffer, line, encoding = "utf-8", file = new java.io.File(url), lineSeparator = java.lang.System.getProperty("line.separator"), input = new java.io.BufferedReader(new java.io.InputStreamReader(new java.io.FileInputStream(file), encoding)), content = ''; try { stringBuffer = new java.lang.StringBuffer(); line = input.readLine(); // Byte Order Mark (BOM) - The Unicode Standard, version 3.0, page 324 // http://www.unicode.org/faq/utf_bom.html // Note that when we use utf-8, the BOM should appear as "EF BB BF", but it doesn't due to this bug in the JDK: // http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=4508058 if (line && line.length() && line.charAt(0) === 0xfeff) { // Eat the BOM, since we've already found the encoding on this file, // and we plan to concatenating this buffer with others; the BOM should // only appear at the top of a file. line = line.substring(1); } if (line !== null) { stringBuffer.append(line); } while ((line = input.readLine()) !== null) { stringBuffer.append(lineSeparator); stringBuffer.append(line); } //Make sure we return a JavaScript string and not a Java string. content = String(stringBuffer.toString()); //String } finally { input.close(); } callback(content); }; } else if (masterConfig.env === 'xpconnect' || (!masterConfig.env && typeof Components !== 'undefined' && Components.classes && Components.interfaces)) { //Avert your gaze! Cc = Components.classes; Ci = Components.interfaces; Components.utils['import']('resource://gre/modules/FileUtils.jsm'); xpcIsWindows = ('@mozilla.org/windows-registry-key;1' in Cc); text.get = function (url, callback) { var inStream, convertStream, fileObj, readData = {}; if (xpcIsWindows) { url = url.replace(/\//g, '\\'); } fileObj = new FileUtils.File(url); //XPCOM, you so crazy try { inStream = Cc['@mozilla.org/network/file-input-stream;1'] .createInstance(Ci.nsIFileInputStream); inStream.init(fileObj, 1, 0, false); convertStream = Cc['@mozilla.org/intl/converter-input-stream;1'] .createInstance(Ci.nsIConverterInputStream); convertStream.init(inStream, "utf-8", inStream.available(), Ci.nsIConverterInputStream.DEFAULT_REPLACEMENT_CHARACTER); convertStream.readString(inStream.available(), readData); convertStream.close(); inStream.close(); callback(readData.value); } catch (e) { throw new Error((fileObj && fileObj.path || '') + ': ' + e); } }; } return text; }); define('css', [], function () { if ("undefined" == typeof window) return { load: function (a, b, c) { c() } }; var a = document.getElementsByTagName("head")[0], b = window.navigator.userAgent.match(/Trident\/([^ ;]*)|AppleWebKit\/([^ ;]*)|Opera\/([^ ;]*)|rv\:([^ ;]*)(.*?)Gecko\/([^ ;]*)|MSIE\s([^ ;]*)|AndroidWebKit\/([^ ;]*)/) || 0, c = !1, d = !0; b[1] || b[7] ? c = parseInt(b[1]) < 6 || parseInt(b[7]) <= 9 : b[2] || b[8] ? d = !1 : b[4] && (c = parseInt(b[4]) < 18); var e = {}; e.pluginBuilder = "./css-builder"; var f, g, h, i = function () { f = document.createElement("style"), a.appendChild(f), g = f.styleSheet || f.sheet }, j = 0, k = [], l = function (a) { g.addImport(a), f.onload = function () { m() }, j++, 31 == j && (i(), j = 0) }, m = function () { h(); var a = k.shift(); return a ? (h = a[1], void l(a[0])) : void (h = null) }, n = function (a, b) { if (g && g.addImport || i(), g && g.addImport) h ? k.push([a, b]) : (l(a), h = b); else { f.textContent = '@import "' + a + '";'; var c = setInterval(function () { try { f.sheet.cssRules, clearInterval(c), b() } catch (a) { } }, 10) } }, o = function (b, c) { var e = document.createElement("link"); if (e.type = "text/css", e.rel = "stylesheet", d) e.onload = function () { e.onload = function () { }, setTimeout(c, 7) }; else var f = setInterval(function () { for (var a = 0; a < document.styleSheets.length; a++) { var b = document.styleSheets[a]; if (b.href == e.href) return clearInterval(f), c() } }, 10); e.href = b, a.appendChild(e) }; return e.normalize = function (a, b) { return ".css" == a.substr(a.length - 4, 4) && (a = a.substr(0, a.length - 4)), b(a) }, e.load = function (a, b, d, e) { (c ? n : o)(b.toUrl(a + ".css"), d) }, e }); define('utils', [], function () { var utils = { object: { import: function (source) { var arg = Object.keys(arguments).slice(1); for (var obj in arg) { var keys = Object.keys(arguments[arg[obj]]); for (var key in keys) { source[keys[key]] = arguments[arg[obj]][keys[key]]; } } }, diff: deepDiffMapper() }, collection: { map: function (a, field, b) { var parts = field.split('->'); for (var i in a) { for (var j in b) { if (b[j][parts[1]] == a[i][parts[0]]) { a[i][parts[0]] = b[j]; } } } }, byId: function (array) { var refs = {}; array.forEach(function (e, i, a) { refs[e.id] = a[i]; }); return refs; } }, render: { options: renderOptions }, handlers: { yiiErrorHandler: yiiErrorHandler }, array: { dynamicSort: dynamicSort, enum: enumArray }, jQueryMapId: jQueryMapBy('data-id'), jQueryMapBy: jQueryMapBy, form: { serialize: formSerialize }, dom: { serialize: domSerializer, validate: domValidate }, showTarget: showTarget, hideTarget: hideTarget, contentEditableCommit: contentEditableCommit, setValueOnName: setValueOnName }; window._utils = utils; return utils; function enumArray(size, init) { return Array.apply(null, { length: size }).map(function (value, index) { return index + (init || 0); }); } function domValidate($el, report) { var form = $('
').append($el.clone()); var validity = form.get(0).checkValidity(); if (report !== false) $el.parents('form').get(0).reportValidity(); return validity; } function domSerializer(el) { var $tr = $(el); var obj = {}; $tr.find('input, textarea').toArray().forEach(function (e, i, a) { if ($(e).is('[disabled]')) return; if (!($(e).data('label') || $(e).attr('name'))) return; if (!$(e).is(':checkbox') && !$(e).is(':radio')) return setValueOnName(obj, ($(e).data('label') || $(e).attr('name')), $(e).val()) if (!$(e).val()) return setValueOnName(obj, ($(e).data('label') || $(e).attr('name')), $(e).prop('checked')); if (!$(e).prop('checked')) return; setValueOnName(obj, ($(e).data('label') || $(e).attr('name')), $(e).val()); }); $tr.find('select').toArray().forEach(function (e, i, a) { if ($(e).is('[disabled]')) return; var val = $(e).val(); if (!($(e).data('label') || $(e).attr('name'))) return; if (!Array.isArray(val)) { var option = $('option[value="' + val + '"]', e); var option_data = { id: option.val(), text: option.text() }; return setValueOnName(obj, ($(e).data('label') || $(e).attr('name')), [option_data]); } setValueOnName(obj, ($(e).data('label') || $(e).attr('name')), $(e).val().map(keyValueObj)) function keyValueObj(index) { var option = $('option[value="' + index + '"]', e); return { id: option.val(), text: option.text() }; } }); return obj; } function setValueOnName(obj, key, value) { var ponteiro = obj; key.split('[') .map(function (f) { return f.split(']').join(''); }) .forEach(function (key, index, array) { if (index == (array.length - 1) && ponteiro[key] && Array.isArray(ponteiro[key])) { return ponteiro[key].push(value); } if (index == (array.length - 1) && ponteiro[key]) { ponteiro[key] = [ponteiro[key]]; return ponteiro[key].push(value); } if (index == (array.length - 1)) { return ponteiro[key] = value; } if (!ponteiro[key]) ponteiro[key] = {}; ponteiro = ponteiro[key]; }); } function contentEditableCommit() { $($(this).data('target')).val($(this).html().trim()); } function showTarget() { if (!$(this).is('[data-target]')); $target = $($(this).data('target')); $target.slideDown(300); } function hideTarget() { if (!$(this).is('[data-target]')); $target = $($(this).data('target')); $target.slideUp(300); } function renderOptions(options, selected) { return Object.keys(options) .map(function (e) { return ""; }).join(''); } function yiiErrorHandler(data) { $('.has-error').removeClass('has-error'); data = data.result.responseJSON; if (!data.errors) return; data.errors.forEach(function (error) { $root = $($('[name=' + error.field + ']').parents('.form-group')); $root.addClass('has-error'); $('.help-block-error', $root).html(error.message); }); } function jQueryMapBy(field) { return function (i, e) { return $(e).attr(field); } } function dynamicSort(property) { var sortOrder = 1; if (property[0] === "-") { sortOrder = -1; property = property.substr(1); } return function (a, b) { var result = (a[property] < b[property]) ? -1 : (a[property] > b[property]) ? 1 : 0; return result * sortOrder; } } function formSerialize($el) { var obj = {}; $el.serializeArray().forEach(function (e) { var ponteiro = obj; e.name .split('[') .map(function (f) { return f.split(']').join(''); }) .forEach(function (key, index, array) { if (index == (array.length - 1) && ponteiro[key] && Array.isArray(ponteiro[key])) { return ponteiro[key].push(e.value); } if (index == (array.length - 1) && ponteiro[key]) { ponteiro[key] = [ponteiro[key]]; return ponteiro[key].push(e.value); } if (index == (array.length - 1)) { return ponteiro[key] = e.value; } if (!ponteiro[key]) ponteiro[key] = {}; ponteiro = ponteiro[key]; }); }); //'variantes[2][valores]'.match(/\[(\w+)\]/g).forEach(console.log) return obj; } /* Faz diff de dois objetos em javascript, [ Houveram alterações no script original para atender as nossas necessidades ] Ref: https://stackoverflow.com/questions/8572826/generic-deep-diff-between-two-objects */ function deepDiffMapper() { return { VALUE_CREATED: 'created', VALUE_UPDATED: 'updated', VALUE_DELETED: 'deleted', VALUE_UNCHANGED: 'unchanged', map: function (obj1, obj2) { if (this.isFunction(obj1) || this.isFunction(obj2)) { throw 'Invalid argument. Function given, object expected.'; } if (this.isValue(obj1) || this.isValue(obj2)) { var type = this.compareValues(obj1, obj2); if (type == this.VALUE_UNCHANGED) return -1; return { type: this.compareValues(obj1, obj2), data: (obj1 === undefined) ? obj2 : obj1, from: obj1, to: obj2 }; } var removed = []; var diff = {}; for (var key in obj1) { if (this.isFunction(obj1[key])) { continue; } var value2 = undefined; if ('undefined' != typeof (obj2[key])) { value2 = obj2[key]; } var val = this.map(obj1[key], value2); diff[key] = val; if (val == -1) { removed.push(key); delete diff[key]; }; if (this.isObject(val) && !Object.keys(val).length) { removed.push(key); delete diff[key]; } } for (var key in obj2) { if (this.isFunction(obj2[key]) || ('undefined' != typeof (diff[key]))) { continue; } if (removed.indexOf(key) != -1) { continue; } var val = this.map(undefined, obj2[key]); diff[key] = val; } return diff; }, compareValues: function (value1, value2) { if (value1 === value2) { return this.VALUE_UNCHANGED; } if (this.isDate(value1) && this.isDate(value2) && value1.getTime() === value2.getTime()) { return this.VALUE_UNCHANGED; } if ('undefined' == typeof (value1)) { return this.VALUE_CREATED; } if ('undefined' == typeof (value2)) { return this.VALUE_DELETED; } return this.VALUE_UPDATED; }, isFunction: function (obj) { return {}.toString.apply(obj) === '[object Function]'; }, isArray: function (obj) { return {}.toString.apply(obj) === '[object Array]'; }, isDate: function (obj) { return {}.toString.apply(obj) === '[object Date]'; }, isObject: function (obj) { return {}.toString.apply(obj) === '[object Object]'; }, isValue: function (obj) { return !this.isObject(obj) && !this.isArray(obj); } } }; }); (function () { var handledEvents = ['blur', 'change', 'focus', 'focusin', 'focusout', 'select', 'submit', 'click', 'contextmenu', 'dblclick', 'hover', 'mousedown', 'mouseenter', 'mouseleave', 'mousemove', 'touchmove', 'mouseout', 'mouseover', 'mouseup', 'keydown', 'keypress', 'keyup', 'resize', 'scroll']; handledEvents.forEach(function (event) { document.addEventListener(event, componentEvent, true); }); new MutationObserver(componentObserver).observe(document.body, { childList: true, subtree: true }); function componentObserver(mutations, observer) { var update = false; for (var index = 0; index < mutations.length; index++) { var mutation = mutations[index]; if (mutation.type === 'childList' && mutation.addedNodes.length) update = true; } if (update) installComponents(); } function installComponents() { var components = [].slice.call(document.querySelectorAll('[data-component]')); components.forEach(function (component) { var self = component; if (component.installed) return; self.component_name = self.attributes['data-component'].value; require([self.attributes['data-component'].value], function (module) { if (self.installed) return; module.install.call(self, self); self.installed = true; }); }); }; function insereElemento(c, element) { var component = (element.attributes['data-component']) ? element.attributes['data-component'].value : ''; if (component) { element.component = component; c.last_component[component] = { element: element, name: component, elements: [] }; c.components.push(c.last_component[component]); } if (typeof element.className != "string") return; var classList = element.className.split(' '); var l = classList.length; for (var i = 0; i < l; i++) { var _class = classList[i]; var _i = _class.indexOf('_'); if (_i == -1) continue; if (_class.indexOf('--') != -1) continue; if (_i != _class.lastIndexOf('_')) continue; var parts = _class.split('_'); if (!c.last_component[parts[0]]) continue; c.last_component[parts[0]].elements.push({ name: _class, element: element }); } return c; } function componentEvent(event) { if (!event.target || !event.target.tagName || ['HTML', 'BODY'].indexOf(event.target.tagName) != -1) return; var element = event.target; var element_list = []; var _event = event; while (element != document.body) { element_list.push(element); element = element.parentElement; } var data = element_list.reverse().reduce(insereElemento, { waiting_components: {}, components: [], last_component: {} }); var called = []; if(data.components != undefined && data.components.length != 0) { data.components.reverse().forEach(function (component) { if (!require.s.contexts['_'].defined[component.name]) return; var module = require(component.name); if (!module.events[event.type]) return; component.elements .reverse() .forEach(function (element) { if (!module.events[event.type][element.name]) return; if (called.indexOf(module.events[event.type][element.name]) != -1) return; module.events[event.type][element.name].call(element.element, component.element, _event); called.push(module.events[event.type][element.name]); }); }); } return false; } define('Component/BEM', [], function () { HTMLElement.prototype.is = getElementState; HTMLElement.prototype.state = setElementState; HTMLElement.prototype.element = elementFinder; Object.defineProperty(HTMLElement.prototype, 'BEM', { get: function () { return elementFinder.bind(this, '_')(); } }) function elementFinder(name) { var timeout = setTimeout(doElementChanges), is_htmlElement = name instanceof HTMLElement, is_array = name instanceof Array, self = this, options = { element_selector: name }, menu = { state: setOption.bind(this, 'state'), modifier: setOption.bind(this, 'modifier'), variation: setOption.bind(this, 'variation'), helper: setOption.bind(this, 'helper'), element: elementFinder.bind(this), append: appendToElement.bind(this), first: getFirst.bind(this), last: getLast.bind(this), all: selectElements.bind(this), do: doFn, now: doNow }; var define = Object.defineProperty.bind(this, menu); define('value', { get: getAttrOrEmpty.bind(self, 'value'), set: setAttr.bind(self, 'value') }); define('html', { get: getAttrOrEmpty.bind(self, 'innerHTML'), set: setAttr.bind(self, 'innerHTML') }); define('timeout', { get: function () { return timeout; }, set: function (nv) { timeout = nv; return nv } }); if (is_htmlElement || is_array) return menu; options.element_selector = "." + this.component_name; if (name != '_') options.element_selector += "_" + name; return menu; function doFn(fn) { fn(menu); return menu; } function doNow() { doElementChanges(); return menu; } function appendToElement(html) { selectElements().forEach(function (el) { el.innerHTML += html }); } function getFirst() { return selectElements()[0]; } function getLast() { return selectElements().reduce(function (c, e) { return e || c; }, null); } function selectElements() { if (options.element_selector instanceof Array) return options.element_selector; if (options.element_selector instanceof HTMLElement) return [options.element_selector]; if (options.element_selector.indexOf('_') == -1) return [self]; return [].slice.call(self.querySelectorAll(options.element_selector)) } function getAttrOrEmpty(attr) { var selection = selectElements(); if (!selection) return ""; return selection[0][attr]; } function setAttr(attr, value) { selectElements().forEach(function (element) { element[attr] = value; }); } function setOption(opt, name, state) { if (!options[opt]) { options[opt] = [{ name: name, state: state }]; return menu; } options[opt].push({ name: name, state: state }); return menu; } function doElementChanges() { if (timeout) clearTimeout(timeout); var elements = selectElements(); elements.forEach(function (el) { setStates(el, options.state, function (e) { return 'is-' + e.name; }); setStates(el, options.helper, function (e) { return 'h-' + e.name; }); setStates(el, options.modifier, function (e) { return '-' + e.name; }); setStates(el, options.variation, function (e) { return self.component_name + "_" + name + "--" + e.name; }); }); if (!elements.length) return; } } function getElementState(state) { return this.classList.contains('is-' + state); } function setElementState(state, status) { var is = this.is(state); if (is && status) return; if (is ^ status) this.BEM.state(state, status); } function setStates(element, states, classFn) { if (!states || !states.length) return; return states.forEach(addClass); function addClass(el) { if (el.state) return element.classList.add(classFn(el)); element.classList.remove(classFn(el)); } } }); define('Component', ['Component/BEM'], function () { function Component(name) { this.name = name; return this }; Component._events = {}; Component.instances = []; Component.on = function () { on.apply(Component, arguments); } Component.off = function () { off.apply(Component, arguments); } Component.emit = function () { emit.apply(Component, arguments); } Component.prototype = { on: on, off: off, emit: emit, _events: {}, events: {}, elements: {}, register: register, bootstrap: bootstrap, install: function () { } }; function on(event, cb) { event = this._events[event] = this._events[event] || [] event.push(cb); } function off(event, cb) { if (!this._events[event]) return; event = this._events[event]; event.splice(event.indexOf(cb) >>> 0, 1); } function emit(event) { var list = this._events[event] if (!list || !list[0]) return var args = list.slice.call(arguments, 1) list.slice().map(function (i) { i.apply(this, args) }) } function bootstrap() { Component.instances.push(this); var self = this; Object.keys(self.elements).forEach(function (target) { Object.keys(self.elements[target]).forEach(function (event) { self.register(self.name + '_' + target, event, self.elements[target][event]); if (handledEvents.indexOf(event) != -1) return; if (event[0] != '$') { handledEvents.push(event); document.addEventListener(event, componentEvent, true); return; } if (!jQuery) return console.log('O evento "' + event + '" necessita de jQuery para acontecer'); if (event.slice(0, 2) == "$$") { jQuery(document).on(event.slice(2), '.' + self.name + '_' + target, function (_event) { self.elements[target][event].call(this, $(this).parents('[data-component="' + self.name + '"]').get(0), _event); }); return; } jQuery(document).on(event.slice(1), '.' + self.name + '_' + target, self.elements[target][event]); }) }) } function register(target, event, fn) { if (!this.events[event]) this.events[event] = {}; if (!this.events[event][target]) this.events[event][target] = {}; this.events[event][target] = fn; } var el = document.createElement('DIV'); document.body.appendChild(el); document.body.removeChild(el); window.Component = Component; return Component; }); })(); define('stepper', ['Component'], function () { var stepper = new Component('stepper'); stepper.install = function () { $('.stepper_input', this).on('keyup', onKeydown); setInputStates(this); } stepper.elements.adder = { click: addValue } stepper.elements.reducer = { click: reduceValue } stepper.bootstrap(); return stepper; function addValue(component, event) { if ($(this).is('.disabled')) return; var $target = $('.stepper_input', component); $target.val(parseInt($target.val()) + 1); setInputStates(component); $target.get(0).dispatchEvent(new Event('change', { bubbles: true })); } function reduceValue(component, event) { if ($(this).is('.disabled')) return; var $target = $('.stepper_input', component); $target.val(parseInt($target.val()) - 1).trigger('change'); setInputStates(component); $target.get(0).dispatchEvent(new Event('change', { bubbles: true })); } function onKeydown(event) { if ($.inArray(event.keyCode, [46, 8, 9, 27, 13, 110, 190]) !== -1 || (event.keyCode === 65 && (event.ctrlKey === true || event.metaKey === true)) || (event.keyCode >= 35 && event.keyCode <= 40)) { return; } if ((event.shiftKey || (event.keyCode < 48 || event.keyCode > 57)) && (event.keyCode < 96 || event.keyCode > 105)) { event.preventDefault(); } setInputStates($(this).parent('[data-component="stepper"]').get(0)); } function setInputStates(component) { if (component.attributes['data-disabled'] && component.attributes['data-disabled'].value) { $('.stepper_adder, .stepper_reducer', component).addClass('disabled'); $('.stepper_input', component).attr('disabled', 'disabled'); return; } var $target = $('.stepper_input', component); var value = parseInt($target.val()); var max = (component.attributes['data-max']) ? parseInt(component.attributes['data-max'].value) : false; var min = (component.attributes['data-min']) ? parseInt(component.attributes['data-min'].value) : false; if (max !== false && value < max) { $('.stepper_adder', component).removeClass('disabled'); } if (max !== false && value >= max) { $target.val(max); $('.stepper_adder', component).addClass('disabled'); }; if (min !== false && value > min) { $('.stepper_reducer', component).removeClass('disabled'); } if (min !== false && value <= min) { $target.val(min); $('.stepper_reducer', component).addClass('disabled'); } } }); define('calendar', ['Component'], function () { var module = new Component('calendar'); module.install = install; module.elements = {}; module.bootstrap(); return module; function install(base) { $.fn.datepicker.dates['pt-BR'] = { days: ["Domingo", "Segunda", "Terça", "Quarta", "Quinta", "Sexta", "Sábado"], daysShort: ["Dom", "Seg", "Ter", "Qua", "Qui", "Sex", "Sáb"], daysMin: ["D", "S", "T", "Q", "Q", "S", "S"], months: ["Janeiro", "Fevereiro", "Março", "Abril", "Maio", "Junho", "Julho", "Agosto", "Setembro", "Outubro", "Novembro", "Dezembro"], monthsShort: ["Jan", "Fev", "Mar", "Abr", "Mai", "Jun", "Jul", "Ago", "Set", "Out", "Nov", "Dez"], today: "Hoje", monthsTitle: "Meses", clear: "Limpar", format: "yyyy-mm-dd" // format:"dd/mm/yyyy" }; var content = base.element("datepicker").first(); content.dataset.date = base.element("selected-date").first().value; calendar = $(".calendar_datepicker").datepicker({ startDate: new Date(), weekStart: 1, beforeShowDay: beforeShowDay.bind(null, base), // datesDisabled: base.element("crowded").first().value, language: base.dataset.lang }).on('changeDate', function (e) { var selected_date = base.element("selected-date").first(); var clicked_date = calendar.datepicker('getFormattedDate'); selected_date.value = clicked_date; content.dataset.date = clicked_date; $("input[name=dataSelecionada]").trigger('change'); }) } function memo(val) { try { if (!cache[val]) cache[val] = JSON.parse(val); return cache[val]; } catch (e) { return {} } } function beforeShowDay(base, date) { var date_full = moment(date).format('Y-MM-DD'); var date_now = moment().format('Y-MM-DD'); var year = moment(date).format('Y'); var month = moment(date).format('MM'); var day = moment(date).format('DD'); var close_days = base.element("close-days").first().value; var open_days = base.element("open-days"); var holidays = base.element("holidays").first().value; var crowded = base.element("crowded").first().value; var night_sessions = base.element("night-sessions").first() ? base.element("night-sessions").first().value : '[]'; if (open_days) { open_days = open_days.first(); open_days = open_days ? open_days.value : null; open_days && (open_days = JSON.parse(open_days)); }; var shown_days = (date.getFullYear() + '-' + zeroPad(date.getMonth() + 1) + '-' + zeroPad(date.getDate())); var is_closed = close_days.indexOf(shown_days) !== -1; var is_holiday = holidays.indexOf(shown_days) !== -1; var is_crowded = crowded.indexOf(shown_days) !== -1; var is_night_sessions = night_sessions.indexOf(shown_days) !== -1; if (open_days && !is_closed) { is_closed = open_days.every(i => i !== shown_days); } var classes = []; var tooltip = []; var label_aberto_modificar = base.dataset.labelabertomodificar; var label_aberto = base.dataset.labelaberto; var obj = { content: "
" + (date.getDate()).toString() + "
" }; if (is_holiday) { tooltip.push('Feriado'); classes.push('is-holiday'); } if (is_night_sessions && !is_closed && !is_crowded) { // tooltip.push('Night Sessions'); classes.push('is-night-sessions'); } if (is_closed) { tooltip.push('Parque fechado'); classes.push('is-closed'); } if (is_crowded) { tooltip.push('Data esgotada'); classes.push('is-crowded'); } if (classes.length) classes.push('toggle-tooltip'); obj.classes = classes.join(' '); obj.tooltip = tooltip.join(' com '); if ( date.getDate() == new Date(date.getFullYear(), date.getMonth() + 1, 0).getDate() && date_full >= date_now ) { // if (year == '2021' && month == '10') { // $('.legenda-aberto').html(label_aberto_modificar); // } else { // $('.legenda-aberto').html(label_aberto); // } // // if (year == '2021' && (month != '10' && month != '11') || year != '2021') { // $('.legenda-night_sessions').hide(); // } else { // $('.legenda-night_sessions').show(); // } } return obj; } function zeroPad(n) { return ("00" + n).slice(-2); } }); /** * Descrição do componente filtro-dropdown * */ define('filtro-dropdown', ['Component'], function () { // Declarações var self = new Component('filtro-dropdown'); self.install = install; self.elements = { 'state': { change: toggleContents }, 'close': { click: toggleContentsClose }, }; // Processamento self.bootstrap(); return self; // Funções function install() { } function toggleContents(component) { $('.filtro-dropdown_contents', component).toggleClass('is-open'); if ($(window).width() <= 720) { $("#return-to-top").css("bottom", "-55px") } } function toggleContentsClose(component) { $('.filtro-dropdown_contents', component).toggleClass('is-open'); } }); /** * Plugin for linking multiple owl instances * @version 1.0.0 * @author David Deutsch * @license The MIT License (MIT) */ ; (function ($, window, document, undefined) { /** * Creates the Linked plugin. * @class The Linked Plugin * @param {Owl} carousel - The Owl Carousel */ var Linked = function (carousel) { /** * Reference to the core. * @protected * @type {Owl} */ this._core = carousel; /** * All event handlers. * @protected * @type {Object} */ this._handlers = { 'dragged.owl.carousel changed.owl.carousel': $.proxy(function (e) { if (e.namespace && this._core.settings.linked) { this.update(e); } }, this), 'linked.to.owl.carousel': $.proxy(function (e, index, speed, standard, propagate) { if (e.namespace && this._core.settings.linked) { this.toSlide(index, speed, propagate); } }, this) }; // register event handlers this._core.$element.on(this._handlers); // set default options this._core.options = $.extend({}, Linked.Defaults, this._core.options); }; /** * Default options. * @public */ Linked.Defaults = { linked: false }; /** * Updated linked instances */ Linked.prototype.update = function (e) { this.toSlide(e.relatedTarget.relative(e.item.index)); }; /** * Carry out the to.owl.carousel proxy function * @param {int} index * @param {int} speed * @param {bool} propagate */ Linked.prototype.toSlide = function (index, speed, propagate) { var id = this._core.$element.attr('id'), linked = typeof (this._core.settings.linked) === 'string' ? this._core.settings.linked.split(',') : this._core.settings.linked; if (typeof propagate == 'undefined') { propagate = true; } index = index || 0; if (propagate) { $.each(linked, function (i, el) { $(el).trigger('linked.to.owl.carousel', [index, 300, true, false]); }); } else { this._core.$element.trigger('to.owl.carousel', [index, 300, true]); if (this._core.settings.current) { this._core._plugins.current.switchTo(index); } } }; /** * Destroys the plugin. * @protected */ Linked.prototype.destroy = function () { var handler, property; for (handler in this._handlers) { this.$element.off(handler, this._handlers[handler]); } for (property in Object.getOwnPropertyNames(this)) { typeof this[property] != 'function' && (this[property] = null); } }; $.fn.owlCarousel.Constructor.Plugins.linked = Linked; })(window.Zepto || window.jQuery, window, document); define("owl.linked", function () { }); define('detalhe-produto', ['Component', 'owl.linked', 'utils'], function () { var module = new Component('detalhe-produto'); module.install = install; module.elements = { 'data-selecionada': { '$$change': aoAlterarData }, variante: { change: onVarianteChange }, opcao: { change: onFiltroChange }, 'modal-variante': { click: onModalOpen }, 'whatsapp-aniversariante': { click: whatsappOpen }, 'qtd-pacotes': { change: onQtdPacoteChange }, 'opcao': { change: onOptionChange }, 'opcao-marcador': { click: onClickMarcador }, 'quantidade': { change: aoAlterarQuantidade }, 'modal-cancelar': { click: onClickCancelar }, 'modal-concordo': { click: onClickConcordo } }; module.bootstrap(); return module; function install() { var $imagens = $(".detalhe-produto_imagens .detalhe-produto_imagens-carousel"); var $thumbs = $(".detalhe-produto_thumbs .detalhe-produto_thumbs-carousel:not([data-disconnect='true'])"); $imagens.owlCarousel({ nav: true, items: 1, margin: 1, linked: $thumbs }); $('.checkbox-concordo').click(function () { if (this.checked) { $('.detalhe-produto_modal-concordo').show(); } else { $('.detalhe-produto_modal-concordo').hide(); } }); onQtdPacoteChange(); $($thumbs).owlCarousel({ nav: true, items: 6, margin: 10, navText: [ '', '' ], linked: $imagens }) .on('initialized.owl.carousel linked.to.owl.carousel', function () { $thumbs.find('.owl-item.current').removeClass('current'); $($thumbs.find('.owl-item').get($imagens.find('.owl-item.active').index())).addClass('current'); //var current = $thumbs.find('.owl-item.active').length ? $thumbs.find('.owl-item.active') : $thumbs.find('.owl-item.active').eq(0); }) .on('click', '.owl-item', function () { $imagens.trigger('to.owl.carousel', $(this).index()); $thumbs.find('.owl-item.current').removeClass('current'); $(this).addClass('current'); }); $('.detalhe-produto_thumbs .detalhe-produto_thumbs-carousel[data-disconnect=true]').owlCarousel({ nav: true, items: 4, margin: 10, navText: [ '', '' ] }); // var variante = getCookie('_detalhe_variante'); var variante = $("input[name=especial]").val(); setTimeout(function () { $('.detalhe-produto_variante[value="' + variante + '"]').click(); $('.detalhe-produto_variante[value="' + variante + '"]').prop('checked', true); if (variante && variante != 0) $('.detalhe-produto_aviso').show(); $($thumbs.find('.owl-item').get($imagens.find('.owl-item.active').index())).addClass('current'); }, 100); } function aoAlterarData(component, event) { var $this = $(this); var data = $this.val(); var _url = $this.data('url'); $('.detalhe-produto_data-selecionada-target', component).html(data + ' '); $('.detalhe-produto_data-selecionada-state ', component).click(); setTimeout(ateraData, 200); function ateraData() { var form = $this.parents('form'); var currentURL = window.location.href; var newURL = currentURL.replace(/(\?|&)dataSelecionada=[^&]+/, ''); if (newURL !== currentURL) { window.history.replaceState({}, document.title, newURL); } form.submit(); }; } function reload() { location.reload(); } function onFiltroChange(component, event) { value = $(this).val(); if (!value) return; setTimeout(function () { document.location.href = value; }, 450); } function onClickCancelar(component, event) { $('.detalhe-produto_modal-concordo').hide(); setCookie('_detalhe_variante', 0); $('.detalhe-produto_variante[value=0]').click(); $('.produto_comprar').show(); } function onClickConcordo(component, event) { var callModal = event.target.getAttribute('data-callmodal'); if (!!callModal) { var dateVisit = document.querySelector('span.detalhe-produto_data-selecionada-target').innerText.trim(); var quantity = document.querySelector('input.detalhe-produto_quantidade').value; var t = window.i18n.kelly_modal; var props = { title: t.title, produtoId: component.dataset.uid, dateVisit, quantity, forms_repeater: Array.from({ length: quantity }, (v, index) => ({ index, labels: { form: { title: t.forms.title.replace('X', `${quantity > 1 ? `${(index + 1)}° ` : ''}`), name: t.forms.name, document: t.forms.document, birthday: t.forms.birthday, document_with_photo: t.forms.document, document_with_photo_small: t.forms.with_photo, medical_report: t.forms.medial_report, foreigner: t.forms.foreigner, select_country: t.forms.select_country }, } })), labels: { form_default: { title: t.default_form.title, name: t.default_form.name, whatsapp: t.default_form.whatsapp, email: t.default_form.email, }, send: t.send, cancel: t.cancel }, }; require([`text!${callModal}.html`], function (element) { $(Mustache.render(element, props)) .appendTo('body') .on('show.bs.modal', function () { // fix: when close some modal and open another one, the close modal will remove the class modal-open // then you need to add the class modal-open to the body after the other modal remove the class modal-open window.setTimeout(function () { document.body.classList.add('modal-open') }, 300) }).modal('show'); }); return; } $('.detalhe-produto_modal-concordo').hide(); $('.produto_comprar').show(); Component.emit('produto:confirmarCompra', component.dataset.uid); } function onVarianteChange(component, event) { var value = $(this).val(); setCookie('_detalhe_variante', value); updateBoxValuesDefault(component); if (value == 0) { $('.detalhe-produto_aviso').fadeOut(300); } if (value != 0) { $('.detalhe-produto_aviso').fadeIn(300); } // $('.detalhe-produto_nome-variante').html( $(this).next('span').text() ); // $('.detalhe-produto_valor').html( $(this).data('valores') ); } function whatsappOpen(component, ev) { ev.preventDefault(); window.open("https://api.whatsapp.com/send?phone=5547992048331"); } function onModalOpen(component, ev) { ev.preventDefault() $opcao = $('.detalhe-produto_variante:checked').parents('.filtro_opcao'); $modal = $('.filtro_opcao-modal', $opcao).clone(); $modal.remove(); $modal.attr('data-component', 'mensagem'); $modal.appendTo($opcao); } function setCookie(cname, cvalue, exdays) { var d = new Date(); d.setTime(d.getTime() + (exdays * 24 * 60 * 60 * 1000)); var expires = "expires=" + d.toUTCString(); document.cookie = cname + "=" + cvalue + ";" + expires + ";path=/"; } function getCookie(cname) { var name = cname + "="; var decodedCookie = decodeURIComponent(document.cookie); var ca = decodedCookie.split(';'); for (var i = 0; i < ca.length; i++) { var c = ca[i]; while (c.charAt(0) == ' ') { c = c.substring(1); } if (c.indexOf(name) == 0) { return c.substring(name.length, c.length); } } return ""; } function updateBoxValuesDefault(component) { var data = _utils.dom.serialize($('.produto')); var $variante = $('.detalhe-produto_variante:checked', component); var $valor = $('.detalhe-produto_valor', component); var $qtd = $('.detalhe-produto_quantidade', component); var qtd = $('.detalhe-produto_quantidade').val(); var parcelas = $qtd.data('parcelas'); var totalOriginal = $variante.data('valor'); var total = $variante.data('valor') * qtd; var $valor_quantidade = $('.detalhe-produto_quantidade', component); $valor_quantidade.attr('data-por', totalOriginal); $valor_quantidade.data('por', totalOriginal); if (total > 0) { $valor.html(Mustache.render( 'R$ {{valor}}' + (typeof parcelas !== 'undefined' && parseInt(parcelas) > 1 ? ' ou {{parcelas}}x de R$ {{parcela}}' : ''), { valor: (total).toFixed(2).replace('.', ','), parcelas: parcelas, parcela: (total / parcelas).toFixed(2).replace('.', ',') })); var $valor_de = $('.detalhe-produto_valor-de', component); var total_de = $valor_quantidade.data('de') * qtd; $valor_de.html(Mustache.render( 'R$ {{valor}}', { valor: (total_de).toFixed(2).replace('.', ',') } )) } } function updateBoxValues(component) { var data = _utils.dom.serialize($('.produto')); if (!data.DadosAdicionais || !data.DadosAdicionais.ItemPacote) return; var options = Object .keys(data.DadosAdicionais.ItemPacote) .map(function (key) { var item = data.DadosAdicionais.ItemPacote[key]; if (!item.valor_adicional || !item.opcao) return 0; return parseFloat(item.valor_adicional[item.opcao]) }) .reduce(function (soma, elemento) { return soma + elemento; }, 0); var $valor = $('.detalhe-produto_valor', component); var qtd = $('.detalhe-produto_qtd-pacotes').val(); var parcelas = $valor.data('parcelamento'); var total = $valor.data('base') * qtd + (options * qtd || 0); $valor.html(Mustache.render( 'R$ {{valor}}' + (typeof parcelas !== 'undefined' && parseInt(parcelas) > 1 ? ' ou {{parcelas}}x de R$ {{parcela}}' : ''), { valor: (total).toFixed(2).replace('.', ','), parcelas: parcelas, parcela: (total / parcelas).toFixed(2).replace('.', ',') })); var $valor_de = $('.detalhe-produto_valor-de', component); var total_de = $valor_de.data('base') * qtd + (options * qtd || 0); $valor_de.html(Mustache.render( 'R$ {{valor}}', { valor: (total_de).toFixed(2).replace('.', ',') } )) } function onQtdPacoteChange(component, event) { updateBoxValues(component) } function onOptionChange(component, event) { var $this = $(this); if ($this.parents('.detalhe-produto_filtro').length) { value = $this.val(); if (!value) return; setTimeout(function () { document.location.href = value; }, 450); return; } updateBoxValues(component); if (!$('input:radio:not(.detalhe-produto_opcao-marcador):checked', this).length) { var values = $('[name*="[valor_adicional]"]', this) .map(function () { return { el: this, value: parseFloat(this.value) || 0 }; }) .toArray() .sort(function (a, b) { return a.value - b.value }) $(values[0].el).click(); } if ($('.detalhe-produto_opcao-marcador:not(:checked)', this).length) $('.detalhe-produto_opcao-marcador', this).click(); } function onClickMarcador(component, event) { //var $this = $(this); //console.log( $this ); } function formatNumber(n) { return parseFloat(n).toFixed(2).replace('.', ','); } function aoAlterarQuantidade() { var $this = $(this); if (!$this.data('de') && !$this.data('por')) return; if ($this.data('de')) { var dados_de = { valor: formatNumber(parseFloat($this.data('de')) * $this.val()) }; var texto_de = Mustache.render('R$ {{valor}}', dados_de); $('.detalhe-produto_valor-de').html(texto_de); } var dados_por = { valor: formatNumber(parseFloat($this.data('por')) * $this.val()), parcelas: $this.data('parcelas'), parcela: formatNumber(parseFloat($this.data('por')) * $this.val() / $this.data('parcelas')) }; console.log(dados_por.parcelas); var texto_por = Mustache.render('R$ {{valor}}' + (typeof dados_por.parcelas !== 'undefined' && parseInt(dados_por.parcelas) > 1 ? ' ou {{parcelas}}x de R$ {{parcela}}' : ''), dados_por); $('.detalhe-produto_valor').html(texto_por); } }); /** * Descrição do componente $1 * */ define('menu', ['Component'], function () { var module = new Component('menu'); var menuBurguer = $(".menu-burguer, .navbar-overlay") module.install = function (base) { menuBurguer.click(function () { $(this).toggleClass("open") $("body").toggleClass("goBody") }) $('[data-toggle="popover"]').popover({ html: true }); var navItens = base.querySelectorAll('li.nav-item'); var navItens2 = base.querySelectorAll('li.show-second-content.secondul'); var allNavs = (navItens = Array.from(navItens), navItens2 = Array.from(navItens2), navItens.concat(navItens2)); function fecharSubmenus(actualDropdownContent) { allNavs .filter(function (liElement) { return liElement.classList.contains('nav-item') }) .forEach(function (liElement) { let dropdownContent = liElement.querySelectorAll('ul[class*="content"]'); if (dropdownContent) { dropdownContent.forEach(function (_dropdownContent) { if (actualDropdownContent !== _dropdownContent) { _dropdownContent.classList.remove('show'); let button = _dropdownContent.classList.contains('dropdown-content') ? _dropdownContent.parentElement.nextElementSibling : _dropdownContent.nextElementSibling; if (button) { button.classList.remove('arrowup'); } } }) } }); } function hasUlChildren(liElement) { if (liElement.querySelector('ul')) { liElement.classList.add('has-ul'); return liElement; } return null; } if (allNavs) { allNavs = allNavs.map(function (liElement) { return hasUlChildren(liElement) }).filter(Boolean); allNavs.forEach(function (liElement) { //create a button with style let button = document.createElement('button'); button.classList.add(liElement.classList.contains('secondul') ? 'expand-secondbtn' : 'expand-btn'); button.innerHTML = ''; // append button on liElement liElement.appendChild(button); // get ulElement let dropdownContent = liElement.querySelector('ul[class*="content"]'); // add click event on button button.addEventListener('click', function (e) { e.stopPropagation(); dropdownContent.classList.toggle('show'); button.classList.toggle('arrowup'); if (button.classList.contains('expand-btn')) { fecharSubmenus(dropdownContent); } }); }); } } module.elements = { }; module.bootstrap(); return module; }); /*
Cupom de desconto
Você tem 20% de desconto na sua compra
*/ define('carrinho/desconto', [], function () { function Desconto(elements) { console.log(elements); elements['input-discount'] = { keyup: onkeyup } } return Desconto; function onkeyup(component, event) { console.log(component); console.log(this); } }); define('text!produto-carrinho-header.html', [], function () { return '
{{nome}}
{{valor_total}}
Quantidade: {{quantidade}}
'; }); define('carrinho', ['Component', 'carrinho/desconto', 'text!produto-carrinho-header.html'], function () { var module = new Component('carrinho'); var template = require('text!produto-carrinho-header.html'); module.install = function () { } module.elements = { 'botao-carrinho': { click: function () { var url = this.attributes['data-url']; if (!url) return; document.location.href = url.value; } }, 'input-frete': { change: aoAlterarFrete, keyup: aoAlterarFrete } }; Component.on('carrinho::update', processaDadosUpdate); Component.on('carrinho::atualiza-produtos', buscaProdutosCarrinho); Component.on('carrinho::atualiza-cortesias', processaCortesiasCarrinho); module.bootstrap(); return module; function maskedMoney(number) { if (typeof number === 'string') { number = parseFloat(number); } number = number * 100; number = number.toFixed(3); if (number % 1) number++; number = Math.floor(number); if (!number) return "0,00"; return $('
').mask('#.##0,00', { reverse: true }).masked(number); } function emit(dados) { Component.emit('carrinho::update', dados); } function processaDadosUpdate(dados, processaDados) { $('[data-component=carrinho]').each(function (index, item) { updateComponent.call(item, dados, processaDados); }); Component.emit('descontos::update', $('.checkout_input-discount')[0], dados); } function updateComponent(dados, processaDados) { var self = this; if (typeof dados.code !== 'undefined' && dados.code == 500) return; if (dados.valor_total_com_desconto === null) dados.valor_total_com_desconto = 0; if (!Array.isArray(dados.produtos)) dados.produtos = Object.keys(dados.produtos).map(function (e) { return dados.produtos[e]; }); $('.cart_trigger-icon').html('' + dados.produtos.length + ''); if (!dados.produtos.length) { $('.cart_total').hide(); $('.cart_credito').hide(); $('.cart_button').hide(); $('.cart_ticket').hide(); $('.cart-empty').show(); } else { $('.cart-empty').hide(); $('.cart_total').show(); $('.cart_button').show(); } $('.carrinho_valor-total', this).html(dados.valor_total); $('.carrinho_total-itens', this).html(dados.produtos.length); if (!dados.produtos.length) { $('.carrinho_entrega, .carrinho_desconto, .carrinho_finalizar').hide(); $('.carrinho_nenhum-produto').show(); $('.checkout_resume').hide(); return; } if (typeof dados.cupom == 'undefined' || !dados.cupom) { $('.checkout_input-discount').val(null); $('.checkout_botao-remover-cupom').hide(); } else { $('.checkout_input-discount').val(dados.cupom); $('.checkout_botao-remover-cupom').show(); } if (typeof dados.valor_total_com_desconto == 'undefined' || parseFloat(dados.valor_total_com_desconto) == 0 || parseFloat(dados.valor_total_com_desconto) == parseFloat(dados.valor_total)) { $('.carrinho_total_descontos').hide(); $('.carrinho_total_descontos span').html(''); } else { $('.carrinho_total_descontos span').html('- R$' + maskedMoney(dados.valor_total_com_desconto)); $('.carrinho_total_descontos').show(); } if (typeof dados.carta_credito.id == 'undefined') { $('.carrinho_total_carta_credito').hide(); $('.carrinho_total_carta_credito span').html(''); } else { $('.carrinho_total_carta_credito span').html('- R$' + maskedMoney(dados.carta_credito.valor)); $('.carrinho_total_carta_credito').show(); // console.log(dados.carta_credito.valor); // number = parseFloat(dados.carta_credito.valor); // console.log(number); // number = number.toFixed(3); // console.log(number); } $('.carrinho_desconto, .carrinho_finalizar').show(); $('.carrinho_nenhum-produto').hide(); $('.checkout_resume').show(); if (dados.produtos.length && dados.habilita_entrega) { $('.carrinho_entrega').show(); } dados.produtos = dados.produtos.map(function (el) { el.valores_iguais = (el.valor_unitario == el.valor_de); return el; }) if (dados.valor_total_descontos) { $('.carrinho_total_descontos span').html('- R$' + maskedMoney(dados.valor_total_descontos)); $('.carrinho_total_descontos').show(); } if (dados.valor_frete != undefined) { $('.carrinho_total_frete span').html((dados.valor_frete > 0) ? 'R$' + maskedMoney(parseFloat(dados.valor_frete)) : 'Grátis'); $('.carrinho_total_frete').show(); } if (dados.desconto_valor_frete != undefined) { $('.carrinho_total_descontos_frete span').html((dados.desconto_valor_frete > 0) ? 'R$' + maskedMoney(parseFloat(dados.desconto_valor_frete)) : 'Grátis'); $('.carrinho_total_descontos_frete').show(); } var valor_minimo = $('[data-valor-minimo-parcela]').attr('data-valor-minimo-parcela'); var maximo_parcelas = dados.parcelas || $('[data-maximo-parcelas]').attr('data-maximo-parcelas'); if (typeof dados.carta_credito.id == 'undefined') { var valor_carrinho = parseFloat(dados.valor_total_com_desconto); var valor_parcela = parseFloat(dados.valor_total_com_desconto); } else { var valor_carrinho = parseFloat(dados.valor_total_com_carta_credito); var valor_parcela = parseFloat(dados.valor_total_com_carta_credito); } var parcelas = 1; while (valor_parcela > valor_minimo && parcelas < maximo_parcelas) { parcelas++; valor_parcela = valor_carrinho / parcelas; } var textoParcelas = valor_parcela > 0 ? '(' + i18n('app.pagamento.em_ate_x') + ' ' + parcelas + i18n('app.pagamento.vezes_sem_juros') + ' de R$' + maskedMoney(valor_parcela) + ' )' : ''; $('.checkout_resume-conditions').html(textoParcelas); if (typeof dados.cupom !== 'undefined' && dados.cupom != null && dados.cupom) $('.resumo_carrinho_nome_cupom').text('( ' + dados.cupom + ' )'); else $('.resumo_carrinho_nome_cupom').text(''); if (typeof dados.carta_credito.id == 'undefined') { if (valor_carrinho > 0) { $('.cart_total-price').html(((dados.valor_total_com_desconto < 0) ? '- ' : '') + 'R$' + maskedMoney(parseFloat(dados.valor_total_com_desconto) || 0)); $('.carrinho_subtotal').html('R$' + maskedMoney(parseFloat(dados.valor_total) || 0)); $('.carrinho_total').html(((dados.valor_total_com_desconto < 0) ? '- ' : '') + 'R$' + maskedMoney(parseFloat(dados.valor_total_com_desconto) || 0)); } else { $('.cart_total-price').html(i18n('app.pagamento.compra_gratis')); $('.carrinho_subtotal').html(i18n('app.pagamento.compra_gratis')); $('.carrinho_total').html(i18n('app.pagamento.compra_gratis')); } } else { if (valor_carrinho > 0) { $('.cart_total-price').html(((dados.valor_total_com_carta_credito < 0) ? '- ' : '') + 'R$' + maskedMoney(parseFloat(dados.valor_total_com_carta_credito) || 0)); $('.carrinho_subtotal').html('R$' + maskedMoney(parseFloat(dados.valor_total) || 0)); $('.carrinho_total').html(((dados.valor_total_com_carta_credito < 0) ? '- ' : '') + 'R$' + maskedMoney(parseFloat(dados.valor_total_com_carta_credito) || 0)); } else { $('.cart_total-price').html(i18n('app.pagamento.compra_gratis')); $('.carrinho_subtotal').html('R$' + maskedMoney(parseFloat(dados.valor_total) || 0)); $('.carrinho_total').html(i18n('app.pagamento.compra_gratis')); } } if (processaDados === false) return; processaRespostaCarrinhoHeader(self, dados); processaRespostaCarrinho(self, dados); } function buscaProdutosCarrinho() { $.get('/api/compra/ping-carrinho') .done(processaRespostaCarrinho) .fail(processaErroRespostacarrinho); } function processaRespostaCarrinho(self, dados) { var produtos = dados.produtos; produtos = ((Array.isArray(produtos)) ? produtos : Object.keys(produtos).map(function (e) { return produtos[e]; })); produtos.forEach(function (produto) { var component = $(self).find('[data-item-carrinho="' + produto.item_carrinho + '"]')[0]; if (typeof component === 'undefined') return; produto.valores_iguais = (produto.valor_de == produto.valor_unitario); produto.valor_de = maskedMoney(parseFloat(produto.valor_de)); produto.valor_total = maskedMoney(parseFloat(produto.valor_total)); produto.valor_unitario = maskedMoney(parseFloat(produto.valor_unitario)); produto.cupom = (dados.cupom && produto.valor_com_desconto) ? dados.cupom : null; produto.cupom = (dados.cupom && typeof produto.id_desconto_percentual !== 'undefined' && produto.id_desconto_percentual) ? dados.cupom : null; produto.cupom = (dados.cupom && typeof produto.id_desconto_valor !== 'undefined' && produto.id_desconto_valor) ? dados.cupom : null; if (typeof produto.valor_com_desconto !== 'undefined') { produto.valor_com_desconto_cupom = (dados.cupom && produto.valor_com_desconto) ? maskedMoney(parseFloat(produto.valor_com_desconto / produto.quantidade)) : valor_com_desconto; } component.innerHTML = Mustache.render(require('text!produto-carrinho.html'), produto); $('[data-toggle=tooltip]', component).stop().tooltip(); }); processaCortesiasCarrinho(dados); } function processaRespostaCarrinhoHeader(self, dados) { var produtos = dados.produtos; produtos = ((Array.isArray(produtos)) ? produtos : Object.keys(produtos).map(function (e) { return produtos[e]; })); var component = $('.cart_content')[0]; if (typeof component === 'undefined') return; if (dados.produtos.length > 0 || dados.produtos.length != []) { $('.cart_content').html(""); $('.cart_title').html("Resumo da sua compra."); $('.calendar_subtitle').html(""); $('.button-finalizar').html(""); } Component.emit('cart::updateCart', dados.produtos.length); produtos.forEach(function (produto) { var component = $('.cart_content')[0]; if (typeof component === 'undefined') return; if (produto.valor_total > 0) { produto.valor_total = "R$" + maskedMoney(parseFloat(produto.valor_total)); } else { produto.valor_total = "Grátis"; } component.innerHTML += Mustache.render(template, produto); }); } function processaCortesiasCarrinho(dados) { var cortesias = dados.cortesias; cortesias = ((Array.isArray(cortesias)) ? cortesias : Object.keys(cortesias).map(function (e) { return cortesias[e]; })); var novas_cortesias = []; cortesias.forEach(function (cortesia) { novas_cortesias.push(cortesia.uid); }); var cortesias_existentes = []; $('[data-cortesia="true"]').map(function () { var item = $(this); cortesias_existentes.push(item.attr('data-uid')); }); cortesias_existentes.map(function (item) { if (novas_cortesias.indexOf(item) === -1) { $('[data-cortesia="true"][data-uid="' + item + '"]').fadeOut('fast', function () { $('[data-cortesia="true"][data-uid="' + item + '"]').remove(); }); } return item; }); setTimeout(function () { cortesias.forEach(function (cortesia) { var component = $('[data-cortesia="true"][data-uid="' + cortesia.uid + '"][data-item-carrinho="' + cortesia.item_carrinho + '"]')[0]; cortesia.valores_iguais = (cortesia.valor_de == cortesia.valor_unitario); cortesia.valor_de = maskedMoney(parseFloat(cortesia.valor_de)); cortesia.valor_total = maskedMoney(parseFloat(cortesia.valor_total)); cortesia.valor_unitario = maskedMoney(parseFloat(cortesia.valor_unitario)); cortesia.cortesia = true; cortesia.cupom = dados.cupom || null; if (typeof component == 'undefined' || component == null) { component = $('')[0]; component.innerHTML = Mustache.render(require('text!produto-carrinho.html'), cortesia); $('.row.checkout_produtos.carrinho_finalizar').append($(component)); $(component).fadeIn('fast'); } else { component.innerHTML = Mustache.render(require('text!produto-carrinho.html'), cortesia); } $('[data-toggle=tooltip]', component).stop().tooltip(); }); }, 200); } function processaErroRespostacarrinho(dados) { } function aoAlterarFrete(component, event) { var self = this; if (self.value.length < 10 || component.frete_ultimo == self.value) return; if (component.frete_timeout) clearTimeout(component.frete_timeout); component.frete_timeout = setTimeout(function () { self.parentElement.classList.remove('has-danger'); var url = self.attributes['data-url']; if (!url) return; url = url.value; component.frete_ultimo = self.value; $('.carrinho_simbolo-frete', component).hide(); $valor = $('.carrinho_valor-frete', component); $valor.html(''); if ($valor.data('mask') && $valor.data('mask').mask) $valor.unmask(); $('.carrinho_endereco-texto').html(''); $.post(url, { cep: self.value }) .done(processaRetornoFrete) .fail(processaErroFrete); }, 300); function processaRetornoFrete(dados) { if (dados.code) { var msg = dados.message || i18n('app.pagamento.erro_calculo_frete'); $('.carrinho_endereco-texto').html(msg); toastr.error(msg); self.parentElement.classList.add('has-danger'); return } var $el_frete = $('.carrinho_valor-frete', component); var valor = parseInt((dados.valor_frete || 0).toString().split('.').join('')); if (valor && valor < 100) { valor *= 100; }; $el_frete.html(valor || i18n('app.pagamento.compra_gratis')); if (valor) { $el_frete.mask("#.##0,00", { reverse: true }); $('.carrinho_simbolo-frete', component).show(); } else { $('.carrinho_simbolo-frete', component).hide(); } $('.carrinho_frete-wrapper', component).show(); $('.carrinho_endereco-texto-default', component).hide(); $('.carrinho_endereco-texto').html(dados.endereco.endereco + "
" + dados.endereco.bairro + ', ' + dados.endereco.cidade + ' - ' + dados.endereco.estado); emit(dados); toastr.success(); } function processaErroFrete() { $('.carrinho_endereco-texto-default', component).show(); self.parentElement.classList.add('has-danger'); toastr.error(i18n('app.pagamento.erro_calculo_frete')); } } function i18n(label) { return pathOrFallback(window.carrinhoi18n, label); } // busca chave em um objeto ou retorna a string de fallback function pathOrFallback(obj, path, fallback) { if (!obj) return fallback; return path.split('.').reduce(findPath, obj); function findPath(obj, path) { if (obj[path]) return obj[path]; return fallback; } } }); /** * Descrição do componente datepicker * */ define('datepicker', ['Component'], function () { // Declarações var self = new Component('datepicker'); var feriados = []; var dias_fechados = []; var lock = false; var closeItens = $("
"); self.install = install; self.elements = { // 'element': { event: function } }; // Processamento self.bootstrap(); return self; // Funções function install() { var $this = $(this); if ($(window).width() <= 812) { $this.on("focus", function (ev) { ev.stopPropagation(); }).on('show', function (ev) { if (lock) return; lock = true; var $datepicker = $(".datepicker"); $("#return-to-top").css("bottom", "-55px") $datepicker.addClass('is-animating'); setTimeout(function () { $(".datepicker").removeClass('is-animating'); }, 1000); setTimeout(function () { closeItens.off('click').on('click', function () { $this.datepicker('hide'); }).prependTo($(".datepicker")) }) }).on('hide', function () { lock = false; setTimeout(function () { closeItens.remove().prop('style', false) }) $("#return-to-top").css("bottom", "-25px") }); } dias_fechados = $this.data('dias-fechados') || dias_fechados; feriados = $this.data('feriados') || feriados; var options = { disableTouchKeyboard: true, autoclose: true, /*orientation: "bottom auto",*/ language: $(this).attr('data-lang'), beforeShowDay: beforeShowDay, weekStart: 1, }; if (!$this.data('passado')) options.startDate = new Date(); if ($this.data('hospedagem')) { data_hospedagem = new Date(); options.startDate = moment(data_hospedagem).add(3, 'days').toDate(); } $this.datepicker(options); $this.on('changeDate', function (ev) { $greaterThan = $this.data('greater-than'); $currentVal = $this.val().split('/').reverse().join('-'); if (typeof $greaterThan !== 'undefined' && $greaterThan !== null) { $than = $($greaterThan); if ($than.val() == '') { if (moment().isAfter($currentVal)) { toastr.error('Você deve selecionar uma data posterior ao dia de hoje'); $this.val(''); } else if (moment().diff($currentVal, 'day') > -1) { toastr.error('A data que você selecionou está muito próxima do dia de hoje'); $this.val(''); } else { $than.val(moment($currentVal).add(-1, 'days').format('DD/MM/YYYY')); } } else { $than = $than.val().split('/').reverse().join('-'); if (moment($than).isAfter(moment($currentVal))) { toastr.error('A data selecionada deve ser maior do que a anterior'); var $nextDay = moment($than).add(1, 'days').format('DD/MM/YYYY'); $this.datepicker('setDate', $nextDay); } } } }); function beforeShowDay(day) { $('.toggle-tooltip').tooltip(); var obj = { content: "
" + (day.getDate()).toString() + "
" }; var $string = (day.getFullYear() + '-' + zeroPad(day.getMonth() + 1) + '-' + zeroPad(day.getDate())); var classes = []; var tooltip = []; if ($this.is('[data-hospedagem=true]')) return obj; if ($this.is('[data-pacote=true]')) return obj; if (feriados.indexOf($string) !== -1) { tooltip.push('Feriado'); classes.push('feriado'); } if (dias_fechados.indexOf($string) !== -1) { tooltip.push('Parque fechado'); classes.push('fechado'); } if (classes.length) classes.push('toggle-tooltip'); obj.classes = classes.join(' '); obj.tooltip = tooltip.join(' com '); return obj; } } function zeroPad(n) { return ("00" + n).slice(-2); } }); define('location-search', ['Component'], function () { var module = new Component('location-search'); module.install = install; module.elements = { }; module.bootstrap(); return module; function install() { var options = {} var $this = $(this); var data = $this.data(); var lock = false; var closeItens = $("
"); if ($(window).width() <= 812) { $this.on("focus", function (ev) { ev.stopPropagation(); }).on('select2:open', function (ev) { if (lock) return; lock = true; var $select2Container = $(".select2-container"); $("#return-to-top").css("bottom", "-55px") $select2Container.addClass('is-animating'); setTimeout(function () { closeItens.off('click').on('click', function () { $this.select2("close"); }).prependTo($select2Container) }) }).on('hide', function () { lock = false; $("#return-to-top").css("bottom", "-25px") }) } if (data.url) { options.ajax = { url: data.url, dataType: 'json', quietMillis: 1000, delay: 500, data: processData, processResults: processAjaxResponse } options.minimumInputLength = 3; } options.language = { errorLoading: function () { return select2i18n.app.select2_resultados_nao_carregados }, inputTooLong: function (e) { var t = e.input.length - e.maximum , n = select2i18n.app.select2_texto_muito_longo.replace('%s', t); return n }, inputTooShort: function (e) { var t = e.minimum - e.input.length , n = select2i18n.app.select2_texto_muito_curto.replace('%s', t); return n }, loadingMore: function () { return select2i18n.app.select2_carregando_resultados; }, maximumSelected: function (e) { var t = select2i18n.app.select2_selecao_maxima.replace('%s', e.maximum); return e.maximum == 1 ? t += "m" : t += "ns", t }, noResults: function () { return select2i18n.app.select2_nenhum_resultado_encontrado; }, searching: function () { return select2i18n.app.select2_buscando; } }; $this.select2(options).on('select2:open', addClassToContainer) } function addClassToContainer() { var $data = $(this).data(); if (!$data.select2.$dropdown.installed) installDropdown($data, $data.select2.$dropdown); $data.select2.$dropdown.installed = true; } function processAjaxResponse(data) { var result = { results: [], paginate: { more: data.pagination || false } }; var nomesCampos = { "pais": "País", "estado": "Estado", "cidade": "Cidade" }; result.results = Object.keys(data).map(function (e) { return { text: nomesCampos[e], children: data[e].map(function (item) { if (typeof item.sigla_estado !== 'undefined') { texto = item.nome + ' - ' + item.sigla_estado; } else { texto = item.nome; } return { id: e + '::' + item.id, text: texto, campo: e }; }) }; }).filter(function (el) { return el.children.length; }); return result; // var result = { // results : [], // paginate : { more : ( data._links && data._links.next )? data._links.next : false } // }; // console.log( data ); // result.results = data.map(function(e){ // if( e.estado && e.estado.sigla ){ // var nome = e.nome+' - '+e.estado.sigla; // }else{ // var nome = e.nome; // } // return { // id : e.id, // text : nome // }; // }); // return result; } function processData(params) { return { termo: params.term, groups: 'estado' }; } function installDropdown($data, $target) { if ($data['dropdownClass']) $data.select2.$dropdown.addClass($data['dropdownClass']); if ($data['dropdownPrepend']) $('.select2-dropdown', $data.select2.$dropdown).prepend($data['dropdownPrepend']); } }); define('select2', ['Component'], function () { var module = new Component('select2'); module.install = install; module.elements = { }; module.bootstrap(); return module; function addClassToContainer() { var $data = $(this).data(); if (!$data.select2.$dropdown.installed) installDropdown($data, $data.select2.$dropdown); $data.select2.$dropdown.installed = true; } function installDropdown($data, $target) { if ($data['dropdownClass']) $data.select2.$dropdown.addClass($data['dropdownClass']); if ($data['dropdownPrepend']) $('.select2-dropdown', $data.select2.$dropdown).prepend($data['dropdownPrepend']); } function install() { var options = {} var $this = $(this); var data = $this.data(); var lock = false; var closeItens = $("
"); if ($(window).width() <= 812) { $this.on("focus", function (ev) { ev.stopPropagation(); }).on('select2:open', function (ev) { if (lock) return; lock = true; var $select2Container = $(".select2-container"); $("#return-to-top").css("bottom", "-55px") $select2Container.addClass('is-animating'); setTimeout(function () { closeItens.off('click').on('click', function () { $this.select2("close"); }).prependTo($select2Container) }) }).on('hide', function () { lock = false; $("#return-to-top").css("bottom", "-25px") }) } options.language = { errorLoading: function () { return "Os resultados não puderam ser carregados." }, inputTooLong: function (e) { var t = e.input.length - e.maximum , n = "Apague " + t + " caracter"; return t != 1 && (n += "es"), n }, inputTooShort: function (e) { var t = e.minimum - e.input.length , n = "Digite " + t + " ou mais caracteres"; return n }, loadingMore: function () { return "Carregando mais resultados…" }, maximumSelected: function (e) { var t = "Você só pode selecionar " + e.maximum + " ite"; return e.maximum == 1 ? t += "m" : t += "ns", t }, noResults: function () { return "Nenhum resultado encontrado" }, searching: function () { return "Buscando…" } }; $this.select2(options).on('select2:open', addClassToContainer); $this.on("select2:select select2:unselect", select2Propagate) } function select2Propagate(evt) { var element = evt.params.data.element; var $element = $(element); $element.detach(); $(this).append($element); $(this).trigger("change"); var evt = document.createEvent("HTMLEvents"); evt.initEvent("change", false, true); this.dispatchEvent(evt); }; }); define('text!hotel/idade-crianca.html', [], function () { return '
'; }); define('text!hotel/quartos.html', [], function () { return '
'; }); /** * Listagem de hotéis * */ //var templateInputIdade = '
'; define('listahoteis', ['Component', "text!hotel/idade-crianca.html", "text!hotel/quartos.html"], function () { var module = new Component('listahoteis'); var templateInputIdade = require("text!hotel/idade-crianca.html") var templateInputQuartos = require("text!hotel/quartos.html") module.install = function () { $(window).scroll(function (ev) { var button = $(".menu-filtros-button-bg"); if (!button.length) return; var el = $(".menu-filtros-button"); var filtroPos = button.offset().top; var scrollPos = $(window).scrollTop() if (scrollPos > filtroPos) { el.addClass("is-fixed") } else if (scrollPos < filtroPos) { el.removeClass("is-fixed") } }); $(document).on('pjax:complete', '#pjax-listagem-hospedagem', function () { $('html, body').animate({ scrollTop: $('#resultado').offset().top - 40 }, 1000); }) } module.elements = { 'formulario-busca': { keydown: keyDownFormulairoBusca }, 'envia-busca': { change: enviaFiltrosPjax }, 'numero-criancas': { '$$select2:select': alteraNumeroCriancas }, 'numero-quartos': { '$$select2:select': alteraNumeroQuartos } }; module.bootstrap(); return module; function keyDownFormulairoBusca(event) { if (event.which == 13) return false; } function enviaFiltrosPjax(event) { $('#filtros').trigger('submit'); } function criaNInputs(quantidade, inicio, quarto) { inicio += 1; return Array.apply(null, { length: quantidade }) .map(aplicaNumeroAoTemplate.bind(null, quarto)) .join(''); function aplicaNumeroAoTemplate(quarto, vazio, numero) { return templateInputIdade .split('{{n}}').join(numero + inicio) .split('{{quarto}}').join(quarto); } } function alteraNumeroCriancas(e) { var $this = $(this); var quarto = $this.data('quarto'); var $numeroCriancas = parseInt($this.val()) || 0, $container = $('.input-idade-criancas-' + quarto), $label = $('.label-idade'); var qtd = $container.find('.form-input-crianca-' + quarto).length; if ($this.data('ignora-idades')) return; if ($numeroCriancas > qtd) $container.append(criaNInputs($numeroCriancas - qtd, qtd, quarto)); if ($numeroCriancas < qtd) $container.find('.form-input-crianca-' + quarto).slice($numeroCriancas).remove(); } function criaNInputsQuarto(quantidade, inicio) { inicio += 1; return Array.apply(null, { length: quantidade }) .map(aplicaNumeroAoTemplate) .join(''); function aplicaNumeroAoTemplate(vazio, numero) { return templateInputQuartos .split('{{quarto}}').join(numero + inicio); } } function alteraNumeroQuartos(e) { var $this = $(this); var numeroQuartos = parseInt($this.val()) || 0, container = $('.listagem-quarto'); var qtd = $('.numero_quarto').length; if (numeroQuartos > qtd) container.append(criaNInputsQuarto(numeroQuartos - qtd, qtd)); if (numeroQuartos < qtd) container.find('.numero_quarto').slice(numeroQuartos).remove(); } }); define('text!produto-carrinho.html', [], function () { return '
{{nome}}
{{#data_selecionada_formatada}}
Data da visita: {{data_selecionada_formatada}} {{#desconto_antecedencia}} - desconto de {{desconto_antecedencia}}% {{/desconto_antecedencia}}
{{/data_selecionada_formatada}} {{#cupom}}
Cupom: {{cupom}}
{{/cupom}}
{{#gratis}} Grátis {{/gratis}} {{^gratis}} {{^valores_iguais}} {{#valor_de}}
Valor unitário: R${{valor_de}} {{#valor_com_desconto}} R${{valor_com_desconto_cupom}} {{/valor_com_desconto}} {{^valor_com_desconto}} R${{valor_unitario}} {{/valor_com_desconto}}
{{/valor_de}} {{^valor_de}} {{#valor_com_desconto}} Valor unitário: R${{valor_com_desconto}} {{/valor_com_desconto}} {{^valor_com_desconto}} Grátis {{/valor_com_desconto}} {{/valor_de}} {{/valores_iguais}} {{#valores_iguais}} Valor unitário: R${{valor_unitario}} {{/valores_iguais}} {{/gratis}}
{{#especial_nome}} Desconto do tipo: {{especial_nome}} {{/especial_nome}}
{{^cortesia}} {{#valor_com_desconto}}
R${{valor_total}}
{{/valor_com_desconto}} {{/cortesia}} {{#cortesia}} {{#valor_unitario}} {{/valor_unitario}} {{/cortesia}} {{^cortesia}} {{#valor_com_desconto}} R${{valor_com_desconto}} {{/valor_com_desconto}} {{^valor_com_desconto}} {{#gratis}} Grátis {{/gratis}} {{^gratis}} R${{valor_total}} {{/gratis}} {{/valor_com_desconto}} {{/cortesia}} {{#cortesia}} Cortesia {{/cortesia}}
{{^cortesia}} remover {{/cortesia}}
'; }); define('produto', ['Component', 'text!produto-carrinho.html'], function (Component) { var produto = new Component('produto'); var componenteAtual = null; produto.install = install; produto.elements = { comprar: { click: adicionaProdutoAoCarrinho }, remover: { click: removerProduto }, 'input-quantidade': { keyup: aoAlterarQuantidade, change: aoAlterarQuantidade }, 'link': { click: aoClicarLink, auxclick: aoClicarMeioLink // contextmenu: aoClicarContextMenu }, 'link-hospedagem': { // click: aoClicarLinkHospedagem, auxclick: aoClicarLinkHospedagem // contextmenu: aoClicarLinkHospedagem } }; produto.bootstrap(); return produto; function compraEspecial(componenteAtual, uid) { if (componenteAtual.dataset.uid != uid) return; var $quantidade = $('.produto_comprar-quantidade', componenteAtual); var quantidade = $quantidade.length ? $quantidade.val() : 1; var especial = $('.produto_variantes input:checked', componenteAtual).val(); $.post('/api/compra/adicionar-produto-carrinho', { produto: componenteAtual.attributes['data-uid'].value, quantidade: quantidade, especial: especial }) .done(function (xhr) { processaRetornoCompra(xhr, componenteAtual.attributes['data-uid'].value) }) .fail(processaErroCompra) }; function debug() { console.log(this, arguments); } function emit(dados) { Component.emit('carrinho::update', dados, false); } function removeMe() { $(this).remove(); } function install() { this.produto = { lock: false }; var $lazyImg = $('.produto_imagem[data-image]', this); if ($lazyImg.length) $lazyImg.css('background-image', "url('" + $lazyImg.data('image') + "')"); style = "background-image: url()" $('[data-toggle=tooltip]', this).tooltip(); Component.on('produto:confirmarCompra', compraEspecial.bind(null, this)); } function processaErroCompra(xhr) { console.log('erro na compra', xhr); } function maskedMoney(number) { number = number.toFixed(3) * 100; if (number % 1) number++; number = Math.floor(number); return $('
').mask('#.##0,00', { reverse: true }).masked(number); } function removerProduto(component, event) { var self = this, uid = component.attributes['data-uid'].value, var_item_carrinho = component.attributes['data-item-carrinho'].value; $.post('/api/compra/remove-produto-carrinho', { produto: uid, item_carrinho: var_item_carrinho }) .done(processaRetornoRemover) .fail(processaErroRemover); function processaRetornoRemover(dados) { var produto = normalizaProdutos(dados.produtos) .filter(function (el) { return el.uid == uid; }) .reduce(function (c, e) { return e || c; }, null); component.remove(); emit(dados); } function processaErroRemover(xhr) { console.log(xhr); } } function aoAlterarQuantidade(component, event) { if (!component.produto) return; if (component.produto.lock) clearTimeout(component.produto.lock); var self = this, _this = $(self), uid = component.attributes['data-uid'].value, var_item_carrinho = component.attributes['data-item-carrinho'].value, data_min = _this.data('min'), data_max = _this.data('max'); if (_this.val() < data_min) { _this.val(data_min); return; } if (_this.val() > data_max) { _this.val(data_max); return; } component.produto.lock = setTimeout(function () { $.post('/api/compra/adicionar-produto-carrinho', { produto: uid, item_carrinho: var_item_carrinho, quantidade: self.value, especial: _this.attr('data-especial') || 0 }) .done(function (xhr) { processaNovaQuantidade(xhr, uid) }) .fail(processaErroCompra) }, 300); function processaNovaQuantidade(dados, uid = null) { if (typeof ttq !== "undefined" && ttq && uid && dados.produtos) { dados.produtos.forEach(function (data) { if (data.uid == uid) { ttq.track('AddToCart', { contents: [ { content_id: data.codigo, content_type: 'product', content_category: typeof data.tipo_nome !== 'undefined' ? data.tipo_nome : 'Passaportes', price: data.valor_unitario, quantity: data.quantidade, description: data.nome, content_name: typeof data.tipo_nome !== 'undefined' ? data.tipo_nome : 'Passaportes', } ], currency: "BRL", value: data.quantidade * data.valor_unitario, }, { event_id: 'event' + Math.floor(new Date().getTime() / 1000) } ); } }); } if (uid && dados.produtos && dados.produtos.forEach && window.usuariologado && false) { dados.produtos.forEach(function (data) { if (data.uid == uid) { var date = new Date(); var myHeaders = new Headers(); myHeaders.append("Content-Type", "application/json"); var raw = JSON.stringify({ "data": [ { "event_name": "add_to_cart", "action_source": "website", "event_time": Math.floor(new Date().getTime() / 1000), "advertiser_id": "549763382604", "event_id": "eventId0001", "user_data": window.usuariologado, "custom_data": { "currency": "BRL", "content_ids": [data.codigo], "contents": [ { "item_price": data.valor_unitario, "quantity": data.quantidade } ] }, } ] }); var requestOptions = { method: 'POST', headers: myHeaders, body: raw, redirect: 'follow' }; fetch("https://ct.pinterest.com/events/v3/", requestOptions) .then(response => response.text()) .then(result => console.log(result)) .catch(error => console.log('error', error)); } }); } var produto = normalizaProdutos(dados.produtos) .filter(function (el) { return el.item_carrinho == var_item_carrinho; }) .reduce(function (c, e) { return e || c; }, null); var valores_produto = { valores_iguais: (produto.valor_de == produto.valor_unitario), valor_de: maskedMoney(parseFloat(produto.valor_de)), gratis: parseFloat(produto.valor_total) <= 0, valor_total: maskedMoney(parseFloat(produto.valor_total)), valor_unitario: maskedMoney(parseFloat(produto.valor_unitario)), cupom: (dados.cupom && produto.valor_com_desconto) ? dados.cupom : null, cupom: (dados.cupom && typeof produto.id_desconto_percentual !== 'undefined' && produto.id_desconto_percentual) ? dados.cupom : null, cupom: (dados.cupom && typeof produto.id_desconto_valor !== 'undefined' && produto.id_desconto_valor) ? dados.cupom : null, // valor_com_desconto : (dados.cupom && produto.valor_com_desconto) ? maskedMoney( parseFloat(produto.valor_com_desconto / produto.quantidade) ) : produto.valor_com_desconto, valor_com_desconto_cupom: (dados.cupom && produto.valor_com_desconto) ? maskedMoney(parseFloat(produto.valor_com_desconto / produto.quantidade)) : produto.valor_com_desconto, }; produto = $.extend(produto, valores_produto); component.innerHTML = Mustache.render(require('text!produto-carrinho.html'), produto); $('[data-toggle=tooltip]', component).stop().tooltip(); emit(dados); Component.emit('carrinho::atualiza-cortesias', dados); } } function normalizaProdutos(produtos) { return ((Array.isArray(produtos)) ? produtos : Object.keys(produtos).map(function (e) { return produtos[e]; })); } function adicionaProdutoAoCarrinho(component, event, valor) { var data_selecionada = $('input[name="dataSelecionada"]').val(); var $quantidade = $('.produto_comprar-quantidade:visible', component); var quantidade = $quantidade.length ? $quantidade.val() : 1; var especial = $('.produto_variantes input:checked', component).val(); var produtoId = component.attributes['data-uid'].value; var id_grupo_sessao_volpe = $('.detalhe-produto_resumo').data('id-volpe'); var data_volpe_selecionada = $('.detalhe-produto_resumo').data('date-volpe'); // Converter para o formato YYYY/MM/DD if (data_volpe_selecionada) { var dataParts = data_volpe_selecionada.split('/'); data_volpe_selecionada = dataParts[2] + '/' + dataParts[1] + '/' + dataParts[0]; } if (especial !== '0' && especial !== undefined) { onModalOpen(component, event); componenteAtual = component; return; } if (id_grupo_sessao_volpe === null || id_grupo_sessao_volpe === undefined || id_grupo_sessao_volpe === '' || id_grupo_sessao_volpe === 0) { adicionarProduto(); return; } // Caso exista id_grupo_sessao_volpe, faz a verificação $.post('/api/compra/controle-sessao', { id_grupo_sessao_volpe: id_grupo_sessao_volpe, qt_escolhida: quantidade, data_selecionada: data_volpe_selecionada, }) .done(function(res) { if (res.status === 'bloqueado') { // Não chama adicionarProduto() se bloqueado var $row = $('.detalhe-produto_compra > .row'); var $urlPath = window.location.pathname; var $textoBotao = 'Comprar'; var $alertText = 'Desculpe, a quantidade selecionada está indisponível no momento. Por favor, escolha uma quantidade menor e tente novamente'; if ($urlPath.includes('/en/')) { $textoBotao = 'Purchase'; $alertText = 'Sorry, the selected quantity is unavailable at the moment. Please choose a smaller amount and try again.'; } else if ($urlPath.includes('/es/')) { $textoBotao = 'Comprar'; $alertText = 'Lo siento, la cantidad seleccionada no está disponible en este momento. Por favor, elige una cantidad menor y vuelve a intentarlo.'; } $row.empty(); $row.append(`
${$alertText}
`); // Após exibir a mensagem de erro, caso haja uma alteração na quantidade, // recria o conteúdo original setTimeout(function() { $quantidade.off('change').on('change', function() { var originalContent = `
${$textoBotao}
`; $('.detalhe-produto_compra').html(originalContent); }); }, 100); return; } // Caso contrário, permite adicionarProduto(); }) .fail(function() { // Em caso de erro na requisição, também permite adicionarProduto(); }); function adicionarProduto() { $.post('/api/compra/adicionar-produto-carrinho', { produto: produtoId, quantidade: quantidade, especial: especial, data_selecionada: data_selecionada, id_grupo_sessao_volpe: id_grupo_sessao_volpe }) .done(function (xhr) { processaRetornoCompra(xhr, produtoId); }) .fail(processaErroCompra); } } function processaRetornoCompra(xhr, uid = null) { require(['text!modal-compra.html'], function () { $(Mustache.render(require('text!modal-compra.html'), xhr)) .appendTo('body') .modal('show') .on('hidden.bs.modal', removeMe); Component.emit('carrinho::update', xhr); }); if (typeof rtbhEvents !== "undefined" && uid && xhr.produtos) { xhr.produtos.forEach(function (data) { if (data.uid == uid) { (rtbhEvents = window.rtbhEvents || []).push({ eventType: 'basketadd', offerId: data.codigo }, { eventType: 'uid', id: xhr.usuario_tag_id }); } }); } if (typeof ttq !== "undefined" && ttq && uid && xhr.produtos) { xhr.produtos.forEach(function (data) { if (data.uid == uid) { ttq.track('AddToCart', { contents: [ { content_id: data.codigo, content_type: 'product', content_category: typeof data.tipo_nome !== 'undefined' ? data.tipo_nome : 'Passaportes', price: data.valor_unitario, quantity: data.quantidade, description: data.nome, content_name: typeof data.tipo_nome !== 'undefined' ? data.tipo_nome : 'Passaportes', } ], currency: "BRL", value: data.quantidade * data.valor_unitario, }, { event_id: 'event' + Math.floor(new Date().getTime() / 1000) } ); } }); } if (uid && xhr.produtos && xhr.produtos.forEach && window.usuariologado && false) { xhr.produtos.forEach(function (data) { if (data.uid == uid) { var date = new Date(); var myHeaders = new Headers(); myHeaders.append("Content-Type", "application/json"); var raw = JSON.stringify({ "data": [ { "event_name": "add_to_cart", "action_source": "website", "event_time": Math.floor(date.getTime() / 1000), "advertiser_id": "549763382604", "event_id": "eventId0001", "user_data": window.usuariologado, "custom_data": { "currency": "BRL", "content_ids": [data.codigo], "contents": [ { "item_price": data.valor_unitario, "quantity": data.quantidade } ] }, } ] }); var requestOptions = { method: 'POST', headers: myHeaders, body: raw, redirect: 'follow' }; fetch("https://ct.pinterest.com/events/v3/", requestOptions) .then(response => response.text()) .then(result => console.log(result)) .catch(error => console.log('error', error)); } }); } } function processaErroCompra(xhr) { console.log('erro na compra', xhr); } function aoClicarContextMenu(component, event) { window.open($(this).data('url')); return false; } function aoClicarMeioLink(component, event) { window.open($(this).data('url')); } function aoClicarLink(component, event) { var newWindow = false; if (event.which == 1) { if (event.metaKey || event.ctrlKey || event.shiftKey || event.altKey) newWindow = true; } else newWindow = true; if (newWindow) window.open($(this).data('url')); else document.location.href = $(this).data('url'); } function aoClicarLinkHospedagem(component, event) { event.preventDefault(); var form = $(this).data('form'); $('.' + form).attr('target', '_blank'); $('.' + form).submit(); $('.' + form).removeAttr('target', '_blank'); } function getCookie(cname) { var name = cname + "="; var decodedCookie = decodeURIComponent(document.cookie); var ca = decodedCookie.split(';'); for (var i = 0; i < ca.length; i++) { var c = ca[i]; while (c.charAt(0) == ' ') { c = c.substring(1); } if (c.indexOf(name) == 0) { return c.substring(name.length, c.length); } } return ""; } function onModalOpen(component, ev) { ev.preventDefault() $opcao = $('.detalhe-produto_variante:checked').parents('.filtro_opcao'); $modal = $('.filtro_opcao-modal', $opcao).clone(); $modal.remove(); $modal.attr('data-component', 'mensagem'); $modal.appendTo($opcao); $('.detalhe-produto_modal-concordo').on('click', function (event) { event.preventDefault(); /* Act on the event */ }); } }); /** * Descrição do componente $1 * */ define('newsletter', ['Component'], function () { var module = new Component('newsletter'); module.install = function () { $('.newsletter-form').submit(function (event) { event.preventDefault(); var _email = $('.newsletter-email'); $.post('/api/newsletter/salvar', { email: _email.val(), }).done(function (data) { toastr.success(data.message); _email.val(''); }).fail(function (data) { toastr.error(data.responseJSON.message); }); }); } module.elements = { }; module.bootstrap(); return module; function debug() { console.log(this, arguments); } }); define('desconto', [], function () { var mensagem = new Component('mensagem'); mensagem.install = install; return mensagem; function getModal(mensagem) { return ''; } function install() { if (this._done) return; this._done = true; var self = this; var modal = $(getModal(this.innerHTML)); modal.on('hidden.bs.modal', function () { modal.remove(); self.remove(); }); if (this.attributes['data-config']) { modal.modal(JSON.parse(this.attributes['data-config'].value)); return; } modal.modal('show'); } }); /** * Descrição do componente owl-carousel * */ define('owl-carousel', ['Component'], function () { // Declarações var self = new Component('owl-carousel'); self.install = install; self.elements = { // 'element': { event: function } }; self.options = { 'listagem-produtos': { nav: false, items: 1, margin: 1, loop: false, autoplay: true, autoplayTimeout: 7000, autoplayHoverPause: true, dots: false, onInitialized: alterarBanner, onResize: alterarBanner }, 'detalhe-combo': { nav: false, items: 5, margin: 1, loop: false, autoplay: true, autoplayTimeout: 7000, autoplayHoverPause: true, dots: false, onInitialized: alterarBanner, onResize: alterarBanner } }; // Processamento self.bootstrap(); return self; // Funções function install() { $('.owl-detalhe-pedido').owlCarousel({ loop: true, nav: true, items: 1, margin: 0, mouseDrag: false, navText: ['', ''], autoplay: true, autoplayTimeout: 7000, animateOut: 'fadeOut', animateIn: 'fadeIn', dots: false, onInitialized: alterarBanner, onResize: alterarBanner }) var $this = $(this); var attr_options = $this.data('options'); var options = null; if (attr_options) options = attr_options; if (typeof attr_options == 'string') options = self.options[attr_options]; if (!options) options = self.options.default; $('.owl-carousel', $this).owlCarousel(options); } function alterarBanner(ev) { var windowSize = $(window).width(); var windowSizeMax = ($(ev.target).is('.owl-carousel-atracoes') ? 521 : 1024); if ($(ev.target).is('[data-is-image]') == true) { $(ev.target).find(".item").each(function (index, el) { $(el).find("img").css("display", "block") if (windowSize <= windowSizeMax) { $(el).find("img").attr("src", $(this).data("mobile")) } else { $(el).find("img").attr("src", $(this).data("desktop")) } }) return; } $(ev.target).find(".item").each(function (index, el) { if (windowSize <= windowSizeMax) { $(el).css("backgroundImage", "url(" + $(this).data("mobile") + ")") } else { $(el).css("backgroundImage", "url(" + $(this).data("desktop") + ")") } }) } }); var payment = /******/ (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] = { /******/ exports: {}, /******/ id: moduleId, /******/ loaded: false /******/ }; /******/ // Execute the module function /******/ modules[moduleId].call(module.exports, module, module.exports, __webpack_require__); /******/ // Flag the module as loaded /******/ module.loaded = 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; /******/ // __webpack_public_path__ /******/ __webpack_require__.p = ""; /******/ // Load entry module and return exports /******/ return __webpack_require__(0); /******/ }) /************************************************************************/ /******/([ /* 0 */ /***/ (function (module, exports, __webpack_require__) { /* WEBPACK VAR INJECTION */(function (global) { var Payment, QJ, cardFromNumber, cardFromType, cards, defaultFormat, formatBackCardNumber, formatBackExpiry, formatCardNumber, formatExpiry, formatForwardExpiry, formatForwardSlash, formatMonthExpiry, hasTextSelected, luhnCheck, reFormatCardNumber, restrictCVC, restrictCardNumber, restrictCombinedExpiry, restrictExpiry, restrictMonthExpiry, restrictNumeric, restrictYearExpiry, setCardType, indexOf = [].indexOf || function (item) { for (var i = 0, l = this.length; i < l; i++) { if (i in this && this[i] === item) return i; } return -1; }; QJ = __webpack_require__(1); defaultFormat = /(\d{1,4})/g; cards = [ { type: 'amex', pattern: /^3[47]/, format: /(\d{1,4})(\d{1,6})?(\d{1,5})?/, length: [15], cvcLength: [4], luhn: true }, { type: 'dankort', pattern: /^5019/, format: defaultFormat, length: [16], cvcLength: [3], luhn: true }, { type: 'dinersclub', pattern: /^(36|38|30[0-5])/, format: /(\d{1,4})(\d{1,6})?(\d{1,4})?/, length: [14], cvcLength: [3], luhn: true }, { type: 'discover', pattern: /^(6011|64[4-9]|622)/, format: defaultFormat, length: [16], cvcLength: [3], luhn: true }, { type: 'jcb', pattern: /^35/, format: defaultFormat, length: [16], cvcLength: [3], luhn: true }, { type: 'laser', pattern: /^(6706|6771|6709)/, format: defaultFormat, length: [16, 17, 18, 19], cvcLength: [3], luhn: true }, { type: 'maestro', pattern: /^(5018|5020|5038|6304|6703|6708|6759|676[1-3])/, format: defaultFormat, length: [12, 13, 14, 15, 16, 17, 18, 19], cvcLength: [3], luhn: true }, { type: 'mastercard', pattern: /^(5[1-5]|677189)|^(222[1-9]|2[3-6]\d{2}|27[0-1]\d|2720)/, format: defaultFormat, length: [16], cvcLength: [3], luhn: true }, { type: 'unionpay', pattern: /^62/, format: defaultFormat, length: [16, 17, 18, 19], cvcLength: [3], luhn: false }, { type: 'visaelectron', pattern: /^4(026|17500|405|508|844|91[37])/, format: defaultFormat, length: [16], cvcLength: [3], luhn: true }, { type: 'elo', pattern: /^(4011(78|79)|65|43(1274|8935)|45(1416|7393|763(1|2))|50(4175|6699|67[0-7][0-9]|9000)|50(9[0-9][0-9][0-9])|627780|63(6297|6368)|650(03([^4])|04([0-9])|05(0|1)|05([7-9])|06([0-9])|07([0-9])|08([0-9])|4([0-3][0-9]|8[5-9]|9[0-9])|5([0-9][0-9]|3[0-8])|9([0-6][0-9]|7[0-8])|7([0-2][0-9])|541|700|720|727|901)|65165([2-9])|6516([6-7][0-9])|65500([0-9])|6550([0-5][0-9])|655021|65505([6-7])|6516([8-9][0-9])|65170([0-4]))/, format: defaultFormat, length: [16], cvcLength: [3], luhn: true }, { type: 'hipercard', pattern: /^(606282\d{10}(\d{3})?)|(3841(0|4|6)0\d{13})$/, format: { exec: function (e) { return e; } }, length: [13, 16, 19], cvcLength: [3], luhn: true }, { type: 'visa', pattern: /^4/, format: defaultFormat, length: [13, 16, 19], cvcLength: [3], luhn: true } ]; cardFromNumber = function (num) { var card, j, len; num = (num + '').replace(/\D/g, ''); for (j = 0, len = cards.length; j < len; j++) { card = cards[j]; if (card.pattern.test(num)) { return card; } } }; cardFromType = function (type) { var card, j, len; for (j = 0, len = cards.length; j < len; j++) { card = cards[j]; if (card.type === type) { return card; } } }; luhnCheck = function (num) { var digit, digits, j, len, odd, sum; odd = true; sum = 0; digits = (num + '').split('').reverse(); for (j = 0, len = digits.length; j < len; j++) { digit = digits[j]; digit = parseInt(digit, 10); if ((odd = !odd)) { digit *= 2; } if (digit > 9) { digit -= 9; } sum += digit; } return sum % 10 === 0; }; hasTextSelected = function (target) { var e, error, ref; try { if ((target.selectionStart != null) && target.selectionStart !== target.selectionEnd) { return true; } if ((typeof document !== "undefined" && document !== null ? (ref = document.selection) != null ? ref.createRange : void 0 : void 0) != null) { if (document.selection.createRange().text) { return true; } } } catch (error) { e = error; } return false; }; reFormatCardNumber = function (e) { return setTimeout((function (_this) { return function () { var target, value; target = e.target; value = QJ.val(target); value = Payment.fns.formatCardNumber(value); QJ.val(target, value); return QJ.trigger(target, 'change'); }; })(this)); }; formatCardNumber = function (maxLength) { return function (e) { var card, digit, i, j, len, length, re, target, upperLength, upperLengths, value; digit = String.fromCharCode(e.which); if (!/^\d+$/.test(digit)) { return; } target = e.target; value = QJ.val(target); card = cardFromNumber(value + digit); length = (value.replace(/\D/g, '') + digit).length; upperLengths = [16]; if (card) { upperLengths = card.length; } if (maxLength) { upperLengths = [Math.min(maxLength, upperLengths.slice(0).pop())]; } for (i = j = 0, len = upperLengths.length; j < len; i = ++j) { upperLength = upperLengths[i]; if (length >= upperLength && upperLengths[i + 1]) { continue; } if (length >= upperLength) { return; } } if (hasTextSelected(target)) { return; } if (card && card.type === 'amex') { re = /^(\d{4}|\d{4}\s\d{6})$/; } else { re = /(?:^|\s)(\d{4})$/; } if (re.test(value)) { e.preventDefault(); QJ.val(target, value + ' ' + digit); return QJ.trigger(target, 'change'); } }; }; formatBackCardNumber = function (e) { var target, value; target = e.target; value = QJ.val(target); if (e.meta) { return; } if (e.which !== 8) { return; } if (hasTextSelected(target)) { return; } if (/\d\s$/.test(value)) { e.preventDefault(); QJ.val(target, value.replace(/\d\s$/, '')); return QJ.trigger(target, 'change'); } else if (/\s\d?$/.test(value)) { e.preventDefault(); QJ.val(target, value.replace(/\s\d?$/, '')); return QJ.trigger(target, 'change'); } }; formatExpiry = function (e) { var digit, target, val; digit = String.fromCharCode(e.which); if (!/^\d+$/.test(digit)) { return; } target = e.target; val = QJ.val(target) + digit; if (/^\d$/.test(val) && (val !== '0' && val !== '1')) { e.preventDefault(); QJ.val(target, "0" + val + " / "); return QJ.trigger(target, 'change'); } else if (/^\d\d$/.test(val)) { e.preventDefault(); QJ.val(target, val + " / "); return QJ.trigger(target, 'change'); } }; formatMonthExpiry = function (e) { var digit, target, val; digit = String.fromCharCode(e.which); if (!/^\d+$/.test(digit)) { return; } target = e.target; val = QJ.val(target) + digit; if (/^\d$/.test(val) && (val !== '0' && val !== '1')) { e.preventDefault(); QJ.val(target, "0" + val); return QJ.trigger(target, 'change'); } else if (/^\d\d$/.test(val)) { e.preventDefault(); QJ.val(target, "" + val); return QJ.trigger(target, 'change'); } }; formatForwardExpiry = function (e) { var digit, target, val; digit = String.fromCharCode(e.which); if (!/^\d+$/.test(digit)) { return; } target = e.target; val = QJ.val(target); if (/^\d\d$/.test(val)) { QJ.val(target, val + " / "); return QJ.trigger(target, 'change'); } }; formatForwardSlash = function (e) { var slash, target, val; slash = String.fromCharCode(e.which); if (slash !== '/') { return; } target = e.target; val = QJ.val(target); if (/^\d$/.test(val) && val !== '0') { QJ.val(target, "0" + val + " / "); return QJ.trigger(target, 'change'); } }; formatBackExpiry = function (e) { var target, value; if (e.metaKey) { return; } target = e.target; value = QJ.val(target); if (e.which !== 8) { return; } if (hasTextSelected(target)) { return; } if (/\d(\s|\/)+$/.test(value)) { e.preventDefault(); QJ.val(target, value.replace(/\d(\s|\/)*$/, '')); return QJ.trigger(target, 'change'); } else if (/\s\/\s?\d?$/.test(value)) { e.preventDefault(); QJ.val(target, value.replace(/\s\/\s?\d?$/, '')); return QJ.trigger(target, 'change'); } }; restrictNumeric = function (e) { var input; if (e.metaKey || e.ctrlKey) { return true; } if (e.which === 32) { return e.preventDefault(); } if (e.which === 0) { return true; } if (e.which < 33) { return true; } input = String.fromCharCode(e.which); if (!/[\d\s]/.test(input)) { return e.preventDefault(); } }; restrictCardNumber = function (maxLength) { return function (e) { var card, digit, length, target, value; target = e.target; digit = String.fromCharCode(e.which); if (!/^\d+$/.test(digit)) { return; } if (hasTextSelected(target)) { return; } value = (QJ.val(target) + digit).replace(/\D/g, ''); card = cardFromNumber(value); length = 16; if (card) { length = card.length[card.length.length - 1]; } if (maxLength) { length = Math.min(length, maxLength); } if (!(value.length <= length)) { return e.preventDefault(); } }; }; restrictExpiry = function (e, length) { var digit, target, value; target = e.target; digit = String.fromCharCode(e.which); if (!/^\d+$/.test(digit)) { return; } if (hasTextSelected(target)) { return; } value = QJ.val(target) + digit; value = value.replace(/\D/g, ''); if (value.length > length) { return e.preventDefault(); } }; restrictCombinedExpiry = function (e) { return restrictExpiry(e, 6); }; restrictMonthExpiry = function (e) { return restrictExpiry(e, 2); }; restrictYearExpiry = function (e) { return restrictExpiry(e, 4); }; restrictCVC = function (e) { var digit, target, val; target = e.target; digit = String.fromCharCode(e.which); if (!/^\d+$/.test(digit)) { return; } if (hasTextSelected(target)) { return; } val = QJ.val(target) + digit; if (!(val.length <= 4)) { return e.preventDefault(); } }; setCardType = function (e) { var allTypes, card, cardType, target, val; target = e.target; val = QJ.val(target); cardType = Payment.fns.cardType(val) || 'unknown'; if (!QJ.hasClass(target, cardType)) { allTypes = (function () { var j, len, results; results = []; for (j = 0, len = cards.length; j < len; j++) { card = cards[j]; results.push(card.type); } return results; })(); QJ.removeClass(target, 'unknown'); QJ.removeClass(target, allTypes.join(' ')); QJ.addClass(target, cardType); QJ.toggleClass(target, 'identified', cardType !== 'unknown'); return QJ.trigger(target, 'payment.cardType', cardType); } }; Payment = (function () { function Payment() { } Payment.fns = { cardExpiryVal: function (value) { var month, prefix, ref, year; value = value.replace(/\s/g, ''); ref = value.split('/', 2), month = ref[0], year = ref[1]; if ((year != null ? year.length : void 0) === 2 && /^\d+$/.test(year)) { prefix = (new Date).getFullYear(); prefix = prefix.toString().slice(0, 2); year = prefix + year; } month = parseInt(month, 10); year = parseInt(year, 10); return { month: month, year: year }; }, validateCardNumber: function (num) { var card, ref; num = (num + '').replace(/\s+|-/g, ''); if (!/^\d+$/.test(num)) { return false; } card = cardFromNumber(num); if (!card) { return false; } return (ref = num.length, indexOf.call(card.length, ref) >= 0) && (card.luhn === false || luhnCheck(num)); }, validateCardExpiry: function (month, year) { var currentTime, expiry, prefix, ref, ref1; if (typeof month === 'object' && 'month' in month) { ref = month, month = ref.month, year = ref.year; } else if (typeof month === 'string' && indexOf.call(month, '/') >= 0) { ref1 = Payment.fns.cardExpiryVal(month), month = ref1.month, year = ref1.year; } if (!(month && year)) { return false; } month = QJ.trim(month); year = QJ.trim(year); if (!/^\d+$/.test(month)) { return false; } if (!/^\d+$/.test(year)) { return false; } month = parseInt(month, 10); if (!(month && month <= 12)) { return false; } if (year.length === 2) { prefix = (new Date).getFullYear(); prefix = prefix.toString().slice(0, 2); year = prefix + year; } expiry = new Date(year, month); currentTime = new Date; expiry.setMonth(expiry.getMonth() - 1); expiry.setMonth(expiry.getMonth() + 1, 1); return expiry > currentTime; }, validateCardCVC: function (cvc, type) { var ref, ref1; cvc = QJ.trim(cvc); if (!/^\d+$/.test(cvc)) { return false; } if (type && cardFromType(type)) { return ref = cvc.length, indexOf.call((ref1 = cardFromType(type)) != null ? ref1.cvcLength : void 0, ref) >= 0; } else { return cvc.length >= 3 && cvc.length <= 4; } }, cardType: function (num) { var ref; if (!num) { return null; } return ((ref = cardFromNumber(num)) != null ? ref.type : void 0) || null; }, formatCardNumber: function (num) { var card, groups, ref, upperLength; card = cardFromNumber(num); if (!card) { return num; } upperLength = card.length[card.length.length - 1]; num = num.replace(/\D/g, ''); num = num.slice(0, upperLength); if (card.format.global) { return (ref = num.match(card.format)) != null ? ref.join(' ') : void 0; } else { groups = card.format.exec(num); if (groups == null) { return; } groups.shift(); groups = groups.filter(function (n) { return n; }); return groups.join(' '); } } }; Payment.restrictNumeric = function (el) { return QJ.on(el, 'keypress', restrictNumeric); }; Payment.cardExpiryVal = function (el) { return Payment.fns.cardExpiryVal(QJ.val(el)); }; Payment.formatCardCVC = function (el) { Payment.restrictNumeric(el); QJ.on(el, 'keypress', restrictCVC); return el; }; Payment.formatCardExpiry = function (el) { var month, year; Payment.restrictNumeric(el); if (el.length && el.length === 2) { month = el[0], year = el[1]; this.formatCardExpiryMultiple(month, year); } else { QJ.on(el, 'keypress', restrictCombinedExpiry); QJ.on(el, 'keypress', formatExpiry); QJ.on(el, 'keypress', formatForwardSlash); QJ.on(el, 'keypress', formatForwardExpiry); QJ.on(el, 'keydown', formatBackExpiry); } return el; }; Payment.formatCardExpiryMultiple = function (month, year) { QJ.on(month, 'keypress', restrictMonthExpiry); QJ.on(month, 'keypress', formatMonthExpiry); return QJ.on(year, 'keypress', restrictYearExpiry); }; Payment.formatCardNumber = function (el, maxLength) { Payment.restrictNumeric(el); QJ.on(el, 'keypress', restrictCardNumber(maxLength)); QJ.on(el, 'keypress', formatCardNumber(maxLength)); QJ.on(el, 'keydown', formatBackCardNumber); QJ.on(el, 'keyup blur', setCardType); QJ.on(el, 'paste', reFormatCardNumber); return el; }; Payment.getCardArray = function () { return cards; }; Payment.setCardArray = function (cardArray) { cards = cardArray; return true; }; Payment.addToCardArray = function (cardObject) { return cards.push(cardObject); }; Payment.removeFromCardArray = function (type) { var key, value; for (key in cards) { value = cards[key]; if (value.type === type) { cards.splice(key, 1); } } return true; }; return Payment; })(); module.exports = Payment; global.Payment = Payment; /* WEBPACK VAR INJECTION */ }.call(exports, (function () { return this; }()))) /***/ }), /* 1 */ /***/ (function (module, exports) { // Generated by CoffeeScript 1.10.0 (function () { var QJ, rreturn, rtrim; QJ = function (selector) { if (QJ.isDOMElement(selector)) { return selector; } return document.querySelectorAll(selector); }; QJ.isDOMElement = function (el) { return el && (el.nodeName != null); }; rtrim = /^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g; QJ.trim = function (text) { if (text === null) { return ""; } else { return (text + "").replace(rtrim, ""); } }; rreturn = /\r/g; QJ.val = function (el, val) { var ret; if (arguments.length > 1) { return el.value = val; } else { ret = el.value; if (typeof ret === "string") { return ret.replace(rreturn, ""); } else { if (ret === null) { return ""; } else { return ret; } } } }; QJ.preventDefault = function (eventObject) { if (typeof eventObject.preventDefault === "function") { eventObject.preventDefault(); return; } eventObject.returnValue = false; return false; }; QJ.normalizeEvent = function (e) { var original; original = e; e = { which: original.which != null ? original.which : void 0, target: original.target || original.srcElement, preventDefault: function () { return QJ.preventDefault(original); }, originalEvent: original, data: original.data || original.detail }; if (e.which == null) { e.which = original.charCode != null ? original.charCode : original.keyCode; } return e; }; QJ.on = function (element, eventName, callback) { var el, i, j, len, len1, multEventName, originalCallback, ref; if (element.length) { for (i = 0, len = element.length; i < len; i++) { el = element[i]; QJ.on(el, eventName, callback); } return; } if (eventName.match(" ")) { ref = eventName.split(" "); for (j = 0, len1 = ref.length; j < len1; j++) { multEventName = ref[j]; QJ.on(element, multEventName, callback); } return; } originalCallback = callback; callback = function (e) { e = QJ.normalizeEvent(e); return originalCallback(e); }; if (element.addEventListener) { return element.addEventListener(eventName, callback, false); } if (element.attachEvent) { eventName = "on" + eventName; return element.attachEvent(eventName, callback); } element['on' + eventName] = callback; }; QJ.addClass = function (el, className) { var e; if (el.length) { return (function () { var i, len, results; results = []; for (i = 0, len = el.length; i < len; i++) { e = el[i]; results.push(QJ.addClass(e, className)); } return results; })(); } if (el.classList) { return el.classList.add(className); } else { return el.className += ' ' + className; } }; QJ.hasClass = function (el, className) { var e, hasClass, i, len; if (el.length) { hasClass = true; for (i = 0, len = el.length; i < len; i++) { e = el[i]; hasClass = hasClass && QJ.hasClass(e, className); } return hasClass; } if (el.classList) { return el.classList.contains(className); } else { return new RegExp('(^| )' + className + '( |$)', 'gi').test(el.className); } }; QJ.removeClass = function (el, className) { var cls, e, i, len, ref, results; if (el.length) { return (function () { var i, len, results; results = []; for (i = 0, len = el.length; i < len; i++) { e = el[i]; results.push(QJ.removeClass(e, className)); } return results; })(); } if (el.classList) { ref = className.split(' '); results = []; for (i = 0, len = ref.length; i < len; i++) { cls = ref[i]; results.push(el.classList.remove(cls)); } return results; } else { return el.className = el.className.replace(new RegExp('(^|\\b)' + className.split(' ').join('|') + '(\\b|$)', 'gi'), ' '); } }; QJ.toggleClass = function (el, className, bool) { var e; if (el.length) { return (function () { var i, len, results; results = []; for (i = 0, len = el.length; i < len; i++) { e = el[i]; results.push(QJ.toggleClass(e, className, bool)); } return results; })(); } if (bool) { if (!QJ.hasClass(el, className)) { return QJ.addClass(el, className); } } else { return QJ.removeClass(el, className); } }; QJ.append = function (el, toAppend) { var e; if (el.length) { return (function () { var i, len, results; results = []; for (i = 0, len = el.length; i < len; i++) { e = el[i]; results.push(QJ.append(e, toAppend)); } return results; })(); } return el.insertAdjacentHTML('beforeend', toAppend); }; QJ.find = function (el, selector) { if (el instanceof NodeList || el instanceof Array) { el = el[0]; } return el.querySelectorAll(selector); }; QJ.trigger = function (el, name, data) { var e, error, ev; try { ev = new CustomEvent(name, { detail: data }); } catch (error) { e = error; ev = document.createEvent('CustomEvent'); if (ev.initCustomEvent) { ev.initCustomEvent(name, true, true, data); } else { ev.initEvent(name, true, true, data); } } return el.dispatchEvent(ev); }; module.exports = QJ; }).call(this); /***/ }) /******/]); define("payment", function () { }); define('credit-card', [ 'Component', 'utils', 'payment' ], function () { var Component = require('Component'); var utils = require('utils'); var component = new Component('credit-card'); var resume_template = ""; var val_lock = false; var handledCardInputPattern = { keyup: setaEstadoCartao, focus: focusMe, blur: blurMe }; component.elements = { 'qtd': { change: onChangeNumberOfCards }, 'next': { click: toNextCard }, 'prev': { click: toPrevCard }, 'value': { change: aoAlterarValor }, 'numero': handledCardInputPattern, 'expiracao': handledCardInputPattern, 'nome': handledCardInputPattern, 'cvc': { keyup: setaEstadoCartao, focus: focusCVC, blur: blurCVC }, 'installments': { change: onSetInstallments }, 'input-document': { focus: onFocusDocument, blur: onBlurDocument } } var getCardTypes = memoize(cardTypes); var getCardsClasses = memoize(cardsClasses); var getCardTypesByName = memoize(cardTypesByName); Component.on('credit-card::resume', updateCreditCardResume); component.install = install; component.bootstrap(); return component; function onSetInstallments(component) { Component.emit('credit-card::resume', component); } function focusCVC(component) { $('.jp-card', component).addClass('jp-card-flipped'); focusMe.call(this, component); } function blurCVC(component) { $('.jp-card', component).removeClass('jp-card-flipped'); blurMe.call(this, component); } function focusMe(component) { $('.jp-card-focused', component).removeClass('jp-card-focused'); $($(this).data('focusTo'), component).addClass('jp-card-focused'); } function blurMe(component) { $($(this).data('focusTo'), component).removeClass('jp-card-focused'); } function updateCreditCardResume(data) { var data = utils.dom.serialize(data); data.cartao = Object .keys(data.cartao || {}) .map(function (key) { var obj = data.cartao[key]; obj.n = key; return obj; }) .filter(function (obj) { return ( obj.numero && obj.valor && obj.expiracao && obj.nome && obj.cpf && obj.parcelas.length == 1 ); }) .map(function (card) { card.final = card.numero.split(' ').join('').split('').slice(-4).join(''); card.valor = "R$ " + card.valor; card.parcela = card.parcelas.reduce(function (c, e) { return e.text || c; }, "").split('R$').join("R$ "); return card }); ; $('.credit-card_resume-wrapper').html(Mustache.render(resume_template, data)) } function install() { var $this = $(this); var data = $this.data(); var $templateEl = $('.credit-card_card-template'); //resetCard(this); if ($templateEl.length) this.template = $templateEl.html(); if (data['max-cartoes']) $('.credit-card_qtd', $this).html(criaOptions(data['max-cartoes'])); var $resumeTemplateEl = $('.credit-card_resume-template'); if ($resumeTemplateEl.length) resume_template = $resumeTemplateEl.html(); setaEstadoCartao(this); installHandler(this); installInterfaces(this); config = { subtree: false, childList: false, attributes: true }; const elementToObserve = document.querySelector('.pagamento_pagamento-formulario'); if (elementToObserve) { // if (window.innerWidth > 767) { var isForeigner = window.sessionStorage.getItem('foreigner'); //Cadastros PT-BR e ESTRANGEIRO if (!isForeigner && elementToObserve.getAttribute('style') !== 'display: none;') { controllerCarteiraDigital(); return; } var observer = new MutationObserver(function (e) { if (!window.sessionStorage.getItem('foreigner')) { controllerCarteiraDigital(); observer.disconnect() }; }); observer.observe(elementToObserve, config); // } } } function installInterfaces(component) { // Check if isValid property already exists if (!component.hasOwnProperty('isValid')) { Object.defineProperty(component, 'isValid', { get: function () { return $('.credit-card_form-body .credit-card_numero', component) .toArray() .reduce(function (resultado, elemento) { return resultado && Payment.fns.validateCardNumber($(elemento).val()) }, true); } }); } } function installArray(selector, fn) { $(selector) .not('is-installed') .toArray() .forEach(function (el) { fn(el); $(el).addClass('is-installed'); }); } function installHandler(component) { installArray('.credit-card_numero', Payment.formatCardNumber); installArray('.credit-card_expiracao', Payment.formatCardExpiry); installArray('.credit-card_cvc', Payment.formatCardCVC); } function multiplicaTemplate(quantidade, template_fn) { return Array.apply(null, { length: quantidade }) .map(template_fn) .join(''); } function cardTypesByName() { return Payment.getCardArray().reduce(function (c, e) { c[e.type] = e; return c }, {}); } function resetCard(container) { } function cardTypes() { return Payment.getCardArray().map(function (e) { return e.type; }); } function cardsClasses() { return getCardTypes().map(function (e) { return 'jp-card-' + e; }); } function checkCCValidity() { if (Payment.fns.validateCardNumber($(this).val())) { this.setCustomValidity(""); return $(this).parent().removeClass('has-danger'); } var self = this; window._cnn = self; self.setCustomValidity(self.getAttribute('data-invalid-text')); if (!val_lock) setTimeout(function () { //self.reportValidity(); val_lock = false; }); val_lock = true; $(this).parent().addClass('has-danger'); } function checkCCVCV() { if (Payment.fns.validateCardCVC($(this).val(), $(this).parents('.credit-card_form-body').find('.credit-card_cvc').val())) { this.setCustomValidity(""); return $(this).parent().removeClass('has-danger'); } var self = this; self.setCustomValidity(self.getAttribute('data-invalid-text')); if (!val_lock) setTimeout(function () { /*self.reportValidity();*/ val_lock = false; }); val_lock = true; $(this).parent().addClass('has-danger'); } function checkCCExp() { if (Payment.fns.validateCardExpiry($(this).val(), $(this).parents('.credit-card_form-body').find('.credit-card_cvc').val())) { this.setCustomValidity(""); return $(this).parent().removeClass('has-danger'); } var self = this; self.setCustomValidity(self.getAttribute('data-invalid-text')); if (!val_lock) setTimeout(function () { /*self.reportValidity();*/ val_lock = false; }); val_lock = true; $(this).parent().addClass('has-danger'); } function setaEstadoCartao(component) { var $numero = $('.credit-card_form-body.is-active .credit-card_numero', component); var $exp = $('.credit-card_form-body.is-active .credit-card_expiracao', component); var $nome = $('.credit-card_form-body.is-active .credit-card_nome', component); var $cvc = $('.credit-card_form-body.is-active .credit-card_cvc', component); $('.credit-card_form-body.is-active .jp-card-logo').each((index, value) => { value.style.display = 'none'; }) $numero.off('keyup', checkCCValidity); $numero.on('keyup', checkCCValidity); $cvc.off('keyup', checkCCVCV); $cvc.on('keyup', checkCCVCV); $exp.off('keyup', checkCCExp); $exp.on('keyup', checkCCExp); var bandeira = Payment.fns.cardType($numero.val()); var $card = $('.jp-card', component); if (bandeira) { $('.credit-card_form-body.is-active .credit-card_bandeira', component).val(bandeira); } // $card.find( '.jp-card-number.jp-card-display' ).html( $numero.val() || '•••• •••• •••• ••••' ); // $card.find('.jp-card-expiry.jp-card-display').html( $exp.val().split(' ').join('') || '••/••' ); // $card.find('.jp-card-name.jp-card-display').html( $nome.val() || 'Nome Completo' ); // $card.find('.jp-card-cvc.jp-card-display').html( $cvc.val() || '•••' ); var actual = $('.credit-card_form-body.is-active').index(); var max = $('.credit-card_form-body').length - 1; if (!actual) $('.credit-card_prev').fadeOut(150); if (actual) $('.credit-card_prev').fadeIn(300); if (actual == max) $('.credit-card_next').fadeOut(315); if (actual != max) $('.credit-card_next').fadeIn(300); Component.emit('credit-card::resume', component); $card.removeClass(['jp-card-unknown'].concat(getCardsClasses()).join(' ')); if (!bandeira) return $card.addClass('jp-card-unknown'); $card.addClass('jp-card-identified jp-card-' + bandeira); $('.credit-card_form-body.is-active .jp-card-logo.jp-card-' + bandeira).css('display', 'block'); calculaValorUltimoCartao(component); } function criaOptions(q) { return multiplicaTemplate(q, aplicaNumeroAoTemplate); function aplicaNumeroAoTemplate(vazio, numero) { return ''.split('{{n}}').join(numero + 1); } } function criaNInputs(quantidade, inicio, template) { inicio += 1; return multiplicaTemplate(quantidade, aplicaNumeroAoTemplate); function aplicaNumeroAoTemplate(vazio, numero) { return template.split('{{n}}').join(numero + inicio); } } function criaParcelas(valor, component) { var dados = $(component).data(); var parcelas = Math.floor(valor / parseFloat(dados['minParcela'])); if (parcelas > dados['maxParcelas']) parcelas = dados['maxParcelas']; if (!parcelas) return criaOptionParcelas(null, 0); return multiplicaTemplate(parcelas, criaOptionParcelas); function criaOptionParcelas(vazio, parcela) { var p = parcela + 1; return ''.split('{{n}}') .join(p) .split('{{texto}}') .join( (p + 'x R$' + (floatToBRL(valor / p))) ); } } function calculaTotalSelecionadoCartao($cartoes) { return $cartoes .toArray() .slice(0, -1) .filter(function (e) { return $('.credit-card_numero', e).val() }) .map(function (el) { return parseFloat($('.credit-card_value', el).val().split('.').join('').split(',').join('.')) || 0; }) .reduce(function (c, e) { return c + e; }, 0); } function calculaValorUltimoCartao(component) { var $cartoes = $('.credit-card_form-body', component); var dados = $(component).data(); var total = calculaTotalSelecionadoCartao($cartoes); var valor_ultimo_cartao = dados.total - total; var pode_enviar = utils.dom.validate($('.credit-card_form-body.is-active'), false); pode_enviar = pode_enviar && $('.credit-card_form-body.is-active .has-danger').length == 0; var nao_completos = $cartoes.filter(function (i, el) { return !el.classList.contains('is-active') && !$('.credit-card_numero', el).val() }); valor_ultimo_cartao = valor_ultimo_cartao / (nao_completos.length || 1); if (valor_ultimo_cartao > 0 && pode_enviar) { $('.credit-card_alert').fadeOut(300); $('.credit-card_next').removeClass('disabled').removeClass('is-disabled'); } else { if ($cartoes.length > 1) $('.credit-card_alert').fadeIn(150); if ($cartoes.length == 1) $('.credit-card_alert').fadeOut(300); $('.credit-card_next').addClass('disabled').addClass('is-disabled'); } $('.credit-card_value', $cartoes).removeClass('disabled'); var inputs_nao_preenchidos = $('.credit-card_value', nao_completos) .val(floatToBRL(valor_ultimo_cartao)) .toArray(); var ultimo_input = $('.credit-card_value', $cartoes.last()); ultimo_input .val(floatToBRL(valor_ultimo_cartao)) .addClass('disabled'); if ($cartoes.length == 1) { ultimo_input.val(floatToBRL(dados.total)); ajusta_select_parcelas($cartoes, dados.total, component); } setTimeout(function () { inputs_nao_preenchidos .forEach(function (ultimo_input) { aoAlterarValor.call(ultimo_input, component, true); }); ajusta_select_parcelas( ultimo_input.parents('.credit-card_form-body'), valor_ultimo_cartao, component ); Component.emit('credit-card::resume', component); }) } function ajusta_select_parcelas(input, valor, component) { var html = criaParcelas(valor, component); var $parcelas = input.find('.credit-card_installments'); var last = $parcelas.val(); $parcelas.html(html); var $last = $parcelas.find('option[value="' + last + '"]'); if ($last.length) $last.prop('selected', true); if (!$last.length) $parcelas.find('option').last().prop('selected', true); } function aoAlterarValor(component, naoCalcular) { var value = BRLToFloat(this.value); var total = $(component).data('total'); var self = this; var $cartoes = $('.credit-card_form-body', component).filter(function (i, el) { var valid = utils.dom.validate($('.credit-card_form-body.is-active'), false); return valid && !($(self).parents('.credit-card_form-body').get(0) == el); }); var total_cartoes = calculaTotalSelecionadoCartao($cartoes); var valor_ultimo_cartao = total - total_cartoes; if (value > valor_ultimo_cartao && valor_ultimo_cartao > 0) { value = valor_ultimo_cartao; $(this).val(floatToBRL(valor_ultimo_cartao)); } if (value > total) { value = total; $(this).val(floatToBRL(total)); } if (value < 0) value = 0; var html = criaParcelas(value, component); var $parcelas = $(this).parents('.credit-card_form-body').find('.credit-card_installments'); var last = $parcelas.val(); $parcelas.html(html); var $last = $parcelas.find('option[value="' + last + '"]'); if ($last.length) $last.prop('selected', true); if (!$last.length) $parcelas.find('option').last().prop('selected', true); if (naoCalcular === true) return; calculaValorUltimoCartao(component); } function onChangeNumberOfCards(component) { var $container = $('.credit-card_forms-wrapper', component); var nCartoes = $(this).val(); var qtd = $('.credit-card_form-body').length; if (nCartoes > 0) $('.credit-card_next').show(); if (nCartoes > qtd) { var $inputs = $(criaNInputs(nCartoes - qtd, qtd, component.template)) $container.append($inputs); $inputs.find('[data-mask]').each(function (index, item) { $(item).mask($(item).data('mask'), { reverse: $(item).data('maskReverse') }) }); setTimeout(function () { installHandler(component); }); calculaValorUltimoCartao(component); return; } if (nCartoes < qtd) $container.find('.credit-card_form-body').slice(nCartoes).remove(); if (!$('.credit-card_form-body.is-active').length) setCardActive($('.credit-card_form-body').length, component); setTimeout(function () { installHandler(component); setaEstadoCartao(component); calculaValorUltimoCartao(component); }); } function setCardActive(current, component) { $('.credit-card_form-body').removeClass('is-active'); $('.credit-card_form-body:nth-of-type(' + (current) + ')').addClass('is-active'); $('.credit-card_forms-wrapper').css({ transform: 'translateX(-' + ((current - 1) * 100) + '%)' }); if (current == 1 && $('.credit-card_form-body').length == 1) { $('.credit-card_title').html('Dados do Cartão'); } else { $('.credit-card_title').html('Dados do ' + current + 'º Cartão'); } setTimeout(function () { resetCard(component) }, 300); } function toNextCard(component) { var valid = utils.dom.validate($('.credit-card_form-body.is-active'), false); valid = valid && $('.credit-card_form-body.is-active .has-danger').length == 0; if (!valid) return utils.dom.validate($('.credit-card_form-body.is-active')); if (this.is('disabled')) return; var $list = $('.credit-card_form-body'); var current = $list.filter('.is-active').index(); current += 2; if (current > $list.length) return; setCardActive(current, component); setaEstadoCartao(component); calculaValorUltimoCartao(component); } function toPrevCard(component) { var $list = $('.credit-card_form-body'); var current = $list.filter('.is-active').index(); if (current < 1) return; setCardActive(current, component); setaEstadoCartao(component); calculaValorUltimoCartao(component); } function onBlurDocument(component) { $('.row-document-helper').slideUp(); } function onFocusDocument(component) { var self = this; if (typeof self.attributes['data-pais-selecionado'] == 'undefined' || self.attributes['data-pais-selecionado'] == null || self.attributes['data-pais-selecionado'] == '') return true; var paisSelecionado = self.attributes['data-pais-selecionado'].value.toString().toLowerCase(); var label = $(self).parent().find('label'); var labels = { bra: label.attr('data-label-local'), mex: label.attr('data-label-telefone'), arg: label.attr('data-label-estrangeiro'), } if (typeof labels[paisSelecionado] != 'undefined' && labels[paisSelecionado] != null) label.text(labels[paisSelecionado]); else label.text(label.attr('data-label-estrangeiro')); var helper_row = $('.row-document-helper'); if ( typeof self.attributes['data-helper-' + paisSelecionado] == 'undefined' && self.attributes['data-helper-' + paisSelecionado] == null && self.attributes['data-helper-' + paisSelecionado] == '' ) { helper_row.slideUp(200); } else { helper_row.find('.alert').text(self.attributes['data-helper-' + paisSelecionado].value); helper_row.slideDown(200); } var mexPhoneBehavior = function (val) { return val.replace(/\D/g, '').length === 11 ? '(000) 0000-0000' : '(00) 000-00009'; }; var masks = { bra: { mask: '000.000.000-00', options: {} }, mex: { mask: mexPhoneBehavior, options: { onKeyPress: function (val, e, field, options) { field.mask(mexPhoneBehavior.apply({}, arguments), masks.MEX.options); } } }, arg: { mask: 'AA-AAAAAAAA-A', options: {} }, chl: { mask: 'AA.AAA.AAA–A', options: { reverse: true } }, col: { mask: 'AAAAAAAAAA', options: {} }, ecu: { mask: 'AAAAAAAAAA', options: {} }, per: { mask: 'AAAAAAAAA', options: {} } } if (typeof masks[paisSelecionado] == 'undefined' || masks[paisSelecionado] == null) { $(self).unmask(); return; } $(self).mask(masks[paisSelecionado].mask, masks[paisSelecionado].options); } function memoize(fn) { var memo; return function () { if (typeof memo === "undefined") memo = fn.apply(this, arguments); return memo; }; } function floatToBRL(float) { return (float || 0).toFixed(2) .split('.') .reduce(function (c, e) { if (c) return c + ',' + e; return e.split('') .reverse() .reduce(function (c, e, i) { return e + ((i % 3) ? '' : '.') + c; }); }, null) || 0; } function BRLToFloat(BRL) { return parseFloat(BRL.split('.').join('').split(',').join('.')) || 0; } function controllerCarteiraDigital() { var nodePills = document.querySelectorAll('.nav-item'); var creditCard = nodePills[0]; var pix = nodePills[1]; var bankSlip = nodePills[3]; var cardDigital = nodePills[2]; myDiv = document.getElementsByClassName('meio-carteira-digital')[0]; myRef = document.getElementById('carteira-digital-tab'); if (myDiv && myRef) { myDiv.addEventListener('click', () => { myRef.classList.toggle('alwaysActive'); myRef.classList.contains('active') ? nodePills.forEach((e) => { e.children[0].classList.remove('active') }) : (myRef.classList.add('active'), nodePills.forEach((e) => { e.children[0].classList.remove('active') })); nodePills.forEach((e) => { if (!(e === creditCard || e === bankSlip || e === pix || e === cardDigital)) { e.classList.toggle('hiddenPill'); document.querySelector('.tab-pane.active') ? document.querySelector('.tab-pane.active').classList.remove('active') : ''; } }) creditCard.children[0].classList.remove('active'); bankSlip.children[0].classList.remove('active'); pix.children[0].classList.remove('active'); }) bankSlip.addEventListener('click', () => { if (myRef.classList.contains('active') || !nodePills[4].classList.contains('hiddenPill')) { myDiv.classList.remove('active'); nodePills.forEach((e) => { if (!(e === creditCard || e === bankSlip || e === pix || e === cardDigital)) { e.classList.add('hiddenPill'); } }) } myRef.classList.remove('alwaysActive'); }) creditCard.addEventListener('click', () => { if (myRef.classList.contains('active') || !nodePills[4].classList.contains('hiddenPill')) { myDiv.classList.remove('active'); nodePills.forEach((e) => { if (!(e === creditCard || e === bankSlip || e === pix || e === cardDigital)) { e.classList.add('hiddenPill'); } }) } myRef.classList.remove('alwaysActive'); }) pix.addEventListener('click', () => { if (myRef.classList.contains('active') || !nodePills[4].classList.contains('hiddenPill')) { myDiv.classList.remove('active'); nodePills.forEach((e) => { if (!(e === creditCard || e === bankSlip || e === pix || e === cardDigital)) { e.classList.add('hiddenPill'); } }) } myRef.classList.remove('alwaysActive'); }) } } }); /** * Descrição do componente pagamento-mobile * */ define('pagamento-mobile', ['Component'], function () { // Declarações var self = {}; var Component = require('Component'); var estados = ['resumo', 'identificacao', 'endereco', 'pagamento']; var saidas = { resumo: saida_resumo, endereco: saida_endereco, pagamento: saida_pagamento, identificacao: saida_identificacao }; var entradas = { resumo: entrada_resumo, endereco: entrada_endereco, pagamento: entrada_pagamento, identificacao: entrada_identificacao }; // Processamento Component.on('pagamento::dados-pessoais-salvos', irPara('endereco')); Component.on('pagamento::endereco-salvo', irPara('pagamento')); self.install = install; if ($(window).width() < 768) { entradas['endereco'](); saidas['endereco'](); entradas['resumo'](); } return self; // Funções function install(elements) { elements['mobile-btn-resumo'] = { 'click': irPara('resumo') }; elements['mobile-btn-identificacao'] = { 'click': irPara('identificacao') }; elements['mobile-btn-endereco'] = { 'click': irPara('endereco') }; elements['mobile-btn-pagamento'] = { 'click': irPara('pagamento') }; elements['mobile-action-button'] = { 'click': irParaProximoPasso } } function irPara(estado) { return acaoIrPara.bind(this, estado) } function podeIrParaPagamento() { return $('.pagamento').data('gratis') || $('.pagamento_pagamento-formulario').is(':visible'); } function podeIrParaEndereco() { return !!$('.pagamento_endereco-formulario').length; } function acaoIrPara(estado) { if (estado == 'endereco' && !podeIrParaEndereco()) { return; } if (estado == 'pagamento' && !podeIrParaPagamento()) { return; } var botao = $('.pagamento_mobile-action-button'); var dados = botao.data(); saidas[buscaEstado()](); entradas[estado](); if (estado == 'pagamento') { if ($('.pagamento').data('gratis')) { setTimeout(function () { botao.click() }, 50); return } if (!$('.pagamento_forma-pagamento-tab.active').length) setTimeout(function () { $('.pagamento_forma-pagamento-tab:visible:first').click(); }, 100); // + return botao.addClass('disabled').html(dados.tituloFinalizar); } // + botao.removeClass('disabled').html(dados.tituloProximo) } function buscaEstado() { return estados[buscaIndiceEstado()]; } function buscaIndiceEstado() { return $('.pagamento_mobile-steps ul li.is-active').index(); } /** * Esta função calcula o próximo passo necessário ao usuário com base em seu estdo atual */ function irParaProximoPasso() { var estado = buscaEstado(); if (estado == 'resumo') return acaoIrPara('identificacao'); if (estado == 'identificacao' && $('.pagamento_dados-pessoais-formulario').not(':empty').is(':visible')) return $('.pagamento_btn-dados-pessoais').click(); if (estado == 'identificacao') return acaoIrPara('endereco'); if (estado == 'endereco' && $('.pagamento_btn-endereco').length) return $('.pagamento_btn-endereco').click(); if (estado == 'endereco') return acaoIrPara('pagamento'); if (estado == 'pagamento') return $('.pagamento_realizar-pagamento').click(); } function entrada_resumo() { $('.pagamento_produtos').addClass('is-current'); $('.pagamento_mobile-btn-resumo').addClass('is-active'); } function saida_resumo() { $('.pagamento_produtos').removeClass('is-current'); $('.pagamento_mobile-btn-resumo').removeClass('is-active'); } function executa_entrada(container, botao) { // console.log('HERE 1') $('.pagamento_colunas').show().find(container).addClass('is-current'); $(botao).addClass('is-active'); } function executa_saida(container, botao) { // console.log('HERE') /*$('.pagamento_colunas').hide().find(container).removeClass('is-current'); $(botao).removeClass('is-active');*/ } function entrada_endereco() { executa_entrada('.pagamento_endereco', '.pagamento_mobile-btn-endereco'); } function entrada_identificacao() { executa_entrada('.pagamento_dados-pessoais', '.pagamento_mobile-btn-identificacao'); } function entrada_pagamento() { executa_entrada('.pagamento_pagamento', '.pagamento_mobile-btn-pagamento'); } function saida_endereco() { executa_saida('.pagamento_endereco', '.pagamento_mobile-btn-endereco'); } function saida_pagamento() { executa_saida('.pagamento_pagamento', '.pagamento_mobile-btn-pagamento'); } function saida_identificacao() { executa_saida('.pagamento_dados-pessoais', '.pagamento_mobile-btn-identificacao'); } }); define('checkout', ['Component'], function () { var module = new Component('checkout'); module.install = function () { } Component.on('descontos::update', atualizaDescontos); module.elements = { 'search': { click: keyupDesconto }, 'input-discount': { keyup: keyupDesconto }, 'botao-remover-cupom': { click: removerCupom } }; var cupom_imput = ''; module.bootstrap(); return module; function removerCupom(component, ev) { ev.preventDefault(); $('.validate_cupom').removeClass('has-danger'); $('.checkout_input-discount-message').html(""); $.get('/api/compra/remover-cupom-desconto', function (carrinho) { if (typeof component.desconto !== 'undefined') component.desconto.last_input = null; Component.emit('carrinho::update', carrinho); Component.emit('carrinho::atualiza-cortesias', { cortesias: [] }); // atualizaDescontos(self, carrinho); }); } function keyupDesconto(component, event) { var key = event.which || event.keyCode; // Só entrar se for evento 13 = "Enter" ou 1 = botão buscar. if (key == 13 || key == 1) { var self = $('.checkout_cupom', component)[0]; if (component.lock) clearTimeout(component.lock); component.lock = setTimeout(function () { if (!component.desconto) setDesconto(component); if (self.value.length < 3) return; // if( component.desconto.last_input == self.value ) return; component.desconto.last_input = self.value; self.classList.add('is-loading'); $('.loading-cupom').show(); $('.checkout_botao-remover-cupom').hide(); $('.validate_cupom').removeClass('has-danger'); component.parentElement.querySelector('.checkout_input-discount-message').innerHTML = ""; component.querySelector('.checkout_discount-message').style.display = 'none'; $.post('/api/compra/cupom-desconto', { cupom: self.value }) .done(function (carrinho) { $('.loading-cupom').hide(); atualizaDescontos(self, carrinho); Component.emit('carrinho::update', carrinho); }); }, 50); } } function getBeneficios(carrinho) { var descontos_aplicados = new Array(); var produtos_no_carrinho = new Array(); var lista_beneficios = new Array(); if (typeof carrinho.id_desconto_valor !== 'undefined' && carrinho.id_desconto_valor) descontos_aplicados.push(carrinho.id_desconto_valor); if (typeof carrinho.id_desconto_percentual !== 'undefined' && carrinho.id_desconto_percentual) descontos_aplicados.push(carrinho.id_desconto_percentual); var produtos = Object.keys(carrinho.produtos).map(function (key) { return carrinho.produtos[key]; }); produtos.forEach(function (item, index) { if (typeof item.cortesia != 'undefined' && item.cortesia) return; if (typeof item.id_desconto_valor !== 'undefined' && item.id_desconto_valor) descontos_aplicados.push(item.id_desconto_valor); if (typeof item.id_desconto_percentual !== 'undefined' && item.id_desconto_percentual) descontos_aplicados.push(item.id_desconto_percentual); produtos_no_carrinho.push(parseInt(item.id)); }); var tipo_desconto = (typeof carrinho.tipo_desconto_aplicado != 'undefined') ? carrinho.tipo_desconto_aplicado : null; if (tipo_desconto == null || typeof carrinho.descontos == 'undefined' || carrinho.descontos.length <= 0) return []; var descontos = Object.keys(carrinho.descontos).map(function (key) { return carrinho.descontos[key]; }); // console.log(descontos); // console.log(descontos_aplicados); // console.log(produtos_no_carrinho); descontos.forEach(function (item, index) { // console.log(item.beneficios, item.beneficios.length); if (typeof item.beneficios == 'undefined' || item.beneficios.length <= 0) return; item.beneficios.forEach(function (beneficio) { if (typeof beneficio.produto_desconto != 'undefined' && produtos_no_carrinho.indexOf(parseInt(beneficio.produto_desconto)) == -1) return; if (beneficio.aplicacao == 2 && tipo_desconto == 'desconto_carrinho') return; if (beneficio.aplicacao == 3 && tipo_desconto == 'desconto_produtos') return; lista_beneficios.push(beneficio); }); }); return lista_beneficios; } function atualizaDescontos(self, carrinho) { //self.classList.remove('is-loading'); if (carrinho.descontos && !Array.isArray(carrinho.descontos)) { carrinho.descontos = Object.keys(carrinho.descontos).map(function (key) { return carrinho.descontos[key]; }); } var desconto = (carrinho.descontos || []).filter(function (el) { return el.cupom.toUpperCase() == self.value.toUpperCase(); }).reduce(function (c, el) { return el || c }, null); if ((carrinho.code || !carrinho.descontos.length || desconto == null) && (self.value != '')) { $('.validate_cupom').addClass('has-danger'); $('.checkout_input-discount-message').html(carrinho.message || "Desconto não encontrado"); return; } if (carrinho.code == 500) { $('.validate_cupom').addClass('has-danger'); $('.checkout_input-discount-message').html(carrinho.message || "Desconto não encontrado"); return; } var display_descontos; var texto_desconto; if (typeof desconto == 'undefined' || desconto == null) { texto_desconto = ''; display_descontos = 'none'; } else { if (typeof carrinho.mensagem_promocode != 'undefined' && (carrinho.mensagem_promocode != '' || carrinho.mensagem_promocode != null)) { texto_desconto = " " + carrinho.mensagem_promocode; display_descontos = 'block'; } else { var beneficios = getBeneficios(carrinho); if (beneficios.length > 0) beneficios = beneficios.map(getBenefitText); //desconto.beneficios.map( getBenefitText ); else return; var ultimo_beneficio = beneficios.pop(); texto_desconto = " " + carrinhoi18n.app.pagamento.desconto_voce_tem + ' ' + ultimo_beneficio; // if ( beneficios.length ) { // texto_desconto += beneficios.join(', '); // // texto_desconto += " e "; // } // texto_desconto += ultimo_beneficio; display_descontos = 'block'; } } //Mensagem desconto - Cupom if (Array.isArray(carrinho.descontos)) { if (carrinho.descontos.length > 0 && carrinho.descontos[0].cupom_mensagem) { texto_desconto = texto_desconto + '.
' + carrinho.descontos[0].cupom_mensagem; } $('.checkout_discount-message').html(texto_desconto).css('display', display_descontos); // var texto_mensagem_cupom = "

       

"; // if(carrinho.descontos.length >0 ){ // texto_mensagem_cupom = "

       " + carrinho.descontos[0].cupom_mensagem + "

"; // $('.msg-descont-cupom').html(texto_mensagem_cupom).css('display', display_descontos); // }else // $('.msg-descont-cupom').html(texto_mensagem_cupom).css('display', display_descontos); } else { // Mensagem padrão $('.checkout_discount-message').html(texto_desconto).css('display', display_descontos); } } function getBenefitText(benefit) { if (benefit.cortesias && benefit.tipo_cortesia == 2) { return "" + carrinhoi18n.app.pagamento.tem_condicao_especial_de_compra + ""; } if (benefit.cortesias && benefit.tipo_cortesia == 1) { return carrinhoi18n.app.pagamento.tem_cortesias_especiais; } switch (benefit.aplicacao) { case 3: case "3": if (benefit.tipo_valor == 1) { return ' R$' + maskedMoney(benefit.valor) + ' ' + carrinhoi18n.app.pagamento.desconto_valor_valor_compra + " "; } return '' + benefit.valor + ' ' + carrinhoi18n.app.pagamento.desconto_percentual_valor_compra + " "; break; case 1: case "1": if (benefit.tipo_valor == 1) { return ' R$' + maskedMoney(benefit.valor) + ' ' + carrinhoi18n.app.pagamento.desconto_valor_frete_produtos + " "; } return '' + benefit.valor + ' ' + carrinhoi18n.app.pagamento.desconto_percencual_frete_produtos + " "; break; default: if (benefit.tipo_valor == 1) { // console.log(carrinhoi18n.app.pagamento.desconto_valor_produto_unico); return ' R$' + maskedMoney(benefit.valor) + ' ' + carrinhoi18n.app.pagamento.desconto_valor_produto_unico + " "; } return '' + benefit.valor + ' ' + carrinhoi18n.app.pagamento.desconto_percentual_produto_unico + " "; } } function setDesconto(component) { component.desconto = { last_input: "" }; } function maskedMoney(number) { number = number.toFixed(3) * 100; if (number % 1) number++; number = Math.floor(number); return $('
').mask('#.##0,00', { reverse: true }).masked(number); } }); // NOVO CALENDARIO DE PASSAPORTES/OPCIONAIS 2020 define('newcalendar', ['Component'], function () { var module = new Component('newcalendar'); var cache = {} var dataClickSel = []; var window_size = $(window).width(); module.install = install; module.elements = { 'trigger': { click: toggleCalendar }, 'close': { click: toggleCalendar } }; module.bootstrap(); return module; function install(base) { $.fn.datepicker.dates['pt-BR'] = { days: ["Domingo", "Segunda", "Terça", "Quarta", "Quinta", "Sexta", "Sábado"], daysShort: ["Dom", "Seg", "Ter", "Qua", "Qui", "Sex", "Sáb"], daysMin: ["Dom", "Seg", "Ter", "Qua", "Qui", "Sex", "Sáb"], months: ["Janeiro", "Fevereiro", "Março", "Abril", "Maio", "Junho", "Julho", "Agosto", "Setembro", "Outubro", "Novembro", "Dezembro"], monthsShort: ["Jan", "Fev", "Mar", "Abr", "Mai", "Jun", "Jul", "Ago", "Set", "Out", "Nov", "Dez"], today: "Hoje", monthsTitle: "Meses", clear: "Limpar", format: "yyyy-mm-dd" // format:"dd/mm/yyyy" }; var content = base.element("datepicker").first(); content.dataset.date = base.element("selected-date").first().value; // init colocar o loading em todas as tds => .newcalendar .datepicker table tbody td.day (loading-normal) if (base.element("type-product").first().value == 'passaportes') { $('head').append(``); } $(".newcalendar_datepicker").datepicker({ startDate: new Date(), weekStart: 1, beforeShowDay: beforeShowDay.bind(null, base), // datesDisabled: base.element("crowded").first().value, language: base.dataset.lang, templates: { leftArrow: "
", rightArrow: "
", }, }).on('changeDate', function (e) { var close_days = memo(base.element("close-days").first().value); var selected_date = base.element("selected-date").first(); var local = base.element("local").first(); var clicked_date = $(".newcalendar_datepicker").datepicker('getFormattedDate'); dataClickSel[0] = clicked_date; //changeColorDays(dataClickSel[0]); //change com o dia clicado - selecionado buscarLegenda(dataClickSel[0]); //Setar legenda se existir var type_product = base.element("type-product").first().value; selected_date.value = clicked_date; content.dataset.date = clicked_date; $.get('/api/calendario/buscar-mensagem-data', { data: clicked_date }).done(function (data) { if (window.innerWidth < 768) { $('.tickets_container.-cart')[0].scrollIntoView({ behavior: 'smooth' }); if (typeof data.mensagem !== 'undefined' && data.mensagem != '') { $('.sugestion-2').html(data.mensagem); $('.sugestion-2').show(); } else { $('.sugestion-2').hide(); } } }); if (local.value == 'calendario') { window.location.href = "/" + type_product + '?dataSelecionada=' + clicked_date; return false; } else { $("input[name=dataSelecionada]").trigger('change'); } }) if (base.dataset.binding == true && window_size < 1200) { base.element("container").state("active", true) } var type_product = base.element("type-product").first().value; changeColorDays('', false, false, type_product); //Load instanceOwlCarousel(base); // instanceOwlCarouselCart(base); // owlController(); } function toggleCalendar(base) { var container = base.element("container").first(); container.state('active', !container.is('active')); } function memo(val) { try { if (!cache[val]) { cache[val] = JSON.parse(val); } return cache[val]; } catch (e) { return {} } } function beforeShowDay(base, date) { //variaveis para verificar se o mes atual esta sem cotação --> let temp = document.querySelector('.datepicker-days .no-quotation'); if (temp) { temp.remove(); } var date_full = moment(date).format('Y-MM-DD'); var date_now = moment().format('Y-MM-DD'); var year = moment(date).format('Y'); var month = moment(date).format('MM'); // var day = moment(date).format('DD'); var type_product = base.element("type-product").first().value; var close_days = base.element("close-days").first().value; var holidays = base.element("holidays").first().value; var prices = memo(base.element("prices").first().value); var crowded = base.element("crowded").first().value; var night_sessions = base.element("night-sessions").first() ? base.element("night-sessions").first().value : '[]'; var alert_text = base.dataset.alert; var label_aberto_modificar = base.dataset.labelabertomodificar; var label_aberto = base.dataset.labelaberto; var shown_days = (date.getFullYear() + '-' + zeroPad(date.getMonth() + 1) + '-' + zeroPad(date.getDate())); var is_closed = close_days.indexOf(shown_days) !== -1; var is_holiday = holidays.indexOf(shown_days) !== -1; var is_crowded = crowded.indexOf(shown_days) !== -1; var is_night_sessions = night_sessions.indexOf(shown_days) !== -1; var label = (is_closed ? ' Fechado' : (is_crowded ? 'Esgotado' : '' ) ); var obj = { content: "
" + "
" + "dia" + (date.getDate()).toString() + "
" + "" + "
" }; //return obj; // <<<<< var classes = []; var tooltip = []; if (is_holiday) { tooltip.push('Feriado'); classes.push('is-holiday'); } if (is_night_sessions && !is_closed && !is_crowded) { // tooltip.push('Night Sessions'); //classes.push('is-night-sessions'); // <<<<<<<<< ---- check Leo!! } if (is_closed) { tooltip.push('Parque fechado'); classes.push('is-closed'); } if (is_crowded) { tooltip.push('Data esgotada'); classes.push('is-crowded'); } if (classes.length) classes.push('toggle-tooltip'); obj.classes = classes.join(' '); obj.tooltip = tooltip.join(' com '); if ( date.getDate() == new Date(date.getFullYear(), date.getMonth() + 1, 0).getDate() // && !is_crowded // && !is_closed && date_full >= date_now ) { if (year == '2022' && month == '02') { $('.openlabel').html(label_aberto_modificar); } else { $('.openlabel').html(label_aberto); } if (year == '2022' && (month != '02' && month != '02') || year != '2022') { $('.night-sessions').hide(); } else { //..$('.night-sessions').show(); changeColorDays('', month, year, type_product); //Load } var allTD = document.querySelectorAll('[data-component="newcalendar"] .datepicker table tbody td.day'); Array.from(allTD).forEach(function (element) { element.style.backgroundColor = '#f1f1f1'; }) $.post('/api/calendario/consulta-valores-mes-ano', { ano: year, mes: month, // dia: day, tipo_produto: type_product }) .done(function (data) { // variáveis para verificar se o mês atual está sem cotação --> let this_month = false; Object.keys(data).forEach((index) => { // variáveis para verificar se o mês atual está sem cotação --> // let act = new Date(`${index} 0:0:0`); // if (act.getDate() == 15 && act.getMonth() + 1 == month) { // this_month = true; // } $("#label-" + index).addClass("is-show") .html((data[index] ? "R$ " + data[index] : "")); }); // remover classe de loading setTimeout(() => { $(".fa.fa-spinner.fa-pulse").remove(); }, 1000); console.log('tipo de produto', type_product) // variáveis para verificar se o mês atual está sem cotação --> if (!verificarMesFechado()) { let temp = document.querySelector('.newcalendar_datepicker .datepicker-days .no-quotation'); if (temp) { return; } let divEl = document.createElement('div'); divEl.classList.add('no-quotation'); divEl.innerHTML = '' + alert_text + ''; var divCalendar = document.querySelector('.newcalendar_datepicker .datepicker-days'); divCalendar.appendChild(divEl); document.querySelectorAll('.newcalendar .datepicker table tbody td.day.is-closed').forEach(e => e.style.pointerEvents = 'none'); } changeColorDays('', month, year, type_product); // Load }); } return obj; } function CallOtherProducts(year, month, type_product, alert_text = '') { // variáveis para verificar se o mês atual está sem cotação --> $.post('/api/calendario/consulta-disponibilidade-mes-ano', { ano: year, mes: month, // dia: day, tipo_produto: type_product }).done(function (dataAvaible) { console.log(dataAvaible) if (!verificarMesFechado() || dataAvaible.length == 0) { let temp = document.querySelector('.datepicker-days .no-quotation'); if (temp) { return; } let divEl = document.createElement('div'); divEl.classList.add('no-quotation'); divEl.innerHTML = '' + alert_text + ''; document.querySelector('.datepicker-days').appendChild(divEl); document.querySelectorAll('.newcalendar .datepicker table tbody td.day').forEach(e => e.style.pointerEvents = 'none'); } }); } function verificarMesFechado() { var aberto = false; $('.table-condensed tbody tr').each(function () { $(this).find('td').each(function () { if ($(this)[0].className) { var strin_class = $(this)[0].className; if (!strin_class.match(/old/) && !strin_class.match(/is-closed/)) { aberto = true; return true; } } }) if (aberto) { return true; } }) return aberto; } function zeroPad(n) { return ("00" + n).slice(-2); } function changeColorDays(dateChanged = "", month = false, year = false, type_product = false) { // Manter a seleção de cor verde - Default var dataSelecionada = $('.newcalendar_selected-date').val(); const datasFechado = $("#data-fechado").val(); const selectedMonth = month ? month : dataSelecionada.split('-')[1]; const selectedYear = year ? year : dataSelecionada.split('-')[0]; const tipoProduto = type_product; if (tipoProduto == 'passaportes') { const corFeriado = $('input[name="cor_feriado"]').val(); $('head').append(``); } $('td.old').addClass('disabled'); // ----- var cacheVar = 'calendario-cores-' + selectedYear + '-' + selectedMonth; var dataColors = $('body').data(cacheVar); if (typeof dataColors === "undefined") { jQuery.ajax({ url: '/api/calendario/buscar-cor-data', type: 'POST', data: { mes: selectedMonth, ano: selectedYear, tipoProduto: tipoProduto }, success: function (data) { $('body').data(cacheVar, data); dataColors = data; }, async: false }); } console.log('No-cart', dataColors, tipoProduto, dataSelecionada); changeColorDaysApply(dataColors, tipoProduto, dataSelecionada); } function changeColorDaysApply(data, tipoProduto, dataSelecionada) { Object.keys(data).forEach((index) => { var item = data[index]; Object.keys(item).forEach((indx) => { let novaData = item[indx].data.split('-').map((el, i) => i === 2 && el.length === 1 ? el.padStart(2, '0') : el).join('-'); if (!($('#label-' + novaData).parent().parent().is(".disabled")) && tipoProduto == 'passaportes') { // Verifica se este dia está marcado para a alteração de cor if (novaData == dataSelecionada) { $('#label-' + novaData).parent().parent().attr('style', 'background-color: ' + item[indx].cor + ' !important; box-shadow: rgba(0, 0, 0, 0.4) 0px 4px 6px, rgba(0, 0, 0, 0.5) 0px 5px 13px 2px, rgba(0, 0, 0, 0.2) 0px -3px 0px inset; opacity: 1 !important; border: 2px solid white;'); } else { if (item[indx].parqueFechado) { $('#label-' + novaData).parent().parent().addClass('disabled'); $('#label-' + novaData).parent().parent().attr('style', 'background-color: #f1f1f1!important; cursor: default;'); } else { $('#label-' + novaData).parent().parent().attr('style', 'background-color: ' + item[indx].cor + ' !important; opacity: 1 !important;'); let estiloOriginal = $('#label-' + novaData).parent().parent().attr('style'); $('#label-' + novaData).parent().parent().hover( function () { $(this).attr('style', 'background-color: ' + item[indx].cor + ' !important; box-shadow: rgba(0, 0, 0, 0.4) 0px 4px 6px, rgba(0, 0, 0, 0.5) 0px 5px 13px 2px, rgba(0, 0, 0, 0.2) 0px -3px 0px inset; opacity: 1 !important; border: 2px solid white;'); }, function () { $(this).attr('style', estiloOriginal); } ); } } } }); }); } function buscarLegenda(data) { // jQuery.ajax({ // url: '/api/calendario/buscar-legenda-data?data='+data, // type: 'GET', // success: function(dados) { // if(dados.legenda!=""){ // $('#legendaCor').show(); // $('.legenda-dia').attr('style', 'background: '+dados.legenda.cor+' !important'); // $('.legenda-dia-text').text((dados.legenda.legenda.toUpperCase())+"(*)"); // $('#mensagemDia').text((dados.mensagem.toUpperCase())); // }else // $('#legendaCor').hide(); // }, // async: true // }); } function instanceOwlCarousel(base) { //Hides Datepicker generated Table HEAD. $('.table-condensed thead tr:nth-child(2)').hide(); var dataDiff = base.getAttribute('data-diff'); var owl = $('#calendarController'); owl.owlCarousel({ nav: true, center: true, touchDrag: false, mouseDrag: false, dots: false, items: 3, navText: ["<", ">"], startPosition: Number(dataDiff) || 0, }) $('#calendarController .owl-prev').click(function () { $('.newcalendar_datepicker th.prev').first().click(); }) $('#calendarController .owl-next').click(function () { $('.newcalendar_datepicker th.next').first().click(); }) } }); // Funçoes para funcionamento do calendario no carrinho define('calendarioCart', ['Component'], function () { var module = new Component('calendarioCart'); var cache = {} var dataClickSel = []; var window_size = $(window).width(); console.log("testeCart"); module.install = installCalendarCart; module.elements = { 'trigger': { click: toggleCalendarCart }, 'close': { click: toggleCalendarCart } }; module.bootstrap(); return module; function installCalendarCart(base) { $.fn.datepicker.dates['pt-BR'] = { days: ["Domingo", "Segunda", "Terça", "Quarta", "Quinta", "Sexta", "Sábado"], daysShort: ["Dom", "Seg", "Ter", "Qua", "Qui", "Sex", "Sáb"], daysMin: ["Dom", "Seg", "Ter", "Qua", "Qui", "Sex", "Sáb"], months: ["Janeiro", "Fevereiro", "Março", "Abril", "Maio", "Junho", "Julho", "Agosto", "Setembro", "Outubro", "Novembro", "Dezembro"], monthsShort: ["Jan", "Fev", "Mar", "Abr", "Mai", "Jun", "Jul", "Ago", "Set", "Out", "Nov", "Dez"], today: "Hoje", monthsTitle: "Meses", clear: "Limpar", format: "yyyy-mm-dd" // format:"dd/mm/yyyy" }; var content = base.element("datepicker").first(); content.dataset.date = base.element("selected-date").first().value; // init colocar o loading em todas as tds => .calendarioCart .datepicker table tbody td.day (loading-normal) if (base.element("type-product").first().value == 'passaportes') { $('head').append(``); } $(".calendarioCart_datepicker").datepicker({ startDate: new Date(), weekStart: 1, beforeShowDay: beforeShowDayCart.bind(null, base), // datesDisabled: base.element("crowded").first().value, language: base.dataset.lang, templates: { leftArrow: "
", rightArrow: "
", }, }).on('changeDate', function (e) { var close_days = memoCart(base.element("close-days").first().value); var selected_date = base.element("selected-date").first(); var local = base.element("local").first(); var clicked_date = $(".calendarioCart_datepicker").datepicker('getFormattedDate'); dataClickSel[0] = clicked_date; //changeColorDays(dataClickSel[0]); //change com o dia clicado - selecionado buscarLegendaCart(dataClickSel[0]); //Setar legenda se existir var type_product = base.element("type-product").first().value; selected_date.value = clicked_date; content.dataset.date = clicked_date; $.get('/api/calendario/buscar-mensagem-data', { data: clicked_date }).done(function (data) { if (window.innerWidth < 768) { $('.tickets_container.-cart')[0].scrollIntoView({ behavior: 'smooth' }); if (typeof data.mensagem !== 'undefined' && data.mensagem != '') { $('.sugestion-2').html(data.mensagem); $('.sugestion-2').show(); } else { $('.sugestion-2').hide(); } } }); if (local.value == 'calendario') { window.location.href = "/" + type_product + '?dataSelecionada=' + clicked_date; return false; } else { $("input[name=dataSelecionada]").trigger('change'); } }) if (base.dataset.binding == true && window_size < 1200) { base.element("container").state("active", true) } var type_product = base.element("type-product").first().value; changeColorDaysCart('', false, false, type_product); //Load instanceOwlCarouselCart(base); // instanceOwlCarouselCart(base); // owlController(); } function toggleCalendarCart(base) { var container = base.element("container").first(); container.state('active', !container.is('active')); } function memoCart(val) { try { if (!cache[val]) { cache[val] = JSON.parse(val); } return cache[val]; } catch (e) { return {} } } function beforeShowDayCart(base, date) { //variaveis para verificar se o mes atual esta sem cotação --> let temp = document.querySelector('.datepicker-days .no-quotationCart'); if (temp) { temp.remove(); } var date_full = moment(date).format('Y-MM-DD'); var date_now = moment().format('Y-MM-DD'); var year = moment(date).format('Y'); var month = moment(date).format('MM'); // var day = moment(date).format('DD'); var type_product = base.element("type-product").first().value; var close_days = base.element("close-days").first().value; //console.log('dias fechados', close_days) var holidays = base.element("holidays").first().value; var prices = memoCart(base.element("prices").first().value); var crowded = base.element("crowded").first().value; var night_sessions = base.element("night-sessions").first() ? base.element("night-sessions").first().value : '[]'; var alert_text = base.dataset.alert; var label_aberto_modificar = base.dataset.labelabertomodificar; var label_aberto = base.dataset.labelaberto; var shown_days = (date.getFullYear() + '-' + zeroPadCart(date.getMonth() + 1) + '-' + zeroPadCart(date.getDate())); var is_closed = close_days.indexOf(shown_days) !== -1; var is_holiday = holidays.indexOf(shown_days) !== -1; var is_crowded = crowded.indexOf(shown_days) !== -1; var is_night_sessions = night_sessions.indexOf(shown_days) !== -1; // Determina qualquer data que não esteja salvo no banco como fechada. var close_days_verify = JSON.parse(close_days) var isVeryDate = close_days_verify.every(dateItems => { return date_full > dateItems }) var label = (is_closed ? ' Fechado' : (is_crowded ? 'Esgotado' : '' ) ); var obj = { content: "
" + "
" + "dia" + (date.getDate()).toString() + "
" + "" + "
" }; //return obj; // <<<<< var classes = []; var tooltip = []; if (is_holiday) { tooltip.push('Feriado'); classes.push('is-holiday'); } if (is_night_sessions && !is_closed && !is_crowded) { // tooltip.push('Night Sessions'); //classes.push('is-night-sessions'); // <<<<<<<<< ---- check Leo!! } if (is_closed || isVeryDate) { tooltip.push('Parque fechado'); classes.push('is-closed'); } if (is_crowded) { tooltip.push('Data esgotada'); classes.push('is-crowded'); } if (classes.length) classes.push('toggle-tooltip'); obj.classes = classes.join(' '); obj.tooltip = tooltip.join(' com '); if ( date.getDate() == new Date(date.getFullYear(), date.getMonth() + 1, 0).getDate() // && !is_crowded // && !is_closed && date_full >= date_now ) { if (year == '2022' && month == '02') { $('.openlabel').html(label_aberto_modificar); } else { $('.openlabel').html(label_aberto); } if (year == '2022' && (month != '02' && month != '02') || year != '2022') { $('.night-sessions').hide(); } else { //..$('.night-sessions').show(); changeColorDaysCart('', month, year, type_product); //Load } var allTD = document.querySelectorAll('[data-component="calendarioCart"] .datepicker table tbody td.day'); Array.from(allTD).forEach(function (element) { element.style.backgroundColor = '#f1f1f1'; }) $.post('/api/calendario/consulta-valores-mes-ano', { ano: year, mes: month, // dia: day, tipo_produto: type_product }) .done(function (data) { // variáveis para verificar se o mês atual está sem cotação --> let this_month = false; Object.keys(data).forEach((index) => { // variáveis para verificar se o mês atual está sem cotação --> // let act = new Date(`${index} 0:0:0`); // if (act.getDate() == 15 && act.getMonth() + 1 == month) { // this_month = true; // } $("#labelCart-" + index).addClass("is-show") .html((data[index] ? "R$ " + data[index] : "")); }); // remover classe de loading setTimeout(() => { $(".fa.fa-spinner.fa-pulse").remove(); }, 1000); // variáveis para verificar se o mês atual está sem cotação --> if (!verificarMesFechadoCart()) { const temp = document.querySelector('.calendarioCart_datepicker .datepicker-days .no-quotation'); if (temp) { return; } let divEl = document.createElement('div'); divEl.classList.add('no-quotation'); divEl.innerHTML = '' + alert_text + ''; var divCalendarCart = document.querySelector('.calendarioCart_datepicker .datepicker-days'); divCalendarCart.appendChild(divEl); document.querySelectorAll('.calendarioCart .datepicker table tbody td.day.is-closed').forEach(e => e.style.pointerEvents = 'none'); } changeColorDaysCart('', month, year, type_product); // Load }); } return obj; } function verificarMesFechadoCart() { var aberto = false; $('.table-condensed tbody tr').each(function () { $(this).find('td').each(function () { if ($(this)[0].className) { var strin_class = $(this)[0].className; if (!strin_class.match(/old/) && !strin_class.match(/is-closed/)) { aberto = true; return true; } } }) if (aberto) { return true; } }) return aberto; } function zeroPadCart(n) { return ("00" + n).slice(-2); } function changeColorDaysCart(dateChanged = "", month = false, year = false, type_product = false) { // Manter a seleção de cor verde - Default var dataSelecionada = $('.calendarioCart_selected-date').val(); const datasFechado = $("#data-fechado").val(); const selectedMonth = month ? month : dataSelecionada.split('-')[1]; const selectedYear = year ? year : dataSelecionada.split('-')[0]; const tipoProduto = type_product; if (tipoProduto == 'passaportes') { const corFeriado = $('input[name="cor_feriado"]').val(); $('head').append(``); } $('td.old').addClass('disabled'); // ----- var cacheVar = 'calendario-cores-' + selectedYear + '-' + selectedMonth; var dataColors = $('body').data(cacheVar); if (typeof dataColors === "undefined") { jQuery.ajax({ url: '/api/calendario/buscar-cor-data', type: 'POST', data: { mes: selectedMonth, ano: selectedYear, tipoProduto: tipoProduto }, success: function (data) { $('body').data(cacheVar, data); dataColors = data; }, async: false }); } console.log('Cart', dataColors, tipoProduto, dataSelecionada); changeColorDaysApplyCart(dataColors, tipoProduto, dataSelecionada); } function changeColorDaysApplyCart(data, tipoProduto, dataSelecionada) { Object.keys(data).forEach((index) => { var item = data[index]; Object.keys(item).forEach((indx) => { let novaData = item[indx].data.split('-').map((el, i) => i === 2 && el.length === 1 ? el.padStart(2, '0') : el).join('-'); if (!($('#labelCart-' + novaData).parent().parent().is(".disabled")) && tipoProduto == 'passaportes') { // Verifica se este dia está marcado para a alteração de cor if (novaData == dataSelecionada) { $('#labelCart-' + novaData).parent().parent().attr('style', 'background-color: ' + item[indx].cor + ' !important; box-shadow: rgba(0, 0, 0, 0.4) 0px 4px 6px, rgba(0, 0, 0, 0.5) 0px 5px 13px 2px, rgba(0, 0, 0, 0.2) 0px -3px 0px inset; opacity: 1 !important; border: 2px solid white;'); } else { if (item[indx].parqueFechado) { $('#labelCart-' + novaData).parent().parent().addClass('disabled'); $('#labelCart-' + novaData).parent().parent().attr('style', 'background-color: #f1f1f1!important; cursor: default;'); } else { $('#labelCart-' + novaData).parent().parent().attr('style', 'background-color: ' + item[indx].cor + ' !important; opacity: 1 !important;'); let estiloOriginal = $('#labelCart-' + novaData).parent().parent().attr('style'); $('#labelCart-' + novaData).parent().parent().hover( function () { $(this).attr('style', 'background-color: ' + item[indx].cor + ' !important; box-shadow: rgba(0, 0, 0, 0.4) 0px 4px 6px, rgba(0, 0, 0, 0.5) 0px 5px 13px 2px, rgba(0, 0, 0, 0.2) 0px -3px 0px inset; opacity: 1 !important; border: 2px solid white;'); }, function () { $(this).attr('style', estiloOriginal); } ); } } } }); }); } function buscarLegendaCart(data) { // jQuery.ajax({ // url: '/api/calendario/buscar-legenda-data?data='+data, // type: 'GET', // success: function(dados) { // if(dados.legenda!=""){ // $('#legendaCor').show(); // $('.legenda-dia').attr('style', 'background: '+dados.legenda.cor+' !important'); // $('.legenda-dia-text').text((dados.legenda.legenda.toUpperCase())+"(*)"); // $('#mensagemDia').text((dados.mensagem.toUpperCase())); // }else // $('#legendaCor').hide(); // }, // async: true // }); } function instanceOwlCarouselCart(base) { //Hides Datepicker generated Table HEAD. $('.table-condensed thead tr:nth-child(2)').hide(); var dataDiff = base.getAttribute('data-diff'); var owl = $('#calendarControllerCart'); owl.owlCarousel({ nav: true, center: true, touchDrag: false, mouseDrag: false, dots: false, items: 3, navText: ["<", ">"], startPosition: Number(dataDiff) || 0, }) $('#calendarControllerCart .owl-prev').click(function () { $('.calendarioCart_datepicker th.prev').first().click(); }) $('#calendarControllerCart .owl-next').click(function () { $('.calendarioCart_datepicker th.next').first().click(); }) } }, function (err) { console.error('Error loading calendarioCart: ', err); }); /** * Descrição do componente de tickets novo 02/05/2020 */ define('tickets', ['Component'], function () { // Declarações var self = new Component('tickets'); self.install = install; self.elements = { 'checkout-button': { click: checkout } }; // Processamento self.bootstrap(); return self; // Funções function install(base) { $(".tickets_select2", base) .select2({ theme: "default", width: '100%', minimumResultsForSearch: Infinity, }); } function removeMe() { $(this).remove(); } function checkout(base, event) { require(['text!modal-compra.html'], function () { $(Mustache.render(require('text!modal-compra.html'), {})) .appendTo('body') .modal('show') .on('hidden.bs.modal', removeMe); }) } }); /** * Descrição do componente de ticket novo 01/05/2020 */ define('ticket', ['Component'], function () { // Declarações var self = new Component('ticket'); self.install = install; self.elements = { 'quantity-button': { click: quantity } }; // Processamento self.bootstrap(); return self; // Funções function install(base) { } function quantity(base, event) { if (this.is("disabled")) return; var action = this.dataset.action; // Quantidade minima e máxima do produto var min = base.element("quantity").first().dataset.min; var max = base.element("quantity").first().dataset.max; // Valor e uid do produto var product_value = base.element("value").first().dataset.value; var uid = base.element("quantity").first().dataset.uid; var quantity_total = base.element("quantity-total").first(); var quantity_input = base.element("quantity-input").first(); var quantity_label = base.element("quantity-label").first(); var minus_button = base.element("quantity-minus"); var plus_button = base.element("quantity-more"); // var quantity_value = (action=="more" ? parseInt(quantity_input.value)+1 : parseInt(quantity_input.value)-1); var data_selecionada = $(".newcalendar_selected-date").val(); var quantity_value = quantity_input.value; if (action == "more") { quantity_value = parseInt(quantity_input.value) + 1; if (quantity_value < min) { quantity_value = min } } else { quantity_value = parseInt(quantity_input.value) - 1; if (quantity_value < min) { quantity_value = 0; } else if (quantity_value > max) { quantity_value = max; } } quantity_label.innerHTML = quantity_value; quantity_input.value = quantity_value; if (product_value !== '0') { quantity_total.innerHTML = numberToReal(parseFloat(product_value * quantity_value)); } minus_button.state("disabled", true) plus_button.state("disabled", true) //if(quantity_value > 0){ $.post('/api/compra/adicionar-produto-carrinho', { produto: uid, quantidade: quantity_value, data_selecionada: data_selecionada }) .done(function (xhr) { base.element("quantity-minus").state("disabled", (quantity_value > 0 ? false : true)); base.element("quantity-more").state("disabled", false); processaRetornoCompra(xhr, uid, base); }) .fail(function (xhr) { base.element("quantity-minus").state("disabled", (quantity_value > 0 ? false : true)); base.element("quantity-more").state("disabled", false); processaErroCompra(xhr); }) //} } function processaRetornoCompra(xhr, uid) { if (typeof xhr.code !== "undefined" && xhr.code == 500) { require(['text!modal-compra.html'], function () { $(Mustache.render(require('text!modal-compra.html'), xhr)) .appendTo('body') .modal('show') .on('hidden.bs.modal', removeMe); Component.emit('carrinho::update', xhr); }); } else { if (typeof rtbhEvents !== "undefined" && uid && xhr.produtos && xhr.produtos.forEach) { xhr.produtos.forEach(function (data) { if (data.uid == uid) { (rtbhEvents = window.rtbhEvents || []).push({ eventType: 'basketadd', offerId: data.codigo }, { eventType: 'uid', id: xhr.usuario_tag_id }); } }); } if (typeof ttq !== "undefined" && uid && xhr.produtos && xhr.produtos.forEach) { xhr.produtos.forEach(function (data) { if (data.uid == uid) { ttq.track('AddToCart', { contents: [ { content_id: data.codigo, content_type: 'product', content_category: typeof data.tipo_nome !== 'undefined' ? data.tipo_nome : 'Passaportes', price: data.valor_unitario, quantity: data.quantidade, description: data.nome, content_name: typeof data.tipo_nome !== 'undefined' ? data.tipo_nome : 'Passaportes', } ], currency: "BRL", value: data.quantidade * data.valor_unitario, }, { event_id: 'event' + Math.floor(new Date().getTime() / 1000) } ); } }); } if (uid && xhr.produtos && xhr.produtos.forEach && window.usuariologado && false) { xhr.produtos.forEach(function (data) { if (data.uid == uid) { var date = new Date(); var myHeaders = new Headers(); myHeaders.append("Content-Type", "application/json"); var raw = JSON.stringify({ "data": [ { "event_name": "add_to_cart", "action_source": "website", "event_time": Math.floor(date.getTime() / 1000), "advertiser_id": "549763382604", "event_id": "eventId0001", "user_data": window.usuariologado, "custom_data": { "currency": "BRL", "content_ids": [data.codigo], "contents": [ { "item_price": data.valor_unitario, "quantity": data.quantidade } ] }, } ] }); var requestOptions = { method: 'POST', headers: myHeaders, body: raw, redirect: 'follow' }; fetch("https://ct.pinterest.com/events/v3/", requestOptions) .then(response => response.text()) .then(result => console.log(result)) .catch(error => console.log('error', error)); } }); } Component.emit('carrinho::update', xhr); } } function removeMe() { $(this).remove(); } function processaErroCompra(xhr) { console.log('erro na compra', xhr); } function numberToReal(numero) { var numero = numero.toFixed(2).split('.'); numero[0] = "R$ " + numero[0].split(/(?=(?:...)*$)/).join('.'); return numero.join(','); } }); /** * Descrição do componente de carrinho de compras no navbar novo 04/05/2020 */ define('cart', ['Component'], function () { // Declarações var self = new Component('cart'); self.install = install; self.elements = { 'trigger': { click: openCart }, 'ticket-button': { click: remove } }; //Component.on( 'cart::update', update ); // Processamento self.bootstrap(); return self; // Funções function install(base) { Component.on('cart::updateCart', update.bind(null, base)); } function update(base, quantity) { base.state('empty', (!quantity ? true : false)); if (quantity == 0) base.state('active', false) } function openCart(base) { if (base.is('empty')) return false; base.state('active', !base.is('active')); } function remove(base) { var uid = this.dataset.uid; var item_carrinho = this.dataset.item; $.post('/api/compra/remove-produto-carrinho', { produto: uid, item_carrinho: item_carrinho }) .done(processaRetornoRemover) .fail(processaErroRemover); function processaRetornoRemover(xhr) { var quantity = xhr.produtos.length; update(base, quantity) Component.emit('carrinho::update', xhr); } function processaErroRemover(xhr) { console.log(xhr); } } }); // NOVO CALENDARIO DE PASSAPORTES/OPCIONAIS 2020 define('accordion', ['Component'], function () { var module = new Component('accordion'); var cache = {} module.install = install; module.elements = { 'item': { 'click': accordion } }; module.bootstrap(); return module; function install(base) { } function accordion(base) { base .element("item") .state("active", false); this.state("active", true); } }); // NOVO CALENDARIO DE PASSAPORTES/OPCIONAIS 2020 define('omnichat', ['Component'], function () { var module = new Component('omnichat'); var cache = {} var window_size = $(window).width(); module.install = install; module.elements = { 'trigger': { click: toggleOmnichat }, }; module.bootstrap(); return module; function install(base) { } function toggleOmnichat(base) { var state = !document.body.is('active'); document.body.state('active', state); } }); define('app.src', [ 'text', 'css', 'utils', 'Component', 'stepper', 'calendar', 'filtro-dropdown', 'detalhe-produto', 'owl.linked', 'menu', 'carrinho', 'datepicker', 'location-search', 'select2', 'listahoteis', 'produto', 'newsletter', 'desconto', 'owl-carousel', // 'owl-slide', 'credit-card', 'pagamento-mobile', 'payment', 'checkout', 'newcalendar', 'calendarCart', 'tickets', 'ticket', 'cart', 'accordion', 'omnichat', // 'owl-carousel-atracoes' // 'format-last-numbers' ], function () { var resizeEvent = window.document.createEvent('UIEvents'); resizeEvent.initUIEvent('resize', true, false, window, 0); window.dispatchEvent(resizeEvent); });