Skip to content

Instantly share code, notes, and snippets.

@leongaban
Last active August 29, 2015 14:20
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save leongaban/22a8feb9dbeea0b90135 to your computer and use it in GitHub Desktop.
Save leongaban/22a8feb9dbeea0b90135 to your computer and use it in GitHub Desktop.
tickersPanelDirectives
/*global angular*/
/* =============================================================================
Tickers panel directives
============================================================================= */
(function() { "use strict";
var app = angular.module('tickersPanelDirectives', [])
.directive('tickersPanel', function() {
return {
templateUrl : "panels/tickers/tickersPanel.html",
restrict : "E",
// scope : false,
controller : function($scope,
$timeout,
$filter,
ApiFactory,
ScopeFactory,
TagFactory) {
// Init TickersPanelCtrl scope:
// ----------------------------
var vs = $scope,
tickerView = '',
initTicker = '',
notifications = {},
tagsScope = {},
viewHeader = {},
chartHeader = {};
vs.tickers = {},
vs.tickersContainer = [],
vs.loadingTickersDone = false,
vs.tickersAll = false;
function changePercentColor(first) {
chartHeader = ScopeFactory.getScope('chartHeader');
switch(first) {
case '+':
chartHeader.colorPercentage('positive');
break;
case '-':
chartHeader.colorPercentage('negative');
break;
default:
chartHeader.colorPercentage('stagnant');
}
};
vs.getTickers = function(type) {
vs.loadingTickersDone = false;
switch(type) {
case 'all':
tickerView = 'all';
ApiFactory.getTickers().then(function(data) {
renderTickers(data.data.tickers);
});
break;
case 'port':
tickerView = 'port';
vs.addOption = false;
vs.removeOption = true;
ApiFactory.getWatchList().then(function(data) {
renderTickers(data.data.tickers);
});
break;
}
function renderTickers(data) {
vs.tickers = data;
vs.toggleTicker = { item: 0 };
initTicker = vs.tickers[0].ticker;
var compName = vs.tickers[0].longname,
price = vs.tickers[0].current_last,
percent = vs.tickers[0].current_changepercent;
vs.tickersContainer.push(vs.tickers[0]);
chartHeader = ScopeFactory.getScope('chartHeader');
chartHeader.chosenTicker = initTicker;
chartHeader.companyName = compName;
chartHeader.currentPrice = price;
chartHeader.currentPercent = percent;
tagsScope = ScopeFactory.getScope('tagsPanel');
tagsScope.initialTickerLoaded(initTicker, 'init');
if (percent != undefined) {
var first = percent.toString().charAt(0);
changePercentColor(first);
}
vs.loadingTickersDone = true;
};
};
// Display portfolio by default:
vs.getTickers('port');
vs.revealTickerOptions = function() {
this.tickerOptions = true;
if (tickerView === 'all') {
this.addOption = true;
this.removeOption = false;
}
else if (tickerView === 'port') {
this.addOption = false;
this.removeOption = true;
}
};
function showMessage(message, status) {
var sta = status.toLowerCase();
notifications = ScopeFactory.getScope('notifications');
notifications.note_message = message;
notifications.note_type = sta;
notifications.showNote = true;
$timeout(notifications.timeoutMsg, 4000);
}
vs.addPortfolio = function(ticker) {
this.tickerOptions = false;
ApiFactory.postWatchList(ticker).then(function(data) {
showMessage(ticker+' added to portfolio!', data.data.status);
});
};
vs.removePortfolio = function(ticker) {
this.tickerOptions = false;
ApiFactory.deleteWatchList(ticker).then(function(data) {
showMessage(ticker+' removed from portfolio!', data.data.status);
ticker.removed = true;
});
};
vs.hideTickerOptions = function() {
this.tickerOptions = false;
};
vs.selectTicker = function(ticker) {
if (ticker != initTicker) {
initTicker = ticker;
// Get tagsObject for ticker:
var tagsObject = TagFactory.retrieveTickerTags('ticker', ticker);
if (tagsObject) {
tagsScope.initialTickerLoaded(ticker, 'reloadTags');
}
else {
tagsScope.initialTickerLoaded(ticker);
var tickerObj = $filter('filter')(vs.tickers, { ticker: ticker })[0];
chartHeader.chosenTicker = ticker;
chartHeader.companyName = tickerObj.longname;
chartHeader.currentPrice = tickerObj.current_last;
var percent = chartHeader.currentPercent = tickerObj.current_changepercent;
if (percent != undefined) {
var first = percent.toString().charAt(0);
changePercentColor(first);
}
}
}
};
}
}
});
})();
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment