Clean up buildscript, add error handling for exchange rate API downtime, fix repository links in FAQ.

master
Sven Slootweg 9 years ago
parent 4f2bfc7093
commit 708494c7ff

@ -19,16 +19,6 @@ task = {
"source": ["public/**/*.coffee", "routes/**/*.coffee", "models/**/*.coffee", "tasks/**/*.coffee", "app.coffee", "util.coffee", "migrate.coffee", "db.coffee"] "source": ["public/**/*.coffee", "routes/**/*.coffee", "models/**/*.coffee", "tasks/**/*.coffee", "app.coffee", "util.coffee", "migrate.coffee", "db.coffee"]
} }
/*
gulp.task('coffee', function() {
return gulp.src(task.source, {base: "."})
.pipe(plumber())
.pipe(cache("coffee"))
.pipe(coffee({bare: true}).on('error', gutil.log)).on('data', gutil.log)
.pipe(remember("coffee"))
.pipe(gulp.dest("."));
});*/
gulp.task('webpack', function(){ gulp.task('webpack', function(){
return gulp.src("frontend/index.coffee") return gulp.src("frontend/index.coffee")
.pipe(webpack({ .pipe(webpack({
@ -68,9 +58,7 @@ gulp.task('watch', function () {
livereload.listen(); livereload.listen();
gulp.watch(['./**/*.css', 'views/**/*.jade', 'package.json', "./public/js/**/*.js"]).on('change', livereload.changed); gulp.watch(['./**/*.css', 'views/**/*.jade', 'package.json', "./public/js/**/*.js"]).on('change', livereload.changed);
gulp.watch(["./public/css/style.scss"], ["sass"]) gulp.watch(["./public/css/style.scss"], ["sass"])
//gulp.watch(task.source, ['coffee']);
// theseus disabled for now, it was screwing with my tracebacks
//nodemon({script: "./bin/www", ext: "js", nodeArgs: ['/usr/bin/node-theseus']}).on("start", checkServerUp);
nodemon({ nodemon({
script: "./bin/www.coffee", script: "./bin/www.coffee",
ext: "coffee", ext: "coffee",
@ -82,4 +70,4 @@ gulp.task('watch', function () {
}); });
}); });
gulp.task('default', [/*'coffee',*/ 'sass', 'watch', 'webpack']); gulp.task('default', ['sass', 'watch', 'webpack']);

@ -21,5 +21,8 @@ module.exports = ->
lastRates = rates lastRates = rates
lastRateCheck = Date.now() lastRateCheck = Date.now()
Promise.resolve rates Promise.resolve rates
.catch (err) ->
# API is down. FIXME: Log this error.
Promise.resolve lastRates
else else
Promise.resolve lastRates Promise.resolve lastRates

@ -54,9 +54,9 @@
__webpack_require__(4); __webpack_require__(4);
$ = __webpack_require__(8); $ = __webpack_require__(7);
autosize = __webpack_require__(7); autosize = __webpack_require__(8);
marked = __webpack_require__(6); marked = __webpack_require__(6);
@ -86,11 +86,11 @@
var $, data_object, filePicked, prettyUnits, reinitializeUploader, triggerError, updateUploadProgress, uploadDone; var $, data_object, filePicked, prettyUnits, reinitializeUploader, triggerError, updateUploadProgress, uploadDone;
$ = __webpack_require__(8); $ = __webpack_require__(7);
prettyUnits = __webpack_require__(9); prettyUnits = __webpack_require__(10);
__webpack_require__(10); __webpack_require__(11);
data_object = null; data_object = null;
@ -252,7 +252,7 @@
var $, castBoolean, updateEmbedCode; var $, castBoolean, updateEmbedCode;
$ = __webpack_require__(8); $ = __webpack_require__(7);
castBoolean = function(value) { castBoolean = function(value) {
if (value === true) { if (value === true) {
@ -289,9 +289,9 @@
var $; var $;
$ = __webpack_require__(8); $ = __webpack_require__(7);
__webpack_require__(11); __webpack_require__(9);
$(function() { $(function() {
var paymentMethodHandlers, paypalHandler, pulsateRemove, selectedAmount, selectedHasPrice, selectedMethod, setCustomValue, showInstructions; var paymentMethodHandlers, paypalHandler, pulsateRemove, selectedAmount, selectedHasPrice, selectedMethod, setCustomValue, showInstructions;
@ -414,7 +414,7 @@
var $; var $;
$ = __webpack_require__(8); $ = __webpack_require__(7);
$(function() { $(function() {
$(".popup").hide(); $(".popup").hide();
@ -438,7 +438,7 @@
var $; var $;
$ = __webpack_require__(8); $ = __webpack_require__(7);
module.exports = function(jqueryObj) { module.exports = function(jqueryObj) {
return jqueryObj.each(function() { return jqueryObj.each(function() {
@ -1770,188 +1770,6 @@
/***/ }, /***/ },
/* 7 */ /* 7 */
/***/ function(module, exports, __webpack_require__) {
var __WEBPACK_AMD_DEFINE_FACTORY__, __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;/*!
Autosize 3.0.0
license: MIT
http://www.jacklmoore.com/autosize
*/
(function (global, factory) {
if (true) {
!(__WEBPACK_AMD_DEFINE_ARRAY__ = [exports, module], __WEBPACK_AMD_DEFINE_FACTORY__ = (factory), __WEBPACK_AMD_DEFINE_RESULT__ = (typeof __WEBPACK_AMD_DEFINE_FACTORY__ === 'function' ? (__WEBPACK_AMD_DEFINE_FACTORY__.apply(exports, __WEBPACK_AMD_DEFINE_ARRAY__)) : __WEBPACK_AMD_DEFINE_FACTORY__), __WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__));
} else if (typeof exports !== 'undefined' && typeof module !== 'undefined') {
factory(exports, module);
} else {
var mod = {
exports: {}
};
factory(mod.exports, mod);
global.autosize = mod.exports;
}
})(this, function (exports, module) {
'use strict';
function assign(ta) {
if (!ta || !ta.nodeName || ta.nodeName !== 'TEXTAREA' || ta.hasAttribute('data-autosize-on')) {
return;
}var maxHeight;
var heightOffset;
function init() {
var style = window.getComputedStyle(ta, null);
if (style.resize === 'vertical') {
ta.style.resize = 'none';
} else if (style.resize === 'both') {
ta.style.resize = 'horizontal';
}
// Chrome/Safari-specific fix:
// When the textarea y-over is hidden, Chrome/Safari doesn't reflow the text to account for the space
// made available by removing the scrollbar. This workaround will cause the text to reflow.
var width = ta.style.width;
ta.style.width = '0px';
// Force reflow:
/* jshint ignore:start */
ta.offsetWidth;
/* jshint ignore:end */
ta.style.width = width;
maxHeight = style.maxHeight !== 'none' ? parseFloat(style.maxHeight) : false;
if (style.boxSizing === 'content-box') {
heightOffset = -(parseFloat(style.paddingTop) + parseFloat(style.paddingBottom));
} else {
heightOffset = parseFloat(style.borderTopWidth) + parseFloat(style.borderBottomWidth);
}
update();
}
function update() {
var startHeight = ta.style.height;
var htmlTop = document.documentElement.scrollTop;
var bodyTop = document.body.scrollTop;
ta.style.height = 'auto';
var endHeight = ta.scrollHeight + heightOffset;
if (maxHeight !== false && maxHeight < endHeight) {
endHeight = maxHeight;
if (ta.style.overflowY !== 'scroll') {
ta.style.overflowY = 'scroll';
}
} else if (ta.style.overflowY !== 'hidden') {
ta.style.overflowY = 'hidden';
}
ta.style.height = endHeight + 'px';
// prevents scroll-position jumping
document.documentElement.scrollTop = htmlTop;
document.body.scrollTop = bodyTop;
if (startHeight !== ta.style.height) {
var evt = document.createEvent('Event');
evt.initEvent('autosize:resized', true, false);
ta.dispatchEvent(evt);
}
}
ta.addEventListener('autosize:destroy', (function (style) {
window.removeEventListener('resize', update);
ta.removeEventListener('input', update);
ta.removeEventListener('keyup', update);
ta.removeAttribute('data-autosize-on');
ta.removeEventListener('autosize:destroy');
Object.keys(style).forEach(function (key) {
ta.style[key] = style[key];
});
}).bind(ta, {
height: ta.style.height,
overflowY: ta.style.overflowY,
resize: ta.style.resize
}));
// IE9 does not fire onpropertychange or oninput for deletions,
// so binding to onkeyup to catch most of those events.
// There is no way that I know of to detect something like 'cut' in IE9.
if ('onpropertychange' in ta && 'oninput' in ta) {
ta.addEventListener('keyup', update);
}
window.addEventListener('resize', update);
ta.addEventListener('input', update);
ta.addEventListener('autosize:update', update);
ta.setAttribute('data-autosize-on', true);
ta.style.overflowY = 'hidden';
init();
}
function destroy(ta) {
if (!ta || !ta.nodeName || ta.nodeName !== 'TEXTAREA') {
return;
}var evt = document.createEvent('Event');
evt.initEvent('autosize:destroy', true, false);
ta.dispatchEvent(evt);
}
function update(ta) {
if (!(ta && ta.nodeName && ta.nodeName === 'TEXTAREA')) {
return;
}var evt = document.createEvent('Event');
evt.initEvent('autosize:update', true, false);
ta.dispatchEvent(evt);
}
var autosize;
// Do nothing in IE8 or lower
if (typeof window.getComputedStyle !== 'function') {
autosize = function (el) {
return el;
};
autosize.destroy = function (el) {
return el;
};
autosize.update = function (el) {
return el;
};
} else {
autosize = function (el) {
if (el && el.length) {
Array.prototype.forEach.call(el, assign);
} else if (el && el.nodeName) {
assign(el);
}
return el;
};
autosize.destroy = function (el) {
if (el && el.length) {
Array.prototype.forEach.call(el, destroy);
} else if (el && el.nodeName) {
destroy(el);
}
return el;
};
autosize.update = function (el) {
if (el && el.length) {
Array.prototype.forEach.call(el, update);
} else if (el && el.nodeName) {
update(el);
}
return el;
};
}
module.exports = autosize;
});
/***/ },
/* 8 */
/***/ function(module, exports, __webpack_require__) { /***/ function(module, exports, __webpack_require__) {
var __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;/*! var __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;/*!
@ -11162,40 +10980,289 @@
/***/ }, /***/ },
/* 9 */ /* 8 */
/***/ function(module, exports, __webpack_require__) { /***/ function(module, exports, __webpack_require__) {
var prefixes = __webpack_require__(12); var __WEBPACK_AMD_DEFINE_FACTORY__, __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;/*!
Autosize 3.0.0
license: MIT
http://www.jacklmoore.com/autosize
*/
(function (global, factory) {
if (true) {
!(__WEBPACK_AMD_DEFINE_ARRAY__ = [exports, module], __WEBPACK_AMD_DEFINE_FACTORY__ = (factory), __WEBPACK_AMD_DEFINE_RESULT__ = (typeof __WEBPACK_AMD_DEFINE_FACTORY__ === 'function' ? (__WEBPACK_AMD_DEFINE_FACTORY__.apply(exports, __WEBPACK_AMD_DEFINE_ARRAY__)) : __WEBPACK_AMD_DEFINE_FACTORY__), __WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__));
} else if (typeof exports !== 'undefined' && typeof module !== 'undefined') {
factory(exports, module);
} else {
var mod = {
exports: {}
};
factory(mod.exports, mod);
global.autosize = mod.exports;
}
})(this, function (exports, module) {
'use strict';
/** function assign(ta) {
* Pretty format a number with SI prefixes. if (!ta || !ta.nodeName || ta.nodeName !== 'TEXTAREA' || ta.hasAttribute('data-autosize-on')) {
* return;
* @param {Number} number a number }var maxHeight;
* @param {Number} exp custom exponent of 10 var heightOffset;
*/
module.exports = function prettyUnits(number, exp) {
exp = exp || 0;
number = exp ? number * Math.pow(10, exp) : number;
// immediately return for zero function init() {
if (number === 0) return '0 '; var style = window.getComputedStyle(ta, null);
// adjust number if (style.resize === 'vertical') {
var prefixIndex = prefixes.getPrefixIndex(number); ta.style.resize = 'none';
var adjusted = prefixes.adjustNumber(number, prefixIndex); } else if (style.resize === 'both') {
ta.style.resize = 'horizontal';
}
// provide some failover for small numbers (not support due to 2 decimal rounding scheme) // Chrome/Safari-specific fix:
if (adjusted === 0) adjusted = '< ' + (number > 0 ? '' : '-') + '0.01'; // When the textarea y-over is hidden, Chrome/Safari doesn't reflow the text to account for the space
// made available by removing the scrollbar. This workaround will cause the text to reflow.
var width = ta.style.width;
ta.style.width = '0px';
// Force reflow:
/* jshint ignore:start */
ta.offsetWidth;
/* jshint ignore:end */
ta.style.width = width;
// get my prefix maxHeight = style.maxHeight !== 'none' ? parseFloat(style.maxHeight) : false;
var prefix = prefixes[prefixIndex][prefixProp];
return adjusted + ' ' + prefix; if (style.boxSizing === 'content-box') {
}; heightOffset = -(parseFloat(style.paddingTop) + parseFloat(style.paddingBottom));
} else {
heightOffset = parseFloat(style.borderTopWidth) + parseFloat(style.borderBottomWidth);
}
var verbose = false; update();
var prefixProp = 'symbol'; }
Object.defineProperty(module.exports, 'verbose', {
function update() {
var startHeight = ta.style.height;
var htmlTop = document.documentElement.scrollTop;
var bodyTop = document.body.scrollTop;
ta.style.height = 'auto';
var endHeight = ta.scrollHeight + heightOffset;
if (maxHeight !== false && maxHeight < endHeight) {
endHeight = maxHeight;
if (ta.style.overflowY !== 'scroll') {
ta.style.overflowY = 'scroll';
}
} else if (ta.style.overflowY !== 'hidden') {
ta.style.overflowY = 'hidden';
}
ta.style.height = endHeight + 'px';
// prevents scroll-position jumping
document.documentElement.scrollTop = htmlTop;
document.body.scrollTop = bodyTop;
if (startHeight !== ta.style.height) {
var evt = document.createEvent('Event');
evt.initEvent('autosize:resized', true, false);
ta.dispatchEvent(evt);
}
}
ta.addEventListener('autosize:destroy', (function (style) {
window.removeEventListener('resize', update);
ta.removeEventListener('input', update);
ta.removeEventListener('keyup', update);
ta.removeAttribute('data-autosize-on');
ta.removeEventListener('autosize:destroy');
Object.keys(style).forEach(function (key) {
ta.style[key] = style[key];
});
}).bind(ta, {
height: ta.style.height,
overflowY: ta.style.overflowY,
resize: ta.style.resize
}));
// IE9 does not fire onpropertychange or oninput for deletions,
// so binding to onkeyup to catch most of those events.
// There is no way that I know of to detect something like 'cut' in IE9.
if ('onpropertychange' in ta && 'oninput' in ta) {
ta.addEventListener('keyup', update);
}
window.addEventListener('resize', update);
ta.addEventListener('input', update);
ta.addEventListener('autosize:update', update);
ta.setAttribute('data-autosize-on', true);
ta.style.overflowY = 'hidden';
init();
}
function destroy(ta) {
if (!ta || !ta.nodeName || ta.nodeName !== 'TEXTAREA') {
return;
}var evt = document.createEvent('Event');
evt.initEvent('autosize:destroy', true, false);
ta.dispatchEvent(evt);
}
function update(ta) {
if (!(ta && ta.nodeName && ta.nodeName === 'TEXTAREA')) {
return;
}var evt = document.createEvent('Event');
evt.initEvent('autosize:update', true, false);
ta.dispatchEvent(evt);
}
var autosize;
// Do nothing in IE8 or lower
if (typeof window.getComputedStyle !== 'function') {
autosize = function (el) {
return el;
};
autosize.destroy = function (el) {
return el;
};
autosize.update = function (el) {
return el;
};
} else {
autosize = function (el) {
if (el && el.length) {
Array.prototype.forEach.call(el, assign);
} else if (el && el.nodeName) {
assign(el);
}
return el;
};
autosize.destroy = function (el) {
if (el && el.length) {
Array.prototype.forEach.call(el, destroy);
} else if (el && el.nodeName) {
destroy(el);
}
return el;
};
autosize.update = function (el) {
if (el && el.length) {
Array.prototype.forEach.call(el, update);
} else if (el && el.nodeName) {
update(el);
}
return el;
};
}
module.exports = autosize;
});
/***/ },
/* 9 */
/***/ function(module, exports, __webpack_require__) {
;(function () {
var object = true ? exports : this; // #8: web workers
var chars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=';
function InvalidCharacterError(message) {
this.message = message;
}
InvalidCharacterError.prototype = new Error;
InvalidCharacterError.prototype.name = 'InvalidCharacterError';
// encoder
// [https://gist.github.com/999166] by [https://github.com/nignag]
object.btoa || (
object.btoa = function (input) {
var str = String(input);
for (
// initialize result and counter
var block, charCode, idx = 0, map = chars, output = '';
// if the next str index does not exist:
// change the mapping table to "="
// check if d has no fractional digits
str.charAt(idx | 0) || (map = '=', idx % 1);
// "8 - idx % 1 * 8" generates the sequence 2, 4, 6, 8
output += map.charAt(63 & block >> 8 - idx % 1 * 8)
) {
charCode = str.charCodeAt(idx += 3/4);
if (charCode > 0xFF) {
throw new InvalidCharacterError("'btoa' failed: The string to be encoded contains characters outside of the Latin1 range.");
}
block = block << 8 | charCode;
}
return output;
});
// decoder
// [https://gist.github.com/1020396] by [https://github.com/atk]
object.atob || (
object.atob = function (input) {
var str = String(input).replace(/=+$/, '');
if (str.length % 4 == 1) {
throw new InvalidCharacterError("'atob' failed: The string to be decoded is not correctly encoded.");
}
for (
// initialize result and counters
var bc = 0, bs, buffer, idx = 0, output = '';
// get next character
buffer = str.charAt(idx++);
// character found in table? initialize bit storage and add its ascii value;
~buffer && (bs = bc % 4 ? bs * 64 + buffer : buffer,
// and if not first of each 4 characters,
// convert the first 8 bits to one ascii character
bc++ % 4) ? output += String.fromCharCode(255 & bs >> (-2 * bc & 6)) : 0
) {
// try to find character in table (0-63, not found => -1)
buffer = chars.indexOf(buffer);
}
return output;
});
}());
/***/ },
/* 10 */
/***/ function(module, exports, __webpack_require__) {
var prefixes = __webpack_require__(13);
/**
* Pretty format a number with SI prefixes.
*
* @param {Number} number a number
* @param {Number} exp custom exponent of 10
*/
module.exports = function prettyUnits(number, exp) {
exp = exp || 0;
number = exp ? number * Math.pow(10, exp) : number;
// immediately return for zero
if (number === 0) return '0 ';
// adjust number
var prefixIndex = prefixes.getPrefixIndex(number);
var adjusted = prefixes.adjustNumber(number, prefixIndex);
// provide some failover for small numbers (not support due to 2 decimal rounding scheme)
if (adjusted === 0) adjusted = '< ' + (number > 0 ? '' : '-') + '0.01';
// get my prefix
var prefix = prefixes[prefixIndex][prefixProp];
return adjusted + ' ' + prefix;
};
var verbose = false;
var prefixProp = 'symbol';
Object.defineProperty(module.exports, 'verbose', {
set: function(bool) { set: function(bool) {
verbose = !!bool; verbose = !!bool;
prefixProp = verbose ? 'prefix' : 'symbol'; prefixProp = verbose ? 'prefix' : 'symbol';
@ -11204,7 +11271,7 @@
/***/ }, /***/ },
/* 10 */ /* 11 */
/***/ function(module, exports, __webpack_require__) { /***/ function(module, exports, __webpack_require__) {
/*** IMPORTS FROM imports-loader ***/ /*** IMPORTS FROM imports-loader ***/
@ -11235,8 +11302,8 @@
} else if (true) { } else if (true) {
// Node/CommonJS: // Node/CommonJS:
factory( factory(
__webpack_require__(8), __webpack_require__(7),
__webpack_require__(13) __webpack_require__(12)
); );
} else { } else {
// Browser globals: // Browser globals:
@ -12679,144 +12746,8 @@
})); }));
/***/ },
/* 11 */
/***/ function(module, exports, __webpack_require__) {
;(function () {
var object = true ? exports : this; // #8: web workers
var chars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=';
function InvalidCharacterError(message) {
this.message = message;
}
InvalidCharacterError.prototype = new Error;
InvalidCharacterError.prototype.name = 'InvalidCharacterError';
// encoder
// [https://gist.github.com/999166] by [https://github.com/nignag]
object.btoa || (
object.btoa = function (input) {
var str = String(input);
for (
// initialize result and counter
var block, charCode, idx = 0, map = chars, output = '';
// if the next str index does not exist:
// change the mapping table to "="
// check if d has no fractional digits
str.charAt(idx | 0) || (map = '=', idx % 1);
// "8 - idx % 1 * 8" generates the sequence 2, 4, 6, 8
output += map.charAt(63 & block >> 8 - idx % 1 * 8)
) {
charCode = str.charCodeAt(idx += 3/4);
if (charCode > 0xFF) {
throw new InvalidCharacterError("'btoa' failed: The string to be encoded contains characters outside of the Latin1 range.");
}
block = block << 8 | charCode;
}
return output;
});
// decoder
// [https://gist.github.com/1020396] by [https://github.com/atk]
object.atob || (
object.atob = function (input) {
var str = String(input).replace(/=+$/, '');
if (str.length % 4 == 1) {
throw new InvalidCharacterError("'atob' failed: The string to be decoded is not correctly encoded.");
}
for (
// initialize result and counters
var bc = 0, bs, buffer, idx = 0, output = '';
// get next character
buffer = str.charAt(idx++);
// character found in table? initialize bit storage and add its ascii value;
~buffer && (bs = bc % 4 ? bs * 64 + buffer : buffer,
// and if not first of each 4 characters,
// convert the first 8 bits to one ascii character
bc++ % 4) ? output += String.fromCharCode(255 & bs >> (-2 * bc & 6)) : 0
) {
// try to find character in table (0-63, not found => -1)
buffer = chars.indexOf(buffer);
}
return output;
});
}());
/***/ }, /***/ },
/* 12 */ /* 12 */
/***/ function(module, exports, __webpack_require__) {
var util = __webpack_require__(14);
/**
* SI Prefix Dictionary
*/
var prefixes = [
{pow10: Math.pow(10, -24), prefix: 'yocto', symbol: 'y'},
{pow10: Math.pow(10, -21), prefix: 'zepto', symbol: 'z'},
{pow10: Math.pow(10, -18), prefix: 'atto', symbol: 'a'},
{pow10: Math.pow(10, -15), prefix: 'femto', symbol: 'f'},
{pow10: Math.pow(10, -12), prefix: 'pico', symbol: 'p'},
{pow10: Math.pow(10, -9), prefix: 'nano', symbol: 'n'},
{pow10: Math.pow(10, -6), prefix: 'micro', symbol: 'μ'},
{pow10: Math.pow(10, -3), prefix: 'milli', symbol: 'm'},
{pow10: Math.pow(10, 0), prefix: '', symbol: ''},
{pow10: Math.pow(10, 3), prefix: 'kilo', symbol: 'k'},
{pow10: Math.pow(10, 6), prefix: 'mega', symbol: 'M'},
{pow10: Math.pow(10, 9), prefix: 'giga', symbol: 'G'},
{pow10: Math.pow(10, 12), prefix: 'tera', symbol: 'T'},
{pow10: Math.pow(10, 15), prefix: 'peta', symbol: 'P'},
{pow10: Math.pow(10, 18), prefix: 'exa', symbol: 'E'},
{pow10: Math.pow(10, 21), prefix: 'zetta', symbol: 'Z'},
{pow10: Math.pow(10, 24), prefix: 'yotta', symbol: 'Y'}
];
module.exports = prefixes;
/**
* Adjust the magnitude of a number to that indicated by the prefix at prefixIndex.
*/
function adjustNumber(number, prefixIndex) {
return util.round(number / prefixes[prefixIndex].pow10, 2);
}
module.exports.adjustNumber = adjustNumber;
/**
* Get the most "best match" prefix index for a given number/
*/
function getPrefixIndex(number) {
// use absolute value for comparisons
var abs = Math.abs(number);
// attempt to match extremities
if (abs <= prefixes[0].pow10) return 0;
else if (abs >= prefixes[prefixes.length - 1].pow10) return prefixes.length - 1;
// find best match
for (var i = getInitialPrefixIterPos(); i < prefixes.length; i++) {
if (abs < prefixes[i].pow10) return i - 1;
}
return 8;
}
module.exports.getPrefixIndex = getPrefixIndex;
/**
* A crude optimization so that we can get a good iterator start position.
*
* Assumes absNumb is an the absolute value of a number.
*/
function getInitialPrefixIterPos(absNum) {
return absNum >= prefixes[8].pow10 ? 8 : 0;
}
module.exports.getInitialPrefixIterPos = getInitialPrefixIterPos;
/***/ },
/* 13 */
/***/ function(module, exports, __webpack_require__) { /***/ function(module, exports, __webpack_require__) {
var __WEBPACK_AMD_DEFINE_FACTORY__, __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;/*! jQuery UI - v1.11.1+CommonJS - 2014-09-17 var __WEBPACK_AMD_DEFINE_FACTORY__, __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;/*! jQuery UI - v1.11.1+CommonJS - 2014-09-17
@ -12828,7 +12759,7 @@
if ( true ) { if ( true ) {
// AMD. Register as an anonymous module. // AMD. Register as an anonymous module.
!(__WEBPACK_AMD_DEFINE_ARRAY__ = [ __webpack_require__(8) ], __WEBPACK_AMD_DEFINE_FACTORY__ = (factory), __WEBPACK_AMD_DEFINE_RESULT__ = (typeof __WEBPACK_AMD_DEFINE_FACTORY__ === 'function' ? (__WEBPACK_AMD_DEFINE_FACTORY__.apply(exports, __WEBPACK_AMD_DEFINE_ARRAY__)) : __WEBPACK_AMD_DEFINE_FACTORY__), __WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__)); !(__WEBPACK_AMD_DEFINE_ARRAY__ = [ __webpack_require__(7) ], __WEBPACK_AMD_DEFINE_FACTORY__ = (factory), __WEBPACK_AMD_DEFINE_RESULT__ = (typeof __WEBPACK_AMD_DEFINE_FACTORY__ === 'function' ? (__WEBPACK_AMD_DEFINE_FACTORY__.apply(exports, __WEBPACK_AMD_DEFINE_ARRAY__)) : __WEBPACK_AMD_DEFINE_FACTORY__), __WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__));
} else if (typeof exports === "object") { } else if (typeof exports === "object") {
// Node/CommonJS: // Node/CommonJS:
@ -13384,6 +13315,75 @@
})); }));
/***/ },
/* 13 */
/***/ function(module, exports, __webpack_require__) {
var util = __webpack_require__(14);
/**
* SI Prefix Dictionary
*/
var prefixes = [
{pow10: Math.pow(10, -24), prefix: 'yocto', symbol: 'y'},
{pow10: Math.pow(10, -21), prefix: 'zepto', symbol: 'z'},
{pow10: Math.pow(10, -18), prefix: 'atto', symbol: 'a'},
{pow10: Math.pow(10, -15), prefix: 'femto', symbol: 'f'},
{pow10: Math.pow(10, -12), prefix: 'pico', symbol: 'p'},
{pow10: Math.pow(10, -9), prefix: 'nano', symbol: 'n'},
{pow10: Math.pow(10, -6), prefix: 'micro', symbol: 'μ'},
{pow10: Math.pow(10, -3), prefix: 'milli', symbol: 'm'},
{pow10: Math.pow(10, 0), prefix: '', symbol: ''},
{pow10: Math.pow(10, 3), prefix: 'kilo', symbol: 'k'},
{pow10: Math.pow(10, 6), prefix: 'mega', symbol: 'M'},
{pow10: Math.pow(10, 9), prefix: 'giga', symbol: 'G'},
{pow10: Math.pow(10, 12), prefix: 'tera', symbol: 'T'},
{pow10: Math.pow(10, 15), prefix: 'peta', symbol: 'P'},
{pow10: Math.pow(10, 18), prefix: 'exa', symbol: 'E'},
{pow10: Math.pow(10, 21), prefix: 'zetta', symbol: 'Z'},
{pow10: Math.pow(10, 24), prefix: 'yotta', symbol: 'Y'}
];
module.exports = prefixes;
/**
* Adjust the magnitude of a number to that indicated by the prefix at prefixIndex.
*/
function adjustNumber(number, prefixIndex) {
return util.round(number / prefixes[prefixIndex].pow10, 2);
}
module.exports.adjustNumber = adjustNumber;
/**
* Get the most "best match" prefix index for a given number/
*/
function getPrefixIndex(number) {
// use absolute value for comparisons
var abs = Math.abs(number);
// attempt to match extremities
if (abs <= prefixes[0].pow10) return 0;
else if (abs >= prefixes[prefixes.length - 1].pow10) return prefixes.length - 1;
// find best match
for (var i = getInitialPrefixIterPos(); i < prefixes.length; i++) {
if (abs < prefixes[i].pow10) return i - 1;
}
return 8;
}
module.exports.getPrefixIndex = getPrefixIndex;
/**
* A crude optimization so that we can get a good iterator start position.
*
* Assumes absNumb is an the absolute value of a number.
*/
function getInitialPrefixIterPos(absNum) {
return absNum >= prefixes[8].pow10 ? 8 : 0;
}
module.exports.getInitialPrefixIterPos = getInitialPrefixIterPos;
/***/ }, /***/ },
/* 14 */ /* 14 */
/***/ function(module, exports, __webpack_require__) { /***/ function(module, exports, __webpack_require__) {

@ -34,7 +34,7 @@ block content
section section
h3 Something is broken! Can you fix it? h3 Something is broken! Can you fix it?
p Sure. Either <a href="mailto:pdfy@cryto.net">e-mail us</a> (private) or <a href="http://github.com/joepie91/node-pdfy/issues">file an issue ticket</a> (public). p Sure. Either <a href="mailto:pdfy@cryto.net">e-mail us</a> (private) or <a href="http://github.com/joepie91/pdfy2/issues">file an issue ticket</a> (public).
section section
h3 I accidentally uploaded the wrong document! Can you remove it? h3 I accidentally uploaded the wrong document! Can you remove it?
@ -47,7 +47,7 @@ block content
section section
h3 Is PDFy open-source? h3 Is PDFy open-source?
p Yes! All the source code can be found <a href="http://github.com/joepie91/node-pdfy">here</a> (current version) and <a href="http://github.com/joepie91/pdfy">here</a> (old version). p Yes! All the source code can be found <a href="http://github.com/joepie91/pdfy2">here</a> (current version) and <a href="http://github.com/joepie91/pdfy">here</a> (old version).
section section
h3 I have another question that isn't listed here. h3 I have another question that isn't listed here.

Loading…
Cancel
Save