MyIRR
by ilancopelyn
HTML
<script src="http://cdn.sencha.com/ext/gpl/4.2.0/ext-all-dev.js"></script>
<!--
NOTE: In order to try different Ext versions you have to manually change "External Resources" on the left.
CDN urls:
4.2.1 = http://cdn.sencha.com/ext/gpl/4.2.1/ext-all-dev.js (breaks - see javascript console)
4.2.0 = http://cdn.sencha.com/ext/gpl/4.2.0/ext-all-dev.js (ok but slow on switching)
4.1.1 = http://cdn.sencha.io/ext-4.1.1-gpl/ext-all.js (ok but old, and neptune theme broken)
-->
CSS
/*
Comment / uncomment appropriate CSS resources depending on the EXT framework version in use - see External Resources, and notes in HTML window
*/
@import 'http://cdn.sencha.com/ext/gpl/4.2.0/resources/css/ext-all-neptune.css'
/*
@import 'http://cdn.sencha.com/ext/gpl/4.2.1/resources/css/ext-all-neptune.css'
@import 'http://cdn.sencha.io/ext-4.1.1-gpl/resources/css/ext-all.css'
*/
JavaScript
Ext.override(Ext.Component, {
toJQuery: function () {
return $(this.getEl().dom);
}
});
function Round(number, digits) {
var multiple = Math.pow(10, digits);
var rndedNum = Math.round(number * multiple) / multiple;
return rndedNum;
};
function SAMoney(v) {
/*if (typeof v === 'undefined')
return '';*/
if (v == null)
return '';
else if (isNaN(v))
return '';
else
return Ext.util.Format.currency(v, 'R', 2);
}
function GreenRedSAMoney(v) {
if (v == null) {
return v;
}
if (v == 0) {
return SAMoney(v);
} else if (v > 0) {
return '<span style="color:green;">' + SAMoney(v) + '</span>';
} else {
return '<span style="color:red;">' + SAMoney(v) + '</span>';
}
}
function GreenRedNumber(v) {
if (v == null) {
return v;
}
if (v == 0) {
return '0';
} else if (v > 0) {
return '<span style="color:green;">' + Round(v, 2) + '</span>';
} else {
return '<span style="color:red;">' + Round(v, 2) + '</span>';
}
}
function GreenRedPercent(v) {
if (v == null) {
return v;
}
if (v == 0) {
return '0%';
} else if (v > 0) {
return '<span style="color:green;">' + Round(v * 100, 2) + '%</span>';
} else {
return '<span style="color:red;">' + Round(v * 100, 2) + '%</span>';
}
}
var IRRPerformanceGrid = (function () {
var me = {};
me.SelectedMenu = [], // NOTE: 1-based index
me.SubMenus = ['Summary', 'Source of Return', 'Change During Period', 'Opening & Closing Positions'];
me.SubMenuNodes = {};
// Setup in init()
me.Columns = [];
me.performanceGrid = [];
me.performanceGridBottom = [];
me.performanceGridPeriod = [];
me.init = function (irrMenu, performanceGrid, performanceGridBottom) {
// Setup pointers to submenu DOM elements
if (me.SubMenuNodes[irrMenu.id] === undefined) {
...