diff --git a/src/app/index.route.js b/src/app/index.route.js
index fb581fd..53b2069 100644
--- a/src/app/index.route.js
+++ b/src/app/index.route.js
@@ -12,74 +12,74 @@
url: '/?limite&tema',
reloadOnSearch: false,
views: {
- 'header': { templateUrl: 'app/partials/header/header.html' },
+ 'header': { templateUrl: 'app/pages/header/header.html' },
'main': {
- templateUrl: 'app/partials/inicio/inicio.html',
- controller: 'InicioController',
- controllerAs: 'inicio'
+ templateUrl: 'app/pages/inicio/inicio.html',
+ controller: 'InicioPageController',
+ controllerAs: 'pageInicio'
},
- 'footer': { templateUrl: 'app/partials/footer/footer.html' }
+ 'footer': { templateUrl: 'app/pages/footer/footer.html' }
}
})
.state('entrar', {
url: '/entrar',
views: {
- 'header': { templateUrl: 'app/partials/header/header.html' },
+ 'header': { templateUrl: 'app/pages/header/header.html' },
'main': {
- templateUrl: 'app/partials/auth/signin.html',
- controller: 'AuthController',
- controllerAs: 'signin'
+ templateUrl: 'app/pages/auth/signin.html',
+ controller: 'AuthPageController',
+ controllerAs: 'pageSignin'
},
- 'footer': { templateUrl: 'app/partials/footer/footer.html' }
+ 'footer': { templateUrl: 'app/pages/footer/footer.html' }
}
})
.state('cadastrar', {
url: '/cadastrar',
views: {
- 'header': { templateUrl: 'app/partials/header/header.html' },
+ 'header': { templateUrl: 'app/pages/header/header.html' },
'main': {
- templateUrl: 'app/partials/auth/signup.html',
- controller: 'AuthController',
- controllerAs: 'signup'
+ templateUrl: 'app/pages/auth/signup.html',
+ controller: 'AuthPageController',
+ controllerAs: 'pageSignup'
},
- 'footer': { templateUrl: 'app/partials/footer/footer.html' }
+ 'footer': { templateUrl: 'app/pages/footer/footer.html' }
}
})
.state('programa', {
url: '/programa/:slug',
views: {
- 'header': { templateUrl: 'app/partials/header/header.html' },
+ 'header': { templateUrl: 'app/pages/header/header.html' },
'main': {
- templateUrl: 'app/partials/programas/programa.html',
- controller: 'ProgramaController',
- controllerAs: 'programa'
+ templateUrl: 'app/pages/programas/programa.html',
+ controller: 'ProgramaPageController',
+ controllerAs: 'pagePrograma'
},
- 'footer': { templateUrl: 'app/partials/footer/footer.html' }
+ 'footer': { templateUrl: 'app/pages/footer/footer.html' }
}
})
.state('sobre', {
url: '/sobre',
views: {
- 'header': { templateUrl: 'app/partials/header/header.html' },
+ 'header': { templateUrl: 'app/pages/header/header.html' },
'main': {
- templateUrl: 'app/partials/article/article.html',
- controller: 'ArticleController',
- controllerAs: 'article'
+ templateUrl: 'app/pages/article/article.html',
+ controller: 'ArticlePageController',
+ controllerAs: 'pageArticle'
},
- 'footer': { templateUrl: 'app/partials/footer/footer.html' }
+ 'footer': { templateUrl: 'app/pages/footer/footer.html' }
}
})
.state('termos-de-uso', {
url: '/termos-de-uso',
- controller: 'ArticleController',
+ controller: 'ArticlePageController',
views: {
- 'header': { templateUrl: 'app/partials/header/header.html' },
+ 'header': { templateUrl: 'app/pages/header/header.html' },
'main': {
- templateUrl: 'app/partials/article/article.html',
- controller: 'ArticleController',
- controllerAs: 'article'
+ templateUrl: 'app/pages/article/article.html',
+ controller: 'ArticlePageController',
+ controllerAs: 'pageArticle'
},
- 'footer': { templateUrl: 'app/partials/footer/footer.html' }
+ 'footer': { templateUrl: 'app/pages/footer/footer.html' }
}
})
;
diff --git a/src/app/pages/article/article.controller.js b/src/app/pages/article/article.controller.js
new file mode 100644
index 0000000..c8f148b
--- /dev/null
+++ b/src/app/pages/article/article.controller.js
@@ -0,0 +1,50 @@
+(function() {
+ 'use strict';
+
+ angular
+ .module('dialoga')
+ .controller('ArticlePageController', ArticlePageController);
+
+ /** @ngInject */
+ function ArticlePageController(ArticleService, $state, $sce, $log) {
+ $log.debug('ArticlePageController');
+
+ var vm = this;
+ vm.ArticleService = ArticleService;
+ vm.$state = $state;
+ vm.$sce = $sce;
+ vm.$log = $log;
+
+ vm.init();
+ }
+
+ ArticlePageController.prototype.init = function() {
+ var vm = this;
+
+ vm.page = vm.$state.current.name;
+ vm.article = null;
+ vm.loading = true;
+ switch (vm.page){
+ case 'sobre':
+ vm.ArticleService.getAbout(handleSuccess, handleError);
+ break;
+ case 'termos-de-uso':
+ vm.ArticleService.getTerms(handleSuccess, handleError);
+ break;
+ default:
+ vm.$log.warn('Page not handled:', vm.page);
+ break;
+ }
+
+ function handleSuccess (data) {
+ vm.loading = false;
+ vm.article = data.article;
+ // vm.article.body = vm.$sce.trustAsHtml(vm.article.body);
+ }
+
+ function handleError (error) {
+ vm.loading = false;
+ vm.error = error;
+ }
+ };
+})();
diff --git a/src/app/pages/article/article.controller.spec.js b/src/app/pages/article/article.controller.spec.js
new file mode 100644
index 0000000..32746ac
--- /dev/null
+++ b/src/app/pages/article/article.controller.spec.js
@@ -0,0 +1,15 @@
+(function() {
+ 'use strict';
+
+ describe('controllers', function(){
+
+ beforeEach(module('dialoga'));
+
+ // it('should define more than 5 awesome things', inject(function($controller) {
+ // var vm = $controller('SobreController');
+
+ // // expect(angular.isArray(vm.awesomeThings)).toBeTruthy();
+ // // expect(vm.awesomeThings.length > 5).toBeTruthy();
+ // }));
+ });
+})();
diff --git a/src/app/pages/article/article.html b/src/app/pages/article/article.html
new file mode 100644
index 0000000..4996223
--- /dev/null
+++ b/src/app/pages/article/article.html
@@ -0,0 +1,24 @@
+
+
{{::pageArticle.page}}
+
+
+
+ Carregando conteúdo...
+
+
+
+
+
+ Erro ao carregar conteúdo.
+
+
+
+
+
+
+ {{::pageArticle.pageArticle.title}}
+
+
+
+
+
diff --git a/src/app/pages/article/article.service.js b/src/app/pages/article/article.service.js
new file mode 100644
index 0000000..f70c788
--- /dev/null
+++ b/src/app/pages/article/article.service.js
@@ -0,0 +1,129 @@
+(function() {
+ 'use strict';
+
+ angular
+ .module('dialoga')
+ .factory('ArticleService', ArticleService);
+
+ /** @ngInject */
+ function ArticleService($http, $q, $rootScope, UtilService, Slug, $log) {
+ $log.debug('ArticleService');
+
+ var idArticleHome = '103358';
+ var idArticleAbout = '108073';
+ var idArticleTerms = '107880';
+
+ var _savedAbstract = null;
+
+ var service = {
+ apiArticles: $rootScope.basePath + '/api/v1/articles/',
+ getHome: getHome,
+ getAbout: getAbout,
+ getTerms: getTerms,
+ getArticleById: getArticleById,
+ getArticleBySlug: getArticleBySlug,
+ 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 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 getHome (cbSuccess, cbError) {
+ return getArticleById(idArticleHome, {
+ fields: 'id,children,categories,abstract,title,image,url,setting,position',
+ private_token: 'null'
+ }, _handleCategoryColors(cbSuccess), cbError);
+ }
+
+ function getAbout (cbSuccess, cbError) {
+ return getArticleById(idArticleAbout, {}, cbSuccess, cbError);
+ }
+
+ function getTerms (cbSuccess, cbError) {
+ return getArticleById(idArticleTerms, {}, cbSuccess, cbError);
+ }
+
+ function _handleCategoryColors (cbSuccess) {
+ // var darkFactor = 0.15;
+
+ return function (data) {
+ // if(data.article.categories){
+ // var categories = data.article.categories;
+
+ // 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
new file mode 100644
index 0000000..f914b91
--- /dev/null
+++ b/src/app/pages/article/article.service.spec.js
@@ -0,0 +1,68 @@
+(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().then(function(result) {
+
+ expect(result.article).toBeDefined();
+ expect(result.article.title).toEqual('Dialoga Brasil');
+
+ });
+
+ 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/auth/auth.controller.js b/src/app/pages/auth/auth.controller.js
new file mode 100644
index 0000000..b5e70c7
--- /dev/null
+++ b/src/app/pages/auth/auth.controller.js
@@ -0,0 +1,44 @@
+(function () {
+ 'use strict';
+
+ angular
+ .module('dialoga')
+ .controller('AuthPageController', AuthPageController);
+
+ /** @ngInject */
+ function AuthPageController($rootScope, AUTH_EVENTS, AuthService, Session, $log) {
+ $log.debug('AuthPageController');
+
+ var vm = this;
+
+ vm.$rootScope = $rootScope;
+ vm.AUTH_EVENTS = AUTH_EVENTS;
+ vm.AuthService = AuthService;
+ vm.Session = Session;
+ vm.$log = $log;
+
+ vm.init();
+ }
+
+ AuthPageController.prototype.init = function() {
+ var vm = this;
+
+ // init variables
+ vm.credentials = {};
+
+ // attach events
+
+ // ...
+ };
+
+ AuthPageController.prototype.login = function(credentials) {
+ var vm = this;
+
+ vm.AuthService.login(credentials).then(function(/*user*/) {
+ // handle view
+ }, function() {
+ // handle view
+ });
+ };
+
+})();
diff --git a/src/app/pages/auth/auth.scss b/src/app/pages/auth/auth.scss
new file mode 100644
index 0000000..391342d
--- /dev/null
+++ b/src/app/pages/auth/auth.scss
@@ -0,0 +1,63 @@
+.auth-content{
+
+ .btn-social {
+ color: #fff;
+ font-weight: bold;
+
+ &:hover,
+ &:focus {color: #fff;}
+
+ &.btn-facebook {
+ background-color: #33477a;
+ &:hover,
+ &:focus {background-color: #304373; }
+ &:active {background-color: #33477a; }
+ }
+ &.btn-google-plus {
+ background-color: #b92d25;
+ &:hover,
+ &:focus {background-color: #b12b23; }
+ &:active {background-color: #b92d25; }
+ }
+ }
+
+ .btn {
+ .contraste & {
+ color: #fff;
+ }
+ }
+ .btn-primary {
+ .contraste & {
+ background-color: #262626;
+ border-color: #666;
+ }
+ }
+
+ .glyphicon {
+ &.icon-white {
+ fill: white;
+ }
+ }
+
+ .separator-or {
+ border-top: 2px solid #d8d8d8;
+ text-align: center;
+ font-weight: bold;
+
+ &:after {
+ content: "ou";
+ position: absolute;
+ top: 4px;
+ left: 50%;
+ margin-left: -26px;
+ font-size: 30px;
+ line-height: 30px;
+ padding: 0 0.25em;
+ background: $gray;
+
+ .contraste & {
+ background: #000;
+ }
+ }
+ }
+}
diff --git a/src/app/pages/auth/signin.html b/src/app/pages/auth/signin.html
new file mode 100644
index 0000000..1aed6be
--- /dev/null
+++ b/src/app/pages/auth/signin.html
@@ -0,0 +1,38 @@
+
diff --git a/src/app/pages/auth/signup.html b/src/app/pages/auth/signup.html
new file mode 100644
index 0000000..ce91036
--- /dev/null
+++ b/src/app/pages/auth/signup.html
@@ -0,0 +1,58 @@
+
+
+
+
+
+
+
+
+
+
+
+
Cadastro
+
Cadastre-se para fazer parte do Dialoga Brasil, interagir com as propostas e enviar as suas!
+
+
+
+
+
+
+
+
+
Conecte-se por redes sociais
+
+
+
+
+
+
+
+
+
+
+
+
Faça o cadastro abaixo
+
+
+
+
diff --git a/src/app/pages/footer/footer.html b/src/app/pages/footer/footer.html
new file mode 100644
index 0000000..198ad27
--- /dev/null
+++ b/src/app/pages/footer/footer.html
@@ -0,0 +1,9 @@
+
diff --git a/src/app/pages/footer/footer.scss b/src/app/pages/footer/footer.scss
new file mode 100644
index 0000000..481c62c
--- /dev/null
+++ b/src/app/pages/footer/footer.scss
@@ -0,0 +1,21 @@
+$barra-theme: ("green": #00420c, "yellow": #2c66ce, "blue": #0042b1);
+
+#footer-brasil {
+ background: none repeat scroll 0% 0% map-get($barra-theme, "blue");
+ padding: 1em 0px;
+ max-width: 100%;
+}
+
+#footer {
+ padding: 20px 0;
+ a {
+ margin: 10px auto;
+ }
+
+ .contraste & {
+ background-color: #000;
+ a {
+ color: #fff;
+ }
+ }
+}
diff --git a/src/app/pages/header/header.html b/src/app/pages/header/header.html
new file mode 100644
index 0000000..80c0cdd
--- /dev/null
+++ b/src/app/pages/header/header.html
@@ -0,0 +1,26 @@
+
diff --git a/src/app/pages/header/header.scss b/src/app/pages/header/header.scss
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/src/app/pages/header/header.scss
diff --git a/src/app/pages/inicio/inicio.controller.js b/src/app/pages/inicio/inicio.controller.js
new file mode 100644
index 0000000..633ca88
--- /dev/null
+++ b/src/app/pages/inicio/inicio.controller.js
@@ -0,0 +1,152 @@
+/* globals document:true, window:true */
+(function() {
+ 'use strict';
+
+ angular
+ .module('dialoga')
+ .controller('InicioPageController', InicioPageController);
+
+ /** @ngInject */
+ function InicioPageController(ArticleService, $sce, $log) {
+ var vm = this;
+
+ // aliases
+ vm.ArticleService = ArticleService;
+ vm.$sce = $sce;
+ vm.$log = $log;
+
+ vm.init();
+ vm.$log.debug('InicioPageController');
+ }
+
+ InicioPageController.prototype.init = function() {
+ var vm = this;
+
+ vm.error = null;
+ vm.loading = true;
+ vm.loadHomeArticle();
+ };
+
+ InicioPageController.prototype.loadHomeArticle = function() {
+ var vm = this;
+
+ vm.content = vm.ArticleService.getHomeAbstract();
+ vm.isCached = !!vm.content;
+
+ if (vm.isCached) {
+ hideBackground(2000);
+ }
+
+ vm.ArticleService.getHome(function(data) {
+ vm.loading = false;
+ vm.article = data.article;
+ }, function(error) {
+ vm.$log.error('Error on getHome article.', error);
+ vm.error = 'Erro ao carregar o conteúdo principal.';
+ });
+ };
+
+ InicioPageController.prototype.showVideo = function() {
+ var vm = this;
+
+ // we need handle home content
+ if (vm.isCached) {
+ hideBackground(0); // force to hide
+ vm.$log.warn('The content already cached. Aborting.');
+ return;
+ }
+
+ vm.content = vm.handleHomeAbstract(vm.article.abstract);
+ vm.ArticleService.setHomeAbstract(vm.content);
+
+ // inject dependencies
+ injectIframeApiJs();
+ window.onYouTubeIframeAPIReady = window.onYouTubeIframeAPIReady || onYouTubeIframeAPIReady;
+ window.onYouTubePlayerReady = window.onYouTubePlayerReady || onYouTubePlayerReady;
+ };
+
+ InicioPageController.prototype.handleHomeAbstract = function(abstract) {
+ var vm = this;
+
+ abstract = forceIframeParams(abstract);
+ abstract = removeStylefromIframe(abstract);
+
+ return vm.$sce.trustAsHtml(abstract);
+ };
+
+ function injectIframeApiJs() {
+ var tag = document.createElement('script');
+ tag.src = 'https://www.youtube.com/iframe_api';
+
+ var firstScriptTag = document.getElementsByTagName('script')[0];
+ firstScriptTag.parentNode.insertBefore(tag, firstScriptTag);
+ }
+
+ function onYouTubeIframeAPIReady() {
+ var ytIframe = angular.element.find('.js-iframe iframe');
+ var YTPlayer = window.YT.Player;
+ new YTPlayer(ytIframe[0], {
+ events: {
+ 'onReady': onYouTubePlayerReady
+ }
+ });
+ }
+
+ function onYouTubePlayerReady (event) {
+ event.target.playVideo();
+ hideBackground(1000);
+ }
+
+ function hideBackground (ms) {
+ var $elBg = angular.element.find('.video-background');
+ angular.element($elBg).fadeOut(ms || 100);
+ // angular.element($elBg).hide();
+ }
+
+ function forceIframeParams(abstract) {
+ var patternIframe = '