Merge branch 'tz-npm-dateformat' into 'master'
Replaces date.format.js in vendor with NPM package See merge request gitlab-org/gitlab-ce!20195
This commit is contained in:
commit
a0481203d3
7 changed files with 49 additions and 178 deletions
|
@ -1,8 +1,7 @@
|
|||
/* global dateFormat */
|
||||
|
||||
import Vue from 'vue';
|
||||
import dateFormat from 'dateformat';
|
||||
|
||||
Vue.filter('due-date', (value) => {
|
||||
Vue.filter('due-date', value => {
|
||||
const date = new Date(value);
|
||||
return dateFormat(date, 'mmm d, yyyy', true);
|
||||
});
|
||||
|
|
|
@ -1,7 +1,6 @@
|
|||
/* global dateFormat */
|
||||
|
||||
import $ from 'jquery';
|
||||
import Pikaday from 'pikaday';
|
||||
import dateFormat from 'dateformat';
|
||||
import { __ } from '~/locale';
|
||||
import axios from './lib/utils/axios_utils';
|
||||
import { timeFor } from './lib/utils/datetime_utility';
|
||||
|
@ -55,7 +54,7 @@ class DueDateSelect {
|
|||
format: 'yyyy-mm-dd',
|
||||
parse: dateString => parsePikadayDate(dateString),
|
||||
toString: date => pikadayToString(date),
|
||||
onSelect: (dateText) => {
|
||||
onSelect: dateText => {
|
||||
$dueDateInput.val(calendar.toString(dateText));
|
||||
|
||||
if (this.$dropdown.hasClass('js-issue-boards-due-date')) {
|
||||
|
@ -73,7 +72,7 @@ class DueDateSelect {
|
|||
}
|
||||
|
||||
initRemoveDueDate() {
|
||||
this.$block.on('click', '.js-remove-due-date', (e) => {
|
||||
this.$block.on('click', '.js-remove-due-date', e => {
|
||||
const calendar = this.$datePicker.data('pikaday');
|
||||
e.preventDefault();
|
||||
|
||||
|
@ -124,7 +123,8 @@ class DueDateSelect {
|
|||
this.$loading.fadeOut();
|
||||
};
|
||||
|
||||
gl.issueBoards.BoardsStore.detail.issue.update(this.$dropdown.attr('data-issue-update'))
|
||||
gl.issueBoards.BoardsStore.detail.issue
|
||||
.update(this.$dropdown.attr('data-issue-update'))
|
||||
.then(fadeOutLoader)
|
||||
.catch(fadeOutLoader);
|
||||
}
|
||||
|
@ -147,17 +147,18 @@ class DueDateSelect {
|
|||
|
||||
$('.js-remove-due-date-holder').toggleClass('hidden', selectedDateValue.length);
|
||||
|
||||
return axios.put(this.issueUpdateURL, this.datePayload)
|
||||
.then(() => {
|
||||
const tooltipText = hasDueDate ? `${__('Due date')}<br />${selectedDateValue} (${timeFor(selectedDateValue)})` : __('Due date');
|
||||
if (isDropdown) {
|
||||
this.$dropdown.trigger('loaded.gl.dropdown');
|
||||
this.$dropdown.dropdown('toggle');
|
||||
}
|
||||
this.$sidebarCollapsedValue.attr('data-original-title', tooltipText);
|
||||
return axios.put(this.issueUpdateURL, this.datePayload).then(() => {
|
||||
const tooltipText = hasDueDate
|
||||
? `${__('Due date')}<br />${selectedDateValue} (${timeFor(selectedDateValue)})`
|
||||
: __('Due date');
|
||||
if (isDropdown) {
|
||||
this.$dropdown.trigger('loaded.gl.dropdown');
|
||||
this.$dropdown.dropdown('toggle');
|
||||
}
|
||||
this.$sidebarCollapsedValue.attr('data-original-title', tooltipText);
|
||||
|
||||
return this.$loading.fadeOut();
|
||||
});
|
||||
return this.$loading.fadeOut();
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -187,15 +188,19 @@ export default class DueDateSelectors {
|
|||
$datePicker.data('pikaday', calendar);
|
||||
});
|
||||
|
||||
$('.js-clear-due-date,.js-clear-start-date').on('click', (e) => {
|
||||
$('.js-clear-due-date,.js-clear-start-date').on('click', e => {
|
||||
e.preventDefault();
|
||||
const calendar = $(e.target).siblings('.datepicker').data('pikaday');
|
||||
const calendar = $(e.target)
|
||||
.siblings('.datepicker')
|
||||
.data('pikaday');
|
||||
calendar.setDate(null);
|
||||
});
|
||||
}
|
||||
// eslint-disable-next-line class-methods-use-this
|
||||
initIssuableSelect() {
|
||||
const $loading = $('.js-issuable-update .due_date').find('.block-loading').hide();
|
||||
const $loading = $('.js-issuable-update .due_date')
|
||||
.find('.block-loading')
|
||||
.hide();
|
||||
|
||||
$('.js-due-date-select').each((i, dropdown) => {
|
||||
const $dropdown = $(dropdown);
|
||||
|
|
|
@ -1,11 +1,10 @@
|
|||
import $ from 'jquery';
|
||||
import timeago from 'timeago.js';
|
||||
import dateFormat from 'vendor/date.format';
|
||||
import dateFormat from 'dateformat';
|
||||
import { pluralize } from './text_utility';
|
||||
import { languageCode, s__ } from '../../locale';
|
||||
|
||||
window.timeago = timeago;
|
||||
window.dateFormat = dateFormat;
|
||||
|
||||
/**
|
||||
* Returns i18n month names array.
|
||||
|
@ -143,7 +142,8 @@ export const localTimeAgo = ($timeagoEls, setTimeago = true) => {
|
|||
if (setTimeago) {
|
||||
// Recreate with custom template
|
||||
$(el).tooltip({
|
||||
template: '<div class="tooltip local-timeago" role="tooltip"><div class="arrow"></div><div class="tooltip-inner"></div></div>',
|
||||
template:
|
||||
'<div class="tooltip local-timeago" role="tooltip"><div class="arrow"></div><div class="tooltip-inner"></div></div>',
|
||||
});
|
||||
}
|
||||
|
||||
|
@ -275,10 +275,8 @@ export const totalDaysInMonth = date => {
|
|||
*
|
||||
* @param {Array} quarter
|
||||
*/
|
||||
export const totalDaysInQuarter = quarter => quarter.reduce(
|
||||
(acc, month) => acc + totalDaysInMonth(month),
|
||||
0,
|
||||
);
|
||||
export const totalDaysInQuarter = quarter =>
|
||||
quarter.reduce((acc, month) => acc + totalDaysInMonth(month), 0);
|
||||
|
||||
/**
|
||||
* Returns list of Dates referring to Sundays of the month
|
||||
|
@ -333,14 +331,8 @@ export const getTimeframeWindowFrom = (startDate, length) => {
|
|||
// Iterate and set date for the size of length
|
||||
// and push date reference to timeframe list
|
||||
const timeframe = new Array(length)
|
||||
.fill()
|
||||
.map(
|
||||
(val, i) => new Date(
|
||||
startDate.getFullYear(),
|
||||
startDate.getMonth() + i,
|
||||
1,
|
||||
),
|
||||
);
|
||||
.fill()
|
||||
.map((val, i) => new Date(startDate.getFullYear(), startDate.getMonth() + i, 1));
|
||||
|
||||
// Change date of last timeframe item to last date of the month
|
||||
timeframe[length - 1].setDate(totalDaysInMonth(timeframe[length - 1]));
|
||||
|
@ -362,14 +354,15 @@ export const getTimeframeWindowFrom = (startDate, length) => {
|
|||
* @param {Date} date
|
||||
* @param {Array} quarter
|
||||
*/
|
||||
export const dayInQuarter = (date, quarter) => quarter.reduce((acc, month) => {
|
||||
if (date.getMonth() > month.getMonth()) {
|
||||
return acc + totalDaysInMonth(month);
|
||||
} else if (date.getMonth() === month.getMonth()) {
|
||||
return acc + date.getDate();
|
||||
}
|
||||
return acc + 0;
|
||||
}, 0);
|
||||
export const dayInQuarter = (date, quarter) =>
|
||||
quarter.reduce((acc, month) => {
|
||||
if (date.getMonth() > month.getMonth()) {
|
||||
return acc + totalDaysInMonth(month);
|
||||
} else if (date.getMonth() === month.getMonth()) {
|
||||
return acc + date.getDate();
|
||||
}
|
||||
return acc + 0;
|
||||
}, 0);
|
||||
|
||||
window.gl = window.gl || {};
|
||||
window.gl.utils = {
|
||||
|
|
|
@ -2,6 +2,7 @@ import $ from 'jquery';
|
|||
import _ from 'underscore';
|
||||
import { scaleLinear, scaleThreshold } from 'd3-scale';
|
||||
import { select } from 'd3-selection';
|
||||
import dateFormat from 'dateformat';
|
||||
import { getDayName, getDayDifference } from '~/lib/utils/datetime_utility';
|
||||
import axios from '~/lib/utils/axios_utils';
|
||||
import flash from '~/flash';
|
||||
|
@ -26,7 +27,7 @@ function getSystemDate(systemUtcOffsetSeconds) {
|
|||
function formatTooltipText({ date, count }) {
|
||||
const dateObject = new Date(date);
|
||||
const dateDayName = getDayName(dateObject);
|
||||
const dateText = dateObject.format('mmm d, yyyy');
|
||||
const dateText = dateFormat(dateObject, 'mmm d, yyyy');
|
||||
|
||||
let contribText = 'No contributions';
|
||||
if (count > 0) {
|
||||
|
@ -84,7 +85,7 @@ export default class ActivityCalendar {
|
|||
date.setDate(date.getDate() + i);
|
||||
|
||||
const day = date.getDay();
|
||||
const count = timestamps[date.format('yyyy-mm-dd')] || 0;
|
||||
const count = timestamps[dateFormat(date, 'yyyy-mm-dd')] || 0;
|
||||
|
||||
// Create a new group array if this is the first day of the week
|
||||
// or if is first object
|
||||
|
|
|
@ -45,6 +45,7 @@
|
|||
"d3-shape": "^1.2.0",
|
||||
"d3-time": "^1.0.8",
|
||||
"d3-time-format": "^2.1.1",
|
||||
"dateformat": "^3.0.3",
|
||||
"deckar01-task_list": "^2.0.0",
|
||||
"diff": "^3.4.0",
|
||||
"document-register-element": "1.3.0",
|
||||
|
|
132
vendor/assets/javascripts/date.format.js
vendored
132
vendor/assets/javascripts/date.format.js
vendored
|
@ -1,132 +0,0 @@
|
|||
/*
|
||||
* Date Format 1.2.3
|
||||
* (c) 2007-2009 Steven Levithan <stevenlevithan.com>
|
||||
* MIT license
|
||||
*
|
||||
* Includes enhancements by Scott Trenda <scott.trenda.net>
|
||||
* and Kris Kowal <cixar.com/~kris.kowal/>
|
||||
*
|
||||
* Accepts a date, a mask, or a date and a mask.
|
||||
* Returns a formatted version of the given date.
|
||||
* The date defaults to the current date/time.
|
||||
* The mask defaults to dateFormat.masks.default.
|
||||
*/
|
||||
(function (global, factory) {
|
||||
typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() :
|
||||
typeof define === 'function' && define.amd ? define(factory) :
|
||||
(global.dateFormat = factory());
|
||||
}(this, (function () { 'use strict';
|
||||
var dateFormat = function () {
|
||||
var token = /d{1,4}|m{1,4}|yy(?:yy)?|([HhMsTt])\1?|[LloSZ]|"[^"]*"|'[^']*'/g,
|
||||
timezone = /\b(?:[PMCEA][SDP]T|(?:Pacific|Mountain|Central|Eastern|Atlantic) (?:Standard|Daylight|Prevailing) Time|(?:GMT|UTC)(?:[-+]\d{4})?)\b/g,
|
||||
timezoneClip = /[^-+\dA-Z]/g,
|
||||
pad = function (val, len) {
|
||||
val = String(val);
|
||||
len = len || 2;
|
||||
while (val.length < len) val = "0" + val;
|
||||
return val;
|
||||
};
|
||||
|
||||
// Regexes and supporting functions are cached through closure
|
||||
return function (date, mask, utc) {
|
||||
var dF = dateFormat;
|
||||
|
||||
// You can't provide utc if you skip other args (use the "UTC:" mask prefix)
|
||||
if (arguments.length == 1 && Object.prototype.toString.call(date) == "[object String]" && !/\d/.test(date)) {
|
||||
mask = date;
|
||||
date = undefined;
|
||||
}
|
||||
|
||||
// Passing date through Date applies Date.parse, if necessary
|
||||
date = date ? new Date(date) : new Date;
|
||||
if (isNaN(date)) throw SyntaxError("invalid date");
|
||||
|
||||
mask = String(dF.masks[mask] || mask || dF.masks["default"]);
|
||||
|
||||
// Allow setting the utc argument via the mask
|
||||
if (mask.slice(0, 4) == "UTC:") {
|
||||
mask = mask.slice(4);
|
||||
utc = true;
|
||||
}
|
||||
|
||||
var _ = utc ? "getUTC" : "get",
|
||||
d = date[_ + "Date"](),
|
||||
D = date[_ + "Day"](),
|
||||
m = date[_ + "Month"](),
|
||||
y = date[_ + "FullYear"](),
|
||||
H = date[_ + "Hours"](),
|
||||
M = date[_ + "Minutes"](),
|
||||
s = date[_ + "Seconds"](),
|
||||
L = date[_ + "Milliseconds"](),
|
||||
o = utc ? 0 : date.getTimezoneOffset(),
|
||||
flags = {
|
||||
d: d,
|
||||
dd: pad(d),
|
||||
ddd: dF.i18n.dayNames[D],
|
||||
dddd: dF.i18n.dayNames[D + 7],
|
||||
m: m + 1,
|
||||
mm: pad(m + 1),
|
||||
mmm: dF.i18n.monthNames[m],
|
||||
mmmm: dF.i18n.monthNames[m + 12],
|
||||
yy: String(y).slice(2),
|
||||
yyyy: y,
|
||||
h: H % 12 || 12,
|
||||
hh: pad(H % 12 || 12),
|
||||
H: H,
|
||||
HH: pad(H),
|
||||
M: M,
|
||||
MM: pad(M),
|
||||
s: s,
|
||||
ss: pad(s),
|
||||
l: pad(L, 3),
|
||||
L: pad(L > 99 ? Math.round(L / 10) : L),
|
||||
t: H < 12 ? "a" : "p",
|
||||
tt: H < 12 ? "am" : "pm",
|
||||
T: H < 12 ? "A" : "P",
|
||||
TT: H < 12 ? "AM" : "PM",
|
||||
Z: utc ? "UTC" : (String(date).match(timezone) || [""]).pop().replace(timezoneClip, ""),
|
||||
o: (o > 0 ? "-" : "+") + pad(Math.floor(Math.abs(o) / 60) * 100 + Math.abs(o) % 60, 4),
|
||||
S: ["th", "st", "nd", "rd"][d % 10 > 3 ? 0 : (d % 100 - d % 10 != 10) * d % 10]
|
||||
};
|
||||
|
||||
return mask.replace(token, function ($0) {
|
||||
return $0 in flags ? flags[$0] : $0.slice(1, $0.length - 1);
|
||||
});
|
||||
};
|
||||
}();
|
||||
|
||||
// Some common format strings
|
||||
dateFormat.masks = {
|
||||
"default": "ddd mmm dd yyyy HH:MM:ss",
|
||||
shortDate: "m/d/yy",
|
||||
mediumDate: "mmm d, yyyy",
|
||||
longDate: "mmmm d, yyyy",
|
||||
fullDate: "dddd, mmmm d, yyyy",
|
||||
shortTime: "h:MM TT",
|
||||
mediumTime: "h:MM:ss TT",
|
||||
longTime: "h:MM:ss TT Z",
|
||||
isoDate: "yyyy-mm-dd",
|
||||
isoTime: "HH:MM:ss",
|
||||
isoDateTime: "yyyy-mm-dd'T'HH:MM:ss",
|
||||
isoUtcDateTime: "UTC:yyyy-mm-dd'T'HH:MM:ss'Z'"
|
||||
};
|
||||
|
||||
// Internationalization strings
|
||||
dateFormat.i18n = {
|
||||
dayNames: [
|
||||
"Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat",
|
||||
"Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"
|
||||
],
|
||||
monthNames: [
|
||||
"Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec",
|
||||
"January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December"
|
||||
]
|
||||
};
|
||||
|
||||
// For convenience...
|
||||
Date.prototype.format = function (mask, utc) {
|
||||
return dateFormat(this, mask, utc);
|
||||
};
|
||||
|
||||
return dateFormat;
|
||||
})));
|
|
@ -2348,6 +2348,10 @@ date-now@^0.1.4:
|
|||
version "0.1.4"
|
||||
resolved "https://registry.yarnpkg.com/date-now/-/date-now-0.1.4.tgz#eaf439fd4d4848ad74e5cc7dbef200672b9e345b"
|
||||
|
||||
dateformat@^3.0.3:
|
||||
version "3.0.3"
|
||||
resolved "https://registry.yarnpkg.com/dateformat/-/dateformat-3.0.3.tgz#a6e37499a4d9a9cf85ef5872044d62901c9889ae"
|
||||
|
||||
de-indent@^1.0.2:
|
||||
version "1.0.2"
|
||||
resolved "https://registry.yarnpkg.com/de-indent/-/de-indent-1.0.2.tgz#b2038e846dc33baa5796128d0804b455b8c1e21d"
|
||||
|
|
Loading…
Reference in a new issue