sportsbet-mobile
Version:
Sportsbet mobile
317 lines (278 loc) • 7.8 kB
text/typescript
import BetSlipBet = Betting.BetSlipBet;
Backend.site = <any>{
handle: 'sportsbet-mobile'
};
declare var cdnUrl: string;
cdnUrl = `//cdn.coingaming.io/${Backend.site.handle}/`;
declare function ga(...args);
Tracker.autorun(function() {
Meteor.userId();
Meteor.subscribe('reporting/Tag');
});
UI.registerHelper('imagePath', function () {
return cdnUrl;
});
UI.registerHelper('activeUser', function () {
return Meteor.userId();
});
function displayOdds(odds) {
var currentFormat = Session.get('oddsFormat') || Users.OddsFormat.DECIMAL;
if (currentFormat === Users.OddsFormat.DECIMAL) {
if (_.isUndefined(odds)) {
return;
}
else {
return odds.toFixed(2);
}
}
else if (currentFormat === Users.OddsFormat.AMERICAN) {
return Betting.decimalToAmerican(odds);
}
else if (currentFormat === Users.OddsFormat.FRACTIONAL) {
return Betting.decimalToFractional(odds);
}
}
Meteor.subscribe('betting/Sport');
function oddsFormat(name) {
if (Session.get('oddsFormat') === Users.OddsFormat.AMERICAN) {
name = name.replace('Match Odds', 'Moneyline');
name = name.replace('Handicap', 'Spread');
name = name.replace('Over/Under', 'Total Points');
name = name.replace('Stake', 'Risk');
name = name.replace('Potential Win', 'To Win');
}
return name;
}
function getGame() {
var handle = Session.get('gameName');
if (!handle) {
return;
}
handle = handle.toLowerCase();
var game = <Casino.GameClient>Casino.Game.db.findOne({handle: handle});
if (!game) {
return;
}
return game;
}
function getGameUrl() {
if (!Template.instance().subscriptionsReady()) {
return;
}
var game = getGame();
var handle = game.handle;
Countries.IpClient.getConnectionCountry(function (err, res) {
if (err) {
return;
}
Session.set('countryClient', res._id);
});
var country = Session.get('countryClient');
if (!country) {
return;
}
Casino.GameClient.checkIfBlocked(handle, country, function (err) {
if (err) {
Session.set('splashTemplate', err.reason);
}
});
Casino.GameClient.checkIfExists(handle, function (err) {
if (err) {
Session.set('splashTemplate', 'gameError');
Session.set('splashMessage', err.details);
}
});
try {
var url = Session.get('forFun') ? game.getDemoUrl('en') : game.getUrl('en');
}
catch (err) {
if (['force_money_error', 'force_login_fun_error', 'force_login_error'].indexOf(err.reason) !== -1) {
Session.set('splashTemplate', err.reason);
}
else {
Session.set('splashTemplate', 'gameError');
}
Session.set('splashMessage', err.localeMessage);
}
if (url) {
url = url.replace('exitURL=%2Fcasino', 'exitURL=https://' + document.domain);
if (url.match(/betsoftgaming/i)) {
url = url + '&homeUrl=https://' + document.domain;
}
if (url.match(/playngonetwork/i)) {
url = url.replace('&lobby=/', ''); //this is fast fix
url = url + '&lobby=http://bitcasino.io';
}
if (!Session.get('redirectCalled')) {
Session.set('redirectCalled', true);
location.replace(url);
}
}
//return url;
return;
}
function calcAge(dateString) {
var birthday = +new Date(dateString);
/* tslint:disable */
return ~~((Date.now() - birthday) / (31557600000));
/* tslint:enable */
}
function resetGameUrl() {
var game = getGame();
if (!game) {
return;
}
if (Session.get('forFun')) {
game.resetDemoUrl();
game.getDemoUrl('en');
}
else {
game.resetUrl();
game.getUrl('en');
}
}
function requestFullScreen(el) {
var fullScreen = el.requestFullScreen || el.msRequestFullscreen || el.webkitRequestFullScreen || el.mozRequestFullScreen;
if (fullScreen) {
fullScreen.call(el);
}
else {
Session.set('fullScreen', true);
}
}
function setIFrameHeight() {
Session.set('iframeWidth', '100%');
var $iFrame = $('.gameArea').find('iframe');
if (!$iFrame[0]) {
Meteor.setTimeout(setIFrameHeight, 100);
}
else {
var game = getGame();
if (game && game.width) {
var ratio = game.height / game.width;
}
else {
var ratio = 3 / 4;
}
var iframeHeight = $(window).height() - 200;
var iframeWidth = Math.min(1100, iframeHeight / ratio);
Session.set('iframeWidth', iframeWidth + 'px');
if (iframeWidth === 1100) {
iframeHeight = iframeWidth * ratio;
}
Session.set('iframeHeight', iframeHeight + 'px');
}
}
function getScreenOrientation() {
if (window.matchMedia("(orientation: portrait)").matches) {
return 'Portrait';
}
if (window.matchMedia("(orientation: landscape)").matches) {
return 'Landscape';
}
}
function normaliseStr(str: string) {
return str.replace(/-/g, ' ').replace(/\w\S*/g, function(txt){
return txt.charAt(0).toUpperCase() + txt.substr(1).toLowerCase();
});
}
function validateBets() {
var balance = Session.get('balance');
var betslip = Betting.getBetSlip();
var isMulti = Betting.isMultibet();
var totalStake = Betting.getTotalStake() * 1000;
var allStakesOk = !_.find(betslip, function (bet: BetSlipBet) {
return bet.stake > 0 && bet.stake < 0.001;
});
var allBetsOk = !_.find(betslip, function (bet: BetSlipBet) {
return bet.state && bet.state.type === 'error';
});
var invalidStakes = !isMulti && betslip.length && !allStakesOk;
var invalidMultiStake = isMulti && betslip.length && totalStake > 0 && totalStake < 1;
if (totalStake > balance) {
Betting.setBetSlipState({
type: 'error',
message: 'Your bet is exceeding your available balance'
});
return;
}
else if (invalidStakes || invalidMultiStake) {
Betting.setBetSlipState({
type: 'error',
message: 'Minimum stake is 1.00 mBTC'
});
return;
}
else if (!betslip.length) {
Betting.setMultiStake(0);
Betting.clearBetSlip();
$('#betslip').collapse('hide');
return;
}
else if (betslip.length && !allBetsOk) {
Betting.setBetSlipState({type: 'error'});
return;
}
else if (isMulti && betslip.length) {
// if bets count equal to 1
if (betslip.length < 2) {
Betting.setBetSlipState({
type: 'error',
message: 'You need to select more than one market to make a multibet'
});
return;
}
// if multiple selections from the same event
let events: string[] = [];
let clearMarkets: boolean = true;
betslip.forEach((bet: any) => {
if (events.indexOf(bet.eventId) !== -1) {
clearMarkets = false;
Betting.setBetSlipState({
type: 'error',
message: 'Multiple selections from the same event cannot be combined in a Multibet.'
});
}
if (!(events.indexOf(bet.eventId) > -1)) {
events.push(bet.eventId);
}
});
if (clearMarkets) Betting.setBetSlipState(null);
}
else {
Betting.setBetSlipState(undefined);
}
}
function nl2br (str, is_xhtml) {
var breakTag = (is_xhtml || typeof is_xhtml === 'undefined') ? '<br ' + '/>' : '<br>'; // Adjust comment to avoid issue on phpjs.org display
return (str + '').replace(/([^>\r\n]?)(\r\n|\n\r|\r|\n)/g, '$1' + breakTag + '$2');
}
function disableSite() {
Session.set('siteLoading', true);
}
function enableSite() {
Session.set('siteLoading', false);
}
UI.registerHelper('displayOdds', displayOdds);
UI.registerHelper('oddsFormat', oddsFormat);
UI.registerHelper('calcAge', calcAge);
UI.registerHelper('parentData', function() {
return Template.parentData(1);
});
(<any>this).displayOdds = displayOdds;
(<any>this).oddsFormat = oddsFormat;
(<any>this).calcAge = calcAge;
(<any>this).getGame = getGame;
(<any>this).getGameUrl = getGameUrl;
(<any>this).resetGameUrl = resetGameUrl;
(<any>this).requestFullScreen = requestFullScreen;
(<any>this).setIFrameHeight = setIFrameHeight;
(<any>this).getScreenOrientation = getScreenOrientation;
(<any>this).normaliseStr = normaliseStr;
(<any>this).validateBets = validateBets;
(<any>this).nl2br = nl2br;
(<any>this).disableSite = disableSite;
(<any>this).enableSite = enableSite;
$(document).ready(function () {
Backend.SiteClient.addScripts();
});