Commit 3e5d02436a8d8eb1c0a46a9235b8bcd91c5c31ad

Authored by Leandro Santos
1 parent b55cc09c

adding requirejs to application

README.txt 0 → 100644
... ... @@ -0,0 +1,6 @@
  1 +CSS Files
  2 + - hover for Float Shadow in categories buttons
  3 + -
  4 +
  5 +JS Files
  6 + - Custom Jquery UI for autocomplete on search,
... ...
index.html
... ... @@ -47,17 +47,6 @@
47 47 return url;
48 48 }
49 49  
50   - function loadJavaScriptSync(file_path){
51   - var head = document.getElementsByTagName('head')[0];
52   - var script_element = document.createElement('script');
53   - script_element.type = 'text/javascript';
54   - var req = new XMLHttpRequest();
55   - req.open('GET', file_path, false); // 'false': synchronous.
56   - req.send(null);
57   - script_element.text = req.responseText;
58   - head.appendChild(script_element);
59   - }
60   -
61 50 function loadJavaScriptAsync(file_path){
62 51 var head = document.getElementsByTagName('head')[0];
63 52 var script_element = document.createElement('script');
... ... @@ -66,30 +55,10 @@
66 55 head.appendChild(script_element);
67 56 }
68 57  
69   - function loadJSFiles(){
70   - var js_files = [
71   - 'js/jquery-2.1.3.min.js',
72   - 'js/jquery-ui-1.11.4.custom/jquery-ui.min.js',
73   - 'js/jquery.cookie.js',
74   - 'js/handlebars-v3.0.1.js',
75   - 'js/handlebars-helpers.js',
76   - 'js/jquery.dotdotdot.min.js',
77   - 'js/jquery.maxlength.min.js',
78   - 'js/layout.js',
79   - 'js/main.js'
80   - ];
81   -
82   - var file_path = '';
83   - for(i = 0; i < js_files.length; i++){
84   - file_path = makeJSURL(js_files[i]);
85   - if(file_path.match('layout.js') || file_path.match('main.js')){
86   - loadJavaScriptAsync(file_path);
87   - }else{
88   - loadJavaScriptSync(file_path);
89   - }
90   - }
  58 + function loadRequireJS(){
  59 + loadJavaScriptAsync(makeJSURL('js/require.js'));
91 60 }
92   -
  61 + loadRequireJS();
93 62 loadCSSFiles();
94 63 </script>
95 64  
... ... @@ -332,8 +301,50 @@
332 301 </form>
333 302 </script>
334 303  
335   - <script type="text/javascript">
336   - loadJSFiles();
  304 + <script type='text/javascript'>
  305 + var base = window.location.href;
  306 + var host = window.location.host;
  307 + var regex = new RegExp(".*" + host + '/', "g");
  308 + if(host){
  309 + base = base.replace(regex,'');
  310 + }else{
  311 + base = base.replace('index.html','');
  312 + }
  313 +
  314 + require.config({
  315 + baseUrl: ( base + '/js/'),
  316 + paths: {
  317 + jquery: 'jquery-2.1.3.min',
  318 + jquery_ui: 'jquery-ui-1.11.4.custom/jquery-ui.min',
  319 + jquery_cookie: 'jquery.cookie',
  320 + handlebars: 'handlebars-v3.0.1',
  321 + handlebars_helpers: 'handlebars-helpers',
  322 + dotdotdot: 'jquery.dotdotdot.min',
  323 + jquery_maxlength: 'jquery.maxlength.min',
  324 + layout: 'layout',
  325 + main: 'main'
  326 + },
  327 + shim: {
  328 + 'jquery_ui': {
  329 + deps: ['jquery']
  330 + },
  331 + 'dotdotdot': {
  332 + deps: ['jquery']
  333 + },
  334 + 'layout': {
  335 + deps: ['jquery']
  336 + },
  337 + 'jquery_maxlength': {
  338 + deps: ['jquery']
  339 + },
  340 + 'handlebars_helpers':{
  341 + deps: ['handlebars']
  342 + }
  343 + }
  344 + });
  345 +
  346 + requirejs(['jquery', 'jquery_ui', 'jquery_cookie', 'handlebars', 'handlebars_helpers']);
  347 + requirejs(['dotdotdot', 'jquery_maxlength', 'layout', 'main']);
337 348 </script>
338 349  
339 350 </body>
... ...
js/handlebars-helpers.js
1   -Handlebars.registerHelper('link', function(text, url) {
2   - text = Handlebars.Utils.escapeExpression(text);
3   - url = Handlebars.Utils.escapeExpression(url);
  1 +define(['handlebars'], function(Handlebars){
4 2  
5   - // Exemplo: <a href="#/programas/{{id}}" class="proposal-link" data-target="">{{name}}</a>
6   - var result = '<a href="#/programas/' + url + '" data-target="proposal-item-' + url + '" class="proposal-link">' + text + '</a>';
7   -
8   - return new Handlebars.SafeString(result);
9   -});
10   -
11   -Handlebars.registerHelper('list_proposal', function(proposals, options) {
12   -
13   - var ret = "";
14   - for(var i=0, j=proposals.length; i<j; i++) {
15   - var proposal = proposals[i];
16   -
17   - element = '<li class="proposal-item">' +
18   - '<a href="#/programas/'+proposal.id+'" data-target="proposal-item-'+proposal.id+'" class="proposal-link">' +
19   - '<div class="item">' +
20   - '' + proposal.title;
21   - category = "<ul class='category'>";
22   -
23   -
24   - for(var x=0, y=proposal.categories.length; x<y; x++) {
25   - if((options.hash['category'] != null) && (options.hash['category'] != proposal.categories[x].slug)){
26   - element = '';
  3 + Handlebars.registerHelper('link', function(text, url) {
  4 + text = Handlebars.Utils.escapeExpression(text);
  5 + url = Handlebars.Utils.escapeExpression(url);
  6 +
  7 + // Exemplo: <a href="#/programas/{{id}}" class="proposal-link" data-target="">{{name}}</a>
  8 + var result = '<a href="#/programas/' + url + '" data-target="proposal-item-' + url + '" class="proposal-link">' + text + '</a>';
  9 +
  10 + return new Handlebars.SafeString(result);
  11 + });
  12 +
  13 + Handlebars.registerHelper('list_proposal', function(proposals, options) {
  14 +
  15 + var ret = "";
  16 + for(var i=0, j=proposals.length; i<j; i++) {
  17 + var proposal = proposals[i];
  18 +
  19 + element = '<li class="proposal-item">' +
  20 + '<a href="#/programas/'+proposal.id+'" data-target="proposal-item-'+proposal.id+'" class="proposal-link">' +
  21 + '<div class="item">' +
  22 + '' + proposal.title;
  23 + category = "<ul class='category'>";
  24 +
  25 +
  26 + for(var x=0, y=proposal.categories.length; x<y; x++) {
  27 + if((options.hash['category'] != null) && (options.hash['category'] != proposal.categories[x].slug)){
  28 + element = '';
  29 + continue;
  30 + }
  31 + category = category + '<li class="category-'+proposal.categories[x].slug+'">' + proposal.categories[x].name + '</li>';
  32 + }
  33 + if(element == ''){
27 34 continue;
28   - }
29   - category = category + '<li class="category-'+proposal.categories[x].slug+'">' + proposal.categories[x].name + '</li>';
  35 + }
  36 + category = category + '</ul>';
  37 + // element = element + options.fn(proposal);
  38 + element = element + (proposal.abstract ? proposal.abstract : '');
  39 +
  40 + element = element + category;
  41 + ret = ret + element + '</div></a></li>';
30 42 }
31   - if(element == ''){
32   - continue;
  43 + return ret;
  44 + });
  45 +
  46 + Handlebars.registerHelper('proposal_detail', function(proposals, options) {
  47 + var ret = "";
  48 + for(var i=0, j=proposals.length; i<j; i++) {
  49 + ret = ret + "<div class='proposal-detail hide' id='proposal-item-" + proposals[i].id + "'>";
  50 + ret = ret + "<div class='title'>" + proposals[i].title + "</div>";
  51 + ret = ret + "<span>" + proposals[i].body + "</span>";
  52 + ret = ret + '</div>';
33 53 }
34   - category = category + '</ul>';
35   - // element = element + options.fn(proposal);
36   - element = element + (proposal.abstract ? proposal.abstract : '');
37   -
38   - element = element + category;
39   - ret = ret + element + '</div></a></li>';
40   - }
41   - return ret;
42   -});
43   -
44   -Handlebars.registerHelper('proposal_detail', function(proposals, options) {
45   - var ret = "";
46   - for(var i=0, j=proposals.length; i<j; i++) {
47   - ret = ret + "<div class='proposal-detail hide' id='proposal-item-" + proposals[i].id + "'>";
48   - ret = ret + "<div class='title'>" + proposals[i].title + "</div>";
49   - ret = ret + "<span>" + proposals[i].body + "</span>";
50   - ret = ret + '</div>';
51   - }
52   - return ret;
53   -});
54   -
55   -Handlebars.registerHelper('replace', function(string, to_replace, replacement) {
56   - return (string || '').replace(new RegExp(to_replace, 'g'), replacement);
57   -});
58   -
59   -Handlebars.registerHelper('score', function(article) {
60   - return article.votes_for - article.votes_against;
61   -});
62   -
63   -Handlebars.registerHelper('select_proposal', function(proposals, category_slug, selected_id) {
64   - var ret = '<label for="proposal-selection" class="sr-only">Selecione o programa</label>'
65   - ret = ret + '<select id="proposal-selection" name="proposal-selection" title="Selecione o programa" class="proposal-selection">';
66   -
67   - for(var i=0; i<proposals.length; i++) {
68   - if(!proposal_has_category(proposals[i], category_slug)) continue;
69   - var selected = proposals[i].id===selected_id ? "selected" : "";
70   - ret += '<option value="'+proposals[i].id+'" '+selected+'>'+proposals[i].title+'</option>';
  54 + return ret;
  55 + });
  56 +
  57 + Handlebars.registerHelper('replace', function(string, to_replace, replacement) {
  58 + return (string || '').replace(new RegExp(to_replace, 'g'), replacement);
  59 + });
  60 +
  61 + Handlebars.registerHelper('score', function(article) {
  62 + return article.votes_for - article.votes_against;
  63 + });
  64 +
  65 + Handlebars.registerHelper('select_proposal', function(proposals, category_slug, selected_id) {
  66 + var ret = '<label for="proposal-selection" class="sr-only">Selecione o programa</label>'
  67 + ret = ret + '<select id="proposal-selection" name="proposal-selection" title="Selecione o programa" class="proposal-selection">';
  68 +
  69 + for(var i=0; i<proposals.length; i++) {
  70 + if(!proposal_has_category(proposals[i], category_slug)) continue;
  71 + var selected = proposals[i].id===selected_id ? "selected" : "";
  72 + ret += '<option value="'+proposals[i].id+'" '+selected+'>'+proposals[i].title+'</option>';
  73 + }
  74 + ret += '</select>';
  75 + return ret;
  76 + });
  77 +
  78 + Handlebars.registerHelper('trimString', function(passedString, endstring) {
  79 + var theString = passedString.substring(0, endstring);
  80 + return new Handlebars.SafeString(theString)
  81 + });
  82 +
  83 + function proposal_has_category(proposal, category_slug) {
  84 + for(var i=0; i<proposal.categories.length; i++) {
  85 + if(proposal.categories[i].slug == category_slug)
  86 + return true;
  87 + }
  88 + return false;
71 89 }
72   - ret += '</select>';
73   - return ret;
74   -});
75 90  
76   -Handlebars.registerHelper('trimString', function(passedString, endstring) {
77   - var theString = passedString.substring(0, endstring);
78   - return new Handlebars.SafeString(theString)
79 91 });
80   -
81   -function proposal_has_category(proposal, category_slug) {
82   - for(var i=0; i<proposal.categories.length; i++) {
83   - if(proposal.categories[i].slug == category_slug)
84   - return true;
85   - }
86   - return false;
87   -}
... ...
js/main.js
1   -/* global Handlebars, $ */
2   -// The template code
3   -var templateSource = document.getElementById('proposal-template').innerHTML;
  1 +define(['handlebars'], function(Handlebars){
4 2  
5   -// compile the template
6   -var template = Handlebars.compile(templateSource);
7   -var supportProposalTemplate = Handlebars.compile(document.getElementById('support-proposal-template').innerHTML);
8   -var loginTemplate = Handlebars.compile(document.getElementById('login').innerHTML);
9   -var resultsTemplate = Handlebars.compile(document.getElementById('results').innerHTML);
10   -
11   -// The div/container that we are going to display the results in
12   -var resultsPlaceholder = document.getElementById('proposal-result');
13   -
14   -var logged_in = false;
15   -
16   -var loginButton;
17   -
18   -var participa = true;
19   -if(participa){
20   - var host = 'http://www.participa.br';
21   - var private_token = '375bee7e17d0021af7160ce664874618'; //participa
22   - var proposal_discussion = '92856'; //participa
23   -}else{
24   - var host = 'http://noosfero.com:3000';
25   - //var private_token = 'bd8996155f5ea4354e42fee50b4b6891'; //casa
26   - var private_token = '04c9b36cf0afba52915fe86f182e741c'; //local serpro
27   - var proposal_discussion = '632'; //local serpro
28   - //var proposal_discussion = '401'; //casa
29   -}
30   -
31   -// Load data from localhost when it is dev env.
32   -var isLocalhost = (window.location.hostname === 'localhost' || window.location.hostname === '0.0.0.0');
33   -if( isLocalhost ){
34   - var noosferoAPI = '/data.json';
35   -} else {
  3 + /* global Handlebars, $ */
  4 + // The template code
  5 + var templateSource = document.getElementById('proposal-template').innerHTML;
  6 +
  7 + // compile the template
  8 + var template = Handlebars.compile(templateSource);
  9 + var supportProposalTemplate = Handlebars.compile(document.getElementById('support-proposal-template').innerHTML);
  10 + var loginTemplate = Handlebars.compile(document.getElementById('login').innerHTML);
  11 + var resultsTemplate = Handlebars.compile(document.getElementById('results').innerHTML);
  12 +
  13 + // The div/container that we are going to display the results in
  14 + var resultsPlaceholder = document.getElementById('proposal-result');
  15 +
  16 + var logged_in = false;
  17 +
  18 + var loginButton;
  19 +
  20 + var participa = true;
  21 + if(participa){
  22 + var host = 'http://www.participa.br';
  23 + var private_token = '375bee7e17d0021af7160ce664874618'; //participa
  24 + var proposal_discussion = '92856'; //participa
  25 + }else{
  26 + var host = 'http://noosfero.com:3000';
  27 + //var private_token = 'bd8996155f5ea4354e42fee50b4b6891'; //casa
  28 + var private_token = '04c9b36cf0afba52915fe86f182e741c'; //local serpro
  29 + var proposal_discussion = '632'; //local serpro
  30 + //var proposal_discussion = '401'; //casa
  31 + }
  32 +
  33 + // Load data from localhost when it is dev env.
36 34 var noosferoAPI = host + '/api/v1/articles/' + proposal_discussion + '?private_token=' + private_token + '&fields=id,children,categories,abstract,body,title,image,url';
37   -}
38   -
39   -$.getJSON(noosferoAPI)
40   - .done(function( data ) {
41   - data.host = host;
42   - data.private_token = private_token;
43   - resultsPlaceholder.innerHTML = template(data);
44   - $('.login-container').html(loginTemplate());
45   - $('.countdown').maxlength({text: '%left caracteres restantes'});
46   -
47   - navigateTo(window.location.hash);
48   -
49   - //Actions for links
50   - $( '#nav-proposal-categories a' ).on('click touchstart', function(e){
51   - e.preventDefault();
52   -
53   - var $link = $(this);
54   -
55   - // Update URL and Navigate
56   - updateHash($link.attr('href'));
57   - });
58   -
59   - $( '#nav-proposal-group a' ).on('click touchstart', function(e){
60   - e.preventDefault();
61   -
62   - var $link = $(this);
63   -
64   - // Update URL and Navigate
65   - updateHash($link.attr('href'));
66   - });
67   -
68   - $( '.proposal-item a' ).on('click touchstart', function(e){
69   - e.preventDefault();
70   -
71   - var $link = $(this);
72   -
73   - // Update URL and Navigate
74   - updateHash($link.attr('href'));
75   - });
76   -
77   - $( '.proposal-category a' ).on('click touchstart', function(e){
78   - e.preventDefault();
79   -
80   - var $link = $(this);
81   -
82   - // Update URL and Navigate
83   - updateHash($link.attr('href'));
84   - });
85   -
86   - $( '.proposal-category .go-back' ).on('click touchstart', function(e){
87   - e.preventDefault();
88   -
89   - var oldHash = window.location.hash;
90   - var regexSubpages = /sobre-o-programa$/;
91   - var isSubpage = regexSubpages.exec(oldHash) !== null;
92   - var newHash = '#/temas'; // default page
93   -
94   - if(isSubpage){
95   - // return to proposal page
96   - newHash = oldHash.split('/sobre-o-programa')[0];
97   - }
98   -
99   - // Update URL and Navigate
100   - updateHash(newHash);
101   - });
102   -
103   - $( '.send-button a' ).on('click touchstart', function(e){
104   - e.preventDefault();
105   -
106   - //display form to send proposal (or login form for non-logged users)
107   - var $this = $(this);
108   - loginButton = $this.parents('.send-button');
109   - loginButton.hide();
110   - $this.parents('.success-proposal-sent').hide();
111   - loginCallback(logged_in);
112   - });
113   -
114   - $( '#display-contrast' ).on('click touchstart', function(e){
115   - e.preventDefault();
116   - $('#proposal-result').toggleClass('contrast');
117   - });
118   -
119   - $( '.show_body a' ).on('click touchstart', function(e){
120   - e.preventDefault();
121   -
122   - var $link = $(this);
123   -
124   - // Update URL and Navigate
125   - updateHash($link.attr('href'));
126   - });
127   -
128   - $( '.go-to-proposal-button a' ).on('click touchstart', function(e){
129   - e.preventDefault();
130   -
131   - var $link = $(this);
132   -
133   - // Update URL and Navigate
134   - updateHash($link.attr('href'));
135   - });
136   -
137   - $( '.proposal-selection' ).change(function(e){
138   - e.preventDefault();
139   -
140   - display_proposal('proposal-item-' + this.value);
141   - });
142   -
143   - var availableTags = [ ];
144   - $('#proposal-group li a').each(function(){
145   - availableTags.push({ label: $(this).text(), value: $(this).attr('href')});
  35 +
  36 + $.getJSON(noosferoAPI)
  37 + .done(function( data ) {
  38 + data.host = host;
  39 + data.private_token = private_token;
  40 + resultsPlaceholder.innerHTML = template(data);
  41 + $('.login-container').html(loginTemplate());
  42 + $('.countdown').maxlength({text: '%left caracteres restantes'});
  43 +
  44 + navigateTo(window.location.hash);
  45 +
  46 + //Actions for links
  47 + $( '#nav-proposal-categories a' ).on('click touchstart', function(e){
  48 + e.preventDefault();
  49 +
  50 + var $link = $(this);
  51 +
  52 + // Update URL and Navigate
  53 + updateHash($link.attr('href'));
  54 + });
  55 +
  56 + $( '#nav-proposal-group a' ).on('click touchstart', function(e){
  57 + e.preventDefault();
  58 +
  59 + var $link = $(this);
  60 +
  61 + // Update URL and Navigate
  62 + updateHash($link.attr('href'));
  63 + });
  64 +
  65 + $( '.proposal-item a' ).on('click touchstart', function(e){
  66 + e.preventDefault();
  67 +
  68 + var $link = $(this);
  69 +
  70 + // Update URL and Navigate
  71 + updateHash($link.attr('href'));
  72 + });
  73 +
  74 + $( '.proposal-category a' ).on('click touchstart', function(e){
  75 + e.preventDefault();
  76 +
  77 + var $link = $(this);
  78 +
  79 + // Update URL and Navigate
  80 + updateHash($link.attr('href'));
  81 + });
  82 +
  83 + $( '.proposal-category .go-back' ).on('click touchstart', function(e){
  84 + e.preventDefault();
  85 +
  86 + var oldHash = window.location.hash;
  87 + var regexSubpages = /sobre-o-programa$/;
  88 + var isSubpage = regexSubpages.exec(oldHash) !== null;
  89 + var newHash = '#/temas'; // default page
  90 +
  91 + if(isSubpage){
  92 + // return to proposal page
  93 + newHash = oldHash.split('/sobre-o-programa')[0];
  94 + }
  95 +
  96 + // Update URL and Navigate
  97 + updateHash(newHash);
  98 + });
  99 +
  100 + $( '.send-button a' ).on('click touchstart', function(e){
  101 + e.preventDefault();
  102 +
  103 + //display form to send proposal (or login form for non-logged users)
  104 + var $this = $(this);
  105 + loginButton = $this.parents('.send-button');
  106 + loginButton.hide();
  107 + $this.parents('.success-proposal-sent').hide();
  108 + loginCallback(logged_in);
  109 + });
  110 +
  111 + $( '#display-contrast' ).on('click touchstart', function(e){
  112 + e.preventDefault();
  113 + $('#proposal-result').toggleClass('contrast');
  114 + });
  115 +
  116 + $( '.show_body a' ).on('click touchstart', function(e){
  117 + e.preventDefault();
  118 +
  119 + var $link = $(this);
  120 +
  121 + // Update URL and Navigate
  122 + updateHash($link.attr('href'));
  123 + });
  124 +
  125 + $( '.go-to-proposal-button a' ).on('click touchstart', function(e){
  126 + e.preventDefault();
  127 +
  128 + var $link = $(this);
  129 +
  130 + // Update URL and Navigate
  131 + updateHash($link.attr('href'));
  132 + });
  133 +
  134 + $( '.proposal-selection' ).change(function(e){
  135 + e.preventDefault();
  136 +
  137 + display_proposal('proposal-item-' + this.value);
  138 + });
  139 +
  140 + var availableTags = [ ];
  141 + $('#proposal-group li a').each(function(){
  142 + availableTags.push({ label: $(this).text(), value: $(this).attr('href')});
  143 + });
  144 +
  145 + $( '#search-input' ).autocomplete({
  146 + source: availableTags,
  147 + minLength: 3,
  148 + select: function( event, ui ) {
  149 + updateHash(ui.item.value);
  150 + return false;
  151 + },
  152 + appendTo: '#search-input-container',
  153 + messages: {
  154 + noResults: '',
  155 + results: function() {}
  156 + }
  157 + });
  158 +
  159 +
  160 + $('.save-article-form').submit(function (e) {
  161 + e.preventDefault();
  162 + var proposal_id = this.id.split('-').pop();
  163 + var form = this;
  164 + var $form = $(this);
  165 + var message = $(form).find('.message');
  166 + message.hide();
  167 + message.text('');
  168 + $.ajax({
  169 + type: 'post',
  170 + url: host + '/api/v1/articles/' + proposal_id + '/children',
  171 + data: $('#'+this.id).serialize() + '&private_token=' + private_token + '&fields=id&article[name]=article_' + guid()
  172 + })
  173 + .done(function( /*data*/ ) {
  174 + form.reset();
  175 + $form.hide();
  176 + $form.siblings('.success-sent').show();
  177 + })
  178 + .fail(function( jqxhr, textStatus, error ) {
  179 + var err = textStatus + ', ' + error;
  180 + console.log( 'Request Failed: ' + err );
  181 + message.show();
  182 + message.text('Não foi possível enviar.');
  183 + });
  184 + });
  185 +
  186 + })
  187 + .fail(function( jqxhr, textStatus, error ) {
  188 + var err = textStatus + ', ' + error;
  189 + console.log( 'Request Failed: ' + err );
146 190 });
147   -
148   - $( '#search-input' ).autocomplete({
149   - source: availableTags,
150   - minLength: 3,
151   - select: function( event, ui ) {
152   - updateHash(ui.item.value);
153   - return false;
154   - },
155   - appendTo: '#search-input-container',
156   - messages: {
157   - noResults: '',
158   - results: function() {}
  191 +
  192 + function loadRandomProposal(topic_id, private_token) {
  193 + var $noProposals = $('.no-proposals');
  194 + var $loading = $('.loading');
  195 + var $randomProposal = $('.random-proposal');
  196 + var $body = $(document.body);
  197 +
  198 + // reset view
  199 + $noProposals.hide();
  200 + $loading.show();
  201 + $randomProposal.html('');
  202 +
  203 + var url = host + '/api/v1/articles/' + topic_id + '/children' + '?private_token=' + private_token + '&limit=1&order=random()&_='+new Date().getTime()+'&fields=id,name,abstract,created_by&content_type=ProposalsDiscussionPlugin::Proposal';
  204 + $.getJSON(url).done(function( data ) {
  205 + $loading.hide();
  206 +
  207 + if(data.articles.length === 0) {
  208 + $noProposals.show();
  209 + return;
159 210 }
  211 +
  212 + var article = data.articles[0];
  213 + $randomProposal.html(supportProposalTemplate(article));
  214 + $body.off('click', '.vote-actions .skip');
  215 + $body.on('click', '.vote-actions .skip', function(e) {
  216 + loadRandomProposal(topic_id, private_token);
  217 + e.preventDefault();
  218 + });
  219 + $body.off('click', '.vote-actions .like');
  220 + $body.on('click', '.vote-actions .like', function(e) {
  221 + $.ajax({
  222 + type: 'post',
  223 + url: host + '/api/v1/articles/' + article.id + '/vote',
  224 + data: {
  225 + value: $(this).data('vote-value'),
  226 + private_token: private_token
  227 + }
  228 + }).done(function( /*data*/ ) {
  229 + loadRandomProposal(topic_id, private_token);
  230 + });
  231 + e.preventDefault();
  232 + });
  233 +
  234 + $body.off('click', '.vote-result');
  235 + $body.on('click', '.vote-result', function(e) {
  236 +
  237 + var $this = $(this);
  238 + var $proposalDetail = $this.parents('.proposal-detail');
  239 + var $resultsContainer = $proposalDetail.find('.results-container');
  240 +
  241 + // $resultsContainer.toggle();
  242 + // $resultsContainer.toggleClass('hide');
  243 +
  244 + if($resultsContainer.css('display') === 'none') {
  245 +
  246 + $resultsContainer.find('.loading').show();
  247 + $resultsContainer.find('.results-content').hide();
  248 +
  249 + var url = host + '/api/v1/articles/' + topic_id + '/children' + '?private_token=' + private_token + '&limit=10&order=votes_score&fields=id,name,abstract,votes_for,votes_against&content_type=ProposalsDiscussionPlugin::Proposal';
  250 + $.getJSON(url).done(function( data ) {
  251 +
  252 + $resultsContainer.html(resultsTemplate(data));
  253 + $resultsContainer.find('.loading').hide();
  254 + $resultsContainer.find('.results-content').show();
  255 + $resultsContainer.show();
  256 +
  257 + // scroll to the end
  258 + $('html, body').animate({
  259 + scrollTop: $(document).height()
  260 + }, 'fast');
  261 + });
  262 + $('.experience-proposal-container').hide();
  263 + $('.talk-proposal-container').hide();
  264 + } else {
  265 + $('.experience-proposal-container').show();
  266 + $('.talk-proposal-container').show();
  267 + $resultsContainer.hide();
  268 + }
  269 +
  270 + e.preventDefault();
  271 + });
160 272 });
161   -
162   -
163   - $('.save-article-form').submit(function (e) {
164   - e.preventDefault();
165   - var proposal_id = this.id.split('-').pop();
166   - var form = this;
167   - var $form = $(this);
168   - var message = $(form).find('.message');
  273 + }
  274 +
  275 + $(document).ready(function($) {
  276 + if($.cookie('_dialoga_session')) {
  277 + var url = host + '/api/v1/users/me?private_token=' + $.cookie('_dialoga_session');
  278 + $.getJSON(url).done(function( /*data*/ ) {
  279 + logged_in = true;
  280 + private_token = $.cookie('_dialoga_session');
  281 + });
  282 + }
  283 +
  284 + $(document).on('click', '.login-action', function(e) {
  285 + var message = $('.login .message');
169 286 message.hide();
170 287 message.text('');
171 288 $.ajax({
172 289 type: 'post',
173   - url: host + '/api/v1/articles/' + proposal_id + '/children',
174   - data: $('#'+this.id).serialize() + '&private_token=' + private_token + '&fields=id&article[name]=article_' + guid()
175   - })
176   - .done(function( /*data*/ ) {
177   - form.reset();
178   - $form.hide();
179   - $form.siblings('.success-sent').show();
180   - })
181   - .fail(function( jqxhr, textStatus, error ) {
182   - var err = textStatus + ', ' + error;
183   - console.log( 'Request Failed: ' + err );
184   - message.show();
185   - message.text('Não foi possível enviar.');
186   - });
187   - });
188   -
189   - })
190   - .fail(function( jqxhr, textStatus, error ) {
191   - var err = textStatus + ', ' + error;
192   - console.log( 'Request Failed: ' + err );
193   - });
194   -
195   -function loadRandomProposal(topic_id, private_token) {
196   - var $noProposals = $('.no-proposals');
197   - var $loading = $('.loading');
198   - var $randomProposal = $('.random-proposal');
199   - var $body = $(document.body);
200   -
201   - // reset view
202   - $noProposals.hide();
203   - $loading.show();
204   - $randomProposal.html('');
205   -
206   - var url = host + '/api/v1/articles/' + topic_id + '/children' + '?private_token=' + private_token + '&limit=1&order=random()&_='+new Date().getTime()+'&fields=id,name,abstract,created_by&content_type=ProposalsDiscussionPlugin::Proposal';
207   - $.getJSON(url).done(function( data ) {
208   - $loading.hide();
209   -
210   - if(data.articles.length === 0) {
211   - $noProposals.show();
212   - return;
213   - }
214   -
215   - var article = data.articles[0];
216   - $randomProposal.html(supportProposalTemplate(article));
217   - $body.off('click', '.vote-actions .skip');
218   - $body.on('click', '.vote-actions .skip', function(e) {
219   - loadRandomProposal(topic_id, private_token);
220   - e.preventDefault();
221   - });
222   - $body.off('click', '.vote-actions .like');
223   - $body.on('click', '.vote-actions .like', function(e) {
224   - $.ajax({
225   - type: 'post',
226   - url: host + '/api/v1/articles/' + article.id + '/vote',
227   - data: {
228   - value: $(this).data('vote-value'),
229   - private_token: private_token
  290 + url: host + '/api/v1/login',
  291 + data: $(this).parents('.login').serialize(),
  292 + xhrFields: {
  293 + //withCredentials: true
230 294 }
231   - }).done(function( /*data*/ ) {
232   - loadRandomProposal(topic_id, private_token);
  295 + }).done(function(data) {
  296 + loginCallback(true, data.private_token);
  297 + }).fail(function( /*data*/ ) {
  298 + message.show();
  299 + message.text('Não foi possível logar');
233 300 });
234 301 e.preventDefault();
235 302 });
236   -
237   - $body.off('click', '.vote-result');
238   - $body.on('click', '.vote-result', function(e) {
239   -
240   - var $this = $(this);
241   - var $proposalDetail = $this.parents('.proposal-detail');
242   - var $resultsContainer = $proposalDetail.find('.results-container');
243   -
244   - // $resultsContainer.toggle();
245   - // $resultsContainer.toggleClass('hide');
246   -
247   - if($resultsContainer.css('display') === 'none') {
248   -
249   - $resultsContainer.find('.loading').show();
250   - $resultsContainer.find('.results-content').hide();
251   -
252   - var url = host + '/api/v1/articles/' + topic_id + '/children' + '?private_token=' + private_token + '&limit=10&order=votes_score&fields=id,name,abstract,votes_for,votes_against&content_type=ProposalsDiscussionPlugin::Proposal';
253   - $.getJSON(url).done(function( data ) {
254   -
255   - $resultsContainer.html(resultsTemplate(data));
256   - $resultsContainer.find('.loading').hide();
257   - $resultsContainer.find('.results-content').show();
258   - $resultsContainer.show();
259   -
260   - // scroll to the end
261   - $('html, body').animate({
262   - scrollTop: $(document).height()
263   - }, 'fast');
264   - });
265   - $('.experience-proposal-container').hide();
266   - $('.talk-proposal-container').hide();
267   - } else {
268   - $('.experience-proposal-container').show();
269   - $('.talk-proposal-container').show();
270   - $resultsContainer.hide();
271   - }
272   -
273   - e.preventDefault();
274   - });
275 303 });
276   -}
277   -
278   -$(document).ready(function($) {
279   - if($.cookie('_dialoga_session')) {
280   - var url = host + '/api/v1/users/me?private_token=' + $.cookie('_dialoga_session');
281   - $.getJSON(url).done(function( /*data*/ ) {
282   - logged_in = true;
283   - private_token = $.cookie('_dialoga_session');
284   - });
285   - }
286   -
287   - $(document).on('click', '.login-action', function(e) {
288   - var message = $('.login .message');
289   - message.hide();
290   - message.text('');
291   - $.ajax({
292   - type: 'post',
293   - url: host + '/api/v1/login',
294   - data: $(this).parents('.login').serialize(),
295   - xhrFields: {
296   - //withCredentials: true
  304 +
  305 + function loginCallback(loggedIn, token) {
  306 + logged_in = loggedIn;
  307 + $('.login .message').text('');
  308 +
  309 + if(logged_in) {
  310 + if(token){
  311 + private_token = token;
297 312 }
298   - }).done(function(data) {
299   - loginCallback(true, data.private_token);
300   - }).fail(function( /*data*/ ) {
301   - message.show();
302   - message.text('Não foi possível logar');
303   - });
304   - e.preventDefault();
305   - });
306   -});
307   -
308   -function loginCallback(loggedIn, token) {
309   - logged_in = loggedIn;
310   - $('.login .message').text('');
311   -
312   - if(logged_in) {
313   - if(token){
314   - private_token = token;
  313 + loginButton.siblings('.save-article-form').show();
  314 + loginButton.siblings('.save-article-form .message').show();
  315 + loginButton.siblings('.login-container').hide();
  316 + $.cookie('_dialoga_session', private_token);
  317 + } else {
  318 + loginButton.siblings('.save-article-form').hide();
  319 + loginButton.siblings('.login-container').show();
315 320 }
316   - loginButton.siblings('.save-article-form').show();
317   - loginButton.siblings('.save-article-form .message').show();
318   - loginButton.siblings('.login-container').hide();
319   - $.cookie('_dialoga_session', private_token);
320   - } else {
321   - loginButton.siblings('.save-article-form').hide();
322   - loginButton.siblings('.login-container').show();
323 321 }
324   -}
325   -
326   -// function oauthPluginHandleLoginResult(loggedIn, token) {
327   -// loginCallback(loggedIn, token);
328   -// }
329   -
330   -function guid() {
331   - function s4() {
332   - return Math.floor((1 + Math.random()) * 0x10000)
333   - .toString(16)
334   - .substring(1);
  322 +
  323 + // function oauthPluginHandleLoginResult(loggedIn, token) {
  324 + // loginCallback(loggedIn, token);
  325 + // }
  326 +
  327 + function guid() {
  328 + function s4() {
  329 + return Math.floor((1 + Math.random()) * 0x10000)
  330 + .toString(16)
  331 + .substring(1);
  332 + }
  333 + return s4() + s4() + '-' + s4() + '-' + s4() + '-' +
  334 + s4() + '-' + s4() + s4() + s4();
335 335 }
336   - return s4() + s4() + '-' + s4() + '-' + s4() + '-' +
337   - s4() + '-' + s4() + s4() + s4();
338   -}
339   -
340   -function display_category_tab(){
341   - $('#proposal-group').hide();
342   - $('#proposal-categories').show();
343   - $('#nav-proposal-categories a').addClass('active');
344   - $('#nav-proposal-group a').removeClass('active');
345   - $('.proposal-category-items').hide();
346   - $('.proposal-category .arrow-box').hide();
347   - $('.proposal-detail').hide();
348   -
349   - $('#content').show();
350   - $('nav').show();
351   -}
352   -
353   -function display_proposals_tab(){
354   - $('#proposal-categories').hide();
355   - $('#proposal-group').show();
356   - $('#nav-proposal-group a').addClass('active');
357   - $('#nav-proposal-categories a').removeClass('active');
358   - $('.proposal-item p').dotdotdot();
359   -
360   - $('#content').show();
361   - $('nav').show();
362   -}
363   -
364   -function display_proposal(proposal_id){
365   - $('#proposal-categories').hide();
366   - $('#proposal-group').hide();
367   - $('nav').hide();
368   - $('#content').hide();
369   - $('.make-proposal-form').hide();
370   - $('.login-container').hide();
371   - $('.proposal-detail').hide();
372   -
373   - $('.proposal-detail-base').hide();
374   - $('#' + proposal_id).show();
375   - $('.proposal-header').show();
376   - $('.make-proposal-container').show();
377   - $('.support-proposal-container').show();
378   - $('.results-container').hide();
379   - $('.results-container .loading').hide();
380   - $('.results-container .results-content').hide();
381   - $('.experience-proposal-container').show();
382   - $('.talk-proposal-container').show();
383   -
384   - var topic_id = proposal_id.split('-').pop();
385   - loadRandomProposal(topic_id, private_token);
386   -}
387   -
388   -function display_proposal_detail(){
389   - $('#proposal-categories').hide();
390   - $('#proposal-group').hide();
391   - $('nav').hide();
392   - $('#content').hide();
393   - $('.make-proposal-form').hide();
394   - $('.proposal-header').hide();
395   - $('.make-proposal-container').hide();
396   - $('.support-proposal-container').hide();
397   - $('.results-container').hide();
398   - $('.experience-proposal-container').hide();
399   - $('.talk-proposal-container').hide();
400   -
401   - $('.body').show();
402   -}
403   -
404   -function display_proposal_by_category(item){
405   - var $item = $('#' + item);
406 336  
407   - if($item.hasClass('proposal-category-items')){
408   - //Display Topics or Discussion by category
409   - $('nav').show();
410   - $('#content').show();
  337 + function display_category_tab(){
  338 + $('#proposal-group').hide();
411 339 $('#proposal-categories').show();
412 340 $('#nav-proposal-categories a').addClass('active');
413 341 $('#nav-proposal-group a').removeClass('active');
414 342 $('.proposal-category-items').hide();
  343 + $('.proposal-category .arrow-box').hide();
415 344 $('.proposal-detail').hide();
416   - $item.toggle( 'blind', 1000 );
  345 +
  346 + $('#content').show();
  347 + $('nav').show();
  348 + }
  349 +
  350 + function display_proposals_tab(){
  351 + $('#proposal-categories').hide();
  352 + $('#proposal-group').show();
  353 + $('#nav-proposal-group a').addClass('active');
  354 + $('#nav-proposal-categories a').removeClass('active');
417 355 $('.proposal-item p').dotdotdot();
418   - $('.proposal-category .arrow-box').hide();
419   - var categorySlug = $item.data('category');
420   - $('#proposal-category-' + categorySlug).find('.arrow-box').show();
  356 +
  357 + $('#content').show();
  358 + $('nav').show();
421 359 }
422   -}
423   -
424   -var BARRA_ADDED = false;
425   -function addBarraDoGoverno(){
426   - console.log('add barra');
427 360  
428   - if( BARRA_ADDED ) { return; }
429   -
430   - var HTML_BODY_PREPEND = '' +
431   - '<div id="barra-brasil" style="background:#7F7F7F; height: 20px; padding:0 0 0 10px;display:block;"> ' +
432   - '<ul id="menu-barra-temp" style="list-style:none;">' +
433   - '<li style="display:inline; float:left;padding-right:10px; margin-right:10px; border-right:1px solid #EDEDED"><a href="http://brasil.gov.br" style="font-family:sans,sans-serif; text-decoration:none; color:white;">Portal do Governo Brasileiro</a></li> ' +
434   - '<li><a style="font-family:sans,sans-serif; text-decoration:none; color:white;" href="http://epwg.governoeletronico.gov.br/barra/atualize.html">Atualize sua Barra de Governo</a></li>' +
435   - '</ul>' +
436   - '</div>';
437   -
438   - var HTML_BODY_APPEND = ''+
439   - '<div id="footer-brasil"></div>' +
440   - '<script defer="defer" src="//barra.brasil.gov.br/barra.js" type="text/javascript"></script>';
441   -
442   - var STYLE_TEMA_AZUL = '' +
443   - '<style>'+
444   - '#footer-brasil {'+
445   - 'background: none repeat scroll 0% 0% #0042b1;'+
446   - 'padding: 1em 0px;'+
447   - 'max-width: 100%;'+
448   - 'margin-top: 40px;'+
449   - '}'+
450   - '#barra-brasil ul {'+
451   - 'width: auto;'+
452   - '}'+
453   - '<style>';
454   -
455   - var $body = $(document.body);
456   - $body.prepend(HTML_BODY_PREPEND);
457   - $body.append(HTML_BODY_APPEND);
458   - $body.append(STYLE_TEMA_AZUL);
459   -
460   - BARRA_ADDED = true;
461   -}
462   -
463   -function updateHash(hash){
464   - var id = hash.replace(/^.*#/, '');
465   - var elem = document.getElementById(id);
466   -
467   - // preserve the query param
468   - // if (HIDE_BARRA_DO_GOVERNO && (hash.indexOf('?barra=false') === -1)){
469   - // hash += '?barra=false';
470   - // }
471   -
472   - if ( !elem ) {
473   - window.location.hash = hash;
474   - return;
  361 + function display_proposal(proposal_id){
  362 + $('#proposal-categories').hide();
  363 + $('#proposal-group').hide();
  364 + $('nav').hide();
  365 + $('#content').hide();
  366 + $('.make-proposal-form').hide();
  367 + $('.login-container').hide();
  368 + $('.proposal-detail').hide();
  369 +
  370 + $('.proposal-detail-base').hide();
  371 + $('#' + proposal_id).show();
  372 + $('.proposal-header').show();
  373 + $('.make-proposal-container').show();
  374 + $('.support-proposal-container').show();
  375 + $('.results-container').hide();
  376 + $('.results-container .loading').hide();
  377 + $('.results-container .results-content').hide();
  378 + $('.experience-proposal-container').show();
  379 + $('.talk-proposal-container').show();
  380 +
  381 + var topic_id = proposal_id.split('-').pop();
  382 + loadRandomProposal(topic_id, private_token);
475 383 }
476   -
477   - elem.id = id+'-tmp';
478   - window.location.hash = hash;
479   - elem.id = id;
480   -}
481   -
482   -function locationHashChanged(){
483   - var hash = window.location.hash;
484   - navigateTo(hash);
485   -}
486   -
487   -var HIDE_BARRA_DO_GOVERNO = false;
488   -function navigateTo(hash){
489   - var regexProposals = /#\/programas/;
490   - var regexCategory = /#\/temas/;
491   - var regexHideBarra = /barra=false$/;
492   -
493   - if( !(regexHideBarra.exec(hash) !== null) && !HIDE_BARRA_DO_GOVERNO ){
494   - addBarraDoGoverno();
495   - }else{
496   - HIDE_BARRA_DO_GOVERNO = true;
  384 +
  385 + function display_proposal_detail(){
  386 + $('#proposal-categories').hide();
  387 + $('#proposal-group').hide();
  388 + $('nav').hide();
  389 + $('#content').hide();
  390 + $('.make-proposal-form').hide();
  391 + $('.proposal-header').hide();
  392 + $('.make-proposal-container').hide();
  393 + $('.support-proposal-container').hide();
  394 + $('.results-container').hide();
  395 + $('.experience-proposal-container').hide();
  396 + $('.talk-proposal-container').hide();
  397 +
  398 + $('.body').show();
497 399 }
498   -
499   - // remove query params
500   - hash = hash.split('?')[0];
501   -
502   - var parts = hash.split('/');
503 400  
504   - var isProposal = regexProposals.exec(hash) !== null;
505   - var isCategory = regexCategory.exec(hash) !== null;
506   -
507   - if( isProposal ){
  401 + function display_proposal_by_category(item){
  402 + var $item = $('#' + item);
508 403  
509   - // go to proposal
510   - var proposalId = parts[2];
511   - navigateToProposal(proposalId);
  404 + if($item.hasClass('proposal-category-items')){
  405 + //Display Topics or Discussion by category
  406 + $('nav').show();
  407 + $('#content').show();
  408 + $('#proposal-categories').show();
  409 + $('#nav-proposal-categories a').addClass('active');
  410 + $('#nav-proposal-group a').removeClass('active');
  411 + $('.proposal-category-items').hide();
  412 + $('.proposal-detail').hide();
  413 + $item.toggle( 'blind', 1000 );
  414 + $('.proposal-item p').dotdotdot();
  415 + $('.proposal-category .arrow-box').hide();
  416 + var categorySlug = $item.data('category');
  417 + $('#proposal-category-' + categorySlug).find('.arrow-box').show();
  418 + }
512 419 }
513   -
514   - if( isCategory ){
  420 +
  421 + var BARRA_ADDED = false;
  422 + function addBarraDoGoverno(){
  423 + console.log('add barra');
515 424  
516   - // go to category
517   - var categoryId = parts[3];
518   - navigateToCategory(categoryId);
  425 + if( BARRA_ADDED ) { return; }
  426 +
  427 + var HTML_BODY_PREPEND = '' +
  428 + '<div id="barra-brasil" style="background:#7F7F7F; height: 20px; padding:0 0 0 10px;display:block;"> ' +
  429 + '<ul id="menu-barra-temp" style="list-style:none;">' +
  430 + '<li style="display:inline; float:left;padding-right:10px; margin-right:10px; border-right:1px solid #EDEDED"><a href="http://brasil.gov.br" style="font-family:sans,sans-serif; text-decoration:none; color:white;">Portal do Governo Brasileiro</a></li> ' +
  431 + '<li><a style="font-family:sans,sans-serif; text-decoration:none; color:white;" href="http://epwg.governoeletronico.gov.br/barra/atualize.html">Atualize sua Barra de Governo</a></li>' +
  432 + '</ul>' +
  433 + '</div>';
  434 +
  435 + var HTML_BODY_APPEND = ''+
  436 + '<div id="footer-brasil"></div>' +
  437 + '<script defer="defer" src="http://barra.brasil.gov.br/barra.js" type="text/javascript"></script>';
  438 +
  439 + var STYLE_TEMA_AZUL = '' +
  440 + '<style>'+
  441 + '#footer-brasil {'+
  442 + 'background: none repeat scroll 0% 0% #0042b1;'+
  443 + 'padding: 1em 0px;'+
  444 + 'max-width: 100%;'+
  445 + 'margin-top: 40px;'+
  446 + '}'+
  447 + '#barra-brasil ul {'+
  448 + 'width: auto;'+
  449 + '}'+
  450 + '<style>';
  451 +
  452 + var $body = $(document.body);
  453 + $body.prepend(HTML_BODY_PREPEND);
  454 + $body.append(HTML_BODY_APPEND);
  455 + $body.append(STYLE_TEMA_AZUL);
  456 +
  457 + BARRA_ADDED = true;
519 458 }
520   -
521   - // default
522   - if( !isProposal && !isCategory ){
523   - // show the 'index' -> category tab
524   - display_category_tab();
  459 +
  460 + function updateHash(hash){
  461 + var id = hash.replace(/^.*#/, '');
  462 + var elem = document.getElementById(id);
  463 +
  464 + // preserve the query param
  465 + // if (HIDE_BARRA_DO_GOVERNO && (hash.indexOf('?barra=false') === -1)){
  466 + // hash += '?barra=false';
  467 + // }
  468 +
  469 + if ( !elem ) {
  470 + window.location.hash = hash;
  471 + return;
  472 + }
  473 +
  474 + elem.id = id+'-tmp';
  475 + window.location.hash = hash;
  476 + elem.id = id;
525 477 }
526   -
527   - $('html, body').animate({ scrollTop: 0 }, 'fast');
528   -}
529   -
530   -function navigateToProposal(proposalId){
531   - if(proposalId === undefined){
532   - display_proposals_tab();
533   - }else{
534   - display_proposal('proposal-item-' + proposalId);
535   -
536   - // show sub-page
537   - var regexSubpages = /sobre-o-programa$/;
538   - var m;
539   - if((m = regexSubpages.exec(window.location.hash)) !== null ){
540   - display_proposal_detail();
  478 +
  479 + function locationHashChanged(){
  480 + var hash = window.location.hash;
  481 + navigateTo(hash);
  482 + }
  483 +
  484 + var HIDE_BARRA_DO_GOVERNO = false;
  485 + function navigateTo(hash){
  486 + var regexProposals = /#\/programas/;
  487 + var regexCategory = /#\/temas/;
  488 + var regexHideBarra = /barra=false$/;
  489 +
  490 + if( !(regexHideBarra.exec(hash) !== null) && !HIDE_BARRA_DO_GOVERNO ){
  491 + addBarraDoGoverno();
  492 + }else{
  493 + HIDE_BARRA_DO_GOVERNO = true;
541 494 }
  495 +
  496 + // remove query params
  497 + hash = hash.split('?')[0];
  498 +
  499 + var parts = hash.split('/');
  500 +
  501 + var isProposal = regexProposals.exec(hash) !== null;
  502 + var isCategory = regexCategory.exec(hash) !== null;
  503 +
  504 + if( isProposal ){
  505 +
  506 + // go to proposal
  507 + var proposalId = parts[2];
  508 + navigateToProposal(proposalId);
  509 + }
  510 +
  511 + if( isCategory ){
  512 +
  513 + // go to category
  514 + var categoryId = parts[3];
  515 + navigateToCategory(categoryId);
  516 + }
  517 +
  518 + // default
  519 + if( !isProposal && !isCategory ){
  520 + // show the 'index' -> category tab
  521 + display_category_tab();
  522 + }
  523 +
  524 + $('html, body').animate({ scrollTop: 0 }, 'fast');
542 525 }
543   -}
544   -
545   -function navigateToCategory(categoryId){
546   - if(categoryId === undefined){
547   - display_category_tab();
  526 +
  527 + function navigateToProposal(proposalId){
  528 + if(proposalId === undefined){
  529 + display_proposals_tab();
  530 + }else{
  531 + display_proposal('proposal-item-' + proposalId);
  532 +
  533 + // show sub-page
  534 + var regexSubpages = /sobre-o-programa$/;
  535 + var m;
  536 + if((m = regexSubpages.exec(window.location.hash)) !== null ){
  537 + display_proposal_detail();
  538 + }
  539 + }
  540 + }
  541 +
  542 + function navigateToCategory(categoryId){
  543 + if(categoryId === undefined){
  544 + display_category_tab();
  545 + }else{
  546 + display_proposal_by_category('proposal-item-' + categoryId);
  547 + }
  548 + }
  549 +
  550 + if('onhashchange' in window){
  551 + window.onhashchange = locationHashChanged;
548 552 }else{
549   - display_proposal_by_category('proposal-item-' + categoryId);
  553 + console.log('The browser not supports the hashchange event!');
550 554 }
551   -}
552 555  
553   -if('onhashchange' in window){
554   - window.onhashchange = locationHashChanged;
555   -}else{
556   - console.log('The browser not supports the hashchange event!');
557   -}
  556 +});
... ...
js/require.js 0 → 100644
... ... @@ -0,0 +1,36 @@
  1 +/*
  2 + RequireJS 2.1.17 Copyright (c) 2010-2015, The Dojo Foundation All Rights Reserved.
  3 + Available via the MIT or new BSD license.
  4 + see: http://github.com/jrburke/requirejs for details
  5 +*/
  6 +var requirejs,require,define;
  7 +(function(ba){function G(b){return"[object Function]"===K.call(b)}function H(b){return"[object Array]"===K.call(b)}function v(b,c){if(b){var d;for(d=0;d<b.length&&(!b[d]||!c(b[d],d,b));d+=1);}}function T(b,c){if(b){var d;for(d=b.length-1;-1<d&&(!b[d]||!c(b[d],d,b));d-=1);}}function t(b,c){return fa.call(b,c)}function m(b,c){return t(b,c)&&b[c]}function B(b,c){for(var d in b)if(t(b,d)&&c(b[d],d))break}function U(b,c,d,e){c&&B(c,function(c,g){if(d||!t(b,g))e&&"object"===typeof c&&c&&!H(c)&&!G(c)&&!(c instanceof
  8 +RegExp)?(b[g]||(b[g]={}),U(b[g],c,d,e)):b[g]=c});return b}function u(b,c){return function(){return c.apply(b,arguments)}}function ca(b){throw b;}function da(b){if(!b)return b;var c=ba;v(b.split("."),function(b){c=c[b]});return c}function C(b,c,d,e){c=Error(c+"\nhttp://requirejs.org/docs/errors.html#"+b);c.requireType=b;c.requireModules=e;d&&(c.originalError=d);return c}function ga(b){function c(a,k,b){var f,l,c,d,e,g,i,p,k=k&&k.split("/"),h=j.map,n=h&&h["*"];if(a){a=a.split("/");l=a.length-1;j.nodeIdCompat&&
  9 +Q.test(a[l])&&(a[l]=a[l].replace(Q,""));"."===a[0].charAt(0)&&k&&(l=k.slice(0,k.length-1),a=l.concat(a));l=a;for(c=0;c<l.length;c++)if(d=l[c],"."===d)l.splice(c,1),c-=1;else if(".."===d&&!(0===c||1===c&&".."===l[2]||".."===l[c-1])&&0<c)l.splice(c-1,2),c-=2;a=a.join("/")}if(b&&h&&(k||n)){l=a.split("/");c=l.length;a:for(;0<c;c-=1){e=l.slice(0,c).join("/");if(k)for(d=k.length;0<d;d-=1)if(b=m(h,k.slice(0,d).join("/")))if(b=m(b,e)){f=b;g=c;break a}!i&&(n&&m(n,e))&&(i=m(n,e),p=c)}!f&&i&&(f=i,g=p);f&&(l.splice(0,
  10 +g,f),a=l.join("/"))}return(f=m(j.pkgs,a))?f:a}function d(a){z&&v(document.getElementsByTagName("script"),function(k){if(k.getAttribute("data-requiremodule")===a&&k.getAttribute("data-requirecontext")===i.contextName)return k.parentNode.removeChild(k),!0})}function e(a){var k=m(j.paths,a);if(k&&H(k)&&1<k.length)return k.shift(),i.require.undef(a),i.makeRequire(null,{skipMap:!0})([a]),!0}function n(a){var k,c=a?a.indexOf("!"):-1;-1<c&&(k=a.substring(0,c),a=a.substring(c+1,a.length));return[k,a]}function p(a,
  11 +k,b,f){var l,d,e=null,g=k?k.name:null,j=a,p=!0,h="";a||(p=!1,a="_@r"+(K+=1));a=n(a);e=a[0];a=a[1];e&&(e=c(e,g,f),d=m(r,e));a&&(e?h=d&&d.normalize?d.normalize(a,function(a){return c(a,g,f)}):-1===a.indexOf("!")?c(a,g,f):a:(h=c(a,g,f),a=n(h),e=a[0],h=a[1],b=!0,l=i.nameToUrl(h)));b=e&&!d&&!b?"_unnormalized"+(O+=1):"";return{prefix:e,name:h,parentMap:k,unnormalized:!!b,url:l,originalName:j,isDefine:p,id:(e?e+"!"+h:h)+b}}function s(a){var k=a.id,b=m(h,k);b||(b=h[k]=new i.Module(a));return b}function q(a,
  12 +k,b){var f=a.id,c=m(h,f);if(t(r,f)&&(!c||c.defineEmitComplete))"defined"===k&&b(r[f]);else if(c=s(a),c.error&&"error"===k)b(c.error);else c.on(k,b)}function w(a,b){var c=a.requireModules,f=!1;if(b)b(a);else if(v(c,function(b){if(b=m(h,b))b.error=a,b.events.error&&(f=!0,b.emit("error",a))}),!f)g.onError(a)}function x(){R.length&&(ha.apply(A,[A.length,0].concat(R)),R=[])}function y(a){delete h[a];delete V[a]}function F(a,b,c){var f=a.map.id;a.error?a.emit("error",a.error):(b[f]=!0,v(a.depMaps,function(f,
  13 +d){var e=f.id,g=m(h,e);g&&(!a.depMatched[d]&&!c[e])&&(m(b,e)?(a.defineDep(d,r[e]),a.check()):F(g,b,c))}),c[f]=!0)}function D(){var a,b,c=(a=1E3*j.waitSeconds)&&i.startTime+a<(new Date).getTime(),f=[],l=[],g=!1,h=!0;if(!W){W=!0;B(V,function(a){var i=a.map,j=i.id;if(a.enabled&&(i.isDefine||l.push(a),!a.error))if(!a.inited&&c)e(j)?g=b=!0:(f.push(j),d(j));else if(!a.inited&&(a.fetched&&i.isDefine)&&(g=!0,!i.prefix))return h=!1});if(c&&f.length)return a=C("timeout","Load timeout for modules: "+f,null,
  14 +f),a.contextName=i.contextName,w(a);h&&v(l,function(a){F(a,{},{})});if((!c||b)&&g)if((z||ea)&&!X)X=setTimeout(function(){X=0;D()},50);W=!1}}function E(a){t(r,a[0])||s(p(a[0],null,!0)).init(a[1],a[2])}function I(a){var a=a.currentTarget||a.srcElement,b=i.onScriptLoad;a.detachEvent&&!Y?a.detachEvent("onreadystatechange",b):a.removeEventListener("load",b,!1);b=i.onScriptError;(!a.detachEvent||Y)&&a.removeEventListener("error",b,!1);return{node:a,id:a&&a.getAttribute("data-requiremodule")}}function J(){var a;
  15 +for(x();A.length;){a=A.shift();if(null===a[0])return w(C("mismatch","Mismatched anonymous define() module: "+a[a.length-1]));E(a)}}var W,Z,i,L,X,j={waitSeconds:7,baseUrl:"./",paths:{},bundles:{},pkgs:{},shim:{},config:{}},h={},V={},$={},A=[],r={},S={},aa={},K=1,O=1;L={require:function(a){return a.require?a.require:a.require=i.makeRequire(a.map)},exports:function(a){a.usingExports=!0;if(a.map.isDefine)return a.exports?r[a.map.id]=a.exports:a.exports=r[a.map.id]={}},module:function(a){return a.module?
  16 +a.module:a.module={id:a.map.id,uri:a.map.url,config:function(){return m(j.config,a.map.id)||{}},exports:a.exports||(a.exports={})}}};Z=function(a){this.events=m($,a.id)||{};this.map=a;this.shim=m(j.shim,a.id);this.depExports=[];this.depMaps=[];this.depMatched=[];this.pluginMaps={};this.depCount=0};Z.prototype={init:function(a,b,c,f){f=f||{};if(!this.inited){this.factory=b;if(c)this.on("error",c);else this.events.error&&(c=u(this,function(a){this.emit("error",a)}));this.depMaps=a&&a.slice(0);this.errback=
  17 +c;this.inited=!0;this.ignore=f.ignore;f.enabled||this.enabled?this.enable():this.check()}},defineDep:function(a,b){this.depMatched[a]||(this.depMatched[a]=!0,this.depCount-=1,this.depExports[a]=b)},fetch:function(){if(!this.fetched){this.fetched=!0;i.startTime=(new Date).getTime();var a=this.map;if(this.shim)i.makeRequire(this.map,{enableBuildCallback:!0})(this.shim.deps||[],u(this,function(){return a.prefix?this.callPlugin():this.load()}));else return a.prefix?this.callPlugin():this.load()}},load:function(){var a=
  18 +this.map.url;S[a]||(S[a]=!0,i.load(this.map.id,a))},check:function(){if(this.enabled&&!this.enabling){var a,b,c=this.map.id;b=this.depExports;var f=this.exports,l=this.factory;if(this.inited)if(this.error)this.emit("error",this.error);else{if(!this.defining){this.defining=!0;if(1>this.depCount&&!this.defined){if(G(l)){if(this.events.error&&this.map.isDefine||g.onError!==ca)try{f=i.execCb(c,l,b,f)}catch(d){a=d}else f=i.execCb(c,l,b,f);this.map.isDefine&&void 0===f&&((b=this.module)?f=b.exports:this.usingExports&&
  19 +(f=this.exports));if(a)return a.requireMap=this.map,a.requireModules=this.map.isDefine?[this.map.id]:null,a.requireType=this.map.isDefine?"define":"require",w(this.error=a)}else f=l;this.exports=f;if(this.map.isDefine&&!this.ignore&&(r[c]=f,g.onResourceLoad))g.onResourceLoad(i,this.map,this.depMaps);y(c);this.defined=!0}this.defining=!1;this.defined&&!this.defineEmitted&&(this.defineEmitted=!0,this.emit("defined",this.exports),this.defineEmitComplete=!0)}}else this.fetch()}},callPlugin:function(){var a=
  20 +this.map,b=a.id,d=p(a.prefix);this.depMaps.push(d);q(d,"defined",u(this,function(f){var l,d;d=m(aa,this.map.id);var e=this.map.name,P=this.map.parentMap?this.map.parentMap.name:null,n=i.makeRequire(a.parentMap,{enableBuildCallback:!0});if(this.map.unnormalized){if(f.normalize&&(e=f.normalize(e,function(a){return c(a,P,!0)})||""),f=p(a.prefix+"!"+e,this.map.parentMap),q(f,"defined",u(this,function(a){this.init([],function(){return a},null,{enabled:!0,ignore:!0})})),d=m(h,f.id)){this.depMaps.push(f);
  21 +if(this.events.error)d.on("error",u(this,function(a){this.emit("error",a)}));d.enable()}}else d?(this.map.url=i.nameToUrl(d),this.load()):(l=u(this,function(a){this.init([],function(){return a},null,{enabled:!0})}),l.error=u(this,function(a){this.inited=!0;this.error=a;a.requireModules=[b];B(h,function(a){0===a.map.id.indexOf(b+"_unnormalized")&&y(a.map.id)});w(a)}),l.fromText=u(this,function(f,c){var d=a.name,e=p(d),P=M;c&&(f=c);P&&(M=!1);s(e);t(j.config,b)&&(j.config[d]=j.config[b]);try{g.exec(f)}catch(h){return w(C("fromtexteval",
  22 +"fromText eval for "+b+" failed: "+h,h,[b]))}P&&(M=!0);this.depMaps.push(e);i.completeLoad(d);n([d],l)}),f.load(a.name,n,l,j))}));i.enable(d,this);this.pluginMaps[d.id]=d},enable:function(){V[this.map.id]=this;this.enabling=this.enabled=!0;v(this.depMaps,u(this,function(a,b){var c,f;if("string"===typeof a){a=p(a,this.map.isDefine?this.map:this.map.parentMap,!1,!this.skipMap);this.depMaps[b]=a;if(c=m(L,a.id)){this.depExports[b]=c(this);return}this.depCount+=1;q(a,"defined",u(this,function(a){this.defineDep(b,
  23 +a);this.check()}));this.errback?q(a,"error",u(this,this.errback)):this.events.error&&q(a,"error",u(this,function(a){this.emit("error",a)}))}c=a.id;f=h[c];!t(L,c)&&(f&&!f.enabled)&&i.enable(a,this)}));B(this.pluginMaps,u(this,function(a){var b=m(h,a.id);b&&!b.enabled&&i.enable(a,this)}));this.enabling=!1;this.check()},on:function(a,b){var c=this.events[a];c||(c=this.events[a]=[]);c.push(b)},emit:function(a,b){v(this.events[a],function(a){a(b)});"error"===a&&delete this.events[a]}};i={config:j,contextName:b,
  24 +registry:h,defined:r,urlFetched:S,defQueue:A,Module:Z,makeModuleMap:p,nextTick:g.nextTick,onError:w,configure:function(a){a.baseUrl&&"/"!==a.baseUrl.charAt(a.baseUrl.length-1)&&(a.baseUrl+="/");var b=j.shim,c={paths:!0,bundles:!0,config:!0,map:!0};B(a,function(a,b){c[b]?(j[b]||(j[b]={}),U(j[b],a,!0,!0)):j[b]=a});a.bundles&&B(a.bundles,function(a,b){v(a,function(a){a!==b&&(aa[a]=b)})});a.shim&&(B(a.shim,function(a,c){H(a)&&(a={deps:a});if((a.exports||a.init)&&!a.exportsFn)a.exportsFn=i.makeShimExports(a);
  25 +b[c]=a}),j.shim=b);a.packages&&v(a.packages,function(a){var b,a="string"===typeof a?{name:a}:a;b=a.name;a.location&&(j.paths[b]=a.location);j.pkgs[b]=a.name+"/"+(a.main||"main").replace(ia,"").replace(Q,"")});B(h,function(a,b){!a.inited&&!a.map.unnormalized&&(a.map=p(b))});if(a.deps||a.callback)i.require(a.deps||[],a.callback)},makeShimExports:function(a){return function(){var b;a.init&&(b=a.init.apply(ba,arguments));return b||a.exports&&da(a.exports)}},makeRequire:function(a,e){function j(c,d,m){var n,
  26 +q;e.enableBuildCallback&&(d&&G(d))&&(d.__requireJsBuild=!0);if("string"===typeof c){if(G(d))return w(C("requireargs","Invalid require call"),m);if(a&&t(L,c))return L[c](h[a.id]);if(g.get)return g.get(i,c,a,j);n=p(c,a,!1,!0);n=n.id;return!t(r,n)?w(C("notloaded",'Module name "'+n+'" has not been loaded yet for context: '+b+(a?"":". Use require([])"))):r[n]}J();i.nextTick(function(){J();q=s(p(null,a));q.skipMap=e.skipMap;q.init(c,d,m,{enabled:!0});D()});return j}e=e||{};U(j,{isBrowser:z,toUrl:function(b){var d,
  27 +e=b.lastIndexOf("."),k=b.split("/")[0];if(-1!==e&&(!("."===k||".."===k)||1<e))d=b.substring(e,b.length),b=b.substring(0,e);return i.nameToUrl(c(b,a&&a.id,!0),d,!0)},defined:function(b){return t(r,p(b,a,!1,!0).id)},specified:function(b){b=p(b,a,!1,!0).id;return t(r,b)||t(h,b)}});a||(j.undef=function(b){x();var c=p(b,a,!0),e=m(h,b);d(b);delete r[b];delete S[c.url];delete $[b];T(A,function(a,c){a[0]===b&&A.splice(c,1)});e&&(e.events.defined&&($[b]=e.events),y(b))});return j},enable:function(a){m(h,a.id)&&
  28 +s(a).enable()},completeLoad:function(a){var b,c,d=m(j.shim,a)||{},g=d.exports;for(x();A.length;){c=A.shift();if(null===c[0]){c[0]=a;if(b)break;b=!0}else c[0]===a&&(b=!0);E(c)}c=m(h,a);if(!b&&!t(r,a)&&c&&!c.inited){if(j.enforceDefine&&(!g||!da(g)))return e(a)?void 0:w(C("nodefine","No define call for "+a,null,[a]));E([a,d.deps||[],d.exportsFn])}D()},nameToUrl:function(a,b,c){var d,e,h;(d=m(j.pkgs,a))&&(a=d);if(d=m(aa,a))return i.nameToUrl(d,b,c);if(g.jsExtRegExp.test(a))d=a+(b||"");else{d=j.paths;
  29 +a=a.split("/");for(e=a.length;0<e;e-=1)if(h=a.slice(0,e).join("/"),h=m(d,h)){H(h)&&(h=h[0]);a.splice(0,e,h);break}d=a.join("/");d+=b||(/^data\:|\?/.test(d)||c?"":".js");d=("/"===d.charAt(0)||d.match(/^[\w\+\.\-]+:/)?"":j.baseUrl)+d}return j.urlArgs?d+((-1===d.indexOf("?")?"?":"&")+j.urlArgs):d},load:function(a,b){g.load(i,a,b)},execCb:function(a,b,c,d){return b.apply(d,c)},onScriptLoad:function(a){if("load"===a.type||ja.test((a.currentTarget||a.srcElement).readyState))N=null,a=I(a),i.completeLoad(a.id)},
  30 +onScriptError:function(a){var b=I(a);if(!e(b.id))return w(C("scripterror","Script error for: "+b.id,a,[b.id]))}};i.require=i.makeRequire();return i}var g,x,y,D,I,E,N,J,s,O,ka=/(\/\*([\s\S]*?)\*\/|([^:]|^)\/\/(.*)$)/mg,la=/[^.]\s*require\s*\(\s*["']([^'"\s]+)["']\s*\)/g,Q=/\.js$/,ia=/^\.\//;x=Object.prototype;var K=x.toString,fa=x.hasOwnProperty,ha=Array.prototype.splice,z=!!("undefined"!==typeof window&&"undefined"!==typeof navigator&&window.document),ea=!z&&"undefined"!==typeof importScripts,ja=
  31 +z&&"PLAYSTATION 3"===navigator.platform?/^complete$/:/^(complete|loaded)$/,Y="undefined"!==typeof opera&&"[object Opera]"===opera.toString(),F={},q={},R=[],M=!1;if("undefined"===typeof define){if("undefined"!==typeof requirejs){if(G(requirejs))return;q=requirejs;requirejs=void 0}"undefined"!==typeof require&&!G(require)&&(q=require,require=void 0);g=requirejs=function(b,c,d,e){var n,p="_";!H(b)&&"string"!==typeof b&&(n=b,H(c)?(b=c,c=d,d=e):b=[]);n&&n.context&&(p=n.context);(e=m(F,p))||(e=F[p]=g.s.newContext(p));
  32 +n&&e.configure(n);return e.require(b,c,d)};g.config=function(b){return g(b)};g.nextTick="undefined"!==typeof setTimeout?function(b){setTimeout(b,4)}:function(b){b()};require||(require=g);g.version="2.1.17";g.jsExtRegExp=/^\/|:|\?|\.js$/;g.isBrowser=z;x=g.s={contexts:F,newContext:ga};g({});v(["toUrl","undef","defined","specified"],function(b){g[b]=function(){var c=F._;return c.require[b].apply(c,arguments)}});if(z&&(y=x.head=document.getElementsByTagName("head")[0],D=document.getElementsByTagName("base")[0]))y=
  33 +x.head=D.parentNode;g.onError=ca;g.createNode=function(b){var c=b.xhtml?document.createElementNS("http://www.w3.org/1999/xhtml","html:script"):document.createElement("script");c.type=b.scriptType||"text/javascript";c.charset="utf-8";c.async=!0;return c};g.load=function(b,c,d){var e=b&&b.config||{};if(z)return e=g.createNode(e,c,d),e.setAttribute("data-requirecontext",b.contextName),e.setAttribute("data-requiremodule",c),e.attachEvent&&!(e.attachEvent.toString&&0>e.attachEvent.toString().indexOf("[native code"))&&
  34 +!Y?(M=!0,e.attachEvent("onreadystatechange",b.onScriptLoad)):(e.addEventListener("load",b.onScriptLoad,!1),e.addEventListener("error",b.onScriptError,!1)),e.src=d,J=e,D?y.insertBefore(e,D):y.appendChild(e),J=null,e;if(ea)try{importScripts(d),b.completeLoad(c)}catch(m){b.onError(C("importscripts","importScripts failed for "+c+" at "+d,m,[c]))}};z&&!q.skipDataMain&&T(document.getElementsByTagName("script"),function(b){y||(y=b.parentNode);if(I=b.getAttribute("data-main"))return s=I,q.baseUrl||(E=s.split("/"),
  35 +s=E.pop(),O=E.length?E.join("/")+"/":"./",q.baseUrl=O),s=s.replace(Q,""),g.jsExtRegExp.test(s)&&(s=I),q.deps=q.deps?q.deps.concat(s):[s],!0});define=function(b,c,d){var e,g;"string"!==typeof b&&(d=c,c=b,b=null);H(c)||(d=c,c=null);!c&&G(d)&&(c=[],d.length&&(d.toString().replace(ka,"").replace(la,function(b,d){c.push(d)}),c=(1===d.length?["require"]:["require","exports","module"]).concat(c)));if(M){if(!(e=J))N&&"interactive"===N.readyState||T(document.getElementsByTagName("script"),function(b){if("interactive"===
  36 +b.readyState)return N=b}),e=N;e&&(b||(b=e.getAttribute("data-requiremodule")),g=F[e.getAttribute("data-requirecontext")])}(g?g.defQueue:R).push([b,c,d])};define.amd={jQuery:!0};g.exec=function(b){return eval(b)};g(q)}})(this);
... ...