From c6ee38af36eaf6116fbcc8d75599bb9cfcf68829 Mon Sep 17 00:00:00 2001 From: Fernando Date: Sun, 30 Aug 2020 23:04:23 -0300 Subject: [PATCH] =?UTF-8?q?Refatora=C3=A7=C3=A3o=20no=20parseBody=20e=20no?= =?UTF-8?q?=20TextBody?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- components/Article/Utils/parseBody.js | 154 +++--- components/Image/index.js | 4 +- index.js | 189 ++++--- mockup/article.json | 729 ++++++++++++++++++++++++++ stories/TextBody.stories.js | 23 + 5 files changed, 960 insertions(+), 139 deletions(-) create mode 100644 mockup/article.json create mode 100644 stories/TextBody.stories.js diff --git a/components/Article/Utils/parseBody.js b/components/Article/Utils/parseBody.js index 8abe3e7f5..293663e5d 100644 --- a/components/Article/Utils/parseBody.js +++ b/components/Article/Utils/parseBody.js @@ -3,106 +3,126 @@ import {find, filter, replace, map} from 'lodash'; const parseBody = (content) => { - const bodyItems = []; - const switchNode = ({attr, child, node, tag}) => { - - node === 'element' && tag !== 'a' && - map(child, (item) => switchNode(item)); - - const enabledTags = ['div', 'span', 'p', 'em', 'h2']; - const embedTags = ['facebook.com', 'youtube.com', 'twitter.com', 'instagram.com']; - - if(!tag || enabledTags.indexOf(tag) > -1) { - - let contentText = ''; + let bodyItems = [] + let tagItems = [] - map(child, (children) => { + const renderChildValue = (child) => child && child.length > 0 && child[0].text - // render h2, em and pure text - if(children.node === 'text' && tag === 'h2') { - contentText = `${contentText}${children.text}`; + const switchNode = (obj) => { + + const {attr, child, node, tag, text} = obj - } else if(children.node === 'text' && tag === 'em') { - contentText = `${contentText}${children.text}`; + if(tag === "p" || tag === "br") { + tagItems.push({"type": "p", "value": ""}) + } - } else if(children.node === 'text') { - contentText = `${contentText}${children.text}`; - } + if(tag === "span") {} - // render a - if(children.tag === 'a' && children.attr.class !== 'p-smartembed') { - - let text = children.child && children.child.length > 0 ? - children.child[0].text : - children.attr['aria-label']; + if(tag === "strong") { + tagItems.push({"type": "text", "value": `${renderChildValue(child)}`}) + return true + } - // check if is not an embed - let isEmbed = false; - if(text) { - map(embedTags, (tag) => { - if(text.indexOf(tag) > -1) { - isEmbed = true; - } - }); - } - if(!isEmbed) { - let attr = ''; - map(children.attr, (value, key) => { - attr = `${attr} ${key}=${value}`; - }); - contentText = `${contentText}${text}`; - } - } - }); + if(tag === "em") { + tagItems.push({"type": "text", "value": `${renderChildValue(child)}`}) + return true + } - // add paragraph - if(contentText && contentText !== '') { - bodyItems.push({type: 'Paragraph', value: contentText}); + if(node === "text") { + if(text && text != "") { + tagItems.push({"type": "text", "value": text}) } } - // render image - if(tag === 'img' && attr.src && attr.src.startsWith('/legacy/image')) - bodyItems.push({type: 'ImageLegacy', value: {'image-legacy': attr.src}}) - if(tag === 'a' && attr.class && attr.class === 'p-smartembed') { + const childImage = find(child, {tag: 'img'}); + if(childImage) { - let subtitle = childImage && childImage.attr && childImage.attr['alt'] && childImage.attr['alt'].toString(); - subtitle = replace(subtitle, new RegExp(',', 'g'), ' '); + let subtitle = + childImage && + childImage.attr && + childImage.attr['alt'] ? + childImage.attr['alt'].toString() : `` + + subtitle = subtitle && subtitle !== undefined && subtitle !== "undefined" ? subtitle : `Reprodução` + const propsImage = { 'image-contentId': attr['data-onecms-id'].replace('policy:', ''), 'image-subtitle': subtitle, 'image-byline': '' - }; - bodyItems.push({type: 'Image', value: propsImage}); + } + tagItems.push({type: 'Image', value: propsImage}) + return true; } - } - // render embed - if(tag === 'a' && attr.href && !attr.class && attr.href !== '') { + // embeds + } else if(tag === 'img' && attr && attr.src && attr.src.startsWith('/legacy/image')) { + // let source = attr.src.startsWith('/legacy/image') + // if(source) { + tagItems.push({type: 'ImageLegacy', value: {'image-legacy': attr.src}}) + return true + // } + } else if(tag === 'a' && attr.href && !attr.class && attr.href !== '') { if(attr['href'].indexOf('facebook.com') > -1) { - bodyItems.push({type: 'Facebook', value: attr['href']}); + tagItems.push({type: 'Facebook', value: attr['href']}); + return true } else if(attr['href'].indexOf('instagram.com') > -1) { - bodyItems.push({type: 'Instagram', value: attr['href']}); + tagItems.push({type: 'Instagram', value: attr['href']}); + return true } else if(attr['href'].indexOf('twitter.com') > -1) { - bodyItems.push({type: 'Tweet', value: attr['href']}); + tagItems.push({type: 'Tweet', value: attr['href']}); + return true } else if(attr['href'].indexOf('youtube.com') > -1) { - bodyItems.push({type: 'Youtube', value: attr['href']}); + tagItems.push({type: 'Youtube', value: attr['href']}); + return true + + } else { + let child_string = renderChildValue(child) || attr.href + tagItems.push({"type": "text", "value": `${child_string}`}) + return true } } - }; - + + let child_len = child && child.length + if(child && child_len > 0) { + map(child, (item, key) => { + switchNode(item) + }) + } + } // convert html const parsed = html2json(content); const elements = filter(parsed.child, ({node: 'element'})); - // parse elements map(elements, (item) => switchNode(item)); - + + let p_text = "" + + map(tagItems, ({type, value}) => { + switch(type) { + case "p": + // insert if exist and clean + if(p_text && p_text !== "") { + bodyItems.push({type: 'Paragraph', value: p_text}); + p_text = "" + } + break; + case "text": + p_text = `${p_text}${value}` + break; + default: + bodyItems.push({type, value}); + break; + } + }) + if(p_text && p_text !== "") { + bodyItems.push({type: 'Paragraph', value: p_text}); + p_text = "" + } return bodyItems; }; export default parseBody; \ No newline at end of file diff --git a/components/Image/index.js b/components/Image/index.js index 6ebadf435..04b01521e 100644 --- a/components/Image/index.js +++ b/components/Image/index.js @@ -25,8 +25,8 @@ const Image = ({content, custom, domain, lazy, placeholder}) => { } const byline = !content['image-byline'] || content['image-byline'] == "undefined" ? null : content['image-byline'] const caption_byline = content['image-subtitle'] ? - `${content['image-subtitle']}${byline && ` (${byline})`}`: - `${content['image-subtitle-original']}${byline && ` (${byline})`}` + `${content['image-subtitle']}${byline ? ` (${byline})` : ``}`: + `${content['image-subtitle-original']}${byline ? ` (${byline})` : ``}` return ( diff --git a/index.js b/index.js index bf38e2c5d..9a6683a9c 100644 --- a/index.js +++ b/index.js @@ -487,7 +487,7 @@ var Image$1 = function Image(_ref) { } var byline = !content['image-byline'] || content['image-byline'] == "undefined" ? null : content['image-byline']; - var caption_byline = content['image-subtitle'] ? "".concat(content['image-subtitle']).concat(byline && " (".concat(byline, ")")) : "".concat(content['image-subtitle-original']).concat(byline && " (".concat(byline, ")")); + var caption_byline = content['image-subtitle'] ? "".concat(content['image-subtitle']).concat(byline ? " (".concat(byline, ")") : "") : "".concat(content['image-subtitle-original']).concat(byline ? " (".concat(byline, ")") : ""); return /*#__PURE__*/React__default.createElement(Block, { custom: "image-box ".concat(custom), w: "100p" @@ -1081,114 +1081,124 @@ Paragraph.defaultProps = { var parseBody = function parseBody(content) { var bodyItems = []; + var tagItems = []; - var switchNode = function switchNode(_ref) { - var attr = _ref.attr, - child = _ref.child, - node = _ref.node, - tag = _ref.tag; - node === 'element' && tag !== 'a' && lodash.map(child, function (item) { - return switchNode(item); - }); - var enabledTags = ['div', 'span', 'p', 'em', 'h2']; - var embedTags = ['facebook.com', 'youtube.com', 'twitter.com', 'instagram.com']; - - if (!tag || enabledTags.indexOf(tag) > -1) { - var contentText = ''; - lodash.map(child, function (children) { - // render h2, em and pure text - if (children.node === 'text' && tag === 'h2') { - contentText = "".concat(contentText, "").concat(children.text, ""); - } else if (children.node === 'text' && tag === 'em') { - contentText = "".concat(contentText, "").concat(children.text, ""); - } else if (children.node === 'text') { - contentText = "".concat(contentText).concat(children.text); - } // render a - - - if (children.tag === 'a' && children.attr["class"] !== 'p-smartembed') { - var text = children.child && children.child.length > 0 ? children.child[0].text : children.attr['aria-label']; // check if is not an embed - - var isEmbed = false; - - if (text) { - lodash.map(embedTags, function (tag) { - if (text.indexOf(tag) > -1) { - isEmbed = true; - } - }); - } - - if (!isEmbed) { - var _attr = ''; - lodash.map(children.attr, function (value, key) { - _attr = "".concat(_attr, " ").concat(key, "=").concat(value); - }); - contentText = "".concat(contentText, "").concat(text, ""); - } - } - }); // add paragraph + var renderChildValue = function renderChildValue(child) { + return child && child.length > 0 && child[0].text; + }; - if (contentText && contentText !== '') { - bodyItems.push({ - type: 'Paragraph', - value: contentText + var switchNode = function switchNode(obj) { + var attr = obj.attr, + child = obj.child, + node = obj.node, + tag = obj.tag, + text = obj.text; + + if (tag === "p" || tag === "br") { + tagItems.push({ + "type": "p", + "value": "" + }); + } + + if (tag === "strong") { + tagItems.push({ + "type": "text", + "value": "".concat(renderChildValue(child), "") + }); + return true; + } + + if (tag === "em") { + tagItems.push({ + "type": "text", + "value": "".concat(renderChildValue(child), "") + }); + return true; + } + + if (node === "text") { + if (text && text != "") { + tagItems.push({ + "type": "text", + "value": text }); } } // render image - if (tag === 'img' && attr.src && attr.src.startsWith('/legacy/image')) bodyItems.push({ - type: 'ImageLegacy', - value: { - 'image-legacy': attr.src - } - }); - if (tag === 'a' && attr["class"] && attr["class"] === 'p-smartembed') { var childImage = lodash.find(child, { tag: 'img' }); if (childImage) { - var subtitle = childImage && childImage.attr && childImage.attr['alt'] && childImage.attr['alt'].toString(); - subtitle = lodash.replace(subtitle, new RegExp(',', 'g'), ' '); + var subtitle = childImage && childImage.attr && childImage.attr['alt'] ? childImage.attr['alt'].toString() : ""; + subtitle = subtitle && subtitle !== undefined && subtitle !== "undefined" ? subtitle : "Reprodu\xE7\xE3o"; var propsImage = { 'image-contentId': attr['data-onecms-id'].replace('policy:', ''), 'image-subtitle': subtitle, 'image-byline': '' }; - bodyItems.push({ + tagItems.push({ type: 'Image', value: propsImage }); - } - } // render embed - - - if (tag === 'a' && attr.href && !attr["class"] && attr.href !== '') { + return true; + } // embeds + + } else if (tag === 'img' && attr && attr.src && attr.src.startsWith('/legacy/image')) { + // let source = attr.src.startsWith('/legacy/image') + // if(source) { + tagItems.push({ + type: 'ImageLegacy', + value: { + 'image-legacy': attr.src + } + }); + return true; // } + } else if (tag === 'a' && attr.href && !attr["class"] && attr.href !== '') { if (attr['href'].indexOf('facebook.com') > -1) { - bodyItems.push({ + tagItems.push({ type: 'Facebook', value: attr['href'] }); + return true; } else if (attr['href'].indexOf('instagram.com') > -1) { - bodyItems.push({ + tagItems.push({ type: 'Instagram', value: attr['href'] }); + return true; } else if (attr['href'].indexOf('twitter.com') > -1) { - bodyItems.push({ + tagItems.push({ type: 'Tweet', value: attr['href'] }); + return true; } else if (attr['href'].indexOf('youtube.com') > -1) { - bodyItems.push({ + tagItems.push({ type: 'Youtube', value: attr['href'] }); + return true; + } else { + var child_string = renderChildValue(child) || attr.href; + tagItems.push({ + "type": "text", + "value": "").concat(child_string, "") + }); + return true; } } + + var child_len = child && child.length; + + if (child && child_len > 0) { + lodash.map(child, function (item, key) { + switchNode(item); + }); + } }; // convert html @@ -1200,6 +1210,45 @@ var parseBody = function parseBody(content) { lodash.map(elements, function (item) { return switchNode(item); }); + var p_text = ""; + lodash.map(tagItems, function (_ref) { + var type = _ref.type, + value = _ref.value; + + switch (type) { + case "p": + // insert if exist and clean + if (p_text && p_text !== "") { + bodyItems.push({ + type: 'Paragraph', + value: p_text + }); + p_text = ""; + } + + break; + + case "text": + p_text = "".concat(p_text).concat(value); + break; + + default: + bodyItems.push({ + type: type, + value: value + }); + break; + } + }); + + if (p_text && p_text !== "") { + bodyItems.push({ + type: 'Paragraph', + value: p_text + }); + p_text = ""; + } + return bodyItems; }; diff --git a/mockup/article.json b/mockup/article.json new file mode 100644 index 000000000..44ebbdab1 --- /dev/null +++ b/mockup/article.json @@ -0,0 +1,729 @@ +{ + "plugin-externalid": "br.com.atex.plugins.pagelayout", + "input-template": "p.siteengine.Page", + "path": "/colunas/colunalotosuper", + "parentpage-name": "Costa Norte", + "department-name": "Coluna Lotosuper", + "parentpage-contentid": "ç", + "department-contentid": "2.668", + "parentpage-path": "/", + "path-after-page": true, + "page-template": "articlePagelayout", + "page-ads": [ + ], + "page-ads-header": [ + { + "contentId": "1.104846", + "input-template": "br.com.atex.plugins.ads-blocks.it", + "gpt-mobile-code": "div-gpt-ad-1598272517142-0", + "gpt-mobile-name": "\/21663112404\/CostaNorte_BlocoBanner6Video_Home_Mobile_320x170", + "gpt-mobile-size": "[320, 170]", + "gpt-mobile-status": "true", + "gpt-desktop-code": "div-gpt-ad-1598272340938-0", + "gpt-desktop-name": "\/21663112404\/CostaNorte_BlocoBanner6Video_Home_Desktop_730x140", + "gpt-desktop-size": "[730, 140]", + "gpt-desktop-status": "true", + "items": [] + } + ], + "page-ads-popup": [ + ], + "page-content": { + "contentId": "1.105319", + "path": "/colunas/colunalotosuper/loterias-de-sexta-feira-podem-pagar-r-7-4-milh%C3%B5es-saiba-como-apostar-1.105319", + "title": "Loterias de sexta-feira podem pagar R$ 7,4 milhões; saiba como apostar", + "template": "articlePagelayout", + "subtitle": "Veja todas as informações do Lotosuper sobre os concursos do dia\r\n", + "subject": "Loterias", + "keymetas": "Sexta-feira é dia de sorteio da Lotomania, Quina e Lotofácil. Saiba como apostar nos concursos de hoje!", + "keywords": "Quina; Lotomania; Lotofácil", + "author": "LotoSuper", + "images": { + "image-byline": "Sorte Online", + "image-contentId": "1.105320.1598627789", + "image-subtitle": "", + "image-subtitle-original": "Volantes da Quina, Lotofácil e Lotomania" + }, + "metadata": [ + "Quina", + "Lotomania", + "Lotofácil", + "Loterias" + ], + "time-created": "2020-08-28 12:17:19", + "time-modified": "2020-08-28 12:37:11", + "time-published": "2020-08-28 12:17:19", + "text": "

A Lotomania, Quina e Lotofácil prometem agitar a noite desta sexta-feira (28) com muitos prêmios, afinal, juntas, as loterias podem pagar cerca de R$ 7,4 milhões<\/span><\/p>

Titulo intertitulo
O destaque do dia é a Lotomania<\/span> que após cinco concursos consecutivos sem ganhadores em sua primeira faixa de prêmios pode pagar incríveis R$ 5,2 milhões. Além disso, os concursos da <\/span>Quina e Lotofácil também são ótimas opções para quem deseja tentar a sorte nes sexta-feira. As extrações vão acontecer no Espaço Loterias Caixa, localizado no Terminal Rodoviário Tietê em São Paulo (SP), a partir das 20h (horário de Brasília). Neste caso, para confirmar sua presença nos concursos, é preciso ficar atento ao horário e realizar todos os seus jogos até às 15h.<\/p>\r\n\r\n

Confira mais informações sobre os concursos separadas pelo <\/span>portal Lotosuper<\/a> antes realizar suas apostas! <\/p>\r\n\r\n

Lotomania <\/strong><\/p>\r\n\r\n

O sistema de abastecimento de água na Baixada Santista, operado pela Sabesp, funciona por meio de captações diretas de rios provenientes da Serra do Mar, em meio à Mata Atlântica. O líquido é captado, tratado e direcionado a um centro de reservação, para depois seguir pelas redes de distribuição até os imóveis.<\/p>

\"Imagem<\/p>

Em Bertioga, a Sabesp possui seis pontos de captação de água nos seguintes mananciais: ribeirão das Furnas, Córrego Pelaes ou Fazenda, rio Itapanhaú, rio Itaguaré, ribeirão Pedra Branca, rio Guaratuba.  A vazão total dos sistemas produtores é, em média, de 542 litros por segundo. O líquido coletado e tratado segue para nove reservatórios.<\/p>

\"Imagem<\/p>

Para acompanhar o crescente número de habitantes, que chegou a ser de 40%, entre 2009 e 2018, segundo levantamento da Cetesb, a Sabesp prepara-se para garantir maior disponibilidade de água tratada no município, como a implantação de um novo reservatório com capacidade para cinco milhões de litros de água, no bairro Jardim Mogiano.<\/p>

De acordo com a estatal, estima-se contratar as obras ainda no primeiro semestre deste ano, para iniciar a operação ao fim do segundo semestre. Para os próximos anos, está previsto ampliar mais um centro de reservação para 1,3 milhão de litros, além da ampliação da vazão de três sistemas produtores de água, o que inclui a implantação de uma nova captação no ribeirão Pedra Branca.<\/p>

\"Imagem<\/p>

O superintendente da Sabesp na Baixada Santista Raul Christiano lembra que Bertioga tem uma das maiores bacias hidrográficas da Região Metropolitana da Baixada Santista, e ressalta que a Sabesp entende sua responsabilidade de tratar um dos mais importantes recursos naturais existentes. “A empresa segue diretrizes estabelecidas para a gestão ambiental, desenvolvendo soluções que contribuam para um desenvolvimento sustentável. A exemplo disso, nos últimos anos, vêm sendo construídos novos reservatórios de água tratada na cidade como forma de aumentar a disponibilidade hídrica do sistema de abastecimento, preservando os mananciais. E, com a contratualização junto ao município, os investimentos previstos garantirão um salto extraordinário nos índices de saneamento, caminhando para a universalização dos serviços.” Segundo a estatal, estão planejados investimentos, para os próximos 30 anos, que giram em torno de R$ 417,5 milhões.<\/p>

No município, segundo a Sabesp, a cobertura das redes de distribuição de água atende a 99% da área regular, com população urbana do município. Mas, o índice cai para 87% se consideradas as ocupações irregulares, nas quais  a empresa é impedida por lei de prestar serviços.<\/p>

Para cobrir esta lacuna, a Sabesp informou que existe um trabalho em conjunto com a administração municipal, para programar as obras de expansão dos sistemas de saneamento conforme planejamento da prefeitura para os locais em processo de regularização fundiária.<\/p>

Além das captações de água da Sabesp, os rios de Bertioga servem a outros captadores, de acordo com o Departamento de Águas e Energia Elétrica do Estado de São Paulo (DAEE), responsável pelas concessões. <\/p>

Veja quais rios servem às principais outorgas (autorização) para captação superficial no município:<\/p>

Sesc Bertioga:  córrego Guaxanduva;<\/p>

Companhia Fazenda Acaraú\/Riviera de São Lourenço: afluente do rio Itaguaré e rio Itapanhaú;<\/p>

Associação de Condomínios do Loteamento Morada da Praia: Ribeirão da Fornalha;<\/p>

Associação Condominial Parque Caiubura:  afluente do canal de Bertioga;<\/p>

Reserva São Lourenço:  rio Vermelho;<\/p>

Associação de Amigos de Guaratuba: Ribeirão dos Monos;<\/p>

Companhia Docas do Estado de São Paulo: ribeirão Tachinhas (afluente do rio Itatinga).  <\/p>

Reserva domiciliar<\/p>

Para garantia de abastecer sua residência, o proprietário deve ter instalações hidráulicas internas preparadas para atender ao número de ocupantes – como caixas d’água dimensionadas para manter por 24 horas o consumo na residência independentemente do sistema público –, conforme determina a Associação Brasileira de Normas Técnicas.<\/p>

A Lei Municipal nº 316\/98, que instituiu o Código de Obras e Edificações, determina que as caixas d’água devem ter capacidade de reserva para três dias de consumo. Em síntese, cada pessoa precisa ter a disponibilidade de 200 litros\/dia.<\/p>

Água de boa qualidade<\/p>

O diagnóstico de qualidade ambiental das águas doces superficiais do estado de São Paulo resulta de uma rede básica de monitoramento da Companhia Ambiental do Estado de São Paulo (Cetesb), iniciada em 1974. Em Bertioga são três pontos de monitoramento: no rio Itapanhaú (na captação de Bertioga e na marina do Forte) e no rio Itaguaré (na ponte da rodovia Rio\/Santos).<\/p>

O resultado médio do Índice de Qualidade da Água (IQA), que indica o lançamento de efluentes sanitários para o corpo d’água, indica que a qualidade da água é boa - IQA entre 51 e 79) nestes rios -, não evidenciando pressão antrópica. Mas a Cetesb ressalta  “a importância em investimentos pelo município na coleta e tratamento de esgotos para a manutenção da qualidade da água”.<\/p>", + "video-url": "", + "multimidia-type": "fileGallery", + "multimidia-items": [ + ] + }, + "page-blocks": [ + ], + "site-blocks": [ + { + "contentId": "1.3770", + "input-template": "br.com.atex.plugins.ads-blocks.it", + "name": "DestaqueBanner_Home", + "title": "", + "template": "template-adsblock", + "contentId": "1.3770", + "input-template": "br.com.atex.plugins.ads-blocks.it", + "gpt-mobile-code": "div-gpt-ad-1597344191430-0", + "gpt-mobile-name": "\/21663112404\/DestaqueBanner_Home_Mobile_CostaNorte_300x250", + "gpt-mobile-size": "[300, 250]", + "gpt-mobile-status": "true", + "gpt-desktop-code": "div-gpt-ad-1597346099744-0", + "gpt-desktop-name": "\/21663112404\/DestaqueBanner_Home_Desktop_CostaNorte_1190x250", + "gpt-desktop-size": "[970, 250]", + "gpt-desktop-status": "true", + "items": [] + }, + { + "contentId": "1.1942", + "input-template": "br.com.atex.plugins.blocks.it", + "name": "Destaque TOPO", + "title": "", + "template": "template-featured", + "items": [ + { + "contentId": "7.560", + "inputTemplate": "com.atex.plugins.teaser.Teaser", + "image": { + "image-byline": "Reprodução\/Tamoios", + "image-contentId": "1.105510.1598824991", + "image-subtitle": "", + "image-subtitle-original": "" + }, + "name": "Rodovia dos Tamoios permanece com trânsito intenso sentido São José dos Campos", + "path": "/estradas/rodovias-dos-tamoios/rodovia-dos-tamoios-permanece-com-tr%C3%A2nsito-intenso-sentido-s%C3%A3o-jos%C3%A9-dos-campos-1.105509", + "subject": "TAMOIOS", + "subtitle": "De acordo com a Concessionária Tamoios, o trajeto está sem acidentes", + "time-published": "2020-08-30 19:03:44", + "time-modifiedDate": "2020-08-30 19:03:44" + }, + { + "contentId": "7.559", + "inputTemplate": "com.atex.plugins.teaser.Teaser", + "image": { + "image-byline": "Reprodução\/DER", + "image-contentId": "1.105512.1598825763", + "image-subtitle": "", + "image-subtitle-original": "" + }, + "name": "Rio-Santos tem tráfego intenso com pontos de congestionamento na noite deste domingo", + "path": "/estradas/rodovia-rio-santos/rio-santos-tem-tr%C3%A1fego-intenso-com-pontos-de-congestionamento-na-noite-deste-domingo-1.105511", + "subject": "RIO-SANTOS", + "subtitle": "É preciso ter atenção durante a viagem, pois, o tempo está encoberto com visibilidade reduzida ", + "time-published": "2020-08-30 19:16:40", + "time-modifiedDate": "2020-08-30 19:16:40" + }, + { + "contentId": "7.558", + "inputTemplate": "com.atex.plugins.teaser.Teaser", + "image": { + "image-byline": "DER-SP", + "image-contentId": "1.105505.1598823948", + "image-subtitle": "", + "image-subtitle-original": "" + }, + "name": "Mogi-Bertioga sentido Mogi tem lentidão", + "path": "/estradas/mogi-bertioga-sentido-mogi-tem-lentid%C3%A3o-1.105504", + "subject": "TRÂNSITO AGORA", + "subtitle": "Há pontos de congestionamento na rodovia. Visibilidade está reduzida, afirma DER-SP", + "time-published": "2020-08-30 18:43:12", + "time-modifiedDate": "2020-08-30 19:03:55" + } + ] + }, + { + "contentId": "1.3771", + "input-template": "br.com.atex.plugins.ads-blocks.it", + "name": "BlocoBanner1 Home", + "title": "", + "template": "template-adsblock", + "contentId": "1.3771", + "input-template": "br.com.atex.plugins.ads-blocks.it", + "gpt-mobile-code": "div-gpt-ad-1597344363801-0", + "gpt-mobile-name": "\/21663112404\/BlocoBanner1_Home_Mobile_CostaNorte_300x250", + "gpt-mobile-size": "[300, 250]", + "gpt-mobile-status": "true", + "gpt-desktop-code": "div-gpt-ad-1597346244792-0", + "gpt-desktop-name": "\/21663112404\/BlocoBanner_Home_Desktop_CostaNorte_1190x250", + "gpt-desktop-size": "[970, 250]", + "gpt-desktop-status": "true", + "items": [] + }, + { + "contentId": "1.3776", + "input-template": "br.com.atex.plugins.blocks.it", + "name": "Destaque (50/50)", + "title": "", + "template": "template-newsgrid", + "items": [ + { + "contentId": "7.511", + "inputTemplate": "com.atex.plugins.teaser.Teaser", + "image": { + "image-byline": "Acervo\/INTS", + "image-contentId": "1.105367.1598643189", + "image-subtitle": "", + "image-subtitle-original": "" + }, + "name": " Revista traz mais transparência e visibilidade às ações do INTS", + "path": "/publieditorial/ints/revista-traz-mais-transpar%C3%AAncia-e-visibilidade-%C3%A0s-a%C3%A7%C3%B5es-do-ints-1.105365", + "subject": "Lançamento", + "subtitle": "Distribuição é gratuita a cada quatro meses, em todas as unidades geridas pelo INTS, a exemplo do Hospital Municipal de Bertioga", + "time-published": "2020-08-28 16:30:56", + "time-modifiedDate": "2020-08-28 16:32:43" + }, + { + "contentId": "7.542", + "inputTemplate": "com.atex.plugins.teaser.Teaser", + "image": { + "image-byline": "Reprodução\/Instagram", + "image-contentId": "1.105439.1598729811", + "image-subtitle": "", + "image-subtitle-original": "" + }, + "name": "Chadwick Boseman, astro de \"Pantera Negra\", morre aos 43 anos", + "path": "/geral/chadwick-boseman-astro-de-pantera-negra-morre-aos-43-anos-1.105438", + "subject": "LUTO", + "subtitle": "O ator lutava contra um câncer de cólon há quatro anos", + "time-published": "2020-08-29 16:35:33", + "time-modifiedDate": "2020-08-29 21:02:07" + } + ] + }, + { + "contentId": "1.3773", + "input-template": "br.com.atex.plugins.ads-blocks.it", + "name": "BlocoBanner2 Home", + "title": "", + "template": "template-adsblock", + "contentId": "1.3773", + "input-template": "br.com.atex.plugins.ads-blocks.it", + "gpt-mobile-code": "div-gpt-ad-1597346552329-0", + "gpt-mobile-name": "\/21663112404\/CostaNorte_BlocoBanner2_Home_Mobile_300x250", + "gpt-mobile-size": "[300, 250]", + "gpt-mobile-status": "true", + "gpt-desktop-code": "div-gpt-ad-1597346468540-0", + "gpt-desktop-name": "\/21663112404\/CostaNorte_BlocoBanner2_Home_Desktop_1190x250", + "gpt-desktop-size": "[970, 250]", + "gpt-desktop-status": "true", + "items": [] + }, + { + "contentId": "1.1974", + "input-template": "br.com.atex.plugins.blocks.it", + "name": "Assuntos", + "title": "", + "template": "template-subjects", + "items-left": [ + { + "contentId": "7.188", + "inputTemplate": "com.atex.plugins.teaser.Teaser", + "image": { + "image-byline": "", + "image-contentId": "1.2396.1598234034", + "image-subtitle": "", + "image-subtitle-original": "" + }, + "name": "“Crise é causada pela pandemia, não pelo isolamento”, diz Meirelles", + "path": "/nacional/crise-%C3%A9-causada-pela-pandemia-n%C3%A3o-pelo-isolamento-diz-meirelles-1.623", + "subject": "CRISE POLÍTICA", + "subtitle": "Para ele, quarentena rígida leva a recuperação econômica mais veloz", + "time-published": "2020-05-08 18:03:39", + "time-modifiedDate": "2020-08-23 22:53:54" + }, + { + "contentId": "7.186", + "inputTemplate": "com.atex.plugins.teaser.Teaser", + "image": { + "image-byline": "", + "image-contentId": "1.2391.1598234030", + "image-subtitle": "", + "image-subtitle-original": "" + }, + "name": "Governo publica MP que abre crédito para empresas de turismo", + "path": "/nacional/governo-publica-mp-que-abre-cr%C3%A9dito-para-empresas-de-turismo-1.618", + "subject": "MEDIDA PROVISÓRIA", + "subtitle": "Ao todo, serão disponibilizados R$ 5 bilhões via Fungetur", + "time-published": "2020-05-08 17:23:39", + "time-modifiedDate": "2020-08-23 22:53:50" + }, + { + "contentId": "7.293", + "inputTemplate": "com.atex.plugins.teaser.Teaser", + "image": { + "image-byline": "Mayumi Kitamura", + "image-contentId": "1.52840.1598269064", + "image-subtitle": "", + "image-subtitle-original": "" + }, + "name": "Eleições 2020: onze partidos estão aptos para receber Fundo Eleitoral", + "path": "/politica/elei%C3%A7%C3%B5es-2020-onze-partidos-est%C3%A3o-aptos-para-receber-fundo-eleitoral-1.52600", + "subject": "TRIBUNAL SUPERIOR ELEITORAL", + "subtitle": "Um dos critérios de distribuição do fundo é a obrigação de aplicação mínima de 30% do total recebido para o custeio da campanha eleitoral das candidatas da coligação ou do partido", + "time-published": "2020-08-20 6:56:49", + "time-modifiedDate": "2020-08-24 8:37:44" + } + ], + "items-center": [ + { + "contentId": "7.295", + "inputTemplate": "com.atex.plugins.teaser.Teaser", + "image": { + "image-byline": "Divulgação", + "image-contentId": "1.53043.1598269034", + "image-subtitle": "", + "image-subtitle-original": "" + }, + "name": "Toninho Rodrigues é vítima de assalto no Indaiá", + "path": "/seguranca/toninho-rodrigues-%C3%A9-v%C3%ADtima-de-assalto-no-indai%C3%A1-1.53042", + "subject": "CRIME", + "subtitle": "Ex-vereador teve a residência invadida na manhã desta quarta-feira, 19", + "time-published": "2020-08-19 10:44:32", + "time-modifiedDate": "2020-08-24 8:37:14" + }, + { + "contentId": "7.296", + "inputTemplate": "com.atex.plugins.teaser.Teaser", + "image": { + "image-byline": "", + "image-contentId": "1.52866.1598269028", + "image-subtitle": "", + "image-subtitle-original": "" + }, + "name": "Aplicativo RG Digital já emitiu mais de 83 mil documentos", + "path": "/seguranca/aplicativo-rg-digital-j%C3%A1-emitiu-mais-de-83-mil-documentos-1.52865", + "subject": "RECONHECIMENTO FACIAL", + "subtitle": "A identidade virtual do cidadão pode ser baixada e armazenada em celular gratuitamente e com essa medida, 12 mil pessoas já saíram da fila de espera", + "time-published": "2020-08-19 8:57:05", + "time-modifiedDate": "2020-08-24 8:37:08" + } + ], + "items-right": [ + { + "contentId": "7.297", + "inputTemplate": "com.atex.plugins.teaser.Teaser", + "image": { + "image-byline": "Divulgação", + "image-contentId": "1.52772.1598269060", + "image-subtitle": "", + "image-subtitle-original": "O show comemora os 15 anos de sucesso da banda" + }, + "name": "México manifesta interesse em obter vacina russa contra covid-19", + "path": "/internacional/m%C3%A9xico-manifesta-interesse-em-obter-vacina-russa-contra-covid-19-1.52629", + "subject": "Internacional", + "subtitle": "O México informou à Rússia que está interessado em obter a vacina contra o novo coronavírus desenvolvida pelo ...", + "time-published": "2020-08-20 3:11:43", + "time-modifiedDate": "2020-08-24 8:37:40" + }, + { + "contentId": "7.299", + "inputTemplate": "com.atex.plugins.teaser.Teaser", + "image": { + "image-byline": "", + "image-contentId": "1.52759.1598269049", + "image-subtitle": "", + "image-subtitle-original": "" + }, + "name": "Furacão Genevieve aproxima-se de balneário mexicano", + "path": "/internacional/furac%C3%A3o-genevieve-aproxima-se-de-balne%C3%A1rio-mexicano-1.52758", + "subject": "Internacional", + "subtitle": "Com ventos contínuos de 185 km\/h e rajadas ainda mais fortes, o furacão Genevieve estava previsto para atingir ...", + "time-published": "2020-08-19 15:57:36", + "time-modifiedDate": "2020-08-24 8:37:29" + }, + { + "contentId": "7.298", + "inputTemplate": "com.atex.plugins.teaser.Teaser", + "image": { + "image-byline": "Divulgação", + "image-contentId": "1.52896.1598269019", + "image-subtitle": "", + "image-subtitle-original": "" + }, + "name": "Estudo liga covid-19 a aumento de diabetes tipo 1 em crianças", + "path": "/internacional/estudo-liga-covid-19-a-aumento-de-diabetes-tipo-1-em-crian%C3%A7as-1.52895", + "subject": "Internacional", + "subtitle": "Estudo publicado no periódico científico Diabetes Care, analisou dados de 30 crianças de hospitais de Londres diagnosticadas com diabetes tipo 1 durante o primeiro pico da pandemia", + "time-published": "2020-08-19 2:56:59", + "time-modifiedDate": "2020-08-24 8:36:59" + } + ], + "title-left": "POLÍTICA", + "title-center": "SEGURANÇA", + "title-right": "INTERNACIONAL", + "style-left": "yellow", + "style-center": "red", + "style-right": "green" + }, + { + "contentId": "1.3774", + "input-template": "br.com.atex.plugins.ads-blocks.it", + "name": "BlocoBanner3 Home", + "title": "", + "template": "template-adsblock", + "contentId": "1.3774", + "input-template": "br.com.atex.plugins.ads-blocks.it", + "gpt-mobile-code": "div-gpt-ad-1597347210872-0", + "gpt-mobile-name": "\/21663112404\/CostaNorte_BlocoBanner3_Home_Mobile_300x250", + "gpt-mobile-size": "[300, 250]", + "gpt-mobile-status": "true", + "gpt-desktop-code": "div-gpt-ad-1597347038960-0", + "gpt-desktop-name": "\/21663112404\/CostaNorte_BlocoBanner3_Home_Desktop_970x250", + "gpt-desktop-size": "[970, 250]", + "gpt-desktop-status": "true", + "items": [] + }, + { + "contentId": "1.105002", + "input-template": "br.com.atex.plugins.blocks.it", + "name": "Assuntos 2", + "title": "", + "template": "template-subjects", + "items-left": [ + { + "contentId": "7.347", + "inputTemplate": "com.atex.plugins.teaser.Teaser", + "image": { + "image-byline": "Marcelo Camargo\/Agência Brasil", + "image-contentId": "1.105001.1598441563", + "image-subtitle": "", + "image-subtitle-original": "" + }, + "name": "Em São Paulo, conflitos em condomínios se multiplicam na pandemia", + "path": "/geral/em-s%C3%A3o-paulo-conflitos-em-condom%C3%ADnios-se-multiplicam-na-pandemia-1.105000", + "subject": "Incômodo", + "subtitle": "Registros de queixas dobraram e até triplicaram em alguns prédios de acordo com a entidade que reúne empresas que administram cerca de 16 mil condomínios", + "time-published": "2020-08-26 8:31:40", + "time-modifiedDate": "2020-08-26 8:35:19" + }, + { + "contentId": "7.348", + "inputTemplate": "com.atex.plugins.teaser.Teaser", + "image": { + "image-byline": "Reprodução\/Facebook", + "image-contentId": "1.104947.1598380029", + "image-subtitle": "", + "image-subtitle-original": "" + }, + "name": "Ex-prefeito de Bertioga é internado com covid-19", + "path": "/geral/ex-prefeito-de-bertioga-%C3%A9-internado-com-covid-19-1.104944", + "subject": "EM TRATAMENTO", + "subtitle": "Doutor Lairton Goulart foi socorrido no dia 5 de agosto e está na Santa Casa de Santos", + "time-published": "2020-08-25 12:02:25", + "time-modifiedDate": "2020-08-25 12:04:59" + }, + { + "contentId": "7.349", + "inputTemplate": "com.atex.plugins.teaser.Teaser", + "image": { + "image-byline": "foto: Gazeta Regional \/ Laerton Santos", + "image-contentId": "1.104942.1598364182", + "image-subtitle": "", + "image-subtitle-original": "Após acordo entre os trabalhadores e a empresa, os 160 funcionários suspenderam a paralisação e aguardarão trabalhando o pagamento" + }, + "name": "Greve em Bertioga: após acordo, transporte público na cidade retorna à normalidade", + "path": "/geral/greve-em-bertioga-ap%C3%B3s-acordo-transporte-p%C3%BAblico-na-cidade-retorna-%C3%A0-normalidade-1.104941", + "subject": "PARALISAÇÃO NOS TRANSPORTES", + "subtitle": "Depois de uma semana de operação com frota reduzida, empresa se compromete a pagar salários atrasados e motoristas aceitam", + "time-published": "2020-08-25 11:02:12", + "time-modifiedDate": "2020-08-25 11:08:42" + } + ], + "items-center": [ + { + "contentId": "7.350", + "inputTemplate": "com.atex.plugins.teaser.Teaser", + "image": { + "image-byline": "Dimitris Vetsikas por Pixabay", + "image-contentId": "1.104844.1598271780", + "image-subtitle": "", + "image-subtitle-original": "" + }, + "name": "Proteção dos mares: ONU inicia esboço da década do oceano no Brasil", + "path": "/nacional/prote%C3%A7%C3%A3o-dos-mares-onu-inicia-esbo%C3%A7o-da-d%C3%A9cada-do-oceano-no-brasil-1.104841", + "subject": "SUSTENTABILIDADE", + "subtitle": "Organização começa a construção de plano para conscientizar a população sobre a importância dos oceanos e favorecer a saúde e a sustentabilidade dos mares", + "time-published": "2020-08-24 9:30:15", + "time-modifiedDate": "2020-08-24 9:37:44" + }, + { + "contentId": "7.351", + "inputTemplate": "com.atex.plugins.teaser.Teaser", + "image": { + "image-byline": "Reprodução \/ CNN", + "image-contentId": "1.52437.1598041768", + "image-subtitle": "", + "image-subtitle-original": "Bolsonaro discursando para apoiadores em Mossoró, RN" + }, + "name": "Bolsonaro, perguntado sobre auxílio emergencial, diz: “fica até dezembro, só não sei o valor", + "path": "/nacional/bolsonaro-perguntado-sobre-aux%C3%ADlio-emergencial-diz-fica-at%C3%A9-dezembro-s%C3%B3-n%C3%A3o-sei-o-valor-1.52435", + "subject": "BENEFÍCIO FINANCEIRO", + "subtitle": "O mandatário disse que benefício perdurará até o fim do ano, mas que valor de R$ 600 não está garantido", + "time-published": "2020-08-21 17:34:22", + "time-modifiedDate": "2020-08-26 8:50:17" + }, + { + "contentId": "7.353", + "inputTemplate": "com.atex.plugins.teaser.Teaser", + "image": { + "image-byline": "Divulgação", + "image-contentId": "1.28624.1598267916", + "image-subtitle": "", + "image-subtitle-original": "Procon constatou diversas irregularidades em embarcações e receptivo de embarque e desembarque" + }, + "name": "Manifestantes pró-Bolsonaro protestam contra governadores em Brasília", + "path": "/nacional/manifestantes-pr%C3%B3-bolsonaro-protestam-contra-governadores-em-bras%C3%ADlia-1.14205", + "subject": "Protestos", + "subtitle": "A Polícia Militar não tem divulgado levantamento sobre a quantidade de manifestantes", + "time-published": "2020-07-19 12:29:24", + "time-modifiedDate": "2020-08-26 8:51:30" + } + ], + "items-right": [ + { + "contentId": "7.354", + "inputTemplate": "com.atex.plugins.teaser.Teaser", + "image": { + "image-byline": "Reprodução\/Internet", + "image-contentId": "1.104956.1598369969", + "image-subtitle": "", + "image-subtitle-original": "" + }, + "name": "Aulas presenciais em Praia Grande retornam somente ano que vem", + "path": "/educacao/aulas-presenciais-em-praia-grande-retornam-somente-ano-que-vem-1.104955", + "subject": "Combate à pandemia", + "subtitle": "Secretaria de Educação optou por terminar este ano letivo através de conteúdos online por meio da plataforma desenvolvida pela própria Seduc", + "time-published": "2020-08-25 12:39:15", + "time-modifiedDate": "2020-08-27 17:56:58" + }, + { + "contentId": "7.355", + "inputTemplate": "com.atex.plugins.teaser.Teaser", + "image": { + "image-byline": "(Ney Evangelista \/ Brasil Ride", + "image-contentId": "1.52841.1598269063", + "image-subtitle": "", + "image-subtitle-original": "" + }, + "name": "Pesquisa em Marte: 45 anos do lançamento da sonda Viking", + "path": "/educacao/pesquisa-em-marte-45-anos-do-lan%C3%A7amento-da-sonda-viking-1.52601", + "subject": "Educação", + "subtitle": "O lançamento da sonda Viking 1, em 20 de agosto de 1975, há exatos 45 anos, marcou a primeira vez que um artefato ...", + "time-published": "2020-08-20 4:56:51", + "time-modifiedDate": "2020-08-24 8:37:43" + }, + { + "contentId": "7.356", + "inputTemplate": "com.atex.plugins.teaser.Teaser", + "image": { + "image-byline": "", + "image-contentId": "1.53328.1598268947", + "image-subtitle": "", + "image-subtitle-original": "" + }, + "name": "Curso com metodologia de Stanford acelera aprendizado de alunos", + "path": "/educacao/curso-com-metodologia-de-stanford-acelera-aprendizado-de-alunos-1.53327", + "subject": "Educação", + "subtitle": "Alunos do 5º ano do ensino fundamental de duas escolas municipais de Cotia (SP) experimentaram em janeiro de 2020 fazer um curso ...", + "time-published": "2020-08-15 16:56:41", + "time-modifiedDate": "2020-08-24 8:35:47" + } + ], + "title-left": "GERAL", + "title-center": "NACIONAL", + "title-right": "EDUCAÇÃO", + "style-left": "blue", + "style-center": "black", + "style-right": "yellow" + }, + { + "contentId": "1.3775", + "input-template": "br.com.atex.plugins.ads-blocks.it", + "name": "BlocoBanner4 Home", + "title": "", + "template": "template-adsblock", + "contentId": "1.3775", + "input-template": "br.com.atex.plugins.ads-blocks.it", + "gpt-mobile-code": "div-gpt-ad-1597348129919-0", + "gpt-mobile-name": "\/21663112404\/CostaNorte_BlocoBanner4_Home_Mobile_300x250", + "gpt-mobile-size": "[300, 250]", + "gpt-mobile-status": "true", + "gpt-desktop-code": "div-gpt-ad-1597347949171-0", + "gpt-desktop-name": "\/21663112404\/CostaNorte_BlocoBanner4_Home_Desktop_970x250", + "gpt-desktop-size": "[970, 250]", + "gpt-desktop-status": "true", + "items": [] + } + ], + "page-footer": { + "footer-description": "O Sistema Costa Norte de Comunicação atua no litoral paulista há mais de vinte anos levando informação a toda a população com seriedade e imparcialidade", + "footer-copyright": "© 2020 Todos Os Direitos Reservados Ao Sistema Costa Norte Comunicação", + "footer-mail": "contato@costanorte.com.br" + }, + "page-header": { + "page-custom-class": "", + "page-color-class": "default", + "page-title-hide": "false", + "column-status": "true", + "column-name": "LotoSuper", + "column-desc": "Na Coluna LotoSuper você encontra dicas inteligentes sobre a participação em grupo dos sorteios, tendo assim maiores chances de faturar os prêmios.", + "column-image": { + "image-byline": "", + "image-contentId": "1.52040.1597754414", + "image-subtitle": "", + "image-subtitle-original": "" + } + }, + "page-list": [ + { + "contentId": "1.105319", + "input-template": "standard.Article", + "path": "/colunas/colunalotosuper/loterias-de-sexta-feira-podem-pagar-r-7-4-milh%C3%B5es-saiba-como-apostar-1.105319", + "name": "Loterias de sexta-feira podem pagar R$ 7,4 milhões; saiba como apostar", + "subject": "Loterias", + "time-published": "2020-08-28 12:17:19", + "image": { + "image-byline": "Sorte Online", + "image-contentId": "1.105320.1598627789", + "image-subtitle": "", + "image-subtitle-original": "Volantes da Quina, Lotofácil e Lotomania" + } + }, + { + "contentId": "1.52513", + "input-template": "standard.Article", + "path": "/colunas/colunalotosuper/lotof%C3%A1cil-quina-e-lotomania-sorteiam-r-10-3-milh%C3%B5es-nesta-sexta-1.52513", + "name": "Lotofácil, Quina e Lotomania sorteiam R$ 10,3 milhões nesta sexta", + "subject": "Loterias do dia", + "time-published": "2020-08-21 8:12:41", + "image": { + "image-byline": "", + "image-contentId": "1.52667.1598241066", + "image-subtitle": "", + "image-subtitle-original": "" + } + }, + { + "contentId": "1.53500", + "input-template": "standard.Article", + "path": "/colunas/colunalotosuper/loterias-de-sexta-feira-podem-pagar-cerca-de-r-8-7-milh%C3%B5es-confira-1.53500", + "name": "Loterias de sexta-feira podem pagar cerca de R$ 8,7 milhões; confira", + "subject": "Loterias do dia", + "time-published": "2020-08-14 9:25:22", + "image": { + "image-byline": "", + "image-contentId": "1.53501.1598268900", + "image-subtitle": "", + "image-subtitle-original": "" + } + }, + { + "contentId": "1.15768", + "input-template": "standard.Article", + "path": "/colunas/colunalotosuper/quina-e-lotof%C3%A1cil-agitam-sexta-feira-com-premia%C3%A7%C3%B5es-milion%C3%A1rias-veja-1.15768", + "name": "Quina e Lotofácil agitam sexta-feira com premiações milionárias. Veja", + "subject": "Loterias do dia", + "time-published": "2020-08-07 8:42:12", + "image": { + "image-byline": "", + "image-contentId": "1.30044.1598268669", + "image-subtitle": "", + "image-subtitle-original": "" + } + }, + { + "contentId": "1.14840", + "input-template": "standard.Article", + "path": "/colunas/colunalotosuper/concursos-da-lotof%C3%A1cil-e-quina-somam-r-5-milh%C3%B5es-nesta-segunda-feira-1.14840", + "name": "Concursos da Lotofácil e Quina somam R$ 5 milhões nesta segunda-feira", + "subject": "Loterias do dia", + "time-published": "2020-07-27 6:46:28", + "image": { + "image-byline": "", + "image-contentId": "1.30891.1598268217", + "image-subtitle": "", + "image-subtitle-original": "" + } + }, + { + "contentId": "1.14641", + "input-template": "standard.Article", + "path": "/colunas/colunalotosuper/loterias-de-sexta-feira-podem-pagar-cerca-de-r-14-8-milh%C3%B5es-confira-1.14641", + "name": "Loterias de sexta-feira podem pagar cerca de R$ 14,8 milhões; confira", + "subject": "Loterias do dia", + "time-published": "2020-07-24 9:49:42", + "image": { + "image-byline": "", + "image-contentId": "1.31010.1598239362", + "image-subtitle": "", + "image-subtitle-original": "" + } + }, + { + "contentId": "1.13769", + "input-template": "standard.Article", + "path": "/colunas/colunalotosuper/loterias-de-quarta-feira-podem-pagar-cerca-de-r-20-5-milh%C3%B5es-1.13769", + "name": "Loterias de quarta-feira podem pagar cerca de R$ 20,5 milhões", + "subject": "Loterias", + "time-published": "2020-07-15 6:29:15", + "image": { + "image-byline": "", + "image-contentId": "1.31719.1598238684", + "image-subtitle": "", + "image-subtitle-original": "" + } + }, + { + "contentId": "1.12348", + "input-template": "standard.Article", + "path": "/colunas/colunalotosuper/lotof%C3%A1cil-e-quina-abrem-a-semana-com-mais-de-r-3-milh%C3%B5es-em-pr%C3%AAmios-1.12348", + "name": "Lotofácil e Quina abrem a semana com mais de R$ 3 milhões em prêmios", + "subject": "Loterias do dia", + "time-published": "2020-06-29 8:07:59", + "image": { + "image-byline": "", + "image-contentId": "1.32888.1598237461", + "image-subtitle": "", + "image-subtitle-original": "" + } + }, + { + "contentId": "1.11048", + "input-template": "standard.Article", + "path": "/colunas/colunalotosuper/quina-e-lotof%C3%A1cil-sorteiam-pr%C3%AAmios-milion%C3%A1rios-nesta-segunda-feira-1.11048", + "name": "Quina e Lotofácil sorteiam prêmios milionários nesta segunda-feira", + "subject": "Quina e Lotofácil", + "time-published": "2020-06-15 9:02:27", + "image": { + "image-byline": "", + "image-contentId": "1.33833.1598266683", + "image-subtitle": "", + "image-subtitle-original": "" + } + }, + { + "contentId": "1.10235", + "input-template": "standard.Article", + "path": "/colunas/colunalotosuper/sorteio-da-mega-sena-tem-pr%C3%AAmio-de-r-2-5-milh%C3%B5es-para-s%C3%A1bado-1.10235", + "name": "Sorteio da Mega-Sena tem prêmio de R$ 2,5 milhões para sábado", + "subject": "Mega-Sena", + "time-published": "2020-06-05 7:30:06", + "image": { + "image-byline": "Cláudio Gomes - PMC", + "image-contentId": "1.38514.1598235591", + "image-subtitle": "", + "image-subtitle-original": "A nova Unidade de Pronto Atendimento era um antigo pedido da população da região" + } + } + ], + "page-search": { + "search-facets": "", + "search-query": "" + } +} \ No newline at end of file diff --git a/stories/TextBody.stories.js b/stories/TextBody.stories.js new file mode 100644 index 000000000..818848b4f --- /dev/null +++ b/stories/TextBody.stories.js @@ -0,0 +1,23 @@ +import React from 'react' +import {map} from 'lodash' +import {parseBody} from '../components/Article/Utils' +import Paragraph from '../components/Article/Paragraph' +import article from '../mockup/article.json' + +export default { + title: 'Components | TextBody', + component: Default +} + +export const Default = () => { + const content = article["page-content"]["text"] + const bodyItems = parseBody(content) + return map(bodyItems, ({type, value}, key) => { + switch(type) { + case 'Paragraph': + return + default: + return null + } + }) +} \ No newline at end of file