Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

4.0.0 bili #87

Merged
merged 3 commits into from Jun 21, 2018
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
1 change: 1 addition & 0 deletions .eslintignore
@@ -0,0 +1 @@
/dist
1 change: 1 addition & 0 deletions .eslintrc
Expand Up @@ -8,5 +8,6 @@
"prefer-destructuring": 0,
"no-shadow": 0,
"no-console": 0,
"global-require": 0
}
}
274 changes: 274 additions & 0 deletions dist/vue-moment.cjs.js
@@ -0,0 +1,274 @@
'use strict';

var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) {
return typeof obj;
} : function (obj) {
return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj;
};

function _toConsumableArray(arr) {
if (Array.isArray(arr)) {
for (var i = 0, arr2 = Array(arr.length); i < arr.length; i++) {
arr2[i] = arr[i];
}return arr2;
} else {
return Array.from(arr);
}
}

module.exports = {
install: function install(Vue, options) {
var moment = options && options.moment ? options.moment : require('moment');

Object.defineProperties(Vue.prototype, {
$moment: {
get: function get() {
return moment;
}
}
});

Vue.moment = moment;

Vue.filter('moment', function () {
var arguments$1 = arguments;

for (var _len = arguments.length, args = Array(_len), _key = 0; _key < _len; _key++) {
args[_key] = arguments$1[_key];
}

args = Array.prototype.slice.call(args);
var input = args.shift();
var date = void 0;

if (Array.isArray(input) && typeof input[0] === 'string') {
// If input is array, assume we're being passed a format pattern to parse against.
// Format pattern will accept an array of potential formats to parse against.
// Date string should be at [0], format pattern(s) should be at [1]
date = moment(input[0], input[1], true);
} else if (typeof input === 'number') {
if (input.toString().length < 12) {
// If input is an integer with fewer than 12 digits, assume Unix seconds...
date = moment.unix(input);
} else {
// ..otherwise, assume milliseconds.
date = moment(input);
}
} else {
// Otherwise, throw the input at moment and see what happens...
date = moment(input);
}

if (!input || !date.isValid()) {
// Log a warning if moment couldn't reconcile the input. Better than throwing an error?
console.warn('Could not build a valid `moment` object from input.');
return input;
}

function parse() {
var arguments$1 = arguments;

for (var _len2 = arguments.length, args = Array(_len2), _key2 = 0; _key2 < _len2; _key2++) {
args[_key2] = arguments$1[_key2];
}

args = Array.prototype.slice.call(args);
var method = args.shift();

switch (method) {
case 'add':
{
/*
* Mutates the original moment by adding time.
* http://momentjs.com/docs/#/manipulating/add/
*/

var addends = args.shift().split(',').map(Function.prototype.call, String.prototype.trim);
var obj = {};

for (var n = 0; n < addends.length; n++) {
var addend = addends[n].split(' ');
obj[addend[1]] = addend[0];
}
date.add(obj);
break;
}

case 'subtract':
{
/*
* Mutates the original moment by subtracting time.
* http://momentjs.com/docs/#/manipulating/subtract/
*/

var subtrahends = args.shift().split(',').map(Function.prototype.call, String.prototype.trim);
var _obj = {};

for (var _n = 0; _n < subtrahends.length; _n++) {
var subtrahend = subtrahends[_n].split(' ');
_obj[subtrahend[1]] = subtrahend[0];
}
date.subtract(_obj);
break;
}

case 'from':
{
/*
* Display a moment in relative time, either from now or from a specified date.
* http://momentjs.com/docs/#/displaying/fromnow/
*/

var from = 'now';
var removeSuffix = false;

if (args[0] === 'now') { args.shift(); }
// If valid, assume it is a date we want the output computed against.
if (moment(args[0]).isValid()) { from = moment(args.shift()); }

if (args[0] === true) {
args.shift();
removeSuffix = true;
}

if (from !== 'now') {
date = date.from(from, removeSuffix);
} else {
date = date.fromNow(removeSuffix);
}
break;
}

case 'diff':
{
/*
* Mutates the original moment by doing a difference with another date.
* http://momentjs.com/docs/#/displaying/difference/
*/

var referenceTime = moment();
var units = '';
var float = false;

if (moment(args[0]).isValid()) {
// If valid, assume it is a date we want the output computed against.
referenceTime = moment(args.shift());
} else if (args[0] === null || args[0] === 'now') {
// If null or 'now', remove argument and proceed with default referenceTime.
args.shift();
}

if (args[0]) { units = args.shift(); }

if (args[0] === true) { float = args.shift(); }

date = date.diff(referenceTime, units, float);
break;
}

case 'calendar':
{
/*
* Formats a date with different strings depending on how close
* to a certain date (today by default) the date is.
* http://momentjs.com/docs/#/displaying/calendar-time/
*/

var _referenceTime = moment();
var formats = {};

if (moment(args[0]).isValid()) {
// If valid, assume it is a date we want the output computed against.
_referenceTime = moment(args.shift());
} else if (args[0] === null || args[0] === 'now') {
// If null or 'now', remove argument and proceed with default referenceTime.
args.shift();
}

if (_typeof(args[0]) === 'object') { formats = args.shift(); }

date = date.calendar(_referenceTime, formats);
break;
}

case 'utc':
{
/*
* Mutates the original moment by converting to UTC
* https://momentjs.com/docs/#/manipulating/utc/
*/
date.utc();
break;
}

case 'timezone':
{
/*
* Mutates the original moment by converting to a new timezone.
* https://momentjs.com/timezone/docs/#/using-timezones/converting-to-zone/
*/
date.tz(args.shift());
break;
}

default:
{
/*
* Formats a date by taking a string of tokens and replacing
* them with their corresponding values.
* http://momentjs.com/docs/#/displaying/format/
*/

var format = method;
date = date.format(format);
}
}

if (args.length) { parse.apply(parse, args); }
}

parse.apply(parse, args);

return date;
});

Vue.filter('duration', function () {
var arguments$1 = arguments;

for (var _len3 = arguments.length, args = Array(_len3), _key3 = 0; _key3 < _len3; _key3++) {
args[_key3] = arguments$1[_key3];
}

/*
* Basic pass-through filter for leveraging moment.js's ability
* to manipulate and display durations.
* https://momentjs.com/docs/#/durations/
*/
args = Array.prototype.slice.call(args);
var input = args.shift();
var method = args.shift();

function createDuration(time) {
if (!Array.isArray(time)) { time = [time]; }
var result = moment.duration.apply(moment, _toConsumableArray(time));
if (!result.isValid()) { console.warn('Could not build a valid `duration` object from input.'); }
return result;
}
var duration = createDuration(input);

if (method === 'add' || method === 'subtract') {
// Generates a duration object and either adds or subtracts it
// from our original duration.
var durationChange = createDuration(args);
duration[method](durationChange);
} else if (duration && duration[method]) {
var _duration;

// This gives a full proxy to moment.duration functions.
duration = (_duration = duration)[method].apply(_duration, _toConsumableArray(args));
}

return duration;
});
}
};