You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
305 lines
8.8 KiB
305 lines
8.8 KiB
9 years ago
|
var coinManagement = {};
|
||
|
|
||
|
|
||
|
// Classes
|
||
|
|
||
|
coinManagement.Coin = function (_id, _symbol, _description, _statusId) {
|
||
|
this.Id = _id;
|
||
|
this.Symbol = _symbol;
|
||
|
this.Description = _description;
|
||
|
this.StatusId = _statusId;
|
||
|
};
|
||
|
|
||
|
coinManagement.CoinStatus = function (_id, _name) {
|
||
|
this.Id = _id;
|
||
|
this.Name = _name;
|
||
|
};
|
||
|
|
||
|
|
||
|
// Initialization
|
||
|
|
||
|
coinManagement.loggingEnabled = true;
|
||
|
coinManagement.Coins = [];
|
||
|
|
||
|
coinManagement.CoinStatuses = [
|
||
|
new coinManagement.CoinStatus(1, 'Dormant'),
|
||
|
new coinManagement.CoinStatus(2, 'Launched'),
|
||
|
new coinManagement.CoinStatus(3, 'Started'),
|
||
|
new coinManagement.CoinStatus(4, 'Paused')
|
||
|
];
|
||
|
|
||
|
coinManagement.Initialize = function () {
|
||
|
coinManagement.Coins = [
|
||
|
new coinManagement.Coin(6, 'USD', 'US Dollar', 1),
|
||
|
new coinManagement.Coin(2, 'EUR', 'EURO', 2),
|
||
|
new coinManagement.Coin(3, 'GBP', 'British Pound', 3),
|
||
|
new coinManagement.Coin(4, 'INR', 'Indian Rupee', 4),
|
||
|
new coinManagement.Coin(5, 'YEN', 'Japanese Yen', 3)
|
||
|
];
|
||
|
}
|
||
|
|
||
|
coinManagement.GetCoinIndex = function (id) {
|
||
|
|
||
|
if (coinManagement.Coins == null || coinManagement.Coins == undefined) {
|
||
|
return -1;
|
||
|
}
|
||
|
|
||
|
for (var index = 0; index < coinManagement.Coins.length; index++) {
|
||
|
if (coinManagement.Coins[index].Id == id) {
|
||
|
console.log('# coin ID:' + id.toString() + 'is @' + index);
|
||
|
return index;
|
||
|
}
|
||
|
}
|
||
|
};
|
||
|
|
||
|
coinManagement.Post = function (coin) {
|
||
|
|
||
|
if (coin === null || coin === undefined) {
|
||
|
console.log('# can not add coin, invalid record');
|
||
|
return false;
|
||
|
}
|
||
|
|
||
|
console.log('# posting coin', coin);
|
||
|
coinManagement.Coins.push(coin);
|
||
|
};
|
||
|
|
||
|
coinManagement.Get = function () {
|
||
|
console.log('# getting coins');
|
||
|
return coinManagement.Coins;
|
||
|
};
|
||
|
|
||
|
coinManagement.Delete = function (id) {
|
||
|
|
||
|
if (id == null || id == undefined) {
|
||
|
console.log('# invalid Coin Id');
|
||
|
return false;
|
||
|
}
|
||
|
|
||
|
var index = coinManagement.GetCoinIndex(id);
|
||
|
if (index == null || index == undefined || index < 0) {
|
||
|
console.log('# the coin index is invalid');
|
||
|
}
|
||
|
|
||
|
console.log('# coin deleted with id:', id, '@ index', index);
|
||
|
coinManagement.Coins.splice(index, 1);
|
||
|
};
|
||
|
|
||
|
coinManagement.getNewCoinId = function () {
|
||
|
|
||
|
console.log('# getting new id');
|
||
|
|
||
|
var newId = -1;
|
||
|
|
||
|
// Get an array of ids
|
||
|
var ids = coinManagement.Coins.map(function (elem, index) {
|
||
|
return elem.Id;
|
||
|
});
|
||
|
|
||
|
// sort ids
|
||
|
ids.sort(function (x, y) {
|
||
|
return (x - y);
|
||
|
});
|
||
|
|
||
|
// get the next id
|
||
|
for (var i = 0; i < ids.length; i++) {
|
||
|
if (ids.indexOf(i) == -1) {
|
||
|
newId = i;
|
||
|
break;
|
||
|
}
|
||
|
};
|
||
|
|
||
|
// worst case scenario
|
||
|
if (newId == -1) {
|
||
|
newId = ids.length;
|
||
|
}
|
||
|
|
||
|
console.log('# new id: ', newId);
|
||
|
return newId;
|
||
|
};
|
||
|
|
||
|
// Helper functions
|
||
|
|
||
|
// Genric Functions to read a key from local storage : for Chrome Browser and Chrome Extension App
|
||
|
var readCache = function (key) {
|
||
|
|
||
|
// Check if this is a chrome extension App
|
||
|
if (chrome != null && chrome != undefined && chrome.storage != null && chrome.storage != undefined) {
|
||
|
|
||
|
}
|
||
|
|
||
|
// Else it should be a browser, which supports HTML 5 localStorage API
|
||
|
else {
|
||
|
|
||
|
}
|
||
|
};
|
||
|
|
||
|
// Genric Functions to add/update key value pair in lcoal storage : for Chrome Browser and Chrome Extension App
|
||
|
var updateCache = function (key, value) {
|
||
|
// Check if this is a chrome extension App
|
||
|
if (chrome != null && chrome != undefined && chrome.storage != null && chrome.storage != undefined) {
|
||
|
|
||
|
}
|
||
|
|
||
|
// Else it should be a browser, which supports HTML 5 localStorage API
|
||
|
else {
|
||
|
|
||
|
}
|
||
|
};
|
||
|
|
||
|
var populateCoinStatusDropDown = function () {
|
||
|
console.log('# populating coin status dropdown');
|
||
|
var select = document.getElementById('ddStatus');
|
||
|
for (var i = 0; i < coinManagement.CoinStatuses.length; i++) {
|
||
|
var option = document.createElement('option');
|
||
|
option.value = coinManagement.CoinStatuses[i].Id
|
||
|
option.textContent = coinManagement.CoinStatuses[i].Name;
|
||
|
select.appendChild(option);
|
||
|
};
|
||
|
console.log('# populated coin status dropdown');
|
||
|
};
|
||
|
|
||
|
var coinEditFormIsValid = function () {
|
||
|
|
||
|
var txt_symbol = document.getElementById('txtSymbol').value;
|
||
|
var txt_description = document.getElementById('txtDescription').value;
|
||
|
var dd_Status = document.getElementById('ddStatus').value;
|
||
|
|
||
|
var symbol_group = document.getElementById('txtSymbolGroup');
|
||
|
var description_group = document.getElementById('txtDescriptionGroup');
|
||
|
var status_group = document.getElementById('ddCoinStatus');
|
||
|
|
||
|
symbol_group.removeAttribute('class');
|
||
|
symbol_group.setAttribute('class', 'form-group');
|
||
|
|
||
|
description_group.removeAttribute('class');
|
||
|
description_group.setAttribute('class', 'form-group');
|
||
|
|
||
|
status_group.removeAttribute('class');
|
||
|
status_group.setAttribute('class', 'form-group');
|
||
|
|
||
|
if (txt_symbol == null || txt_symbol == undefined || txt_symbol.length == 0) {
|
||
|
symbol_group.removeAttribute('class');
|
||
|
symbol_group.setAttribute('class', 'has-error form-group');
|
||
|
return false;
|
||
|
} else if (txt_description == null || txt_description == undefined || txt_description.length == 0) {
|
||
|
description_group.removeAttribute('class');
|
||
|
description_group.setAttribute('class', 'has-error form-group');
|
||
|
return false;
|
||
|
} else if (dd_Status == null || dd_Status == undefined || dd_Status.length == 0) {
|
||
|
status_group.removeAttribute('class');
|
||
|
status_group.setAttribute('class', 'has-error form-group');
|
||
|
return false;
|
||
|
}
|
||
|
};
|
||
|
|
||
|
var GetStatusName = function (id) {
|
||
|
for (var index = 0; index < coinManagement.CoinStatuses.length; index++) {
|
||
|
if (coinManagement.CoinStatuses[index].Id == id) {
|
||
|
return coinManagement.CoinStatuses[index].Name;
|
||
|
}
|
||
|
}
|
||
|
};
|
||
|
|
||
|
var GetStatusNameHtml = function (id) {
|
||
|
var result = GetStatusName(id);
|
||
|
|
||
|
switch (parseInt(id)) {
|
||
|
case 1:
|
||
|
return '<span class="label label-info">' + result + '</span>';
|
||
|
break;
|
||
|
|
||
|
case 2:
|
||
|
return '<span class="label label-primary">' + result + '</span>';
|
||
|
break;
|
||
|
|
||
|
case 3:
|
||
|
return '<span class="label label-success">' + result + '</span>';
|
||
|
break;
|
||
|
|
||
|
case 4:
|
||
|
return '<span class="label label-danger">' + result + '</span>';
|
||
|
break;
|
||
|
|
||
|
default:
|
||
|
coinManagement.log('Invalid Status ID : ' + id);
|
||
|
return '<span class="label label-default">#Invalid</span>';
|
||
|
break;
|
||
|
}
|
||
|
|
||
|
};
|
||
|
|
||
|
var getActionButton = function (id) {
|
||
|
return '<button class="btn btn-raised btn-danger btn-xs coinMgmtActionButton" data-id=' + id + '>Delete</button>';
|
||
|
};
|
||
|
|
||
|
var objToHtml = function (objCoin) {
|
||
|
if (objCoin == null || objCoin == undefined) {
|
||
|
return '';
|
||
|
}
|
||
|
return '<tr><td>' + objCoin.Symbol + '</td><td>' + objCoin.Description + '</td><td>' + GetStatusNameHtml(objCoin.StatusId) + '</td><td>' + getActionButton(objCoin.Id) + '</td></tr>';
|
||
|
};
|
||
|
|
||
|
var addCoin = function (e) {
|
||
|
|
||
|
console.log('# add coin called');
|
||
|
e.target.removeAttribute('data-dismiss');
|
||
|
|
||
|
if (coinEditFormIsValid() == false) {
|
||
|
console.log('# add coin form is invalid');
|
||
|
return;
|
||
|
}
|
||
|
|
||
|
e.target.setAttribute('data-dismiss', 'modal');
|
||
|
|
||
|
var id = coinManagement.getNewCoinId();
|
||
|
var txt_symbol = document.getElementById('txtSymbol').value;
|
||
|
var txt_description = document.getElementById('txtDescription').value;
|
||
|
var dd_Status = document.getElementById('ddStatus').value;
|
||
|
|
||
|
var objNewCoin = new coinManagement.Coin(id, txt_symbol, txt_description, dd_Status);
|
||
|
coinManagement.Post(objNewCoin);
|
||
|
|
||
|
console.log('# coin added');
|
||
|
renderGrid();
|
||
|
coinEditFormReset();
|
||
|
};
|
||
|
|
||
|
var renderGrid = function () {
|
||
|
|
||
|
console.log('# refreshing coin grid');
|
||
|
|
||
|
var coinsTableBody = document.getElementById('Coins_table').getElementsByTagName('tbody')[0];
|
||
|
coinsTableBody.innerHTML = '';
|
||
|
|
||
|
coinManagement.Coins.forEach(function (element) {
|
||
|
var htmlCoin = objToHtml(element);
|
||
|
coinsTableBody.innerHTML += htmlCoin;
|
||
|
});
|
||
|
};
|
||
|
|
||
|
var deleteCoin = function (id) {
|
||
|
console.log('# coin delete called');
|
||
|
coinManagement.Delete(id);
|
||
|
renderGrid();
|
||
|
};
|
||
|
|
||
|
var coinEditFormReset = function () {
|
||
|
document.getElementById('txtSymbol').value = '';
|
||
|
document.getElementById('txtDescription').value = '';
|
||
|
document.getElementById('ddStatus').value = 1;
|
||
|
}
|
||
|
// Event Handlers
|
||
|
|
||
|
var startCoinManagement = function () {
|
||
|
|
||
|
coinManagement.Initialize();
|
||
|
|
||
|
document.getElementById('btnSaveCoinForm').onclick = addCoin;
|
||
|
document.getElementById('btnClearCoinForm').onclick = coinEditFormReset;
|
||
|
document.getElementById('Coins_refresh').onclick = renderGrid;
|
||
|
document.getElementById('Coins_reset').addEventListener('click', coinManagement.Initialize);
|
||
|
document.getElementById('Coins_reset').addEventListener('click', renderGrid);
|
||
|
|
||
|
renderGrid();
|
||
|
populateCoinStatusDropDown();
|
||
|
}
|