/* global define */ define(['jquery', 'handlebars', 'fastclick', 'proposal_app', 'handlebars_helpers', 'piwik_config'], function($, Handlebars, FastClick, ProposalApp){ // 'use strict'; // The template code var templateSource = $('#proposal-template').html(); // compile the template var template = Handlebars.compile(templateSource); var supportProposalTemplate = Handlebars.compile(document.getElementById('support-proposal-template').innerHTML); var loginTemplate = Handlebars.compile(document.getElementById('login-template').innerHTML); var resultsTemplate = Handlebars.compile(document.getElementById('results-template').innerHTML); var articleTemplate = Handlebars.compile(document.getElementById('article-template').innerHTML); var calendarTemplate = Handlebars.compile(document.getElementById('calendar-template').innerHTML); // The div/container that we are going to display the results in var resultsPlaceholder = document.getElementById('proposal-result'); var logged_in = false; var loginButton; var lastHash = window.location.hash; var isProduction = true; var host = isProduction ? 'http://login.dialoga.gov.br' : 'http://hom.login.dialoga.gov.br'; var serpro_captcha_clienteId = 'fdbcdc7a0b754ee7ae9d865fda740f17'; var dialoga_community = 19195; var proposal_discussion = '103358'; //participa var cat_saude = 180; // var cat_seguranca_publica = 182; // var cat_educacao = 181; // var cat_reducao_da_pobreza = 183; var recaptchaSiteKey = '6LcLPAcTAAAAAKsd0bxY_TArhD_A7OL19SRCW7_i'; // There are two modes for development // 1: Remote API // 2: Local API with proposal database // For (1) use port 3000 -> rails s // // gulp connect_api_prod for access api from production - localhost:3001 // gulp connect_api_local for access api from local noosfero - localhost:3002 // For (2) set at /etc/hosts: // //127.0.0.1 participa.br //127.0.0.1 dialoga.gov.br //127.0.0.1 login.dialoga.gov.br //127.0.0.1 noosfero.com //Detects for localhost settings var patt = new RegExp(':300[1-2]/'); var localDevelopment = false; if(patt.test(window.location.href)){ localDevelopment = true; patt = new RegExp(':3001/'); if(patt.test(window.location.href)){ host = 'http://login.dialoga.gov.br'; }else if (new RegExp(':3002/').test(window.location.href)){ host = 'http://noosfero.com:3000'; recaptchaSiteKey = '6LdsWAcTAAAAAChTUUD6yu9fCDhdIZzNd7F53zf-'; //http://noosfero.com/ } } var BARRA_ADDED = false; var HIDE_BARRA_DO_GOVERNO = false; var Main; window.Main = Main = (function(){ var API = { articles: '', proposals: '/api/v1/articles/{topic_id}/children' }; API.getProposalsURL = function (topicId){ return host + replace(API.proposals, '{topic_id}', topicId); }; function replace(str, pattern, value){ return str.replace(new RegExp(pattern, 'g'), value); } function fillSignupForm(signupForm, user) { signupForm.find('#signup-user_email').val(user.email); signupForm.find('#signup-user_email').attr('disabled', true); signupForm.find('#signup-user_fullname').val(user.name); signupForm.find('#user_oauth_signup_token').val(user.signup_token); signupForm.find('#user_oauth_providers').val(user.oauth_providers); signupForm.find('div.password').hide(); signupForm.find('div.password-confirmation').hide(); signupForm.find('#signup-user_password').attr('required', false); signupForm.find('#user_password_confirmation').attr('required', false); }; return { private_token: null, host: host, getProposalId: function() { var regexProposals = /\d.*\/propostas\/*.*/; var proposalId = 0; var hasProposal = regexProposals.test(location.hash); if( hasProposal ){ var regexExtractProposal = /propostas\/*.*/; proposalId = regexExtractProposal.exec(location.hash)[0].split('/')[1]; } return proposalId; }, loadRandomProposal: function (topic_id, force) { /*var private_token = window.Main.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 = API.getProposalsURL(topic_id); var childId = this.getProposalId(); if(childId !== 0 && !force){ url += '/' + childId; } //url += '?private_token=' + private_token + '&limit=1&order=random()&_='+new Date().getTime()+'&fields=id,name,slug,abstract,created_by&content_type=ProposalsDiscussionPlugin::Proposal'; url += '?limit=1&order=random()&_='+new Date().getTime()+'&fields[]=id&fields[]=name&fields[]=slug&fields[]=abstract&fields[]=created_by&content_type=ProposalsDiscussionPlugin::Proposal'; $.getJSON(url).done(function( data ) { $loading.hide(); $('.support-proposal .alert').hide(); data.articles = data.articles || [data.article]; if(data.articles.length === 0) { $noProposals.show(); return; } var article = data.articles[0]; var $parentContainer = $('#proposal-item-'+topic_id); var parentTitle = $parentContainer.find('.proposal-header .title').text(); var parentImage = $parentContainer.find('.proposal-header img').attr('src'); article.parent = {id: topic_id, title: parentTitle, image_url: parentImage}; $randomProposal.html(supportProposalTemplate(article)); $body.off('click', '.vote-actions .skip'); $body.on('click', '.vote-actions .skip', function(e) { e.preventDefault(); contextMain.loadRandomProposal(topic_id, true); }); $body.off('click', '.vote-actions .vote-action'); $body.on('click', '.vote-actions .vote-action', function(e) { e.preventDefault(); //Helps to prevent more than one vote per proposal var $button = $(this); var $proposal = $button.closest('.random-proposal'); if(!logged_in) { $(this).closest('.require-login-container').find('.button-send a').click(); return; } if(ProposalApp.hasProposalbeenVoted(article.id)){ // console.debug("Proposta " + article.id + " já havia sido votada"); Main.displaySuccess($button.closest('.support-proposal .section-content'), 'Seu voto já foi computado nesta proposta', 800); contextMain.loadRandomProposal(topic_id, true); return; } $.ajax({ type: 'post', url: host + '/api/v1/articles/' + article.id + '/vote', data: { value: $(this).data('vote-value'), private_token: Main.private_token } }).done(function(data) { if(data.vote) { // Main.displaySuccess($button.closest('.support-proposal .section-content'), '', 800); $proposal.find('.abstract').hide(); $proposal.find('.vote-actions .like').hide(); $proposal.find('.vote-actions .dislike').hide(); // $proposal.find('.vote-actions .vote-result').hide(); var $successPanel = $('.success-panel').clone(); $successPanel.find('.icon').addClass('icon-proposal-sent'); $successPanel.find('.message').html('Voto realizado com sucesso'); $successPanel.removeClass('hide'); $proposal.prepend($successPanel); $successPanel.show(); // $successPanel.css('top', Math.max(0, (($proposal.height() - $successPanel.outerHeight()) / 2) + $proposal.offset().top) + 'px'); // $successPanel.css('left', Math.max(0, (($proposal.width() - $successPanel.outerWidth()) / 2) + $proposal.offset().left) + 'px'); } else { $proposal.find('.abstract').hide(); $proposal.find('.vote-actions .like').hide(); $proposal.find('.vote-actions .dislike').hide(); var $successPanel = $('.success-panel').clone(); // $successPanel.find('.icon').addClass('icon-proposal-sent'); $successPanel.find('.message').html('Seu voto já foi computado nesta proposta'); $successPanel.removeClass('hide'); $proposal.prepend($successPanel); $successPanel.show(); // Main.displaySuccess($button.closest('.support-proposal .section-content'), , 800); // $successPanel.find('.message').html('Seu voto já foi computado nesta proposta'); } // ProposalApp.addVotedProposal(article.id); // contextMain.loadRandomProposal(topic_id, true); }); }); $body.off('click', '.vote-result'); $body.on('click', '.vote-result', function(e) { // e.preventDefault(); var $this = $(this); var $proposalDetail = $this.parents('.proposal-detail'); var $resultsContainer = $proposalDetail.find('.results-container'); if($resultsContainer.css('display') === 'none') { Main.loadRanking($resultsContainer, topic_id, 1); } else { $proposalDetail.find('.experience-proposal-container').show(); $proposalDetail.find('.talk-proposal-container').show(); $resultsContainer.hide(); // remove '/resultados' from URL window.location.hash = window.location.hash.split('/resultados')[0]; e.preventDefault(); } }); }).fail(function(){ $loading.hide(); $('.support-proposal .alert').show(); }); }, loadTopProposals: function (topic_id) { // TODO: start loading var url = host + '/api/v1/proposals_discussion_plugin/' + topic_id + '/ranking?per_page=3&page=1'; $.getJSON(url).done(function( data, stats, xhr ) { // TODO: stop loading if ( !data || !data.proposals ) { console.error('Proposals not found.'); return; } var $containerWrapper = $('#proposal-item-' + topic_id); var $containerTopProposals = $containerWrapper.find('.freeze--top-proposals'); var $tbody = $containerTopProposals.find('tbody'); if ( $containerTopProposals.css('display') === 'block' ) { // console.debug('Top ranking already loaded.'); return; } var TEMPLATE_TR = '' + '' + '{{position}}°' + '{{abstract}}' + '{{hits}}' + '{{votes_for}}' + '{{votes_against}}' + ''; var proposals = data.proposals; var proposal = null; var proposal_tpl = null; for (var i = proposals.length - 1; i >= 0; i--) { proposal = proposals[i]; proposal_tpl = '' + TEMPLATE_TR; proposal_tpl = replace(proposal_tpl, '{{position}}', proposal.position); proposal_tpl = replace(proposal_tpl, '{{abstract}}', proposal.abstract); proposal_tpl = replace(proposal_tpl, '{{hits}}', proposal.hits); proposal_tpl = replace(proposal_tpl, '{{votes_for}}', proposal.votes_for); proposal_tpl = replace(proposal_tpl, '{{votes_against}}', proposal.votes_against); $tbody.prepend($(proposal_tpl)); } $containerTopProposals.css('display', 'block'); // console.log('data', data); }); }, loadRanking: function($resultsContainer, topic_id, page) { $resultsContainer.find('.loading').show(); $resultsContainer.find('.results-content').hide(); var per_page = 10; var parentId = topic_id; //var url = host + '/api/v1/proposals_discussion_plugin/' + topic_id + '/ranking' + '?private_token=' + Main.private_token + '&per_page='+per_page+'&page='+page; var url = host + '/api/v1/proposals_discussion_plugin/' + topic_id + '/ranking' + '?per_page='+per_page+'&page='+page; $.getJSON(url).done(function( data, stats, xhr ) { data.pagination = { total: parseInt(xhr.getResponseHeader('Total')), per_page: parseInt(xhr.getResponseHeader('Per-Page')), page: page, }; // hack: add more info to result table var $header = $resultsContainer.closest('.categories').find('.proposal-header'); data.title = $header.find('.title').text(); data.topic_id = $header.find('a').attr('href').match(/\d+/)[0]; $resultsContainer.html(resultsTemplate(data)); $resultsContainer.find('.loading').hide(); $resultsContainer.find('.results-content').show(); $resultsContainer.find('.timeago').timeago(); $resultsContainer.show(); $resultsContainer.find('.footable').footable(); // must be called on visible elements. if(data.pagination.total > data.pagination.per_page) { $resultsContainer.find('.paging').pagination({ items: data.pagination.total, itemsOnPage: data.pagination.per_page, currentPage: data.pagination.page, prevText: '«', nextText: '»', cssStyle: 'compact-theme', onPageClick: function(page, e) { Main.loadRanking($resultsContainer, topic_id, page); e.preventDefault(); } }); } $resultsContainer.find('.abstract-text .truncated').click(function() { $(this).toggleClass('truncated'); }); var scrollTop = $(document).height(); var proposalOffset = $resultsContainer.offset(); if(proposalOffset){ scrollTop = proposalOffset.top; } // scroll to the end $('html, body').animate({scrollTop: scrollTop }, 'fast'); }); $('.experience-proposal-container').hide(); $('.talk-proposal-container').hide(); }, loginCallback: function(loggedIn, token, user) { logged_in = loggedIn; var requireLoginContainer; $('.login .message').text(''); if(loginButton){ requireLoginContainer = loginButton.closest('.require-login-container'); } if(user && !Main.getUser()) { Main.setUser(user); } if(logged_in) { Main.showLogout(); if(token){ Main.private_token = token; } $.cookie('_dialoga_session', Main.private_token); if(requireLoginContainer){ // requireLoginContainer = $('.require-login-container'); requireLoginContainer.find('.require-login').show(); requireLoginContainer.find('.require-login .message').show(); requireLoginContainer.find('.login-container').hide(); $('#login-panel').hide(); } } else if (user) { // fluxo signup vindo das caixas de login dentro dos programas if(requireLoginContainer && requireLoginContainer.length > 0){ var loginContainer = requireLoginContainer.find('.login-container'); loginContainer.show(); loginContainer.find('.new-user').click(); var $signupForm = loginContainer.find('#signup-form'); fillSignupForm($signupForm, user); } else { //signup botão Entrar principal vindo de OAUTH $('#login-panel').find('a.new-user').click(); var $signupForm = $('#login-panel #signup-form'); fillSignupForm($signupForm, user); } } else { if(requireLoginContainer){ requireLoginContainer.find('.require-login').hide(); requireLoginContainer.find('.login-container').show(); } Main.showLogin(); } }, guid: function() { function s4() { return Math.floor((1 + Math.random()) * 0x10000) .toString(16) .substring(1); } return s4() + s4() + '-' + s4() + '-' + s4() + '-' + s4() + '-' + s4() + s4() + s4(); }, display_article: function(article_id, backTo) { //var url = host + '/api/v1/articles/' + article_id + '?private_token=' + Main.private_token; var url = host + '/api/v1/articles/' + article_id; $.getJSON(url).done(function( data ) { $('#article-container .article-content').html(articleTemplate(data.article)); $('#article-container').show(); $('#proposal-categories').hide(); $('#proposal-group').hide(); $('nav').hide(); $('#content').hide(); $('.content').removeClass('background'); /* Remove class background*/ $('#article-container .go-back').attr('href', backTo); }); }, // inicio Eduardo randomProposalByTheme: function(themeClasses) { var $proposalGroup = $('#proposal-group'); var $proposalList = $proposalGroup.find('.proposal-list'); var $proposalItem = $proposalList.find('.proposal-item'); $proposalItem.hide(); $.each(themeClasses, function(i, themeClass) { var proposalsByTheme = $proposalList.find('.' + themeClass); var randomizedIndex = Math.floor(Math.random() * proposalsByTheme.length); // var proposalToShow = $(proposalsByTheme[randomizedIndex]).parents().filter('.proposal-item'); // $(proposalToShow).show(); $(proposalsByTheme[randomizedIndex]).show(); // Hack to align proposals at home if(themeClass == "cultura"){ var l = proposalsByTheme.length; var next = randomizedIndex + 1; next = next >= l ? 0 : next; $(proposalsByTheme[next]).show(); } }); }, display_category_tab: function(){ // $('#proposal-group').hide(); this.randomProposalByTheme(['saude', 'seguranca-publica', 'educacao', 'reducao-da-pobreza', 'cultura']); $('#proposal-group').show(); /* Show random proposals*/ $('.content').addClass('background'); /* Add class background */ $('#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().removeClass('hide'); $('#article-container').hide(); $('#content').show(); $('nav').show(); this.computeBoxHeight(); }, display_proposals_tab: function(){ // $('#proposal-categories').hide(); // this.randomProposalByTheme(['category-saude', 'category-seguranca-publica', 'category-educacao', 'category-reducao-da-pobreza']); $('.proposal-item').show(); /* Show all programs */ $('#proposal-group').show(); $('#proposal-categories').show(); $('.proposal-category-items').hide(); $('.proposal-detail').hide().removeClass('hide'); $('#nav-proposal-group a').addClass('active'); $('#nav-proposal-categories a').removeClass('active'); $('#content').show(); $('.content').addClass('background'); /* Add class background */ $('#article-container').hide(); $('nav').show(); $('html, body').animate({ scrollTop: $('#proposal-group').offset().top }, 'fast'); this.computeBoxHeight(); }, // fim Eduardo display_proposal: function(proposal_id){ $('#proposal-categories').hide(); $('#proposal-group').hide(); $('.proposal-category-items').hide(); /* Hide Category Items */ $('.content').removeClass('background'); /* Remove class background*/ $('nav').hide(); $('#content').hide(); $('#article-container').hide(); // $('.make-proposal-form').hide(); // $('.login-container').hide(); $('.proposal-detail').hide().removeClass('hide'); // hide all proposals // $('.proposal-detail-base').hide(); var $proposal = $('#' + proposal_id); $proposal.find('.proposal-detail-base').hide(); $proposal.show(); $proposal.find('.proposal-header').show(); $proposal.find('.make-proposal-container').show(); $proposal.find('.support-proposal-container').show(); $proposal.find('.results-container').hide(); $proposal.find('.results-container .loading').hide(); $proposal.find('.results-container .results-content').hide(); $proposal.find('.experience-proposal-container').show(); $proposal.find('.talk-proposal-container').show(); $proposal.find('.calendar').hide(); var active_category = ''; var category_id; switch($proposal.find('.categories').attr('class')) { case 'categories saude': active_category = 'saude'; category_id = 180; break; case 'categories educacao': active_category = 'educacao'; category_id = 181; break; case 'categories seguranca-publica': active_category = 'seguranca-publica'; category_id = 182; break; case 'categories reducao-da-pobreza': active_category = 'reducao-da-pobreza'; category_id = 183; break; case 'categories cultura': active_category = 'cultura'; category_id = 194; break; } var topic_id = proposal_id.split('-').pop(); this.loadRandomProposal(topic_id); this.loadTopProposals(topic_id); Main.display_events(category_id, active_category); }, display_proposal_detail: function(proposal_id){ $('.content').removeClass('background'); /* Remove class background */ $('#proposal-categories').hide(); $('#proposal-group').hide(); $('nav').hide(); $('#content').hide(); $('#article-container').hide(); var $proposal = $('#proposal-item-' + proposal_id); $proposal.find('.proposal-header').hide(); $proposal.find('.make-proposal-container').hide(); $proposal.find('.support-proposal-container').hide(); $proposal.find('.results-container').hide(); $proposal.find('.experience-proposal-container').hide(); $proposal.find('.talk-proposal-container').hide(); $proposal.find('.body').show(); $proposal.show(); //var url = host + '/api/v1/articles/' + proposal_id + '?private_token=' + Main.private_token + '&fields=id,body&content_type=ProposalsDiscussionPlugin::Topic'; var url = host + '/api/v1/articles/' + proposal_id + '?fields=id&fields[]=body&content_type=ProposalsDiscussionPlugin::Topic'; $.getJSON(url).done(function( data ) { $('#proposal-item-' + proposal_id + ' .body-content').replaceWith(data.article.body); }) .fail(function( jqxhr, textStatus, error ) { var err = textStatus + ', ' + error; console.error( '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-group').hide(); /* Hide section "Programas" */ $('.content').addClass('background'); /* Add class background */ $('.proposal-category-items').hide(); $('.proposal-detail').hide().removeClass('hide'); $('#article-container').hide(); $item.toggle( 'blind', 200, function () { var itemOffset = $item.offset(); if(itemOffset){ $('html, body').animate({ scrollTop: itemOffset.top }, 'fast'); } } ); $('.proposal-category .arrow-box').hide(); var categorySlug = $item.data('category'); $('#proposal-category-' + categorySlug).find('.arrow-box').show(); this.computeBoxHeight(); } }, addBarraDoGoverno: function(){ if( BARRA_ADDED ) { return; } var HTML_BODY_PREPEND = '' + '
' + '' + '
'; var HTML_BODY_APPEND = ''+ '' + ''; var STYLE_TEMA_AZUL = '' + '