feat: new template

This commit is contained in:
Caroline Moran 2022-12-05 09:22:58 -04:00
commit ea476c4a96
259 changed files with 61034 additions and 0 deletions

32
.editorconfig Normal file
View File

@ -0,0 +1,32 @@
# EditorConfig is awesome: http://EditorConfig.org
# top-most EditorConfig file
root = true
# Unix-style newlines with a newline ending every file
[*]
end_of_line = lf
insert_final_newline = true
trim_trailing_whitespace = true
charset = utf-8
# Indentação via TAB, para pug e html
[*.html]
indent_style = tab
indent_size = 3
# Arquivos JS e CSS
[*.{js,css,less,scss}]
indent_style = tab
indent_size = 4
# Demais arquivos importantes
[*.json]
indent_style = tab
indent_size = 2
# Demais arquivos importantes
[*.md]
indent_style = space
indent_size = 4

1
.eslintignore Normal file
View File

@ -0,0 +1 @@
src/arquivos/js/lib

30
.eslintrc.js Normal file
View File

@ -0,0 +1,30 @@
module.exports = {
env: {
browser: true,
jquery: true,
},
globals: {
Modulo: true,
},
extends: "eslint:recommended",
parserOptions: {
ecmaVersion: 10,
sourceType: "module",
},
rules: {
indent: ["warn", "tab", { SwitchCase: 1 }],
"linebreak-style": ["warn", "unix"],
"no-unused-vars": [
"warn",
{ vars: "all", args: "after-used", ignoreRestSiblings: false },
],
"valid-typeof": "warn",
"no-dupe-keys": "warn",
semi: "off",
"no-console": "off",
"no-useless-escape": "off",
"no-case-declarations": "error",
"no-undef": "off",
"no-prototype-builtins": "off",
},
};

30
.gitattributes vendored Normal file
View File

@ -0,0 +1,30 @@
# Handle line endings automatically for files detected as text
# and leave all files detected as binary untouched.
* text=auto
# Never modify line endings of our bash scripts
*.sh -crlf
#
# The above will handle all files NOT found below
#
# These files are text and should be normalized (Convert crlf => lf)
*.css text
*.html text
*.java text
*.js text
*.ts text
*.jsx text
*.tsx text
*.json text
*.properties text
*.txt text
*.xml text
# These files are binary and should be left untouched
# (binary is macro for -text -diff)
*.class binary
*.jar binary
*.gif binary
*.jpg binary
*.png binary

79
.gitignore vendored Normal file
View File

@ -0,0 +1,79 @@
# para arquivos sass e scss
**/*.sass-cache/
**/*.css.map
# Para arquivos de desenvolvimnto
public/
# Remove scss gerado pelo sprite.
src/arquivos/sass/lib/_sprite.scss
# gulp
dist/
.temp/
# node
### Node ###
# Logs
logs
*.log
npm-debug.log*
yarn-debug.log*
yarn-error.log*
.vscode/
# Runtime data
pids
*.pid
*.seed
*.pid.lock
# Directory for instrumented libs generated by jscoverage/JSCover
lib-cov
# Coverage directory used by tools like istanbul
coverage
# nyc test coverage
.nyc_output
# Grunt intermediate storage (http://gruntjs.com/creating-plugins#storing-task-files)
.grunt
# Bower dependency directory (https://bower.io/)
bower_components
# node-waf configuration
.lock-wscript
# Compiled binary addons (http://nodejs.org/api/addons.html)
build/Release
# Dependency directories
node_modules/
jspm_packages/
# Typescript v1 declaration files
typings/
# Optional npm cache directory
.npm
# Optional eslint cache
.eslintcache
# Optional REPL history
.node_repl_history
# Output of 'npm pack'
*.tgz
# Yarn Integrity file
.yarn-integrity
# dotenv environment variables file
.env
vtex-d.auth.json
vtex-d.lock.json

47
README.md Normal file
View File

@ -0,0 +1,47 @@
# VTEX CMS Template
data: 10/02/2020
## Requisitos
- Nodejs >= 10.13.0 - recomendo usar o nvm para gerenciar suas versões do nodejs (NVM)[https://github.com/coreybutler/nvm-windows/releases]
## Tarefas Gulp
- `npm run local` - Ativa um server local e assiste/atualiza mudanças nos arquivos ( html, scss, js e img ), ultilizado para desenvolvimento local.
- `npm run local:fast` - Ativa um server local e assiste/atualiza mudanças nos arquivos ( html, scss, js e img ), ultilizado para desenvolvimento local. Porem utiliza o sucrase para uma build mais rapida e leve, no qual pode ser util em projetos muito grandes ou em computadores mais fracos.
- `npm run dev` - Ativa um server local e assiste/atualiza mudanças nos arquivos ( scss, js e img ), ultilizado para desenvolvimento onde o template está.
- `npm run dev:fast` - Ativa um server local e assiste/atualiza mudanças nos arquivos ( scss, js e img ), ultilizado para desenvolvimento onde o template está. Porem utiliza o sucrase para uma build mais rapida e leve, no qual pode ser util em projetos muito grandes ou em computadores mais fracos.
- `npm run prod` - Realiza build para implantação na vtex
## Guias de desenvolvimento
- html: [Video Tutorial](https://drive.google.com/file/d/1nopiHENo5VRCsOKKihv6pbDOPOo2J2HV/view?usp=sharing)
- css:
- js:
## Processo de implantação
1. Criação da estrutura padrão das paginas
2. Alterar das requisições dos arquivos( normalmente imagens ), no html, css e js
3. Implantar sub-template ( footer, header, loads-footer, loads-header e tipbar )
- Substituir controles de desenvolvimentos pelos devidos controles da vtex
- http://help.vtex.com/tutorial/lista-de-controles-para-templates/
4. Implantar template de prateleira
- Substituir dados de teste pelos devidos controles da vtex
- http://help.vtex.com/tutorial/controles-do-template-de-prateleira/
5. Implantação dos templates de pagina
- Substituir controles de desenvolvimentos pelos devidos controles da vtex
- http://help.vtex.com/tutorial/lista-de-controles-para-templates/
6. Fazer Upload dos arquivos ( html, css e js )
- Lembre de habilitar o Flash na pagina do portal
7. Configurar os layouts para cada pasta( config do web site )
- Apontar templates
- Obs Erro "404 - File or directory not found." siginifica contentPlaceholder com id duplicado no template
- Definir "Body Class" correta.
- Essa classe sera usada para o js identificar em que pagina esta sendo executado.
- Configurar contentPlaceholder ( Controles para inserção de conteúdo )
8. Configuração Master data
- Custum Newsletter ( https://gitlab.com/agenciam3/custom-newsletter-form )
- Fale conosco ( https://gitlab.com/agenciam3/form-fale-conosco-vtex/ )

118
dev/VtexEmulation.js Normal file
View File

@ -0,0 +1,118 @@
var Transform = require("stream").Transform;
const path = require("path");
const VtexEngine = require("./vtexEngine/VtexEngine");
var PLUGIN_NAME = "VTEX_EMULATION";
var files = {
subtemplates: [],
controles: [],
prateleiras: [],
};
var VtexEmulation = function () {
this._folders = {};
this._regex = {};
this.folders({
template: "./src/template-pagina/",
subTemplate: "./src/sub-templates/",
controle: "./dev/controles-vtex/",
controleCustomizado: "./src/controle-customizado/",
prateleira: "./src/template-prateleira/",
metaData: "./meta/loja.js",
});
this.regex({
subtemplate: /<vtex:template id="(.*)" ?\/>/g,
controle: /<vtex\.cmc:([^ \>]*)[^\>]* ?\/>/g,
placeholder: /<vtex:contentPlaceHolder id="(.*)" (.*) ?\/>/g,
});
};
VtexEmulation.prototype.startEngine = function () {
this.loadSubTemplates();
this.loadPrateleira();
this.loadControles();
const metaPath = path.join(process.cwd(), this._folders.metaData);
const metaData = require(metaPath);
this.vtexEngine = new VtexEngine(files, metaData, this._regex);
};
VtexEmulation.prototype.process = function () {
const transformStream = new Transform({ objectMode: true });
const _this = this;
/**
* @param {Buffer|string} file
* @param {string=} encoding - ignored if file contains a Buffer
* @param {function(Error, object)} callback - Call this function (optionally with an
* error argument and data) when you are done processing the supplied chunk.
*/
transformStream._transform = function (file, encoding, callback) {
const fileContent = file.contents.toString(encoding);
//Meta dado associado pelo gulp https://gulpjs.com/docs/en/api/vinyl/
const fileMeta = {
basename: file.basename,
relative: file.relative,
dirname: file.dirname,
path: file.path,
};
const processedFile = _this.vtexEngine.process(
fileContent,
fileMeta,
this
);
file.contents = Buffer.from(processedFile, encoding);
var error = null,
output = file;
callback(error, output);
};
return transformStream;
};
// get/set
VtexEmulation.prototype.regex = function (regex) {
if (undefined != typeof regex) {
this._regex = Object.assign(this._regex, regex);
}
return this._regex;
};
VtexEmulation.prototype.folders = function (folders) {
if (undefined != typeof folders) {
this._folders = Object.assign(this._folders, folders);
}
return this._folders;
};
VtexEmulation.prototype.loadSubTemplates = function () {
files.subtemplates = makeListFileContent(this.folders().subTemplate);
};
VtexEmulation.prototype.loadPrateleira = function () {
files.prateleiras = makeListFileContent(this.folders().prateleira);
};
VtexEmulation.prototype.loadControles = function () {
var controles = makeListFileContent(this.folders().controle);
var customizados = makeListFileContent(this.folders().controleCustomizado);
files.controles = controles.concat(customizados);
};
var makeListFileContent = function (folder) {
var fs = require("fs");
var files = [];
fs.readdirSync(folder).forEach((name) => {
var file = {};
file.name = name
.substring(0, name.lastIndexOf("."))
.trim()
.toLowerCase();
file.content = fs.readFileSync(folder + name, "utf8");
files.push(file);
});
return files;
};
module.exports = new VtexEmulation();

View File

@ -0,0 +1 @@
[]

View File

@ -0,0 +1,5 @@
{
"Id": "CN-1b99d401-61f9-11e9-8289-0a2763d00362",
"Href": "/LOJA/dataentities/CN/documents/1b99d401-61f9-11e9-8289-0a2763d00362",
"DocumentId": "1b99d401-61f9-11e9-8289-0a2763d00362"
}

View File

@ -0,0 +1 @@
[]

View File

@ -0,0 +1,357 @@
[
{
"idProduto": 5095,
"ativo": true,
"id": "1000046"
},
{
"idProduto": 5052,
"ativo": true,
"id": "1000044"
},
{
"idProduto": 6943,
"ativo": true,
"id": "1000040"
},
{
"idProduto": 5079,
"ativo": true,
"id": "1000041"
},
{
"idProduto": 5055,
"ativo": true,
"id": "1000042"
},
{
"idProduto": 5057,
"ativo": true,
"id": "1000043"
},
{
"idProduto": 4712,
"ativo": true,
"id": "1000075"
},
{
"idProduto": 5851,
"ativo": true,
"id": "1000097"
},
{
"idProduto": 5846,
"ativo": true,
"id": "1000096"
},
{
"idProduto": 5850,
"ativo": false,
"id": "1000099"
},
{
"idProduto": 5847,
"ativo": false,
"id": "1000098"
},
{
"idProduto": 4682,
"ativo": true,
"id": "1000015"
},
{
"idProduto": 6014,
"ativo": true,
"id": "1000013"
},
{
"idProduto": 6622,
"ativo": true,
"id": "1000014"
},
{
"idProduto": 5912,
"ativo": true,
"id": "1000017"
},
{
"idProduto": 6885,
"ativo": true,
"id": "1000019"
},
{
"idProduto": 5545,
"ativo": false,
"id": "1000039"
},
{
"idProduto": 6283,
"ativo": false,
"id": "1000064"
},
{
"idProduto": 6280,
"ativo": true,
"id": "1000065"
},
{
"idProduto": 5527,
"ativo": false,
"id": "1000018"
},
{
"idProduto": 6649,
"ativo": false,
"id": "1000016"
},
{
"idProduto": 5084,
"ativo": true,
"id": "1000051"
},
{
"idProduto": 5084,
"ativo": true,
"id": "1000053"
},
{
"idProduto": 5084,
"ativo": true,
"id": "1000054"
},
{
"idProduto": 6991,
"ativo": true,
"id": "1000059"
},
{
"idProduto": 7068,
"ativo": false,
"id": "1000076"
},
{
"idProduto": 5801,
"ativo": true,
"id": "1000100"
},
{
"idProduto": 5848,
"ativo": true,
"id": "1000101"
},
{
"idProduto": 7272,
"ativo": true,
"id": "1000103"
},
{
"idProduto": 6970,
"ativo": true,
"id": "1000113"
},
{
"idProduto": 7010,
"ativo": false,
"id": "1000108"
},
{
"idProduto": 6980,
"ativo": true,
"id": "1000110"
},
{
"idProduto": 6999,
"ativo": true,
"id": "1000109"
},
{
"idProduto": 6589,
"ativo": true,
"id": "1000111"
},
{
"idProduto": 6585,
"ativo": true,
"id": "1000112"
},
{
"idProduto": 7342,
"ativo": true,
"id": "1000114"
},
{
"idProduto": 5439,
"ativo": true,
"id": "1000050"
},
{
"idProduto": 7012,
"ativo": true,
"id": "1000116"
},
{
"idProduto": 7050,
"ativo": false,
"id": "1000117"
},
{
"idProduto": 7005,
"ativo": true,
"id": "1000118"
},
{
"idProduto": 6994,
"ativo": true,
"id": "1000119"
},
{
"idProduto": 6769,
"ativo": false,
"id": "1000049"
},
{
"idProduto": 6652,
"ativo": true,
"id": "1000011"
},
{
"idProduto": 6864,
"ativo": true,
"id": "1000012"
},
{
"idProduto": 6868,
"ativo": false,
"id": "1000008"
},
{
"idProduto": 6868,
"ativo": true,
"id": "1000010"
},
{
"idProduto": 6174,
"ativo": false,
"id": "1000024"
},
{
"idProduto": 6914,
"ativo": true,
"id": "1000009"
},
{
"idProduto": 6172,
"ativo": false,
"id": "1000021"
},
{
"idProduto": 6948,
"ativo": false,
"id": "1000047"
},
{
"idProduto": 6991,
"ativo": true,
"id": "1000115"
},
{
"idProduto": 6775,
"ativo": true,
"id": "1000057"
},
{
"idProduto": 6774,
"ativo": false,
"id": "1000055"
},
{
"idProduto": 6942,
"ativo": true,
"id": "1000058"
},
{
"idProduto": 6272,
"ativo": true,
"id": "1000066"
},
{
"idProduto": 6295,
"ativo": true,
"id": "1000067"
},
{
"idProduto": 6880,
"ativo": false,
"id": "1000069"
},
{
"idProduto": 6869,
"ativo": true,
"id": "1000070"
},
{
"idProduto": 7184,
"ativo": true,
"id": "1000071"
},
{
"idProduto": 4985,
"ativo": false,
"id": "1000048"
},
{
"idProduto": 6860,
"ativo": true,
"id": "1000072"
},
{
"idProduto": 6630,
"ativo": true,
"id": "1000073"
},
{
"idProduto": 6629,
"ativo": true,
"id": "1000074"
},
{
"idProduto": 6289,
"ativo": true,
"id": "1000068"
},
{
"idProduto": 7091,
"ativo": true,
"id": "1000107"
},
{
"idProduto": 7004,
"ativo": true,
"id": "1000104"
},
{
"idProduto": 7001,
"ativo": true,
"id": "1000105"
},
{
"idProduto": 7072,
"ativo": true,
"id": "1000106"
},
{
"idProduto": 4922,
"ativo": true,
"id": "1000120"
},
{
"idProduto": 6987,
"ativo": true,
"id": "1000121"
},
{
"idProduto": 7332,
"ativo": false,
"id": "1000102"
}
]

View File

@ -0,0 +1 @@
{"idProduto":7091,"ativo":false,"id":"1000107"}

View File

@ -0,0 +1 @@
{"Id":"LD-1000122","Href":"http://www.honeybe.com.br/honeybe/dataentities/LD/documents/1000122","DocumentId":"1000122"}

File diff suppressed because it is too large Load Diff

397
dev/api/produtos/GET.json Normal file
View File

@ -0,0 +1,397 @@
[
{
"productId": "33776",
"productName": "Bolsa Feminina de Mão Textura Frontal em Tressê - WJ Acessórios",
"brand": "Wj",
"linkText": "bolsa-feminina-de-mao-textura-frontal-em-tresse---wj-acessorios--00237504732",
"productReference": "002.3.750.4732",
"categoryId": "439",
"productTitle": "",
"metaTagDescription": "<p> - Bolsa feminina <br><p> - Textura frontal em tressê<br><p> - Laterais com botões de pressão <br><p> - Fecho superior de zíper<br><p> - Bolso de zíper no verso <br><p> - Alça de mão <br><p> - Alça tiracolo opcional <br><p> - Forro de tecido <br><p> - Um bolso interno de zíper <br><p> - Dois compartimentos internos para pequenos pertences",
"clusterHighlights": {
"137": "Lançamentos"
},
"productClusters": {
"137": "Lançamentos"
},
"searchableClusters": {
"137": "Lançamentos"
},
"categories": [
"/Bauarte vtex/",
"/Feminino/",
"/Feminino/Bolsas/"
],
"categoriesIds": [
"/439/",
"/444/",
"/444/447/"
],
"link": "https://bauarte.vtexcommercestable.com.br/bolsa-feminina-de-mao-textura-frontal-em-tresse---wj-acessorios--00237504732/p",
"description": "<p> - Bolsa feminina <br><p> - Textura frontal em tressê<br><p> - Laterais com botões de pressão <br><p> - Fecho superior de zíper<br><p> - Bolso de zíper no verso <br><p> - Alça de mão <br><p> - Alça tiracolo opcional <br><p> - Forro de tecido <br><p> - Um bolso interno de zíper <br><p> - Dois compartimentos internos para pequenos pertences",
"items": [
{
"itemId": "163975",
"name": "Bolsa Feminina de Mão Textura Frontal em Tressê - WJ Acessórios Marrom",
"nameComplete": "Bolsa Feminina de Mão Textura Frontal em Tressê - WJ Acessórios Marrom",
"complementName": "750.44732",
"ean": "7908210630693",
"referenceId": [
{
"Key": "RefId",
"Value": "33776_38_0_M"
}
],
"measurementUnit": "un",
"unitMultiplier": 1,
"modalType": null,
"isKit": false,
"images": [
{
"imageId": "155451",
"imageLabel": null,
"imageTag": "<img src=\"~/arquivos/ids/155451-#width#-#height#/002.3.750.4732_019_M-1.jpg?v=636894017208970000\" width=\"#width#\" height=\"#height#\" alt=\"002.3.750.4732_019_M-1\" id=\"\" />",
"imageUrl": "http://bauarte.vteximg.com.br/arquivos/ids/155451/002.3.750.4732_019_M-1.jpg?v=636894017208970000",
"imageText": "002.3.750.4732_019_M-1"
},
{
"imageId": "155452",
"imageLabel": null,
"imageTag": "<img src=\"~/arquivos/ids/155452-#width#-#height#/002.3.750.4732_019_M-2.jpg?v=636894017221630000\" width=\"#width#\" height=\"#height#\" alt=\"002.3.750.4732_019_M-2\" id=\"\" />",
"imageUrl": "http://bauarte.vteximg.com.br/arquivos/ids/155452/002.3.750.4732_019_M-2.jpg?v=636894017221630000",
"imageText": "002.3.750.4732_019_M-2"
},
{
"imageId": "155453",
"imageLabel": null,
"imageTag": "<img src=\"~/arquivos/ids/155453-#width#-#height#/002.3.750.4732_019_M-3.jpg?v=636894017234000000\" width=\"#width#\" height=\"#height#\" alt=\"002.3.750.4732_019_M-3\" id=\"\" />",
"imageUrl": "http://bauarte.vteximg.com.br/arquivos/ids/155453/002.3.750.4732_019_M-3.jpg?v=636894017234000000",
"imageText": "002.3.750.4732_019_M-3"
},
{
"imageId": "155454",
"imageLabel": null,
"imageTag": "<img src=\"~/arquivos/ids/155454-#width#-#height#/002.3.750.4732_019_M-4.jpg?v=636894017244330000\" width=\"#width#\" height=\"#height#\" alt=\"002.3.750.4732_019_M-4\" id=\"\" />",
"imageUrl": "http://bauarte.vteximg.com.br/arquivos/ids/155454/002.3.750.4732_019_M-4.jpg?v=636894017244330000",
"imageText": "002.3.750.4732_019_M-4"
}
],
"Cor": [
"MARROM"
],
"Tamanho": [
"M"
],
"variations": [
"Cor",
"Tamanho"
],
"sellers": [
{
"sellerId": "1",
"sellerName": "Bauarte",
"addToCartLink": "https://bauarte.vtexcommercestable.com.br/checkout/cart/add?sku=163975&qty=1&seller=1&sc=1&price=23951&cv=6609909e2f6cf852d890f55d8e436bab_&sc=1",
"sellerDefault": true,
"commertialOffer": {
"DeliverySlaSamplesPerRegion": {
"0": {
"DeliverySlaPerTypes": [],
"Region": null
}
},
"Installments": [
{
"Value": 239.51,
"InterestRate": 0,
"TotalValuePlusInterestRate": 239.51,
"NumberOfInstallments": 1,
"PaymentSystemName": "American Express",
"PaymentSystemGroupName": "creditCardPaymentGroup",
"Name": "American Express à vista"
},
{
"Value": 239.51,
"InterestRate": 0,
"TotalValuePlusInterestRate": 239.51,
"NumberOfInstallments": 1,
"PaymentSystemName": "Visa",
"PaymentSystemGroupName": "creditCardPaymentGroup",
"Name": "Visa à vista"
},
{
"Value": 239.51,
"InterestRate": 0,
"TotalValuePlusInterestRate": 239.51,
"NumberOfInstallments": 1,
"PaymentSystemName": "Diners",
"PaymentSystemGroupName": "creditCardPaymentGroup",
"Name": "Diners à vista"
},
{
"Value": 239.51,
"InterestRate": 0,
"TotalValuePlusInterestRate": 239.51,
"NumberOfInstallments": 1,
"PaymentSystemName": "Mastercard",
"PaymentSystemGroupName": "creditCardPaymentGroup",
"Name": "Mastercard à vista"
},
{
"Value": 239.51,
"InterestRate": 0,
"TotalValuePlusInterestRate": 239.51,
"NumberOfInstallments": 1,
"PaymentSystemName": "Discover",
"PaymentSystemGroupName": "creditCardPaymentGroup",
"Name": "Discover à vista"
},
{
"Value": 239.51,
"InterestRate": 0,
"TotalValuePlusInterestRate": 239.51,
"NumberOfInstallments": 1,
"PaymentSystemName": "Boleto Bancário",
"PaymentSystemGroupName": "bankInvoicePaymentGroup",
"Name": "Boleto Bancário à vista"
},
{
"Value": 239.51,
"InterestRate": 0,
"TotalValuePlusInterestRate": 239.51,
"NumberOfInstallments": 1,
"PaymentSystemName": "Aura",
"PaymentSystemGroupName": "creditCardPaymentGroup",
"Name": "Aura à vista"
},
{
"Value": 239.51,
"InterestRate": 0,
"TotalValuePlusInterestRate": 239.51,
"NumberOfInstallments": 1,
"PaymentSystemName": "Elo",
"PaymentSystemGroupName": "creditCardPaymentGroup",
"Name": "Elo à vista"
},
{
"Value": 239.51,
"InterestRate": 0,
"TotalValuePlusInterestRate": 239.51,
"NumberOfInstallments": 1,
"PaymentSystemName": "Visa Electron",
"PaymentSystemGroupName": "debitCardPaymentGroup",
"Name": "Visa Electron à vista"
},
{
"Value": 239.51,
"InterestRate": 0,
"TotalValuePlusInterestRate": 239.51,
"NumberOfInstallments": 1,
"PaymentSystemName": "Maestro",
"PaymentSystemGroupName": "debitCardPaymentGroup",
"Name": "Maestro à vista"
}
],
"DiscountHighLight": [],
"GiftSkuIds": [],
"Teasers": [],
"BuyTogether": [],
"ItemMetadataAttachment": [],
"Price": 239.51,
"ListPrice": 239.51,
"PriceWithoutDiscount": 239.51,
"RewardValue": 0,
"PriceValidUntil": "2020-04-01T20:05:24.358981Z",
"AvailableQuantity": 2,
"Tax": 0,
"DeliverySlaSamples": [
{
"DeliverySlaPerTypes": [],
"Region": null
}
],
"GetInfoErrorMessage": null,
"CacheVersionUsedToCallCheckout": "6609909e2f6cf852d890f55d8e436bab_"
}
}
],
"Videos": []
},
{
"itemId": "163976",
"name": "Bolsa Feminina de Mão Textura Frontal em Tressê - WJ Acessórios Preto",
"nameComplete": "Bolsa Feminina de Mão Textura Frontal em Tressê - WJ Acessórios Preto",
"complementName": "750.44732",
"ean": "7908210630709",
"referenceId": [
{
"Key": "RefId",
"Value": "33776_58_0_M"
}
],
"measurementUnit": "un",
"unitMultiplier": 1,
"modalType": null,
"isKit": false,
"images": [
{
"imageId": "155455",
"imageLabel": null,
"imageTag": "<img src=\"~/arquivos/ids/155455-#width#-#height#/002.3.750.4732_029_M-1.jpg?v=636894017271900000\" width=\"#width#\" height=\"#height#\" alt=\"002.3.750.4732_029_M-1\" id=\"\" />",
"imageUrl": "http://bauarte.vteximg.com.br/arquivos/ids/155455/002.3.750.4732_029_M-1.jpg?v=636894017271900000",
"imageText": "002.3.750.4732_029_M-1"
},
{
"imageId": "155456",
"imageLabel": null,
"imageTag": "<img src=\"~/arquivos/ids/155456-#width#-#height#/002.3.750.4732_029_M-2.jpg?v=636894017283000000\" width=\"#width#\" height=\"#height#\" alt=\"002.3.750.4732_029_M-2\" id=\"\" />",
"imageUrl": "http://bauarte.vteximg.com.br/arquivos/ids/155456/002.3.750.4732_029_M-2.jpg?v=636894017283000000",
"imageText": "002.3.750.4732_029_M-2"
},
{
"imageId": "155457",
"imageLabel": null,
"imageTag": "<img src=\"~/arquivos/ids/155457-#width#-#height#/002.3.750.4732_029_M-3.jpg?v=636894017293530000\" width=\"#width#\" height=\"#height#\" alt=\"002.3.750.4732_029_M-3\" id=\"\" />",
"imageUrl": "http://bauarte.vteximg.com.br/arquivos/ids/155457/002.3.750.4732_029_M-3.jpg?v=636894017293530000",
"imageText": "002.3.750.4732_029_M-3"
},
{
"imageId": "155458",
"imageLabel": null,
"imageTag": "<img src=\"~/arquivos/ids/155458-#width#-#height#/002.3.750.4732_029_M-4.jpg?v=636894017302630000\" width=\"#width#\" height=\"#height#\" alt=\"002.3.750.4732_029_M-4\" id=\"\" />",
"imageUrl": "http://bauarte.vteximg.com.br/arquivos/ids/155458/002.3.750.4732_029_M-4.jpg?v=636894017302630000",
"imageText": "002.3.750.4732_029_M-4"
}
],
"sellers": [
{
"sellerId": "1",
"sellerName": "Bauarte",
"addToCartLink": "https://bauarte.vtexcommercestable.com.br/checkout/cart/add?sku=163976&qty=1&seller=1&sc=1&price=23951&cv=6609909e2f6cf852d890f55d8e436bab_&sc=1",
"sellerDefault": true,
"commertialOffer": {
"DeliverySlaSamplesPerRegion": {
"0": {
"DeliverySlaPerTypes": [],
"Region": null
}
},
"Installments": [
{
"Value": 239.51,
"InterestRate": 0,
"TotalValuePlusInterestRate": 239.51,
"NumberOfInstallments": 1,
"PaymentSystemName": "American Express",
"PaymentSystemGroupName": "creditCardPaymentGroup",
"Name": "American Express à vista"
},
{
"Value": 239.51,
"InterestRate": 0,
"TotalValuePlusInterestRate": 239.51,
"NumberOfInstallments": 1,
"PaymentSystemName": "Visa",
"PaymentSystemGroupName": "creditCardPaymentGroup",
"Name": "Visa à vista"
},
{
"Value": 239.51,
"InterestRate": 0,
"TotalValuePlusInterestRate": 239.51,
"NumberOfInstallments": 1,
"PaymentSystemName": "Diners",
"PaymentSystemGroupName": "creditCardPaymentGroup",
"Name": "Diners à vista"
},
{
"Value": 239.51,
"InterestRate": 0,
"TotalValuePlusInterestRate": 239.51,
"NumberOfInstallments": 1,
"PaymentSystemName": "Mastercard",
"PaymentSystemGroupName": "creditCardPaymentGroup",
"Name": "Mastercard à vista"
},
{
"Value": 239.51,
"InterestRate": 0,
"TotalValuePlusInterestRate": 239.51,
"NumberOfInstallments": 1,
"PaymentSystemName": "Discover",
"PaymentSystemGroupName": "creditCardPaymentGroup",
"Name": "Discover à vista"
},
{
"Value": 239.51,
"InterestRate": 0,
"TotalValuePlusInterestRate": 239.51,
"NumberOfInstallments": 1,
"PaymentSystemName": "Boleto Bancário",
"PaymentSystemGroupName": "bankInvoicePaymentGroup",
"Name": "Boleto Bancário à vista"
},
{
"Value": 239.51,
"InterestRate": 0,
"TotalValuePlusInterestRate": 239.51,
"NumberOfInstallments": 1,
"PaymentSystemName": "Aura",
"PaymentSystemGroupName": "creditCardPaymentGroup",
"Name": "Aura à vista"
},
{
"Value": 239.51,
"InterestRate": 0,
"TotalValuePlusInterestRate": 239.51,
"NumberOfInstallments": 1,
"PaymentSystemName": "Elo",
"PaymentSystemGroupName": "creditCardPaymentGroup",
"Name": "Elo à vista"
},
{
"Value": 239.51,
"InterestRate": 0,
"TotalValuePlusInterestRate": 239.51,
"NumberOfInstallments": 1,
"PaymentSystemName": "Visa Electron",
"PaymentSystemGroupName": "debitCardPaymentGroup",
"Name": "Visa Electron à vista"
},
{
"Value": 239.51,
"InterestRate": 0,
"TotalValuePlusInterestRate": 239.51,
"NumberOfInstallments": 1,
"PaymentSystemName": "Maestro",
"PaymentSystemGroupName": "debitCardPaymentGroup",
"Name": "Maestro à vista"
}
],
"DiscountHighLight": [],
"GiftSkuIds": [],
"Teasers": [],
"BuyTogether": [],
"ItemMetadataAttachment": [],
"Price": 239.51,
"ListPrice": 239.51,
"PriceWithoutDiscount": 239.51,
"RewardValue": 0,
"PriceValidUntil": "2020-04-01T20:05:24.3834557Z",
"AvailableQuantity": 2,
"Tax": 0,
"DeliverySlaSamples": [
{
"DeliverySlaPerTypes": [],
"Region": null
}
],
"GetInfoErrorMessage": null,
"CacheVersionUsedToCallCheckout": "6609909e2f6cf852d890f55d8e436bab_"
}
}
],
"Videos": []
}
]
}
]

1
dev/api/usuario/GET.json Normal file
View File

@ -0,0 +1 @@
{"UserId":"a581524b-02d8-4534-94c4-ca25a61a630d","IsReturningUser":true,"IsUserDefined":true,"IsPJ":false,"FirstName":"Teste","LastName":"Teste","Gender":null,"Email":"davi@digitalm3.com.br"}

View File

@ -0,0 +1,35 @@
<div class="portal-totalizers-ref">
<div class="amount-items-in-cart">
<div class="cartInfoWrapper">
<span class="title">
<span id="MostraTextoXml1">Resumo do Carrinho</span>
</span>
<ul class="cart-info">
<li class="amount-products">
<strong>
<span id="MostraTextoXml2">Total de Produtos:</span>
</strong>
<em class="amount-products-em">28</em>
</li>
<li class="amount-items">
<strong>
<span id="MostraTextoXml3">Itens:</span>
</strong>
<em class="amount-items-em">28</em>
</li>
<li class="amount-kits">
<strong>
<span id="MostraTextoXml4">Total de Kits:</span>
</strong>
<em class="amount-kits-em"></em>
</li>
<li class="total-cart">
<strong>
<span id="MostraTextoXml5">Valor Total:</span>
</strong>
<em class="total-cart-em">R$ 467,20</em>
</li>
</ul>
</div>
</div>
</div>

View File

@ -0,0 +1,29 @@
<a target="_top" class="buy-button buy-button-ref" href="#" style="display:block">
<div class="qtd-selector-content">
<span class="title">Quantidade</span>
<select class="quantidade">
<option value="1">1</option>
<option value="2">2</option>
<option value="3">3</option>
<option value="4">4</option>
<option value="5">5</option>
<option value="6">6</option>
<option value="7">7</option>
<option value="8">8</option>
<option value="9">9</option>
<option value="10">10</option>
<option value="11">11</option>
<option value="12">12</option>
<option value="13">13</option>
<option value="14">14</option>
<option value="15">15</option>
<option value="16">16</option>
</select>
<div class="btnBuy">
<a title="Compra" class="btn-compra" data-sku-id="13" data-quantidade="1">Compra</a>
</div>
</div>
</a>
<p class="unavailable-button hidden">Produto Esgotado</p>
<input type="hidden" class="buy-button-amount" value="1">
<div class="portal-notify-me-ref"></div>

View File

@ -0,0 +1,29 @@
<input size="20" type="text" class="buy-in-page-quantity" value="1" productindex="0" style="display:block">
<a class="buy-in-page-button" productindex="0" style="display:block">
<div class="qtd-selector-content">
<span class="title">Quantidade</span>
<select class="quantidade">
<option value="1">1</option>
<option value="2">2</option>
<option value="3">3</option>
<option value="4">4</option>
<option value="5">5</option>
<option value="6">6</option>
<option value="7">7</option>
<option value="8">8</option>
<option value="9">9</option>
<option value="10">10</option>
<option value="11">11</option>
<option value="12">12</option>
<option value="13">13</option>
<option value="14">14</option>
<option value="15">15</option>
<option value="16">16</option>
</select>
<div class="btnBuy">
<a title="Compra" class="btn-compra" data-sku-id="13" data-quantidade="1">Compra</a>
</div>
</div>
</a>
<p class="unavailable-button" productindex="0" style="display:none">Produto Esgotado</p>
<div productindex="0" class="notifyme" style="display:none"> </div>

View File

@ -0,0 +1,47 @@
<div id="divCompreJunto" class="buy-together-content">
<h4 id="divTitulo">Aproveite e Compre Junto</h4>
<table>
<tbody>
<tr>
<td class="itemA">
<a href="produto.html">
<img src="http://via.placeholder.com/90x90" width="90"
height="90" alt="F" id="">
</a>
<h3>
<a href="produto.html" id="lnkProdAtualPai">Produto 1</a>
</h3>
</td>
<td class="plus">
+
</td>
<td class="itemB">
<a href="produto.html">
<img src="http://via.placeholder.com/90x90" width="90"
height="90" alt="bepantol-baby" id="">
</a>
<h3>
<a href="produto.html" id="lnkProdAtualFilho">Produto 2</a>
</h3>
</td>
<td class="equal">
=
</td>
<td class="buy">
Por apenas
<strong>1x</strong> de
<strong> R$ 41,49</strong>
<br> Valor total: R$ 41,49
<p class="comprar-junto">
<a href="#checkout"
id="lnkComprar">Comprar</a>
</p>
<p class="more">
<a href="categoria.html" id="lnkVejaMais">Veja mais categoria</a>
</p>
</td>
</tr>
</tbody>
</table>
<hr class="buy-together">
</div>

View File

@ -0,0 +1,20 @@
<div class="hidden Controels-vtex" style="display:none">
<div class="skuSelection"><vtex.cmc:skuSelection /></div>
<div class="skuRichSelection"><vtex.cmc:skuRichSelection changeImage="1" /></div>
<div class="skuPrice"> <vtex.cmc:skuPrice/></div>
<div class="productPageTitle"><vtex.cmc:productPageTitle /></div>
<div class="skuReference"><vtex.cmc:skuReference/></div>
<div class="productReference"><vtex.cmc:productReference/></div>
<div class="skuSelection"><vtex.cmc:skuSelection /></div>
<div class="skuRichSelection"><vtex.cmc:skuRichSelection changeImage="1" /></div>
<div class="OtherPaymentMethod"><vtex.cmc:OtherPaymentMethod/></div>
<div class="ProductDescription"><vtex.cmc:ProductDescription/></div>
<div class="productDescriptionShort"><vtex.cmc:productDescriptionShort /></div>
<div class="productSpecification"><vtex.cmc:productSpecification/></div>
<div class="ProductTag"><vtex.cmc:ProductTag/></div>
<div class="BuyButton"><vtex.cmc:BuyButton/></div>
<div class="BuyInPage"><vtex.cmc:BuyInPage/></div>
<div class="stockKeepingUnitAmountAndUnitSelection"><vtex.cmc:stockKeepingUnitAmountAndUnitSelection /></div>
<div class="HightLight"><vtex.cmc:HightLight/></div>
<div class="discountHightLight"><vtex.cmc:discountHightLight/></div>
</div>

View File

@ -0,0 +1 @@
<p class="flag tudo">Tudo</p>

View File

@ -0,0 +1,11 @@
<div class="other-payment-method-content">
<div class="other-payment-method">
<span class="titulo-parcelamento">Opções de Parcelamento:</span>
<ul class="other-payment-method-ul">
<li class="other-payment-method-Visa-à vista #ParcelamentoPreco#">à vista R$ 565,20
<span class="other-payment-method-intereset-no"></span>
</li>
</ul>
<a class="see-other-payment-method-link" href="#">Outras formas de pagamento</a>
</div>
</div>

View File

@ -0,0 +1,14 @@
<div class="productDescription">
Produtos com a melhor qualidade e preço você encontra na Loja.
<br>Garanta sua revenda sempre com os melhores preços e produtos.
<br>
<br>Cueca Boxer ZEE RUCCI Sem Costura possui detalhes no cós.
<br>Modelagem boxer e cós elástico tradicional.
<br>Confeccionada em poliamida com elastano, permite conforto e caimento perfeito ao corpo.
<br>
<br>
<br>P (Indicado para manequins tamanho 36)
<br>M (Indicado para manequins tamanho 38/40)
<br>G (Indicado para manequins tamanho 42)
<br>GG (Indicado para manequins tamanho 44)
</div>

View File

@ -0,0 +1,32 @@
<div class="apresentacao">
<div id="setaThumbs"></div>
<div id="show">
<div id="include">
<div id="image" productIndex="0">
<a href="https://agenciamagma.vteximg.com.br/arquivos/ids/155571-1000-1000/109B50_75-IMS-pt_BR.jpg?v=636863519724400000"
class="image-zoom"><img productIndex="0" id="image-main" class="sku-rich-image-main"
src="https://agenciamagma.vteximg.com.br/arquivos/ids/155571-450-450/109B50_75-IMS-pt_BR.jpg?v=636863519724400000"
alt="label_1" title="label_1" /></a>
</div>
</div>
<ul class="thumbs">
<li>
<a id='botaoZoom' href='javascript:void(0);' title='Zoom'
rel='https://agenciamagma.vteximg.com.br/arquivos/ids/155571-450-450/109B50_75-IMS-pt_BR.jpg?v=636863519724400000'
zoom='https://agenciamagma.vteximg.com.br/arquivos/ids/155571-1000-1000/109B50_75-IMS-pt_BR.jpg?v=636863519724400000'>
<img
src='https://agenciamagma.vteximg.com.br/arquivos/ids/155571-100-100/109B50_75-IMS-pt_BR.jpg?v=636863519724400000'
title='label_1' alt='label_1' />
</a>
</li>
<li>
<a id='botaoZoom' href='javascript:void(0);' title='Zoom'
rel='https://agenciamagma.vteximg.com.br/arquivos/ids/155594-450-450/SUNP0134.jpg?v=636864324968370000'
zoom='https://agenciamagma.vteximg.com.br/arquivos/ids/155594-1000-1000/SUNP0134.jpg?v=636864324968370000'>
<img src='https://agenciamagma.vteximg.com.br/arquivos/ids/155594-100-100/SUNP0134.jpg?v=636864324968370000'
title='SUNP0134' alt='SUNP0134' />
</a>
</li>
</ul>
</div>
</div>

View File

@ -0,0 +1,35 @@
<div class="product-tag">
<div id="tags" class="tags-associadas">
<h4> Tags associadas a esse produto pelos consumidores</h4>
<p></p>
<p>O que são Tags? Tags são palavras-chaves associadas aos produtos pelos próprios consumidores. Ao clicar em uma Tag você
poderá ver todos os produtos associados a ela.</p>
<p></p>
<div id="divBloco" class="wrapper user-included-tags"></div>
<div class="tag-product-message-user"></div>
<div id="divTags">
<fieldset>
<label>Adicione suas tags a esse produto</label>
<span id="lblTag" class="tagtext">
<input type="text" class="fitext product-tag-name" autocomplete="off" maxlength="25">
</span>
<span class="add">
<input type="button" value="Adicionar" title="Adicionar" class="bt btn-add-product-tag">
</span>
<input type="hidden" value="10" class="product-tag-product-id">
<div id="progress" style="display:none;">
<ul class="links">
<li class="more-tags">
<a id="lnkTagsMaisPopulares" title=" Veja as tags mais populares" class="bt" href="/Site/TagsMaisPopulares.aspx">Veja as tags mais populares</a>
</li>
</ul>
<ul class="top">
<li>
<a href="#aspnetForm" title="Topo">Topo</a>
</li>
</ul>
</div>
<hr> </fieldset>
</div>
</div>
</div>

View File

@ -0,0 +1,13 @@
<div class="bread-crumb" xmlns:v="http://rdf.data-vocabulary.org/#">
<ul>
<li typeof="v:Breadcrumb">
<a href="home.html" rel="v:url" property="v:title">Minha Loja</a>
</li>
<li typeof="v:Breadcrumb">
<a href="categoria.html" rel="v:url" property="v:title">Conjuntos</a>
</li>
<li class="last" typeof="v:Breadcrumb">
<a href="categoria.html" rel="v:url" property="v:title">Conjunto Infantil</a>
</li>
</ul>
</div>

View File

@ -0,0 +1,152 @@
<script>
var dataLayer = [
{
"pageCategory":"Department",
"pageDepartment":"Conjuntos",
"pageUrl":"categoria.html#conjuntos",
"pageTitle":"Conjunto de Lingerie no Atacado | Loja",
"skuStockOutFromShelf":[
"24419",
"24310",
"24311",
"24279",
"24280",
"23148",
"23017",
"23018",
"23019",
"23020",
"23021",
"23022",
"21637",
"21640",
"21641",
"21643",
"21649",
"23868",
"23869",
"23873",
"12947",
"12948",
"12949",
"12950",
"12953",
"12954",
"12959",
"12960",
"12961",
"15195",
"15196",
"15197",
"17770",
"17771",
"19113",
"19116",
"23103",
"23104",
"23105",
"24592",
"24593",
"24594",
"24595",
"24604",
"24398",
"24401",
"24402",
"24403",
"24404",
"24405",
"24406",
"24407",
"24409",
"24410",
"24411",
"24412",
"24414",
"24415",
"24416",
"24417",
"24327",
"24338",
"24339",
"24340",
"24343",
"24344",
"24286",
"24287",
"24288",
"24291",
"24294",
"24295",
"24296",
"24297",
"24298",
"24299",
"24302",
"24303",
"24304",
"24307",
"24125",
"24128",
"24133",
"24137"
],
"skuStockOutFromProductDetail":[
],
"shelfProductIds":[
"1193",
"1189",
"1187",
"1139",
"1136",
"1065",
"689",
"1200",
"1192",
"1190",
"1188",
"1179"
],
"accountName":"Loja",
"pageFacets":[
"departmentId:2",
"categoriesFullPath:/2/",
"brandId:2000003",
"productClusterSearchableIds:135",
"TAMANHO:G"
],
"departmentId":2,
"departmentName":"Conjuntos",
"categoryId":2,
"categoryName":"Conjuntos"
},
{
"gtm.start":1523538424468,
"event":"gtm.js",
"gtm.uniqueEventId":0
},
{
"visitorLoginState":true,
"visitorExistingCustomer":true,
"visitorType":"returning user",
"visitorId":"a581524b-02d8-4534-94c4-ca25a61a630d",
"visitorContactInfo":[
"davi@digitalm3.com.br",
"Davi",
"M3"
],
"visitorDemographicInfo":{
"gender":"M"
}
},
{
"event":"departmentView",
"gtm.uniqueEventId":2
},
{
"event":"gtm.dom",
"gtm.uniqueEventId":3
}
];
</script>

View File

@ -0,0 +1,190 @@
<script>
var dataLayer =[
{
"pageCategory":"Home",
"pageDepartment":null,
"pageUrl":"home.html",
"pageTitle":"Lingerie no atacado você encontra na Loja",
"skuStockOutFromShelf":[
"24508",
"24510",
"24511",
"24513",
"24514",
"24515",
"24516",
"24517",
"24521",
"24522",
"24525",
"24526",
"24527",
"24528",
"24529",
"24530",
"16867",
"16868",
"16869",
"16870",
"16871",
"16872",
"16873",
"16875",
"20888",
"20889",
"20890",
"20891",
"20895",
"20899",
"15425",
"15439",
"22309",
"22310",
"15280",
"15282",
"22323",
"22325",
"22326",
"22327",
"22330",
"22331",
"22340",
"14672",
"14713",
"14714",
"14715",
"14716",
"14717",
"16025",
"16026",
"16027",
"16028",
"16029",
"16030",
"16031",
"20904",
"20905",
"20906",
"20907",
"20915",
"20919",
"24833",
"24834",
"24841",
"24842",
"24845",
"24846",
"24788",
"24789",
"24790",
"24791",
"24801",
"24805",
"24778",
"25230",
"25235",
"25240",
"25241",
"25243",
"25249",
"25250",
"25252",
"25253",
"25255",
"25256",
"25257",
"25258",
"25259",
"25264",
"25265",
"25266",
"25267",
"25268",
"25269",
"25185",
"25202",
"25206",
"25209",
"25156",
"25116",
"25136",
"25144",
"25146",
"25152",
"25154",
"25155",
"25056",
"25057",
"25058",
"25059",
"25068",
"25070",
"25071"
],
"skuStockOutFromProductDetail":[
],
"shelfProductIds":[
"1198",
"836",
"792",
"775",
"774",
"773",
"751",
"1218",
"1216",
"1215",
"1214",
"1208",
"1236",
"1235",
"1234",
"1233",
"1232",
"1230",
"1231",
"1229",
"1228",
"1227",
"1226",
"1225"
],
"accountName":"Loja",
"pageFacets":[
]
},
{
"gtm.start":1523538341891,
"event":"gtm.js",
"gtm.uniqueEventId":0
},
{
"visitorLoginState":true,
"visitorExistingCustomer":true,
"visitorType":"returning user",
"visitorId":"a581524b-02d8-4534-94c4-ca25a61a630d",
"visitorContactInfo":[
"davi@digitalm3.com.br",
"Davi",
"M3"
],
"visitorDemographicInfo":{
"gender":"M"
}
},
{
"event":"homeView",
"gtm.uniqueEventId":2
},
{
"event":"gtm.dom",
"gtm.uniqueEventId":3
},
{
"event":"gtm.load",
"gtm.uniqueEventId":4
}
];
</script>

View File

@ -0,0 +1,62 @@
<script>
var dataLayer = [
{
"pageCategory": "Product",
"pageDepartment": "Sutiãs",
"pageUrl": "http://www.lingeriefriburgo.com.br/sutia-bojo-confort-com-alca-fina-chocolate/p",
"pageTitle": "Sutiã bojo Confort com alça fina.Aproveite no cartão 3x sem juros. - tielingerie",
"skuStockOutFromShelf": [],
"skuStockOutFromProductDetail": [],
"shelfProductIds": [],
"accountName": "tielingerie",
"pageFacets": [],
"productId": "279",
"productReferenceId": "0547",
"productEans": [
"0000000000786",
"0000000000787",
"0000000000788"
],
"skuStocks": {
"2027": 2,
"2028": 1,
"2029": 1
},
"productName": "Sutiã bojo Confort com alça fina Chocolate",
"productBrandId": 2000000,
"productBrandName": "Tiê Lingerie",
"productDepartmentId": 2,
"productDepartmentName": "Sutiãs",
"productCategoryId": 2,
"productCategoryName": "Sutiãs",
"productListPriceFrom": "47.3",
"productListPriceTo": "47.3",
"productPriceFrom": "47.3",
"productPriceTo": "47.3",
"sellerId": "1",
"sellerIds": "1"
},
{
"gtm.start": 1552654152801,
"event": "gtm.js",
"gtm.uniqueEventId": 0
},
{
"visitorLoginState": false,
"visitorExistingCustomer": false,
"visitorType": "new user"
},
{
"event": "productView",
"gtm.uniqueEventId": 12
},
{
"event": "gtm.dom",
"gtm.uniqueEventId": 14
},
{
"event": "gtm.load",
"gtm.uniqueEventId": 15
}
];
</script>

View File

@ -0,0 +1,30 @@
<fieldset class="busca">
<legend>Buscar no site</legend>
<label>Buscar</label>
<select id="ftDepta28507c5599f4430a7cabd23249f99c3">
<option value="">Todo o site</option>
<option value="1">Calcinhas</option>
<option value="4">Espartilho</option>
<option value="8">Plus Size</option>
<option value="10">Soutien</option>
<option value="2">Conjuntos</option>
<option value="3">Cueca</option>
<option value="5">Fitness</option>
<option value="6">Material de Apoio</option>
<option value="7">Meias</option>
<option value="46">Promoção</option>
<option value="47">Kit Revendedora</option>
<option value="48">Outlet</option>
<option value="51">Liquida Inverno</option>
<option value="52">Linha Gestante</option>
<option value="56">Semana Maluca</option>
<option value="57">Moda Praia</option>
<option value="59">Body</option>
<option value="61">Black Friday</option>
<option value="64">Bota Fora Dondocas</option>
</select>
<input type="hidden" id="ftIdxa28507c5599f4430a7cabd23249f99c3" value="" />
<input id="ftBoxa28507c5599f4430a7cabd23249f99c3" class="fulltext-search-box ui-autocomplete-input" type="text" size="20"
accesskey="b" autocomplete="off" role="textbox" aria-autocomplete="list" aria-haspopup="true" value="Digite aqui" />
<input id="ftBtna28507c5599f4430a7cabd23249f99c3" type="button" value="Buscar" class="btn-buscar" />
</fieldset>

View File

@ -0,0 +1,898 @@
<div class="portal-minicart-ref">
<div class="v2-vtexsc-cart vtexsc-cart mouseActivated preLoaded" style="overflow: hidden; display: none;">
<div class="vtexsc-bt"></div>
<div class="vtexsc-center">
<div class="vtexsc-wrap ">
<table class="vtexsc-productList">
<thead>
<tr>
<th class="cartSkuName" colspan="2">Produto</th>
<th class="cartSkuPrice">Preço</th>
<th class="cartSkuQuantity">Quantidade</th>
<th class="cartSkuActions">Excluir</th>
</tr>
</thead>
<tbody>
<tr>
<td class="cartSkuImage">
<a class="sku-imagem" href="/produto.html">
<img height="71" width="71" alt="Conjunto Cropped c/ Renda e Biju Luxo B345 Azul Marinho P" src="http://via.placeholder.com/80x80">
</a>
</td>
<td class="cartSkuName">
<h4>
<a href="/produto.html">Conjunto Cropped c/ Renda e Biju Luxo B345 Azul Marinho P</a>
</h4>
<p class="availability"></p>
</td>
<td class="cartSkuPrice">
<div class="cartSkuUnitPrice">
<span class="bestPrice">R$ 49,90</span>
</div>
</td>
<td class="cartSkuQuantity">
<div class="cartSkuQtt">
<span class="cartSkuQttTxt">
<span class="vtexsc-skuQtt">1</span>
</span>
</div>
</td>
<td class="cartSkuActions">
<span class="cartSkuRemove" data-index="0">
<a href="javascript:void(0);" class="text" style="display: none;">excluir</a>
</span>
<div class="vtexsc-overlay" style="display: none;"></div>
</td>
</tr>
<tr>
<td class="cartSkuImage">
<a class="sku-imagem" href="/produto.html">
<img height="71" width="71" alt="Conjunto Cropped c/ Renda e Biju Luxo B345 Branco M" src="http://via.placeholder.com/80x80">
</a>
</td>
<td class="cartSkuName">
<h4>
<a href="/produto.html">Conjunto Cropped c/ Renda e Biju Luxo B345 Branco M</a>
</h4>
<p class="availability"></p>
</td>
<td class="cartSkuPrice">
<div class="cartSkuUnitPrice">
<span class="bestPrice">R$ 49,90</span>
</div>
</td>
<td class="cartSkuQuantity">
<div class="cartSkuQtt">
<span class="cartSkuQttTxt">
<span class="vtexsc-skuQtt">1</span>
</span>
</div>
</td>
<td class="cartSkuActions">
<span class="cartSkuRemove" data-index="1">
<a href="javascript:void(0);" class="text" style="display: none;">excluir</a>
</span>
<div class="vtexsc-overlay" style="display: none;"></div>
</td>
</tr>
<tr>
<td class="cartSkuImage">
<a class="sku-imagem" href="/produto.html">
<img height="71" width="71" alt="Conjunto de Microfibra e Renda c/ Biju B192 Branco P" src="http://via.placeholder.com/80x80">
</a>
</td>
<td class="cartSkuName">
<h4>
<a href="/produto.html">Conjunto de Microfibra e Renda c/ Biju B192 Branco P</a>
</h4>
<p class="availability"></p>
</td>
<td class="cartSkuPrice">
<div class="cartSkuUnitPrice">
<span class="bestPrice">R$ 28,90</span>
</div>
</td>
<td class="cartSkuQuantity">
<div class="cartSkuQtt">
<span class="cartSkuQttTxt">
<span class="vtexsc-skuQtt">1</span>
</span>
</div>
</td>
<td class="cartSkuActions">
<span class="cartSkuRemove" data-index="2">
<a href="javascript:void(0);" class="text" style="display: none;">excluir</a>
</span>
<div class="vtexsc-overlay" style="display: none;"></div>
</td>
</tr>
<tr>
<td class="cartSkuImage">
<a class="sku-imagem" href="/produto.html">
<img height="71" width="71" alt="Conjunto de Microfibra e Renda c/ Biju B192 Preto M" src="http://via.placeholder.com/80x80">
</a>
</td>
<td class="cartSkuName">
<h4>
<a href="/produto.html">Conjunto de Microfibra e Renda c/ Biju B192 Preto M</a>
</h4>
<p class="availability"></p>
</td>
<td class="cartSkuPrice">
<div class="cartSkuUnitPrice">
<span class="bestPrice">R$ 28,90</span>
</div>
</td>
<td class="cartSkuQuantity">
<div class="cartSkuQtt">
<span class="cartSkuQttTxt">
<span class="vtexsc-skuQtt">1</span>
</span>
</div>
</td>
<td class="cartSkuActions">
<span class="cartSkuRemove" data-index="3">
<a href="javascript:void(0);" class="text" style="display: none;">excluir</a>
</span>
<div class="vtexsc-overlay" style="display: none;"></div>
</td>
</tr>
<tr>
<td class="cartSkuImage">
<a class="sku-imagem" href="/produto.html">
<img height="71" width="71" alt="Cueca Boxer SEM COSTURA E039 Azul P" src="http://via.placeholder.com/80x80">
</a>
</td>
<td class="cartSkuName">
<h4>
<a href="/produto.html">Cueca Boxer SEM COSTURA E039 Azul P</a>
</h4>
<p class="availability"></p>
</td>
<td class="cartSkuPrice">
<div class="cartSkuUnitPrice">
<span class="bestPrice">R$ 12,90</span>
</div>
</td>
<td class="cartSkuQuantity">
<div class="cartSkuQtt">
<span class="cartSkuQttTxt">
<span class="vtexsc-skuQtt">1</span>
</span>
</div>
</td>
<td class="cartSkuActions">
<span class="cartSkuRemove" data-index="4">
<a href="javascript:void(0);" class="text" style="display: none;">excluir</a>
</span>
<div class="vtexsc-overlay" style="display: none;"></div>
</td>
</tr>
<tr>
<td class="cartSkuImage">
<a class="sku-imagem" href="/produto.html">
<img height="71" width="71" alt="Cueca Boxer SEM COSTURA E039 Azul M" src="http://via.placeholder.com/80x80">
</a>
</td>
<td class="cartSkuName">
<h4>
<a href="/produto.html">Cueca Boxer SEM COSTURA E039 Azul M</a>
</h4>
<p class="availability"></p>
</td>
<td class="cartSkuPrice">
<div class="cartSkuUnitPrice">
<span class="bestPrice">R$ 12,90</span>
</div>
</td>
<td class="cartSkuQuantity">
<div class="cartSkuQtt">
<span class="cartSkuQttTxt">
<span class="vtexsc-skuQtt">1</span>
</span>
</div>
</td>
<td class="cartSkuActions">
<span class="cartSkuRemove" data-index="5">
<a href="javascript:void(0);" class="text" style="display: none;">excluir</a>
</span>
<div class="vtexsc-overlay" style="display: none;"></div>
</td>
</tr>
<tr>
<td class="cartSkuImage">
<a class="sku-imagem" href="/produto.html">
<img height="71" width="71" alt="Cueca Boxer SEM COSTURA E039 Azul G" src="http://via.placeholder.com/80x80">
</a>
</td>
<td class="cartSkuName">
<h4>
<a href="/produto.html">Cueca Boxer SEM COSTURA E039 Azul G</a>
</h4>
<p class="availability"></p>
</td>
<td class="cartSkuPrice">
<div class="cartSkuUnitPrice">
<span class="bestPrice">R$ 12,90</span>
</div>
</td>
<td class="cartSkuQuantity">
<div class="cartSkuQtt">
<span class="cartSkuQttTxt">
<span class="vtexsc-skuQtt">1</span>
</span>
</div>
</td>
<td class="cartSkuActions">
<span class="cartSkuRemove" data-index="6">
<a href="javascript:void(0);" class="text" style="display: none;">excluir</a>
</span>
<div class="vtexsc-overlay" style="display: none;"></div>
</td>
</tr>
<tr>
<td class="cartSkuImage">
<a class="sku-imagem" href="/produto.html">
<img height="71" width="71" alt="Cueca Boxer SEM COSTURA E039 Azul GG" src="http://via.placeholder.com/80x80">
</a>
</td>
<td class="cartSkuName">
<h4>
<a href="/produto.html">Cueca Boxer SEM COSTURA E039 Azul GG</a>
</h4>
<p class="availability"></p>
</td>
<td class="cartSkuPrice">
<div class="cartSkuUnitPrice">
<span class="bestPrice">R$ 12,90</span>
</div>
</td>
<td class="cartSkuQuantity">
<div class="cartSkuQtt">
<span class="cartSkuQttTxt">
<span class="vtexsc-skuQtt">1</span>
</span>
</div>
</td>
<td class="cartSkuActions">
<span class="cartSkuRemove" data-index="7">
<a href="javascript:void(0);" class="text" style="display: none;">excluir</a>
</span>
<div class="vtexsc-overlay" style="display: none;"></div>
</td>
</tr>
<tr>
<td class="cartSkuImage">
<a class="sku-imagem" href="/produto.html">
<img height="71" width="71" alt="Cueca Boxer SEM COSTURA E039 Azul Marinho P" src="http://via.placeholder.com/80x80">
</a>
</td>
<td class="cartSkuName">
<h4>
<a href="/produto.html">Cueca Boxer SEM COSTURA E039 Azul Marinho P</a>
</h4>
<p class="availability"></p>
</td>
<td class="cartSkuPrice">
<div class="cartSkuUnitPrice">
<span class="bestPrice">R$ 12,90</span>
</div>
</td>
<td class="cartSkuQuantity">
<div class="cartSkuQtt">
<span class="cartSkuQttTxt">
<span class="vtexsc-skuQtt">1</span>
</span>
</div>
</td>
<td class="cartSkuActions">
<span class="cartSkuRemove" data-index="8">
<a href="javascript:void(0);" class="text" style="display: none;">excluir</a>
</span>
<div class="vtexsc-overlay" style="display: none;"></div>
</td>
</tr>
<tr>
<td class="cartSkuImage">
<a class="sku-imagem" href="/produto.html">
<img height="71" width="71" alt="Cueca Boxer SEM COSTURA E039 Azul Marinho M" src="http://via.placeholder.com/80x80">
</a>
</td>
<td class="cartSkuName">
<h4>
<a href="/produto.html">Cueca Boxer SEM COSTURA E039 Azul Marinho M</a>
</h4>
<p class="availability"></p>
</td>
<td class="cartSkuPrice">
<div class="cartSkuUnitPrice">
<span class="bestPrice">R$ 12,90</span>
</div>
</td>
<td class="cartSkuQuantity">
<div class="cartSkuQtt">
<span class="cartSkuQttTxt">
<span class="vtexsc-skuQtt">1</span>
</span>
</div>
</td>
<td class="cartSkuActions">
<span class="cartSkuRemove" data-index="9">
<a href="javascript:void(0);" class="text" style="display: none;">excluir</a>
</span>
<div class="vtexsc-overlay" style="display: none;"></div>
</td>
</tr>
<tr>
<td class="cartSkuImage">
<a class="sku-imagem" href="/produto.html">
<img height="71" width="71" alt="Cueca Boxer SEM COSTURA E039 Azul Marinho G" src="http://via.placeholder.com/80x80">
</a>
</td>
<td class="cartSkuName">
<h4>
<a href="/produto.html">Cueca Boxer SEM COSTURA E039 Azul Marinho G</a>
</h4>
<p class="availability"></p>
</td>
<td class="cartSkuPrice">
<div class="cartSkuUnitPrice">
<span class="bestPrice">R$ 12,90</span>
</div>
</td>
<td class="cartSkuQuantity">
<div class="cartSkuQtt">
<span class="cartSkuQttTxt">
<span class="vtexsc-skuQtt">1</span>
</span>
</div>
</td>
<td class="cartSkuActions">
<span class="cartSkuRemove" data-index="10">
<a href="javascript:void(0);" class="text" style="display: none;">excluir</a>
</span>
<div class="vtexsc-overlay" style="display: none;"></div>
</td>
</tr>
<tr>
<td class="cartSkuImage">
<a class="sku-imagem" href="/produto.html">
<img height="71" width="71" alt="Cueca Boxer SEM COSTURA E039 Azul Marinho GG" src="http://via.placeholder.com/80x80">
</a>
</td>
<td class="cartSkuName">
<h4>
<a href="/produto.html">Cueca Boxer SEM COSTURA E039 Azul Marinho GG</a>
</h4>
<p class="availability"></p>
</td>
<td class="cartSkuPrice">
<div class="cartSkuUnitPrice">
<span class="bestPrice">R$ 12,90</span>
</div>
</td>
<td class="cartSkuQuantity">
<div class="cartSkuQtt">
<span class="cartSkuQttTxt">
<span class="vtexsc-skuQtt">1</span>
</span>
</div>
</td>
<td class="cartSkuActions">
<span class="cartSkuRemove" data-index="11">
<a href="javascript:void(0);" class="text" style="display: none;">excluir</a>
</span>
<div class="vtexsc-overlay" style="display: none;"></div>
</td>
</tr>
<tr>
<td class="cartSkuImage">
<a class="sku-imagem" href="/produto.html">
<img height="71" width="71" alt="Cueca Boxer SEM COSTURA E039 Preto P" src="http://via.placeholder.com/80x80">
</a>
</td>
<td class="cartSkuName">
<h4>
<a href="/produto.html">Cueca Boxer SEM COSTURA E039 Preto P</a>
</h4>
<p class="availability"></p>
</td>
<td class="cartSkuPrice">
<div class="cartSkuUnitPrice">
<span class="bestPrice">R$ 12,90</span>
</div>
</td>
<td class="cartSkuQuantity">
<div class="cartSkuQtt">
<span class="cartSkuQttTxt">
<span class="vtexsc-skuQtt">1</span>
</span>
</div>
</td>
<td class="cartSkuActions">
<span class="cartSkuRemove" data-index="12">
<a href="javascript:void(0);" class="text" style="display: none;">excluir</a>
</span>
<div class="vtexsc-overlay" style="display: none;"></div>
</td>
</tr>
<tr>
<td class="cartSkuImage">
<a class="sku-imagem" href="/produto.html">
<img height="71" width="71" alt="Cueca Boxer SEM COSTURA E039 Preto M" src="http://via.placeholder.com/80x80">
</a>
</td>
<td class="cartSkuName">
<h4>
<a href="/produto.html">Cueca Boxer SEM COSTURA E039 Preto M</a>
</h4>
<p class="availability"></p>
</td>
<td class="cartSkuPrice">
<div class="cartSkuUnitPrice">
<span class="bestPrice">R$ 12,90</span>
</div>
</td>
<td class="cartSkuQuantity">
<div class="cartSkuQtt">
<span class="cartSkuQttTxt">
<span class="vtexsc-skuQtt">1</span>
</span>
</div>
</td>
<td class="cartSkuActions">
<span class="cartSkuRemove" data-index="13">
<a href="javascript:void(0);" class="text" style="display: none;">excluir</a>
</span>
<div class="vtexsc-overlay" style="display: none;"></div>
</td>
</tr>
<tr>
<td class="cartSkuImage">
<a class="sku-imagem" href="/produto.html">
<img height="71" width="71" alt="Cueca Boxer SEM COSTURA E039 Preto G" src="http://via.placeholder.com/80x80">
</a>
</td>
<td class="cartSkuName">
<h4>
<a href="/produto.html">Cueca Boxer SEM COSTURA E039 Preto G</a>
</h4>
<p class="availability"></p>
</td>
<td class="cartSkuPrice">
<div class="cartSkuUnitPrice">
<span class="bestPrice">R$ 12,90</span>
</div>
</td>
<td class="cartSkuQuantity">
<div class="cartSkuQtt">
<span class="cartSkuQttTxt">
<span class="vtexsc-skuQtt">1</span>
</span>
</div>
</td>
<td class="cartSkuActions">
<span class="cartSkuRemove" data-index="14">
<a href="javascript:void(0);" class="text" style="display: none;">excluir</a>
</span>
<div class="vtexsc-overlay" style="display: none;"></div>
</td>
</tr>
<tr>
<td class="cartSkuImage">
<a class="sku-imagem" href="/produto.html">
<img height="71" width="71" alt="Cueca Boxer SEM COSTURA E039 Preto GG" src="http://via.placeholder.com/80x80">
</a>
</td>
<td class="cartSkuName">
<h4>
<a href="/produto.html">Cueca Boxer SEM COSTURA E039 Preto GG</a>
</h4>
<p class="availability"></p>
</td>
<td class="cartSkuPrice">
<div class="cartSkuUnitPrice">
<span class="bestPrice">R$ 12,90</span>
</div>
</td>
<td class="cartSkuQuantity">
<div class="cartSkuQtt">
<span class="cartSkuQttTxt">
<span class="vtexsc-skuQtt">1</span>
</span>
</div>
</td>
<td class="cartSkuActions">
<span class="cartSkuRemove" data-index="15">
<a href="javascript:void(0);" class="text" style="display: none;">excluir</a>
</span>
<div class="vtexsc-overlay" style="display: none;"></div>
</td>
</tr>
<tr>
<td class="cartSkuImage">
<a class="sku-imagem" href="/produto.html">
<img height="71" width="71" alt="Cueca Boxer SEM COSTURA E039 Verde P" src="http://via.placeholder.com/80x80">
</a>
</td>
<td class="cartSkuName">
<h4>
<a href="/produto.html">Cueca Boxer SEM COSTURA E039 Verde P</a>
</h4>
<p class="availability"></p>
</td>
<td class="cartSkuPrice">
<div class="cartSkuUnitPrice">
<span class="bestPrice">R$ 12,90</span>
</div>
</td>
<td class="cartSkuQuantity">
<div class="cartSkuQtt">
<span class="cartSkuQttTxt">
<span class="vtexsc-skuQtt">1</span>
</span>
</div>
</td>
<td class="cartSkuActions">
<span class="cartSkuRemove" data-index="16">
<a href="javascript:void(0);" class="text" style="display: none;">excluir</a>
</span>
<div class="vtexsc-overlay" style="display: none;"></div>
</td>
</tr>
<tr>
<td class="cartSkuImage">
<a class="sku-imagem" href="/produto.html">
<img height="71" width="71" alt="Cueca Boxer SEM COSTURA E039 Verde M" src="http://via.placeholder.com/80x80">
</a>
</td>
<td class="cartSkuName">
<h4>
<a href="/produto.html">Cueca Boxer SEM COSTURA E039 Verde M</a>
</h4>
<p class="availability"></p>
</td>
<td class="cartSkuPrice">
<div class="cartSkuUnitPrice">
<span class="bestPrice">R$ 12,90</span>
</div>
</td>
<td class="cartSkuQuantity">
<div class="cartSkuQtt">
<span class="cartSkuQttTxt">
<span class="vtexsc-skuQtt">1</span>
</span>
</div>
</td>
<td class="cartSkuActions">
<span class="cartSkuRemove" data-index="17">
<a href="javascript:void(0);" class="text" style="display: none;">excluir</a>
</span>
<div class="vtexsc-overlay" style="display: none;"></div>
</td>
</tr>
<tr>
<td class="cartSkuImage">
<a class="sku-imagem" href="/produto.html">
<img height="71" width="71" alt="Cueca Boxer SEM COSTURA E039 Verde G" src="http://via.placeholder.com/80x80">
</a>
</td>
<td class="cartSkuName">
<h4>
<a href="/produto.html">Cueca Boxer SEM COSTURA E039 Verde G</a>
</h4>
<p class="availability"></p>
</td>
<td class="cartSkuPrice">
<div class="cartSkuUnitPrice">
<span class="bestPrice">R$ 12,90</span>
</div>
</td>
<td class="cartSkuQuantity">
<div class="cartSkuQtt">
<span class="cartSkuQttTxt">
<span class="vtexsc-skuQtt">1</span>
</span>
</div>
</td>
<td class="cartSkuActions">
<span class="cartSkuRemove" data-index="18">
<a href="javascript:void(0);" class="text" style="display: none;">excluir</a>
</span>
<div class="vtexsc-overlay" style="display: none;"></div>
</td>
</tr>
<tr>
<td class="cartSkuImage">
<a class="sku-imagem" href="/produto.html">
<img height="71" width="71" alt="Cueca Boxer SEM COSTURA E039 Verde GG" src="http://via.placeholder.com/80x80">
</a>
</td>
<td class="cartSkuName">
<h4>
<a href="/produto.html">Cueca Boxer SEM COSTURA E039 Verde GG</a>
</h4>
<p class="availability"></p>
</td>
<td class="cartSkuPrice">
<div class="cartSkuUnitPrice">
<span class="bestPrice">R$ 12,90</span>
</div>
</td>
<td class="cartSkuQuantity">
<div class="cartSkuQtt">
<span class="cartSkuQttTxt">
<span class="vtexsc-skuQtt">1</span>
</span>
</div>
</td>
<td class="cartSkuActions">
<span class="cartSkuRemove" data-index="19">
<a href="javascript:void(0);" class="text" style="display: none;">excluir</a>
</span>
<div class="vtexsc-overlay" style="display: none;"></div>
</td>
</tr>
<tr>
<td class="cartSkuImage">
<a class="sku-imagem" href="/produto.html">
<img height="71" width="71" alt="Cueca Boxer SEM COSTURA E039 Verde Pavão P" src="http://via.placeholder.com/80x80">
</a>
</td>
<td class="cartSkuName">
<h4>
<a href="/produto.html">Cueca Boxer SEM COSTURA E039 Verde Pavão P</a>
</h4>
<p class="availability"></p>
</td>
<td class="cartSkuPrice">
<div class="cartSkuUnitPrice">
<span class="bestPrice">R$ 12,90</span>
</div>
</td>
<td class="cartSkuQuantity">
<div class="cartSkuQtt">
<span class="cartSkuQttTxt">
<span class="vtexsc-skuQtt">1</span>
</span>
</div>
</td>
<td class="cartSkuActions">
<span class="cartSkuRemove" data-index="20">
<a href="javascript:void(0);" class="text" style="display: none;">excluir</a>
</span>
<div class="vtexsc-overlay" style="display: none;"></div>
</td>
</tr>
<tr>
<td class="cartSkuImage">
<a class="sku-imagem" href="/produto.html">
<img height="71" width="71" alt="Cueca Boxer SEM COSTURA E039 Verde Pavão M" src="http://via.placeholder.com/80x80">
</a>
</td>
<td class="cartSkuName">
<h4>
<a href="/produto.html">Cueca Boxer SEM COSTURA E039 Verde Pavão M</a>
</h4>
<p class="availability"></p>
</td>
<td class="cartSkuPrice">
<div class="cartSkuUnitPrice">
<span class="bestPrice">R$ 12,90</span>
</div>
</td>
<td class="cartSkuQuantity">
<div class="cartSkuQtt">
<span class="cartSkuQttTxt">
<span class="vtexsc-skuQtt">1</span>
</span>
</div>
</td>
<td class="cartSkuActions">
<span class="cartSkuRemove" data-index="21">
<a href="javascript:void(0);" class="text" style="display: none;">excluir</a>
</span>
<div class="vtexsc-overlay" style="display: none;"></div>
</td>
</tr>
<tr>
<td class="cartSkuImage">
<a class="sku-imagem" href="/produto.html">
<img height="71" width="71" alt="Cueca Boxer SEM COSTURA E039 Verde Pavão G" src="http://via.placeholder.com/80x80">
</a>
</td>
<td class="cartSkuName">
<h4>
<a href="/produto.html">Cueca Boxer SEM COSTURA E039 Verde Pavão G</a>
</h4>
<p class="availability"></p>
</td>
<td class="cartSkuPrice">
<div class="cartSkuUnitPrice">
<span class="bestPrice">R$ 12,90</span>
</div>
</td>
<td class="cartSkuQuantity">
<div class="cartSkuQtt">
<span class="cartSkuQttTxt">
<span class="vtexsc-skuQtt">1</span>
</span>
</div>
</td>
<td class="cartSkuActions">
<span class="cartSkuRemove" data-index="22">
<a href="javascript:void(0);" class="text" style="display: none;">excluir</a>
</span>
<div class="vtexsc-overlay" style="display: none;"></div>
</td>
</tr>
<tr>
<td class="cartSkuImage">
<a class="sku-imagem" href="/produto.html">
<img height="71" width="71" alt="Cueca Boxer SEM COSTURA E039 Verde Pavão GG" src="http://via.placeholder.com/80x80">
</a>
</td>
<td class="cartSkuName">
<h4>
<a href="/produto.html">Cueca Boxer SEM COSTURA E039 Verde Pavão GG</a>
</h4>
<p class="availability"></p>
</td>
<td class="cartSkuPrice">
<div class="cartSkuUnitPrice">
<span class="bestPrice">R$ 12,90</span>
</div>
</td>
<td class="cartSkuQuantity">
<div class="cartSkuQtt">
<span class="cartSkuQttTxt">
<span class="vtexsc-skuQtt">1</span>
</span>
</div>
</td>
<td class="cartSkuActions">
<span class="cartSkuRemove" data-index="23">
<a href="javascript:void(0);" class="text" style="display: none;">excluir</a>
</span>
<div class="vtexsc-overlay" style="display: none;"></div>
</td>
</tr>
<tr>
<td class="cartSkuImage">
<a class="sku-imagem" href="/produto.html">
<img height="71" width="71" alt="Cueca Boxer SEM COSTURA E039 Vinho P" src="http://via.placeholder.com/80x80">
</a>
</td>
<td class="cartSkuName">
<h4>
<a href="/produto.html">Cueca Boxer SEM COSTURA E039 Vinho P</a>
</h4>
<p class="availability"></p>
</td>
<td class="cartSkuPrice">
<div class="cartSkuUnitPrice">
<span class="bestPrice">R$ 12,90</span>
</div>
</td>
<td class="cartSkuQuantity">
<div class="cartSkuQtt">
<span class="cartSkuQttTxt">
<span class="vtexsc-skuQtt">1</span>
</span>
</div>
</td>
<td class="cartSkuActions">
<span class="cartSkuRemove" data-index="24">
<a href="javascript:void(0);" class="text" style="display: none;">excluir</a>
</span>
<div class="vtexsc-overlay" style="display: none;"></div>
</td>
</tr>
<tr>
<td class="cartSkuImage">
<a class="sku-imagem" href="/produto.html">
<img height="71" width="71" alt="Cueca Boxer SEM COSTURA E039 Vinho M" src="http://via.placeholder.com/80x80">
</a>
</td>
<td class="cartSkuName">
<h4>
<a href="/produto.html">Cueca Boxer SEM COSTURA E039 Vinho M</a>
</h4>
<p class="availability"></p>
</td>
<td class="cartSkuPrice">
<div class="cartSkuUnitPrice">
<span class="bestPrice">R$ 12,90</span>
</div>
</td>
<td class="cartSkuQuantity">
<div class="cartSkuQtt">
<span class="cartSkuQttTxt">
<span class="vtexsc-skuQtt">1</span>
</span>
</div>
</td>
<td class="cartSkuActions">
<span class="cartSkuRemove" data-index="25">
<a href="javascript:void(0);" class="text" style="display: none;">excluir</a>
</span>
<div class="vtexsc-overlay" style="display: none;"></div>
</td>
</tr>
<tr>
<td class="cartSkuImage">
<a class="sku-imagem" href="/produto.html">
<img height="71" width="71" alt="Cueca Boxer SEM COSTURA E039 Vinho G" src="http://via.placeholder.com/80x80">
</a>
</td>
<td class="cartSkuName">
<h4>
<a href="/produto.html">Cueca Boxer SEM COSTURA E039 Vinho G</a>
</h4>
<p class="availability"></p>
</td>
<td class="cartSkuPrice">
<div class="cartSkuUnitPrice">
<span class="bestPrice">R$ 12,90</span>
</div>
</td>
<td class="cartSkuQuantity">
<div class="cartSkuQtt">
<span class="cartSkuQttTxt">
<span class="vtexsc-skuQtt">1</span>
</span>
</div>
</td>
<td class="cartSkuActions">
<span class="cartSkuRemove" data-index="26">
<a href="javascript:void(0);" class="text" style="display: none;">excluir</a>
</span>
<div class="vtexsc-overlay" style="display: none;"></div>
</td>
</tr>
<tr>
<td class="cartSkuImage">
<a class="sku-imagem" href="/produto.html">
<img height="71" width="71" alt="Cueca Boxer SEM COSTURA E039 Vinho GG" src="http://via.placeholder.com/80x80">
</a>
</td>
<td class="cartSkuName">
<h4>
<a href="/produto.html">Cueca Boxer SEM COSTURA E039 Vinho GG</a>
</h4>
<p class="availability"></p>
</td>
<td class="cartSkuPrice">
<div class="cartSkuUnitPrice">
<span class="bestPrice">R$ 12,90</span>
</div>
</td>
<td class="cartSkuQuantity">
<div class="cartSkuQtt">
<span class="cartSkuQttTxt">
<span class="vtexsc-skuQtt">1</span>
</span>
</div>
</td>
<td class="cartSkuActions">
<span class="cartSkuRemove" data-index="27">
<a href="javascript:void(0);" class="text" style="display: none;">excluir</a>
</span>
<div class="vtexsc-overlay" style="display: none;"></div>
</td>
</tr>
</tbody>
</table>
</div>
<div class="cartFooter clearfix">
<div class="cartTotal">Total
<span class="vtexsc-totalCart">
<span class="vtexsc-text">R$ 467,20</span>
</span>
</div>
<a href="/checkout/#/orderform" class="cartCheckout"></a>
</div>
</div>
<div class="vtexsc-bb"></div>
</div>
</div>

View File

@ -0,0 +1,5 @@
<div class="fn productName Conjunto-Cropped-c--Renda-e-Biju-Luxo-B345 ">Conjunto Cropped c/ Renda e Biju Luxo B345</div>
<input id="___rc-p-id" type="hidden" value="1136"/>
<input id="___rc-p-dv-id" type="hidden" value="49,9" />
<input id="___rc-p-sku-ids" type="hidden" value="23016,23017,23018,23019,23020,23021,23022,23023,23024,23025,23026,23027,23028,23029,23030,23031" />
<input id="___rc-p-kit-ids" type="hidden" value="" />

View File

@ -0,0 +1 @@
<div class="productReference B345">B345</div>

View File

@ -0,0 +1,20 @@
<div id="caracteristicas">
<h4 class="group Caracteristicas">Características</h4>
<table cellspacing="0" class="group Caracteristicas">
<tbody>
<tr class="even">
<th class="name-field Composicao">Composição</th>
<td class="value-field Composicao">83% POLIAMIDA 17% ELASTANO</td>
</tr>
</tbody>
</table>
<h4 class="group Especificacoes">Especificações</h4>
<table cellspacing="0" class="group Especificacoes">
<tbody>
<tr>
<th class="name-field Imagem-da-Vitrine">Imagem da Vitrine</th>
<td class="value-field Imagem-da-Vitrine">http://via.placeholder.com/1000x1000/, http://via.placeholder.com/1000x1000/,http://via.placeholder.com/1000x1000/</td>
</tr>
</tbody>
</table>
</div>

View File

@ -0,0 +1,713 @@
<div class="navigation-tabs">
<div class="menu-departamento">
<span class="rt"></span>
<span class="rb"></span>
<div>
<div class="menu-navegue">
<a title="Navegue" class="search-navigator-tab tab-navegue-ativo" href="#">Navegar</a>
<a title="Refinar Resultado" class="search-navigator-tab tab-refinar" href="#">Refinar Resultado</a>
</div>
<div class="search-multiple-navigator" style="display: none;">
<h3 class="lingerie">
<span></span>
<a href="/categoria.htnl#" title="Lingerie">Lingerie</a>
</h3>
<h4 class="lingerie">
<span></span>
<a href="/categoria.htnl#" title="Conjuntos">Conjuntos</a>
</h4>
<a title="Refinar Resultado" class="bt-refinar search-filter-button even" href="#">Refinar Resultado</a>
<fieldset class="refino even Características">
<h5 class=" even Características">Estilo</h5>
<div class="">
<label>
<input rel="fq=specificationFilter_34:B%c3%a1sico" class="multi-search-checkbox" type="checkbox" name="B%c3%a1sico" value="B&#225;sico"
/>B&#225;sico (109)</label>
<label>
<input rel="fq=specificationFilter_34:Chic" class="multi-search-checkbox" type="checkbox" name="Chic" value="Chic" />Chic (138)</label>
<label>
<input rel="fq=specificationFilter_34:Funcional" class="multi-search-checkbox" type="checkbox" name="Funcional" value="Funcional"
/>Funcional (124)</label>
<label>
<input rel="fq=specificationFilter_34:Rom%c3%a2ntico" class="multi-search-checkbox" type="checkbox" name="Rom%c3%a2ntico"
value="Rom&#226;ntico" />Rom&#226;ntico (140)</label>
<label>
<input rel="fq=specificationFilter_34:Sensual" class="multi-search-checkbox" type="checkbox" name="Sensual" value="Sensual"
/>Sensual (133)</label>
</div>
</fieldset>
<fieldset class="refino Características">
<h5 class=" Características">Material</h5>
<div class="">
<label>
<input rel="fq=specificationFilter_35:Microfibra" class="multi-search-checkbox" type="checkbox" name="Microfibra" value="Microfibra"
/>Microfibra (145)</label>
<label>
<input rel="fq=specificationFilter_35:Renda" class="multi-search-checkbox" type="checkbox" name="Renda" value="Renda" />Renda (134)</label>
<label>
<input rel="fq=specificationFilter_35:Fibra" class="multi-search-checkbox" type="checkbox" name="Fibra" value="Fibra" />Fibra (3)</label>
<label>
<input rel="fq=specificationFilter_35:Algod%c3%a3o" class="multi-search-checkbox" type="checkbox" name="Algod%c3%a3o" value="Algod&#227;o"
/>Algod&#227;o (2)</label>
</div>
</fieldset>
<fieldset class="refino even Características">
<h5 class=" even Características">Estampa</h5>
<div class="">
<label>
<input rel="fq=specificationFilter_38:Liso" class="multi-search-checkbox" type="checkbox" name="Liso" value="Liso" />Liso (167)</label>
<label>
<input rel="fq=specificationFilter_38:Estampado" class="multi-search-checkbox" type="checkbox" name="Estampado" value="Estampado"
/>Estampado (23)</label>
</div>
</fieldset>
<fieldset class="refino Características">
<h5 class=" Características">Bojo</h5>
<div class="">
<label>
<input rel="fq=specificationFilter_50:Com+Bojo" class="multi-search-checkbox" type="checkbox" name="Com+Bojo" value="Com Bojo"
/>Com Bojo (131)</label>
<label>
<input rel="fq=specificationFilter_50:Sem+Bojo" class="multi-search-checkbox" type="checkbox" name="Sem+Bojo" value="Sem Bojo"
/>Sem Bojo (14)</label>
</div>
</fieldset>
<fieldset class="refino Características">
<h5 class=" Características">Tamanho</h5>
<div class="">
<label>
<input rel="fq=specificationFilter_47:G" class="multi-search-checkbox" type="checkbox" name="G" value="G" />G (152)</label>
<label>
<input rel="fq=specificationFilter_47:GG" class="multi-search-checkbox" type="checkbox" name="GG" value="GG" />GG (58)</label>
<label>
<input rel="fq=specificationFilter_47:M" class="multi-search-checkbox" type="checkbox" name="M" value="M" />M (148)</label>
<label>
<input rel="fq=specificationFilter_47:P" class="multi-search-checkbox" type="checkbox" name="P" value="P" />P (151)</label>
</div>
</fieldset>
<fieldset class="refino even Características">
<h5 class=" even Características">Cor</h5>
<div class="">
<label>
<input rel="fq=specificationFilter_31:Amarelo" class="multi-search-checkbox" type="checkbox" name="Amarelo" value="Amarelo"
/>Amarelo (52)</label>
<label>
<input rel="fq=specificationFilter_31:Amarelo+Variado" class="multi-search-checkbox" type="checkbox" name="Amarelo+Variado"
value="Amarelo Variado" />Amarelo Variado (4)</label>
<label>
<input rel="fq=specificationFilter_31:Azul+Caneta" class="multi-search-checkbox" type="checkbox" name="Azul+Caneta" value="Azul Caneta"
/>Azul Caneta (98)</label>
<label>
<input rel="fq=specificationFilter_31:Azul+Caneta+Variado" class="multi-search-checkbox" type="checkbox" name="Azul+Caneta+Variado"
value="Azul Caneta Variado" />Azul Caneta Variado (3)</label>
<label>
<input rel="fq=specificationFilter_31:Azul+Claro" class="multi-search-checkbox" type="checkbox" name="Azul+Claro" value="Azul Claro"
/>Azul Claro (1)</label>
<label>
<input rel="fq=specificationFilter_31:Azul+Marinho" class="multi-search-checkbox" type="checkbox" name="Azul+Marinho" value="Azul Marinho"
/>Azul Marinho (8)</label>
<label>
<input rel="fq=specificationFilter_31:Branco" class="multi-search-checkbox" type="checkbox" name="Branco" value="Branco"
/>Branco (110)</label>
<label>
<input rel="fq=specificationFilter_31:Branco+Variado" class="multi-search-checkbox" type="checkbox" name="Branco+Variado"
value="Branco Variado" />Branco Variado (3)</label>
<label>
<input rel="fq=specificationFilter_31:Chocolate" class="multi-search-checkbox" type="checkbox" name="Chocolate" value="Chocolate"
/>Chocolate (10)</label>
<label>
<input rel="fq=specificationFilter_31:Chocolate+Escuro" class="multi-search-checkbox" type="checkbox" name="Chocolate+Escuro"
value="Chocolate Escuro" />Chocolate Escuro (11)</label>
<label>
<input rel="fq=specificationFilter_31:Chocolate+Escuro+Variado" class="multi-search-checkbox" type="checkbox" name="Chocolate+Escuro+Variado"
value="Chocolate Escuro Variado" />Chocolate Escuro Variado (1)</label>
<label>
<input rel="fq=specificationFilter_31:Chocolate+Variado" class="multi-search-checkbox" type="checkbox" name="Chocolate+Variado"
value="Chocolate Variado" />Chocolate Variado (2)</label>
<label>
<input rel="fq=specificationFilter_31:Cinza" class="multi-search-checkbox" type="checkbox" name="Cinza" value="Cinza" />Cinza (2)</label>
<label>
<input rel="fq=specificationFilter_31:Creme" class="multi-search-checkbox" type="checkbox" name="Creme" value="Creme" />Creme (2)</label>
<label>
<input rel="fq=specificationFilter_31:Goiaba" class="multi-search-checkbox" type="checkbox" name="Goiaba" value="Goiaba"
/>Goiaba (31)</label>
<label>
<input rel="fq=specificationFilter_31:Goiaba+Variado" class="multi-search-checkbox" type="checkbox" name="Goiaba+Variado"
value="Goiaba Variado" />Goiaba Variado (1)</label>
<label>
<input rel="fq=specificationFilter_31:Lilas" class="multi-search-checkbox" type="checkbox" name="Lilas" value="Lilas" />Lilas (34)</label>
<label>
<input rel="fq=specificationFilter_31:Lilas+Variado" class="multi-search-checkbox" type="checkbox" name="Lilas+Variado" value="Lilas Variado"
/>Lilas Variado (2)</label>
<label>
<input rel="fq=specificationFilter_31:On%c3%a7a+Claro+Variado" class="multi-search-checkbox" type="checkbox" name="On%c3%a7a+Claro+Variado"
value="On&#231;a Claro Variado" />On&#231;a Claro Variado (1)</label>
<label>
<input rel="fq=specificationFilter_31:On%c3%a7a+Variado" class="multi-search-checkbox" type="checkbox" name="On%c3%a7a+Variado"
value="On&#231;a Variado" />On&#231;a Variado (1)</label>
<label>
<input rel="fq=specificationFilter_31:Personagem+Variado" class="multi-search-checkbox" type="checkbox" name="Personagem+Variado"
value="Personagem Variado" />Personagem Variado (1)</label>
<label>
<input rel="fq=specificationFilter_31:Preto" class="multi-search-checkbox" type="checkbox" name="Preto" value="Preto" />Preto (121)</label>
<label>
<input rel="fq=specificationFilter_31:Preto+Variado" class="multi-search-checkbox" type="checkbox" name="Preto+Variado" value="Preto Variado"
/>Preto Variado (5)</label>
<label>
<input rel="fq=specificationFilter_31:Rosa+Bebe+Variado" class="multi-search-checkbox" type="checkbox" name="Rosa+Bebe+Variado"
value="Rosa Bebe Variado" />Rosa Bebe Variado (1)</label>
<label>
<input rel="fq=specificationFilter_31:Rosa+Claro+Variado" class="multi-search-checkbox" type="checkbox" name="Rosa+Claro+Variado"
value="Rosa Claro Variado" />Rosa Claro Variado (3)</label>
<label>
<input rel="fq=specificationFilter_31:Rosa+Escuro" class="multi-search-checkbox" type="checkbox" name="Rosa+Escuro" value="Rosa Escuro"
/>Rosa Escuro (87)</label>
<label>
<input rel="fq=specificationFilter_31:Rosa+Escuro+Variado" class="multi-search-checkbox" type="checkbox" name="Rosa+Escuro+Variado"
value="Rosa Escuro Variado" />Rosa Escuro Variado (4)</label>
<label>
<input rel="fq=specificationFilter_31:Roxo" class="multi-search-checkbox" type="checkbox" name="Roxo" value="Roxo" />Roxo (3)</label>
<label>
<input rel="fq=specificationFilter_31:Verde+%c3%81gua" class="multi-search-checkbox" type="checkbox" name="Verde+%c3%81gua"
value="Verde &#193;gua" />Verde &#193;gua (17)</label>
<label>
<input rel="fq=specificationFilter_31:Verde+%c3%81gua+Variado" class="multi-search-checkbox" type="checkbox" name="Verde+%c3%81gua+Variado"
value="Verde &#193;gua Variado" />Verde &#193;gua Variado (1)</label>
<label>
<input rel="fq=specificationFilter_31:Verde+Claro" class="multi-search-checkbox" type="checkbox" name="Verde+Claro" value="Verde Claro"
/>Verde Claro (3)</label>
<label>
<input rel="fq=specificationFilter_31:Verde+Escuro" class="multi-search-checkbox" type="checkbox" name="Verde+Escuro" value="Verde Escuro"
/>Verde Escuro (38)</label>
<label>
<input rel="fq=specificationFilter_31:Verde+Escuro+Variado" class="multi-search-checkbox" type="checkbox" name="Verde+Escuro+Variado"
value="Verde Escuro Variado" />Verde Escuro Variado (1)</label>
<label>
<input rel="fq=specificationFilter_31:Vermelho" class="multi-search-checkbox" type="checkbox" name="Vermelho" value="Vermelho"
/>Vermelho (115)</label>
<label>
<input rel="fq=specificationFilter_31:Vermelho+Variado" class="multi-search-checkbox" type="checkbox" name="Vermelho+Variado"
value="Vermelho Variado" />Vermelho Variado (4)</label>
<label>
<input rel="fq=specificationFilter_31:Vinho" class="multi-search-checkbox" type="checkbox" name="Vinho" value="Vinho" />Vinho (37)</label>
</div>
</fieldset>
<fieldset class="refino Características">
<h5 class=" Características">Cor Secundaria</h5>
<div class="">
<label>
<input rel="fq=specificationFilter_59:Amarelo" class="multi-search-checkbox" type="checkbox" name="Amarelo" value="Amarelo"
/>Amarelo (50)</label>
<label>
<input rel="fq=specificationFilter_59:Amarelo+Variado" class="multi-search-checkbox" type="checkbox" name="Amarelo+Variado"
value="Amarelo Variado" />Amarelo Variado (3)</label>
<label>
<input rel="fq=specificationFilter_59:Azul+Caneta" class="multi-search-checkbox" type="checkbox" name="Azul+Caneta" value="Azul Caneta"
/>Azul Caneta (92)</label>
<label>
<input rel="fq=specificationFilter_59:Azul+Caneta+Variado" class="multi-search-checkbox" type="checkbox" name="Azul+Caneta+Variado"
value="Azul Caneta Variado" />Azul Caneta Variado (3)</label>
<label>
<input rel="fq=specificationFilter_59:Azul+Claro" class="multi-search-checkbox" type="checkbox" name="Azul+Claro" value="Azul Claro"
/>Azul Claro (1)</label>
<label>
<input rel="fq=specificationFilter_59:Azul+Marinho" class="multi-search-checkbox" type="checkbox" name="Azul+Marinho" value="Azul Marinho"
/>Azul Marinho (8)</label>
<label>
<input rel="fq=specificationFilter_59:Branco" class="multi-search-checkbox" type="checkbox" name="Branco" value="Branco"
/>Branco (106)</label>
<label>
<input rel="fq=specificationFilter_59:Branco+Variado" class="multi-search-checkbox" type="checkbox" name="Branco+Variado"
value="Branco Variado" />Branco Variado (3)</label>
<label>
<input rel="fq=specificationFilter_59:Chocolate" class="multi-search-checkbox" type="checkbox" name="Chocolate" value="Chocolate"
/>Chocolate (10)</label>
<label>
<input rel="fq=specificationFilter_59:Chocolate+Escuro" class="multi-search-checkbox" type="checkbox" name="Chocolate+Escuro"
value="Chocolate Escuro" />Chocolate Escuro (11)</label>
<label>
<input rel="fq=specificationFilter_59:Chocolate+Escuro+Variado" class="multi-search-checkbox" type="checkbox" name="Chocolate+Escuro+Variado"
value="Chocolate Escuro Variado" />Chocolate Escuro Variado (1)</label>
<label>
<input rel="fq=specificationFilter_59:Chocolate+Variado" class="multi-search-checkbox" type="checkbox" name="Chocolate+Variado"
value="Chocolate Variado" />Chocolate Variado (2)</label>
<label>
<input rel="fq=specificationFilter_59:Cinza" class="multi-search-checkbox" type="checkbox" name="Cinza" value="Cinza" />Cinza (2)</label>
<label>
<input rel="fq=specificationFilter_59:Creme" class="multi-search-checkbox" type="checkbox" name="Creme" value="Creme" />Creme (2)</label>
<label>
<input rel="fq=specificationFilter_59:Goiaba" class="multi-search-checkbox" type="checkbox" name="Goiaba" value="Goiaba"
/>Goiaba (30)</label>
<label>
<input rel="fq=specificationFilter_59:Goiaba+Variado" class="multi-search-checkbox" type="checkbox" name="Goiaba+Variado"
value="Goiaba Variado" />Goiaba Variado (1)</label>
<label>
<input rel="fq=specificationFilter_59:Lilas" class="multi-search-checkbox" type="checkbox" name="Lilas" value="Lilas" />Lilas (35)</label>
<label>
<input rel="fq=specificationFilter_59:Lilas+Variado" class="multi-search-checkbox" type="checkbox" name="Lilas+Variado" value="Lilas Variado"
/>Lilas Variado (2)</label>
<label>
<input rel="fq=specificationFilter_59:On%c3%a7a+Claro+Variado" class="multi-search-checkbox" type="checkbox" name="On%c3%a7a+Claro+Variado"
value="On&#231;a Claro Variado" />On&#231;a Claro Variado (1)</label>
<label>
<input rel="fq=specificationFilter_59:On%c3%a7a+Variado" class="multi-search-checkbox" type="checkbox" name="On%c3%a7a+Variado"
value="On&#231;a Variado" />On&#231;a Variado (2)</label>
<label>
<input rel="fq=specificationFilter_59:Personagem+Variado" class="multi-search-checkbox" type="checkbox" name="Personagem+Variado"
value="Personagem Variado" />Personagem Variado (1)</label>
<label>
<input rel="fq=specificationFilter_59:Preto" class="multi-search-checkbox" type="checkbox" name="Preto" value="Preto" />Preto (118)</label>
<label>
<input rel="fq=specificationFilter_59:Preto+Variado" class="multi-search-checkbox" type="checkbox" name="Preto+Variado" value="Preto Variado"
/>Preto Variado (5)</label>
<label>
<input rel="fq=specificationFilter_59:Rosa+Bebe+Variado" class="multi-search-checkbox" type="checkbox" name="Rosa+Bebe+Variado"
value="Rosa Bebe Variado" />Rosa Bebe Variado (1)</label>
<label>
<input rel="fq=specificationFilter_59:Rosa+Claro+Variado" class="multi-search-checkbox" type="checkbox" name="Rosa+Claro+Variado"
value="Rosa Claro Variado" />Rosa Claro Variado (3)</label>
<label>
<input rel="fq=specificationFilter_59:Rosa+Escuro" class="multi-search-checkbox" type="checkbox" name="Rosa+Escuro" value="Rosa Escuro"
/>Rosa Escuro (84)</label>
<label>
<input rel="fq=specificationFilter_59:Rosa+Escuro+Variado" class="multi-search-checkbox" type="checkbox" name="Rosa+Escuro+Variado"
value="Rosa Escuro Variado" />Rosa Escuro Variado (4)</label>
<label>
<input rel="fq=specificationFilter_59:Roxo" class="multi-search-checkbox" type="checkbox" name="Roxo" value="Roxo" />Roxo (2)</label>
<label>
<input rel="fq=specificationFilter_59:Roxo" class="multi-search-checkbox" type="checkbox" name="Roxo" value="Roxo" />Roxo (2)</label>
<label>
<input rel="fq=specificationFilter_59:Verde+%c3%81gua" class="multi-search-checkbox" type="checkbox" name="Verde+%c3%81gua"
value="Verde &#193;gua" />Verde &#193;gua (18)</label>
<label>
<input rel="fq=specificationFilter_59:Verde+%c3%81gua+Variado" class="multi-search-checkbox" type="checkbox" name="Verde+%c3%81gua+Variado"
value="Verde &#193;gua Variado" />Verde &#193;gua Variado (1)</label>
<label>
<input rel="fq=specificationFilter_59:Verde+Claro" class="multi-search-checkbox" type="checkbox" name="Verde+Claro" value="Verde Claro"
/>Verde Claro (2)</label>
<label>
<input rel="fq=specificationFilter_59:Verde+Escuro" class="multi-search-checkbox" type="checkbox" name="Verde+Escuro" value="Verde Escuro"
/>Verde Escuro (37)</label>
<label>
<input rel="fq=specificationFilter_59:Verde+Escuro+Variado" class="multi-search-checkbox" type="checkbox" name="Verde+Escuro+Variado"
value="Verde Escuro Variado" />Verde Escuro Variado (1)</label>
<label>
<input rel="fq=specificationFilter_59:Vermelho" class="multi-search-checkbox" type="checkbox" name="Vermelho" value="Vermelho"
/>Vermelho (114)</label>
<label>
<input rel="fq=specificationFilter_59:Vermelho+Variado" class="multi-search-checkbox" type="checkbox" name="Vermelho+Variado"
value="Vermelho Variado" />Vermelho Variado (4)</label>
<label>
<input rel="fq=specificationFilter_59:Vinho" class="multi-search-checkbox" type="checkbox" name="Vinho" value="Vinho" />Vinho (38)</label>
</div>
</fieldset>
<fieldset class="refino even">
<h5 class=" even">Faixa de preço</h5>
<div class="">
<label>
<input rel="fq=P:%5b5.01+TO+15%5d" class="multi-search-checkbox" type="checkbox" name="%5b5.01+TO+15%5d" value="[5.01 TO 15]"
/>De R$5,00 at&#233; R$15,00 (9)</label>
<label>
<input rel="fq=P:%5b15.01+TO+25%5d" class="multi-search-checkbox" type="checkbox" name="%5b15.01+TO+25%5d" value="[15.01 TO 25]"
/>De R$15,00 at&#233; R$25,00 (64)</label>
<label>
<input rel="fq=P:%5b25.01+TO+35%5d" class="multi-search-checkbox" type="checkbox" name="%5b25.01+TO+35%5d" value="[25.01 TO 35]"
/>De R$25,00 at&#233; R$35,00 (109)</label>
<label>
<input rel="fq=P:%5b35.01+TO+45%5d" class="multi-search-checkbox" type="checkbox" name="%5b35.01+TO+45%5d" value="[35.01 TO 45]"
/>De R$35,00 at&#233; R$45,00 (2)</label>
</div>
</fieldset>
</div>
<div class="search-single-navigator" style="display:block">
<h3 class="lingerie">
<span></span>
<a href="/categoria.htnl#" title="Lingerie">Lingerie</a>
</h3>
<ul class="productClusterSearchableIds even">
<li>
<a href="/categoria.htnl#/conjuntos/135?PS=12&map=c,c,productClusterSearchableIds" title="Todos">Todos (248)</a>
</li>
<li>
<a href="/categoria.htnl#/conjuntos/137?PS=12&map=c,c,productClusterSearchableIds" title="Lingerie">Lingerie (1)</a>
</li>
<li>
<a href="/categoria.htnl#/conjuntos/143?PS=12&map=c,c,productClusterSearchableIds" title="Busca Vazia">Busca Vazia (248)</a>
</li>
<li>
<a href="/categoria.htnl#/conjuntos/150?PS=12&map=c,c,productClusterSearchableIds" title="Lançamento">Lançamento (9)</a>
</li>
<li>
<a href="/categoria.htnl#/conjuntos/151?PS=12&map=c,c,productClusterSearchableIds" title="Moda Strappy">Moda Strappy (4)</a>
</li>
<li>
<a href="/categoria.htnl#/conjuntos/152?PS=12&map=c,c,productClusterSearchableIds" title="Moda Strappy 2">Moda Strappy 2 (5)</a>
</li>
<li>
<a href="/categoria.htnl#/conjuntos/156?PS=12&map=c,c,productClusterSearchableIds" title="Strappy">Strappy (248)</a>
</li>
<li>
<a href="/categoria.htnl#/conjuntos/160?PS=12&map=c,c,productClusterSearchableIds" title="Produtos Loja">Produtos Loja (249)</a>
</li>
<li class="last">
<a href="/categoria.htnl#/conjuntos/161?PS=12&map=c,c,productClusterSearchableIds" title="TodosProdutos">TodosProdutos (249)</a>
</li>
</ul>
<h4 class="lingerie even">
<a href="/categoria.htnl#/conjuntos?PS=12" title="Conjuntos">Conjuntos</a>
</h4>
<ul class="conjuntos even">
<li>
<a href="/categoria.htnl#/conjuntos/com-bojo?PS=12" title="Com Bojo">Com Bojo (14)</a>
</li>
<li>
<a href="/categoria.htnl#/conjuntos/sem-bojo?PS=12" title="Sem Bojo">Sem Bojo (1)</a>
</li>
<li>
<a href="/categoria.htnl#/conjuntos/infantil?PS=12" title="Infantil">Infantil (20)</a>
</li>
<li class="last">
<a href="/categoria.htnl#/conjuntos/conjunto-strappy?PS=12" title="Conjunto Strappy">Conjunto Strappy (38)</a>
</li>
</ul>
<h5 class="Hide HideMarca">Marca</h5>
<ul class="Marca ">
<li class="last">
<a href="/categoria.htnl#/conjuntos/compra-facil-lingerie?PS=12" title="Compra Facil lingerie">Compra Facil lingerie (249)</a>
</li>
</ul>
<h5 class="Hide even Características HideEstilo">Estilo</h5>
<ul class="Estilo even Características">
<li>
<a href="/categoria.htnl#/conjuntos/Básico?PS=12&map=c,c,specificationFilter_34" title="Básico">Básico (109)</a>
</li>
<li>
<a href="/categoria.htnl#/conjuntos/Chic?PS=12&map=c,c,specificationFilter_34" title="Chic">Chic (138)</a>
</li>
<li>
<a href="/categoria.htnl#/conjuntos/Funcional?PS=12&map=c,c,specificationFilter_34" title="Funcional">Funcional (124)</a>
</li>
<li>
<a href="/categoria.htnl#/conjuntos/Romântico?PS=12&map=c,c,specificationFilter_34" title="Romântico">Romântico (140)</a>
</li>
<li class="last">
<a href="/categoria.htnl#/conjuntos/Sensual?PS=12&map=c,c,specificationFilter_34" title="Sensual">Sensual (133)</a>
</li>
</ul>
<h5 class="Hide Características HideMaterial">Material</h5>
<ul class="Material Características">
<li>
<a href="/categoria.htnl#/conjuntos/Microfibra?PS=12&map=c,c,specificationFilter_35" title="Microfibra">Microfibra (145)</a>
</li>
<li>
<a href="/categoria.htnl#/conjuntos/Renda?PS=12&map=c,c,specificationFilter_35" title="Renda">Renda (134)</a>
</li>
<li>
<a href="/categoria.htnl#/conjuntos/Fibra?PS=12&map=c,c,specificationFilter_35" title="Fibra">Fibra (3)</a>
</li>
<li class="last">
<a href="/categoria.htnl#/conjuntos/Algodão?PS=12&map=c,c,specificationFilter_35" title="Algodão">Algodão (2)</a>
</li>
</ul>
<h5 class="Hide even Características HideEstampa">Estampa</h5>
<ul class="Estampa even Características">
<li>
<a href="/categoria.htnl#/conjuntos/Liso?PS=12&map=c,c,specificationFilter_38" title="Liso">Liso (167)</a>
</li>
<li class="last">
<a href="/categoria.htnl#/conjuntos/Estampado?PS=12&map=c,c,specificationFilter_38" title="Estampado">Estampado (23)</a>
</li>
</ul>
<h5 class="Hide Características HideBojo">Bojo</h5>
<ul class="Bojo Características">
<li>
<a href="/categoria.htnl#/conjuntos/Com Bojo?PS=12&map=c,c,specificationFilter_50" title="Com Bojo">Com Bojo (131)</a>
</li>
<li class="last">
<a href="/categoria.htnl#/conjuntos/Sem Bojo?PS=12&map=c,c,specificationFilter_50" title="Sem Bojo">Sem Bojo (14)</a>
</li>
</ul>
<h5 class="Hide Características HideTamanho">Tamanho</h5>
<ul class="Tamanho Características">
<li>
<a href="/categoria.htnl#/conjuntos/G?PS=12&map=c,c,specificationFilter_47" title="G">G (152)</a>
</li>
<li>
<a href="/categoria.htnl#/conjuntos/GG?PS=12&map=c,c,specificationFilter_47" title="GG">GG (58)</a>
</li>
<li>
<a href="/categoria.htnl#/conjuntos/M?PS=12&map=c,c,specificationFilter_47" title="M">M (148)</a>
</li>
<li class="last">
<a href="/categoria.htnl#/conjuntos/P?PS=12&map=c,c,specificationFilter_47" title="P">P (151)</a>
</li>
</ul>
<h5 class="Hide even Características HideCor">Cor</h5>
<ul class="Cor even Características">
<li>
<a href="/categoria.htnl#/conjuntos/Amarelo?PS=12&map=c,c,specificationFilter_31" title="Amarelo">Amarelo (52)</a>
</li>
<li>
<a href="/categoria.htnl#/conjuntos/Amarelo Variado?PS=12&map=c,c,specificationFilter_31" title="Amarelo Variado">Amarelo Variado (4)</a>
</li>
<li>
<a href="/categoria.htnl#/conjuntos/Azul Caneta?PS=12&map=c,c,specificationFilter_31" title="Azul Caneta">Azul Caneta (98)</a>
</li>
<li>
<a href="/categoria.htnl#/conjuntos/Azul Caneta Variado?PS=12&map=c,c,specificationFilter_31"
title="Azul Caneta Variado">Azul Caneta Variado (3)</a>
</li>
<li>
<a href="/categoria.htnl#/conjuntos/Azul Claro?PS=12&map=c,c,specificationFilter_31" title="Azul Claro">Azul Claro (1)</a>
</li>
<li>
<a href="/categoria.htnl#/conjuntos/Azul Marinho?PS=12&map=c,c,specificationFilter_31" title="Azul Marinho">Azul Marinho (8)</a>
</li>
<li>
<a href="/categoria.htnl#/conjuntos/Branco?PS=12&map=c,c,specificationFilter_31" title="Branco">Branco (110)</a>
</li>
<li>
<a href="/categoria.htnl#/conjuntos/Branco Variado?PS=12&map=c,c,specificationFilter_31" title="Branco Variado">Branco Variado (3)</a>
</li>
<li>
<a href="/categoria.htnl#/conjuntos/Chocolate?PS=12&map=c,c,specificationFilter_31" title="Chocolate">Chocolate (10)</a>
</li>
<li>
<a href="/categoria.htnl#/conjuntos/Chocolate Escuro?PS=12&map=c,c,specificationFilter_31"
title="Chocolate Escuro">Chocolate Escuro (11)</a>
</li>
<li>
<a href="/categoria.htnl#/conjuntos/Chocolate Escuro Variado?PS=12&map=c,c,specificationFilter_31"
title="Chocolate Escuro Variado">Chocolate Escuro Variado (1)</a>
</li>
<li>
<a href="/categoria.htnl#/conjuntos/Chocolate Variado?PS=12&map=c,c,specificationFilter_31"
title="Chocolate Variado">Chocolate Variado (2)</a>
</li>
<li>
<a href="/categoria.htnl#/conjuntos/Cinza?PS=12&map=c,c,specificationFilter_31" title="Cinza">Cinza (2)</a>
</li>
<li>
<a href="/categoria.htnl#/conjuntos/Creme?PS=12&map=c,c,specificationFilter_31" title="Creme">Creme (2)</a>
</li>
<li>
<a href="/categoria.htnl#/conjuntos/Goiaba?PS=12&map=c,c,specificationFilter_31" title="Goiaba">Goiaba (31)</a>
</li>
<li>
<a href="/categoria.htnl#/conjuntos/Goiaba Variado?PS=12&map=c,c,specificationFilter_31" title="Goiaba Variado">Goiaba Variado (1)</a>
</li>
<li>
<a href="/categoria.htnl#/conjuntos/Lilas?PS=12&map=c,c,specificationFilter_31" title="Lilas">Lilas (34)</a>
</li>
<li>
<a href="/categoria.htnl#/conjuntos/Lilas Variado?PS=12&map=c,c,specificationFilter_31" title="Lilas Variado">Lilas Variado (2)</a>
</li>
<li>
<a href="/categoria.htnl#/conjuntos/Onça Claro Variado?PS=12&map=c,c,specificationFilter_31"
title="Onça Claro Variado">Onça Claro Variado (1)</a>
</li>
<li>
<a href="/categoria.htnl#/conjuntos/Onça Variado?PS=12&map=c,c,specificationFilter_31" title="Onça Variado">Onça Variado (1)</a>
</li>
<li>
<a href="/categoria.htnl#/conjuntos/Personagem Variado?PS=12&map=c,c,specificationFilter_31"
title="Personagem Variado">Personagem Variado (1)</a>
</li>
<li>
<a href="/categoria.htnl#/conjuntos/Preto?PS=12&map=c,c,specificationFilter_31" title="Preto">Preto (121)</a>
</li>
<li>
<a href="/categoria.htnl#/conjuntos/Preto Variado?PS=12&map=c,c,specificationFilter_31" title="Preto Variado">Preto Variado (5)</a>
</li>
<li>
<a href="/categoria.htnl#/conjuntos/Rosa Bebe Variado?PS=12&map=c,c,specificationFilter_31"
title="Rosa Bebe Variado">Rosa Bebe Variado (1)</a>
</li>
<li>
<a href="/categoria.htnl#/conjuntos/Rosa Claro Variado?PS=12&map=c,c,specificationFilter_31"
title="Rosa Claro Variado">Rosa Claro Variado (3)</a>
</li>
<li>
<a href="/categoria.htnl#/conjuntos/Rosa Escuro?PS=12&map=c,c,specificationFilter_31" title="Rosa Escuro">Rosa Escuro (87)</a>
</li>
<li>
<a href="/categoria.htnl#/conjuntos/Rosa Escuro Variado?PS=12&map=c,c,specificationFilter_31"
title="Rosa Escuro Variado">Rosa Escuro Variado (4)</a>
</li>
<li>
<a href="/categoria.htnl#/conjuntos/Roxo?PS=12&map=c,c,specificationFilter_31" title="Roxo">Roxo (3)</a>
</li>
<li>
<a href="/categoria.htnl#/conjuntos/Verde Água?PS=12&map=c,c,specificationFilter_31" title="Verde Água">Verde Água (17)</a>
</li>
<li>
<a href="/categoria.htnl#/conjuntos/Verde Água Variado?PS=12&map=c,c,specificationFilter_31"
title="Verde Água Variado">Verde Água Variado (1)</a>
</li>
<li>
<a href="/categoria.htnl#/conjuntos/Verde Claro?PS=12&map=c,c,specificationFilter_31" title="Verde Claro">Verde Claro (3)</a>
</li>
<li>
<a href="/categoria.htnl#/conjuntos/Verde Escuro?PS=12&map=c,c,specificationFilter_31" title="Verde Escuro">Verde Escuro (38)</a>
</li>
<li>
<a href="/categoria.htnl#/conjuntos/Verde Escuro Variado?PS=12&map=c,c,specificationFilter_31"
title="Verde Escuro Variado">Verde Escuro Variado (1)</a>
</li>
<li>
<a href="/categoria.htnl#/conjuntos/Vermelho?PS=12&map=c,c,specificationFilter_31" title="Vermelho">Vermelho (115)</a>
</li>
<li>
<a href="/categoria.htnl#/conjuntos/Vermelho Variado?PS=12&map=c,c,specificationFilter_31"
title="Vermelho Variado">Vermelho Variado (4)</a>
</li>
<li class="last">
<a href="/categoria.htnl#/conjuntos/Vinho?PS=12&map=c,c,specificationFilter_31" title="Vinho">Vinho (37)</a>
</li>
</ul>
<h5 class="Hide Características HideCor-Secundaria">Cor Secundaria</h5>
<ul class="Cor Secundaria Características">
<li>
<a href="/categoria.htnl#/conjuntos/Amarelo?PS=12&map=c,c,specificationFilter_59" title="Amarelo">Amarelo (50)</a>
</li>
<li>
<a href="/categoria.htnl#/conjuntos/Amarelo Variado?PS=12&map=c,c,specificationFilter_59" title="Amarelo Variado">Amarelo Variado (3)</a>
</li>
<li>
<a href="/categoria.htnl#/conjuntos/Azul Caneta?PS=12&map=c,c,specificationFilter_59" title="Azul Caneta">Azul Caneta (92)</a>
</li>
<li>
<a href="/categoria.htnl#/conjuntos/Azul Caneta Variado?PS=12&map=c,c,specificationFilter_59"
title="Azul Caneta Variado">Azul Caneta Variado (3)</a>
</li>
<li>
<a href="/categoria.htnl#/conjuntos/Azul Claro?PS=12&map=c,c,specificationFilter_59" title="Azul Claro">Azul Claro (1)</a>
</li>
<li>
<a href="/categoria.htnl#/conjuntos/Azul Marinho?PS=12&map=c,c,specificationFilter_59" title="Azul Marinho">Azul Marinho (8)</a>
</li>
<li>
<a href="/categoria.htnl#/conjuntos/Branco?PS=12&map=c,c,specificationFilter_59" title="Branco">Branco (106)</a>
</li>
<li>
<a href="/categoria.htnl#/conjuntos/Branco Variado?PS=12&map=c,c,specificationFilter_59" title="Branco Variado">Branco Variado (3)</a>
</li>
<li>
<a href="/categoria.htnl#/conjuntos/Chocolate?PS=12&map=c,c,specificationFilter_59" title="Chocolate">Chocolate (10)</a>
</li>
<li>
<a href="/categoria.htnl#/conjuntos/Chocolate Escuro?PS=12&map=c,c,specificationFilter_59"
title="Chocolate Escuro">Chocolate Escuro (11)</a>
</li>
<li>
<a href="/categoria.htnl#/conjuntos/Chocolate Escuro Variado?PS=12&map=c,c,specificationFilter_59"
title="Chocolate Escuro Variado">Chocolate Escuro Variado (1)</a>
</li>
<li>
<a href="/categoria.htnl#/conjuntos/Chocolate Variado?PS=12&map=c,c,specificationFilter_59"
title="Chocolate Variado">Chocolate Variado (2)</a>
</li>
<li>
<a href="/categoria.htnl#/conjuntos/Cinza?PS=12&map=c,c,specificationFilter_59" title="Cinza">Cinza (2)</a>
</li>
<li>
<a href="/categoria.htnl#/conjuntos/Creme?PS=12&map=c,c,specificationFilter_59" title="Creme">Creme (2)</a>
</li>
<li>
<a href="/categoria.htnl#/conjuntos/Goiaba?PS=12&map=c,c,specificationFilter_59" title="Goiaba">Goiaba (30)</a>
</li>
<li>
<a href="/categoria.htnl#/conjuntos/Goiaba Variado?PS=12&map=c,c,specificationFilter_59" title="Goiaba Variado">Goiaba Variado (1)</a>
</li>
<li>
<a href="/categoria.htnl#/conjuntos/Lilas?PS=12&map=c,c,specificationFilter_59" title="Lilas">Lilas (35)</a>
</li>
<li>
<a href="/categoria.htnl#/conjuntos/Lilas Variado?PS=12&map=c,c,specificationFilter_59" title="Lilas Variado">Lilas Variado (2)</a>
</li>
<li>
<a href="/categoria.htnl#/conjuntos/Onça Claro Variado?PS=12&map=c,c,specificationFilter_59"
title="Onça Claro Variado">Onça Claro Variado (1)</a>
</li>
<li>
<a href="/categoria.htnl#/conjuntos/Onça Variado?PS=12&map=c,c,specificationFilter_59" title="Onça Variado">Onça Variado (2)</a>
</li>
<li>
<a href="/categoria.htnl#/conjuntos/Personagem Variado?PS=12&map=c,c,specificationFilter_59"
title="Personagem Variado">Personagem Variado (1)</a>
</li>
<li>
<a href="/categoria.htnl#/conjuntos/Preto?PS=12&map=c,c,specificationFilter_59" title="Preto">Preto (118)</a>
</li>
<li>
<a href="/categoria.htnl#/conjuntos/Preto Variado?PS=12&map=c,c,specificationFilter_59" title="Preto Variado">Preto Variado (5)</a>
</li>
<li>
<a href="/categoria.htnl#/conjuntos/Rosa Bebe Variado?PS=12&map=c,c,specificationFilter_59"
title="Rosa Bebe Variado">Rosa Bebe Variado (1)</a>
</li>
<li>
<a href="/categoria.htnl#/conjuntos/Rosa Claro Variado?PS=12&map=c,c,specificationFilter_59"
title="Rosa Claro Variado">Rosa Claro Variado (3)</a>
</li>
<li>
<a href="/categoria.htnl#/conjuntos/Rosa Escuro?PS=12&map=c,c,specificationFilter_59" title="Rosa Escuro">Rosa Escuro (84)</a>
</li>
<li>
<a href="/categoria.htnl#/conjuntos/Rosa Escuro Variado?PS=12&map=c,c,specificationFilter_59"
title="Rosa Escuro Variado">Rosa Escuro Variado (4)</a>
</li>
<li>
<a href="/categoria.htnl#/conjuntos/Roxo?PS=12&map=c,c,specificationFilter_59" title="Roxo">Roxo (2)</a>
</li>
<li>
<a href="/categoria.htnl#/conjuntos/Roxo?PS=12&map=c,c,specificationFilter_59" title="Roxo">Roxo (2)</a>
</li>
<li>
<a href="/categoria.htnl#/conjuntos/Verde Água?PS=12&map=c,c,specificationFilter_59" title="Verde Água">Verde Água (18)</a>
</li>
<li>
<a href="/categoria.htnl#/conjuntos/Verde Água Variado?PS=12&map=c,c,specificationFilter_59"
title="Verde Água Variado">Verde Água Variado (1)</a>
</li>
<li>
<a href="/categoria.htnl#/conjuntos/Verde Claro?PS=12&map=c,c,specificationFilter_59" title="Verde Claro">Verde Claro (2)</a>
</li>
<li>
<a href="/categoria.htnl#/conjuntos/Verde Escuro?PS=12&map=c,c,specificationFilter_59" title="Verde Escuro">Verde Escuro (37)</a>
</li>
<li>
<a href="/categoria.htnl#/conjuntos/Verde Escuro Variado?PS=12&map=c,c,specificationFilter_59"
title="Verde Escuro Variado">Verde Escuro Variado (1)</a>
</li>
<li>
<a href="/categoria.htnl#/conjuntos/Vermelho?PS=12&map=c,c,specificationFilter_59" title="Vermelho">Vermelho (114)</a>
</li>
<li class="last">
<a href="/categoria.htnl#/conjuntos/Vermelho Variado?PS=12&map=c,c,specificationFilter_59"
title="Vermelho Variado">Vermelho Variado (4)</a>
</li>
<li class="last">
<a href="/categoria.htnl#/conjuntos/Vinho?PS=12&map=c,c,specificationFilter_59" title="Vinho">Vinho (38)</a>
</li>
</ul>
<h5 class="Hide even HideFaixa-de-preco">Faixa de preço</h5>
<ul class="Faixa de preço even">
<li>
<a href="/categoria.htnl#/conjuntos/de-5,01-a-15?PS=12&map=c,c,priceFrom" title="De R$5,00 até R$15,00">De R$5,00 até R$15,00 (9)</a>
</li>
<li>
<a href="/categoria.htnl#/conjuntos/de-15,01-a-25?PS=12&map=c,c,priceFrom" title="De R$15,00 até R$25,00">De R$15,00 até R$25,00 (64)</a>
</li>
<li>
<a href="/categoria.htnl#/conjuntos/de-25,01-a-35?PS=12&map=c,c,priceFrom" title="De R$25,00 até R$35,00">De R$25,00 até R$35,00 (109)</a>
</li>
<li class="last">
<a href="/categoria.htnl#/conjuntos/de-35,01-a-45?PS=12&map=c,c,priceFrom" title="De R$35,00 até R$45,00">De R$35,00 até R$45,00 (2)</a>
</li>
</ul>
</div>
</div>
</div>
</div>
<div class="urlLastSearch" style="display:none">/categoria.htnl#/conjuntos</div>

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1 @@
<h2 class="titulo-sessao">Categoria 1</h2>

View File

@ -0,0 +1,55 @@
<p id="popupCalculoFreteWrapper" class="frete">
<a onclick="ShippingValue();" href="javascript:void(0);" title="Calcule o valor do frete e prazo de entrega para a sua região"
class="shipping-value">Calcule o valor do frete e prazo de entrega para a sua região</a>
</p>
<div id="calculoFrete" seller="1" produtocorrente="10" skucorrente="13">
<div class="contentWrapper">
<div class="header">
<h1>
<a target="_parent" href="/" id="ctl00_lnkHome">minhaloja</a>
</h1>
<h2>Calcular o Frete</h2>
<div class="close">
<a href="javascript:void(0);" class="bt btn-thickbox" title="Fechar" id="lnkFechar1">Fechar</a>
</div>
</div>
<div id="ctl00_Conteudo_upnlContent">
<input type="hidden" name="CEPObrigatorio" id="CEPObrigatorio" value="O CEP deve ser informado.">
<input type="hidden" name="CEPInvalido" id="CEPInvalido" value="CEP inválido.">
<input type="hidden" name="ProdutoQuantidadeObrigatorio" id="ProdutoQuantidadeObrigatorio" value="É necessário informar a quantidade do mesmo Produto.">
<input type="hidden" id="StrCountry" value="BRA">
<div class="content">
<div style="display: none;" class="aviso-erro" id="ctl00_Conteudo_lblErro">
<div style="color: Red; display: none;" id="ctl00_Conteudo_vldSummary"></div>
</div>
<fieldset>
<label class="prefixo">Calcular o Frete
<input type="text" class="fitext freight-zip-box" id="txtCep" name="txtCep" value="">
</label>
<div class="quantity">
<input type="text" name="quantity" value="1">
</div>
<span class="frete-calcular btBordas btBordasInput">
<input type="hidden" id="stockKeepingUnitId" name="stockKeepingUnitId" value="13">
<input type="button" class="bt freight-btn" title="OK" id="btnFreteSimulacao" value="OK" name="btnFreteSimulacao">
<span class="rdbd bdl"></span>
<span class="rdbd bdr"></span>
</span>
<span style="color: Red; display: none;" id="RegularExpressionValidator1"></span>
<span style="color: Red; display: none;" id="RegularExpressionValidator2"></span>
<span class="cep-busca">
<a title="Não sei meu CEP" class="bt lnkExterno" target="_blank" href="http://www.buscacep.correios.com.br/sistemas/buscacep/">Não sei meu CEP</a>
</span>
</fieldset>
<div class="freight-values" style="display: none"></div>
<span style="color: Red; display: none;" id="reqCep1"></span>
<span style="color: Red; display: none;" id="reqCep2"></span>
</div>
</div>
<div class="footer">
<div class="close">
<a href="javascript:void(0);" class="bt btn-thickbox" title="Fechar" id="lnkFechar2">Fechar</a>
</div>
</div>
</div>
</div>

View File

@ -0,0 +1,79 @@
<script>
var skuJson_0 = {
"productId": 1,
"name": "Produto 01",
"salesChannel": "2",
"available": true,
"displayMode": "especificacao",
"dimensions": ["voltagem"],
"dimensionsInputType": {
"voltagem": "Combo"
},
"dimensionsMap": {
"voltagem": ["110V", "220v"]
},
"skus": [{
"sku": 1,
"skuname": "Produto 01 - 110v",
"dimensions": {
"voltagem": "110V"
},
"available": true,
"availablequantity": 99999,
"cacheVersionUsedToCallCheckout": "36c1f3ec0175f2e8b7c393358f591e6f_",
"listPriceFormated": "R$ 1.500,00",
"listPrice": 150000,
"taxFormated": "R$ 0,00",
"taxAsInt": 0,
"bestPriceFormated": "R$ 1.250,00",
"bestPrice": 125000,
"installments": 1,
"installmentsValue": 125000,
"installmentsInsterestRate": 0,
"image": "https://agenciamagma.vteximg.com.br/arquivos/ids/155571-292-292/109B50_75-IMS-pt_BR.jpg?v=636863519724400000",
"sellerId": "1",
"seller": "Agência Magma",
"measures": {
"cubicweight": 1.0000,
"height": 50.0000,
"length": 50.0000,
"weight": 50.0000,
"width": 50.0000
},
"unitMultiplier": 1.0000,
"rewardValue": 0
}, {
"sku": 2,
"skuname": "Produto 01 - 220v",
"dimensions": {
"voltagem": "220v"
},
"available": true,
"availablequantity": 99999,
"cacheVersionUsedToCallCheckout": "36c1f3ec0175f2e8b7c393358f591e6f_",
"listPriceFormated": "R$ 1.500,00",
"listPrice": 150000,
"taxFormated": "R$ 0,00",
"taxAsInt": 0,
"bestPriceFormated": "R$ 1.250,00",
"bestPrice": 125000,
"installments": 1,
"installmentsValue": 125000,
"installmentsInsterestRate": 0,
"image": "https://agenciamagma.vteximg.com.br/arquivos/ids/155571-292-292/109B50_75-IMS-pt_BR.jpg?v=636863519724400000",
"sellerId": "1",
"seller": "Agência Magma",
"measures": {
"cubicweight": 1.0000,
"height": 50.0000,
"length": 50.0000,
"weight": 50.0000,
"width": 50.0000
},
"unitMultiplier": 1.0000,
"rewardValue": 0
}]
};
var skuJson = skuJson_0;
</script>

View File

@ -0,0 +1,267 @@
<script>
var skuJsonImages =
[
{
"Id": 33357,
"IdProduct": 6741,
"Ean": "7899564992516",
"Name": "Top Fitness Poliamida Liso TP373.1.GG Verde",
"Price": 9.95,
"ListPrice": 19.9,
"PriceWithoutDiscount": 9.95,
"BestInstallmentValue": 1.1,
"BestInstallmentNumber": 9,
"Availability": true,
"AvailabilityMessage": "True",
"Images": [
[
{
"IdArchive": "196067",
"Name": "label1",
"Path": "https://honeybe.vteximg.com.br/arquivos/ids/196067-478-478/Top-Fitness-Poliamida-Liso-TP373.png?v=636595786564530000",
"IsMain": true,
"ArchiveTypeId": 2
},
{
"IdArchive": "196067",
"Name": "label1",
"Path": "https://honeybe.vteximg.com.br/arquivos/ids/196067-95-95/Top-Fitness-Poliamida-Liso-TP373.png?v=636595786564530000",
"IsMain": true,
"ArchiveTypeId": 3
},
{
"IdArchive": "196067",
"Name": "label1",
"Path": "https://honeybe.vteximg.com.br/arquivos/ids/196067-65-65/Top-Fitness-Poliamida-Liso-TP373.png?v=636595786564530000",
"IsMain": true,
"ArchiveTypeId": 1
},
{
"IdArchive": "196067",
"Name": "label1",
"Path": "https://honeybe.vteximg.com.br/arquivos/ids/196067-1000-1000/Top-Fitness-Poliamida-Liso-TP373.png?v=636595786564530000",
"IsMain": true,
"ArchiveTypeId": 10
},
{
"IdArchive": "196067",
"Name": "label1",
"Path": "https://honeybe.vteximg.com.br/arquivos/ids/196067-90-90/Top-Fitness-Poliamida-Liso-TP373.png?v=636595786564530000",
"IsMain": true,
"ArchiveTypeId": 29
},
{
"IdArchive": "196067",
"Name": "label1",
"Path": "https://honeybe.vteximg.com.br/arquivos/ids/196067-220-220/Top-Fitness-Poliamida-Liso-TP373.png?v=636595786564530000",
"IsMain": true,
"ArchiveTypeId": 30
}
],
[
{
"IdArchive": "196068",
"Name": "label2",
"Path": "https://honeybe.vteximg.com.br/arquivos/ids/196068-478-478/Top-Fitness-Poliamida-Liso-TP373--2-.png?v=636595786805130000",
"IsMain": false,
"ArchiveTypeId": 2
},
{
"IdArchive": "196068",
"Name": "label2",
"Path": "https://honeybe.vteximg.com.br/arquivos/ids/196068-95-95/Top-Fitness-Poliamida-Liso-TP373--2-.png?v=636595786805130000",
"IsMain": false,
"ArchiveTypeId": 3
},
{
"IdArchive": "196068",
"Name": "label2",
"Path": "https://honeybe.vteximg.com.br/arquivos/ids/196068-65-65/Top-Fitness-Poliamida-Liso-TP373--2-.png?v=636595786805130000",
"IsMain": false,
"ArchiveTypeId": 1
},
{
"IdArchive": "196068",
"Name": "label2",
"Path": "https://honeybe.vteximg.com.br/arquivos/ids/196068-1000-1000/Top-Fitness-Poliamida-Liso-TP373--2-.png?v=636595786805130000",
"IsMain": false,
"ArchiveTypeId": 10
},
{
"IdArchive": "196068",
"Name": "label2",
"Path": "https://honeybe.vteximg.com.br/arquivos/ids/196068-90-90/Top-Fitness-Poliamida-Liso-TP373--2-.png?v=636595786805130000",
"IsMain": false,
"ArchiveTypeId": 29
},
{
"IdArchive": "196068",
"Name": "label2",
"Path": "https://honeybe.vteximg.com.br/arquivos/ids/196068-220-220/Top-Fitness-Poliamida-Liso-TP373--2-.png?v=636595786805130000",
"IsMain": false,
"ArchiveTypeId": 30
}
],
[
{
"IdArchive": "196069",
"Name": "label3",
"Path": "https://honeybe.vteximg.com.br/arquivos/ids/196069-478-478/Top-Fitness-Poliamida-Liso-TP373--3-.png?v=636595786941530000",
"IsMain": false,
"ArchiveTypeId": 2
},
{
"IdArchive": "196069",
"Name": "label3",
"Path": "https://honeybe.vteximg.com.br/arquivos/ids/196069-95-95/Top-Fitness-Poliamida-Liso-TP373--3-.png?v=636595786941530000",
"IsMain": false,
"ArchiveTypeId": 3
},
{
"IdArchive": "196069",
"Name": "label3",
"Path": "https://honeybe.vteximg.com.br/arquivos/ids/196069-65-65/Top-Fitness-Poliamida-Liso-TP373--3-.png?v=636595786941530000",
"IsMain": false,
"ArchiveTypeId": 1
},
{
"IdArchive": "196069",
"Name": "label3",
"Path": "https://honeybe.vteximg.com.br/arquivos/ids/196069-1000-1000/Top-Fitness-Poliamida-Liso-TP373--3-.png?v=636595786941530000",
"IsMain": false,
"ArchiveTypeId": 10
},
{
"IdArchive": "196069",
"Name": "label3",
"Path": "https://honeybe.vteximg.com.br/arquivos/ids/196069-90-90/Top-Fitness-Poliamida-Liso-TP373--3-.png?v=636595786941530000",
"IsMain": false,
"ArchiveTypeId": 29
},
{
"IdArchive": "196069",
"Name": "label3",
"Path": "https://honeybe.vteximg.com.br/arquivos/ids/196069-220-220/Top-Fitness-Poliamida-Liso-TP373--3-.png?v=636595786941530000",
"IsMain": false,
"ArchiveTypeId": 30
}
],
[
{
"IdArchive": "196070",
"Name": "label4",
"Path": "https://honeybe.vteximg.com.br/arquivos/ids/196070-478-478/Top-Fitness-Poliamida-Liso-TP373--4-.png?v=636595787213370000",
"IsMain": false,
"ArchiveTypeId": 2
},
{
"IdArchive": "196070",
"Name": "label4",
"Path": "https://honeybe.vteximg.com.br/arquivos/ids/196070-95-95/Top-Fitness-Poliamida-Liso-TP373--4-.png?v=636595787213370000",
"IsMain": false,
"ArchiveTypeId": 3
},
{
"IdArchive": "196070",
"Name": "label4",
"Path": "https://honeybe.vteximg.com.br/arquivos/ids/196070-65-65/Top-Fitness-Poliamida-Liso-TP373--4-.png?v=636595787213370000",
"IsMain": false,
"ArchiveTypeId": 1
},
{
"IdArchive": "196070",
"Name": "label4",
"Path": "https://honeybe.vteximg.com.br/arquivos/ids/196070-1000-1000/Top-Fitness-Poliamida-Liso-TP373--4-.png?v=636595787213370000",
"IsMain": false,
"ArchiveTypeId": 10
},
{
"IdArchive": "196070",
"Name": "label4",
"Path": "https://honeybe.vteximg.com.br/arquivos/ids/196070-90-90/Top-Fitness-Poliamida-Liso-TP373--4-.png?v=636595787213370000",
"IsMain": false,
"ArchiveTypeId": 29
},
{
"IdArchive": "196070",
"Name": "label4",
"Path": "https://honeybe.vteximg.com.br/arquivos/ids/196070-220-220/Top-Fitness-Poliamida-Liso-TP373--4-.png?v=636595787213370000",
"IsMain": false,
"ArchiveTypeId": 30
}
],
[
{
"IdArchive": "196071",
"Name": "label5",
"Path": "https://honeybe.vteximg.com.br/arquivos/ids/196071-478-478/Top-Fitness-Poliamida-Liso-TP373--5-.png?v=636595787445000000",
"IsMain": false,
"ArchiveTypeId": 2
},
{
"IdArchive": "196071",
"Name": "label5",
"Path": "https://honeybe.vteximg.com.br/arquivos/ids/196071-95-95/Top-Fitness-Poliamida-Liso-TP373--5-.png?v=636595787445000000",
"IsMain": false,
"ArchiveTypeId": 3
},
{
"IdArchive": "196071",
"Name": "label5",
"Path": "https://honeybe.vteximg.com.br/arquivos/ids/196071-65-65/Top-Fitness-Poliamida-Liso-TP373--5-.png?v=636595787445000000",
"IsMain": false,
"ArchiveTypeId": 1
},
{
"IdArchive": "196071",
"Name": "label5",
"Path": "https://honeybe.vteximg.com.br/arquivos/ids/196071-1000-1000/Top-Fitness-Poliamida-Liso-TP373--5-.png?v=636595787445000000",
"IsMain": false,
"ArchiveTypeId": 10
},
{
"IdArchive": "196071",
"Name": "label5",
"Path": "https://honeybe.vteximg.com.br/arquivos/ids/196071-90-90/Top-Fitness-Poliamida-Liso-TP373--5-.png?v=636595787445000000",
"IsMain": false,
"ArchiveTypeId": 29
},
{
"IdArchive": "196071",
"Name": "label5",
"Path": "https://honeybe.vteximg.com.br/arquivos/ids/196071-220-220/Top-Fitness-Poliamida-Liso-TP373--5-.png?v=636595787445000000",
"IsMain": false,
"ArchiveTypeId": 30
}
]
],
"Reference": "6280.1.GG",
"HasExtendedWarranty": false,
"HasExtendedWarrantyPage": false,
"NotifyMe": true,
"HasServiceAtProductPage": false,
"HasServiceAtCartPage": false,
"HasServiceAtServicePage": false,
"RealHeight": 15,
"RealWidth": 15,
"RealLength": 15,
"RealWeightKg": 201,
"RewardValue": 0,
"DefaultSellerId": "1",
"SkuSellersInformation": [
{
"IsDefaultSeller": true,
"SellerId": "1",
"Name": "HoneyBe",
"LogoUrl": null,
"ListPrice": 19.9,
"Price": 9.95,
"PriceWithoutDiscount": 9.95,
"AvailableQuantity": 16
}
],
"SalesChannel": "1"
}
];
</script>

View File

@ -0,0 +1,22 @@
<div class="plugin-preco">
<p productIndex="0" class="descricao-preco">
<em productIndex="0" class="valor-de" >De:
<strong productIndex="0" class="skuListPrice">R$ 56,00</strong>
</em>
<em productIndex="0" class="valor-por">Por:
<strong productIndex="0" class="skuBestPrice">R$ 49,90</strong>
</em>
<em productIndex="0" class="valor-dividido" style="display:none">
<span>
<span>ou
<label productIndex="0" class="skuBestInstallmentNumber">1</label>X de</span>
<strong>
<label productIndex="0" class="skuBestInstallmentValue">R$ 49,90</label>
</strong>
</span>
</em>
<p productIndex="0" class="preco-a-vista" style="display:block">Preço a vista:
<strong productIndex="0" class="skuPrice">R$ 49,90</strong>
</p>
</p>
</div>

View File

@ -0,0 +1,37 @@
<div class="sku-selector-container sku-selector-container-0">
<ul class="topic Cores productid-5774 numopt-1">
<li class="specification">Cores</li>
<li class="select skuList item-dimension-Cores">
<select id="espec_0_opcao_0" name="espec_0" size="1" class="sku-selector" specification="Cores" currentproductid="5774"
data-dimension="Cores">
<option value=""></option>
<option class="skuopcao_0 checked sku-picked" value="Cinza" selected="selected">Cinza</option>
</select>
</li>
</ul>
<ul class="topic Tamanho productid-5774 numopt-6">
<li class="specification">Tamanho</li>
<li class="select skuList item-dimension-Tamanho">
<span class="group_1">
<input type="radio" name="5774_Tamanho" dimension="Tamanho" data-value="34" data-dimension="Tamanho" class="skuselector-specification-label input-dimension-Tamanho sku-selector skuespec_34 change-image checked sku-picked"
id="5774_Tamanho_0" value="34" specification="34" checked="checked">
<label for="5774_Tamanho_0" class="dimension-Tamanho espec_1 skuespec_34 skuespec_Tamanho_opcao_34 skuespec_Tamanho_opcao_34 checked sku-picked">34</label>
<input type="radio" name="5774_Tamanho" dimension="Tamanho" data-value="35" data-dimension="Tamanho" class="skuselector-specification-label input-dimension-Tamanho sku-selector skuespec_35 change-image"
id="5774_Tamanho_1" value="35" specification="35">
<label for="5774_Tamanho_1" class="dimension-Tamanho espec_1 skuespec_35 skuespec_Tamanho_opcao_35 skuespec_Tamanho_opcao_35">35</label>
<input type="radio" name="5774_Tamanho" dimension="Tamanho" data-value="36" data-dimension="Tamanho" class="skuselector-specification-label input-dimension-Tamanho sku-selector skuespec_36 change-image"
id="5774_Tamanho_2" value="36" specification="36">
<label for="5774_Tamanho_2" class="dimension-Tamanho espec_1 skuespec_36 skuespec_Tamanho_opcao_36 skuespec_Tamanho_opcao_36">36</label>
<input type="radio" name="5774_Tamanho" dimension="Tamanho" data-value="37" data-dimension="Tamanho" class="skuselector-specification-label input-dimension-Tamanho sku-selector skuespec_37 change-image"
id="5774_Tamanho_3" value="37" specification="37">
<label for="5774_Tamanho_3" class="dimension-Tamanho espec_1 skuespec_37 skuespec_Tamanho_opcao_37 skuespec_Tamanho_opcao_37">37</label>
<input type="radio" name="5774_Tamanho" dimension="Tamanho" data-value="38" data-dimension="Tamanho" class="skuselector-specification-label input-dimension-Tamanho sku-selector skuespec_38 change-image"
id="5774_Tamanho_4" value="38" specification="38">
<label for="5774_Tamanho_4" class="dimension-Tamanho espec_1 skuespec_38 skuespec_Tamanho_opcao_38 skuespec_Tamanho_opcao_38">38</label>
<input type="radio" name="5774_Tamanho" dimension="Tamanho" data-value="39" data-dimension="Tamanho" class="skuselector-specification-label input-dimension-Tamanho sku-selector skuespec_39 change-image"
id="5774_Tamanho_5" value="39" specification="39">
<label for="5774_Tamanho_5" class="dimension-Tamanho espec_1 skuespec_39 skuespec_Tamanho_opcao_39 skuespec_Tamanho_opcao_39">39</label>
</span>
</li>
</ul>
</div>

View File

@ -0,0 +1,10 @@
<div class="quantity-selector-container">
<div class="quantidade select-qtd qty-selector">
<div class="quantitySelector">
<label>
<span class="quantityText">Quantidade:</span>
<input type="number" step="1" min="1" max="20" value="1">
</label>
</div>
</div>
</div>

View File

@ -0,0 +1,22 @@
<span style="display: none !important;" id="p636hidden-centimeter">Centímetro</span>
<span style="display: none !important;" id="p636hidden-meter">Metro</span>
<span style="display: none !important;" id="p636hidden-kilo">Kilograma</span>
<span style="display: none !important;" id="p636hidden-grama">Grama</span>
<div id="div_Conteudo_DetalhesDoProduto_pnlDimensoes">
<h3>Dimensões</h3>
<dl>
<dt id="p636_dtSkuCompleteName" class="dtSkuCompleteName">Jogo De Roletes Do Eixo Piloto Até 1980</dt>
<dd>Altura:
<span id="p636_lblAlturaReal" class="lblAlturaReal">99,50</span>
<span id="p636_measures-height" class="measures-height">Centímetro</span>s</dd>
<dd>Largura:
<span id="p636_lblLarguraReal" class="lblLarguraReal">99,50</span>
<span id="p636_measures-width" class="measures-width">Centímetro</span>s</dd>
<dd>Profundidade:
<span id="p636_lblComprimentoReal" class="lblComprimentoReal">99,50</span>
<span id="p636_measures-length" class="measures-length">Centímetro</span>s</dd>
<dd>Peso:
<span id="p636_lblPesoReal" class="lblPesoReal">55,00</span>
<span id="p636_measures-weight" class="measures-weight">Grama</span>s</dd>
</dl>
</div>

View File

@ -0,0 +1 @@
login

View File

@ -0,0 +1,36 @@
const { regexFindAll, findInArray } = require("../utils");
class VtexControlsTransformer {
constructor(regex, controls, validator) {
this.regex = regex;
this.controls = controls;
this.validator = validator;
}
transform(fileContent) {
const regex = new RegExp(this.regex.controle);
const regexResult = regexFindAll(regex, fileContent);
return this._processRegResult(fileContent, regexResult);
}
_processRegResult(fileContent, regexResult) {
regexResult.forEach((reResult) => {
const [tag, id] = reResult;
let conteudo;
const file = findInArray(this.controls, id);
if (file !== null) {
conteudo = file.content;
} else {
console.log(`Controle de ID: ${id} não foi encontrado`);
conteudo = `<!-- no match for ${id} -->`;
}
fileContent = fileContent.replace(tag, conteudo);
});
return fileContent;
}
}
module.exports = VtexControlsTransformer;

View File

@ -0,0 +1,44 @@
const { regexFindAll, findInArray } = require("../utils");
class VtexSubTemplateTransformer {
constructor(regex, subtemplate, validator) {
this.regex = regex;
this.subTemplates = subtemplate;
this.validator = validator;
}
transform(fileContent) {
const regex = new RegExp(this.regex.subtemplate);
fileContent = this.validator.subTemplatesWithContentPlaceholder(
fileContent,
this.subTemplates,
this.regex
);
const regexResult = regexFindAll(regex, fileContent);
return this._processRegResult(fileContent, regexResult);
}
_processRegResult(fileContent, regexResult) {
regexResult.forEach((reResult) => {
const [tag, id] = reResult;
let conteudo;
const file = findInArray(this.subTemplates, id);
if (file !== null) {
conteudo = file.content;
} else {
console.log(`Subtemplate de ID: ${id} não foi encontrado`);
conteudo = `<!-- no match for ${id} -->`;
}
fileContent = fileContent.replace(tag, conteudo);
});
return fileContent;
}
}
module.exports = VtexSubTemplateTransformer;

View File

@ -0,0 +1,117 @@
const { regexFindAll } = require("../../utils");
const placeHolderTransformStrategy = require("./placeHolderTransformStrategy");
const chalk = require("chalk");
class VtexPlaceHolderTransformer {
constructor(regex, metaData, shelfs, validator) {
this.regex = regex;
this.metaData = metaData;
this.shelfs = shelfs;
this.validator = validator;
}
transform(fileContent, { basename }) {
const regex = new RegExp(this.regex.placeholder);
const regexResult = regexFindAll(regex, fileContent);
fileContent = this.validator.placeHolderRepeated(
fileContent,
regexResult,
basename
);
fileContent = this.validator.metaDataPlaceHolderRepeated(
fileContent,
this.metaData
);
return this._processRegResult(fileContent, regexResult, basename);
}
_processRegResult(file, regexResult, basename) {
let transformedFile = file;
regexResult.forEach((reResult) => {
const pageData = this._getPageData(basename);
const pagePlaceHolderData = this._getPagePlaceholderData(
pageData,
reResult
);
transformedFile = this._processPlaceHolder(
transformedFile,
pagePlaceHolderData
);
});
return transformedFile;
}
_processPlaceHolder(transformedFile, pagePlaceHolderData) {
if (
pagePlaceHolderData.placeHolderData === false ||
pagePlaceHolderData.placeHolderData === undefined
) {
console.log(
"Placeholder não registrado na meta de ID:",
pagePlaceHolderData.id
);
return transformedFile.replace(
pagePlaceHolderData.vtexTag,
`<!-- Conteudo não registrado de tag: ${pagePlaceHolderData.vtexTag} -->`
);
}
let result = "";
pagePlaceHolderData.placeHolderData.objects.forEach((object) => {
const strategy = placeHolderTransformStrategy[object.type];
if (typeof strategy === "undefined") return transformedFile;
// não ta legal mas passo as prateleiras como segundo paramentro
result += strategy(object, this.shelfs);
});
return transformedFile.replace(pagePlaceHolderData.vtexTag, result);
}
_getPagePlaceholderData(pageData, reResult) {
const [found, idValue, ...extra] = reResult;
const id = idValue.split('"')[0];
if (typeof pageData !== "undefined") {
const placeHolderData = pageData.data.contentPlaceHolders.find(
(contentPlaceholder) => contentPlaceholder.id === id
);
if (typeof placeHolderData === "undefined") {
console.log(
`contentPlaceholder de ID: ${id} não foi encontrado`
);
return {
vtexTag: found,
placeHolderData: false,
id,
};
}
return {
vtexTag: found,
placeHolderData,
id,
};
}
return {
vtexTag: found,
placeHolderData: false,
id,
};
}
_getPageData(basename) {
return this.metaData.pages.find((data) => {
return data.template === basename;
});
}
}
module.exports = VtexPlaceHolderTransformer;

View File

@ -0,0 +1,70 @@
function base(obj, cb) {
let result = "";
obj.contents.forEach((content) => {
if (content.length === 0) return;
if (content.active) {
result = cb(content, result);
}
});
return result;
}
function banner(obj) {
function createBanner(content, string) {
return (string += `
<div class="box-banner">
<a href="/">
<img alt="Promoções" src="/arquivos/${content.file}" />
</a>
</div>`);
}
return base(obj, createBanner);
}
function colecao(obj, shelfs) {
const shelf = shelfs.find((shelf) => shelf.name === obj.properties.layout);
const shelfCount = obj.properties["number-of-items"];
const shelfItem = [...Array(shelfCount).keys()].map(
(i) => `
<li layout="id da prateleira" class="nome-da-colecao">
${shelf.content}
</li>
`
);
const html = `
<div class="prateleira n20colunas">
<h2>${obj.name}</h2>
<ul>
${shelfItem}
</ul>
</div>
`;
return html;
}
function html(obj) {
function createHtmlContent(content, string) {
return (string += content.content);
}
return base(obj, createHtmlContent);
}
function text(obj) {
return html(obj);
}
function productRelational(obj, shelfs) {
return colecao(obj, shelfs);
}
module.exports = {
banner,
colecao,
html,
text,
"Produtos Relacionados": productRelational,
};

View File

@ -0,0 +1,54 @@
const VtexPlaceHolderTransformer = require("./Transformers/placeholder/VtexPlaceHolderTransformer");
const VtexControlsTransformer = require("./Transformers/VtexControlsTransformer");
const VtexSubTemplateTransformer = require("./Transformers/VtexSubTemplateTransformer");
const VtexEngineValidator = require("./VtexEngineValidator");
class VtexEngine {
constructor(files, metaData, regex) {
this.validator = new VtexEngineValidator();
this.subTemplateTransformer = new VtexSubTemplateTransformer(
regex,
files.subtemplates,
this.validator
);
this.controlsTransformer = new VtexControlsTransformer(
regex,
files.controles,
this.validator
);
this.placeHolderTransformer = new VtexPlaceHolderTransformer(
regex,
metaData,
files.prateleiras,
this.validator
);
}
process(fileContent, fileMeta, transformCTX) {
fileContent = this.placeHolderTransformer.transform(
fileContent,
fileMeta
);
fileContent = this.subTemplateTransformer.transform(
fileContent,
fileMeta
);
fileContent = this.controlsTransformer.transform(fileContent, fileMeta);
fileContent = this._removeEspecialTags(fileContent, fileMeta);
fileContent = this.validator.notClosedTags(fileContent);
return fileContent;
}
_removeEspecialTags(fileContent) {
fileContent = fileContent.replace("<vtex:metaTags />", "");
return fileContent;
}
}
module.exports = VtexEngine;

View File

@ -0,0 +1,118 @@
const chalk = require("chalk");
module.exports = class VtexEngineValidator {
metaDataPlaceHolderRepeated(file, metaData) {
metaData.pages.forEach((pageData) => {
let ids = {};
let dups = [];
pageData.data.contentPlaceHolders.forEach((val) => {
if (ids[val.id]) {
dups.push(val);
} else {
ids[val.id] = true;
}
});
if (dups.length > 0) {
console.log(
chalk.red(
`\n\n O ID: "${dups[0].id}" foi encontrado multiplas vezes no template: "${pageData.template}" \n\n`
)
);
file += this._memeContent("https://i.imgflip.com/4fkkcz.jpg");
}
});
return file;
}
placeHolderRepeated(file, regResult, basename) {
let ids = {};
let dups = [];
regResult.forEach((regexec) => {
if (ids[regexec[1]]) {
dups.push(regexec[1]);
} else {
ids[regexec[1]] = true;
}
});
if (dups.length > 0) {
console.log(
chalk.red(
`\n\n O ID: "${dups[0]}" foi encontrado multiplas vezes no template: "${basename}" \n\n`
)
);
file += this._memeContent("https://i.imgflip.com/4fkkcz.jpg");
}
return file;
}
subTemplatesWithContentPlaceholder(fileContent, subtemplates, regex) {
subtemplates.forEach((template) => {
const placeholderRegex = new RegExp(regex.placeholder);
const regexResult = placeholderRegex.exec(template.content);
if (regexResult) {
fileContent += this._memeContent(
"https://i.imgflip.com/4fkgnr.jpg"
);
console.log(
chalk.red(
` \n\n Subtemplates não podem ter contentplaceholder `
)
);
console.log(
chalk.red(
`O Subtemplate "${template.name}" possui um contentPlaceholder \n\n`
)
);
}
});
return fileContent;
}
notClosedTags(fileContent) {
const reImgNotClosed = new RegExp(/(<img("[^"]*"|[^\/">])*)>/gi);
const reInputNotClosed = new RegExp(/(<input("[^"]*"|[^\/">])*)>/gi);
const imgTest = reImgNotClosed.exec(fileContent);
const inputTest = reInputNotClosed.exec(fileContent);
if (imgTest)
console.log(
chalk.red(
`\n\n A Tag: ${imgTest[0]} não foi fechada corretamente \n\n`
)
);
if (inputTest)
console.log(
chalk.red(
`\n\n A Tag: ${inputTest[0]} não foi fechada corretamente \n\n`
)
);
return fileContent;
}
_memeContent(memeUrl) {
return `
<div style="position: fixed;
top: 0;
left: 0;
height: 100vh;
width: 100vw;
z-index: 999;
opacity: 1;
pointer-events: none;
transition: 0.2s;
background: rgba(0,0,0,0.5);">
<img src="${memeUrl}" style="
position: fixed;
top: 50%;
left: 50%;
transform: translate(-50%, -50%);
" />
</div>
`;
}
};

17
dev/vtexEngine/utils.js Normal file
View File

@ -0,0 +1,17 @@
module.exports = {
regexFindAll(re, string) {
let regexResult = [];
while ((match = re.exec(string)) != null) {
regexResult.push(match);
}
return regexResult;
},
findInArray(lista, name) {
for (let i = 0; i < lista.length; i++) {
if (lista[i].name == name.trim().toLowerCase()) {
return lista[i];
}
}
return null;
},
};

306
gulpfile.js Normal file
View File

@ -0,0 +1,306 @@
const gulp = require("gulp"),
gulpif = require("gulp-if"),
del = require("del"),
connect = require("gulp-connect"),
sourcemaps = require("gulp-sourcemaps"),
autoprefixer = require("gulp-autoprefixer"),
sass = require('gulp-sass')(require('sass')),
imagemin = require("gulp-imagemin"),
rename = require("gulp-rename"),
apiMocker = require("connect-api-mocker"),
sprity = require("sprity"),
crypto = require("crypto"),
glob = require("glob"),
path = require("path"),
inlinesource = require("gulp-inline-source");
const VtexEmulation = require("./dev/VtexEmulation.js");
const webpack = require("webpack");
const pacote = require("./package.json");
const isProduction = process.env.NODE_ENV === "production";
const paths = {
styles: {
src: "src/arquivos/sass/*.{scss,css,sass}",
lib: "src/arquivos/sass/lib",
watch: "src/arquivos/sass/**/*.scss",
},
scripts: {
watch: "src/arquivos/js/**/*.js",
},
sprites: {
src: "src/arquivos/sprite/**/*.{png,jpg}",
},
img: {
src: "src/arquivos/img/**/*.{png,gif,jpg}",
watch: "src/arquivos/img/**/*.{png,gif,jpg}",
},
fonts: {
src: "src/arquivos/fonts/**.*",
},
html: {
watch: "src/**/*.html",
template: "src/template-pagina/",
subTemplate: "src/template-pagina/sub-templates/",
controlesVtex: "dev/controles-vtex/",
controlesCustomizados: "src/controles-customizados/",
prateleiras: "src/template-prateleira/",
},
output: "dist",
outputStatic: "dist/arquivos",
outputStaticCheckout: "dist/files",
tmp: ".temp",
};
function clean() {
return del([paths.output, paths.tmp]);
}
function styles() {
return gulp
.src(paths.styles.src)
.pipe(gulpif(!isProduction, sourcemaps.init()))
.pipe(
sass({
outputStyle: "compressed",
}).on("error", sass.logError)
)
.pipe(
autoprefixer({
cascade: false,
})
)
.pipe(
rename({
prefix: pacote.shopName + "--",
extname: ".css",
})
)
.pipe(gulpif(!isProduction, sourcemaps.write()))
.pipe(gulp.dest(paths.outputStatic))
.pipe(connect.reload());
}
function scripts() {
let webpackConfig;
switch (process.env.NODE_ENV) {
case "production":
webpackConfig = require("./webpack/webpack.prod.js");
break;
case "local":
webpackConfig = require("./webpack/webpack.local.js");
break;
case "localfast":
webpackConfig = require("./webpack/webpack.localfast.js");
break;
case "devfast":
webpackConfig = require("./webpack/webpack.devfast.js");
break;
default:
webpackConfig = require("./webpack/webpack.dev.js");
break;
}
return new Promise((resolve) =>
webpack(webpackConfig, (err, stats) => {
if (err) console.log("Webpack", err);
console.log(
stats.toString({
all: false,
modules: true,
maxModules: 0,
errors: true,
warnings: true,
// our additional options
moduleTrace: true,
errorDetails: true,
colors: true,
chunks: true,
})
);
resolve();
connect.reload();
})
);
}
function sprites(done) {
glob(paths.sprites.src, function (er, files) {
const hash = crypto
.createHash("md5")
.update(files.join(""))
.digest("hex");
sprity.create(
{
engine: "sprity-jimp",
src: paths.sprites.src,
style: "./_sprite.scss",
margin: 5,
prefix: "sprite",
processor: "css", // make sure you have installed sprity-sass
cssPath: "/arquivos/",
out: ".temp",
name: pacote.shopName + "-sprite-" + hash,
dimension: [
{ ratio: 1, dpi: 72 },
{ ratio: 2, dpi: 192 },
],
cachebuster: false,
},
() => {
gulp.src(".temp/*")
.pipe(
gulpif(
"*.png",
gulp.dest("dist/arquivos/"),
gulp.dest("src/arquivos/sass/lib")
)
)
.pipe(connect.reload());
done();
}
);
});
}
function img() {
let dest = paths.outputStatic;
if (!(process.env.NODE_ENV === "local")) {
dest = dest + "/img";
}
return gulp
.src(paths.img.src)
.pipe(gulpif(isProduction, imagemin()))
.pipe(gulp.dest(paths.outputStatic))
.pipe(connect.reload());
}
function html() {
// config folders
VtexEmulation.folders({
template: paths.html.template,
subTemplate: paths.html.subTemplate,
controlesVtex: paths.html.controlesVtex,
controleCustomizado: paths.html.controlesCustomizados,
prateleira: paths.html.prateleiras,
});
VtexEmulation.startEngine();
return gulp
.src(VtexEmulation.folders().template + "*.html")
.pipe(VtexEmulation.process())
.pipe(
inlinesource({
compress: true,
rootpath: path.resolve("src/arquivos"),
})
)
.pipe(gulp.dest(paths.output))
.pipe(connect.reload());
}
function htmlProd() {
return gulp
.src([
paths.html.prateleiras + "**/*.html",
paths.html.template + "**/*.html",
])
.pipe(
inlinesource({
compress: true,
rootpath: path.resolve("src/arquivos"),
})
)
.pipe(gulp.dest(paths.output));
}
function customFonts() {
return gulp
.src(paths.fonts.src)
.pipe(
rename((path) => ({
dirname: "",
basename: path.basename,
extname: path.extname + ".css",
}))
)
.pipe(gulp.dest(paths.outputStatic))
.pipe(connect.reload());
}
function watch() {
devServer();
gulp.watch(paths.scripts.watch, { ignoreInitial: false }, scripts);
gulp.watch(paths.sprites.src, { ignoreInitial: false }, sprites);
gulp.watch(paths.styles.watch, { ignoreInitial: false }, styles);
gulp.watch(paths.img.watch, { ignoreInitial: false }, img);
gulp.watch(paths.html.watch, { ignoreInitial: false }, html);
gulp.watch(paths.fonts.src, { ignoreInitial: false }, customFonts);
}
function devServer() {
connect.server({
root: paths.output,
livereload: true,
port: 3000,
middleware: function (_connect, options) {
console.log(_connect);
var middlewares = [];
// Api get user profile
middlewares.push(
apiMocker(
"/no-cache/profileSystem/getProfile",
"dev/api/usuario/"
)
);
//api masterData
middlewares.push(
apiMocker(
"/" + pacote.shopName + "/dataentities/",
"dev/api/masterdata"
)
);
//api masterData
middlewares.push(
apiMocker(
"/api/catalog_system/pub/products/search/",
"dev/api/produtos/"
)
);
return middlewares;
},
});
}
const build = gulp.series(
clean,
gulp.parallel(
htmlProd,
gulp.series(sprites, customFonts, styles),
scripts,
img
)
);
exports.build = build;
exports.clean = clean;
exports.scripts = scripts;
exports.styles = styles;
exports.img = img;
exports.html = html;
exports.devServer = devServer;
exports.watch = gulp.series(build, watch);
exports.sprites = sprites;

14
jsconfig.json Normal file
View File

@ -0,0 +1,14 @@
{
"compilerOptions": {
"target": "es2020",
"allowSyntheticDefaultImports": false,
"baseUrl": "./",
"paths": {
"Helpers/*": ["src/arquivos/js/helpers/*"],
"Config/*": ["src/arquivos/js/config/*"],
"Lib/*": ["src/arquivos/js/lib/*"],
"App/*": ["src/arquivos/js/app/*"]
}
},
"exclude": ["node_modules", "dist"]
}

16
meta/loja.js Normal file
View File

@ -0,0 +1,16 @@
const home = require("./pages/home");
const category = require("./pages/category");
const product = require("./pages/product");
const institucional = require("./pages/institucional");
const menuElements = require("./pages/elementos-menu");
module.exports = {
accountName: "agenciamagma",
pages: [
{ data: home, template: "template-home.html" },
{ data: category, template: "template-categoria.html" },
{ data: product, template: "template-produto.html" },
{ data: institucional, template: "template-institucional.html" },
{ data: menuElements, template: "template-elementos-menu.html" },
],
};

26
meta/pages/category.js Normal file
View File

@ -0,0 +1,26 @@
module.exports = {
contentPlaceHolders: [
{
// Registra o contentPlaceholder
id: "htmlSeo",
objects: [
// Registra os objetos vtex
{
type: "html",
name: "Html SEO",
contents: [
{
name: "metaTag",
active: true,
content: `<meta name='language' content='pt-Br'>`,
},
],
},
],
},
],
// Ainda não implementado
//Trocar pelo que for cadastrado na vtex
searchResultLayoutID: "46b0e7f2-15ee-4789-a75e-280e389d2b8f",
};

View File

@ -0,0 +1,37 @@
module.exports = {
contentPlaceHolders: [
{
id: "banners-menu",
objects: [
{
type: "banner",
name: "menu camisa",
contents: [
{
name: "banner principal mobile content",
active: true,
type: "image",
file: "slide-principal-mobile.png",
width: 500,
height: 500,
},
],
},
{
type: "banner",
name: "menu bolsa",
contents: [
{
name: "banner principal mobile 2 content",
active: true,
type: "image",
file: "slide-principal-mobile.png",
width: 500,
height: 500,
},
],
},
],
},
],
};

202
meta/pages/home.js Normal file
View File

@ -0,0 +1,202 @@
module.exports = {
contentPlaceHolders: [
{
// Registra o contentPlaceholder
id: "htmlSeo",
objects: [
// Registra os objetos vtex
{
type: "html",
name: "Html SEO",
contents: [],
},
],
},
{
id: "slide-principal",
objects: [
{
type: "banner",
name: "banner principal",
contents: [
{
name: "banner principal content",
active: true,
type: "image",
file: "slide-principal.png",
width: 1920,
height: 500,
// "category": "*",
// "brand": "*"
// "period": ""
},
],
},
{
type: "banner",
name: "banner principal-2",
contents: [
{
name: "banner principal content",
active: true,
type: "image",
file: "slide-principal.png",
width: 1920,
height: 500,
},
],
},
],
},
{
id: "slide-principal-mobile",
objects: [
{
type: "banner",
name: "banner principal mobile",
contents: [
{
name: "banner principal mobile content",
active: true,
type: "image",
file: "slide-principal-mobile.png",
width: 500,
height: 500,
},
],
},
{
type: "banner",
name: "banner principal mobile 2",
contents: [
{
name: "banner principal mobile 2 content",
active: true,
type: "image",
file: "slide-principal-mobile.png",
width: 500,
height: 500,
},
],
},
],
},
//====================
// MOSAICO
//====================
{
id: "banner-01",
objects: [
{
type: "banner",
name: "banner 01",
contents: [
{
name: "banner 01 content",
active: true,
type: "image",
file: "banner-01.png",
width: 500,
height: 500,
},
],
},
],
},
{
id: "banner-02",
objects: [
{
type: "banner",
name: "banner 02",
contents: [
{
name: "banner 02 content",
active: true,
type: "image",
file: "banner-02.png",
width: 500,
height: 500,
},
],
},
],
},
{
id: "banner-03",
objects: [
{
type: "banner",
name: "banner 03",
contents: [
{
name: "banner 03 content",
active: true,
type: "image",
file: "banner-03.png",
width: 500,
height: 500,
},
],
},
],
},
{
id: "banner-04",
objects: [
{
type: "banner",
name: "banner 04",
contents: [
{
name: "banner 04 content",
active: true,
type: "image",
file: "banner-04.png",
width: 500,
height: 500,
},
],
},
],
},
{
id: "banner-05",
objects: [
{
type: "banner",
name: "banner 05",
contents: [
{
name: "banner 05 content",
active: true,
type: "image",
file: "banner-05.png",
width: 500,
height: 500,
},
],
},
],
},
{
id: "mobile-banner-05",
objects: [
{
type: "banner",
name: "banner 05 mobile",
contents: [
{
name: "banner 05 mobile content",
active: true,
type: "image",
file: "banner-05.png",
width: 500,
height: 500,
},
],
},
],
},
],
};

View File

@ -0,0 +1,42 @@
module.exports = {
contentPlaceHolders: [
{
// Registra o contentPlaceholder
id: "htmlSeo",
objects: [
// Registra os objetos vtex
{
type: "html",
name: "Html SEO",
contents: [],
},
],
},
{
id: "texto-institucional",
objects: [
{
type: "html",
name: "Conteudo institucional",
contents: [
{
name: "Potilica de privacidade",
active: true,
content: `
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Fusce feugiat lacus sapien, nec interdum ante sodales id. Vivamus eu mauris vel nibh pharetra aliquet. Donec nisl odio, feugiat sed laoreet non, venenatis in dolor. Nulla eget dolor nec mi congue volutpat. Maecenas non elementum dolor. Nam sollicitudin justo sed magna auctor, at condimentum quam aliquam. Ut luctus posuere quam, nec auctor orci sagittis at. Duis eget nibh sed lorem sollicitudin auctor cursus nec ipsum. In tempus ipsum libero, at ultricies lectus blandit sed. Cras in venenatis turpis. Praesent pellentesque augue nec iaculis mattis. Sed ante magna, vulputate sit amet pulvinar sed, iaculis ac massa. Nulla id turpis in enim aliquam auctor ut nec orci.
Phasellus sit amet commodo lacus, eu dapibus lectus. Maecenas vitae justo lacus. Cras ornare hendrerit dictum. Sed quis iaculis lacus. Nunc egestas ipsum eget risus pulvinar sagittis. Nullam quis porttitor massa, a congue quam. Pellentesque ac mollis est. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos. Integer tincidunt, turpis quis pretium vehicula, leo erat lobortis velit, sed finibus nulla nunc sed lorem. Maecenas tellus nisi, tincidunt sed dolor vitae, accumsan euismod nisl. Cras dignissim placerat dapibus. Donec varius, sapien quis hendrerit dictum, lorem urna vestibulum eros, tempor aliquet ligula massa vel dui.
In et rutrum erat. Duis dapibus, ligula eu luctus aliquet, nisi neque dapibus nisl, id laoreet nunc libero vitae augue. Integer vehicula ligula non risus vehicula, in venenatis nulla pulvinar. Nulla convallis elit sit amet massa euismod, quis cursus elit suscipit. Pellentesque semper dui sit amet ex efficitur tristique. Donec vitae porttitor augue, eget viverra ipsum. Sed volutpat, orci non hendrerit tempus, nisi nisl suscipit libero, at ultrices purus elit a massa. Nullam imperdiet blandit nunc, nec scelerisque libero gravida ac. Vestibulum ante velit, sodales blandit vehicula sed, ullamcorper eget dui. Fusce tempus ipsum sed lobortis pharetra. Interdum et malesuada fames ac ante ipsum primis in faucibus.
Aenean at tempus arcu. Donec porta tempor nunc, id sollicitudin lectus egestas eu. Nullam posuere sollicitudin lectus sit amet suscipit. Curabitur quis urna quam. Ut sollicitudin dui sit amet risus rutrum convallis laoreet in tellus. Pellentesque porttitor nec velit a tempus. Cras quam massa, efficitur iaculis iaculis in, varius eget lorem.
Duis ac egestas velit. Vivamus accumsan, metus vitae luctus iaculis, nisi ante mollis ipsum, non commodo augue orci nec dui. Cras dignissim venenatis viverra. Curabitur vitae ex turpis. Nullam pellentesque convallis enim, id accumsan velit laoreet nec. Quisque eget felis in turpis rhoncus maximus. In nec vehicula tortor. Maecenas consequat gravida dapibus.
`,
},
],
},
],
},
],
};

57
meta/pages/product.js Normal file
View File

@ -0,0 +1,57 @@
module.exports = {
contentPlaceHolders: [
{
// Registra o contentPlaceholder
id: "htmlSeo",
objects: [
// Registra os objetos vtex
{
type: "html",
name: "Html SEO",
contents: [],
},
],
},
{
id: "prateleira-padrao",
objects: [
{
type: "Produtos Relacionados",
name: "prateleira",
properties: {
layout: "prateleira-padrao",
type: "QuemViuViuTambem",
"number-of-columns": 12,
"number-of-items": 12,
},
},
],
},
// EXEMPLO DE PRATELEIRA COMUM
// {
// id: "prateleira-padrao",
// objects: [
// {
// type: "colecao",
// name: "prateleira",
// properties: {
// layout: "prateleira-padrao",
// "number-of-columns": 12,
// "number-of-items": 12,
// "show-unavailable": false,
// //sim random está escrito errado e é culpa da vtex
// ramdom: false,
// paged: false,
// },
// contents: [
// {
// name: "praleira",
// active: true,
// clusterId: 158,
// },
// ],
// },
// ],
// },
],
};

32004
package-lock.json generated Normal file

File diff suppressed because it is too large Load Diff

89
package.json Normal file
View File

@ -0,0 +1,89 @@
{
"author": "Agência M3",
"name": "tema-template",
"shopName": "template",
"description": "Tema Vtex para loja Vtex",
"version": "1.0.0",
"main": "index.js",
"scripts": {
"test": "echo \"Error: no test specified\" && exit 1",
"local": "cross-env NODE_ENV=local gulp watch",
"local:fast": "cross-env NODE_ENV=localfast gulp watch",
"dev": "cross-env NODE_ENV=development gulp watch",
"dev:fast": "cross-env NODE_ENV=devfast gulp watch",
"prod": "cross-env NODE_ENV=production gulp build",
"format": "prettier --write \"src/arquivos/**/*.{js,jsx,scss}\"",
"preinstall": "npx npm-force-resolutions"
},
"license": "ISC",
"devDependencies": {
"@babel/core": "^7.15.0",
"@babel/preset-env": "^7.15.0",
"@babel/preset-react": "^7.14.5",
"babel-loader": "^8.2.2",
"chalk": "^4.1.2",
"connect-api-mocker": "^1.10.0",
"cross-env": "^7.0.3",
"del": "^6.0.0",
"eslint-plugin-prettier": "^3.4.1",
"filemanager-webpack-plugin": "^6.1.6",
"glob": "^7.1.7",
"gulp": "~4.0.2",
"gulp-autoprefixer": "^8.0.0",
"gulp-connect": "^5.7.0",
"gulp-if": "^3.0.0",
"gulp-imagemin": "^7.1.0",
"gulp-rename": "^2.0.0",
"gulp-sass": "^5.0.0",
"gulp-sourcemaps": "^3.0.0",
"husky": "^7.0.2",
"jquery": "~1.12.1",
"lorem-ipsum": "^2.0.3",
"node-gyp": "^8.2.0",
"prettier": "^2.3.2",
"sass": "^1.38.1",
"sprity": "^1.0.8",
"sprity-jimp": "0.0.1",
"terser-webpack-plugin": "^5.1.4",
"webpack": "^5.51.1",
"webpack-merge": "^5.8.0"
},
"dependencies": {
"@babel/plugin-transform-async-to-generator": "^7.14.5",
"@sucrase/webpack-loader": "^2.0.0",
"body-scroll-lock": "^3.1.5",
"bootstrap": "^4.5.3",
"eslint": "^7.32.0",
"gulp-inline-source": "^4.0.0",
"lazysizes": "^5.3.2",
"lint-staged": "^11.1.2",
"m3-utils": "^0.1.0",
"proxy-polyfill": "^0.3.2",
"regenerator-runtime": "^0.13.9",
"slick-carousel": "~1.8.1",
"sucrase": "^3.20.1"
},
"lint-staged": {
"*.{js,jsx,scss}": [
"./node_modules/.bin/prettier --write \"src/arquivos/**/*.{js,jsx,scss}\"",
"git add"
]
},
"husky": {
"hooks": {
"pre-commit": "lint-staged"
}
},
"browserslist": [
"defaults"
],
"babel": {
"presets": [
"@babel/env",
"@babel/react"
]
},
"resolutions": {
"graceful-fs": "4.2.3"
}
}

View File

View File

View File

@ -0,0 +1,3 @@
<svg width="22" height="22" viewBox="0 0 22 22" fill="none" xmlns="http://www.w3.org/2000/svg">
<path d="M20.9486 19.6289L15.2021 13.8823C16.2841 12.5158 16.9334 10.7914 16.9334 8.9167C16.9334 4.49622 13.3371 0.9 8.91666 0.9C4.49618 0.9 0.9 4.49622 0.9 8.9167C0.9 13.3372 4.49622 16.9334 8.9167 16.9334C10.7914 16.9334 12.5158 16.2841 13.8823 15.2021L19.6289 20.9487L19.6289 20.9487C19.8307 21.1504 20.1577 21.1504 20.3596 20.9487L20.3596 20.9487L20.9487 20.3595L20.878 20.2888L20.9487 20.3595C21.1504 20.1577 21.1504 19.8306 20.9486 19.6289ZM8.9167 15.0667C5.52547 15.0667 2.76668 12.3079 2.76668 8.9167C2.76668 5.52547 5.52547 2.76668 8.9167 2.76668C12.3079 2.76668 15.0667 5.52547 15.0667 8.9167C15.0667 12.3079 12.3079 15.0667 8.9167 15.0667Z" fill="black" stroke="black" stroke-width="0.2"/>
</svg>

After

Width:  |  Height:  |  Size: 804 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 15 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 376 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 162 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 170 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 143 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 480 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 58 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 18 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 15 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 16 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 20 KiB

BIN
src/arquivos/img/logo.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 12 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 172 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 110 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 26 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 81 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 120 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 434 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 14 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.8 KiB

View File

View File

@ -0,0 +1,17 @@
export default class CatalogService {
async getSkusData(skus) {
const skusPromises = skus.map(this.getSkuData);
const responses = await Promise.all(skusPromises);
return await Promise.all(responses.map((r) => r.json()));
}
getSkuData(sku) {
const urlSku = "/produto/sku/" + sku;
return fetch(urlSku, {
method: "GET",
});
}
}

View File

@ -0,0 +1,8 @@
export default class CrossSellingService {
async getSimilar() {
let productId = window.skuJson.productId;
let url = `/api/catalog_system/pub/products/crossselling/similars/${productId}`;
let promiseSimilar = await (await fetch(url)).json();
return promiseSimilar;
}
}

View File

@ -0,0 +1,73 @@
import { Container } from "m3-utils";
import config from "Config/index";
import Erro from "./pages/Erro";
import Home from "./pages/Home";
import Categoria from "./pages/Categoria";
import Produto from "./pages/Produto";
import Institucional from "./pages/Institucional";
import Newsletter from "./components/Newsletter";
import Minicart from "./components/Minicart";
import BottomNav from "./components/BottomNav";
import FixedHeader from "./components/FixedHeader";
import AutoComplete from "./components/AutoComplete";
import ScrollToTop from "./components/ScrollToTop";
import Menu from "./partials/Menu";
import Promocao from "./partials/Promocao";
import MenuContents from "./partials/MenuContents";
import Login from "./partials/Login";
import Prateleira from "./components/Prateleira/Prateleira";
import PrateleiraService from "./components/Prateleira/PrateleiraService";
const app = new Container({
appName: "template",
config,
components: [
Menu,
Promocao,
Minicart,
MenuContents,
Login,
Newsletter,
BottomNav,
FixedHeader,
ScrollToTop,
AutoComplete,
Prateleira,
],
services: [PrateleiraService],
pages: [
{
pageRefs: ["home"],
components: [Home],
},
{
pageRefs: ["categoria"],
components: [Categoria],
},
{
pageRefs: ["produto"],
components: [Produto],
},
{
pageRefs: ["erro"],
components: [Erro],
},
{
pageRefs: ["institucional"],
components: [Institucional],
},
],
});
app.bind(Minicart.name, ".carrinho .mini-cart");
app.bind(Newsletter.name, {
elemento: ".news-form",
textButtom: "Cadastre-se",
});
export default app;

View File

@ -0,0 +1,13 @@
export default class AutoComplete {
constructor() {
this.fixAutoComplete();
}
fixAutoComplete() {
$(".fulltext-search-box").on("autocompleteopen", () => {
$(".ui-autocomplete.ui-menu").addClass("autocompleteopen");
});
$(".selector").on("autocompleteclose", () => {
$(".ui-autocomplete.ui-menu").removeClass("autocompleteopen");
});
}
}

View File

@ -0,0 +1,46 @@
import { isSmallerThen768 } from "Helpers/MediasMatch";
export default class BottomNav {
constructor() {
if (isSmallerThen768) {
this.selectors();
this.events();
}
}
selectors() {
this.mobileOptions = $(".mobile-bottom-options");
this.window = $(window);
}
events() {
this.window.scroll(this.handleScroll.bind(this));
$(".mobile-bottom-options .show-search button").on("click", () => {
this.moveToTop();
this.focusOnSearch();
});
}
handleScroll() {
const offset = 200;
if (this.window.scrollTop() > offset) {
this.mobileOptions.addClass("active");
} else {
this.mobileOptions.removeClass("active");
}
}
moveToTop() {
$("html, body").animate(
{
scrollTop: 0,
},
500
);
}
focusOnSearch() {
$(".busca-mobile .fulltext-search-box").focus();
}
}

View File

@ -0,0 +1,123 @@
export default class CrossSelling {
constructor(idProduct, elemento = ".product-info .similares") {
this._elemento = elemento;
this._idProduct = idProduct;
this._url = {
similars: "/api/catalog_system/pub/products/crossselling/similars/",
suggestions:
"/api/catalog_system/pub/products/crossselling/suggestions/",
accessories:
"/api/catalog_system/pub/products/crossselling/accessories/",
};
}
similars(title = "") {
try {
this._loadProduct("similars").done(
(products, textStatus, jqXHR) => {
this._desenhar(products, "similars", title);
}
);
} catch (error) {
console.warn(error);
}
}
suggestions(title = "") {
try {
this._loadProduct("suggestions").done(
(products, textStatus, jqXHR) => {
this._desenhar(products, "suggestions", title);
}
);
} catch (error) {
console.warn(error);
}
}
accessories(title = "") {
try {
this._loadProduct("accessories").done(
(products, textStatus, jqXHR) => {
this._desenhar(products, "accessories", title);
}
);
} catch (error) {
console.warn(error);
}
}
_loadProduct(type = "similars") {
if (this._url.hasOwnProperty(type)) {
return $.ajax({
url: `${this._url[type]}/${this._idProduct}`,
type: "GET",
});
}
throw "Type erro on load cors selling";
}
_desenhar(products, type, title = "") {
if (products.length > 0) {
products = this._cleanProducts(products);
let _html = `<div class="cross-selling ${type.toLowerCase()}">
<div class="titulo">${title}</div>
<ul class="lista">
${products
.map((item, i) => {
let imgTag =
products[i].items[0].images[0].imageTag;
imgTag = imgTag
.replace(/#width#/gi, "90")
.replace(/#height#/gi, "90")
.replace("~", "");
return `<li class="item ${
item.productId == this._idProduct
? "selected"
: ""
}">
<a href="${item.link}" title="${item.productName}">${imgTag}</a>
</li>`;
})
.join("")}
</ul>
</div>`;
// insere no DOM
let $products = $(_html);
$(this._elemento).append($products);
// Ativa slide
$products.find("ul").slick({
dots: false,
autoplay: true,
autoplaySpeed: 3000,
arrows: false,
infinite: true,
slidesToShow: 4,
slidesToScroll: 4,
speed: 500,
variableWidth: true,
});
}
}
_cleanProducts(products) {
let cleanProducts = [];
let usedIds = [];
// cria lista sem repetiçaõ de produtos
for (let i = 0; i < products.length; i++) {
const item = products[i];
if (usedIds.indexOf(item.productId) < 0) {
cleanProducts.push({ ...item });
usedIds.push(item.productId);
}
}
try {
return cleanProducts.sort((a, b) => a.productName <= b.productName);
} catch (error) {
return cleanProducts;
}
}
}

View File

@ -0,0 +1,45 @@
import { isSmallerThen768 } from "Helpers/MediasMatch";
export default class FixedHeader {
constructor() {
if (!isSmallerThen768) {
this.fixedHeader();
}
}
fixedHeader() {
var lastScroll = 0;
var timer, scrollTop, headerHeight;
var element = $("header.header");
$(document).scroll(function (e) {
headerHeight = element.height();
scrollTop = $(document).scrollTop();
if (scrollTop > 1) {
$("body").css("padding-top", headerHeight);
element.addClass("fixed");
if (timer) {
window.clearTimeout(timer);
}
timer = window.setTimeout(function () {
if (
scrollTop > lastScroll &&
scrollTop > element.height() + 20
) {
element.addClass("fixed-hide");
} else {
element.removeClass("fixed-hide");
}
lastScroll = $(document).scrollTop();
}, 50);
} else {
element.removeClass("fixed");
$("body").css("padding-top", 0);
}
});
}
}

View File

@ -0,0 +1,61 @@
class InstagramGallery {
constructor({ gallery, account, limit }) {
this.options = {
gallery: $(gallery),
account,
limit,
};
this.getPosts().then((data) => {
this.buildGallery(data);
});
}
async getPosts() {
const url = `https://www.instagram.com/${this.options.account}/?__a=1`;
let data;
let status;
try {
data = await (await fetch(url)).json();
status = "success";
} catch (error) {
data = { message: "Ocorreu um erro ao carregar as imagens." };
status = "error";
}
return { data, status };
}
buildGallery({ data, status }) {
if (status === "success") {
const posts = data.graphql.user.edge_owner_to_timeline_media.edges;
for (let i = 0; i < this.options.limit; i++) {
if (!posts[i]) break;
const post = posts[i].node;
const caption = post.edge_media_to_caption.edges[0]?.node.text;
const galleryItem = `
<a
class="instagramGallery__photo"
href="https://www.instagram.com/p/${post.shortcode}"
title="${caption || ""}"
target="_blank"
style="background-image: url(${post.thumbnail_src})"
>
`;
this.options.gallery.append(galleryItem);
}
} else {
this.options.gallery.append(
`<p class="instagramGallery__error">${data.message}</p>`
);
}
}
}
export default InstagramGallery;

View File

@ -0,0 +1,297 @@
import { alterarTamanhoImagemSrcVtex } from "Helpers/vtexUtils";
import { removeFromCartM3GtmEvent } from "Helpers/gtmCustomEvents";
export default class Minicart {
createMiniCartStructure(element) {
const structure = `
<div class="mini-cart-container">
<div class="mini-cart-header">
<i class="sprite sprite-cadeado"></i>
<span>
COMPRA 100% SEGURA
</span>
<button class="btn-close" aria-label="fechar carrinho">
fechar
</button>
</div>
<div class="mini-cart-main">
<div class="wait-screen"></div>
<ul class="product-list"></ul>
</div>
<div class="mini-cart-footer">
<div class="totals-container">
<div class="qtd-items">
Total de <span class="value">0</span> itens
</div>
<div class="total">
Subtotal: <strong>R$<span class="value">00,00</span></strong>
</div>
</div>
<button class="continue-buying" aria-label="Continuar comprando">
Continuar comprando
</button>
<a class="finish-order" href="/checkout/#cart">
Finalizar compra
</a>
</div>
</div>
<div class="mini-cart-overlay"></div>
`;
$(element).html(structure);
}
listItems() {
let orderItems = (items) => {
$(".mini-cart-container .product-list").empty();
for (var i = 0; i < items.length; i++) {
var price = parseFloat(items[i].price / 100).toFixed(2);
price = "R$ " + price.replace(".", ",");
if (items[i].sellingPrice == 0) {
price = "Grátis";
}
var orderItem = `
<li id="${i + "-" + items[i].uniqueId}" class="product">
<div class="product-image">
<a href="${items[i].detailUrl}" title="${items[i].name}">
<img src="${alterarTamanhoImagemSrcVtex(items[i].imageUrl, 85, 100)}" alt="${
items[i].name
}">
</a>
</div>
<div class="product-options">
<div class="product-info">
<div class="name">${items[i].name}</div>
<div class="product-price">${price}</div>
<div class="product-qtd">
<button class="remove-from-cart" aria-label="Remover um item">-</button>
<span class="value">${items[i].quantity}</span>
<button class="add-to-cart" aria-label="Adicionar um item">+</button>
</div>
</div>
<div class="product-remove">
<button class="remove" aria-label="Remover produto">Remover</button>
</div>
</div>
</li>
`;
$(".mini-cart-container .product-list").append(orderItem);
}
this.addOneToCart();
this.removeOneFromCart();
this.removeFromCart();
this.updateCartTotals();
};
let emptyMessage = () => {
$(".mini-cart-container .product-list").empty();
let emptyMesssage = `
<li class="empty-message">
<strong>
Sua sacola está vazia
</strong>
<p>
Para continuar comprando, navegue pelas categorias do site ou faça uma busca pelo seu produto.
</p>
</li>
`;
$(".mini-cart-container .product-list").append(emptyMesssage);
this.updateCartTotals();
};
try {
var items = window.vtexjs.checkout.orderForm.items;
$(".mini-cart-container").removeClass("have-item");
if (items.length > 0) {
orderItems(items);
$(".mini-cart-container").addClass("have-item");
} else {
emptyMessage();
}
} catch (e) {
emptyMessage();
console.warn("couldnt list items. " + e.message);
}
}
updateCartTotals() {
var totalQtd = 0;
var totalPrice = 0;
try {
var items = window.vtexjs.checkout.orderForm.items;
var valorSubtotalCompraEmCentavos = 0;
var valorDescontosEmCentavos = 0;
if (window.vtexjs.checkout.orderForm.totalizers.length > 0) {
valorSubtotalCompraEmCentavos =
window.vtexjs.checkout.orderForm.totalizers[0].value;
if (window.vtexjs.checkout.orderForm.totalizers[1]) {
if (
window.vtexjs.checkout.orderForm.totalizers[1].id ==
"Discounts"
) {
valorDescontosEmCentavos =
window.vtexjs.checkout.orderForm.totalizers[1]
.value;
}
}
}
totalPrice +=
(valorSubtotalCompraEmCentavos + valorDescontosEmCentavos) /
100;
totalPrice = parseFloat(totalPrice).toFixed(2);
if (isNaN(totalPrice)) {
totalPrice = " ";
} else {
totalPrice = totalPrice.replace(".", ",");
}
$(".mini-cart-container .product-list .product").each(function () {
var productId = $(this).attr("id");
for (var i = 0; i < items.length; i++) {
if (i + "-" + items[i].uniqueId == productId) {
var qtd = parseInt(items[i].quantity);
totalQtd += qtd;
$(this).find(".product-qtd .value").text(qtd);
break;
}
}
});
} catch (e) {
console.warn("couldnt update cart info. " + e.message);
}
$(".mini-cart-footer .total .value").text(totalPrice);
$(".mini-cart-footer .qtd-items .value").text(totalQtd);
}
updateOrderForm(productId, qtd) {
try {
window.vtexjs.checkout
.getOrderForm()
.then((orderForm) => {
$(".mini-cart-container .wait-screen").addClass("active");
for (var i = 0; i < orderForm.items.length; i++) {
if (
i + "-" + orderForm.items[i].uniqueId ==
productId
) {
var itemIndex = i;
}
}
var updateItem = {
index: itemIndex,
quantity: qtd,
};
return window.vtexjs.checkout.updateItems(
[updateItem],
null,
false
);
})
.done(function (orderForm) {
$(".mini-cart-container .wait-screen").removeClass(
"active"
);
})
.always(() => {
this.listItems();
});
} catch (e) {
console.warn("couldnt update order form. " + e.message);
}
}
addOneToCart() {
$(".mini-cart-container .add-to-cart").click((e) => {
var qtd = $(e.target).siblings(".value");
var productId = $(e.target).parents(".product").attr("id");
if ($.isNumeric(qtd.text())) {
var valueQtd = parseInt(qtd.text());
valueQtd += 1;
this.updateOrderForm(productId, valueQtd);
} else {
this.updateOrderForm(productId, 1);
}
});
}
removeOneFromCart() {
$(".mini-cart-container .remove-from-cart").click((e) => {
removeFromCartM3GtmEvent();
var qtd = $(e.target).siblings(".value");
var productId = $(e.target).parents(".product").attr("id");
if ($.isNumeric(qtd.text())) {
var valueQtd = parseInt(qtd.text());
if (valueQtd > 1) {
valueQtd -= 1;
this.updateOrderForm(productId, valueQtd);
}
} else {
this.updateOrderForm(productId, 1);
}
});
}
removeFromCart() {
$(".mini-cart-container .product-remove .remove").click((e) => {
var productId = $(e.target).parents(".product").attr("id");
this.updateOrderForm(productId, 0);
});
}
configureEvents(openBtn) {
var openMinicart = () => {
this.listItems();
$(".mini-cart-container").parent().toggleClass("show-mini-cart");
$(".mini-cart-overlay").toggleClass("active");
$(".mini-cart").parents("header").toggleClass("mini-cart-open");
};
var closeMinicart = function () {
$(".mini-cart-container").parent().removeClass("show-mini-cart");
$(".mini-cart-overlay").removeClass("active");
$(".mini-cart").parents("header").removeClass("mini-cart-open");
};
$(document).on("click", openBtn, function (e) {
event.preventDefault();
$(openBtn).toggleClass("active");
openMinicart();
});
$(document).on(
"click",
".mini-cart-container .btn-close, .mini-cart-container .continue-buying, .mini-cart-overlay",
function () {
closeMinicart();
$(openBtn).toggleClass("active");
}
);
}
constructor(ctx, element) {
try {
window.window.vtexjs.checkout.getOrderForm();
} catch (error) {
console.warn("vtexjs not found.");
}
this.createMiniCartStructure(element);
this.configureEvents(
"header .carrinho> a, .mobile-bottom-options .portal-totalizers-ref, .popup-add-cart .cart"
);
}
}

View File

@ -0,0 +1,16 @@
import "Lib/custom-newsletter-form";
export default class Newsletter {
constructor(ctx, { elemento, textButtom }) {
let $elemento =
typeof elemento !== "undefined" ? $(elemento) : $(".news-form");
textButtom =
typeof textButtom !== "undefined" ? textButtom : "Cadastre-se";
$elemento.CustomNewsletter({
shop: ctx.config.loja.accontuName,
acronymEntity: ctx.config.loja.entityNewsletter,
textButtom: textButtom,
});
}
}

Some files were not shown because too many files have changed in this diff Show More