{%extends "basedialog.html"%} {%block title %}Twitter Sentiment Analysis{%endblock%} {%block body%}
Streaming Logs

Streaming in progress. Are you sure you want to close?

{%endblock%} {%block onCancel%} $('#demoScript{{prefix}}').remove(); $('#results{{prefix}}').html('

Twitter Sentiment has been cancelled.

'); $('#loading{{prefix}}').css('display','none'); {%endblock%} {%block onOK%} $('#demoScript{{prefix}}').remove(); $('#results{{prefix}}').html('

A dataframe containing your twitter content has been created and added to the cell below.

'); $('#loading{{prefix}}').css('display','none'); {%endblock%} {%block onDialogShown%} window.Pixiedust = window.Pixiedust || {}; window.Pixiedust.twitterdemo = window.Pixiedust.twitterdemo || {}; var pix = window.Pixiedust.twitterdemo; var tdiag = $(this).find('.modal-dialog') .addClass('modal-dialog-stream'); var startBtn = $('#startStreamBtn', tdiag); var logDiv = $('.stream-log > .chart-stage', tdiag); var filterInput = $('#twitter-filter-input', tdiag); var resultsDiv = $('#results{{prefix}}'); var loadingDiv = $('#loading{{prefix}}'); var cardList = $('.twitter-cards-list'); var streamingSpinner = $('.pixiedust .modal-header button.close') .html('') .prop('disabled', true) .css({display: 'none'}); var tweetsCount = $('.twitter-cards-msg > span:first-child'); var numTweets = 0; var pauseScroll = false; var hiddenCards = []; var sentimentColor = (function() { var domain = [ 'agreeableness_big5', 'analytical', 'anger', 'confident', 'conscientiousness_big5', 'disgust', 'extraversion_big5', 'fear', 'joy', 'neuroticism_big5', 'openness_big5', 'sadness', 'tentative' ]; var colors = [ '#1F77B4','#AEC7E8','#FF7F0E','#FFBB78','#2CA02C', '#98DF8A','#D62728','#FF9896','#9467BD','#C5B0D5', '#8C564B','#C49C94','#E377C2','#F7B6D2','#7F7F7F', '#C7C7C7','#BCBD22','#DBDB8D','#17BECF','#9EDAE5' ] return function(sentiment) { return colors[Math.max(domain.indexOf(sentiment), 0)]; } })(); var logMsg = function(data) { var BEGINSTREAM = '@BEGINSTREAM@'; var ENDSTREAM = '@ENDSTREAM@'; function doLogMsg(msg){ if (msg.indexOf && msg.indexOf(BEGINSTREAM) === 0) { updateBtns('started'); }else if (msg.indexOf && msg.indexOf(ENDSTREAM) === 0) { updateBtns('stopped'); }else{ logDiv.append('' + msg + ''); } } if (Array.isArray(data)){ data.forEach(function(msg, index){ doLogMsg(msg); }); }else{ doLogMsg(data) } }; var updateBtns = function(status) { switch (status) { case 'starting': logMsg(new Date()); tdiag.attr('data-streaming', 'starting'); startBtn.prop('disabled', true); startBtn.text('Starting...'); streamingSpinner.css({display: 'inline'}); $('.trending-hashtags > .chart-stage', tdiag).html(''); $('.trending-sentiments > .chart-stage', tdiag).html(''); $('.twitter-cards-list', tdiag).empty(); $('.twitter-cards-list-wrapper', tdiag).prepend(''); filterInput.prop('disabled', true) .parent().css({'opacity': 0.5}); numTweets = 0; tweetsCount.html(numTweets); break; case 'started': tdiag.attr('data-streaming', true); startBtn.prop('disabled', false); startBtn.text('Stop Streaming'); streamingSpinner.css({display: 'inline'}); filterInput.prop('disabled', true) .parent().css({'opacity': 0.5}); break; case 'stopping': tdiag.attr('data-streaming', 'stopping'); startBtn.prop('disabled', true); startBtn.text('Stopping...'); streamingSpinner.css({display: 'inline'}); filterInput.prop('disabled', true) .parent().css({'opacity': 0.5}); break; case 'stopped': tdiag.attr('data-streaming', false); startBtn.prop('disabled', false); startBtn.text('Start Streaming'); streamingSpinner.css({display: 'none'}); filterInput.prop('disabled', false) .parent().css({'opacity': 1}); $('.starting-spinner', tdiag).remove(); logMsg(new Date()); break; } }; var processHashtags = function(data) { $('.trending-hashtags > .chart-stage > :not(svg)', tdiag).remove(); pix.piechart('.trending-hashtags > .chart-stage', data[data.length-1]); }; var processSentiments = function(data) { $('.trending-sentiments > .chart-stage > :not(svg)', tdiag).remove(); pix.groupedchart('.trending-sentiments > .chart-stage', data[data.length-1], sentimentColor); }; var scrollCards = function() { tweetsCount.html(numTweets); if (!pauseScroll) { cardList.parent().animate({ scrollTop: cardList.parent().prop('scrollHeight') }, 1500, function() { while (cardList.children('li').length > 50) { $('li', cardList).first().remove(); } }); } }; var maxSentiment = function(obj) { var max; for (var o in obj) { if (!max || obj[o] > max.value) { max = { key: o, value: obj[o] }; } } return max; }; var showTweets = function(tweets) { $('.twitter-cards-list-wrapper > .starting-spinner', tdiag).remove(); var template = '
  • ' + '
    ' + '
    ' + '' + '' + '
    {thesentiments}' + '
  • '; numTweets += tweets.length; tweets.forEach(function(tweet, index) { if (tweet.sentiment) { tweet.color = sentimentColor(maxSentiment(tweet.sentiment).key); } tweet.thesentiments = ''; for (var sentiment in tweet.sentiment) { tweet.thesentiments += '
    ' + sentiment + ': ' + parseFloat(tweet.sentiment[sentiment]).toFixed(0) + '%
    '; } var t = $(template.replace(/\{(.+?)\}/g, function($0, $1) { return tweet.hasOwnProperty($1) ? tweet[$1] : $0; })); t.hover(function() { $(this).find('.sentiment').slideToggle(); }, function() { $(this).find('.sentiment').slideToggle(); }); cardList.append(t); }); scrollCards(); }; pix.register(function(data) { if (data) { if (data.log) { logMsg(data.log); } if (data.status) { updateBtns(data.status); } if (data.topHashtags) { processHashtags(data.topHashtags); } if (data.toneScores) { processSentiments(data.toneScores); } if (data.tweets) { showTweets(data.tweets); } if (data.stdout){ console.log("stdout", data.stdout) } } }); startBtn.click(function() { var idx = startBtn.text().indexOf('Start'); if (idx == -1) { pix.stop(); } else { pix.start(filterInput.val()); } }); cardList.hover( function() { pauseScroll = true; }, function() { pauseScroll = false; } ); filterInput .focus(function() { tdiag.find('.twitter-filter label').css({color:'#a6266e'}) }) .blur(function() { tdiag.find('.twitter-filter label').css({color:'#1d3649'}) }); var okBtn = $('.btn-ok', tdiag); var backBtn = $(''); var yesBtn = $(''); var noBtn = $(''); okBtn.parent().append(backBtn); okBtn.parent().append(yesBtn); okBtn.parent().append(noBtn); backBtn .click(function(event) { event.preventDefault(); var streaming = tdiag.attr('data-streaming'); if (!streaming || streaming.toLowerCase() === 'false') { okBtn.click(); } else { $('.tab-pane-stream').removeClass('active'); $('.tab-pane-confirm').addClass('active'); tdiag .removeClass('modal-dialog-stream') .addClass('modal-dialog-confirm'); } }); noBtn.click(function(event) { $('.tab-pane-confirm').removeClass('active'); $('.tab-pane-stream').addClass('active'); tdiag .removeClass('modal-dialog-confirm') .addClass('modal-dialog-stream'); }); yesBtn.click(function(event) { pix.stop(); okBtn.click(); }); $('.modal-footer').prepend(startBtn); streamingSpinner.after('Fork me on GitHub'); logMsg(':: Twitter Sentiment Analysis ::'); {%endblock%} {%block onDialogHide%} window.Pixiedust.twitterdemo.stopCollectData(); {%endblock%} {%block cellOuputHTML%}
    {%endblock%}