From e1378aeaa849181675b4895f9d5e05ccb872cd07 Mon Sep 17 00:00:00 2001 From: Leonardo Merlin Date: Thu, 20 Aug 2015 00:04:54 -0300 Subject: [PATCH] Refact: 'partials' are now 'pages'. Everything that is used to handle the page behaviour (and is not a component). --- src/app/index.route.js | 62 +++++++++++++++++++++++++++++++------------------------------- src/app/pages/article/article.controller.js | 50 ++++++++++++++++++++++++++++++++++++++++++++++++++ src/app/pages/article/article.controller.spec.js | 15 +++++++++++++++ src/app/pages/article/article.html | 24 ++++++++++++++++++++++++ src/app/pages/article/article.service.js | 129 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ src/app/pages/article/article.service.spec.js | 68 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ src/app/pages/auth/auth.controller.js | 44 ++++++++++++++++++++++++++++++++++++++++++++ src/app/pages/auth/auth.scss | 63 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ src/app/pages/auth/signin.html | 38 ++++++++++++++++++++++++++++++++++++++ src/app/pages/auth/signup.html | 58 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ src/app/pages/footer/footer.html | 9 +++++++++ src/app/pages/footer/footer.scss | 21 +++++++++++++++++++++ src/app/pages/header/header.html | 26 ++++++++++++++++++++++++++ src/app/pages/header/header.scss | 0 src/app/pages/inicio/inicio.controller.js | 152 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ src/app/pages/inicio/inicio.controller.spec.js | 15 +++++++++++++++ src/app/pages/inicio/inicio.html | 33 +++++++++++++++++++++++++++++++++ src/app/pages/inicio/inicio.scss | 85 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ src/app/pages/programas/programa.controller.js | 91 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ src/app/pages/programas/programa.html | 39 +++++++++++++++++++++++++++++++++++++++ src/app/pages/programas/programas.scss | 27 +++++++++++++++++++++++++++ src/app/partials/article/article.controller.js | 50 -------------------------------------------------- src/app/partials/article/article.controller.spec.js | 15 --------------- src/app/partials/article/article.html | 24 ------------------------ src/app/partials/article/article.service.js | 129 --------------------------------------------------------------------------------------------------------------------------------- src/app/partials/article/article.service.spec.js | 68 -------------------------------------------------------------------- src/app/partials/auth/auth.controller.js | 44 -------------------------------------------- src/app/partials/auth/auth.scss | 63 --------------------------------------------------------------- src/app/partials/auth/signin.html | 38 -------------------------------------- src/app/partials/auth/signup.html | 58 ---------------------------------------------------------- src/app/partials/footer/footer.html | 9 --------- src/app/partials/footer/footer.scss | 21 --------------------- src/app/partials/header/header.html | 26 -------------------------- src/app/partials/header/header.scss | 0 src/app/partials/inicio/inicio.controller.js | 152 -------------------------------------------------------------------------------------------------------------------------------------------------------- src/app/partials/inicio/inicio.controller.spec.js | 15 --------------- src/app/partials/inicio/inicio.html | 33 --------------------------------- src/app/partials/inicio/inicio.scss | 85 ------------------------------------------------------------------------------------- src/app/partials/programas/programa.controller.js | 91 ------------------------------------------------------------------------------------------- src/app/partials/programas/programa.html | 39 --------------------------------------- src/app/partials/programas/programas.scss | 27 --------------------------- 41 files changed, 1018 insertions(+), 1018 deletions(-) create mode 100644 src/app/pages/article/article.controller.js create mode 100644 src/app/pages/article/article.controller.spec.js create mode 100644 src/app/pages/article/article.html create mode 100644 src/app/pages/article/article.service.js create mode 100644 src/app/pages/article/article.service.spec.js create mode 100644 src/app/pages/auth/auth.controller.js create mode 100644 src/app/pages/auth/auth.scss create mode 100644 src/app/pages/auth/signin.html create mode 100644 src/app/pages/auth/signup.html create mode 100644 src/app/pages/footer/footer.html create mode 100644 src/app/pages/footer/footer.scss create mode 100644 src/app/pages/header/header.html create mode 100644 src/app/pages/header/header.scss create mode 100644 src/app/pages/inicio/inicio.controller.js create mode 100644 src/app/pages/inicio/inicio.controller.spec.js create mode 100644 src/app/pages/inicio/inicio.html create mode 100644 src/app/pages/inicio/inicio.scss create mode 100644 src/app/pages/programas/programa.controller.js create mode 100644 src/app/pages/programas/programa.html create mode 100644 src/app/pages/programas/programas.scss delete mode 100644 src/app/partials/article/article.controller.js delete mode 100644 src/app/partials/article/article.controller.spec.js delete mode 100644 src/app/partials/article/article.html delete mode 100644 src/app/partials/article/article.service.js delete mode 100644 src/app/partials/article/article.service.spec.js delete mode 100644 src/app/partials/auth/auth.controller.js delete mode 100644 src/app/partials/auth/auth.scss delete mode 100644 src/app/partials/auth/signin.html delete mode 100644 src/app/partials/auth/signup.html delete mode 100644 src/app/partials/footer/footer.html delete mode 100644 src/app/partials/footer/footer.scss delete mode 100644 src/app/partials/header/header.html delete mode 100644 src/app/partials/header/header.scss delete mode 100644 src/app/partials/inicio/inicio.controller.js delete mode 100644 src/app/partials/inicio/inicio.controller.spec.js delete mode 100644 src/app/partials/inicio/inicio.html delete mode 100644 src/app/partials/inicio/inicio.scss delete mode 100644 src/app/partials/programas/programa.controller.js delete mode 100644 src/app/partials/programas/programa.html delete mode 100644 src/app/partials/programas/programas.scss 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 @@ +
+
+
+
+

Identifique-se

+
+
+ +
+
+ +
+
+
+ +
+
+ +
+
+
+ +
+
+
+
+
+
+
+
+
+
+
+ +
+
+
+
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 = '