diff --git a/README.md b/README.md index f02d391..e2af10d 100644 --- a/README.md +++ b/README.md @@ -1,11 +1,18 @@ # Dialoga App -Start development: +Convenções: + +- Os *programas* são **topics**; +- Os *temas* são **categories**; +- Um *grupo de programas* é um **discussion** (um grupo de topics); +- As *propostas* são **proposals**; + + +Para iniciar o desenvolvimento: ```bash # dev with no proxy (local data) -gulp serve -json-server data.js -p 9000 -w data.js +gulp serve && json-server data.js -p 9000 -w data.js # dev with proxy to hom server gulp serve --target="http://hom.login.dialoga.gov.br" @@ -14,7 +21,7 @@ gulp serve --target="http://hom.login.dialoga.gov.br" gulp serve --target="http://login.dialoga.gov.br" ``` -# Project Decisions +##### Referências - [generator-gulp-angular](https://github.com/Swiip/generator-gulp-angular) - Angular diff --git a/data.js b/data.js index 989c4ee..89d3c9f 100644 --- a/data.js +++ b/data.js @@ -29,26 +29,22 @@ module.exports = function () { "id": 180, "slug": "saude", "image": null - }, - { + }, { "name": "Segurança Pública", "id": 182, "slug": "seguranca-publica", "image": null - }, - { + }, { "name": "Educação", "id": 181, "slug": "educacao", "image": null - }, - { + }, { "name": "Redução da Pobreza", "id": 183, "slug": "reducao-da-pobreza", "image": null - }, - { + }, { "name": "Cultura", "id": 194, "slug": "cultura", @@ -91,8 +87,7 @@ module.exports = function () { "allow_members_to_edit": false }, "position": 14 - }, - { + }, { "id": 103521, "abstract": "

Mais atendimento nos municípios, mais saúde para quem mais precisa.

", "title": "Mais Médicos", @@ -115,8 +110,7 @@ module.exports = function () { "allow_members_to_edit": false }, "position": 1 - }, - { + }, { "id": 103457, "abstract": "

Ação conjunta e cooperação transfronteiriça.

", "title": "Proteção das Fronteiras", @@ -139,8 +133,7 @@ module.exports = function () { "allow_members_to_edit": false }, "position": 15 - }, - { + }, { "id": 103612, "abstract": "

Garantir água para beber e produzir.

", "title": "Cisternas", @@ -163,8 +156,7 @@ module.exports = function () { "allow_members_to_edit": false }, "position": 20 - }, - { + }, { "id": 103442, "abstract": "

Complemento à renda e acompanhamento em educação e saúde.

", "title": "Bolsa Família", @@ -187,8 +179,7 @@ module.exports = function () { "allow_members_to_edit": false }, "position": 17 - }, - { + }, { "id": 103673, "abstract": "

A melhor escolha é se informar.

", "title": "Incentivo ao Parto Normal", @@ -211,8 +202,7 @@ module.exports = function () { "allow_members_to_edit": false }, "position": 6 - }, - { + }, { "id": 103397, "abstract": "

Renda, inclusão produtiva e acesso a serviços.

", "title": "Brasil Sem Miséria", @@ -235,8 +225,7 @@ module.exports = function () { "allow_members_to_edit": false }, "position": 18 - }, - { + }, { "id": 121505, "abstract": "

Um novo jeito de ver e de fazer cultura

", "title": "Agenda Seculo XXI", @@ -259,8 +248,7 @@ module.exports = function () { "author_name": "leonardo.merlin" }, "position": null - }, - { + }, { "id": 121526, "abstract": "

Cultura e arte como base para a educação integral

", "title": "Cultura e Educação", @@ -283,8 +271,7 @@ module.exports = function () { "author_name": "leonardo.merlin" }, "position": null - }, - { + }, { "id": 103485, "abstract": "

Caminho para uma educação de qualidade.

", "title": "Valorização dos Professores", @@ -307,8 +294,7 @@ module.exports = function () { "allow_members_to_edit": false }, "position": 11 - }, - { + }, { "id": 103663, "abstract": "

Mais educação profissional e tecnológica, mais desenvolvimento

", "title": "Ensino Técnico", @@ -331,8 +317,7 @@ module.exports = function () { "allow_members_to_edit": false }, "position": 10 - }, - { + }, { "id": 121514, "abstract": "

Reconhecimento, fortalecimento e mobilização das comunidades que fazem cultura no Brasil

", "title": "Cultura Viva", @@ -355,8 +340,7 @@ module.exports = function () { "author_name": "leonardo.merlin" }, "position": null - }, - { + }, { "id": 103592, "abstract": "

Garantir acesso à proteção social.

", "title": "Assistência Social", @@ -379,8 +363,7 @@ module.exports = function () { "allow_members_to_edit": false }, "position": 19 - }, - { + }, { "id": 103426, "abstract": "

Da saúde se cuida todos os dias.

", "title": "Vida saudável", @@ -403,8 +386,7 @@ module.exports = function () { "allow_members_to_edit": false }, "position": 7 - }, - { + }, { "id": 103507, "abstract": "

Tecnologia a serviço da segurança do cidadão.

", "title": "Sinesp", @@ -427,8 +409,7 @@ module.exports = function () { "allow_members_to_edit": false }, "position": 12 - }, - { + }, { "id": 103359, "abstract": "

Acesso a exames e consultas com especialistas.

", "title": "Mais Especialidades", @@ -451,8 +432,7 @@ module.exports = function () { "allow_members_to_edit": false }, "position": 2 - }, - { + }, { "id": 103683, "abstract": "

Saúde não tem preço.

", "title": "Aqui tem Farmácia Popular", @@ -475,8 +455,7 @@ module.exports = function () { "allow_members_to_edit": false }, "position": 5 - }, - { + }, { "id": 103695, "abstract": "

Novo modelo de atuação em Segurança Pública.

", "title": "Segurança Pública Integrada", @@ -499,8 +478,7 @@ module.exports = function () { "allow_members_to_edit": false }, "position": 13 - }, - { + }, { "id": 103379, "abstract": "

Resgate e atendimento 24 horas, sete dias da semana.

", "title": "SAMU 192 e UPAs", @@ -523,8 +501,7 @@ module.exports = function () { "allow_members_to_edit": false }, "position": 4 - }, - { + }, { "id": 103494, "abstract": "

Da Educação Infantil ao Ensino Médio.

", "title": "Educação Básica", @@ -547,8 +524,7 @@ module.exports = function () { "allow_members_to_edit": false }, "position": 8 - }, - { + }, { "id": 103644, "abstract": "

Um caminho de oportunidades com o Enem: Sisu, Prouni, Fies, Ciência sem Fronteiras

", "title": "Ensino Superior", @@ -571,8 +547,7 @@ module.exports = function () { "allow_members_to_edit": false }, "position": 9 - }, - { + }, { "id": 121499, "abstract": "

Valorização da arte e da cultura em suas múltiplas possibilidades

", "title": "Política Nacional das Artes", @@ -595,8 +570,7 @@ module.exports = function () { "author_name": "leonardo.merlin" }, "position": null - }, - { + }, { "id": 103472, "abstract": "

Polícia Federal, Polícia Rodoviária Federal e Força Nacional de Segurança Pública.

", "title": "Forças Federais de Segurança", @@ -619,8 +593,7 @@ module.exports = function () { "allow_members_to_edit": false }, "position": 16 - }, - { + }, { "id": 121492, "abstract": "

Apoio ao audiovisual brasileiro: ampliação da produção, da difusão e do acesso

", "title": "Brasil de Todas as Telas", @@ -643,8 +616,7 @@ module.exports = function () { "author_name": "leonardo.merlin" }, "position": null - }, - { + }, { "id": 121521, "abstract": "

Mais acesso a cultura para trabalhadores e trabalhadoras

", "title": "Vale-Cultura", @@ -667,8 +639,7 @@ module.exports = function () { "author_name": "leonardo.merlin" }, "position": null - }, - { + }, { "id": 103416, "abstract": "

Estrutura adequada para atender melhor a população na atenção básica.

", "title": "Melhorar os Postos de Saúde", @@ -691,8 +662,7 @@ module.exports = function () { "allow_members_to_edit": false }, "position": 3 - }, - { + }, { "id": 121501, "abstract": "

Preservação do patrimônio e qualidade de vida para os cidadãos

", "title": "PAC Cidades Históricas", @@ -734,5 +704,149 @@ module.exports = function () { "article":{"id":121521,"body":"\u003Cdiv class=\"col-xs-12\"\u003E\r\n\u003Cdiv class=\"row\"\u003E\r\n\u003Cdiv class=\"col-md-12\"\u003E\r\n\u003Ch2\u003EVale-Cultura\u003Csmall\u003EMais acesso \u00e0 cultura para trabalhadores e trabalhadoras\u003C/small\u003E\u003C/h2\u003E\r\n\u003C/div\u003E\r\n\u003C/div\u003E\r\n\u003Cdiv class=\"row\"\u003E\r\n\u003Cdiv class=\"col-md-12\"\u003E\r\n\u003Ch3\u003ELivros, shows e espet\u00e1culos para todos.\u003C/h3\u003E\r\n\u003C/div\u003E\r\n\u003C/div\u003E\r\n\u003Cdiv class=\"row\"\u003E\r\n\u003Cdiv class=\"col-md-6 col-sm-6 vcenter\"\u003E\u003Cimg class=\"img-responsive\" src=\"http://gestao.dialoga.gov.br/dialoga/dialoga-brasil/vale-cultura/imagens/vale-cultura1.jpg\" alt=\"\" /\u003E\u003C/div\u003E\r\n\u003Cdiv class=\"col-md-6 col-sm-6 vcenter\"\u003E\r\n\u003Cp\u003EO Vale-Cultura incentiva as empresas a oferecer aos seus funcion\u00e1rios acesso a livros, revistas, ingressos para cinemas, teatros, shows, instrumentos musicais e cursos de arte e cultura.\u003C/p\u003E\r\n\u003Cp\u003EO benef\u00edcio \u00e9 garantido por meio de um cart\u00e3o magn\u00e9tico pr\u00e9-pago, v\u00e1lido em todo os pa\u00eds. Mensalmente, esse cart\u00e3o recebe cr\u00e9dito de R$ 50, que pode ser acumulado para despesas maiores.\u003C/p\u003E\r\n\u003Cp\u003EA ades\u00e3o das empresas \u00e9 facultativa e os custos s\u00e3o livres de encargos sociais e trabalhistas. Aquelas que t\u00eam lucro real podem deduzir at\u00e9 1% do Imposto de Renda devido.\u003C/p\u003E\r\n\u003C/div\u003E\r\n\u003C/div\u003E\r\n\u003Cbr /\u003E\r\n\u003Cdiv class=\"row\"\u003E\r\n\u003Cdiv class=\"col-md-6 col-sm-6 vcenter\"\u003E\r\n\u003Cblockquote\u003E\r\n\u003Cp class=\"text-center\"\u003EEm pouco mais de um ano, o Vale-Cultura j\u00e1 mobiliza mais de R$140 milh\u00f5es e beneficia cerca de 420 mil trabalhadores e trabalhadoras.\u003C/p\u003E\r\n\u003C/blockquote\u003E\r\n\u003C/div\u003E\r\n\u003Cdiv class=\"col-md-6 col-sm-6 vcenter\"\u003E\r\n\u003Cdiv class=\"embed-responsive embed-responsive-16by9\"\u003E\u003Ciframe src=\"https://www.youtube.com/embed/KKmZh5T46g8?rel=0\" frameborder=\"0\" width=\"560\" height=\"315\"\u003E\u003C/iframe\u003E\u003C/div\u003E\r\n\u003C/div\u003E\r\n\u003C/div\u003E\r\n\u003Cdiv class=\"row\"\u003E\r\n\u003Cdiv class=\"col-md-12\"\u003E\r\n\u003Ch3\u003ECompromissos\u003C/h3\u003E\r\n\u003C/div\u003E\r\n\u003C/div\u003E\r\n\u003Cdiv class=\"row\"\u003E\r\n\u003Cdiv class=\"col-md-6 col-sm-6 vcenter\"\u003E\u003Cimg class=\"img-responsive\" src=\"http://gestao.dialoga.gov.br/dialoga/dialoga-brasil/vale-cultura/imagens/vale-cultura3.jpg\" alt=\"\" /\u003E\u003C/div\u003E\r\n\u003Cdiv class=\"col-md-6 col-sm-6 vcenter\"\u003E\r\n\u003Cul class=\"list-unstyled\"\u003E\r\n\u003Cli class=\"bullet\"\u003E\u003Cstrong\u003EAmpliar a ades\u00e3o de empresas e trabalhadores\u003C/strong\u003E\u003C/li\u003E\r\n\u003Cli class=\"bullet\"\u003E\u003Cstrong\u003EAmpliar a rede de estabelecimentos que recebem o Vale-Cultura.\u003C/strong\u003E\u003C/li\u003E\r\n\u003C/ul\u003E\r\n\u003C/div\u003E\r\n\u003C/div\u003E\r\n\u003C/div\u003E"} }); + + // Random topics / Programas aleatorios - 1 por tema + // path: /api/v1/dialoga_plugin/random_topics/103358 + // Like: http://hom.dialoga.gov.br/api/v1/dialoga_plugin/random_topics/103358 + // ?fields[]=id&fields[]=title&fields[]=slug&fields[]=abstract&fields[]=body&fields[]=categories&fields[]=setting&fields[]=ranking_position&fields[]=position&fields[]=children_count&fields[]=hits&fields[]=votes_for&fields[]=votes_against&fields[]=tag_list + data.dialoga_plugin = { + "articles": [ + { + "ranking_position": null, + "id": 116089, + "body": "
\r\n
\r\n
\r\n

Cultura e EducaçãoCultura e arte como base para a educação integral.

\r\n
\r\n
\r\n
\r\n
\"\"
\r\n
\r\n
\r\n
\r\n
\r\n

A aproximação entre cultura e educação é estratégica para o desenvolvimento cultural do país e para a qualificação da educação brasileira.

\r\n

 

\r\n

Mais Cultura nas Escolas promove ensino com criatividade

\r\n
\r\n
\r\n
\r\n
\r\n

É mais fácil aprender quando as abordagens pedagógicas são criativas e têm relação com a realidade cultural das crianças e jovens. Com o Mais Cultura nas Escolas, o ensino de crianças, adolescentes e jovens vincula-se às experiências culturais e artísticas das comunidades em que vivem.

\r\n
\r\n

São priorizadas as escolas que têm maior número de estudantes beneficiários do Bolsa Família

\r\n
\r\n\"Imagem
\r\n
\"Conexão
\"Programa
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n

União dos saberes científicos e populares

\r\n
\r\n
\r\n
\r\n
\"\"
\r\n
\r\n

O Programa Mais Cultura nas Universidades utiliza os campi e os institutos federais de ensino como centros irradiadores de produção artística e cultural para as comunidades. São realizadas ações de extensão, pesquisa e inovação em conjunto com grupos artísticos locais.

\r\n

Um total de 28 universidades e institutos federais foram apoiados diretamente pelo programa e outras 73 instituições federais já apresentaram planos de cultura.

\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n

Pronatec Cultura fomenta a economia e amplia a renda

\r\n
\r\n
\r\n
\r\n
\r\n

O Pronatec Cultura oferece qualificação profissional que fortalece as cadeias produtivas da cultura, promovendo a formalização do setor, inclusão profissional e aumento da renda.

\r\n

Está presente em 228 municípios de 19 estados brasileiros, com 7.702 pessoas formadas até o primeiro semestre de 2015.

\r\n
\r\n

São 65 cursos de formação como fotógrafo, vitrinista, iluminador cênico, sonoplasta, ilustrador e assistente de produção, ofertados pelos Institutos Federais, Sistema S e escolas profissionalizantes

\r\n
\r\n
\r\n
\"\"
\r\n
\r\n
", + "abstract": "

Cultura e arte como base para a educação integral

", + "title": "Cultura e Educação", + "categories": [ + { + "name": "Cultura", + "id": 194, + "slug": "cultura" + } + ], + "votes_for": 0, + "votes_against": 0, + "setting": { + "color": "", + "allow_members_to_edit": false, + "moderate_comments": false, + "comment_paragraph_plugin_activate": false, + "author_name": "Admin DEDES" + }, + "position": null, + "hits": 17, + "tag_list": [], + "children_count": 2, + "slug": "cultura-e-educacao" + }, { + "ranking_position": null, + "id": 103644, + "body": "
\r\n
\r\n
\r\n

Ensino SuperiorUm caminho de oportunidades com o Enem: Sisu, Prouni, Fies, Ciência sem Fronteiras

\r\n
\r\n
\r\n
\r\n
\r\n

Enem - Exame Nacional do Ensino Médio

\r\n
\r\n
\r\n
\r\n
\r\n

O Exame Nacional do Ensino Médio (Enem) abre portas para que todos os brasileiros trilhem, em igualdade de condições e de acordo com seus méritos como estudantes, um caminho de oportunidades por meio dos ensinos técnico e superior.

\r\n
\r\n

Cada vez mais estudantes realizam o Enem

\r\n

Na edição de 2014, o Enem teve quase 9 milhões de inscritos e se consolidou como o maior exame deste tipo no Brasil e o segundo maior no mundo.

\r\n
\r\n

Com o Enem, várias possibilidades se abrem para o estudante, de acordo com o seu desempenho nos exames.

\r\n
\r\n
\r\n
\"\"
\r\n
\r\n
\r\n
\r\n
\r\n
\"\"
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n

SISU - Sistema de Seleção Unificada

\r\n
\r\n
\r\n
\r\n
\r\n

Em outros tempos, o jovem que quisesse ingressar no ensino superior fazia inscrição no vestibular para um único curso de uma única universidade. Apenas estudantes com melhores condições financeiras podiam se inscrever em mais instituições e em diferentes locais do país.

\r\n

Hoje, com o SISU, a realidade é outra. O jovem, independentemente de sua condição social, usando a nota de um único exame – o Enem, feito em um único local e em uma mesma data, tem direito de disputar milhares de vagas, em vários cursos das melhores Instituições públicas e privadas de ensino superior, de todo o país.

\r\n

Durante o período de inscrição, o aluno pode acompanhar diariamente, pela internet, como está a procura pelos cursos do seu interesse, para alinhar suas escolhas e seus planos de estudo com a nota que obteve no Enem.

\r\n
\r\n
\r\n
\r\n
\"\"
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n

PROUNI: Universidade para Todos

\r\n
\r\n
\r\n
\r\n
\"\"
\r\n
\r\n

O Programa Universidade para Todos (Prouni) foi criado em 2004 para ampliar e democratizar o acesso de estudantes de baixa renda ao ensino superior no Brasil.

\r\n

O Prouni concede bolsas integrais e parciais de 50% em instituições privadas de ensino superior para estudantes que ainda não têm um diploma de nível superior. O programa já totaliza mais de 1,69 milhão de bolsas concedidas, desde a sua criação, em 2004.

\r\n

Para concorrer a uma das bolsas, o aluno tem que ter no mínimo 450 pontos no Enem, não ter tirado zero na redação, ter cursado todo o ensino médio em escola pública ou como bolsista integral em escola particular. A renda bruta da família também é considerada no acesso às bolsas: deve ser menor que 1 ½ salário mínimo por pessoa para bolsa integral e menor que 3 salários mínimos por pessoa para bolsa de 50%.

\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n

FIES: Fundo de Financiamento Estudantil para acesso ao ensino superior

\r\n
\r\n
\r\n
\r\n
\"\"
\r\n
\r\n

Com quase 2 milhões de contratos firmados e 1.770 instituições participantes, o Fies se tornou um importante instrumento para quem pretende ingressar em uma instituição privada de ensino superior.

\r\n

As adequações pelas quais o Fies está passando garantem a sua sustentabilidade, asseguram a qualidade dos cursos financiados e beneficiam diretamente o estudante que realmente precisa do financiamento. Nenhum estudante que participa do Fies deixará de receber o benefício e o governo vai zelar pelo bom funcionamento do programa.

\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n

SISUTEC: mais opções para crescer

\r\n
\r\n
\r\n
\r\n
\r\n

Criado em 2013, o Sistema de Seleção Unificada da Educação Profissional e Tecnológica é mais uma opção para o estudante que faz o Enem. O Sisutec faz parte do Programa Nacional de Acesso ao Ensino Técnico e Emprego (Pronatec) e oferece vagas gratuitas em cursos técnicos.

\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n

Ciência sem Fronteiras:
conhecimento avançado no exterior

\r\n
\r\n
\r\n
\r\n
\r\n

O Ciência sem Fronteiras proporciona aos estudantes brasileiros de graduação e de pós-graduação oportunidades de intercâmbio internacional, para estudar e pesquisar nas melhores universidades do mundo.

\r\n

Podem participar alunos de instituições públicas ou particulares de todo o país em áreas essenciais para o  desenvolvimento científico e tecnológico.

\r\n

Na primeira fase do programa, mais de 100 mil estudantes se beneficiaram dessa importante oportunidade. Em breve novos editais serão publicados, com a abertura de novas vagas.

\r\n
\r\n
\"\"
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n

Lei das Cotas

\r\n
\r\n
\r\n
\r\n
\r\n

Todas as universidades públicas federais e os institutos federais de tecnologia reservam uma parte das suas vagas para alunos que estudaram em escolas públicas. Desde 2012, as cotas estão sendo implantadas gradualmente, até atingir, em 2016, a metade das vagas existentes.

\r\n

Das vagas reservadas para egressos de escolas públicas, metade é destinada a estudantes de famílias com renda mensal de até um salario mínimo e meio.

\r\n

O preenchimento destas vagas também leva em conta critérios de cor ou raça de acordo com as estatísticas do IBGE para cada estado.

\r\n

Após dois anos da implantação de Lei das Cotas (Lei nº 12.711, de 29 de agosto de 2012), em 2014, todos os institutos federais atenderam ao percentual mínimo de 25%, previsto para aquele ano; 85% atingiram a meta de 2015; 78% já atingiram a meta prevista para 2016 - 50% das vagas.

\r\n

No caso das Universidades Federais, todas atenderam, em 2014, ao percentual mínimo previsto de 25%; 64% atingiram antecipadamente a meta de 2015; 56% atingiram, com antecedência, a meta prevista para 2016.

\r\n

Em 2014, nos institutos federais, 23% das vagas foram reservadas para pretos, pardos e indígenas e, nas Universidades Federais, foram 20%.

\r\n
\r\n
\"\"
\r\n
\r\n
", + "abstract": "

Um caminho de oportunidades com o Enem: Sisu, Prouni, Fies, Ciência sem Fronteiras

", + "title": "Ensino Superior", + "categories": [ + { + "name": "Educação", + "id": 181, + "slug": "educacao" + } + ], + "votes_for": 0, + "votes_against": 0, + "setting": { + "color": "#cfe2f3", + "moderate_comments": false, + "comment_paragraph_plugin_activate": false, + "author_name": "Ronald Emerson Scherolt da Costa", + "allow_members_to_edit": false + }, + "position": 9, + "hits": 54, + "tag_list": [], + "children_count": 7, + "slug": "ensino-superior" + }, { + "ranking_position": null, + "id": 103442, + "body": "
\r\n
\r\n
\r\n

Bolsa Família Complemento à renda e acompanhamento em educação e saúde.

\r\n
\r\n
\r\n
\r\n
\"\"
\r\n

\r\n

O Bolsa Família é um programa que complementa mensalmente a renda de 14 milhões de famílias pobres, garante que crianças e adolescentes permaneçam na escola e acompanha a saúde de crianças, de mulheres grávidas e daquelas que estão amamentando.

\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n

Educação no Bolsa Família

\r\n

Na educação, o Bolsa Família faz o acompanhamento mensal da frequência escolar de 17 milhões de crianças e adolescentes de famílias de baixa renda. Também ajuda a identificar dificuldades de acesso e de permanência dos estudantes na escola.

\r\n
\r\n
\"\"
\r\n
\r\n
\r\n
\r\n
\r\n
\"\"
\r\n
\r\n
\r\n
\r\n
\r\n
\"\"
\r\n
\r\n

Saúde no Bolsa Família

\r\n

Na saúde, o Programa monitora a vacinação, o peso e a altura das crianças com menos de 7 anos. Também faz o acompanhamento do pré-natal das gestantes e orienta as mulheres em fase de amamentação.

\r\n

Mais de 9 milhões de famílias são atendidas na área da saúde pelo Bolsa Família e os efeitos do acompanhamento são percebidos na vida das pessoas, na comprovada redução da mortalidade infantil e no crescimento saudável das crianças.

\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n

Redução de quase 1 cm do déficit de altura das crianças de 5 anos do Bolsa Família

\r\n\"\"
\r\n
 
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n

As crianças estão mais saudáveis e altas

\r\n

Com a redução da desnutrição crônica, o déficit de estatura entre as crianças do Bolsa Família diminui 51%, o equivalente a quase 1 centímetro. A queda foi verificada em pesquisa que acompanhou 360 mil crianças beneficiadas ao longo de cinco anos seguidos, em que foram medidas e pesadas.

\r\n

 

\r\n

Cadastro Único para acessar políticas públicas

\r\n
\r\n
\r\n

Para participar do Programa, a família faz um cadastro com informações sobre moradia, renda, escolaridade e condições de vida. Este é o Cadastro Único para Programas Sociais do Governo Federal, um mapa social que permite aos governos planejarem suas ações, a partir da identificação das necessidades básicas das famílias.

\r\n

A orientação e o encaminhamento das famílias são feitos pela rede de assistência social para que os beneficiários do Bolsa Família acessem também outros programas como o Pronatec, o Luz para Todos e o Minha Casa, Minha Vida.

\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n

Quem recebe o Bolsa Família

\r\n
\r\n
\r\n

Podem participar as famílias registradas no Cadastro Único, desde que:

\r\n
    \r\n
  • Com renda mensal, por pessoa, de até R$ 77, mesmo que não tenham gestantes, crianças ou adolescentes;
  • \r\n
  • Com renda mensal, por pessoa, de até R$ 154, que tenham gestantes, crianças ou adolescentes na família.
  • \r\n
\r\n

O valor repassado depende do tamanho da família, da idade dos seus membros e da sua renda. Há benefícios específicos para famílias com crianças, jovens até 17 anos, gestantes e mães que amamentam.

\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n

Você sabia?

\r\n
\r\n
\r\n
    \r\n
  • O valor médio pago aos beneficiários do Bolsa Família é de R$ 168,00 mensais.
  • \r\n
  • As famílias que participam do Programa têm, em média, 2 filhos.
  • \r\n
\r\n
\r\n
\r\n
\r\n

Em 11 anos, 3,1 milhões de famílias saíram voluntariamente do programa Bolsa Família.

\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\"\"
\r\n
\r\n

Trabalho no Bolsa Família

\r\n

Os beneficiários do Bolsa Família trabalham e trabalham muito.

\r\n

A participação dos adultos beneficiários no mercado de trabalho formal e informal é igual à dos demais brasileiros.

\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\"\"
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n

Controle e transparência

\r\n

O governo está atento para que o benefício só chegue a quem realmente precisa. Há um trabalho contínuo e rigoroso para garantir o controle e a transparência do Programa Bolsa Família e o registro de irregularidades é muito baixo.

\r\n
    \r\n
  • A lista dos beneficiários com o valor do benefício que recebem é mantida pública, no Portal da Transparência;
  • \r\n
  • Todos os beneficiários têm que atualizar o seu cadastro a cada dois anos;
  • \r\n
  • O governo realiza cruzamentos do Cadastro Único com outras bases de dados, rotineiramente.
  • \r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n

Acompanhe

\r\n

Todo cidadão tem o direito de saber como o governo utiliza os recursos públicos. Para o Bolsa Família, existe um canal direto e gratuito para que qualquer pessoa possa obter informações ou fazer sugestões, reclamações e denúncias: 0800 707 2003.

\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n

A renda do Bolsa Família fortalece a economia local e o desenvolvimento do País

\r\n
\r\n
\r\n

Com o Bolsa Família todos ganham. O programa beneficia diretamente mais de 50 milhões de pessoas pobres, mas seus resultados vão além do combate à pobreza.

\r\n

O dinheiro repassado para as famílias beneficiadas fica no município, circula na economia local e gera mais trabalho e renda para outras pessoas, contribuindo para o desenvolvimento do País.

\r\n
\r\n
\"\"
\r\n
\r\n
\r\n
\r\n

O Bolsa Família faz tanto pelo Brasil que todos os brasileiros acabam sendo beneficiados por ele, direta ou indiretamente, com a movimentação da economia e com a inclusão social..

\r\n
\r\n
\r\n
", + "abstract": "

Complemento à renda e acompanhamento em educação e saúde.

", + "title": "Bolsa Família", + "categories": [ + { + "name": "Redução da Pobreza", + "id": 183, + "slug": "reducao-da-pobreza" + } + ], + "votes_for": 0, + "votes_against": 0, + "setting": { + "color": "#ff9900", + "moderate_comments": false, + "comment_paragraph_plugin_activate": false, + "author_name": "Ronald Emerson Scherolt da Costa", + "allow_members_to_edit": false + }, + "position": 17, + "hits": 68, + "tag_list": [], + "children_count": 9, + "slug": "bolsa-familia" + }, { + "ranking_position": null, + "id": 103379, + "body": "
\r\n
\r\n
\r\n

SAMU 192 e UPAs Resgate e atendimento 24 horas, sete dias por semana.

\r\n
\r\n
\r\n
\r\n
\r\n

\"Ambulancha

\r\n

O SAMU 192 foi criado em 2003 e chega a 75% da população brasileira, garantindo socorro e transporte de emergência. São 3.300 ambulâncias (vans, motos, lanchas e helicópteros).

\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n

SAMU 192 já chega a 153,9 milhões de pessoas

\r\n

\"Em

\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n

UPA - Unidades de Pronto Atendimento

\r\n
\r\n
\r\n
\r\n
\"UPA
\r\n
\r\n

As Unidades de Pronto Atendimento podem resolver 90% das urgências e emergências de atendimento à saúde, como fraturas, problemas de pressão, derrames e infartos.

\r\n

As UPAs fazem parte de uma rede de atendimento, complementando as emergências dos hospitais e a internação domiciliar. Assim, as UPAs ajudam a diminuir a demanda sobre os pronto-socorros dos hospitais, que devem receber e atender rapidamente os casos mais graves e que exigem imediata internação.

\r\n
\r\n

Há 400 UPAs em funcionamento no Brasil.

\r\n
\r\n

Os serviços de atendimento para urgências e emergências estão sendo integrados e ampliados.

\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n

Compromissos

\r\n
\r\n
\r\n
\r\n
\"Imagem
\r\n
\r\n
    \r\n
  • Levar o atendimento do SAMU 192 para toda a população brasileira.
  • \r\n
  • Garantir a expansão das Unidades de Pronto Atendimento (UPAs) em todas as regiões do país.
  • \r\n
  • Garantir à população o atendimento em hospitais de referência para situações de urgência (cirurgias, internações e UTIs).
  • \r\n
\r\n
\r\n
\r\n
", + "abstract": "

Resgate e atendimento 24 horas, sete dias da semana.

", + "title": "SAMU 192 e UPAs", + "categories": [ + { + "name": "Saúde", + "id": 180, + "slug": "saude" + } + ], + "votes_for": 0, + "votes_against": 0, + "setting": { + "color": "#45818e", + "moderate_comments": false, + "comment_paragraph_plugin_activate": false, + "author_name": "Ronald Emerson Scherolt da Costa", + "allow_members_to_edit": false + }, + "position": 4, + "hits": 72, + "tag_list": [], + "children_count": 13, + "slug": "samu-192-e-upas" + }, { + "ranking_position": null, + "id": 103390, + "body": "
\r\n
\r\n
\r\n

Crack, é possível vencer!Prevenção, tratamento e enfrentamento ao tráfico.

\r\n
\r\n
\r\n
\r\n
\"\"
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n

O problema das drogas é um desafio ao mesmo tempo urgente e complexo. Requer medidas preventivas, de combate ao tráfico e, principalmente, oferta de serviços de saúde e assistência social.

\r\n

O programa “Crack, é possível vencer” envolve ações em três eixos: cuidado, autoridade e prevenção.

\r\n

O “cuidado” abrange a ampliação e a melhoria do atendimento para pessoas com problemas causados pelas drogas e para suas famílias, nas áreas de saúde e assistência social.

\r\n

No eixo “autoridade”, o foco é a integração de inteligência e cooperação entre forças policiais federais e estaduais. Envolve policiamento ostensivo nos pontos de uso e venda de drogas e a revitalização desses espaços, melhorando-os para toda a comunidade.

\r\n

Na área de “prevenção” são realizadas ações especiais em escolas e nas comunidades, assim como iniciativas de comunicação e informação para a população em geral.

\r\n

Muitos resultados positivos foram alcançados de 2011 a 2014.

\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n

CUIDADO - Saúde e assistência

\r\n
    \r\n
  • 2.200 Centros de Atenção Psicossocial (CAPS)
  • \r\n
  • 360 CAPS Álcool e Drogas
  • \r\n
  • 60 Unidades de Acolhimento
  • \r\n
  • 8.034 vagas em comunidades terapêuticas
  • \r\n
\r\n
\r\n
\r\n
\r\n
\r\n

AUTORIDADE - Combate ao tráfico

\r\n
    \r\n
  • Intensificação das operações
  • \r\n
  • 7.700 profissionais de segurança pública capacitados
  • \r\n
  • Instalação de 26 grupos de investigações sensíveis da Polícia Federal
  • \r\n
\r\n
\r\n
\r\n
\r\n
\r\n

PREVENÇÃO

\r\n
    \r\n
  • 367 mil funcionários capacitados na temática de drogas em todo o País
  • \r\n
  • 4 mil ligações-dia e 230 mil atendimentos efetivos no ligue 132, serviço gratuito de atendimento telefônico para informações sobre drogas
  • \r\n
\r\n
\r\n
\r\n
", + "abstract": "

Prevenção, tratamento e enfrentamento ao tráfico.

", + "title": "Crack, é possível vencer!", + "categories": [ + { + "name": "Segurança Pública", + "id": 182, + "slug": "seguranca-publica" + } + ], + "votes_for": 0, + "votes_against": 0, + "setting": { + "color": "#00ff00", + "moderate_comments": false, + "comment_paragraph_plugin_activate": false, + "author_name": "Ronald Emerson Scherolt da Costa", + "allow_members_to_edit": false + }, + "position": 14, + "hits": 44, + "tag_list": [], + "children_count": 7, + "slug": "crack-e-possivel-vencer" + } + ]}; return data; }; diff --git a/src/app/components/article-box/article-box.directive.js b/src/app/components/article-box/article-box.directive.js index 9ff8238..d4c6d94 100644 --- a/src/app/components/article-box/article-box.directive.js +++ b/src/app/components/article-box/article-box.directive.js @@ -9,14 +9,11 @@ function articleBox($rootScope) { /** @ngInject */ - function ArticleBoxController(ArticleService, $scope, $state, Slug, $log) { + function ArticleBoxController($state, $log) { $log.debug('ArticleBoxController'); var vm = this; - vm.ArticleService = ArticleService; - vm.$scope = $scope; vm.$state = $state; - vm.Slug = Slug; vm.$log = $log; vm.init(); @@ -26,7 +23,7 @@ var vm = this; if(!vm.article.slug){ - vm.article.slug = vm.Slug.slugify(vm.article.title); + throw { name: 'NotDefined', message: 'The attribute "slug" is undefined.'}; } if(!vm.category){ diff --git a/src/app/components/article-grid/article-grid.html b/src/app/components/article-grid/article-grid.html index 7399ae1..41c6c26 100644 --- a/src/app/components/article-grid/article-grid.html +++ b/src/app/components/article-grid/article-grid.html @@ -1,8 +1,8 @@
-

Conheça os programas ({{vm.filtredArticleList.length}}/{{vm.articles.length}})

+

Conheça os programas ({{vm.filtredArticleList.length}}/{{::vm.articles.length}})

diff --git a/src/app/components/article-preview/article-preview.directive.js b/src/app/components/article-preview/article-preview.directive.js index 9b19adf..2f54b23 100644 --- a/src/app/components/article-preview/article-preview.directive.js +++ b/src/app/components/article-preview/article-preview.directive.js @@ -9,14 +9,11 @@ function articlePreview($rootScope) { /** @ngInject */ - function ArticlePreviewController(ArticleService, $scope, $state, Slug, $log) { + function ArticlePreviewController($state, $log) { $log.debug('ArticlePreviewController'); var vm = this; - vm.ArticleService = ArticleService; - vm.$scope = $scope; vm.$state = $state; - vm.Slug = Slug; vm.$log = $log; vm.init(); @@ -26,7 +23,7 @@ var vm = this; if(!vm.article.slug){ - vm.article.slug = vm.Slug.slugify(vm.article.title); + throw { name: 'NotDefined', message: 'The attribute "slug" is undefined.'}; } if(!vm.category){ diff --git a/src/app/components/article-service/article.service.js b/src/app/components/article-service/article.service.js new file mode 100644 index 0000000..41513b8 --- /dev/null +++ b/src/app/components/article-service/article.service.js @@ -0,0 +1,123 @@ +(function() { + 'use strict'; + + angular + .module('dialoga') + .factory('ArticleService', ArticleService); + + /** @ngInject */ + function ArticleService($http, $q, $rootScope, API, UtilService, Slug, $log) { + $log.debug('ArticleService'); + + var service = { + apiArticles: $rootScope.basePath + '/api/v1/articles/', + getArticleById: getArticleById, + getArticleBySlug: getArticleBySlug, + getCategories: getCategories, + getCategoryBySlug: getCategoryBySlug, + getTopics: getTopics, + getTopicById: getTopicById, + searchTopics: searchTopics, + searchProposals: searchProposals + }; + + return service; + + function _getArticleById (articleId, params, cbSuccess, cbError) { + + var url = service.apiArticles + articleId; + var paramsExtended = angular.extend({}, params); + + UtilService.get(url, {params: paramsExtended}).then(function(data){ + cbSuccess(data); + }).catch(function(error){ + cbError(error); + }); + } + + function getArticleById (articleId, params, cbSuccess, cbError) { + _getArticleById(articleId, params, cbSuccess, cbError); + } + + function getArticleBySlug (/*slug, params, cbSuccess, cbError*/) { + throw { name: 'NotImplementedYet', message: 'The service "getArticleBySlug" is not implemented yet.'}; + } + + function getCategories (articleId, cbSuccess, cbError) { + // Ex.: /api/v1/articles/103358?fields= + + var url = service.apiArticles + articleId; + + UtilService.get(url, {params: { + 'fields[]': ['id', 'categories'] + }}).then(function(data){ + cbSuccess(data); + }).catch(function(error){ + cbError(error); + }); + } + + function getCategoryBySlug () { + throw { name: 'NotImplementedYet', message: 'The service "getArticleBySlug" is not implemented yet.'}; + } + + function getTopics (cbSuccess, cbError) { + // Ex.: /api/v1/articles/103358/children?fields= + + var url = service.apiArticles + API.articleId.home + '/children'; + + UtilService.get(url, {params: { + 'fields[]': ['id', 'title', 'slug', 'abstract', 'categories', 'setting', 'children_count', 'hits'] + }}).then(function(data){ + cbSuccess(data); + }).catch(function(error){ + cbError(error); + }); + } + + function getTopicById (topicId, cbSuccess, cbError) { + // Ex.: /api/v1/articles/103358/children/121521?fields= + + // var url = service.apiArticles + API.articleId.home + '/children/' + topicId; // dont need to chain + var url = service.apiArticles + topicId; + + UtilService.get(url, {params: { + 'fields[]': ['id', 'title', 'body', 'slug', 'abstract', 'categories', 'setting', 'children_count', 'hits'] + }}).then(function(data){ + cbSuccess(data); + }).catch(function(error){ + cbError(error); + }); + } + + function searchTopics (param, cbSuccess, cbError) { + // Ex.: /api/v1/search/article?type=ProposalsDiscussionPlugin::Topic&query=cisternas + var url = '/api/v1/search/article'; + var paramsExtended = angular.extend({ + 'fields[]': ['id', 'title', 'slug', 'abstract', 'categories', 'setting', 'children_count', 'hits'], + 'type': 'ProposalsDiscussionPlugin::Topic' + }, params); + + UtilService.get(url, {params: paramsExtended).then(function(data){ + cbSuccess(data); + }).catch(function(error){ + cbError(error); + }); + } + + function searchProposals (param, cbSuccess, cbError) { + // Ex.: /api/v1/search/article?type=ProposalsDiscussionPlugin::Proposal&query=cisternas + var url = '/api/v1/search/article'; + var paramsExtended = angular.extend({ + 'fields[]': ['id', 'title', 'slug', 'abstract', 'categories', 'setting', 'children_count', 'hits'], + 'type': 'ProposalsDiscussionPlugin::Proposal' + }, params); + + UtilService.get(url, {params: paramsExtended).then(function(data){ + cbSuccess(data); + }).catch(function(error){ + cbError(error); + }); + } + } +})(); diff --git a/src/app/components/article-service/article.service.spec.js b/src/app/components/article-service/article.service.spec.js new file mode 100644 index 0000000..8599f58 --- /dev/null +++ b/src/app/components/article-service/article.service.spec.js @@ -0,0 +1,67 @@ +(function() { + 'use strict'; + + describe('article services', function() { + var ArticleService, httpBackend; + + beforeEach(module('dialoga')); + + beforeEach(inject(function(_ArticleService_, $httpBackend) { + ArticleService = _ArticleService_; + httpBackend = $httpBackend; + })); + + it('should return the main article', function() { + var url = 'http://login.dialoga.gov.br/api/v1/articles/103358?fields=id,children,categories,abstract,title,image,url,setting,position&private_token=null'; + httpBackend.whenGET(url).respond({ + 'article':{'id':103358,'abstract':'\u003Cp style=\"text-align: center;\"\u003E\u003Ciframe src=\"https://www.youtube.com/embed/kpAdrO-emV0?rel=0\u0026amp;showinfo=0\u0026amp;iv_load_policy=3\u0026amp;controls=1\" style=\"max-width: 1000px; left: 5%;\" width=\"275\" height=\"200\"\u003E\u003C/iframe\u003E\u003C/p\u003E','title':'Dialoga Brasil','categories':[{'name':'Sa\u00fade','id':180,'slug':'saude','image':null},{'name':'Seguran\u00e7a P\u00fablica','id':182,'slug':'seguranca-publica','image':null},{'name':'Educa\u00e7\u00e3o','id':181,'slug':'educacao','image':null},{'name':'Redu\u00e7\u00e3o da Pobreza','id':183,'slug':'reducao-da-pobreza','image':null}],'image':null,'setting':{'custom_body_label':'Corpo','phase':'proposals','allow_topics':true,'moderate_comments':false,'comment_paragraph_plugin_activate':false,'author_name':'Leandro Nunes dos Santos','moderate_proposals':true,'allow_members_to_edit':false},'position':null,'children':[{'id':103644,'abstract':'\u003Cp\u003EUm caminho de oportunidades com o Enem: Sisu, Prouni, Fies, Ci\u00eancia sem Fronteiras\u003C/p\u003E','title':'Ensino Superior','categories':[{'name':'Educa\u00e7\u00e3o','id':181,'slug':'educacao','image':null}],'image':{'url':'/image_uploads/dialoga/0000/0128/enem.jpg'},'setting':{'color':'#cfe2f3','moderate_comments':false,'comment_paragraph_plugin_activate':false,'author_name':'Ronald Emerson Scherolt da Costa','allow_members_to_edit':false},'position':9},{'id':103673,'abstract':'\u003Cp\u003EA melhor escolha \u00e9 se informar.\u003C/p\u003E','title':'Incentivo ao Parto Normal','categories':[{'name':'Sa\u00fade','id':180,'slug':'saude','image':null}],'image':{'url':'/image_uploads/dialoga/0000/0092/parto-normal.jpg'},'setting':{'color':'#ff0000','moderate_comments':false,'comment_paragraph_plugin_activate':false,'author_name':'Ronald Emerson Scherolt da Costa','allow_members_to_edit':false},'position':6},{'id':103397,'abstract':'\u003Cp\u003ERenda, inclus\u00e3o produtiva e acesso a servi\u00e7os.\u003C/p\u003E','title':'Brasil Sem Mis\u00e9ria','categories':[{'name':'Redu\u00e7\u00e3o da Pobreza','id':183,'slug':'reducao-da-pobreza','image':null}],'image':{'url':'/image_uploads/dialoga/0000/0116/bsm_redim.jpg'},'setting':{'color':'','moderate_comments':false,'comment_paragraph_plugin_activate':false,'author_name':'Ronald Emerson Scherolt da Costa','allow_members_to_edit':false},'position':18},{'id':103379,'abstract':'\u003Cp\u003EResgate e atendimento 24 horas, sete dias da semana.\u003C/p\u003E','title':'SAMU 192 e UPAs','categories':[{'name':'Sa\u00fade','id':180,'slug':'saude','image':null}],'image':{'url':'/image_uploads/dialoga/0000/0060/SAMU.jpg'},'setting':{'color':'#45818e','moderate_comments':false,'comment_paragraph_plugin_activate':false,'author_name':'Ronald Emerson Scherolt da Costa','allow_members_to_edit':false},'position':4},{'id':103521,'abstract':'\u003Cp\u003EMais atendimento nos munic\u00edpios, mais sa\u00fade para quem mais precisa.\u003C/p\u003E','title':'Mais M\u00e9dicos','categories':[{'name':'Sa\u00fade','id':180,'slug':'saude','image':null}],'image':{'url':'/image_uploads/dialoga/0000/0025/Mais_M_dicos.jpg'},'setting':{'color':'#ffe599','moderate_comments':false,'comment_paragraph_plugin_activate':false,'author_name':'Ronald Emerson Scherolt da Costa','allow_members_to_edit':false},'position':1},{'id':103390,'abstract':'\u003Cp\u003EPreven\u00e7\u00e3o, tratamento e enfrentamento ao tr\u00e1fico.\u003C/p\u003E','title':'Crack, \u00e9 poss\u00edvel vencer!','categories':[{'name':'Seguran\u00e7a P\u00fablica','id':182,'slug':'seguranca-publica','image':null}],'image':{'url':'/image_uploads/dialoga/0000/0104/crack.jpg'},'setting':{'color':'#00ff00','moderate_comments':false,'comment_paragraph_plugin_activate':false,'author_name':'Ronald Emerson Scherolt da Costa','allow_members_to_edit':false},'position':14},{'id':103592,'abstract':'\u003Cp\u003EGarantir acesso \u00e0 prote\u00e7\u00e3o social.\u003C/p\u003E','title':'Assist\u00eancia Social','categories':[{'name':'Redu\u00e7\u00e3o da Pobreza','id':183,'slug':'reducao-da-pobreza','image':null}],'image':{'url':'/image_uploads/dialoga/0000/0122/assistencia_social.jpg'},'setting':{'color':'#a61c00','moderate_comments':false,'comment_paragraph_plugin_activate':false,'author_name':'Ronald Emerson Scherolt da Costa','allow_members_to_edit':false},'position':19},{'id':103426,'abstract':'\u003Cp\u003EDa sa\u00fade se cuida todos os dias.\u003C/p\u003E','title':'Vida saud\u00e1vel','categories':[{'name':'Sa\u00fade','id':180,'slug':'saude','image':null}],'image':{'url':'/image_uploads/dialoga/0000/0046/vida_saudavel.jpg'},'setting':{'color':'#d9d2e9','moderate_comments':false,'comment_paragraph_plugin_activate':false,'author_name':'Ronald Emerson Scherolt da Costa','allow_members_to_edit':false},'position':7},{'id':103695,'abstract':'\u003Cp\u003ENovo modelo de atua\u00e7\u00e3o em Seguran\u00e7a P\u00fablica.\u003C/p\u003E','title':'Seguran\u00e7a P\u00fablica Integrada','categories':[{'name':'Seguran\u00e7a P\u00fablica','id':182,'slug':'seguranca-publica','image':null}],'image':{'url':'/image_uploads/dialoga/0000/0152/policiaintegrada.jpg'},'setting':{'color':'#ff00ff','moderate_comments':false,'comment_paragraph_plugin_activate':false,'author_name':'Ronald Emerson Scherolt da Costa','allow_members_to_edit':false},'position':13},{'id':103663,'abstract':'\u003Cp\u003EMais educa\u00e7\u00e3o profissional e tecnol\u00f3gica, mais desenvolvimento\u003C/p\u003E','title':'Ensino T\u00e9cnico','categories':[{'name':'Educa\u00e7\u00e3o','id':181,'slug':'educacao','image':null}],'image':{'url':'/image_uploads/dialoga/0000/0134/Ensino_tecnico.jpg'},'setting':{'color':'#d0e0e3','moderate_comments':false,'comment_paragraph_plugin_activate':false,'author_name':'Ronald Emerson Scherolt da Costa','allow_members_to_edit':false},'position':10},{'id':103472,'abstract':'\u003Cp\u003EPol\u00edcia Federal, Pol\u00edcia Rodovi\u00e1ria Federal e For\u00e7a Nacional de Seguran\u00e7a P\u00fablica.\u003C/p\u003E','title':'For\u00e7as Federais de Seguran\u00e7a','categories':[{'name':'Seguran\u00e7a P\u00fablica','id':182,'slug':'seguranca-publica','image':null}],'image':{'url':'/image_uploads/dialoga/0000/0031/federais2.png'},'setting':{'color':'','moderate_comments':false,'comment_paragraph_plugin_activate':false,'author_name':'Ronald Emerson Scherolt da Costa','allow_members_to_edit':false},'position':16},{'id':103612,'abstract':'\u003Cp\u003EGarantir \u00e1gua para beber e produzir.\u003C/p\u003E','title':'Cisternas','categories':[{'name':'Redu\u00e7\u00e3o da Pobreza','id':183,'slug':'reducao-da-pobreza','image':null}],'image':{'url':'/image_uploads/dialoga/0000/0039/cisterna_redim.jpg'},'setting':{'color':'#0000ff','moderate_comments':false,'comment_paragraph_plugin_activate':false,'author_name':'Ronald Emerson Scherolt da Costa','allow_members_to_edit':false},'position':20},{'id':103442,'abstract':'\u003Cp\u003EComplemento \u00e0 renda e acompanhamento em educa\u00e7\u00e3o e sa\u00fade.\u003C/p\u003E','title':'Bolsa Fam\u00edlia','categories':[{'name':'Redu\u00e7\u00e3o da Pobreza','id':183,'slug':'reducao-da-pobreza','image':null}],'image':{'url':'/image_uploads/dialoga/0000/0013/bolsa_familia_redim.jpg'},'setting':{'color':'#ff9900','moderate_comments':false,'comment_paragraph_plugin_activate':false,'author_name':'Ronald Emerson Scherolt da Costa','allow_members_to_edit':false},'position':17},{'id':103507,'abstract':'\u003Cp\u003ETecnologia a servi\u00e7o da seguran\u00e7a do cidad\u00e3o.\u003C/p\u003E','title':'Sinesp','categories':[{'name':'Seguran\u00e7a P\u00fablica','id':182,'slug':'seguranca-publica','image':null}],'image':{'url':'/image_uploads/dialoga/0000/0098/sinesp.png'},'setting':{'color':'#00ff00','moderate_comments':false,'comment_paragraph_plugin_activate':false,'author_name':'Ronald Emerson Scherolt da Costa','allow_members_to_edit':false},'position':12},{'id':103683,'abstract':'\u003Cp\u003ESa\u00fade n\u00e3o tem pre\u00e7o.\u003C/p\u003E','title':'Aqui tem Farm\u00e1cia Popular','categories':[{'name':'Sa\u00fade','id':180,'slug':'saude','image':null}],'image':{'url':'/image_uploads/dialoga/0000/0019/saude_nao_tem_preco.jpg'},'setting':{'color':'#e69138','moderate_comments':false,'comment_paragraph_plugin_activate':false,'author_name':'Ronald Emerson Scherolt da Costa','allow_members_to_edit':false},'position':5},{'id':103457,'abstract':'\u003Cp\u003EA\u00e7\u00e3o conjunta e coopera\u00e7\u00e3o transfronteiri\u00e7a.\u003C/p\u003E','title':'Prote\u00e7\u00e3o das Fronteiras','categories':[{'name':'Seguran\u00e7a P\u00fablica','id':182,'slug':'seguranca-publica','image':null}],'image':{'url':'/image_uploads/dialoga/0000/0110/fronteira_redim.jpg'},'setting':{'color':'#a64d79','moderate_comments':false,'comment_paragraph_plugin_activate':false,'author_name':'Ronald Emerson Scherolt da Costa','allow_members_to_edit':false},'position':15},{'id':103494,'abstract':'\u003Cp\u003EDa Educa\u00e7\u00e3o Infantil ao Ensino M\u00e9dio.\u003C/p\u003E','title':'Educa\u00e7\u00e3o B\u00e1sica','categories':[{'name':'Educa\u00e7\u00e3o','id':181,'slug':'educacao','image':null}],'image':{'url':'/image_uploads/dialoga/0000/0076/Educa__o_B_sica.jpg'},'setting':{'color':'#fce5cd','moderate_comments':false,'comment_paragraph_plugin_activate':false,'author_name':'Ronald Emerson Scherolt da Costa','allow_members_to_edit':false},'position':8},{'id':103359,'abstract':'\u003Cp\u003EAcesso a exames e consultas com especialistas.\u003C/p\u003E','title':'Mais Especialidades','categories':[{'name':'Sa\u00fade','id':180,'slug':'saude','image':null}],'image':{'url':'/image_uploads/dialoga/0000/0083/mais_especialidades1.png'},'setting':{'color':'#ea9999','moderate_comments':false,'comment_paragraph_plugin_activate':false,'author_name':'Ronald Emerson Scherolt da Costa','allow_members_to_edit':false},'position':2},{'id':103485,'abstract':'\u003Cp\u003ECaminho para uma educa\u00e7\u00e3o de qualidade.\u003C/p\u003E','title':'Valoriza\u00e7\u00e3o dos Professores','categories':[{'name':'Educa\u00e7\u00e3o','id':181,'slug':'educacao','image':null}],'image':{'url':'/image_uploads/dialoga/0000/0140/valorizacao_professor.jpg'},'setting':{'color':'#ffff00','moderate_comments':false,'comment_paragraph_plugin_activate':false,'author_name':'Ronald Emerson Scherolt da Costa','allow_members_to_edit':false},'position':11},{'id':103416,'abstract':'\u003Cp\u003EEstrutura adequada para atender melhor a popula\u00e7\u00e3o na aten\u00e7\u00e3o b\u00e1sica.\u003C/p\u003E','title':'Melhorar os Postos de Sa\u00fade','categories':[{'name':'Sa\u00fade','id':180,'slug':'saude','image':null}],'image':{'url':'/image_uploads/dialoga/0000/0053/requalif_redim.jpg'},'setting':{'color':'#cc4125','moderate_comments':false,'comment_paragraph_plugin_activate':false,'author_name':'Ronald Emerson Scherolt da Costa','allow_members_to_edit':false},'position':3}]}}); + + ArticleService.getHome(function(result){ + expect(result.article).toBeDefined(); + expect(result.article.title).toEqual('Dialoga Brasil'); + expect(result.article.categories).toBeDefined(); + }); + + httpBackend.flush(); + }); + + // it('should return a list of articles', function() { + + // httpBackend.whenGET('http://login.dialoga.gov.br/api/v1/articles').respond({ + // "articles": [ + // { + // abstract: "Que exista educação continuada permanente dos profissionais!!", + // author: null, + // body: "", + // categories: [], + // children: [], + // created_at: "2015/08/04 16:36:13", + // end_date: null, + // hits: 0, + // id: 120568, + // image: null, + // parent: {id: 103379,…}, + // position: null, + // profile: {identifier: "dialoga", name: "dialoga", id: 19195, created_at: "2015/04/15 09:38:36", image: null}, + // setting: {comment_paragraph_plugin_activate: false, author_name: "estacio"}, + // start_date: null, + // tag_list: [], + // title: "article_f4f4601c-0f36-e90e-d01a-9871f0bd126b", + // votes_against: 0, + // votes_for: 0, + // } + // ] + // }); + + // ArticleService.getList().then(function(result) { + // console.log('result', result); + + // expect(result.data.article).toBeDefined(); + // expect(result.data.article.title).toEqual('Dialoga Brasil'); + + // }); + + // httpBackend.flush(); + // }); + }); +})(); diff --git a/src/app/components/auth-user/auth-user.directive.js b/src/app/components/auth-user/auth-user.directive.js index b6b7ebc..42d1fa9 100644 --- a/src/app/components/auth-user/auth-user.directive.js +++ b/src/app/components/auth-user/auth-user.directive.js @@ -42,6 +42,7 @@ AuthUserController.prototype.onClickLogout = function (){ var vm = this; + // TODO: emit event? vm.AuthService.logout(); }; diff --git a/src/app/components/dialoga-service/dialoga.service.js b/src/app/components/dialoga-service/dialoga.service.js new file mode 100644 index 0000000..eb1a805 --- /dev/null +++ b/src/app/components/dialoga-service/dialoga.service.js @@ -0,0 +1,170 @@ +(function() { + 'use strict'; + + angular + .module('dialoga') + .factory('DialogaService', DialogaService); + + /** @ngInject */ + function DialogaService($rootScope, API, ArticleService, UtilService, Slug, $log) { + $log.debug('DialogaService'); + + var service = { + getInicio: getInicio, + getSobre: getSobre, + getTemas: getTemas, + getProgramas: getProgramas, + getPropostas: getPropostas, + getDuvidas: getDuvidas, + buscaPrograma: buscaPrograma, + buscaProposta: buscaProposta, + }; + + var CACHE = {}; + + return service; + + function getInicio (cbSuccess, cbError) { + if(CACHE.hasOwnProperty('inicio')){ + cbSuccess(CACHE.inicio); + }else{ + // load main content + ArticleService.getArticleById(API.articleId.home, { + fields: 'id,abstract,body,categories,children,children_count,title' + }, function (article){ + CACHE.inicio = article; + + _pipeSetSobre(article); + _pipeSetTemas(article); + _pipeSetProgramas(article); + + cbSuccess(article); + }, cbError); + } + } + + function getSobre (cbSuccess, cbError) { + if(CACHE.hasOwnProperty('sobre')){ + cbSuccess(CACHE.sobre); + }else{ + // load article content + ArticleService.getArticleById(API.articleId.about, {}, function (article){ + CACHE.sobre = article; + + cbSuccess(CACHE.sobre); + }, cbError); + } + } + + function getTemas (cbSuccess, cbError) { + if(CACHE.hasOwnProperty('temas')){ + cbSuccess(CACHE.temas); + }else{ + // load main content + getInicio(function(){ + if(!CACHE.hasOwnProperty('temas')){ + throw { name: 'NotFound', message: '"temas" is not defined. "article.categories" was handled?'}; + } + cbSuccess(CACHE.temas); + },cbError); + } + } + + function getProgramas (cbSuccess, cbError) { + if(CACHE.hasOwnProperty('programas')){ + cbSuccess(CACHE.programas); + }else{ + // load main content + getInicio(function(){ + if(!CACHE.hasOwnProperty('programas')){ + throw { name: 'NotFound', message: '"programas" is not defined. "article.children" was handled?'}; + } + cbSuccess(CACHE.programas); + },cbError); + } + } + + function getProgramasAleatorios (cbSuccess, cbError) { + // load article content + UtilService.get(API.random_topics, {params: { + 'fields[]': [ + 'id', 'title', 'slug', 'abstract', 'body', 'categories', 'setting', + 'ranking_position', 'position', 'children_count', 'hits', 'votes_for', + 'votes_against', 'tag_list'] + }}).then(function(data){ + cbSuccess(data); + }).catch(function(error){ + cbError(error); + }); + } + + function getPropostas (cbSuccess, cbError) { + if(CACHE.hasOwnProperty('propostas')){ + cbSuccess(CACHE.propostas); + }else{ + // load main content + getInicio(function(){ + if(!CACHE.hasOwnProperty('propostas')){ + throw { name: 'NotFound', message: '"propostas" is not defined. "article.categories" was handled?'}; + } + cbSuccess(CACHE.propostas); + },cbError); + } + } + + function getDuvidas (cbSuccess, cbError) { + if(CACHE.hasOwnProperty('duvidas')){ + cbSuccess(CACHE.duvidas); + }else{ + // load content + var duvidas = []; + + CACHE.duvidas = duvidas; + cbSuccess(CACHE.duvidas); + } + } + + function buscaPrograma (cbSuccess, cbError) {} + + function buscaProposta (cbSuccess, cbError) {} + + function _pipeSetSobre (article) { + if(!CACHE.hasOwnProperty('sobre')){ + CACHE.sobre = article.body; + } + } + + function _pipeSetTemas (article) { + if(!CACHE.hasOwnProperty('temas')){ + CACHE.temas = article.categories; + } + + _pipeCalcColors(article); + } + + function _pipeSetProgramas (article) { + if(!CACHE.hasOwnProperty('programas')){ + CACHE.programas = article.children; + CACHE.programas_count = article.children_count; + } + } + + // Calculate color pallet + function _pipeCalcColors (data) { + // var darkFactor = 0.15; + if(data.article.categories){ + // var categories = data.article.categories; + + // Handle Category Data + + // Handle Category Colors + // for (var i = categories.length - 1; i >= 0; i--) { + // var category = categories[i]; + // if(category.color && !category.bgColor){ + // category.colorDarker = $window.ColorLuminance(category.color, 0.15); + // } + // }; + } + } + } +})(); diff --git a/src/app/components/event-list/event-list.scss b/src/app/components/event-list/event-list.scss index 4116fce..1df8cfa 100644 --- a/src/app/components/event-list/event-list.scss +++ b/src/app/components/event-list/event-list.scss @@ -98,7 +98,7 @@ overflow-y: scroll; .btn { - color: #fff; + color: #e1e1e1; text-transform: uppercase; font-weight: bold; } diff --git a/src/app/components/service/utils.service.js b/src/app/components/service/utils.service.js deleted file mode 100644 index 381925d..0000000 --- a/src/app/components/service/utils.service.js +++ /dev/null @@ -1,78 +0,0 @@ -(function() { - 'use strict'; - - angular - .module('dialoga') - .factory('UtilService', UtilService); - - /** @ngInject */ - function UtilService($http, $q, $log) { - $log.debug('UtilService'); - - var service = { - get: get, - post: post, - // put: put, - // delete: delete, - // head: head, - handleSuccess: handleSuccess, - handleError: handleError - }; - - return service; - - function get (url, config) { - return $http.get(url, config) - .then(handleSuccess) - .catch(handleError); - } - - function post (url, config) { - return $http.post(url, config) - .then(handleSuccess) - .catch(handleError); - } - - /** - * Transform the successful response, unwrapping the application data - * from the API response payload. - * - * @param {Object} response from the server. - * data – {string|Object} – The response body transformed with the transform functions. - * status – {number} – HTTP status code of the response. - * headers – {function([headerName])} – Header getter function. - * config – {Object} – The configuration object that was used to generate the request. - * statusText – {string} – HTTP status text of the response. - * - * @return {Object} the data unwrapped. - */ - function handleSuccess (response) { - $log.debug('[SUCCESS]', response); - return response.data; - } - - /** - * Transform the error response, unwrapping the application data from - * the API response payload. - * - * @param {Object} error from the server. - * @return {Promise} promise rejection called. - */ - function handleError (error) { - $log.debug('[ERROR]', error); - - $log.error('XHR Failed on Service.\n' + angular.toJson(error.data, true)); - - // The API response from the server should be returned in a - // nomralized format. However, if the request was not handled by the - // server (or what not handles properly - ex. server error), then we - // may have to normalize it on our end, as best we can. - if (!angular.isObject(error.data) || !error.data.message) { - return $q.reject('An unknown error occurred.'); - } - - // Otherwise, use expected error message. - return $q.reject(error.data.message); - } - } -})(); diff --git a/src/app/components/service/utils.service.spec.js b/src/app/components/service/utils.service.spec.js deleted file mode 100644 index 67cb46c..0000000 --- a/src/app/components/service/utils.service.spec.js +++ /dev/null @@ -1,28 +0,0 @@ -(function() { - 'use strict'; - - describe('util services', function() { - // var UtilService, httpBackend; - - // beforeEach(module('dialoga')); - - // beforeEach(inject(function(_UtilService_, $httpBackend) { - // UtilService = _UtilService_; - // httpBackend = $httpBackend; - // })); - - // it('should do something', function() { - // var url = 'http://example.com/api/v1/data/103358'; - // httpBackend.whenGET(url).respond({}); - - // UtilService.getData().then(function(result) { - - // expect(result.data).toBeDefined(); - // expect(result.data.title).toEqual('My Title'); - - // }); - - // httpBackend.flush(); - // }); - }); -})(); diff --git a/src/app/components/util-service/utils.service.js b/src/app/components/util-service/utils.service.js new file mode 100644 index 0000000..381925d --- /dev/null +++ b/src/app/components/util-service/utils.service.js @@ -0,0 +1,78 @@ +(function() { + 'use strict'; + + angular + .module('dialoga') + .factory('UtilService', UtilService); + + /** @ngInject */ + function UtilService($http, $q, $log) { + $log.debug('UtilService'); + + var service = { + get: get, + post: post, + // put: put, + // delete: delete, + // head: head, + handleSuccess: handleSuccess, + handleError: handleError + }; + + return service; + + function get (url, config) { + return $http.get(url, config) + .then(handleSuccess) + .catch(handleError); + } + + function post (url, config) { + return $http.post(url, config) + .then(handleSuccess) + .catch(handleError); + } + + /** + * Transform the successful response, unwrapping the application data + * from the API response payload. + * + * @param {Object} response from the server. + * data – {string|Object} – The response body transformed with the transform functions. + * status – {number} – HTTP status code of the response. + * headers – {function([headerName])} – Header getter function. + * config – {Object} – The configuration object that was used to generate the request. + * statusText – {string} – HTTP status text of the response. + * + * @return {Object} the data unwrapped. + */ + function handleSuccess (response) { + $log.debug('[SUCCESS]', response); + return response.data; + } + + /** + * Transform the error response, unwrapping the application data from + * the API response payload. + * + * @param {Object} error from the server. + * @return {Promise} promise rejection called. + */ + function handleError (error) { + $log.debug('[ERROR]', error); + + $log.error('XHR Failed on Service.\n' + angular.toJson(error.data, true)); + + // The API response from the server should be returned in a + // nomralized format. However, if the request was not handled by the + // server (or what not handles properly - ex. server error), then we + // may have to normalize it on our end, as best we can. + if (!angular.isObject(error.data) || !error.data.message) { + return $q.reject('An unknown error occurred.'); + } + + // Otherwise, use expected error message. + return $q.reject(error.data.message); + } + } +})(); diff --git a/src/app/components/util-service/utils.service.spec.js b/src/app/components/util-service/utils.service.spec.js new file mode 100644 index 0000000..67cb46c --- /dev/null +++ b/src/app/components/util-service/utils.service.spec.js @@ -0,0 +1,28 @@ +(function() { + 'use strict'; + + describe('util services', function() { + // var UtilService, httpBackend; + + // beforeEach(module('dialoga')); + + // beforeEach(inject(function(_UtilService_, $httpBackend) { + // UtilService = _UtilService_; + // httpBackend = $httpBackend; + // })); + + // it('should do something', function() { + // var url = 'http://example.com/api/v1/data/103358'; + // httpBackend.whenGET(url).respond({}); + + // UtilService.getData().then(function(result) { + + // expect(result.data).toBeDefined(); + // expect(result.data.title).toEqual('My Title'); + + // }); + + // httpBackend.flush(); + // }); + }); +})(); diff --git a/src/app/pages/article/article.controller.js b/src/app/pages/article/article.controller.js index c8f148b..fba0cb6 100644 --- a/src/app/pages/article/article.controller.js +++ b/src/app/pages/article/article.controller.js @@ -6,11 +6,11 @@ .controller('ArticlePageController', ArticlePageController); /** @ngInject */ - function ArticlePageController(ArticleService, $state, $sce, $log) { + function ArticlePageController(DialogaService, $state, $sce, $log) { $log.debug('ArticlePageController'); var vm = this; - vm.ArticleService = ArticleService; + vm.DialogaService = DialogaService; vm.$state = $state; vm.$sce = $sce; vm.$log = $log; @@ -26,10 +26,10 @@ vm.loading = true; switch (vm.page){ case 'sobre': - vm.ArticleService.getAbout(handleSuccess, handleError); + vm.DialogaService.getAbout(handleSuccess, handleError); break; case 'termos-de-uso': - vm.ArticleService.getTerms(handleSuccess, handleError); + vm.DialogaService.getTerms(handleSuccess, handleError); break; default: vm.$log.warn('Page not handled:', vm.page); diff --git a/src/app/pages/article/article.service.js b/src/app/pages/article/article.service.js deleted file mode 100644 index 79640ab..0000000 --- a/src/app/pages/article/article.service.js +++ /dev/null @@ -1,173 +0,0 @@ -(function() { - 'use strict'; - - angular - .module('dialoga') - .factory('ArticleService', ArticleService); - - /** @ngInject */ - function ArticleService($http, $q, $rootScope, API, UtilService, Slug, $log) { - $log.debug('ArticleService'); - - var idArticleHome = API.articleId.home; - var idArticleAbout = API.articleId.about; - var idArticleTerms = API.articleId.terms; - - var _savedAbstract = null; - - var service = { - apiArticles: $rootScope.basePath + '/api/v1/articles/', - getHome: getHome, - getAbout: getAbout, - getTerms: getTerms, - getArticleById: getArticleById, - getArticleBySlug: getArticleBySlug, - getCategories: getCategories, - getCategoryBySlug: getCategoryBySlug, - getPrograms: getPrograms, - getContentById: getContentById, - setHomeAbstract: setHomeAbstract, - getHomeAbstract: getHomeAbstract - }; - - var CACHE = {}; // cache by article id - - return service; - - function loadArticleById (articleId, params, cbSuccess, cbError) { - - var url = service.apiArticles + articleId; - var paramsExtended = angular.extend({}, params); - - UtilService.get(url, {params: paramsExtended}).then(function(data){ - CACHE[articleId] = data; - cbSuccess(data); - }, function(error){ - cbError(error); - }); - } - - function getArticleById (articleId, params, cbSuccess, cbError) { - var cachedArticle = CACHE[articleId]; - - if(cachedArticle){ - cbSuccess(cachedArticle); - }else{ - loadArticleById(articleId, params, cbSuccess, cbError); - } - } - - function getArticleBySlug (slug, cbSuccess, cbError) { - var vm = this; - - /** - * XXX: get from home article util we have a endpoint to do-it. - */ - vm.getHome(function (data) { - var mainArticle = data.article; - var programList = mainArticle.children; - var categories = mainArticle.categories; - - $rootScope._CATEGORIES = $rootScope._CATEGORIES ? $rootScope._CATEGORIES : categories; - - var result = null; - for (var i = programList.length - 1; i >= 0; i--) { - var program = programList[i]; - - if(!program.slug){ - program.slug = Slug.slugify(program.title); - } - - if(program.slug === slug){ - result = program; - break; - } - } - - if(result){ - cbSuccess(result); - }else{ - cbError('None program with slug "' + slug + '"" was found.'); - } - }, cbError); - } - - function getCategories (cbSuccess, cbError) { - return getHome(function(data){ - cbSuccess(data.article.categories); - }, cbError); - } - - function getCategoryBySlug (slug, cbSuccess, cbError) { - return getHome(function (data){ - var result = null; - - for (var i = data.article.categories.length - 1; i >= 0; i--) { - var category = data.article.categories[i]; - if (category.slug === slug) { - result = category; - break; - } - } - - cbSuccess(result); - }, cbError); - } - - function getPrograms (cbSuccess, cbError) { - return getHome(function(data){ - cbSuccess(data.article.children); - }, cbError); - } - - function getContentById (contentId, cbSuccess, cbError) { - return getArticleById(contentId, { - fields: 'id,body&content_type=ProposalsDiscussionPlugin::Topic' - }, cbSuccess, cbError); - } - - function getHome (cbSuccess, cbError) { - return getArticleById(idArticleHome, { - fields: 'id,children,categories,abstract,title,image,url,setting,position', - private_token: 'null' - }, _handleCategory(cbSuccess), cbError); - } - - function getAbout (cbSuccess, cbError) { - return getArticleById(idArticleAbout, {}, cbSuccess, cbError); - } - - function getTerms (cbSuccess, cbError) { - return getArticleById(idArticleTerms, {}, cbSuccess, cbError); - } - - function _handleCategory (cbSuccess) { - // var darkFactor = 0.15; - - return function (data) { - if(data.article.categories){ - // var categories = data.article.categories; - - // Handle Category Data - - // Handle Category Colors - // for (var i = categories.length - 1; i >= 0; i--) { - // var category = categories[i]; - // if(category.color && !category.bgColor){ - // category.colorDarker = $window.ColorLuminance(category.color, 0.15); - // } - // }; - } - cbSuccess(data); - }; - } - - function setHomeAbstract (newAbstract) { - _savedAbstract = newAbstract; - } - - function getHomeAbstract () { - return _savedAbstract; - } - } -})(); diff --git a/src/app/pages/article/article.service.spec.js b/src/app/pages/article/article.service.spec.js deleted file mode 100644 index 8599f58..0000000 --- a/src/app/pages/article/article.service.spec.js +++ /dev/null @@ -1,67 +0,0 @@ -(function() { - 'use strict'; - - describe('article services', function() { - var ArticleService, httpBackend; - - beforeEach(module('dialoga')); - - beforeEach(inject(function(_ArticleService_, $httpBackend) { - ArticleService = _ArticleService_; - httpBackend = $httpBackend; - })); - - it('should return the main article', function() { - var url = 'http://login.dialoga.gov.br/api/v1/articles/103358?fields=id,children,categories,abstract,title,image,url,setting,position&private_token=null'; - httpBackend.whenGET(url).respond({ - 'article':{'id':103358,'abstract':'\u003Cp style=\"text-align: center;\"\u003E\u003Ciframe src=\"https://www.youtube.com/embed/kpAdrO-emV0?rel=0\u0026amp;showinfo=0\u0026amp;iv_load_policy=3\u0026amp;controls=1\" style=\"max-width: 1000px; left: 5%;\" width=\"275\" height=\"200\"\u003E\u003C/iframe\u003E\u003C/p\u003E','title':'Dialoga Brasil','categories':[{'name':'Sa\u00fade','id':180,'slug':'saude','image':null},{'name':'Seguran\u00e7a P\u00fablica','id':182,'slug':'seguranca-publica','image':null},{'name':'Educa\u00e7\u00e3o','id':181,'slug':'educacao','image':null},{'name':'Redu\u00e7\u00e3o da Pobreza','id':183,'slug':'reducao-da-pobreza','image':null}],'image':null,'setting':{'custom_body_label':'Corpo','phase':'proposals','allow_topics':true,'moderate_comments':false,'comment_paragraph_plugin_activate':false,'author_name':'Leandro Nunes dos Santos','moderate_proposals':true,'allow_members_to_edit':false},'position':null,'children':[{'id':103644,'abstract':'\u003Cp\u003EUm caminho de oportunidades com o Enem: Sisu, Prouni, Fies, Ci\u00eancia sem Fronteiras\u003C/p\u003E','title':'Ensino Superior','categories':[{'name':'Educa\u00e7\u00e3o','id':181,'slug':'educacao','image':null}],'image':{'url':'/image_uploads/dialoga/0000/0128/enem.jpg'},'setting':{'color':'#cfe2f3','moderate_comments':false,'comment_paragraph_plugin_activate':false,'author_name':'Ronald Emerson Scherolt da Costa','allow_members_to_edit':false},'position':9},{'id':103673,'abstract':'\u003Cp\u003EA melhor escolha \u00e9 se informar.\u003C/p\u003E','title':'Incentivo ao Parto Normal','categories':[{'name':'Sa\u00fade','id':180,'slug':'saude','image':null}],'image':{'url':'/image_uploads/dialoga/0000/0092/parto-normal.jpg'},'setting':{'color':'#ff0000','moderate_comments':false,'comment_paragraph_plugin_activate':false,'author_name':'Ronald Emerson Scherolt da Costa','allow_members_to_edit':false},'position':6},{'id':103397,'abstract':'\u003Cp\u003ERenda, inclus\u00e3o produtiva e acesso a servi\u00e7os.\u003C/p\u003E','title':'Brasil Sem Mis\u00e9ria','categories':[{'name':'Redu\u00e7\u00e3o da Pobreza','id':183,'slug':'reducao-da-pobreza','image':null}],'image':{'url':'/image_uploads/dialoga/0000/0116/bsm_redim.jpg'},'setting':{'color':'','moderate_comments':false,'comment_paragraph_plugin_activate':false,'author_name':'Ronald Emerson Scherolt da Costa','allow_members_to_edit':false},'position':18},{'id':103379,'abstract':'\u003Cp\u003EResgate e atendimento 24 horas, sete dias da semana.\u003C/p\u003E','title':'SAMU 192 e UPAs','categories':[{'name':'Sa\u00fade','id':180,'slug':'saude','image':null}],'image':{'url':'/image_uploads/dialoga/0000/0060/SAMU.jpg'},'setting':{'color':'#45818e','moderate_comments':false,'comment_paragraph_plugin_activate':false,'author_name':'Ronald Emerson Scherolt da Costa','allow_members_to_edit':false},'position':4},{'id':103521,'abstract':'\u003Cp\u003EMais atendimento nos munic\u00edpios, mais sa\u00fade para quem mais precisa.\u003C/p\u003E','title':'Mais M\u00e9dicos','categories':[{'name':'Sa\u00fade','id':180,'slug':'saude','image':null}],'image':{'url':'/image_uploads/dialoga/0000/0025/Mais_M_dicos.jpg'},'setting':{'color':'#ffe599','moderate_comments':false,'comment_paragraph_plugin_activate':false,'author_name':'Ronald Emerson Scherolt da Costa','allow_members_to_edit':false},'position':1},{'id':103390,'abstract':'\u003Cp\u003EPreven\u00e7\u00e3o, tratamento e enfrentamento ao tr\u00e1fico.\u003C/p\u003E','title':'Crack, \u00e9 poss\u00edvel vencer!','categories':[{'name':'Seguran\u00e7a P\u00fablica','id':182,'slug':'seguranca-publica','image':null}],'image':{'url':'/image_uploads/dialoga/0000/0104/crack.jpg'},'setting':{'color':'#00ff00','moderate_comments':false,'comment_paragraph_plugin_activate':false,'author_name':'Ronald Emerson Scherolt da Costa','allow_members_to_edit':false},'position':14},{'id':103592,'abstract':'\u003Cp\u003EGarantir acesso \u00e0 prote\u00e7\u00e3o social.\u003C/p\u003E','title':'Assist\u00eancia Social','categories':[{'name':'Redu\u00e7\u00e3o da Pobreza','id':183,'slug':'reducao-da-pobreza','image':null}],'image':{'url':'/image_uploads/dialoga/0000/0122/assistencia_social.jpg'},'setting':{'color':'#a61c00','moderate_comments':false,'comment_paragraph_plugin_activate':false,'author_name':'Ronald Emerson Scherolt da Costa','allow_members_to_edit':false},'position':19},{'id':103426,'abstract':'\u003Cp\u003EDa sa\u00fade se cuida todos os dias.\u003C/p\u003E','title':'Vida saud\u00e1vel','categories':[{'name':'Sa\u00fade','id':180,'slug':'saude','image':null}],'image':{'url':'/image_uploads/dialoga/0000/0046/vida_saudavel.jpg'},'setting':{'color':'#d9d2e9','moderate_comments':false,'comment_paragraph_plugin_activate':false,'author_name':'Ronald Emerson Scherolt da Costa','allow_members_to_edit':false},'position':7},{'id':103695,'abstract':'\u003Cp\u003ENovo modelo de atua\u00e7\u00e3o em Seguran\u00e7a P\u00fablica.\u003C/p\u003E','title':'Seguran\u00e7a P\u00fablica Integrada','categories':[{'name':'Seguran\u00e7a P\u00fablica','id':182,'slug':'seguranca-publica','image':null}],'image':{'url':'/image_uploads/dialoga/0000/0152/policiaintegrada.jpg'},'setting':{'color':'#ff00ff','moderate_comments':false,'comment_paragraph_plugin_activate':false,'author_name':'Ronald Emerson Scherolt da Costa','allow_members_to_edit':false},'position':13},{'id':103663,'abstract':'\u003Cp\u003EMais educa\u00e7\u00e3o profissional e tecnol\u00f3gica, mais desenvolvimento\u003C/p\u003E','title':'Ensino T\u00e9cnico','categories':[{'name':'Educa\u00e7\u00e3o','id':181,'slug':'educacao','image':null}],'image':{'url':'/image_uploads/dialoga/0000/0134/Ensino_tecnico.jpg'},'setting':{'color':'#d0e0e3','moderate_comments':false,'comment_paragraph_plugin_activate':false,'author_name':'Ronald Emerson Scherolt da Costa','allow_members_to_edit':false},'position':10},{'id':103472,'abstract':'\u003Cp\u003EPol\u00edcia Federal, Pol\u00edcia Rodovi\u00e1ria Federal e For\u00e7a Nacional de Seguran\u00e7a P\u00fablica.\u003C/p\u003E','title':'For\u00e7as Federais de Seguran\u00e7a','categories':[{'name':'Seguran\u00e7a P\u00fablica','id':182,'slug':'seguranca-publica','image':null}],'image':{'url':'/image_uploads/dialoga/0000/0031/federais2.png'},'setting':{'color':'','moderate_comments':false,'comment_paragraph_plugin_activate':false,'author_name':'Ronald Emerson Scherolt da Costa','allow_members_to_edit':false},'position':16},{'id':103612,'abstract':'\u003Cp\u003EGarantir \u00e1gua para beber e produzir.\u003C/p\u003E','title':'Cisternas','categories':[{'name':'Redu\u00e7\u00e3o da Pobreza','id':183,'slug':'reducao-da-pobreza','image':null}],'image':{'url':'/image_uploads/dialoga/0000/0039/cisterna_redim.jpg'},'setting':{'color':'#0000ff','moderate_comments':false,'comment_paragraph_plugin_activate':false,'author_name':'Ronald Emerson Scherolt da Costa','allow_members_to_edit':false},'position':20},{'id':103442,'abstract':'\u003Cp\u003EComplemento \u00e0 renda e acompanhamento em educa\u00e7\u00e3o e sa\u00fade.\u003C/p\u003E','title':'Bolsa Fam\u00edlia','categories':[{'name':'Redu\u00e7\u00e3o da Pobreza','id':183,'slug':'reducao-da-pobreza','image':null}],'image':{'url':'/image_uploads/dialoga/0000/0013/bolsa_familia_redim.jpg'},'setting':{'color':'#ff9900','moderate_comments':false,'comment_paragraph_plugin_activate':false,'author_name':'Ronald Emerson Scherolt da Costa','allow_members_to_edit':false},'position':17},{'id':103507,'abstract':'\u003Cp\u003ETecnologia a servi\u00e7o da seguran\u00e7a do cidad\u00e3o.\u003C/p\u003E','title':'Sinesp','categories':[{'name':'Seguran\u00e7a P\u00fablica','id':182,'slug':'seguranca-publica','image':null}],'image':{'url':'/image_uploads/dialoga/0000/0098/sinesp.png'},'setting':{'color':'#00ff00','moderate_comments':false,'comment_paragraph_plugin_activate':false,'author_name':'Ronald Emerson Scherolt da Costa','allow_members_to_edit':false},'position':12},{'id':103683,'abstract':'\u003Cp\u003ESa\u00fade n\u00e3o tem pre\u00e7o.\u003C/p\u003E','title':'Aqui tem Farm\u00e1cia Popular','categories':[{'name':'Sa\u00fade','id':180,'slug':'saude','image':null}],'image':{'url':'/image_uploads/dialoga/0000/0019/saude_nao_tem_preco.jpg'},'setting':{'color':'#e69138','moderate_comments':false,'comment_paragraph_plugin_activate':false,'author_name':'Ronald Emerson Scherolt da Costa','allow_members_to_edit':false},'position':5},{'id':103457,'abstract':'\u003Cp\u003EA\u00e7\u00e3o conjunta e coopera\u00e7\u00e3o transfronteiri\u00e7a.\u003C/p\u003E','title':'Prote\u00e7\u00e3o das Fronteiras','categories':[{'name':'Seguran\u00e7a P\u00fablica','id':182,'slug':'seguranca-publica','image':null}],'image':{'url':'/image_uploads/dialoga/0000/0110/fronteira_redim.jpg'},'setting':{'color':'#a64d79','moderate_comments':false,'comment_paragraph_plugin_activate':false,'author_name':'Ronald Emerson Scherolt da Costa','allow_members_to_edit':false},'position':15},{'id':103494,'abstract':'\u003Cp\u003EDa Educa\u00e7\u00e3o Infantil ao Ensino M\u00e9dio.\u003C/p\u003E','title':'Educa\u00e7\u00e3o B\u00e1sica','categories':[{'name':'Educa\u00e7\u00e3o','id':181,'slug':'educacao','image':null}],'image':{'url':'/image_uploads/dialoga/0000/0076/Educa__o_B_sica.jpg'},'setting':{'color':'#fce5cd','moderate_comments':false,'comment_paragraph_plugin_activate':false,'author_name':'Ronald Emerson Scherolt da Costa','allow_members_to_edit':false},'position':8},{'id':103359,'abstract':'\u003Cp\u003EAcesso a exames e consultas com especialistas.\u003C/p\u003E','title':'Mais Especialidades','categories':[{'name':'Sa\u00fade','id':180,'slug':'saude','image':null}],'image':{'url':'/image_uploads/dialoga/0000/0083/mais_especialidades1.png'},'setting':{'color':'#ea9999','moderate_comments':false,'comment_paragraph_plugin_activate':false,'author_name':'Ronald Emerson Scherolt da Costa','allow_members_to_edit':false},'position':2},{'id':103485,'abstract':'\u003Cp\u003ECaminho para uma educa\u00e7\u00e3o de qualidade.\u003C/p\u003E','title':'Valoriza\u00e7\u00e3o dos Professores','categories':[{'name':'Educa\u00e7\u00e3o','id':181,'slug':'educacao','image':null}],'image':{'url':'/image_uploads/dialoga/0000/0140/valorizacao_professor.jpg'},'setting':{'color':'#ffff00','moderate_comments':false,'comment_paragraph_plugin_activate':false,'author_name':'Ronald Emerson Scherolt da Costa','allow_members_to_edit':false},'position':11},{'id':103416,'abstract':'\u003Cp\u003EEstrutura adequada para atender melhor a popula\u00e7\u00e3o na aten\u00e7\u00e3o b\u00e1sica.\u003C/p\u003E','title':'Melhorar os Postos de Sa\u00fade','categories':[{'name':'Sa\u00fade','id':180,'slug':'saude','image':null}],'image':{'url':'/image_uploads/dialoga/0000/0053/requalif_redim.jpg'},'setting':{'color':'#cc4125','moderate_comments':false,'comment_paragraph_plugin_activate':false,'author_name':'Ronald Emerson Scherolt da Costa','allow_members_to_edit':false},'position':3}]}}); - - ArticleService.getHome(function(result){ - expect(result.article).toBeDefined(); - expect(result.article.title).toEqual('Dialoga Brasil'); - expect(result.article.categories).toBeDefined(); - }); - - httpBackend.flush(); - }); - - // it('should return a list of articles', function() { - - // httpBackend.whenGET('http://login.dialoga.gov.br/api/v1/articles').respond({ - // "articles": [ - // { - // abstract: "Que exista educação continuada permanente dos profissionais!!", - // author: null, - // body: "", - // categories: [], - // children: [], - // created_at: "2015/08/04 16:36:13", - // end_date: null, - // hits: 0, - // id: 120568, - // image: null, - // parent: {id: 103379,…}, - // position: null, - // profile: {identifier: "dialoga", name: "dialoga", id: 19195, created_at: "2015/04/15 09:38:36", image: null}, - // setting: {comment_paragraph_plugin_activate: false, author_name: "estacio"}, - // start_date: null, - // tag_list: [], - // title: "article_f4f4601c-0f36-e90e-d01a-9871f0bd126b", - // votes_against: 0, - // votes_for: 0, - // } - // ] - // }); - - // ArticleService.getList().then(function(result) { - // console.log('result', result); - - // expect(result.data.article).toBeDefined(); - // expect(result.data.article.title).toEqual('Dialoga Brasil'); - - // }); - - // httpBackend.flush(); - // }); - }); -})(); diff --git a/src/app/pages/duvidas/duvidas.controller.js b/src/app/pages/duvidas/duvidas.controller.js index 447654f..9f39434 100644 --- a/src/app/pages/duvidas/duvidas.controller.js +++ b/src/app/pages/duvidas/duvidas.controller.js @@ -6,16 +6,12 @@ .controller('DuvidasPageController', DuvidasPageController); /** @ngInject */ - function DuvidasPageController(ArticleService, $state, $location, $scope, $rootScope, $log) { + function DuvidasPageController(DialogaService, $log) { $log.debug('DuvidasPageController'); var vm = this; - vm.ArticleService = ArticleService; - vm.$state = $state; - vm.$location = $location; - vm.$scope = $scope; - vm.$rootScope = $rootScope; + vm.DialogaService = DialogaService; vm.$log = $log; vm.init(); @@ -24,12 +20,8 @@ DuvidasPageController.prototype.init = function () { var vm = this; - var params = vm.$state.params; - var slug = params.slug; + vm.questions = null; - vm.article = null; - vm.categories = null; - vm.currentCategory = null; vm.loading = true; vm.error = false; @@ -40,12 +32,11 @@ DuvidasPageController.prototype.loadData = function () { var vm = this; - vm.ArticleService.getCategories(function(categories){ - vm.categories = categories; + vm.DialogaService.getQuestions(function(questions){ + vm.questions = questions; }, function (error) { vm.error = error; vm.$log.error(error); }); - }; })(); diff --git a/src/app/pages/inicio/inicio.controller.js b/src/app/pages/inicio/inicio.controller.js index 80f0360..528466c 100644 --- a/src/app/pages/inicio/inicio.controller.js +++ b/src/app/pages/inicio/inicio.controller.js @@ -7,11 +7,11 @@ .controller('InicioPageController', InicioPageController); /** @ngInject */ - function InicioPageController(ArticleService, $rootScope, $sce, $log) { + function InicioPageController(DialogaService, $sce, $log) { var vm = this; // aliases - vm.ArticleService = ArticleService; + vm.DialogaService = DialogaService; vm.$sce = $sce; vm.$log = $log; @@ -24,20 +24,21 @@ vm.error = null; vm.loading = true; - vm.loadHomeArticle(); + + vm.loadData(); }; - InicioPageController.prototype.loadHomeArticle = function() { + InicioPageController.prototype.loadData = function() { var vm = this; - vm.content = vm.ArticleService.getHomeAbstract(); + vm.content = vm.DialogaService.getHomeAbstract(); vm.isCached = !!vm.content; if (vm.isCached) { hideBackground(2000); } - vm.ArticleService.getHome(function(data) { + vm.DialogaService.getHome(function(data) { vm.loading = false; vm.article = data.article; }, function(error) { @@ -52,12 +53,12 @@ // we need handle home content if (vm.isCached) { hideBackground(0); // force to hide - vm.$log.warn('The content already cached. Aborting.'); + vm.$log.debug('The content already cached. Show-it!'); return; } vm.content = vm.handleHomeAbstract(vm.article.abstract); - vm.ArticleService.setHomeAbstract(vm.content); + vm.DialogaService.setHomeAbstract(vm.content); // inject dependencies injectIframeApiJs(); @@ -65,6 +66,7 @@ window.onYouTubePlayerReady = window.onYouTubePlayerReady || onYouTubePlayerReady; }; + // TODO: move this to DialogaService InicioPageController.prototype.handleHomeAbstract = function(abstract) { var vm = this; diff --git a/src/app/pages/programas/programa-content.controller.js b/src/app/pages/programas/programa-content.controller.js index a47a186..0af3c11 100644 --- a/src/app/pages/programas/programa-content.controller.js +++ b/src/app/pages/programas/programa-content.controller.js @@ -6,14 +6,13 @@ .controller('ProgramaContentPageController', ProgramaContentPageController); /** @ngInject */ - function ProgramaContentPageController(ArticleService, $state, $location, $scope, $rootScope, $log) { + function ProgramaContentPageController(DialogaService, $state, $scope, $rootScope, $log) { $log.debug('ProgramaContentPageController'); var vm = this; - vm.ArticleService = ArticleService; + vm.DialogaService = DialogaService; vm.$state = $state; - vm.$location = $location; vm.$scope = $scope; vm.$rootScope = $rootScope; vm.$log = $log; @@ -39,12 +38,15 @@ ProgramaContentPageController.prototype.loadData = function() { var vm = this; - vm.ArticleService.getArticleBySlug(vm.slug, function(article) { + // Get initial data of Program + vm.DialogaService.getProgramBySlug(vm.slug, function(article) { vm.article = article; vm.category = vm.article.categories[0]; + // update the breadcrumb vm.$rootScope.contentTitle = vm.article.title; + // set the banner image with full image path if (!vm.banner) { vm.banner = { src: vm.$rootScope.basePath + vm.article.image.url, @@ -52,6 +54,7 @@ }; } + // Get full data content of Program vm.loadContent(); }, function(error) { @@ -69,12 +72,13 @@ }); }; + // Get full data content of Program ProgramaContentPageController.prototype.loadContent = function() { var vm = this; vm.loading = true; if (!vm.article.body) { - vm.ArticleService.getContentById(vm.article.id, function(data) { + vm.DialogaService.getContentById(vm.article.id, function(data) { vm.article.body = data.article.body; vm.loading = false; }, function(error) { diff --git a/src/app/pages/programas/programa.controller.js b/src/app/pages/programas/programa.controller.js index 16e925f..558c318 100644 --- a/src/app/pages/programas/programa.controller.js +++ b/src/app/pages/programas/programa.controller.js @@ -6,16 +6,12 @@ .controller('ProgramasPageController', ProgramasPageController); /** @ngInject */ - function ProgramasPageController(ArticleService, $state, $location, $scope, $rootScope, $log) { + function ProgramasPageController(DialogaService, $log) { $log.debug('ProgramasPageController'); var vm = this; - vm.ArticleService = ArticleService; - vm.$state = $state; - vm.$location = $location; - vm.$scope = $scope; - vm.$rootScope = $rootScope; + vm.DialogaService = DialogaService; vm.$log = $log; vm.init(); @@ -24,12 +20,10 @@ ProgramasPageController.prototype.init = function () { var vm = this; - var params = vm.$state.params; - var slug = params.slug; - vm.article = null; vm.categories = null; vm.currentCategory = null; + vm.loading = true; vm.error = false; @@ -40,37 +34,11 @@ ProgramasPageController.prototype.loadData = function () { var vm = this; - vm.ArticleService.getCategories(function(categories){ - vm.categories = categories; + vm.DialogaService.getTemas(function(temas){ + vm.categories = temas; }, function (error) { vm.error = error; vm.$log.error(error); }); - - // vm.ArticleService.getArticleBySlug(slug, function(article){ - // vm.article = article; - // vm.currentCategory = vm.article.categories[0]; - - // // load proposals - // // vm.ArticleService.getRandomProposal(program.id, function(proposal){ - // // vm.article.proposal = proposal; - // // }, function (error){ - // // vm.$log.error(error); - // // }); - - // // load events - // // vm.ArticleService.getEvents(program.id, function(proposal){ - // // vm.article.proposal = proposal; - // // }, function (error){ - // // vm.$log.error(error); - // // }); - - // }, function (error) { - // vm.error = error; - // vm.$log.error(error); - // vm.$log.info('Rollback to home page.'); - // vm.$state.go('inicio', {}, {location: true}); - // }); - }; })(); diff --git a/src/app/pages/propostas/propostas.controller.js b/src/app/pages/propostas/propostas.controller.js index dc2d586..13beabb 100644 --- a/src/app/pages/propostas/propostas.controller.js +++ b/src/app/pages/propostas/propostas.controller.js @@ -6,16 +6,12 @@ .controller('PropostasPageController', PropostasPageController); /** @ngInject */ - function PropostasPageController(ArticleService, $state, $location, $scope, $rootScope, $log) { + function PropostasPageController(DialogaService, $log) { $log.debug('PropostasPageController'); var vm = this; - vm.ArticleService = ArticleService; - vm.$state = $state; - vm.$location = $location; - vm.$scope = $scope; - vm.$rootScope = $rootScope; + vm.DialogaService = DialogaService; vm.$log = $log; vm.init(); @@ -24,9 +20,6 @@ PropostasPageController.prototype.init = function () { var vm = this; - var params = vm.$state.params; - var slug = params.slug; - vm.article = null; vm.categories = null; vm.currentCategory = null; @@ -40,7 +33,7 @@ PropostasPageController.prototype.loadData = function () { var vm = this; - vm.ArticleService.getCategories(function(categories){ + vm.DialogaService.getCategories(function(categories){ vm.categories = categories; }, function (error) { vm.error = error; -- libgit2 0.21.2