From b85ba2b2066b765c9ea3c2bc5f0b51ce7068a521 Mon Sep 17 00:00:00 2001 From: Victor Costa Date: Mon, 4 May 2015 11:52:00 -0300 Subject: [PATCH] Fix cross domain ajax request for IE --- js/jquery.xdomainrequest.min.js | 7 +++++++ js/main.js | 686 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- js/requirejs-config.js | 6 +++++- 3 files changed, 355 insertions(+), 344 deletions(-) create mode 100644 js/jquery.xdomainrequest.min.js diff --git a/js/jquery.xdomainrequest.min.js b/js/jquery.xdomainrequest.min.js new file mode 100644 index 0000000..11a42c5 --- /dev/null +++ b/js/jquery.xdomainrequest.min.js @@ -0,0 +1,7 @@ +/*! + * jQuery-ajaxTransport-XDomainRequest - v1.0.3 - 2014-06-06 + * https://github.com/MoonScript/jQuery-ajaxTransport-XDomainRequest + * Copyright (c) 2014 Jason Moon (@JSONMOON) + * Licensed MIT (/blob/master/LICENSE.txt) + */ +(function(a){if(typeof define==='function'&&define.amd){define(['jquery'],a)}else if(typeof exports==='object'){module.exports=a(require('jquery'))}else{a(jQuery)}}(function($){if($.support.cors||!$.ajaxTransport||!window.XDomainRequest){return}var n=/^https?:\/\//i;var o=/^get|post$/i;var p=new RegExp('^'+location.protocol,'i');$.ajaxTransport('* text html xml json',function(j,k,l){if(!j.crossDomain||!j.async||!o.test(j.type)||!n.test(j.url)||!p.test(j.url)){return}var m=null;return{send:function(f,g){var h='';var i=(k.dataType||'').toLowerCase();m=new XDomainRequest();if(/^\d+$/.test(k.timeout)){m.timeout=k.timeout}m.ontimeout=function(){g(500,'timeout')};m.onload=function(){var a='Content-Length: '+m.responseText.length+'\r\nContent-Type: '+m.contentType;var b={code:200,message:'success'};var c={text:m.responseText};try{if(i==='html'||/text\/html/i.test(m.contentType)){c.html=m.responseText}else if(i==='json'||(i!=='text'&&/\/json/i.test(m.contentType))){try{c.json=$.parseJSON(m.responseText)}catch(e){b.code=500;b.message='parseerror'}}else if(i==='xml'||(i!=='text'&&/\/xml/i.test(m.contentType))){var d=new ActiveXObject('Microsoft.XMLDOM');d.async=false;try{d.loadXML(m.responseText)}catch(e){d=undefined}if(!d||!d.documentElement||d.getElementsByTagName('parsererror').length){b.code=500;b.message='parseerror';throw'Invalid XML: '+m.responseText;}c.xml=d}}catch(parseMessage){throw parseMessage;}finally{g(b.code,b.message,c,a)}};m.onprogress=function(){};m.onerror=function(){g(500,'error',{text:m.responseText})};if(k.data){h=($.type(k.data)==='string')?k.data:$.param(k.data)}m.open(j.type,j.url);m.send(h)},abort:function(){if(m){m.abort()}}}})})); \ No newline at end of file diff --git a/js/main.js b/js/main.js index cf4786a..9e0b35c 100644 --- a/js/main.js +++ b/js/main.js @@ -30,6 +30,349 @@ define(['handlebars','handlebars_helpers'], function(Handlebars){ //var proposal_discussion = '401'; //casa } + var BARRA_ADDED = false; + var HIDE_BARRA_DO_GOVERNO = false; + + 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(ProposalApp.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*/ ) { + ProposalApp.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(); + } + }, + 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_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(); + $('.calendar').slick(); + 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(); + $('#proposal-item-' + proposal_id + '.proposal-detail').show(); + $('#proposal-item-' + proposal_id + ' .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 ) { + $('#proposal-item-' + proposal_id + ' .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 = '' + + '