diff --git a/src/Nancy.BundleIt/BundleItTestSite/app/pages/vendors/vendor-info-form.js b/src/Nancy.BundleIt/BundleItTestSite/app/pages/vendors/vendor-info-form.js deleted file mode 100644 index 209bd62..0000000 --- a/src/Nancy.BundleIt/BundleItTestSite/app/pages/vendors/vendor-info-form.js +++ /dev/null @@ -1,39 +0,0 @@ -(function () { - - var VendorInfoForm = { - show: function (vendor_id, options, callback) { - - // template - var vendorlist = new Ractive({ - el: "VendorInfoFormModal", - template: "#VendorInfoFormTemplate", - data: null - }); - - // events - vendorlist.on("edit", function (e) { - options.onEditEvent(); - }) - - vendorlist.on("close", function (e) { - options.onCloseEvent(); - }); - - // initialize - function LoadVendorData(vendorid) { - vendorServices.GetVendor(vendorid, function (result) { - vendorlist.data = result.Data; - $("#VendorInfoFormModal").modal("show"); - }); - } - LoadVendorData(vendor_id) - - } - }; - - - if (!fcr.VendorInfoForm) { - fcr.VendorInfoForm = VendorInfoForm; - } - -})(); \ No newline at end of file diff --git a/src/Nancy.BundleIt/BundleItTestSite/app/pages/vendors/vendor-input-form.js b/src/Nancy.BundleIt/BundleItTestSite/app/pages/vendors/vendor-input-form.js deleted file mode 100644 index 9878831..0000000 --- a/src/Nancy.BundleIt/BundleItTestSite/app/pages/vendors/vendor-input-form.js +++ /dev/null @@ -1,161 +0,0 @@ -(function () { - - var VendorInputForm = { - show: function (vendor_id, vendor, options, callback) { - - var jqVendorForm = null; - var defaultOptions = { - onAddEvent: false, - onSaveEvent: false, - onCloseEvent: false - } - - // set options - options = $.extend(true, defaultOptions, options); - - // globals - var VendorInputFormModal = $("#VendorInputFormModal"); - var mode = vendor_id == null && vendor == null ? 0 : 1; - - // template - var vendor_input_form = new Ractive({ - el: "VendorInputFormModal", - template: "#VendorInputFormTemplate", - data: { - FormData: { - Address: { - StateId: fcr.States[0].Id - } - }, - mode: mode, - states: fcr.States - }, - complete: function () { - - // initialize - jqVendorForm = $("#VendorInputFormModal form").parsley(); - jqVendorName = $("#vifName"); - - jqVendorName.popover({ - trigger: "manual" - }); - - // form validation events - jqVendorForm.subscribe("parsley:field:error", function (fieldInstance) { - - if (fieldInstance.$element[0].id == "vifName" && $.trim(jqVendorName.val()) != "") { - - jqVendorName.popover('destroy'); - - jqVendorName.popover({ - trigger: "manual", - content: "This vendor already exists." - }); - - jqVendorName.popover("show"); - } - - }); - - jqVendorForm.subscribe("parsley:field:success", function (fieldInstance) { - - if (fieldInstance.$element[0].id == "vifName") - jqVendorName.popover("hide"); - - }); - - } - }); - - - // events - vendor_input_form.on("add", function (e) { - - jqVendorForm.asyncValidate() - .done(function () { - vendor_input_form.set("sending_request", true); - vendorServices.AddVendor(e.context.FormData, function (result) { - - vendor_input_form.set("sending_request", false); - - if (result.IsError) { - vendor_input_form.set("error_msg", result.Status); - } - - if (options.onSaveEvent) { - e.context.FormData.Id = result.Data; - options.onSaveEvent(e.context.FormData); - } - - VendorInputFormModal.modal("hide"); - - }); - - }).fail(function (result) { - vendor_input_form.set("error_msg", result.statusText); - }); - - }) - - vendor_input_form.on("is-number", function (e) { - toolbox.IsNumeric(e.original, false); - }); - - vendor_input_form.on("clear-form-alert", function (e) { - vendor_input_form.set("error_msg", null); - }) - - vendor_input_form.on("save", function (e) { - jqVendorForm.validate(); - }); - - vendor_input_form.on("close", function (e) { - - if (options.onCloseEvent) - options.onCloseEvent(); - - }); - - - - // methods - function GetVendorData(vendorid) { - - vendorServices.GetVendor(vendorid, function (result) { - vendor_input_form.set({ - FormData: result - }); - - $("#VendorInputFormModal").modal("show"); - }); - - } - - function LoadVendorData(vendor){ - vendor_input_form.set({ - FormData: vendor - }); - - $("#VendorInputFormModal").modal("show"); - } - - // get vendor from server if provided an id - if (vendor_id) - GetVendorData(vendor_id); - - // load local vendor - if (vendor) - LoadVendorData(vendor); - - if (vendor_id == null && vendor == null) - VendorInputFormModal.modal("show"); - - } - }; - - - if (!fcr.VendorInputForm) { - fcr.VendorInputForm = VendorInputForm; - } - -})(); \ No newline at end of file diff --git a/src/Nancy.BundleIt/BundleItTestSite/app/pages/vendors/vendorServices.js b/src/Nancy.BundleIt/BundleItTestSite/app/pages/vendors/vendorServices.js deleted file mode 100644 index 707fd0d..0000000 --- a/src/Nancy.BundleIt/BundleItTestSite/app/pages/vendors/vendorServices.js +++ /dev/null @@ -1,76 +0,0 @@ -(function () { - - var vendorServices = { - AddVendor: function (NewVendor, callback) { - - var errorMsg = "Missing a parameter!"; - if (NewVendor == null) { throw errorMsg; } - if (callback == null) { throw errorMsg; } - - $.ajax({ - type: "POST", - url: "/vendors/add", - dataType: "json", - data: JSON.stringify(NewVendor), - contentType: 'application/json; charset=utf-8', - processData: false, - cache: false - }).done(function (result) { - callback(result); - }).fail(function (result) { - callback({ IsError: true, Status: result.statusText }); - }); - - }, - UpdateVendor: function (Vendor, callback) { - - var errorMsg = "Missing a parameter!"; - if (Vendor == null) { throw errorMsg; } - if (callback == null) { throw errorMsg; } - - $.ajax({ - type: "PUT", - url: "/vendors/update", - dataType: "json", - data: JSON.stringify(Vendor), - contentType: 'application/json; charset=utf-8', - processData: false, - cache: false - }).done(function (result) { - callback(result); - }).fail(function (result) { - callback({ IsError: true, Status: result.statusText }); - }); - - }, - DeleteVendor: function (VendorId, callback) { - - var errorMsg = "Missing a parameter!"; - if (VendorId == null) { throw errorMsg; return; } - if (callback == null) { throw errorMsg; return; } - - $.ajax({ - type: "DELETE", - url: "/vendors/delete/" + VendorId, - processData: false, - cache: false - }).done(function (result) { - callback(result); - }).fail(function (result) { - callback({ IsError: true, Status: result.statusText }); - }); - - }, - GetVendor: function (vendor_id, callback){ - //$.getJSON("/vendors/" + vendor_id, function (data) { - // callback(data); - //}); - callback(); - } - }; - - if (!window.vendorServices) { - window.vendorServices = vendorServices; - } - -})(); \ No newline at end of file diff --git a/src/Nancy.BundleIt/BundleItTestSite/app/pages/vendors/vendors.css b/src/Nancy.BundleIt/BundleItTestSite/app/pages/vendors/vendors.css deleted file mode 100644 index 03b3e82..0000000 --- a/src/Nancy.BundleIt/BundleItTestSite/app/pages/vendors/vendors.css +++ /dev/null @@ -1,28 +0,0 @@ -input::-webkit-outer-spin-button, -input::-webkit-inner-spin-button { - /* display: none; <- Crashes Chrome on hover */ - -webkit-appearance: none; - margin: 0; /* <-- Apparently some margin are still there even though it's hidden */ -} -.vendors-container{ - margin-top:10px; - padding-bottom:200px; -} -.fcr-nav { - background-color: #FDFDFD; - padding: 10px; - height: 54px; -} -.rebate-container{ - padding-top: 10px; -} -.rebate{ - display: inline; - background-color:#5393ed; - padding: 5px; - color: #ffffff; -} -.rebate-container2{ - margin-right: 15px; -} - diff --git a/src/Nancy.BundleIt/BundleItTestSite/app/pages/vendors/vendors.js b/src/Nancy.BundleIt/BundleItTestSite/app/pages/vendors/vendors.js deleted file mode 100644 index 423fe56..0000000 --- a/src/Nancy.BundleIt/BundleItTestSite/app/pages/vendors/vendors.js +++ /dev/null @@ -1,83 +0,0 @@ -$(document).ready(function () { - - // vendor page - var vendor_page = new Ractive({ - el: "VendorsPage", - template: "#VendorsPageTemplate", - data: null - }); - - // event - vendor_page.on("add-vendor", function (e) { - fcr.VendorInputForm.show(null, null, { - onSaveEvent: function (vendor, result) { - vendor_list.data.Vendors.push(vendor); - vendor_list.data.SortVendors(true); - } - }, null); - }); - - vendor_page.on("add-vendor-contact", function (e) { - - }); - - - - // vendor list - fcr.Vendors = _.sortBy(fcr.Vendors, function (v) { return v.Name.toLowerCase(); }); - var vendor_list = new Ractive({ - el: "Vendors", - template: "#VendorsListTemplate", - data: { - GetState: toolbox.GetState, - Vendors: fcr.Vendors, - SortVendors: function (UpdateView) { - this.Vendors = _.sortBy(this.Vendors, function (v) { return v.Name.toLowerCase(); }); - - if (UpdateView) - vendor_list.update(); - } - } - }); - - // event - vendor_list.on("edit-vendor", function (e) { - fcr.VendorInputForm.show(null, e.context, { - onSaveEvent: function (vendor) { - vendor_list.data.SortVendors(true); - } - }, null); - }); - - vendor_list.on("delete-vendor", function (e) { - - fcr.deletConfirmForm.show({ - Title: "Are you sure you want to delete vendor \"" + e.context.Name + "\" ?", - ShowCanNotBeUndoneWarning: true, - onDeleteClickEvent: function (callback) { - - vendorServices.DeleteVendor(e.context.Id, function (result) { - - callback(); - - if (result.IsError) { - toastr.options = { - closeButton: true, - timeOut: 0, - extendedTimeOut: 0, - positionClass: "toast-bottom-full-width" - }; - toastr.error(result.Status); - return; - } - - fcr.Vendors.splice(e.index.i, 1); - - }); - - } - }); - - }); - -}); \ No newline at end of file diff --git a/src/Nancy.BundleIt/BundleItTestSite/app/vendors/numeral.1.5.3.js b/src/Nancy.BundleIt/BundleItTestSite/app/vendors/numeral.1.5.3.js deleted file mode 100644 index 9f46ab6..0000000 --- a/src/Nancy.BundleIt/BundleItTestSite/app/vendors/numeral.1.5.3.js +++ /dev/null @@ -1,679 +0,0 @@ -/*! - * numeral.js - * version : 1.5.3 - * author : Adam Draper - * license : MIT - * http://adamwdraper.github.com/Numeral-js/ - */ - -(function () { - - /************************************ - Constants - ************************************/ - - var numeral, - VERSION = '1.5.3', - // internal storage for language config files - languages = {}, - currentLanguage = 'en', - zeroFormat = null, - defaultFormat = '0,0', - // check for nodeJS - hasModule = (typeof module !== 'undefined' && module.exports); - - - /************************************ - Constructors - ************************************/ - - - // Numeral prototype object - function Numeral (number) { - this._value = number; - } - - /** - * Implementation of toFixed() that treats floats more like decimals - * - * Fixes binary rounding issues (eg. (0.615).toFixed(2) === '0.61') that present - * problems for accounting- and finance-related software. - */ - function toFixed (value, precision, roundingFunction, optionals) { - var power = Math.pow(10, precision), - optionalsRegExp, - output; - - //roundingFunction = (roundingFunction !== undefined ? roundingFunction : Math.round); - // Multiply up by precision, round accurately, then divide and use native toFixed(): - output = (roundingFunction(value * power) / power).toFixed(precision); - - if (optionals) { - optionalsRegExp = new RegExp('0{1,' + optionals + '}$'); - output = output.replace(optionalsRegExp, ''); - } - - return output; - } - - /************************************ - Formatting - ************************************/ - - // determine what type of formatting we need to do - function formatNumeral (n, format, roundingFunction) { - var output; - - // figure out what kind of format we are dealing with - if (format.indexOf('$') > -1) { // currency!!!!! - output = formatCurrency(n, format, roundingFunction); - } else if (format.indexOf('%') > -1) { // percentage - output = formatPercentage(n, format, roundingFunction); - } else if (format.indexOf(':') > -1) { // time - output = formatTime(n, format); - } else { // plain ol' numbers or bytes - output = formatNumber(n._value, format, roundingFunction); - } - - // return string - return output; - } - - // revert to number - function unformatNumeral (n, string) { - var stringOriginal = string, - thousandRegExp, - millionRegExp, - billionRegExp, - trillionRegExp, - suffixes = ['KB', 'MB', 'GB', 'TB', 'PB', 'EB', 'ZB', 'YB'], - bytesMultiplier = false, - power; - - if (string.indexOf(':') > -1) { - n._value = unformatTime(string); - } else { - if (string === zeroFormat) { - n._value = 0; - } else { - if (languages[currentLanguage].delimiters.decimal !== '.') { - string = string.replace(/\./g,'').replace(languages[currentLanguage].delimiters.decimal, '.'); - } - - // see if abbreviations are there so that we can multiply to the correct number - thousandRegExp = new RegExp('[^a-zA-Z]' + languages[currentLanguage].abbreviations.thousand + '(?:\\)|(\\' + languages[currentLanguage].currency.symbol + ')?(?:\\))?)?$'); - millionRegExp = new RegExp('[^a-zA-Z]' + languages[currentLanguage].abbreviations.million + '(?:\\)|(\\' + languages[currentLanguage].currency.symbol + ')?(?:\\))?)?$'); - billionRegExp = new RegExp('[^a-zA-Z]' + languages[currentLanguage].abbreviations.billion + '(?:\\)|(\\' + languages[currentLanguage].currency.symbol + ')?(?:\\))?)?$'); - trillionRegExp = new RegExp('[^a-zA-Z]' + languages[currentLanguage].abbreviations.trillion + '(?:\\)|(\\' + languages[currentLanguage].currency.symbol + ')?(?:\\))?)?$'); - - // see if bytes are there so that we can multiply to the correct number - for (power = 0; power <= suffixes.length; power++) { - bytesMultiplier = (string.indexOf(suffixes[power]) > -1) ? Math.pow(1024, power + 1) : false; - - if (bytesMultiplier) { - break; - } - } - - // do some math to create our number - n._value = ((bytesMultiplier) ? bytesMultiplier : 1) * ((stringOriginal.match(thousandRegExp)) ? Math.pow(10, 3) : 1) * ((stringOriginal.match(millionRegExp)) ? Math.pow(10, 6) : 1) * ((stringOriginal.match(billionRegExp)) ? Math.pow(10, 9) : 1) * ((stringOriginal.match(trillionRegExp)) ? Math.pow(10, 12) : 1) * ((string.indexOf('%') > -1) ? 0.01 : 1) * (((string.split('-').length + Math.min(string.split('(').length-1, string.split(')').length-1)) % 2)? 1: -1) * Number(string.replace(/[^0-9\.]+/g, '')); - - // round if we are talking about bytes - n._value = (bytesMultiplier) ? Math.ceil(n._value) : n._value; - } - } - return n._value; - } - - function formatCurrency (n, format, roundingFunction) { - var symbolIndex = format.indexOf('$'), - openParenIndex = format.indexOf('('), - minusSignIndex = format.indexOf('-'), - space = '', - spliceIndex, - output; - - // check for space before or after currency - if (format.indexOf(' $') > -1) { - space = ' '; - format = format.replace(' $', ''); - } else if (format.indexOf('$ ') > -1) { - space = ' '; - format = format.replace('$ ', ''); - } else { - format = format.replace('$', ''); - } - - // format the number - output = formatNumber(n._value, format, roundingFunction); - - // position the symbol - if (symbolIndex <= 1) { - if (output.indexOf('(') > -1 || output.indexOf('-') > -1) { - output = output.split(''); - spliceIndex = 1; - if (symbolIndex < openParenIndex || symbolIndex < minusSignIndex){ - // the symbol appears before the "(" or "-" - spliceIndex = 0; - } - output.splice(spliceIndex, 0, languages[currentLanguage].currency.symbol + space); - output = output.join(''); - } else { - output = languages[currentLanguage].currency.symbol + space + output; - } - } else { - if (output.indexOf(')') > -1) { - output = output.split(''); - output.splice(-1, 0, space + languages[currentLanguage].currency.symbol); - output = output.join(''); - } else { - output = output + space + languages[currentLanguage].currency.symbol; - } - } - - return output; - } - - function formatPercentage (n, format, roundingFunction) { - var space = '', - output, - value = n._value * 100; - - // check for space before % - if (format.indexOf(' %') > -1) { - space = ' '; - format = format.replace(' %', ''); - } else { - format = format.replace('%', ''); - } - - output = formatNumber(value, format, roundingFunction); - - if (output.indexOf(')') > -1 ) { - output = output.split(''); - output.splice(-1, 0, space + '%'); - output = output.join(''); - } else { - output = output + space + '%'; - } - - return output; - } - - function formatTime (n) { - var hours = Math.floor(n._value/60/60), - minutes = Math.floor((n._value - (hours * 60 * 60))/60), - seconds = Math.round(n._value - (hours * 60 * 60) - (minutes * 60)); - return hours + ':' + ((minutes < 10) ? '0' + minutes : minutes) + ':' + ((seconds < 10) ? '0' + seconds : seconds); - } - - function unformatTime (string) { - var timeArray = string.split(':'), - seconds = 0; - // turn hours and minutes into seconds and add them all up - if (timeArray.length === 3) { - // hours - seconds = seconds + (Number(timeArray[0]) * 60 * 60); - // minutes - seconds = seconds + (Number(timeArray[1]) * 60); - // seconds - seconds = seconds + Number(timeArray[2]); - } else if (timeArray.length === 2) { - // minutes - seconds = seconds + (Number(timeArray[0]) * 60); - // seconds - seconds = seconds + Number(timeArray[1]); - } - return Number(seconds); - } - - function formatNumber (value, format, roundingFunction) { - var negP = false, - signed = false, - optDec = false, - abbr = '', - abbrK = false, // force abbreviation to thousands - abbrM = false, // force abbreviation to millions - abbrB = false, // force abbreviation to billions - abbrT = false, // force abbreviation to trillions - abbrForce = false, // force abbreviation - bytes = '', - ord = '', - abs = Math.abs(value), - suffixes = ['B', 'KB', 'MB', 'GB', 'TB', 'PB', 'EB', 'ZB', 'YB'], - min, - max, - power, - w, - precision, - thousands, - d = '', - neg = false; - - // check if number is zero and a custom zero format has been set - if (value === 0 && zeroFormat !== null) { - return zeroFormat; - } else { - // see if we should use parentheses for negative number or if we should prefix with a sign - // if both are present we default to parentheses - if (format.indexOf('(') > -1) { - negP = true; - format = format.slice(1, -1); - } else if (format.indexOf('+') > -1) { - signed = true; - format = format.replace(/\+/g, ''); - } - - // see if abbreviation is wanted - if (format.indexOf('a') > -1) { - // check if abbreviation is specified - abbrK = format.indexOf('aK') >= 0; - abbrM = format.indexOf('aM') >= 0; - abbrB = format.indexOf('aB') >= 0; - abbrT = format.indexOf('aT') >= 0; - abbrForce = abbrK || abbrM || abbrB || abbrT; - - // check for space before abbreviation - if (format.indexOf(' a') > -1) { - abbr = ' '; - format = format.replace(' a', ''); - } else { - format = format.replace('a', ''); - } - - if (abs >= Math.pow(10, 12) && !abbrForce || abbrT) { - // trillion - abbr = abbr + languages[currentLanguage].abbreviations.trillion; - value = value / Math.pow(10, 12); - } else if (abs < Math.pow(10, 12) && abs >= Math.pow(10, 9) && !abbrForce || abbrB) { - // billion - abbr = abbr + languages[currentLanguage].abbreviations.billion; - value = value / Math.pow(10, 9); - } else if (abs < Math.pow(10, 9) && abs >= Math.pow(10, 6) && !abbrForce || abbrM) { - // million - abbr = abbr + languages[currentLanguage].abbreviations.million; - value = value / Math.pow(10, 6); - } else if (abs < Math.pow(10, 6) && abs >= Math.pow(10, 3) && !abbrForce || abbrK) { - // thousand - abbr = abbr + languages[currentLanguage].abbreviations.thousand; - value = value / Math.pow(10, 3); - } - } - - // see if we are formatting bytes - if (format.indexOf('b') > -1) { - // check for space before - if (format.indexOf(' b') > -1) { - bytes = ' '; - format = format.replace(' b', ''); - } else { - format = format.replace('b', ''); - } - - for (power = 0; power <= suffixes.length; power++) { - min = Math.pow(1024, power); - max = Math.pow(1024, power+1); - - if (value >= min && value < max) { - bytes = bytes + suffixes[power]; - if (min > 0) { - value = value / min; - } - break; - } - } - } - - // see if ordinal is wanted - if (format.indexOf('o') > -1) { - // check for space before - if (format.indexOf(' o') > -1) { - ord = ' '; - format = format.replace(' o', ''); - } else { - format = format.replace('o', ''); - } - - ord = ord + languages[currentLanguage].ordinal(value); - } - - if (format.indexOf('[.]') > -1) { - optDec = true; - format = format.replace('[.]', '.'); - } - - w = value.toString().split('.')[0]; - precision = format.split('.')[1]; - thousands = format.indexOf(','); - - if (precision) { - if (precision.indexOf('[') > -1) { - precision = precision.replace(']', ''); - precision = precision.split('['); - d = toFixed(value, (precision[0].length + precision[1].length), roundingFunction, precision[1].length); - } else { - d = toFixed(value, precision.length, roundingFunction); - } - - w = d.split('.')[0]; - - if (d.split('.')[1].length) { - d = languages[currentLanguage].delimiters.decimal + d.split('.')[1]; - } else { - d = ''; - } - - if (optDec && Number(d.slice(1)) === 0) { - d = ''; - } - } else { - w = toFixed(value, null, roundingFunction); - } - - // format number - if (w.indexOf('-') > -1) { - w = w.slice(1); - neg = true; - } - - if (thousands > -1) { - w = w.toString().replace(/(\d)(?=(\d{3})+(?!\d))/g, '$1' + languages[currentLanguage].delimiters.thousands); - } - - if (format.indexOf('.') === 0) { - w = ''; - } - - return ((negP && neg) ? '(' : '') + ((!negP && neg) ? '-' : '') + ((!neg && signed) ? '+' : '') + w + d + ((ord) ? ord : '') + ((abbr) ? abbr : '') + ((bytes) ? bytes : '') + ((negP && neg) ? ')' : ''); - } - } - - /************************************ - Top Level Functions - ************************************/ - - numeral = function (input) { - if (numeral.isNumeral(input)) { - input = input.value(); - } else if (input === 0 || typeof input === 'undefined') { - input = 0; - } else if (!Number(input)) { - input = numeral.fn.unformat(input); - } - - return new Numeral(Number(input)); - }; - - // version number - numeral.version = VERSION; - - // compare numeral object - numeral.isNumeral = function (obj) { - return obj instanceof Numeral; - }; - - // This function will load languages and then set the global language. If - // no arguments are passed in, it will simply return the current global - // language key. - numeral.language = function (key, values) { - if (!key) { - return currentLanguage; - } - - if (key && !values) { - if(!languages[key]) { - throw new Error('Unknown language : ' + key); - } - currentLanguage = key; - } - - if (values || !languages[key]) { - loadLanguage(key, values); - } - - return numeral; - }; - - // This function provides access to the loaded language data. If - // no arguments are passed in, it will simply return the current - // global language object. - numeral.languageData = function (key) { - if (!key) { - return languages[currentLanguage]; - } - - if (!languages[key]) { - throw new Error('Unknown language : ' + key); - } - - return languages[key]; - }; - - numeral.language('en', { - delimiters: { - thousands: ',', - decimal: '.' - }, - abbreviations: { - thousand: 'k', - million: 'm', - billion: 'b', - trillion: 't' - }, - ordinal: function (number) { - var b = number % 10; - return (~~ (number % 100 / 10) === 1) ? 'th' : - (b === 1) ? 'st' : - (b === 2) ? 'nd' : - (b === 3) ? 'rd' : 'th'; - }, - currency: { - symbol: '$' - } - }); - - numeral.zeroFormat = function (format) { - zeroFormat = typeof(format) === 'string' ? format : null; - }; - - numeral.defaultFormat = function (format) { - defaultFormat = typeof(format) === 'string' ? format : '0.0'; - }; - - /************************************ - Helpers - ************************************/ - - function loadLanguage(key, values) { - languages[key] = values; - } - - /************************************ - Floating-point helpers - ************************************/ - - // The floating-point helper functions and implementation - // borrows heavily from sinful.js: http://guipn.github.io/sinful.js/ - - /** - * Array.prototype.reduce for browsers that don't support it - * https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/Reduce#Compatibility - */ - if ('function' !== typeof Array.prototype.reduce) { - Array.prototype.reduce = function (callback, opt_initialValue) { - 'use strict'; - - if (null === this || 'undefined' === typeof this) { - // At the moment all modern browsers, that support strict mode, have - // native implementation of Array.prototype.reduce. For instance, IE8 - // does not support strict mode, so this check is actually useless. - throw new TypeError('Array.prototype.reduce called on null or undefined'); - } - - if ('function' !== typeof callback) { - throw new TypeError(callback + ' is not a function'); - } - - var index, - value, - length = this.length >>> 0, - isValueSet = false; - - if (1 < arguments.length) { - value = opt_initialValue; - isValueSet = true; - } - - for (index = 0; length > index; ++index) { - if (this.hasOwnProperty(index)) { - if (isValueSet) { - value = callback(value, this[index], index, this); - } else { - value = this[index]; - isValueSet = true; - } - } - } - - if (!isValueSet) { - throw new TypeError('Reduce of empty array with no initial value'); - } - - return value; - }; - } - - - /** - * Computes the multiplier necessary to make x >= 1, - * effectively eliminating miscalculations caused by - * finite precision. - */ - function multiplier(x) { - var parts = x.toString().split('.'); - if (parts.length < 2) { - return 1; - } - return Math.pow(10, parts[1].length); - } - - /** - * Given a variable number of arguments, returns the maximum - * multiplier that must be used to normalize an operation involving - * all of them. - */ - function correctionFactor() { - var args = Array.prototype.slice.call(arguments); - return args.reduce(function (prev, next) { - var mp = multiplier(prev), - mn = multiplier(next); - return mp > mn ? mp : mn; - }, -Infinity); - } - - - /************************************ - Numeral Prototype - ************************************/ - - - numeral.fn = Numeral.prototype = { - - clone : function () { - return numeral(this); - }, - - format : function (inputString, roundingFunction) { - return formatNumeral(this, - inputString ? inputString : defaultFormat, - (roundingFunction !== undefined) ? roundingFunction : Math.round - ); - }, - - unformat : function (inputString) { - if (Object.prototype.toString.call(inputString) === '[object Number]') { - return inputString; - } - return unformatNumeral(this, inputString ? inputString : defaultFormat); - }, - - value : function () { - return this._value; - }, - - valueOf : function () { - return this._value; - }, - - set : function (value) { - this._value = Number(value); - return this; - }, - - add : function (value) { - var corrFactor = correctionFactor.call(null, this._value, value); - function cback(accum, curr, currI, O) { - return accum + corrFactor * curr; - } - this._value = [this._value, value].reduce(cback, 0) / corrFactor; - return this; - }, - - subtract : function (value) { - var corrFactor = correctionFactor.call(null, this._value, value); - function cback(accum, curr, currI, O) { - return accum - corrFactor * curr; - } - this._value = [value].reduce(cback, this._value * corrFactor) / corrFactor; - return this; - }, - - multiply : function (value) { - function cback(accum, curr, currI, O) { - var corrFactor = correctionFactor(accum, curr); - return (accum * corrFactor) * (curr * corrFactor) / - (corrFactor * corrFactor); - } - this._value = [this._value, value].reduce(cback, 1); - return this; - }, - - divide : function (value) { - function cback(accum, curr, currI, O) { - var corrFactor = correctionFactor(accum, curr); - return (accum * corrFactor) / (curr * corrFactor); - } - this._value = [this._value, value].reduce(cback); - return this; - }, - - difference : function (value) { - return Math.abs(numeral(this._value).subtract(value).value()); - } - - }; - - /************************************ - Exposing Numeral - ************************************/ - - // CommonJS module is defined - if (hasModule) { - module.exports = numeral; - } - - /*global ender:false */ - if (typeof ender === 'undefined') { - // here, `this` means `window` in the browser, or `global` on the server - // add `numeral` as a global object via a string identifier, - // for Closure Compiler 'advanced' mode - this['numeral'] = numeral; - } - - /*global define:false */ - if (typeof define === 'function' && define.amd) { - define([], function () { - return numeral; - }); - } -}).call(this);