diff --git a/js/main.js b/js/main.js index 42ded88..0849aad 100644 --- a/js/main.js +++ b/js/main.js @@ -1,5 +1,6 @@ define(['handlebars'], function(Handlebars){ + /* global Handlebars, $ */ // The template code var templateSource = document.getElementById('proposal-template').innerHTML; @@ -41,7 +42,7 @@ define(['handlebars'], function(Handlebars){ $('.login-container').html(loginTemplate()); $('.countdown').maxlength({text: '%left caracteres restantes'}); - navigateTo(window.location.hash); + Main.navigateTo(window.location.hash); //Actions for links $( '#nav-proposal-categories a' ).on('click touchstart', function(e){ @@ -50,7 +51,7 @@ define(['handlebars'], function(Handlebars){ var $link = $(this); // Update URL and Navigate - updateHash($link.attr('href')); + Main.updateHash($link.attr('href')); }); $( '#nav-proposal-group a' ).on('click touchstart', function(e){ @@ -59,7 +60,7 @@ define(['handlebars'], function(Handlebars){ var $link = $(this); // Update URL and Navigate - updateHash($link.attr('href')); + Main.updateHash($link.attr('href')); }); $( '.proposal-item a' ).on('click touchstart', function(e){ @@ -68,7 +69,7 @@ define(['handlebars'], function(Handlebars){ var $link = $(this); // Update URL and Navigate - updateHash($link.attr('href')); + Main.updateHash($link.attr('href')); }); $( '.proposal-category a' ).on('click touchstart', function(e){ @@ -77,7 +78,7 @@ define(['handlebars'], function(Handlebars){ var $link = $(this); // Update URL and Navigate - updateHash($link.attr('href')); + Main.updateHash($link.attr('href')); }); $( '.proposal-category .go-back' ).on('click touchstart', function(e){ @@ -94,7 +95,7 @@ define(['handlebars'], function(Handlebars){ } // Update URL and Navigate - updateHash(newHash); + Main.updateHash(newHash); }); $( '.send-button a' ).on('click touchstart', function(e){ @@ -105,7 +106,7 @@ define(['handlebars'], function(Handlebars){ loginButton = $this.parents('.send-button'); loginButton.hide(); $this.parents('.success-proposal-sent').hide(); - loginCallback(logged_in); + Main.loginCallback(logged_in); }); $( '#display-contrast' ).on('click touchstart', function(e){ @@ -119,7 +120,7 @@ define(['handlebars'], function(Handlebars){ var $link = $(this); // Update URL and Navigate - updateHash($link.attr('href')); + Main.updateHash($link.attr('href')); }); $( '.go-to-proposal-button a' ).on('click touchstart', function(e){ @@ -128,13 +129,13 @@ define(['handlebars'], function(Handlebars){ var $link = $(this); // Update URL and Navigate - updateHash($link.attr('href')); + Main.updateHash($link.attr('href')); }); $( '.proposal-selection' ).change(function(e){ e.preventDefault(); - display_proposal('proposal-item-' + this.value); + Main.display_proposal('proposal-item-' + this.value); }); var availableTags = [ ]; @@ -189,96 +190,356 @@ define(['handlebars'], function(Handlebars){ console.log( 'Request Failed: ' + err ); }); - function loadRandomProposal(topic_id, private_token) { - var $noProposals = $('.no-proposals'); - var $loading = $('.loading'); - var $randomProposal = $('.random-proposal'); - var $body = $(document.body); - - // reset view - $noProposals.hide(); - $loading.show(); - $randomProposal.html(''); - - 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'; - $.getJSON(url).done(function( data ) { - $loading.hide(); - - if(data.articles.length === 0) { - $noProposals.show(); - return; + var BARRA_ADDED = false; + var HIDE_BARRA_DO_GOVERNO = false; + + var Main = (function(){ + + return { + loadRandomProposal: function (topic_id, private_token) { + var $noProposals = $('.no-proposals'); + var $loading = $('.loading'); + var $randomProposal = $('.random-proposal'); + var $body = $(document.body); + var contextMain = this; + + // reset view + $noProposals.hide(); + $loading.show(); + $randomProposal.html(''); + + 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'; + $.getJSON(url).done(function( data ) { + $loading.hide(); + + if(data.articles.length === 0) { + $noProposals.show(); + return; + } + + var article = data.articles[0]; + $randomProposal.html(supportProposalTemplate(article)); + $body.off('click', '.vote-actions .skip'); + $body.on('click', '.vote-actions .skip', function(e) { + contextMain.loadRandomProposal(topic_id, private_token); + e.preventDefault(); + }); + $body.off('click', '.vote-actions .like'); + $body.on('click', '.vote-actions .like', function(e) { + //Helps to prevent more than one vote per proposal + if(contextMain.hasProposalbeenVoted(article.id)){ + console.log("Proposta " + article.id + " já havia sido votada"); + contextMain.loadRandomProposal(topic_id, private_token); + e.preventDefault(); + return; + } + $.ajax({ + type: 'post', + url: host + '/api/v1/articles/' + article.id + '/vote', + data: { + value: $(this).data('vote-value'), + private_token: private_token + } + }).done(function( /*data*/ ) { + contextMain.addVotedProposal(article.id); + contextMain.loadRandomProposal(topic_id, private_token); + }); + e.preventDefault(); + }); + + $body.off('click', '.vote-result'); + $body.on('click', '.vote-result', function(e) { + + var $this = $(this); + var $proposalDetail = $this.parents('.proposal-detail'); + var $resultsContainer = $proposalDetail.find('.results-container'); + + // $resultsContainer.toggle(); + // $resultsContainer.toggleClass('hide'); + + if($resultsContainer.css('display') === 'none') { + + $resultsContainer.find('.loading').show(); + $resultsContainer.find('.results-content').hide(); + + 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'; + $.getJSON(url).done(function( data ) { + + $resultsContainer.html(resultsTemplate(data)); + $resultsContainer.find('.loading').hide(); + $resultsContainer.find('.results-content').show(); + $resultsContainer.show(); + + // scroll to the end + $('html, body').animate({ + scrollTop: $(document).height() + }, 'fast'); + }); + $('.experience-proposal-container').hide(); + $('.talk-proposal-container').hide(); + } else { + $('.experience-proposal-container').show(); + $('.talk-proposal-container').show(); + $resultsContainer.hide(); + } + + e.preventDefault(); + }); + }); + }, + + loginCallback: function(loggedIn, token) { + logged_in = loggedIn; + $('.login .message').text(''); + + if(logged_in) { + if(token){ + private_token = token; + } + loginButton.siblings('.save-article-form').show(); + loginButton.siblings('.save-article-form .message').show(); + loginButton.siblings('.login-container').hide(); + $.cookie('_dialoga_session', private_token); + } else { + loginButton.siblings('.save-article-form').hide(); + loginButton.siblings('.login-container').show(); + } + }, + oauthPluginHandleLoginResult: function(loggedIn, token) { + loginCallback(loggedIn, token); + }, + guid: function() { + function s4() { + return Math.floor((1 + Math.random()) * 0x10000) + .toString(16) + .substring(1); + } + }, + display_category_tab: function(){ + $('#proposal-group').hide(); + $('#proposal-categories').show(); + $('#nav-proposal-categories a').addClass('active'); + $('#nav-proposal-group a').removeClass('active'); + $('.proposal-category-items').hide(); + $('.proposal-category .arrow-box').hide(); + $('.proposal-detail').hide(); + + $('#content').show(); + $('nav').show(); + }, + display_proposals_tab: function(){ + $('#proposal-categories').hide(); + $('#proposal-group').show(); + $('#nav-proposal-group a').addClass('active'); + $('#nav-proposal-categories a').removeClass('active'); + $('#content').show(); + $('nav').show(); + }, + display_proposal: function(proposal_id){ + $('#proposal-categories').hide(); + $('#proposal-group').hide(); + $('nav').hide(); + $('#content').hide(); + $('.make-proposal-form').hide(); + $('.login-container').hide(); + $('.proposal-detail').hide(); + $('.proposal-detail-base').hide(); + $('#' + proposal_id).show(); + $('.proposal-header').show(); + $('.make-proposal-container').show(); + $('.support-proposal-container').show(); + $('.results-container').hide(); + $('.results-container .loading').hide(); + $('.results-container .results-content').hide(); + $('.experience-proposal-container').show(); + $('.talk-proposal-container').show(); + var topic_id = proposal_id.split('-').pop(); + this.loadRandomProposal(topic_id, private_token); + }, + display_proposal_detail: function(proposal_id){ + $('#proposal-categories').hide(); + $('#proposal-group').hide(); + $('nav').hide(); + $('#content').hide(); + $('.make-proposal-form').hide(); + $('.proposal-header').hide(); + $('.make-proposal-container').hide(); + $('.support-proposal-container').hide(); + $('.results-container').hide(); + $('.experience-proposal-container').hide(); + $('.talk-proposal-container').hide(); + $('.body').show(); + + var url = host + '/api/v1/articles/' + proposal_id + '?private_token=' + private_token + '&fields=id,body&content_type=ProposalsDiscussionPlugin::Topic'; + $.getJSON(url).done(function( data ) { + $('.body-content').replaceWith(data.article.body); + }) + .fail(function( jqxhr, textStatus, error ) { + var err = textStatus + ', ' + error; + console.log( 'Request Failed: ' + err ); + }); + }, + display_proposal_by_category: function(item){ + var $item = $('#' + item); + + if($item.hasClass('proposal-category-items')){ + //Display Topics or Discussion by category + $('nav').show(); + $('#content').show(); + $('#proposal-categories').show(); + $('#nav-proposal-categories a').addClass('active'); + $('#nav-proposal-group a').removeClass('active'); + $('.proposal-category-items').hide(); + $('.proposal-detail').hide(); + $item.toggle( 'blind', 1000 ); + $('.proposal-category .arrow-box').hide(); + var categorySlug = $item.data('category'); + $('#proposal-category-' + categorySlug).find('.arrow-box').show(); + } + }, + addBarraDoGoverno: function(){ + + if( BARRA_ADDED ) { return; } + + var HTML_BODY_PREPEND = '' + + '
' + + '' + + '
'; + + var HTML_BODY_APPEND = ''+ + '' + + ''; + + var STYLE_TEMA_AZUL = '' + + '