This commit is contained in:
parent
bce386b81b
commit
faf1331b12
|
@ -0,0 +1,16 @@
|
|||
{
|
||||
"version" : "1.0",
|
||||
"configurations" : [
|
||||
{
|
||||
"playground" : "custom",
|
||||
"type" : "uni-app:app-android"
|
||||
},
|
||||
{
|
||||
"app-plus" :
|
||||
{
|
||||
"launchtype" : "local"
|
||||
},
|
||||
"type" : "uniCloud"
|
||||
}
|
||||
]
|
||||
}
|
4
App.vue
4
App.vue
|
@ -2,6 +2,7 @@
|
|||
export default {
|
||||
onLaunch: function() {
|
||||
console.log('App Launch')
|
||||
uni.setStorageSync("SY_TOKEN", "dfdf4564557445df4df")
|
||||
},
|
||||
onShow: function() {
|
||||
console.log('App Show')
|
||||
|
@ -12,6 +13,7 @@
|
|||
}
|
||||
</script>
|
||||
|
||||
<style>
|
||||
<style lang="scss">
|
||||
@import "uview-plus/index.scss";
|
||||
/*每个页面公共css */
|
||||
</style>
|
|
@ -0,0 +1,6 @@
|
|||
import syhttp from "@/utils/syhttp.js";
|
||||
|
||||
/**
|
||||
* 我的公司
|
||||
*/
|
||||
export const companyMine = (data) => syhttp.post('/SuYuan/monitorDetail', data)
|
|
@ -0,0 +1,32 @@
|
|||
let BASE_URL
|
||||
|
||||
// 环境
|
||||
let env = "dev"
|
||||
// let env = "prod"
|
||||
|
||||
let HTTP_REQUEST_URL
|
||||
let HEADER
|
||||
|
||||
if (env == 'dev') {
|
||||
BASE_URL = 'http://ceshi-suyuan.lihaink.cn/'
|
||||
} else if (env = 'prod') {
|
||||
BASE_URL = 'http://shi-suyuan.lihaink.cn/'
|
||||
}
|
||||
let config = {
|
||||
HTTP_REQUEST_URL: BASE_URL,
|
||||
HEADER: {
|
||||
'content-type': 'application/json',
|
||||
//#ifdef MP
|
||||
'Form-type': 'routine',
|
||||
//#endif
|
||||
//#ifdef APP-PLUS
|
||||
'Form-type': 'app',
|
||||
//#endif
|
||||
'TOKEN': uni.getStorageSync("SY_TOKEN") || ''
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
export {
|
||||
config
|
||||
};
|
|
@ -0,0 +1,104 @@
|
|||
// +----------------------------------------------------------------------
|
||||
// | CRMEB [ CRMEB赋能开发者,助力企业发展 ]
|
||||
// +----------------------------------------------------------------------
|
||||
// | Copyright (c) 2016~2021 https://www.crmeb.com All rights reserved.
|
||||
// +----------------------------------------------------------------------
|
||||
// | Licensed CRMEB并不是自由软件,未经许可不能去掉CRMEB相关版权
|
||||
// +----------------------------------------------------------------------
|
||||
// | Author: CRMEB Team <admin@crmeb.com>
|
||||
// +----------------------------------------------------------------------
|
||||
import store from "../store";
|
||||
import Cache from '../utils/cache';
|
||||
// #ifdef H5
|
||||
// import { isWeixin } from "../utils";
|
||||
// import auth from './wechat';
|
||||
// #endif
|
||||
|
||||
import {
|
||||
LOGIN_STATUS,
|
||||
USER_INFO,
|
||||
EXPIRES_TIME,
|
||||
STATE_R_KEY
|
||||
} from './../config/cache';
|
||||
|
||||
function prePage() {
|
||||
let pages = getCurrentPages();
|
||||
console.log(pages)
|
||||
let prePage = pages[pages.length - 2];
|
||||
// #ifdef H5
|
||||
return prePage;
|
||||
// #endif
|
||||
//return prePage.$vm;
|
||||
}
|
||||
|
||||
export function toLogin(push, pathLogin) {
|
||||
store.commit("LOGOUT");
|
||||
let path = prePage();
|
||||
if (path) {
|
||||
path = path.router;
|
||||
if (path == undefined) {
|
||||
path = location.pathname + location.search;
|
||||
}
|
||||
}
|
||||
// #ifdef MP
|
||||
uni.navigateTo({
|
||||
url: '/page/users/login/login'
|
||||
})
|
||||
// #endif
|
||||
// #ifdef H5
|
||||
else {
|
||||
path = location.pathname + location.search;
|
||||
}
|
||||
// #endif
|
||||
|
||||
if (!pathLogin)
|
||||
pathLogin = '/page/users/login/login'
|
||||
Cache.set('login_back_url', path);
|
||||
uni.navigateTo({
|
||||
url: '/pages/users/login/login'
|
||||
})
|
||||
// #ifdef H5
|
||||
if (isWeixin()) {
|
||||
// auth.oAuth(); // 微信授权
|
||||
uni.navigateTo({
|
||||
url: '/pages/users/login/login'
|
||||
})
|
||||
} else {
|
||||
if (path !== pathLogin) {
|
||||
push ? uni.navigateTo({
|
||||
url: '/pages/users/login/login'
|
||||
}) : uni.reLaunch({
|
||||
url: '/pages/users/login/login'
|
||||
});
|
||||
}
|
||||
}
|
||||
// #endif
|
||||
|
||||
// #ifdef APP-PLUS
|
||||
uni.navigateTo({
|
||||
url: '/pages/users/login/login',
|
||||
})
|
||||
// #endif
|
||||
}
|
||||
|
||||
|
||||
export function checkLogin() {
|
||||
let token = Cache.get(LOGIN_STATUS);
|
||||
let expiresTime = Cache.get(EXPIRES_TIME) || 0;
|
||||
let newTime = Math.round(new Date() / 1000);
|
||||
if (expiresTime < newTime || !token) {
|
||||
Cache.clear(LOGIN_STATUS);
|
||||
Cache.clear(EXPIRES_TIME);
|
||||
Cache.clear(USER_INFO);
|
||||
Cache.clear(STATE_R_KEY);
|
||||
return false;
|
||||
} else {
|
||||
store.commit('UPDATE_LOGIN', token);
|
||||
let userInfo = Cache.get(USER_INFO, true);
|
||||
if (userInfo) {
|
||||
store.commit('UPDATE_USERINFO', userInfo);
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
}
|
|
@ -0,0 +1,474 @@
|
|||
// import uniCopy from '@/js_sdk/xb-copy/uni-copy.js'; // 拷贝功能插件
|
||||
// import compressImage from './compressImage.js'; // 解决图片旋转90°问题
|
||||
// const device = uni.getSystemInfoSync();
|
||||
// console.log("device:======================== " + JSON.stringify(device));
|
||||
/*
|
||||
参数说明
|
||||
@url
|
||||
要跳转的目标地址
|
||||
@opt
|
||||
要传给目标地址的参数
|
||||
可在目标页面的onLoad生命周期函数的第一个参数中获取
|
||||
*/
|
||||
|
||||
// 压栈跳转页面
|
||||
export function navigateTo(type, url, opt) {
|
||||
// H5端页面跳转目前不支持动画 (浏览器性能限制)
|
||||
let toUrl = url;
|
||||
let api = 'navigateTo';
|
||||
toUrl = opt ? toUrl + '?' + convertObj(opt) : toUrl;
|
||||
|
||||
switch (type) {
|
||||
case 1:
|
||||
api = 'navigateTo';
|
||||
break;
|
||||
case 2:
|
||||
api = 'redirectTo'; // 关闭当前页,跳转应用内某个页面
|
||||
break;
|
||||
case 3:
|
||||
api = 'reLaunch'; // 关闭所有页面,打开到应用内某个页面
|
||||
break;
|
||||
case 4:
|
||||
api = 'switchTab'; //跳转到 tabBar 页面,并关闭其他所有非 tabBar 页面。
|
||||
break;
|
||||
default:
|
||||
api = 'navigateTo'
|
||||
break;
|
||||
}
|
||||
uni[api]({
|
||||
url: toUrl,
|
||||
animationType: 'slide-in-right',
|
||||
animationDuration: 200
|
||||
});
|
||||
}
|
||||
|
||||
// 关闭当前页面并返回上一页面 delta 标识返回几层
|
||||
export function navigateBack(delta) {
|
||||
uni.navigateBack({
|
||||
delta: delta
|
||||
});
|
||||
}
|
||||
|
||||
// setStorage 将数据存入缓存
|
||||
export function setStorage(key, val) {
|
||||
if (typeof val == 'string') {
|
||||
uni.setStorageSync(key, val);
|
||||
return val
|
||||
}
|
||||
uni.setStorageSync(key, JSON.stringify(val));
|
||||
}
|
||||
|
||||
// getStorage 从缓存中读取数据
|
||||
export function getStorage(key) {
|
||||
let uu = uni.getStorageSync(key);
|
||||
try {
|
||||
if (typeof JSON.parse(uu) != 'number') {
|
||||
uu = JSON.parse(uu);
|
||||
}
|
||||
} catch (e) {}
|
||||
return uu;
|
||||
}
|
||||
// 删除缓存中的数据
|
||||
export function removeStorage(key) {
|
||||
if (key) {
|
||||
uni.removeStorageSync(key);
|
||||
}
|
||||
}
|
||||
// 将缓存中的数据清空
|
||||
export function clearStorage() {
|
||||
try {
|
||||
uni.clearStorageSync();
|
||||
} catch (e) {
|
||||
throw new Error('处理失败');
|
||||
}
|
||||
}
|
||||
// 显示Toast
|
||||
/*
|
||||
@title 最多汉字数量7个
|
||||
@icon success loading none
|
||||
*/
|
||||
export function Toast(title, icon = 'none', obj = {}, duration = 700) {
|
||||
let toastData = {
|
||||
title: title,
|
||||
duration: duration,
|
||||
// position: 'center',
|
||||
mask: true,
|
||||
icon: icon ? icon : 'none',
|
||||
...obj
|
||||
};
|
||||
uni.showToast(toastData);
|
||||
}
|
||||
/*
|
||||
显示loading提示框,需要手动隐藏
|
||||
*/
|
||||
export function Loading(title = '正在加载...', obj = {}) {
|
||||
uni.showLoading({
|
||||
title: title,
|
||||
mask: true,
|
||||
...obj
|
||||
});
|
||||
}
|
||||
// 隐藏loading
|
||||
export function hideLoading() {
|
||||
try {
|
||||
uni.hideLoading();
|
||||
} catch (e) {
|
||||
//TODO handle the exception
|
||||
throw new Error('处理失败');
|
||||
}
|
||||
}
|
||||
// 模态框
|
||||
/*
|
||||
确定取消按钮的文字颜色可修改
|
||||
obj 对象中传入 cancelColor : rgb 即可修改取消按钮颜色
|
||||
obj 对象中传入 confirmColor : rgb 即可修改确认按钮颜色
|
||||
*/
|
||||
export function Modal(title = '提示', content = '这是一个模态弹窗!', obj = {
|
||||
showCancel: true,
|
||||
cancelText: '取消',
|
||||
confirmText: '确定'
|
||||
}) {
|
||||
// #ifdef APP-PLUS
|
||||
obj.cancelText = '确定';
|
||||
obj.confirmText = '取消';
|
||||
// #endif
|
||||
return new Promise((reslove, reject) => {
|
||||
uni.showModal({
|
||||
title: title,
|
||||
content: content,
|
||||
...obj,
|
||||
success: (res) => {
|
||||
if (res.confirm) {
|
||||
reslove()
|
||||
}
|
||||
if (res.cancel) {
|
||||
reject()
|
||||
}
|
||||
}
|
||||
});
|
||||
})
|
||||
}
|
||||
/*
|
||||
显示操作菜单
|
||||
@itemList 操作菜单数组
|
||||
@itemColor 文字颜色
|
||||
*/
|
||||
export function ActionSheet(itemList, itemColor = "#000000") {
|
||||
return new Promise((reslove, reject) => {
|
||||
uni.showActionSheet({
|
||||
itemList: itemList,
|
||||
itemColor: itemColor,
|
||||
success: (res) => {
|
||||
reslove(res.tapIndex);
|
||||
},
|
||||
fail: function(res) {
|
||||
reject(res.errMsg);
|
||||
}
|
||||
});
|
||||
})
|
||||
}
|
||||
//将页面滚动到目标位置。
|
||||
export function ScrollTo(ScrollTop) {
|
||||
uni.pageScrollTo({
|
||||
scrollTop: ScrollTop,
|
||||
duration: 300
|
||||
})
|
||||
}
|
||||
|
||||
// 获取用户信息
|
||||
export function GetUserInfo() {
|
||||
return new Promise((reslove, reject) => {
|
||||
uni.getUserInfo({
|
||||
success(res) {
|
||||
console.log(res);
|
||||
reslove(res);
|
||||
},
|
||||
fail(rej) {
|
||||
reject(rej);
|
||||
}
|
||||
})
|
||||
})
|
||||
}
|
||||
|
||||
// 获取用户授权信息
|
||||
export function Authorize(scoped = 'scope.userInfo') {
|
||||
return new Promise((reslove, reject) => {
|
||||
uni.authorize({
|
||||
scope: scoped,
|
||||
success(res) {
|
||||
reslove(res);
|
||||
},
|
||||
fail(rej) {
|
||||
reject(rej);
|
||||
}
|
||||
})
|
||||
})
|
||||
}
|
||||
|
||||
// 将对象转换成使用 & 连接的字符串
|
||||
export function convertObj(opt) {
|
||||
let str = '';
|
||||
let arr = [];
|
||||
Object.keys(opt).forEach(item => {
|
||||
arr.push(`${item}=${opt[item]}`);
|
||||
})
|
||||
str = arr.join('&');
|
||||
return str;
|
||||
}
|
||||
// 节流函数
|
||||
// 节流函数
|
||||
export function throttle(fn, delay) {
|
||||
var lastArgs;
|
||||
var timer;
|
||||
var delay = delay || 200;
|
||||
return function(...args) {
|
||||
lastArgs = args;
|
||||
if (!timer) {
|
||||
timer = setTimeout(() => {
|
||||
timer = null;
|
||||
fn.apply(this, lastArgs);
|
||||
}, delay);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// 调起相机
|
||||
export function chooseImage(count) {
|
||||
return new Promise((reslove, reject) => {
|
||||
uni.chooseImage({
|
||||
count: count, //默认9
|
||||
sizeType: ['original', 'compressed'], //可以指定是原图还是压缩图,默认二者都有
|
||||
sourceType: ['album', 'camera'], //从相册选择
|
||||
success: (res) => {
|
||||
reslove(res);
|
||||
// const tempFilePaths = res.tempFilePaths;
|
||||
// let tempPathList = [];
|
||||
// for (let i = 0; i < tempFilePaths.length; i++) {
|
||||
// const path = tempFilePaths[i];
|
||||
// const src = await compressImageHandler(path)
|
||||
// tempPathList.push(src);
|
||||
// }
|
||||
// reslove(tempPathList);
|
||||
},
|
||||
fail: (rej) => {
|
||||
reject(rej);
|
||||
}
|
||||
});
|
||||
})
|
||||
}
|
||||
|
||||
// function compressImageHandler(src) {
|
||||
// // console.log('platform===' + device.platform)
|
||||
// const tempPath = compressImage(src, device.platform);
|
||||
// // console.log('tempPath-----' + tempPath);
|
||||
// return tempPath
|
||||
// }
|
||||
//序列化对象和数组
|
||||
export function serialize(data) {
|
||||
if (data != null && data != '') {
|
||||
try {
|
||||
return JSON.parse(JSON.stringify(data));
|
||||
} catch (e) {
|
||||
if (data instanceof Array) {
|
||||
return [];
|
||||
}
|
||||
return {};
|
||||
}
|
||||
}
|
||||
return data;
|
||||
}
|
||||
Date.prototype.format = function(fmt) {
|
||||
let o = {
|
||||
'M+': this.getMonth() + 1, //月份
|
||||
'd+': this.getDate(), //日
|
||||
'h+': this.getHours(), //小时
|
||||
'm+': this.getMinutes(), //分
|
||||
's+': this.getSeconds(), //秒
|
||||
'q+': Math.floor((this.getMonth() + 3) / 3), //季度
|
||||
S: this.getMilliseconds() //毫秒
|
||||
};
|
||||
|
||||
if (/(y+)/.test(fmt)) {
|
||||
fmt = fmt.replace(RegExp.$1, String(this.getFullYear()).substr(4 - RegExp.$1.length));
|
||||
}
|
||||
for (let k in o) {
|
||||
if (new RegExp('(' + k + ')').test(fmt)) {
|
||||
fmt = fmt.replace(RegExp.$1, RegExp.$1.length == 1 ? o[k] : ('00' + o[k]).substr(String(o[k]).length));
|
||||
}
|
||||
}
|
||||
return fmt;
|
||||
};
|
||||
|
||||
//格式化日期
|
||||
export function formatDate(nS, format) {
|
||||
//日期格式化
|
||||
if (!nS) {
|
||||
return '';
|
||||
}
|
||||
format = format || 'yyyy-MM-dd hh:mm:ss';
|
||||
return new Date(nS).format(format);
|
||||
}
|
||||
|
||||
// 图片转base64
|
||||
export function pathToBase64(path) {
|
||||
return new Promise(function(resolve, reject) {
|
||||
if (typeof window === 'object' && 'document' in window) {
|
||||
if (typeof FileReader === 'function') {
|
||||
var xhr = new XMLHttpRequest()
|
||||
xhr.open('GET', path, true)
|
||||
xhr.responseType = 'blob'
|
||||
xhr.onload = function() {
|
||||
if (this.status === 200) {
|
||||
let fileReader = new FileReader()
|
||||
fileReader.onload = function(e) {
|
||||
resolve(e.target.result)
|
||||
}
|
||||
fileReader.onerror = reject
|
||||
fileReader.readAsDataURL(this.response)
|
||||
}
|
||||
}
|
||||
xhr.onerror = reject
|
||||
xhr.send()
|
||||
return
|
||||
}
|
||||
var canvas = document.createElement('canvas')
|
||||
var c2x = canvas.getContext('2d')
|
||||
var img = new Image
|
||||
img.onload = function() {
|
||||
canvas.width = img.width
|
||||
canvas.height = img.height
|
||||
c2x.drawImage(img, 0, 0)
|
||||
resolve(canvas.toDataURL())
|
||||
canvas.height = canvas.width = 0
|
||||
}
|
||||
img.onerror = reject
|
||||
img.src = path
|
||||
return
|
||||
}
|
||||
if (typeof plus === 'object') {
|
||||
plus.io.resolveLocalFileSystemURL(getLocalFilePath(path), function(entry) {
|
||||
entry.file(function(file) {
|
||||
var fileReader = new plus.io.FileReader()
|
||||
fileReader.onload = function(data) {
|
||||
resolve(data.target.result)
|
||||
}
|
||||
fileReader.onerror = function(error) {
|
||||
reject(error)
|
||||
}
|
||||
fileReader.readAsDataURL(file)
|
||||
}, function(error) {
|
||||
reject(error)
|
||||
})
|
||||
}, function(error) {
|
||||
reject(error)
|
||||
})
|
||||
return
|
||||
}
|
||||
if (typeof wx === 'object' && wx.canIUse('getFileSystemManager')) {
|
||||
wx.getFileSystemManager().readFile({
|
||||
filePath: path,
|
||||
encoding: 'base64',
|
||||
success: function(res) {
|
||||
resolve('data:image/png;base64,' + res.data)
|
||||
},
|
||||
fail: function(error) {
|
||||
reject(error)
|
||||
}
|
||||
})
|
||||
return
|
||||
}
|
||||
reject(new Error('not support'))
|
||||
})
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
/*
|
||||
@value 要拷贝的内容
|
||||
*/
|
||||
// export function copyText(value) {
|
||||
// // 条件编译,以下代码仅在H5出现
|
||||
// //#ifdef H5
|
||||
// return new Promise((reslove, reject) => {
|
||||
// uniCopy({
|
||||
// content: value,
|
||||
// success: (res) => {
|
||||
// reslove(res);
|
||||
// },
|
||||
// error: (e) => {
|
||||
// reject(res)
|
||||
// }
|
||||
// })
|
||||
// })
|
||||
|
||||
// //#endif
|
||||
|
||||
// // 以下代码在除H5以外的平台出现
|
||||
// //#ifndef H5
|
||||
|
||||
// //#endif
|
||||
// }
|
||||
|
||||
// 获取本周的第一天
|
||||
export function showWeekFirstDay() {
|
||||
var date = new Date();
|
||||
var weekday = date.getDay() || 7; //获取星期几,getDay()返回值是 0(周日) 到 6(周六) 之间的一个整数。0||7为7,即weekday的值为1-7
|
||||
date.setDate(date.getDate() - weekday + 1); //往前算(weekday-1)天,年份、月份会自动变化
|
||||
return formatDate(date, 'yyyy-MM-dd');
|
||||
}
|
||||
|
||||
|
||||
|
||||
// 获取本月第一天
|
||||
export function showMonthFirstDay() {
|
||||
var MonthFirstDay = new Date().setDate(1);
|
||||
return formatDate(new Date(MonthFirstDay).getTime(), 'yyyy-MM-dd');
|
||||
}
|
||||
|
||||
var now = new Date(); //当前日期
|
||||
// var nowDayOfWeek = now.getDay(); //今天本周的第几天
|
||||
// var nowDay = now.getDate(); //当前日
|
||||
var nowMonth = now.getMonth(); //当前月
|
||||
var nowYear = now.getYear(); //当前年
|
||||
nowYear += (nowYear < 2000) ? 1900 : 0; //
|
||||
//获得本季度的开始月份
|
||||
function getQuarterStartMonth() {
|
||||
var quarterStartMonth = 0;
|
||||
if (nowMonth < 3) {
|
||||
quarterStartMonth = 0;
|
||||
}
|
||||
if (2 < nowMonth && nowMonth < 6) {
|
||||
quarterStartMonth = 3;
|
||||
}
|
||||
if (5 < nowMonth && nowMonth < 9) {
|
||||
quarterStartMonth = 6;
|
||||
}
|
||||
if (nowMonth > 8) {
|
||||
quarterStartMonth = 9;
|
||||
}
|
||||
return quarterStartMonth;
|
||||
}
|
||||
|
||||
//或的本季度的结束日期
|
||||
//获得本季度的开始日期
|
||||
export function getQuarterStartDate() {
|
||||
var quarterStartDate = new Date(nowYear, getQuarterStartMonth(), 1);
|
||||
return formatDate(quarterStartDate, 'yyyy-MM-dd');
|
||||
}
|
||||
// 删除数组中重复数据
|
||||
export function unique(data) {
|
||||
data = data || [];
|
||||
var n = {}; //存放新的数据
|
||||
for (var i = 0; i < data.length; i++) {
|
||||
var v = JSON.stringify(data[i]);
|
||||
if (typeof(v) == "undefined") {
|
||||
n[v] = 1;
|
||||
}
|
||||
}
|
||||
data.length = 0;
|
||||
for (var i in n) {
|
||||
data[data.length] = i;
|
||||
}
|
||||
return data;
|
||||
}
|
23
main.js
23
main.js
|
@ -1,22 +1,31 @@
|
|||
import App from './App'
|
||||
|
||||
import uviewPlus from 'uview-plus'
|
||||
import {
|
||||
createPinia
|
||||
} from 'pinia'
|
||||
// #ifndef VUE3
|
||||
import Vue from 'vue'
|
||||
import './uni.promisify.adaptor'
|
||||
Vue.config.productionTip = false
|
||||
App.mpType = 'app'
|
||||
const app = new Vue({
|
||||
...App
|
||||
...App
|
||||
})
|
||||
app.$mount()
|
||||
// #endif
|
||||
|
||||
// #ifdef VUE3
|
||||
import { createSSRApp } from 'vue'
|
||||
import {
|
||||
createSSRApp
|
||||
} from 'vue'
|
||||
export function createApp() {
|
||||
const app = createSSRApp(App)
|
||||
return {
|
||||
app
|
||||
}
|
||||
const app = createSSRApp(App)
|
||||
const pinia = createPinia()
|
||||
app.use(pinia)
|
||||
app.use(uviewPlus)
|
||||
return {
|
||||
app,
|
||||
pinia
|
||||
}
|
||||
}
|
||||
// #endif
|
145
manifest.json
145
manifest.json
|
@ -1,72 +1,77 @@
|
|||
{
|
||||
"name" : "test",
|
||||
"appid" : "__UNI__B1D7CFE",
|
||||
"description" : "",
|
||||
"versionName" : "1.0.0",
|
||||
"versionCode" : "100",
|
||||
"transformPx" : false,
|
||||
/* 5+App特有相关 */
|
||||
"app-plus" : {
|
||||
"usingComponents" : true,
|
||||
"nvueStyleCompiler" : "uni-app",
|
||||
"compilerVersion" : 3,
|
||||
"splashscreen" : {
|
||||
"alwaysShowBeforeRender" : true,
|
||||
"waiting" : true,
|
||||
"autoclose" : true,
|
||||
"delay" : 0
|
||||
},
|
||||
/* 模块配置 */
|
||||
"modules" : {},
|
||||
/* 应用发布信息 */
|
||||
"distribute" : {
|
||||
/* android打包配置 */
|
||||
"android" : {
|
||||
"permissions" : [
|
||||
"<uses-permission android:name=\"android.permission.CHANGE_NETWORK_STATE\"/>",
|
||||
"<uses-permission android:name=\"android.permission.MOUNT_UNMOUNT_FILESYSTEMS\"/>",
|
||||
"<uses-permission android:name=\"android.permission.VIBRATE\"/>",
|
||||
"<uses-permission android:name=\"android.permission.READ_LOGS\"/>",
|
||||
"<uses-permission android:name=\"android.permission.ACCESS_WIFI_STATE\"/>",
|
||||
"<uses-feature android:name=\"android.hardware.camera.autofocus\"/>",
|
||||
"<uses-permission android:name=\"android.permission.ACCESS_NETWORK_STATE\"/>",
|
||||
"<uses-permission android:name=\"android.permission.CAMERA\"/>",
|
||||
"<uses-permission android:name=\"android.permission.GET_ACCOUNTS\"/>",
|
||||
"<uses-permission android:name=\"android.permission.READ_PHONE_STATE\"/>",
|
||||
"<uses-permission android:name=\"android.permission.CHANGE_WIFI_STATE\"/>",
|
||||
"<uses-permission android:name=\"android.permission.WAKE_LOCK\"/>",
|
||||
"<uses-permission android:name=\"android.permission.FLASHLIGHT\"/>",
|
||||
"<uses-feature android:name=\"android.hardware.camera\"/>",
|
||||
"<uses-permission android:name=\"android.permission.WRITE_SETTINGS\"/>"
|
||||
]
|
||||
},
|
||||
/* ios打包配置 */
|
||||
"ios" : {},
|
||||
/* SDK配置 */
|
||||
"sdkConfigs" : {}
|
||||
}
|
||||
},
|
||||
/* 快应用特有相关 */
|
||||
"quickapp" : {},
|
||||
/* 小程序特有相关 */
|
||||
"mp-weixin" : {
|
||||
"appid" : "",
|
||||
"setting" : {
|
||||
"urlCheck" : false
|
||||
},
|
||||
"usingComponents" : true
|
||||
},
|
||||
"mp-alipay" : {
|
||||
"usingComponents" : true
|
||||
},
|
||||
"mp-baidu" : {
|
||||
"usingComponents" : true
|
||||
},
|
||||
"mp-toutiao" : {
|
||||
"usingComponents" : true
|
||||
},
|
||||
"uniStatistics" : {
|
||||
"enable" : false
|
||||
},
|
||||
"vueVersion" : "3"
|
||||
"name": "test",
|
||||
"appid": "__UNI__B1D7CFE",
|
||||
"description": "",
|
||||
"versionName": "1.0.0",
|
||||
"versionCode": "100",
|
||||
"transformPx": false,
|
||||
/* 5+App特有相关 */
|
||||
"app-plus": {
|
||||
"usingComponents": true,
|
||||
"nvueStyleCompiler": "uni-app",
|
||||
"compilerVersion": 3,
|
||||
"splashscreen": {
|
||||
"alwaysShowBeforeRender": true,
|
||||
"waiting": true,
|
||||
"autoclose": true,
|
||||
"delay": 0
|
||||
},
|
||||
/* 模块配置 */
|
||||
"modules": {},
|
||||
/* 应用发布信息 */
|
||||
"distribute": {
|
||||
/* android打包配置 */
|
||||
"android": {
|
||||
"permissions": [
|
||||
"<uses-permission android:name=\"android.permission.CHANGE_NETWORK_STATE\"/>",
|
||||
"<uses-permission android:name=\"android.permission.MOUNT_UNMOUNT_FILESYSTEMS\"/>",
|
||||
"<uses-permission android:name=\"android.permission.VIBRATE\"/>",
|
||||
"<uses-permission android:name=\"android.permission.READ_LOGS\"/>",
|
||||
"<uses-permission android:name=\"android.permission.ACCESS_WIFI_STATE\"/>",
|
||||
"<uses-feature android:name=\"android.hardware.camera.autofocus\"/>",
|
||||
"<uses-permission android:name=\"android.permission.ACCESS_NETWORK_STATE\"/>",
|
||||
"<uses-permission android:name=\"android.permission.CAMERA\"/>",
|
||||
"<uses-permission android:name=\"android.permission.GET_ACCOUNTS\"/>",
|
||||
"<uses-permission android:name=\"android.permission.READ_PHONE_STATE\"/>",
|
||||
"<uses-permission android:name=\"android.permission.CHANGE_WIFI_STATE\"/>",
|
||||
"<uses-permission android:name=\"android.permission.WAKE_LOCK\"/>",
|
||||
"<uses-permission android:name=\"android.permission.FLASHLIGHT\"/>",
|
||||
"<uses-feature android:name=\"android.hardware.camera\"/>",
|
||||
"<uses-permission android:name=\"android.permission.WRITE_SETTINGS\"/>"
|
||||
],
|
||||
"minSdkVersion": 21
|
||||
},
|
||||
/* ios打包配置 */
|
||||
"ios": {
|
||||
"dSYMs": false
|
||||
},
|
||||
/* SDK配置 */
|
||||
"sdkConfigs": {
|
||||
"ad": {}
|
||||
}
|
||||
}
|
||||
},
|
||||
/* 快应用特有相关 */
|
||||
"quickapp": {},
|
||||
/* 小程序特有相关 */
|
||||
"mp-weixin": {
|
||||
"appid": "",
|
||||
"setting": {
|
||||
"urlCheck": false
|
||||
},
|
||||
"usingComponents": true
|
||||
},
|
||||
"mp-alipay": {
|
||||
"usingComponents": true
|
||||
},
|
||||
"mp-baidu": {
|
||||
"usingComponents": true
|
||||
},
|
||||
"mp-toutiao": {
|
||||
"usingComponents": true
|
||||
},
|
||||
"uniStatistics": {
|
||||
"enable": false
|
||||
},
|
||||
"vueVersion": "3"
|
||||
}
|
|
@ -0,0 +1,13 @@
|
|||
{
|
||||
"hash": "a1d62a80",
|
||||
"browserHash": "90e08141",
|
||||
"optimized": {
|
||||
"uview-plus": {
|
||||
"src": "../../uview-plus/index.js",
|
||||
"file": "uview-plus.js",
|
||||
"fileHash": "b7892bb7",
|
||||
"needsInterop": false
|
||||
}
|
||||
},
|
||||
"chunks": {}
|
||||
}
|
|
@ -0,0 +1 @@
|
|||
{"type":"module"}
|
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
|
@ -0,0 +1,22 @@
|
|||
{
|
||||
"systemParams": "win32-x64-83",
|
||||
"modulesFolders": [
|
||||
"node_modules"
|
||||
],
|
||||
"flags": [],
|
||||
"linkedModules": [],
|
||||
"topLevelPatterns": [
|
||||
"uview-plus@^3.1.38"
|
||||
],
|
||||
"lockfileEntries": {
|
||||
"clipboard@^2.0.11": "https://registry.yarnpkg.com/clipboard/-/clipboard-2.0.11.tgz#62180360b97dd668b6b3a84ec226975762a70be5",
|
||||
"dayjs@^1.11.3": "https://registry.yarnpkg.com/dayjs/-/dayjs-1.11.10.tgz#68acea85317a6e164457d6d6947564029a6a16a0",
|
||||
"delegate@^3.1.2": "https://registry.yarnpkg.com/delegate/-/delegate-3.2.0.tgz#b66b71c3158522e8ab5744f720d8ca0c2af59166",
|
||||
"good-listener@^1.2.2": "https://registry.yarnpkg.com/good-listener/-/good-listener-1.2.2.tgz#d53b30cdf9313dffb7dc9a0d477096aa6d145c50",
|
||||
"select@^1.1.2": "https://registry.yarnpkg.com/select/-/select-1.1.2.tgz#0e7350acdec80b1108528786ec1d4418d11b396d",
|
||||
"tiny-emitter@^2.0.0": "https://registry.yarnpkg.com/tiny-emitter/-/tiny-emitter-2.1.0.tgz#1d1a56edfc51c43e863cbb5382a72330e3555423",
|
||||
"uview-plus@^3.1.38": "https://registry.yarnpkg.com/uview-plus/-/uview-plus-3.1.38.tgz#6193350802ebca099dbbbed51b4bdb0a0df81068"
|
||||
},
|
||||
"files": [],
|
||||
"artifacts": {}
|
||||
}
|
|
@ -0,0 +1,11 @@
|
|||
{
|
||||
"presets": [
|
||||
[
|
||||
"@babel/env",
|
||||
{
|
||||
"forceAllTransforms": true,
|
||||
"modules": false
|
||||
}
|
||||
]
|
||||
]
|
||||
}
|
|
@ -0,0 +1,22 @@
|
|||
# EditorConfig helps developers define and maintain consistent
|
||||
# coding styles between different editors and IDEs
|
||||
# http://editorconfig.org
|
||||
|
||||
root = true
|
||||
|
||||
[*]
|
||||
# Change these settings to your own preference
|
||||
indent_style = space
|
||||
indent_size = 2
|
||||
|
||||
# We recommend you to keep these unchanged
|
||||
end_of_line = lf
|
||||
charset = utf-8
|
||||
trim_trailing_whitespace = true
|
||||
insert_final_newline = true
|
||||
|
||||
[*.md]
|
||||
trim_trailing_whitespace = false
|
||||
|
||||
[{package.json,bower.json}]
|
||||
indent_size = 2
|
|
@ -0,0 +1,12 @@
|
|||
# Ignore artifacts:
|
||||
dist
|
||||
|
||||
lib
|
||||
npm-debug.log
|
||||
bower_components
|
||||
node_modules
|
||||
yarn-error.log
|
||||
yarn.lock
|
||||
|
||||
src/*.ts
|
||||
/*.js
|
|
@ -0,0 +1,24 @@
|
|||
{
|
||||
"env": {
|
||||
"browser": true,
|
||||
"es2021": true,
|
||||
"mocha": true
|
||||
},
|
||||
"extends": ["airbnb-base", "plugin:prettier/recommended"],
|
||||
"parserOptions": {
|
||||
"ecmaVersion": 12,
|
||||
"sourceType": "module"
|
||||
},
|
||||
"plugins": ["prettier"],
|
||||
"rules": {
|
||||
"prettier/prettier": "error",
|
||||
"prefer-const": "off",
|
||||
"camelcase": "off",
|
||||
"no-underscore-dangle": "off",
|
||||
"consistent-return": "off",
|
||||
/* Remove the necessity to use this on classes */
|
||||
"class-methods-use-this": "off",
|
||||
/* Enable variables declarations from shadowing variables declared in the outer scope */
|
||||
"no-shadow": "off"
|
||||
}
|
||||
}
|
|
@ -0,0 +1,57 @@
|
|||
---
|
||||
name: 🐛 Bug Report
|
||||
about: Submit a bug report to help us improve
|
||||
labels: 'bug, needs triage'
|
||||
---
|
||||
|
||||
<!--
|
||||
|
||||
! PLEASE HELP US HELP YOU !
|
||||
|
||||
Bugs are fixed faster if you include:
|
||||
- a repro repository to inspect the code
|
||||
- an url to see the problem live
|
||||
|
||||
-->
|
||||
|
||||
## 🐛 Bug Report
|
||||
|
||||
> Fork this [JSFiddle](https://jsfiddle.net/zenorocha/5kk0eysw/) and reproduce your issue.
|
||||
|
||||
(A clear and concise description of what the issue is.)
|
||||
|
||||
### Have you read the [Contributing Guidelines on issues](https://github.com/zenorocha/clipboard.js/blob/master/contributing.md)?
|
||||
|
||||
(Write your answer here.)
|
||||
|
||||
### Expected Behaviour
|
||||
|
||||
<!--
|
||||
How did you expect your project to behave?
|
||||
It’s fine if you’re not sure your understanding is correct.
|
||||
Write down what you thought would happen.
|
||||
-->
|
||||
|
||||
I thought that by going to the page '...' and pressing the button '...' then '...' would happen.
|
||||
|
||||
_Tip: Try to use screenshots, gifs, videos, always remember people better understand with a visual way._
|
||||
|
||||
### Actual Behaviour
|
||||
|
||||
Instead of '...', what I saw was that '...' happened instead.
|
||||
|
||||
### To Reproduce
|
||||
|
||||
(Write your steps such as:)
|
||||
|
||||
1. Step 1...
|
||||
1. Step 2...
|
||||
1. Step 3...
|
||||
|
||||
### Browsers Affected
|
||||
|
||||
I tested on all major browsers and only IE 11 does not work.
|
||||
|
||||
### Operational System
|
||||
|
||||
(Place here your Operational System.)
|
|
@ -0,0 +1,13 @@
|
|||
---
|
||||
name: 📚 Documentation
|
||||
about: Report an issue related to documentation
|
||||
labels: 'documentation, needs triage'
|
||||
---
|
||||
|
||||
## 📚 Documentation
|
||||
|
||||
(A clear and concise description of what the issue is.)
|
||||
|
||||
### Have you read the [Contributing Guidelines on issues](https://github.com/zenorocha/clipboard.js/blob/master/contributing.md)?
|
||||
|
||||
(Write your answer here.)
|
|
@ -0,0 +1,26 @@
|
|||
---
|
||||
name: 💥 Proposal
|
||||
about: Propose a non-trivial change to Clipboard.js
|
||||
labels: 'proposal, needs triage'
|
||||
---
|
||||
|
||||
## 💥 Proposal
|
||||
|
||||
**Is your feature request related to a problem? Please describe**
|
||||
A clear and concise description of what the problem is. Ex. I'm always frustrated when [...]
|
||||
|
||||
**Describe the solution you'd like**
|
||||
A clear and concise description of what you want to happen.
|
||||
|
||||
**Describe alternatives you've considered**
|
||||
A clear and concise description of any alternative solutions or features you've considered.
|
||||
|
||||
**Are you able to assist to bring the feature to reality?**
|
||||
no | yes, I can...
|
||||
|
||||
**Additional context**
|
||||
Add any other context or screenshots about the feature request here.
|
||||
|
||||
### Have you read the [Contributing Guidelines on issues](https://github.com/zenorocha/clipboard.js/blob/master/contributing.md)?
|
||||
|
||||
(Write your answer here.)
|
|
@ -0,0 +1,35 @@
|
|||
<!--
|
||||
Please make sure to read the Pull Request Guidelines:
|
||||
https://github.com/zenorocha/clipboard.js/blob/master/contributing.md#proposing-pull-requests
|
||||
-->
|
||||
|
||||
<!-- PULL REQUEST TEMPLATE -->
|
||||
<!-- (Update "[ ]" to "[x]" to check a box) -->
|
||||
|
||||
**What kind of change does this PR introduce?** (check at least one)
|
||||
|
||||
- [ ] Bugfix
|
||||
- [ ] Feature
|
||||
- [ ] Code style update
|
||||
- [ ] Refactor
|
||||
- [ ] Build-related changes
|
||||
- [ ] Other, please describe:
|
||||
|
||||
**Does this PR introduce a breaking change?** (check one)
|
||||
|
||||
- [ ] Yes
|
||||
- [ ] No
|
||||
|
||||
If yes, please describe the impact and migration path for existing applications:
|
||||
|
||||
**The PR fulfills these requirements:**
|
||||
|
||||
- [ ] It's submitted to the `dev` branch for v2.x (or to a previous version branch), _not_ the `master` branch
|
||||
- [ ] When resolving a specific issue, it's referenced in the PR's title (e.g. `fix #xxx[,#xxx]`, where "xxx" is the issue number)
|
||||
- [ ] New/updated tests are included
|
||||
|
||||
If adding a **new feature**, the PR's description includes:
|
||||
|
||||
- [ ] A convincing reason for adding this feature (to avoid wasting your time, it's best to open a suggestion issue first and wait for approval before working on it)
|
||||
|
||||
**Other information:**
|
|
@ -0,0 +1,21 @@
|
|||
# Number of days of inactivity before an issue becomes stale
|
||||
daysUntilStale: 60
|
||||
|
||||
# Number of days of inactivity before a stale issue is closed
|
||||
daysUntilClose: 7
|
||||
|
||||
# Issues with these labels will never be considered stale
|
||||
exemptLabels:
|
||||
- pinned
|
||||
|
||||
# Label to use when marking an issue as stale
|
||||
staleLabel: stale
|
||||
|
||||
# Comment to post when marking an issue as stale. Set to `false` to disable
|
||||
markComment: >
|
||||
This issue has been automatically marked as stale because it has not had
|
||||
recent activity. It will be closed if no further activity occurs. Thank you
|
||||
for your contributions.
|
||||
|
||||
# Comment to post when closing a stale issue. Set to `false` to disable
|
||||
closeComment: false
|
|
@ -0,0 +1,47 @@
|
|||
# This workflow will run tests using node and then publish a package to GitHub Packages when a release is created
|
||||
# For more information see: https://help.github.com/actions/language-and-framework-guides/publishing-nodejs-packages
|
||||
|
||||
name: publish
|
||||
|
||||
on:
|
||||
release:
|
||||
types: [created]
|
||||
|
||||
jobs:
|
||||
build:
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- uses: actions/checkout@v2
|
||||
- uses: actions/setup-node@v1
|
||||
with:
|
||||
node-version: 14
|
||||
- run: npm ci
|
||||
- run: npm test
|
||||
|
||||
publish-npm:
|
||||
needs: build
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- uses: actions/checkout@v2
|
||||
- uses: actions/setup-node@v1
|
||||
with:
|
||||
node-version: 14
|
||||
registry-url: https://registry.npmjs.org/
|
||||
- run: npm ci
|
||||
- run: npm publish
|
||||
env:
|
||||
NODE_AUTH_TOKEN: ${{secrets.npm_token}}
|
||||
|
||||
publish-gpr:
|
||||
needs: build
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- uses: actions/checkout@v2
|
||||
- uses: actions/setup-node@v1
|
||||
with:
|
||||
node-version: 14
|
||||
registry-url: https://npm.pkg.github.com/
|
||||
- run: npm ci
|
||||
- run: npm publish
|
||||
env:
|
||||
NODE_AUTH_TOKEN: ${{secrets.GITHUB_TOKEN}}
|
|
@ -0,0 +1,34 @@
|
|||
# This workflow will do a clean install of node dependencies, build the source code and run tests across different versions of node
|
||||
# For more information see: https://help.github.com/actions/language-and-framework-guides/using-nodejs-with-github-actions
|
||||
|
||||
name: build
|
||||
|
||||
on:
|
||||
push:
|
||||
branches: [master]
|
||||
pull_request:
|
||||
branches: [master]
|
||||
|
||||
env:
|
||||
FORCE_COLOR: 2
|
||||
|
||||
jobs:
|
||||
build:
|
||||
runs-on: ubuntu-latest
|
||||
|
||||
strategy:
|
||||
matrix:
|
||||
node-version: [10.x, 12.x, 14.x, 15.x]
|
||||
# See supported Node.js release schedule at https://nodejs.org/en/about/releases/
|
||||
# For now is not possible to target LTS verssions =/ check progress here https://github.com/actions/setup-node/issues/26
|
||||
|
||||
steps:
|
||||
- uses: actions/checkout@v2
|
||||
- name: Use Node.js ${{ matrix.node-version }}
|
||||
uses: actions/setup-node@v2
|
||||
with:
|
||||
node-version: ${{ matrix.node-version }}
|
||||
- run: npm ci
|
||||
- run: npm run build --if-present
|
||||
- run: npm run lint
|
||||
- run: npm test
|
|
@ -0,0 +1,4 @@
|
|||
#!/bin/sh
|
||||
. "$(dirname "$0")/_/husky.sh"
|
||||
|
||||
npx --no-install lint-staged
|
|
@ -0,0 +1 @@
|
|||
14
|
|
@ -0,0 +1,9 @@
|
|||
# Ignore artifacts:
|
||||
dist
|
||||
|
||||
lib
|
||||
npm-debug.log
|
||||
bower_components
|
||||
node_modules
|
||||
yarn-error.log
|
||||
yarn.lock
|
|
@ -0,0 +1,9 @@
|
|||
{
|
||||
"printWidth": 80,
|
||||
"tabWidth": 2,
|
||||
"semi": true,
|
||||
"singleQuote": true,
|
||||
"trailingComma": "es5",
|
||||
"bracketSpacing": true,
|
||||
"arrowParens": "always"
|
||||
}
|
|
@ -0,0 +1,21 @@
|
|||
MIT License
|
||||
|
||||
Copyright (c) Zeno Rocha
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
of this software and associated documentation files (the "Software"), to deal
|
||||
in the Software without restriction, including without limitation the rights
|
||||
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||
copies of the Software, and to permit persons to whom the Software is
|
||||
furnished to do so, subject to the following conditions:
|
||||
|
||||
The above copyright notice and this permission notice shall be included in all
|
||||
copies or substantial portions of the Software.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||
SOFTWARE.
|
|
@ -0,0 +1,18 @@
|
|||
{
|
||||
"name": "clipboard",
|
||||
"version": "2.0.11",
|
||||
"description": "Modern copy to clipboard. No Flash. Just 3kb",
|
||||
"license": "MIT",
|
||||
"main": "dist/clipboard.js",
|
||||
"ignore": [
|
||||
"/.*/",
|
||||
"/demo/",
|
||||
"/test/",
|
||||
"/.*",
|
||||
"/bower.json",
|
||||
"/karma.conf.js",
|
||||
"/src",
|
||||
"/lib"
|
||||
],
|
||||
"keywords": ["clipboard", "copy", "cut"]
|
||||
}
|
|
@ -0,0 +1,25 @@
|
|||
{
|
||||
"name": "zenorocha/clipboardjs",
|
||||
"description": "Modern copy to clipboard. No Flash. Just 3kb gzipped https://clipboardjs.com",
|
||||
"type": "component",
|
||||
"homepage": "https://clipboardjs.com/",
|
||||
"authors": [
|
||||
{
|
||||
"name": "Zeno Rocha",
|
||||
"homepage": "http://zenorocha.com/"
|
||||
}
|
||||
],
|
||||
"require": {
|
||||
"oomphinc/composer-installers-extender": "*"
|
||||
},
|
||||
"extra": {
|
||||
"component": {
|
||||
"scripts": [
|
||||
"dist/clipboard.js"
|
||||
],
|
||||
"files": [
|
||||
"dist/clipboard.min.js"
|
||||
]
|
||||
}
|
||||
}
|
||||
}
|
|
@ -0,0 +1,29 @@
|
|||
# Contributing guide
|
||||
|
||||
Want to contribute to Clipboard.js? Awesome!
|
||||
There are many ways you can contribute, see below.
|
||||
|
||||
## Opening issues
|
||||
|
||||
Open an issue to report bugs or to propose new features.
|
||||
|
||||
- Reporting bugs: describe the bug as clearly as you can, including steps to reproduce, what happened and what you were expecting to happen. Also include browser version, OS and other related software's (npm, Node.js, etc) versions when applicable.
|
||||
|
||||
- Proposing features: explain the proposed feature, what it should do, why it is useful, how users should use it. Give us as much info as possible so it will be easier to discuss, access and implement the proposed feature. When you're unsure about a certain aspect of the feature, feel free to leave it open for others to discuss and find an appropriate solution.
|
||||
|
||||
## Proposing pull requests
|
||||
|
||||
Pull requests are very welcome. Note that if you are going to propose drastic changes, be sure to open an issue for discussion first, to make sure that your PR will be accepted before you spend effort coding it.
|
||||
|
||||
Fork the Clipboard.js repository, clone it locally and create a branch for your proposed bug fix or new feature. Avoid working directly on the master branch.
|
||||
|
||||
Implement your bug fix or feature, write tests to cover it and make sure all tests are passing (run a final `npm test` to make sure everything is correct). Then commit your changes, push your bug fix/feature branch to the origin (your forked repo) and open a pull request to the upstream (the repository you originally forked)'s master branch.
|
||||
|
||||
## Documentation
|
||||
|
||||
Documentation is extremely important and takes a fair deal of time and effort to write and keep updated. Please submit any and all improvements you can make to the repository's docs.
|
||||
|
||||
## Known issues
|
||||
|
||||
If you're using npm@3 you'll probably face some issues related to peerDependencies.
|
||||
https://github.com/npm/npm/issues/9204
|
|
@ -0,0 +1,35 @@
|
|||
<!DOCTYPE html>
|
||||
<html lang="en">
|
||||
<head>
|
||||
<meta charset="UTF-8" />
|
||||
<title>constructor-node</title>
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1" />
|
||||
</head>
|
||||
<body>
|
||||
<!-- 1. Define some markup -->
|
||||
<div id="btn" data-clipboard-text="1">
|
||||
<span>Copy</span>
|
||||
</div>
|
||||
|
||||
<!-- 2. Include library -->
|
||||
<script src="../dist/clipboard.min.js"></script>
|
||||
|
||||
<!-- 3. Instantiate clipboard by passing a HTML element -->
|
||||
<script>
|
||||
var btn = document.getElementById('btn');
|
||||
var clipboard = new ClipboardJS(btn);
|
||||
|
||||
clipboard.on('success', function (e) {
|
||||
console.info('Action:', e.action);
|
||||
console.info('Text:', e.text);
|
||||
console.info('Trigger:', e.trigger);
|
||||
});
|
||||
|
||||
clipboard.on('error', function (e) {
|
||||
console.info('Action:', e.action);
|
||||
console.info('Text:', e.text);
|
||||
console.info('Trigger:', e.trigger);
|
||||
});
|
||||
</script>
|
||||
</body>
|
||||
</html>
|
|
@ -0,0 +1,35 @@
|
|||
<!DOCTYPE html>
|
||||
<html lang="en">
|
||||
<head>
|
||||
<meta charset="UTF-8" />
|
||||
<title>constructor-nodelist</title>
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1" />
|
||||
</head>
|
||||
<body>
|
||||
<!-- 1. Define some markup -->
|
||||
<button data-clipboard-text="1">Copy</button>
|
||||
<button data-clipboard-text="2">Copy</button>
|
||||
<button data-clipboard-text="3">Copy</button>
|
||||
|
||||
<!-- 2. Include library -->
|
||||
<script src="../dist/clipboard.min.js"></script>
|
||||
|
||||
<!-- 3. Instantiate clipboard by passing a list of HTML elements -->
|
||||
<script>
|
||||
var btns = document.querySelectorAll('button');
|
||||
var clipboard = new ClipboardJS(btns);
|
||||
|
||||
clipboard.on('success', function (e) {
|
||||
console.info('Action:', e.action);
|
||||
console.info('Text:', e.text);
|
||||
console.info('Trigger:', e.trigger);
|
||||
});
|
||||
|
||||
clipboard.on('error', function (e) {
|
||||
console.info('Action:', e.action);
|
||||
console.info('Text:', e.text);
|
||||
console.info('Trigger:', e.trigger);
|
||||
});
|
||||
</script>
|
||||
</body>
|
||||
</html>
|
|
@ -0,0 +1,34 @@
|
|||
<!DOCTYPE html>
|
||||
<html lang="en">
|
||||
<head>
|
||||
<meta charset="UTF-8" />
|
||||
<title>constructor-selector</title>
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1" />
|
||||
</head>
|
||||
<body>
|
||||
<!-- 1. Define some markup -->
|
||||
<button class="btn" data-clipboard-text="1">Copy</button>
|
||||
<button class="btn" data-clipboard-text="2">Copy</button>
|
||||
<button class="btn" data-clipboard-text="3">Copy</button>
|
||||
|
||||
<!-- 2. Include library -->
|
||||
<script src="../dist/clipboard.min.js"></script>
|
||||
|
||||
<!-- 3. Instantiate clipboard by passing a string selector -->
|
||||
<script>
|
||||
var clipboard = new ClipboardJS('.btn');
|
||||
|
||||
clipboard.on('success', function (e) {
|
||||
console.info('Action:', e.action);
|
||||
console.info('Text:', e.text);
|
||||
console.info('Trigger:', e.trigger);
|
||||
});
|
||||
|
||||
clipboard.on('error', function (e) {
|
||||
console.info('Action:', e.action);
|
||||
console.info('Text:', e.text);
|
||||
console.info('Trigger:', e.trigger);
|
||||
});
|
||||
</script>
|
||||
</body>
|
||||
</html>
|
|
@ -0,0 +1,37 @@
|
|||
<!DOCTYPE html>
|
||||
<html lang="en">
|
||||
<head>
|
||||
<meta charset="UTF-8" />
|
||||
<title>function-target</title>
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1" />
|
||||
</head>
|
||||
<body>
|
||||
<!-- 1. Define some markup -->
|
||||
<button class="btn">Copy</button>
|
||||
<div>hello</div>
|
||||
|
||||
<!-- 2. Include library -->
|
||||
<script src="../dist/clipboard.min.js"></script>
|
||||
|
||||
<!-- 3. Instantiate clipboard -->
|
||||
<script>
|
||||
var clipboard = new ClipboardJS('.btn', {
|
||||
target: function () {
|
||||
return document.querySelector('div');
|
||||
},
|
||||
});
|
||||
|
||||
clipboard.on('success', function (e) {
|
||||
console.info('Action:', e.action);
|
||||
console.info('Text:', e.text);
|
||||
console.info('Trigger:', e.trigger);
|
||||
});
|
||||
|
||||
clipboard.on('error', function (e) {
|
||||
console.info('Action:', e.action);
|
||||
console.info('Text:', e.text);
|
||||
console.info('Trigger:', e.trigger);
|
||||
});
|
||||
</script>
|
||||
</body>
|
||||
</html>
|
|
@ -0,0 +1,36 @@
|
|||
<!DOCTYPE html>
|
||||
<html lang="en">
|
||||
<head>
|
||||
<meta charset="UTF-8" />
|
||||
<title>function-text</title>
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1" />
|
||||
</head>
|
||||
<body>
|
||||
<!-- 1. Define some markup -->
|
||||
<button class="btn">Copy</button>
|
||||
|
||||
<!-- 2. Include library -->
|
||||
<script src="../dist/clipboard.min.js"></script>
|
||||
|
||||
<!-- 3. Instantiate clipboard -->
|
||||
<script>
|
||||
var clipboard = new ClipboardJS('.btn', {
|
||||
text: function () {
|
||||
return 'to be or not to be';
|
||||
},
|
||||
});
|
||||
|
||||
clipboard.on('success', function (e) {
|
||||
console.info('Action:', e.action);
|
||||
console.info('Text:', e.text);
|
||||
console.info('Trigger:', e.trigger);
|
||||
});
|
||||
|
||||
clipboard.on('error', function (e) {
|
||||
console.info('Action:', e.action);
|
||||
console.info('Text:', e.text);
|
||||
console.info('Trigger:', e.trigger);
|
||||
});
|
||||
</script>
|
||||
</body>
|
||||
</html>
|
|
@ -0,0 +1,39 @@
|
|||
<!DOCTYPE html>
|
||||
<html lang="en">
|
||||
<head>
|
||||
<meta charset="UTF-8" />
|
||||
<title>target-div</title>
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1" />
|
||||
</head>
|
||||
<body>
|
||||
<!-- 1. Define some markup -->
|
||||
<div>hello</div>
|
||||
<button
|
||||
class="btn"
|
||||
data-clipboard-action="copy"
|
||||
data-clipboard-target="div"
|
||||
>
|
||||
Copy
|
||||
</button>
|
||||
|
||||
<!-- 2. Include library -->
|
||||
<script src="../dist/clipboard.min.js"></script>
|
||||
|
||||
<!-- 3. Instantiate clipboard -->
|
||||
<script>
|
||||
var clipboard = new ClipboardJS('.btn');
|
||||
|
||||
clipboard.on('success', function (e) {
|
||||
console.info('Action:', e.action);
|
||||
console.info('Text:', e.text);
|
||||
console.info('Trigger:', e.trigger);
|
||||
});
|
||||
|
||||
clipboard.on('error', function (e) {
|
||||
console.info('Action:', e.action);
|
||||
console.info('Text:', e.text);
|
||||
console.info('Trigger:', e.trigger);
|
||||
});
|
||||
</script>
|
||||
</body>
|
||||
</html>
|
|
@ -0,0 +1,37 @@
|
|||
<!DOCTYPE html>
|
||||
<html lang="en">
|
||||
<head>
|
||||
<meta charset="UTF-8" />
|
||||
<title>target-input-number</title>
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1" />
|
||||
</head>
|
||||
<body>
|
||||
<!-- 1. Define some markup -->
|
||||
<input id="foo" type="number" value="0" />
|
||||
<button
|
||||
class="btn"
|
||||
data-clipboard-action="copy"
|
||||
data-clipboard-target="#foo"
|
||||
>
|
||||
Copy
|
||||
</button>
|
||||
|
||||
<!-- 2. Include library -->
|
||||
<script src="../dist/clipboard.min.js"></script>
|
||||
|
||||
<!-- 3. Instantiate clipboard -->
|
||||
<script>
|
||||
var clipboard = new ClipboardJS('.btn');
|
||||
|
||||
clipboard.on('success', function (e) {
|
||||
console.info('Action:', e.action);
|
||||
console.info('Text:', e.text);
|
||||
console.info('Trigger:', e.trigger);
|
||||
});
|
||||
|
||||
clipboard.on('error', function (e) {
|
||||
console.log(e);
|
||||
});
|
||||
</script>
|
||||
</body>
|
||||
</html>
|
|
@ -0,0 +1,37 @@
|
|||
<!DOCTYPE html>
|
||||
<html lang="en">
|
||||
<head>
|
||||
<meta charset="UTF-8" />
|
||||
<title>target-input</title>
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1" />
|
||||
</head>
|
||||
<body>
|
||||
<!-- 1. Define some markup -->
|
||||
<input id="foo" type="text" value="hello" />
|
||||
<button
|
||||
class="btn"
|
||||
data-clipboard-action="copy"
|
||||
data-clipboard-target="#foo"
|
||||
>
|
||||
Copy
|
||||
</button>
|
||||
|
||||
<!-- 2. Include library -->
|
||||
<script src="../dist/clipboard.min.js"></script>
|
||||
|
||||
<!-- 3. Instantiate clipboard -->
|
||||
<script>
|
||||
var clipboard = new ClipboardJS('.btn');
|
||||
|
||||
clipboard.on('success', function (e) {
|
||||
console.info('Action:', e.action);
|
||||
console.info('Text:', e.text);
|
||||
console.info('Trigger:', e.trigger);
|
||||
});
|
||||
|
||||
clipboard.on('error', function (e) {
|
||||
console.log(e);
|
||||
});
|
||||
</script>
|
||||
</body>
|
||||
</html>
|
|
@ -0,0 +1,28 @@
|
|||
<!DOCTYPE html>
|
||||
<html lang="en">
|
||||
<head>
|
||||
<meta charset="UTF-8" />
|
||||
<title>target-programmatic-copy</title>
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1" />
|
||||
</head>
|
||||
<body>
|
||||
<!-- 1. Define some markup -->
|
||||
<textarea id="bar">hello</textarea>
|
||||
<button id="btn">
|
||||
Copy
|
||||
</button>
|
||||
|
||||
<!-- 2. Include library -->
|
||||
<script src="../dist/clipboard.min.js"></script>
|
||||
|
||||
<!-- 3. Instantiate clipboard -->
|
||||
<script>
|
||||
var btn = document.querySelector('#btn');
|
||||
|
||||
btn.addEventListener('click', () => {
|
||||
const textCopied = ClipboardJS.copy(document.querySelector('#bar'));
|
||||
console.log('copied!', textCopied);
|
||||
})
|
||||
</script>
|
||||
</body>
|
||||
</html>
|
|
@ -0,0 +1,28 @@
|
|||
<!DOCTYPE html>
|
||||
<html lang="en">
|
||||
<head>
|
||||
<meta charset="UTF-8" />
|
||||
<title>target-programmatic-cut</title>
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1" />
|
||||
</head>
|
||||
<body>
|
||||
<!-- 1. Define some markup -->
|
||||
<textarea id="bar">hello</textarea>
|
||||
<button id="btn">
|
||||
Cut
|
||||
</button>
|
||||
|
||||
<!-- 2. Include library -->
|
||||
<script src="../dist/clipboard.min.js"></script>
|
||||
|
||||
<!-- 3. Instantiate clipboard -->
|
||||
<script>
|
||||
var btn = document.querySelector('#btn');
|
||||
|
||||
btn.addEventListener('click', () => {
|
||||
const textCut = ClipboardJS.cut(document.querySelector('#bar'));
|
||||
console.log('cut!', textCut);
|
||||
})
|
||||
</script>
|
||||
</body>
|
||||
</html>
|
|
@ -0,0 +1,39 @@
|
|||
<!DOCTYPE html>
|
||||
<html lang="en">
|
||||
<head>
|
||||
<meta charset="UTF-8" />
|
||||
<title>target-textarea</title>
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1" />
|
||||
</head>
|
||||
<body>
|
||||
<!-- 1. Define some markup -->
|
||||
<textarea id="bar">hello</textarea>
|
||||
<button
|
||||
class="btn"
|
||||
data-clipboard-action="cut"
|
||||
data-clipboard-target="#bar"
|
||||
>
|
||||
Cut
|
||||
</button>
|
||||
|
||||
<!-- 2. Include library -->
|
||||
<script src="../dist/clipboard.min.js"></script>
|
||||
|
||||
<!-- 3. Instantiate clipboard -->
|
||||
<script>
|
||||
var clipboard = new ClipboardJS('.btn');
|
||||
|
||||
clipboard.on('success', function (e) {
|
||||
console.info('Action:', e.action);
|
||||
console.info('Text:', e.text);
|
||||
console.info('Trigger:', e.trigger);
|
||||
});
|
||||
|
||||
clipboard.on('error', function (e) {
|
||||
console.info('Action:', e.action);
|
||||
console.info('Text:', e.text);
|
||||
console.info('Trigger:', e.trigger);
|
||||
});
|
||||
</script>
|
||||
</body>
|
||||
</html>
|
|
@ -0,0 +1,27 @@
|
|||
<!DOCTYPE html>
|
||||
<html lang="en">
|
||||
<head>
|
||||
<meta charset="UTF-8" />
|
||||
<title>text-programmatic-copy</title>
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1" />
|
||||
</head>
|
||||
<body>
|
||||
<!-- 1. Define some markup -->
|
||||
<button id="btn">
|
||||
Copy
|
||||
</button>
|
||||
|
||||
<!-- 2. Include library -->
|
||||
<script src="../dist/clipboard.min.js"></script>
|
||||
|
||||
<!-- 3. Instantiate clipboard -->
|
||||
<script>
|
||||
var btn = document.querySelector('#btn');
|
||||
|
||||
btn.addEventListener('click', () => {
|
||||
const textCopied = ClipboardJS.copy('123');
|
||||
console.log('copied!', textCopied);
|
||||
})
|
||||
</script>
|
||||
</body>
|
||||
</html>
|
|
@ -0,0 +1,890 @@
|
|||
/*!
|
||||
* clipboard.js v2.0.11
|
||||
* https://clipboardjs.com/
|
||||
*
|
||||
* Licensed MIT © Zeno Rocha
|
||||
*/
|
||||
(function webpackUniversalModuleDefinition(root, factory) {
|
||||
if(typeof exports === 'object' && typeof module === 'object')
|
||||
module.exports = factory();
|
||||
else if(typeof define === 'function' && define.amd)
|
||||
define([], factory);
|
||||
else if(typeof exports === 'object')
|
||||
exports["ClipboardJS"] = factory();
|
||||
else
|
||||
root["ClipboardJS"] = factory();
|
||||
})(this, function() {
|
||||
return /******/ (function() { // webpackBootstrap
|
||||
/******/ var __webpack_modules__ = ({
|
||||
|
||||
/***/ 686:
|
||||
/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) {
|
||||
|
||||
"use strict";
|
||||
|
||||
// EXPORTS
|
||||
__webpack_require__.d(__webpack_exports__, {
|
||||
"default": function() { return /* binding */ clipboard; }
|
||||
});
|
||||
|
||||
// EXTERNAL MODULE: ./node_modules/tiny-emitter/index.js
|
||||
var tiny_emitter = __webpack_require__(279);
|
||||
var tiny_emitter_default = /*#__PURE__*/__webpack_require__.n(tiny_emitter);
|
||||
// EXTERNAL MODULE: ./node_modules/good-listener/src/listen.js
|
||||
var listen = __webpack_require__(370);
|
||||
var listen_default = /*#__PURE__*/__webpack_require__.n(listen);
|
||||
// EXTERNAL MODULE: ./node_modules/select/src/select.js
|
||||
var src_select = __webpack_require__(817);
|
||||
var select_default = /*#__PURE__*/__webpack_require__.n(src_select);
|
||||
;// CONCATENATED MODULE: ./src/common/command.js
|
||||
/**
|
||||
* Executes a given operation type.
|
||||
* @param {String} type
|
||||
* @return {Boolean}
|
||||
*/
|
||||
function command(type) {
|
||||
try {
|
||||
return document.execCommand(type);
|
||||
} catch (err) {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
;// CONCATENATED MODULE: ./src/actions/cut.js
|
||||
|
||||
|
||||
/**
|
||||
* Cut action wrapper.
|
||||
* @param {String|HTMLElement} target
|
||||
* @return {String}
|
||||
*/
|
||||
|
||||
var ClipboardActionCut = function ClipboardActionCut(target) {
|
||||
var selectedText = select_default()(target);
|
||||
command('cut');
|
||||
return selectedText;
|
||||
};
|
||||
|
||||
/* harmony default export */ var actions_cut = (ClipboardActionCut);
|
||||
;// CONCATENATED MODULE: ./src/common/create-fake-element.js
|
||||
/**
|
||||
* Creates a fake textarea element with a value.
|
||||
* @param {String} value
|
||||
* @return {HTMLElement}
|
||||
*/
|
||||
function createFakeElement(value) {
|
||||
var isRTL = document.documentElement.getAttribute('dir') === 'rtl';
|
||||
var fakeElement = document.createElement('textarea'); // Prevent zooming on iOS
|
||||
|
||||
fakeElement.style.fontSize = '12pt'; // Reset box model
|
||||
|
||||
fakeElement.style.border = '0';
|
||||
fakeElement.style.padding = '0';
|
||||
fakeElement.style.margin = '0'; // Move element out of screen horizontally
|
||||
|
||||
fakeElement.style.position = 'absolute';
|
||||
fakeElement.style[isRTL ? 'right' : 'left'] = '-9999px'; // Move element to the same position vertically
|
||||
|
||||
var yPosition = window.pageYOffset || document.documentElement.scrollTop;
|
||||
fakeElement.style.top = "".concat(yPosition, "px");
|
||||
fakeElement.setAttribute('readonly', '');
|
||||
fakeElement.value = value;
|
||||
return fakeElement;
|
||||
}
|
||||
;// CONCATENATED MODULE: ./src/actions/copy.js
|
||||
|
||||
|
||||
|
||||
/**
|
||||
* Create fake copy action wrapper using a fake element.
|
||||
* @param {String} target
|
||||
* @param {Object} options
|
||||
* @return {String}
|
||||
*/
|
||||
|
||||
var fakeCopyAction = function fakeCopyAction(value, options) {
|
||||
var fakeElement = createFakeElement(value);
|
||||
options.container.appendChild(fakeElement);
|
||||
var selectedText = select_default()(fakeElement);
|
||||
command('copy');
|
||||
fakeElement.remove();
|
||||
return selectedText;
|
||||
};
|
||||
/**
|
||||
* Copy action wrapper.
|
||||
* @param {String|HTMLElement} target
|
||||
* @param {Object} options
|
||||
* @return {String}
|
||||
*/
|
||||
|
||||
|
||||
var ClipboardActionCopy = function ClipboardActionCopy(target) {
|
||||
var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {
|
||||
container: document.body
|
||||
};
|
||||
var selectedText = '';
|
||||
|
||||
if (typeof target === 'string') {
|
||||
selectedText = fakeCopyAction(target, options);
|
||||
} else if (target instanceof HTMLInputElement && !['text', 'search', 'url', 'tel', 'password'].includes(target === null || target === void 0 ? void 0 : target.type)) {
|
||||
// If input type doesn't support `setSelectionRange`. Simulate it. https://developer.mozilla.org/en-US/docs/Web/API/HTMLInputElement/setSelectionRange
|
||||
selectedText = fakeCopyAction(target.value, options);
|
||||
} else {
|
||||
selectedText = select_default()(target);
|
||||
command('copy');
|
||||
}
|
||||
|
||||
return selectedText;
|
||||
};
|
||||
|
||||
/* harmony default export */ var actions_copy = (ClipboardActionCopy);
|
||||
;// CONCATENATED MODULE: ./src/actions/default.js
|
||||
function _typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); }
|
||||
|
||||
|
||||
|
||||
/**
|
||||
* Inner function which performs selection from either `text` or `target`
|
||||
* properties and then executes copy or cut operations.
|
||||
* @param {Object} options
|
||||
*/
|
||||
|
||||
var ClipboardActionDefault = function ClipboardActionDefault() {
|
||||
var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
|
||||
// Defines base properties passed from constructor.
|
||||
var _options$action = options.action,
|
||||
action = _options$action === void 0 ? 'copy' : _options$action,
|
||||
container = options.container,
|
||||
target = options.target,
|
||||
text = options.text; // Sets the `action` to be performed which can be either 'copy' or 'cut'.
|
||||
|
||||
if (action !== 'copy' && action !== 'cut') {
|
||||
throw new Error('Invalid "action" value, use either "copy" or "cut"');
|
||||
} // Sets the `target` property using an element that will be have its content copied.
|
||||
|
||||
|
||||
if (target !== undefined) {
|
||||
if (target && _typeof(target) === 'object' && target.nodeType === 1) {
|
||||
if (action === 'copy' && target.hasAttribute('disabled')) {
|
||||
throw new Error('Invalid "target" attribute. Please use "readonly" instead of "disabled" attribute');
|
||||
}
|
||||
|
||||
if (action === 'cut' && (target.hasAttribute('readonly') || target.hasAttribute('disabled'))) {
|
||||
throw new Error('Invalid "target" attribute. You can\'t cut text from elements with "readonly" or "disabled" attributes');
|
||||
}
|
||||
} else {
|
||||
throw new Error('Invalid "target" value, use a valid Element');
|
||||
}
|
||||
} // Define selection strategy based on `text` property.
|
||||
|
||||
|
||||
if (text) {
|
||||
return actions_copy(text, {
|
||||
container: container
|
||||
});
|
||||
} // Defines which selection strategy based on `target` property.
|
||||
|
||||
|
||||
if (target) {
|
||||
return action === 'cut' ? actions_cut(target) : actions_copy(target, {
|
||||
container: container
|
||||
});
|
||||
}
|
||||
};
|
||||
|
||||
/* harmony default export */ var actions_default = (ClipboardActionDefault);
|
||||
;// CONCATENATED MODULE: ./src/clipboard.js
|
||||
function clipboard_typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { clipboard_typeof = function _typeof(obj) { return typeof obj; }; } else { clipboard_typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return clipboard_typeof(obj); }
|
||||
|
||||
function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
|
||||
|
||||
function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }
|
||||
|
||||
function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }
|
||||
|
||||
function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); }
|
||||
|
||||
function _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }
|
||||
|
||||
function _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }
|
||||
|
||||
function _possibleConstructorReturn(self, call) { if (call && (clipboard_typeof(call) === "object" || typeof call === "function")) { return call; } return _assertThisInitialized(self); }
|
||||
|
||||
function _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return self; }
|
||||
|
||||
function _isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Date.prototype.toString.call(Reflect.construct(Date, [], function () {})); return true; } catch (e) { return false; } }
|
||||
|
||||
function _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
/**
|
||||
* Helper function to retrieve attribute value.
|
||||
* @param {String} suffix
|
||||
* @param {Element} element
|
||||
*/
|
||||
|
||||
function getAttributeValue(suffix, element) {
|
||||
var attribute = "data-clipboard-".concat(suffix);
|
||||
|
||||
if (!element.hasAttribute(attribute)) {
|
||||
return;
|
||||
}
|
||||
|
||||
return element.getAttribute(attribute);
|
||||
}
|
||||
/**
|
||||
* Base class which takes one or more elements, adds event listeners to them,
|
||||
* and instantiates a new `ClipboardAction` on each click.
|
||||
*/
|
||||
|
||||
|
||||
var Clipboard = /*#__PURE__*/function (_Emitter) {
|
||||
_inherits(Clipboard, _Emitter);
|
||||
|
||||
var _super = _createSuper(Clipboard);
|
||||
|
||||
/**
|
||||
* @param {String|HTMLElement|HTMLCollection|NodeList} trigger
|
||||
* @param {Object} options
|
||||
*/
|
||||
function Clipboard(trigger, options) {
|
||||
var _this;
|
||||
|
||||
_classCallCheck(this, Clipboard);
|
||||
|
||||
_this = _super.call(this);
|
||||
|
||||
_this.resolveOptions(options);
|
||||
|
||||
_this.listenClick(trigger);
|
||||
|
||||
return _this;
|
||||
}
|
||||
/**
|
||||
* Defines if attributes would be resolved using internal setter functions
|
||||
* or custom functions that were passed in the constructor.
|
||||
* @param {Object} options
|
||||
*/
|
||||
|
||||
|
||||
_createClass(Clipboard, [{
|
||||
key: "resolveOptions",
|
||||
value: function resolveOptions() {
|
||||
var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
|
||||
this.action = typeof options.action === 'function' ? options.action : this.defaultAction;
|
||||
this.target = typeof options.target === 'function' ? options.target : this.defaultTarget;
|
||||
this.text = typeof options.text === 'function' ? options.text : this.defaultText;
|
||||
this.container = clipboard_typeof(options.container) === 'object' ? options.container : document.body;
|
||||
}
|
||||
/**
|
||||
* Adds a click event listener to the passed trigger.
|
||||
* @param {String|HTMLElement|HTMLCollection|NodeList} trigger
|
||||
*/
|
||||
|
||||
}, {
|
||||
key: "listenClick",
|
||||
value: function listenClick(trigger) {
|
||||
var _this2 = this;
|
||||
|
||||
this.listener = listen_default()(trigger, 'click', function (e) {
|
||||
return _this2.onClick(e);
|
||||
});
|
||||
}
|
||||
/**
|
||||
* Defines a new `ClipboardAction` on each click event.
|
||||
* @param {Event} e
|
||||
*/
|
||||
|
||||
}, {
|
||||
key: "onClick",
|
||||
value: function onClick(e) {
|
||||
var trigger = e.delegateTarget || e.currentTarget;
|
||||
var action = this.action(trigger) || 'copy';
|
||||
var text = actions_default({
|
||||
action: action,
|
||||
container: this.container,
|
||||
target: this.target(trigger),
|
||||
text: this.text(trigger)
|
||||
}); // Fires an event based on the copy operation result.
|
||||
|
||||
this.emit(text ? 'success' : 'error', {
|
||||
action: action,
|
||||
text: text,
|
||||
trigger: trigger,
|
||||
clearSelection: function clearSelection() {
|
||||
if (trigger) {
|
||||
trigger.focus();
|
||||
}
|
||||
|
||||
window.getSelection().removeAllRanges();
|
||||
}
|
||||
});
|
||||
}
|
||||
/**
|
||||
* Default `action` lookup function.
|
||||
* @param {Element} trigger
|
||||
*/
|
||||
|
||||
}, {
|
||||
key: "defaultAction",
|
||||
value: function defaultAction(trigger) {
|
||||
return getAttributeValue('action', trigger);
|
||||
}
|
||||
/**
|
||||
* Default `target` lookup function.
|
||||
* @param {Element} trigger
|
||||
*/
|
||||
|
||||
}, {
|
||||
key: "defaultTarget",
|
||||
value: function defaultTarget(trigger) {
|
||||
var selector = getAttributeValue('target', trigger);
|
||||
|
||||
if (selector) {
|
||||
return document.querySelector(selector);
|
||||
}
|
||||
}
|
||||
/**
|
||||
* Allow fire programmatically a copy action
|
||||
* @param {String|HTMLElement} target
|
||||
* @param {Object} options
|
||||
* @returns Text copied.
|
||||
*/
|
||||
|
||||
}, {
|
||||
key: "defaultText",
|
||||
|
||||
/**
|
||||
* Default `text` lookup function.
|
||||
* @param {Element} trigger
|
||||
*/
|
||||
value: function defaultText(trigger) {
|
||||
return getAttributeValue('text', trigger);
|
||||
}
|
||||
/**
|
||||
* Destroy lifecycle.
|
||||
*/
|
||||
|
||||
}, {
|
||||
key: "destroy",
|
||||
value: function destroy() {
|
||||
this.listener.destroy();
|
||||
}
|
||||
}], [{
|
||||
key: "copy",
|
||||
value: function copy(target) {
|
||||
var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {
|
||||
container: document.body
|
||||
};
|
||||
return actions_copy(target, options);
|
||||
}
|
||||
/**
|
||||
* Allow fire programmatically a cut action
|
||||
* @param {String|HTMLElement} target
|
||||
* @returns Text cutted.
|
||||
*/
|
||||
|
||||
}, {
|
||||
key: "cut",
|
||||
value: function cut(target) {
|
||||
return actions_cut(target);
|
||||
}
|
||||
/**
|
||||
* Returns the support of the given action, or all actions if no action is
|
||||
* given.
|
||||
* @param {String} [action]
|
||||
*/
|
||||
|
||||
}, {
|
||||
key: "isSupported",
|
||||
value: function isSupported() {
|
||||
var action = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : ['copy', 'cut'];
|
||||
var actions = typeof action === 'string' ? [action] : action;
|
||||
var support = !!document.queryCommandSupported;
|
||||
actions.forEach(function (action) {
|
||||
support = support && !!document.queryCommandSupported(action);
|
||||
});
|
||||
return support;
|
||||
}
|
||||
}]);
|
||||
|
||||
return Clipboard;
|
||||
}((tiny_emitter_default()));
|
||||
|
||||
/* harmony default export */ var clipboard = (Clipboard);
|
||||
|
||||
/***/ }),
|
||||
|
||||
/***/ 828:
|
||||
/***/ (function(module) {
|
||||
|
||||
var DOCUMENT_NODE_TYPE = 9;
|
||||
|
||||
/**
|
||||
* A polyfill for Element.matches()
|
||||
*/
|
||||
if (typeof Element !== 'undefined' && !Element.prototype.matches) {
|
||||
var proto = Element.prototype;
|
||||
|
||||
proto.matches = proto.matchesSelector ||
|
||||
proto.mozMatchesSelector ||
|
||||
proto.msMatchesSelector ||
|
||||
proto.oMatchesSelector ||
|
||||
proto.webkitMatchesSelector;
|
||||
}
|
||||
|
||||
/**
|
||||
* Finds the closest parent that matches a selector.
|
||||
*
|
||||
* @param {Element} element
|
||||
* @param {String} selector
|
||||
* @return {Function}
|
||||
*/
|
||||
function closest (element, selector) {
|
||||
while (element && element.nodeType !== DOCUMENT_NODE_TYPE) {
|
||||
if (typeof element.matches === 'function' &&
|
||||
element.matches(selector)) {
|
||||
return element;
|
||||
}
|
||||
element = element.parentNode;
|
||||
}
|
||||
}
|
||||
|
||||
module.exports = closest;
|
||||
|
||||
|
||||
/***/ }),
|
||||
|
||||
/***/ 438:
|
||||
/***/ (function(module, __unused_webpack_exports, __webpack_require__) {
|
||||
|
||||
var closest = __webpack_require__(828);
|
||||
|
||||
/**
|
||||
* Delegates event to a selector.
|
||||
*
|
||||
* @param {Element} element
|
||||
* @param {String} selector
|
||||
* @param {String} type
|
||||
* @param {Function} callback
|
||||
* @param {Boolean} useCapture
|
||||
* @return {Object}
|
||||
*/
|
||||
function _delegate(element, selector, type, callback, useCapture) {
|
||||
var listenerFn = listener.apply(this, arguments);
|
||||
|
||||
element.addEventListener(type, listenerFn, useCapture);
|
||||
|
||||
return {
|
||||
destroy: function() {
|
||||
element.removeEventListener(type, listenerFn, useCapture);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Delegates event to a selector.
|
||||
*
|
||||
* @param {Element|String|Array} [elements]
|
||||
* @param {String} selector
|
||||
* @param {String} type
|
||||
* @param {Function} callback
|
||||
* @param {Boolean} useCapture
|
||||
* @return {Object}
|
||||
*/
|
||||
function delegate(elements, selector, type, callback, useCapture) {
|
||||
// Handle the regular Element usage
|
||||
if (typeof elements.addEventListener === 'function') {
|
||||
return _delegate.apply(null, arguments);
|
||||
}
|
||||
|
||||
// Handle Element-less usage, it defaults to global delegation
|
||||
if (typeof type === 'function') {
|
||||
// Use `document` as the first parameter, then apply arguments
|
||||
// This is a short way to .unshift `arguments` without running into deoptimizations
|
||||
return _delegate.bind(null, document).apply(null, arguments);
|
||||
}
|
||||
|
||||
// Handle Selector-based usage
|
||||
if (typeof elements === 'string') {
|
||||
elements = document.querySelectorAll(elements);
|
||||
}
|
||||
|
||||
// Handle Array-like based usage
|
||||
return Array.prototype.map.call(elements, function (element) {
|
||||
return _delegate(element, selector, type, callback, useCapture);
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* Finds closest match and invokes callback.
|
||||
*
|
||||
* @param {Element} element
|
||||
* @param {String} selector
|
||||
* @param {String} type
|
||||
* @param {Function} callback
|
||||
* @return {Function}
|
||||
*/
|
||||
function listener(element, selector, type, callback) {
|
||||
return function(e) {
|
||||
e.delegateTarget = closest(e.target, selector);
|
||||
|
||||
if (e.delegateTarget) {
|
||||
callback.call(element, e);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
module.exports = delegate;
|
||||
|
||||
|
||||
/***/ }),
|
||||
|
||||
/***/ 879:
|
||||
/***/ (function(__unused_webpack_module, exports) {
|
||||
|
||||
/**
|
||||
* Check if argument is a HTML element.
|
||||
*
|
||||
* @param {Object} value
|
||||
* @return {Boolean}
|
||||
*/
|
||||
exports.node = function(value) {
|
||||
return value !== undefined
|
||||
&& value instanceof HTMLElement
|
||||
&& value.nodeType === 1;
|
||||
};
|
||||
|
||||
/**
|
||||
* Check if argument is a list of HTML elements.
|
||||
*
|
||||
* @param {Object} value
|
||||
* @return {Boolean}
|
||||
*/
|
||||
exports.nodeList = function(value) {
|
||||
var type = Object.prototype.toString.call(value);
|
||||
|
||||
return value !== undefined
|
||||
&& (type === '[object NodeList]' || type === '[object HTMLCollection]')
|
||||
&& ('length' in value)
|
||||
&& (value.length === 0 || exports.node(value[0]));
|
||||
};
|
||||
|
||||
/**
|
||||
* Check if argument is a string.
|
||||
*
|
||||
* @param {Object} value
|
||||
* @return {Boolean}
|
||||
*/
|
||||
exports.string = function(value) {
|
||||
return typeof value === 'string'
|
||||
|| value instanceof String;
|
||||
};
|
||||
|
||||
/**
|
||||
* Check if argument is a function.
|
||||
*
|
||||
* @param {Object} value
|
||||
* @return {Boolean}
|
||||
*/
|
||||
exports.fn = function(value) {
|
||||
var type = Object.prototype.toString.call(value);
|
||||
|
||||
return type === '[object Function]';
|
||||
};
|
||||
|
||||
|
||||
/***/ }),
|
||||
|
||||
/***/ 370:
|
||||
/***/ (function(module, __unused_webpack_exports, __webpack_require__) {
|
||||
|
||||
var is = __webpack_require__(879);
|
||||
var delegate = __webpack_require__(438);
|
||||
|
||||
/**
|
||||
* Validates all params and calls the right
|
||||
* listener function based on its target type.
|
||||
*
|
||||
* @param {String|HTMLElement|HTMLCollection|NodeList} target
|
||||
* @param {String} type
|
||||
* @param {Function} callback
|
||||
* @return {Object}
|
||||
*/
|
||||
function listen(target, type, callback) {
|
||||
if (!target && !type && !callback) {
|
||||
throw new Error('Missing required arguments');
|
||||
}
|
||||
|
||||
if (!is.string(type)) {
|
||||
throw new TypeError('Second argument must be a String');
|
||||
}
|
||||
|
||||
if (!is.fn(callback)) {
|
||||
throw new TypeError('Third argument must be a Function');
|
||||
}
|
||||
|
||||
if (is.node(target)) {
|
||||
return listenNode(target, type, callback);
|
||||
}
|
||||
else if (is.nodeList(target)) {
|
||||
return listenNodeList(target, type, callback);
|
||||
}
|
||||
else if (is.string(target)) {
|
||||
return listenSelector(target, type, callback);
|
||||
}
|
||||
else {
|
||||
throw new TypeError('First argument must be a String, HTMLElement, HTMLCollection, or NodeList');
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Adds an event listener to a HTML element
|
||||
* and returns a remove listener function.
|
||||
*
|
||||
* @param {HTMLElement} node
|
||||
* @param {String} type
|
||||
* @param {Function} callback
|
||||
* @return {Object}
|
||||
*/
|
||||
function listenNode(node, type, callback) {
|
||||
node.addEventListener(type, callback);
|
||||
|
||||
return {
|
||||
destroy: function() {
|
||||
node.removeEventListener(type, callback);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Add an event listener to a list of HTML elements
|
||||
* and returns a remove listener function.
|
||||
*
|
||||
* @param {NodeList|HTMLCollection} nodeList
|
||||
* @param {String} type
|
||||
* @param {Function} callback
|
||||
* @return {Object}
|
||||
*/
|
||||
function listenNodeList(nodeList, type, callback) {
|
||||
Array.prototype.forEach.call(nodeList, function(node) {
|
||||
node.addEventListener(type, callback);
|
||||
});
|
||||
|
||||
return {
|
||||
destroy: function() {
|
||||
Array.prototype.forEach.call(nodeList, function(node) {
|
||||
node.removeEventListener(type, callback);
|
||||
});
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Add an event listener to a selector
|
||||
* and returns a remove listener function.
|
||||
*
|
||||
* @param {String} selector
|
||||
* @param {String} type
|
||||
* @param {Function} callback
|
||||
* @return {Object}
|
||||
*/
|
||||
function listenSelector(selector, type, callback) {
|
||||
return delegate(document.body, selector, type, callback);
|
||||
}
|
||||
|
||||
module.exports = listen;
|
||||
|
||||
|
||||
/***/ }),
|
||||
|
||||
/***/ 817:
|
||||
/***/ (function(module) {
|
||||
|
||||
function select(element) {
|
||||
var selectedText;
|
||||
|
||||
if (element.nodeName === 'SELECT') {
|
||||
element.focus();
|
||||
|
||||
selectedText = element.value;
|
||||
}
|
||||
else if (element.nodeName === 'INPUT' || element.nodeName === 'TEXTAREA') {
|
||||
var isReadOnly = element.hasAttribute('readonly');
|
||||
|
||||
if (!isReadOnly) {
|
||||
element.setAttribute('readonly', '');
|
||||
}
|
||||
|
||||
element.select();
|
||||
element.setSelectionRange(0, element.value.length);
|
||||
|
||||
if (!isReadOnly) {
|
||||
element.removeAttribute('readonly');
|
||||
}
|
||||
|
||||
selectedText = element.value;
|
||||
}
|
||||
else {
|
||||
if (element.hasAttribute('contenteditable')) {
|
||||
element.focus();
|
||||
}
|
||||
|
||||
var selection = window.getSelection();
|
||||
var range = document.createRange();
|
||||
|
||||
range.selectNodeContents(element);
|
||||
selection.removeAllRanges();
|
||||
selection.addRange(range);
|
||||
|
||||
selectedText = selection.toString();
|
||||
}
|
||||
|
||||
return selectedText;
|
||||
}
|
||||
|
||||
module.exports = select;
|
||||
|
||||
|
||||
/***/ }),
|
||||
|
||||
/***/ 279:
|
||||
/***/ (function(module) {
|
||||
|
||||
function E () {
|
||||
// Keep this empty so it's easier to inherit from
|
||||
// (via https://github.com/lipsmack from https://github.com/scottcorgan/tiny-emitter/issues/3)
|
||||
}
|
||||
|
||||
E.prototype = {
|
||||
on: function (name, callback, ctx) {
|
||||
var e = this.e || (this.e = {});
|
||||
|
||||
(e[name] || (e[name] = [])).push({
|
||||
fn: callback,
|
||||
ctx: ctx
|
||||
});
|
||||
|
||||
return this;
|
||||
},
|
||||
|
||||
once: function (name, callback, ctx) {
|
||||
var self = this;
|
||||
function listener () {
|
||||
self.off(name, listener);
|
||||
callback.apply(ctx, arguments);
|
||||
};
|
||||
|
||||
listener._ = callback
|
||||
return this.on(name, listener, ctx);
|
||||
},
|
||||
|
||||
emit: function (name) {
|
||||
var data = [].slice.call(arguments, 1);
|
||||
var evtArr = ((this.e || (this.e = {}))[name] || []).slice();
|
||||
var i = 0;
|
||||
var len = evtArr.length;
|
||||
|
||||
for (i; i < len; i++) {
|
||||
evtArr[i].fn.apply(evtArr[i].ctx, data);
|
||||
}
|
||||
|
||||
return this;
|
||||
},
|
||||
|
||||
off: function (name, callback) {
|
||||
var e = this.e || (this.e = {});
|
||||
var evts = e[name];
|
||||
var liveEvents = [];
|
||||
|
||||
if (evts && callback) {
|
||||
for (var i = 0, len = evts.length; i < len; i++) {
|
||||
if (evts[i].fn !== callback && evts[i].fn._ !== callback)
|
||||
liveEvents.push(evts[i]);
|
||||
}
|
||||
}
|
||||
|
||||
// Remove event from queue to prevent memory leak
|
||||
// Suggested by https://github.com/lazd
|
||||
// Ref: https://github.com/scottcorgan/tiny-emitter/commit/c6ebfaa9bc973b33d110a84a307742b7cf94c953#commitcomment-5024910
|
||||
|
||||
(liveEvents.length)
|
||||
? e[name] = liveEvents
|
||||
: delete e[name];
|
||||
|
||||
return this;
|
||||
}
|
||||
};
|
||||
|
||||
module.exports = E;
|
||||
module.exports.TinyEmitter = E;
|
||||
|
||||
|
||||
/***/ })
|
||||
|
||||
/******/ });
|
||||
/************************************************************************/
|
||||
/******/ // The module cache
|
||||
/******/ var __webpack_module_cache__ = {};
|
||||
/******/
|
||||
/******/ // The require function
|
||||
/******/ function __webpack_require__(moduleId) {
|
||||
/******/ // Check if module is in cache
|
||||
/******/ if(__webpack_module_cache__[moduleId]) {
|
||||
/******/ return __webpack_module_cache__[moduleId].exports;
|
||||
/******/ }
|
||||
/******/ // Create a new module (and put it into the cache)
|
||||
/******/ var module = __webpack_module_cache__[moduleId] = {
|
||||
/******/ // no module.id needed
|
||||
/******/ // no module.loaded needed
|
||||
/******/ exports: {}
|
||||
/******/ };
|
||||
/******/
|
||||
/******/ // Execute the module function
|
||||
/******/ __webpack_modules__[moduleId](module, module.exports, __webpack_require__);
|
||||
/******/
|
||||
/******/ // Return the exports of the module
|
||||
/******/ return module.exports;
|
||||
/******/ }
|
||||
/******/
|
||||
/************************************************************************/
|
||||
/******/ /* webpack/runtime/compat get default export */
|
||||
/******/ !function() {
|
||||
/******/ // getDefaultExport function for compatibility with non-harmony modules
|
||||
/******/ __webpack_require__.n = function(module) {
|
||||
/******/ var getter = module && module.__esModule ?
|
||||
/******/ function() { return module['default']; } :
|
||||
/******/ function() { return module; };
|
||||
/******/ __webpack_require__.d(getter, { a: getter });
|
||||
/******/ return getter;
|
||||
/******/ };
|
||||
/******/ }();
|
||||
/******/
|
||||
/******/ /* webpack/runtime/define property getters */
|
||||
/******/ !function() {
|
||||
/******/ // define getter functions for harmony exports
|
||||
/******/ __webpack_require__.d = function(exports, definition) {
|
||||
/******/ for(var key in definition) {
|
||||
/******/ if(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {
|
||||
/******/ Object.defineProperty(exports, key, { enumerable: true, get: definition[key] });
|
||||
/******/ }
|
||||
/******/ }
|
||||
/******/ };
|
||||
/******/ }();
|
||||
/******/
|
||||
/******/ /* webpack/runtime/hasOwnProperty shorthand */
|
||||
/******/ !function() {
|
||||
/******/ __webpack_require__.o = function(obj, prop) { return Object.prototype.hasOwnProperty.call(obj, prop); }
|
||||
/******/ }();
|
||||
/******/
|
||||
/************************************************************************/
|
||||
/******/ // module exports must be returned from runtime so entry inlining is disabled
|
||||
/******/ // startup
|
||||
/******/ // Load entry module and return exports
|
||||
/******/ return __webpack_require__(686);
|
||||
/******/ })()
|
||||
.default;
|
||||
});
|
File diff suppressed because one or more lines are too long
|
@ -0,0 +1,36 @@
|
|||
var webpackConfig = require('./webpack.config.js');
|
||||
|
||||
module.exports = function (karma) {
|
||||
karma.set({
|
||||
plugins: [
|
||||
'karma-webpack',
|
||||
'karma-chai',
|
||||
'karma-sinon',
|
||||
'karma-mocha',
|
||||
'karma-chrome-launcher',
|
||||
],
|
||||
|
||||
frameworks: ['chai', 'sinon', 'mocha', 'webpack'],
|
||||
|
||||
files: [
|
||||
{ pattern: 'src/**/*.js', watched: false },
|
||||
{ pattern: 'test/**/*.js', watched: false },
|
||||
],
|
||||
|
||||
preprocessors: {
|
||||
'src/**/*.js': ['webpack'],
|
||||
'test/**/*.js': ['webpack'],
|
||||
},
|
||||
|
||||
webpack: {
|
||||
module: webpackConfig.module,
|
||||
plugins: webpackConfig.plugins,
|
||||
},
|
||||
|
||||
webpackMiddleware: {
|
||||
stats: 'errors-only',
|
||||
},
|
||||
|
||||
browsers: ['ChromeHeadless'],
|
||||
});
|
||||
};
|
|
@ -0,0 +1,12 @@
|
|||
// Package metadata for Meteor.js.
|
||||
|
||||
Package.describe({
|
||||
name: 'zenorocha:clipboard',
|
||||
summary: 'Modern copy to clipboard. No Flash. Just 3kb.',
|
||||
version: '2.0.11',
|
||||
git: 'https://github.com/zenorocha/clipboard.js',
|
||||
});
|
||||
|
||||
Package.onUse(function (api) {
|
||||
api.addFiles('dist/clipboard.js', 'client');
|
||||
});
|
|
@ -0,0 +1,63 @@
|
|||
{
|
||||
"name": "clipboard",
|
||||
"version": "2.0.11",
|
||||
"description": "Modern copy to clipboard. No Flash. Just 2kb",
|
||||
"homepage": "https://clipboardjs.com",
|
||||
"repository": "zenorocha/clipboard.js",
|
||||
"license": "MIT",
|
||||
"main": "dist/clipboard.js",
|
||||
"types": "src/clipboard.d.ts",
|
||||
"keywords": [
|
||||
"clipboard",
|
||||
"copy",
|
||||
"cut"
|
||||
],
|
||||
"dependencies": {
|
||||
"good-listener": "^1.2.2",
|
||||
"select": "^1.1.2",
|
||||
"tiny-emitter": "^2.0.0"
|
||||
},
|
||||
"devDependencies": {
|
||||
"@babel/core": "^7.12.10",
|
||||
"@babel/preset-env": "^7.12.11",
|
||||
"babel-loader": "^8.2.2",
|
||||
"chai": "^4.2.0",
|
||||
"cross-env": "^7.0.3",
|
||||
"eslint": "^7.20.0",
|
||||
"eslint-config-airbnb-base": "^14.2.1",
|
||||
"eslint-config-prettier": "^7.2.0",
|
||||
"eslint-plugin-import": "^2.22.1",
|
||||
"eslint-plugin-prettier": "^3.3.1",
|
||||
"husky": "^5.0.9",
|
||||
"karma": "^6.0.0",
|
||||
"karma-chai": "^0.1.0",
|
||||
"karma-chrome-launcher": "^3.1.0",
|
||||
"karma-mocha": "^2.0.1",
|
||||
"karma-sinon": "^1.0.4",
|
||||
"karma-webpack": "^5.0.0-alpha.5",
|
||||
"lint-staged": "^10.5.3",
|
||||
"mocha": "^8.2.1",
|
||||
"prettier": "2.2.1",
|
||||
"sinon": "^9.2.3",
|
||||
"tsd": "^0.7.2",
|
||||
"uglifyjs-webpack-plugin": "^2.2.0",
|
||||
"webpack": "^5.15.0",
|
||||
"webpack-cli": "^4.4.0"
|
||||
},
|
||||
"scripts": {
|
||||
"test:types": "tsd",
|
||||
"build": "npm run build-debug && npm run build-min",
|
||||
"build-debug": "webpack",
|
||||
"build-min": "cross-env NODE_ENV=production webpack",
|
||||
"build-watch": "webpack --watch",
|
||||
"test": "karma start --single-run",
|
||||
"prepublish": "npm run build",
|
||||
"lint": "eslint --ext .js src/"
|
||||
},
|
||||
"lint-staged": {
|
||||
"*.{js,css,md}": [
|
||||
"prettier --write",
|
||||
"eslint --fix"
|
||||
]
|
||||
}
|
||||
}
|
|
@ -0,0 +1,192 @@
|
|||
# clipboard.js
|
||||
|
||||
![Build Status](https://github.com/zenorocha/clipboard.js/workflows/build/badge.svg)
|
||||
![Killing Flash](https://img.shields.io/badge/killing-flash-brightgreen.svg?style=flat)
|
||||
|
||||
> Modern copy to clipboard. No Flash. Just 3kb gzipped.
|
||||
|
||||
<a href="https://clipboardjs.com/"><img width="728" src="https://cloud.githubusercontent.com/assets/398893/16165747/a0f6fc46-349a-11e6-8c9b-c5fd58d9099c.png" alt="Demo"></a>
|
||||
|
||||
## Why
|
||||
|
||||
Copying text to the clipboard shouldn't be hard. It shouldn't require dozens of steps to configure or hundreds of KBs to load. But most of all, it shouldn't depend on Flash or any bloated framework.
|
||||
|
||||
That's why clipboard.js exists.
|
||||
|
||||
## Install
|
||||
|
||||
You can get it on npm.
|
||||
|
||||
```
|
||||
npm install clipboard --save
|
||||
```
|
||||
|
||||
Or if you're not into package management, just [download a ZIP](https://github.com/zenorocha/clipboard.js/archive/master.zip) file.
|
||||
|
||||
## Setup
|
||||
|
||||
First, include the script located on the `dist` folder or load it from [a third-party CDN provider](https://github.com/zenorocha/clipboard.js/wiki/CDN-Providers).
|
||||
|
||||
```html
|
||||
<script src="dist/clipboard.min.js"></script>
|
||||
```
|
||||
|
||||
Now, you need to instantiate it by [passing a DOM selector](https://github.com/zenorocha/clipboard.js/blob/master/demo/constructor-selector.html#L18), [HTML element](https://github.com/zenorocha/clipboard.js/blob/master/demo/constructor-node.html#L16-L17), or [list of HTML elements](https://github.com/zenorocha/clipboard.js/blob/master/demo/constructor-nodelist.html#L18-L19).
|
||||
|
||||
```js
|
||||
new ClipboardJS('.btn');
|
||||
```
|
||||
|
||||
Internally, we need to fetch all elements that matches with your selector and attach event listeners for each one. But guess what? If you have hundreds of matches, this operation can consume a lot of memory.
|
||||
|
||||
For this reason we use [event delegation](https://stackoverflow.com/questions/1687296/what-is-dom-event-delegation) which replaces multiple event listeners with just a single listener. After all, [#perfmatters](https://twitter.com/hashtag/perfmatters).
|
||||
|
||||
# Usage
|
||||
|
||||
We're living a _declarative renaissance_, that's why we decided to take advantage of [HTML5 data attributes](https://developer.mozilla.org/en-US/docs/Web/Guide/HTML/Using_data_attributes) for better usability.
|
||||
|
||||
### Copy text from another element
|
||||
|
||||
A pretty common use case is to copy content from another element. You can do that by adding a `data-clipboard-target` attribute in your trigger element.
|
||||
|
||||
The value you include on this attribute needs to match another's element selector.
|
||||
|
||||
<a href="https://clipboardjs.com/#example-target"><img width="473" alt="example-2" src="https://cloud.githubusercontent.com/assets/398893/9983467/a4946aaa-5fb1-11e5-9780-f09fcd7ca6c8.png"></a>
|
||||
|
||||
```html
|
||||
<!-- Target -->
|
||||
<input id="foo" value="https://github.com/zenorocha/clipboard.js.git" />
|
||||
|
||||
<!-- Trigger -->
|
||||
<button class="btn" data-clipboard-target="#foo">
|
||||
<img src="assets/clippy.svg" alt="Copy to clipboard" />
|
||||
</button>
|
||||
```
|
||||
|
||||
### Cut text from another element
|
||||
|
||||
Additionally, you can define a `data-clipboard-action` attribute to specify if you want to either `copy` or `cut` content.
|
||||
|
||||
If you omit this attribute, `copy` will be used by default.
|
||||
|
||||
<a href="https://clipboardjs.com/#example-action"><img width="473" alt="example-3" src="https://cloud.githubusercontent.com/assets/398893/10000358/7df57b9c-6050-11e5-9cd1-fbc51d2fd0a7.png"></a>
|
||||
|
||||
```html
|
||||
<!-- Target -->
|
||||
<textarea id="bar">Mussum ipsum cacilds...</textarea>
|
||||
|
||||
<!-- Trigger -->
|
||||
<button class="btn" data-clipboard-action="cut" data-clipboard-target="#bar">
|
||||
Cut to clipboard
|
||||
</button>
|
||||
```
|
||||
|
||||
As you may expect, the `cut` action only works on `<input>` or `<textarea>` elements.
|
||||
|
||||
### Copy text from attribute
|
||||
|
||||
Truth is, you don't even need another element to copy its content from. You can just include a `data-clipboard-text` attribute in your trigger element.
|
||||
|
||||
<a href="https://clipboardjs.com/#example-text"><img width="147" alt="example-1" src="https://cloud.githubusercontent.com/assets/398893/10000347/6e16cf8c-6050-11e5-9883-1c5681f9ec45.png"></a>
|
||||
|
||||
```html
|
||||
<!-- Trigger -->
|
||||
<button
|
||||
class="btn"
|
||||
data-clipboard-text="Just because you can doesn't mean you should — clipboard.js"
|
||||
>
|
||||
Copy to clipboard
|
||||
</button>
|
||||
```
|
||||
|
||||
## Events
|
||||
|
||||
There are cases where you'd like to show some user feedback or capture what has been selected after a copy/cut operation.
|
||||
|
||||
That's why we fire custom events such as `success` and `error` for you to listen and implement your custom logic.
|
||||
|
||||
```js
|
||||
var clipboard = new ClipboardJS('.btn');
|
||||
|
||||
clipboard.on('success', function (e) {
|
||||
console.info('Action:', e.action);
|
||||
console.info('Text:', e.text);
|
||||
console.info('Trigger:', e.trigger);
|
||||
|
||||
e.clearSelection();
|
||||
});
|
||||
|
||||
clipboard.on('error', function (e) {
|
||||
console.error('Action:', e.action);
|
||||
console.error('Trigger:', e.trigger);
|
||||
});
|
||||
```
|
||||
|
||||
For a live demonstration, go to this [site](https://clipboardjs.com/) and open your console.
|
||||
|
||||
## Tooltips
|
||||
|
||||
Each application has different design needs, that's why clipboard.js does not include any CSS or built-in tooltip solution.
|
||||
|
||||
The tooltips you see on the [demo site](https://clipboardjs.com/) were built using [GitHub's Primer](https://primer.style/css/components/tooltips). You may want to check that out if you're looking for a similar look and feel.
|
||||
|
||||
## Advanced Options
|
||||
|
||||
If you don't want to modify your HTML, there's a pretty handy imperative API for you to use. All you need to do is declare a function, do your thing, and return a value.
|
||||
|
||||
For instance, if you want to dynamically set a `target`, you'll need to return a Node.
|
||||
|
||||
```js
|
||||
new ClipboardJS('.btn', {
|
||||
target: function (trigger) {
|
||||
return trigger.nextElementSibling;
|
||||
},
|
||||
});
|
||||
```
|
||||
|
||||
If you want to dynamically set a `text`, you'll return a String.
|
||||
|
||||
```js
|
||||
new ClipboardJS('.btn', {
|
||||
text: function (trigger) {
|
||||
return trigger.getAttribute('aria-label');
|
||||
},
|
||||
});
|
||||
```
|
||||
|
||||
For use in Bootstrap Modals or with any other library that changes the focus you'll want to set the focused element as the `container` value.
|
||||
|
||||
```js
|
||||
new ClipboardJS('.btn', {
|
||||
container: document.getElementById('modal'),
|
||||
});
|
||||
```
|
||||
|
||||
Also, if you are working with single page apps, you may want to manage the lifecycle of the DOM more precisely. Here's how you clean up the events and objects that we create.
|
||||
|
||||
```js
|
||||
var clipboard = new ClipboardJS('.btn');
|
||||
clipboard.destroy();
|
||||
```
|
||||
|
||||
## Browser Support
|
||||
|
||||
This library relies on both [Selection](https://developer.mozilla.org/en-US/docs/Web/API/Selection) and [execCommand](https://developer.mozilla.org/en-US/docs/Web/API/Document/execCommand) APIs. The first one is [supported by all browsers](https://caniuse.com/#search=selection) while the second one is supported in the following browsers.
|
||||
|
||||
| <img src="https://clipboardjs.com/assets/images/chrome.png" width="48px" height="48px" alt="Chrome logo"> | <img src="https://clipboardjs.com/assets/images/edge.png" width="48px" height="48px" alt="Edge logo"> | <img src="https://clipboardjs.com/assets/images/firefox.png" width="48px" height="48px" alt="Firefox logo"> | <img src="https://clipboardjs.com/assets/images/ie.png" width="48px" height="48px" alt="Internet Explorer logo"> | <img src="https://clipboardjs.com/assets/images/opera.png" width="48px" height="48px" alt="Opera logo"> | <img src="https://clipboardjs.com/assets/images/safari.png" width="48px" height="48px" alt="Safari logo"> |
|
||||
| :-------------------------------------------------------------------------------------------------------: | :---------------------------------------------------------------------------------------------------: | :---------------------------------------------------------------------------------------------------------: | :--------------------------------------------------------------------------------------------------------------: | :-----------------------------------------------------------------------------------------------------: | :-------------------------------------------------------------------------------------------------------: |
|
||||
| 42+ ✔ | 12+ ✔ | 41+ ✔ | 9+ ✔ | 29+ ✔ | 10+ ✔ |
|
||||
|
||||
The good news is that clipboard.js gracefully degrades if you need to support older browsers. All you have to do is show a tooltip saying `Copied!` when `success` event is called and `Press Ctrl+C to copy` when `error` event is called because the text is already selected.
|
||||
|
||||
You can also check if clipboard.js is supported or not by running `ClipboardJS.isSupported()`, that way you can hide copy/cut buttons from the UI.
|
||||
|
||||
## Bonus
|
||||
|
||||
A browser extension that adds a "copy to clipboard" button to every code block on _GitHub, MDN, Gist, StackOverflow, StackExchange, npm, and even Medium._
|
||||
|
||||
Install for [Chrome](https://chrome.google.com/webstore/detail/codecopy/fkbfebkcoelajmhanocgppanfoojcdmg) and [Firefox](https://addons.mozilla.org/en-US/firefox/addon/codecopy/).
|
||||
|
||||
## License
|
||||
|
||||
[MIT License](https://zenorocha.mit-license.org/) © Zeno Rocha
|
|
@ -0,0 +1,47 @@
|
|||
import select from 'select';
|
||||
import command from '../common/command';
|
||||
import createFakeElement from '../common/create-fake-element';
|
||||
|
||||
/**
|
||||
* Create fake copy action wrapper using a fake element.
|
||||
* @param {String} target
|
||||
* @param {Object} options
|
||||
* @return {String}
|
||||
*/
|
||||
const fakeCopyAction = (value, options) => {
|
||||
const fakeElement = createFakeElement(value);
|
||||
options.container.appendChild(fakeElement);
|
||||
const selectedText = select(fakeElement);
|
||||
command('copy');
|
||||
fakeElement.remove();
|
||||
|
||||
return selectedText;
|
||||
};
|
||||
|
||||
/**
|
||||
* Copy action wrapper.
|
||||
* @param {String|HTMLElement} target
|
||||
* @param {Object} options
|
||||
* @return {String}
|
||||
*/
|
||||
const ClipboardActionCopy = (
|
||||
target,
|
||||
options = { container: document.body }
|
||||
) => {
|
||||
let selectedText = '';
|
||||
if (typeof target === 'string') {
|
||||
selectedText = fakeCopyAction(target, options);
|
||||
} else if (
|
||||
target instanceof HTMLInputElement &&
|
||||
!['text', 'search', 'url', 'tel', 'password'].includes(target?.type)
|
||||
) {
|
||||
// If input type doesn't support `setSelectionRange`. Simulate it. https://developer.mozilla.org/en-US/docs/Web/API/HTMLInputElement/setSelectionRange
|
||||
selectedText = fakeCopyAction(target.value, options);
|
||||
} else {
|
||||
selectedText = select(target);
|
||||
command('copy');
|
||||
}
|
||||
return selectedText;
|
||||
};
|
||||
|
||||
export default ClipboardActionCopy;
|
|
@ -0,0 +1,15 @@
|
|||
import select from 'select';
|
||||
import command from '../common/command';
|
||||
|
||||
/**
|
||||
* Cut action wrapper.
|
||||
* @param {String|HTMLElement} target
|
||||
* @return {String}
|
||||
*/
|
||||
const ClipboardActionCut = (target) => {
|
||||
const selectedText = select(target);
|
||||
command('cut');
|
||||
return selectedText;
|
||||
};
|
||||
|
||||
export default ClipboardActionCut;
|
|
@ -0,0 +1,53 @@
|
|||
import ClipboardActionCut from './cut';
|
||||
import ClipboardActionCopy from './copy';
|
||||
|
||||
/**
|
||||
* Inner function which performs selection from either `text` or `target`
|
||||
* properties and then executes copy or cut operations.
|
||||
* @param {Object} options
|
||||
*/
|
||||
const ClipboardActionDefault = (options = {}) => {
|
||||
// Defines base properties passed from constructor.
|
||||
const { action = 'copy', container, target, text } = options;
|
||||
|
||||
// Sets the `action` to be performed which can be either 'copy' or 'cut'.
|
||||
if (action !== 'copy' && action !== 'cut') {
|
||||
throw new Error('Invalid "action" value, use either "copy" or "cut"');
|
||||
}
|
||||
|
||||
// Sets the `target` property using an element that will be have its content copied.
|
||||
if (target !== undefined) {
|
||||
if (target && typeof target === 'object' && target.nodeType === 1) {
|
||||
if (action === 'copy' && target.hasAttribute('disabled')) {
|
||||
throw new Error(
|
||||
'Invalid "target" attribute. Please use "readonly" instead of "disabled" attribute'
|
||||
);
|
||||
}
|
||||
|
||||
if (
|
||||
action === 'cut' &&
|
||||
(target.hasAttribute('readonly') || target.hasAttribute('disabled'))
|
||||
) {
|
||||
throw new Error(
|
||||
'Invalid "target" attribute. You can\'t cut text from elements with "readonly" or "disabled" attributes'
|
||||
);
|
||||
}
|
||||
} else {
|
||||
throw new Error('Invalid "target" value, use a valid Element');
|
||||
}
|
||||
}
|
||||
|
||||
// Define selection strategy based on `text` property.
|
||||
if (text) {
|
||||
return ClipboardActionCopy(text, { container });
|
||||
}
|
||||
|
||||
// Defines which selection strategy based on `target` property.
|
||||
if (target) {
|
||||
return action === 'cut'
|
||||
? ClipboardActionCut(target)
|
||||
: ClipboardActionCopy(target, { container });
|
||||
}
|
||||
};
|
||||
|
||||
export default ClipboardActionDefault;
|
|
@ -0,0 +1,91 @@
|
|||
/// <reference lib="dom"/>
|
||||
|
||||
type Action = 'cut' | 'copy';
|
||||
type Response = 'success' | 'error';
|
||||
type CopyActionOptions = {
|
||||
container?: Element;
|
||||
};
|
||||
|
||||
/**
|
||||
* Base class which takes one or more elements, adds event listeners to them,
|
||||
* and instantiates a new `ClipboardAction` on each click.
|
||||
*/
|
||||
declare class ClipboardJS {
|
||||
constructor(
|
||||
selector: string | Element | NodeListOf<Element>,
|
||||
options?: ClipboardJS.Options
|
||||
);
|
||||
|
||||
/**
|
||||
* Subscribes to events that indicate the result of a copy/cut operation.
|
||||
* @param type Event type ('success' or 'error').
|
||||
* @param handler Callback function.
|
||||
*/
|
||||
on(type: Response, handler: (e: ClipboardJS.Event) => void): this;
|
||||
|
||||
on(type: string, handler: (...args: any[]) => void): this;
|
||||
|
||||
/**
|
||||
* Clears all event bindings.
|
||||
*/
|
||||
destroy(): void;
|
||||
|
||||
/**
|
||||
* Checks if clipboard.js is supported
|
||||
*/
|
||||
static isSupported(): boolean;
|
||||
|
||||
|
||||
/**
|
||||
* Fires a copy action
|
||||
*/
|
||||
static copy(target: string | Element, options?: CopyActionOptions): string;
|
||||
|
||||
/**
|
||||
* Fires a cut action
|
||||
*/
|
||||
static cut(target: string | Element): string;
|
||||
}
|
||||
|
||||
declare namespace ClipboardJS {
|
||||
interface Options {
|
||||
/**
|
||||
* Overwrites default command ('cut' or 'copy').
|
||||
* @param elem Current element
|
||||
*/
|
||||
action?(elem: Element): Action;
|
||||
|
||||
/**
|
||||
* Overwrites default target input element.
|
||||
* @param elem Current element
|
||||
* @returns <input> element to use.
|
||||
*/
|
||||
target?(elem: Element): Element;
|
||||
|
||||
/**
|
||||
* Returns the explicit text to copy.
|
||||
* @param elem Current element
|
||||
* @returns Text to be copied.
|
||||
*/
|
||||
text?(elem: Element): string;
|
||||
|
||||
/**
|
||||
* For use in Bootstrap Modals or with any
|
||||
* other library that changes the focus
|
||||
* you'll want to set the focused element
|
||||
* as the container value.
|
||||
*/
|
||||
container?: Element;
|
||||
}
|
||||
|
||||
interface Event {
|
||||
action: string;
|
||||
text: string;
|
||||
trigger: Element;
|
||||
clearSelection(): void;
|
||||
}
|
||||
}
|
||||
|
||||
export = ClipboardJS;
|
||||
|
||||
export as namespace ClipboardJS;
|
|
@ -0,0 +1,165 @@
|
|||
import Emitter from 'tiny-emitter';
|
||||
import listen from 'good-listener';
|
||||
import ClipboardActionDefault from './actions/default';
|
||||
import ClipboardActionCut from './actions/cut';
|
||||
import ClipboardActionCopy from './actions/copy';
|
||||
|
||||
/**
|
||||
* Helper function to retrieve attribute value.
|
||||
* @param {String} suffix
|
||||
* @param {Element} element
|
||||
*/
|
||||
function getAttributeValue(suffix, element) {
|
||||
const attribute = `data-clipboard-${suffix}`;
|
||||
|
||||
if (!element.hasAttribute(attribute)) {
|
||||
return;
|
||||
}
|
||||
|
||||
return element.getAttribute(attribute);
|
||||
}
|
||||
|
||||
/**
|
||||
* Base class which takes one or more elements, adds event listeners to them,
|
||||
* and instantiates a new `ClipboardAction` on each click.
|
||||
*/
|
||||
class Clipboard extends Emitter {
|
||||
/**
|
||||
* @param {String|HTMLElement|HTMLCollection|NodeList} trigger
|
||||
* @param {Object} options
|
||||
*/
|
||||
constructor(trigger, options) {
|
||||
super();
|
||||
|
||||
this.resolveOptions(options);
|
||||
this.listenClick(trigger);
|
||||
}
|
||||
|
||||
/**
|
||||
* Defines if attributes would be resolved using internal setter functions
|
||||
* or custom functions that were passed in the constructor.
|
||||
* @param {Object} options
|
||||
*/
|
||||
resolveOptions(options = {}) {
|
||||
this.action =
|
||||
typeof options.action === 'function'
|
||||
? options.action
|
||||
: this.defaultAction;
|
||||
this.target =
|
||||
typeof options.target === 'function'
|
||||
? options.target
|
||||
: this.defaultTarget;
|
||||
this.text =
|
||||
typeof options.text === 'function' ? options.text : this.defaultText;
|
||||
this.container =
|
||||
typeof options.container === 'object' ? options.container : document.body;
|
||||
}
|
||||
|
||||
/**
|
||||
* Adds a click event listener to the passed trigger.
|
||||
* @param {String|HTMLElement|HTMLCollection|NodeList} trigger
|
||||
*/
|
||||
listenClick(trigger) {
|
||||
this.listener = listen(trigger, 'click', (e) => this.onClick(e));
|
||||
}
|
||||
|
||||
/**
|
||||
* Defines a new `ClipboardAction` on each click event.
|
||||
* @param {Event} e
|
||||
*/
|
||||
onClick(e) {
|
||||
const trigger = e.delegateTarget || e.currentTarget;
|
||||
const action = this.action(trigger) || 'copy';
|
||||
const text = ClipboardActionDefault({
|
||||
action,
|
||||
container: this.container,
|
||||
target: this.target(trigger),
|
||||
text: this.text(trigger),
|
||||
});
|
||||
|
||||
// Fires an event based on the copy operation result.
|
||||
this.emit(text ? 'success' : 'error', {
|
||||
action,
|
||||
text,
|
||||
trigger,
|
||||
clearSelection() {
|
||||
if (trigger) {
|
||||
trigger.focus();
|
||||
}
|
||||
window.getSelection().removeAllRanges();
|
||||
},
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* Default `action` lookup function.
|
||||
* @param {Element} trigger
|
||||
*/
|
||||
defaultAction(trigger) {
|
||||
return getAttributeValue('action', trigger);
|
||||
}
|
||||
|
||||
/**
|
||||
* Default `target` lookup function.
|
||||
* @param {Element} trigger
|
||||
*/
|
||||
defaultTarget(trigger) {
|
||||
const selector = getAttributeValue('target', trigger);
|
||||
|
||||
if (selector) {
|
||||
return document.querySelector(selector);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Allow fire programmatically a copy action
|
||||
* @param {String|HTMLElement} target
|
||||
* @param {Object} options
|
||||
* @returns Text copied.
|
||||
*/
|
||||
static copy(target, options = { container: document.body }) {
|
||||
return ClipboardActionCopy(target, options);
|
||||
}
|
||||
|
||||
/**
|
||||
* Allow fire programmatically a cut action
|
||||
* @param {String|HTMLElement} target
|
||||
* @returns Text cutted.
|
||||
*/
|
||||
static cut(target) {
|
||||
return ClipboardActionCut(target);
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the support of the given action, or all actions if no action is
|
||||
* given.
|
||||
* @param {String} [action]
|
||||
*/
|
||||
static isSupported(action = ['copy', 'cut']) {
|
||||
const actions = typeof action === 'string' ? [action] : action;
|
||||
let support = !!document.queryCommandSupported;
|
||||
|
||||
actions.forEach((action) => {
|
||||
support = support && !!document.queryCommandSupported(action);
|
||||
});
|
||||
|
||||
return support;
|
||||
}
|
||||
|
||||
/**
|
||||
* Default `text` lookup function.
|
||||
* @param {Element} trigger
|
||||
*/
|
||||
defaultText(trigger) {
|
||||
return getAttributeValue('text', trigger);
|
||||
}
|
||||
|
||||
/**
|
||||
* Destroy lifecycle.
|
||||
*/
|
||||
destroy() {
|
||||
this.listener.destroy();
|
||||
}
|
||||
}
|
||||
|
||||
export default Clipboard;
|
|
@ -0,0 +1,4 @@
|
|||
import { expectType } from 'tsd';
|
||||
import * as Clipboard from './clipboard';
|
||||
|
||||
expectType<Clipboard>(new Clipboard('.btn'));
|
|
@ -0,0 +1,12 @@
|
|||
/**
|
||||
* Executes a given operation type.
|
||||
* @param {String} type
|
||||
* @return {Boolean}
|
||||
*/
|
||||
export default function command(type) {
|
||||
try {
|
||||
return document.execCommand(type);
|
||||
} catch (err) {
|
||||
return false;
|
||||
}
|
||||
}
|
|
@ -0,0 +1,26 @@
|
|||
/**
|
||||
* Creates a fake textarea element with a value.
|
||||
* @param {String} value
|
||||
* @return {HTMLElement}
|
||||
*/
|
||||
export default function createFakeElement(value) {
|
||||
const isRTL = document.documentElement.getAttribute('dir') === 'rtl';
|
||||
const fakeElement = document.createElement('textarea');
|
||||
// Prevent zooming on iOS
|
||||
fakeElement.style.fontSize = '12pt';
|
||||
// Reset box model
|
||||
fakeElement.style.border = '0';
|
||||
fakeElement.style.padding = '0';
|
||||
fakeElement.style.margin = '0';
|
||||
// Move element out of screen horizontally
|
||||
fakeElement.style.position = 'absolute';
|
||||
fakeElement.style[isRTL ? 'right' : 'left'] = '-9999px';
|
||||
// Move element to the same position vertically
|
||||
let yPosition = window.pageYOffset || document.documentElement.scrollTop;
|
||||
fakeElement.style.top = `${yPosition}px`;
|
||||
|
||||
fakeElement.setAttribute('readonly', '');
|
||||
fakeElement.value = value;
|
||||
|
||||
return fakeElement;
|
||||
}
|
|
@ -0,0 +1,69 @@
|
|||
import ClipboardActionCopy from '../../src/actions/copy';
|
||||
|
||||
describe('ClipboardActionCopy', () => {
|
||||
before(() => {
|
||||
global.input = document.createElement('input');
|
||||
global.input.setAttribute('id', 'input');
|
||||
global.input.setAttribute('value', 'abc');
|
||||
document.body.appendChild(global.input);
|
||||
|
||||
global.paragraph = document.createElement('p');
|
||||
global.paragraph.setAttribute('id', 'paragraph');
|
||||
global.paragraph.textContent = 'abc';
|
||||
document.body.appendChild(global.paragraph);
|
||||
});
|
||||
|
||||
after(() => {
|
||||
document.body.innerHTML = '';
|
||||
});
|
||||
|
||||
describe('#selectText', () => {
|
||||
it('should select its value based on input target', () => {
|
||||
const selectedText = ClipboardActionCopy(
|
||||
document.querySelector('#input'),
|
||||
{
|
||||
container: document.body,
|
||||
}
|
||||
);
|
||||
|
||||
assert.equal(selectedText, document.querySelector('#input').value);
|
||||
});
|
||||
|
||||
it('should select its value based on element target', () => {
|
||||
const selectedText = ClipboardActionCopy(
|
||||
document.querySelector('#paragraph'),
|
||||
{
|
||||
container: document.body,
|
||||
}
|
||||
);
|
||||
|
||||
assert.equal(
|
||||
selectedText,
|
||||
document.querySelector('#paragraph').textContent
|
||||
);
|
||||
});
|
||||
|
||||
it('should select its value based on text', () => {
|
||||
const text = 'abc';
|
||||
const selectedText = ClipboardActionCopy(text, {
|
||||
container: document.body,
|
||||
});
|
||||
|
||||
assert.equal(selectedText, text);
|
||||
});
|
||||
|
||||
it('should select its value in a input number based on text', () => {
|
||||
const value = 1;
|
||||
document.querySelector('#input').setAttribute('type', 'number');
|
||||
document.querySelector('#input').setAttribute('value', value);
|
||||
const selectedText = ClipboardActionCopy(
|
||||
document.querySelector('#input'),
|
||||
{
|
||||
container: document.body,
|
||||
}
|
||||
);
|
||||
|
||||
assert.equal(Number(selectedText), value);
|
||||
});
|
||||
});
|
||||
});
|
|
@ -0,0 +1,32 @@
|
|||
import ClipboardActionCut from '../../src/actions/cut';
|
||||
|
||||
describe('ClipboardActionCut', () => {
|
||||
before(() => {
|
||||
global.input = document.createElement('input');
|
||||
global.input.setAttribute('id', 'input');
|
||||
global.input.setAttribute('value', 'abc');
|
||||
document.body.appendChild(global.input);
|
||||
|
||||
global.paragraph = document.createElement('p');
|
||||
global.paragraph.setAttribute('id', 'paragraph');
|
||||
global.paragraph.textContent = 'abc';
|
||||
document.body.appendChild(global.paragraph);
|
||||
});
|
||||
|
||||
after(() => {
|
||||
document.body.innerHTML = '';
|
||||
});
|
||||
|
||||
describe('#selectText', () => {
|
||||
it('should select its value', () => {
|
||||
const selectedText = ClipboardActionCut(
|
||||
document.querySelector('#input'),
|
||||
{
|
||||
container: document.body,
|
||||
}
|
||||
);
|
||||
|
||||
assert.equal(selectedText, document.querySelector('#input').value);
|
||||
});
|
||||
});
|
||||
});
|
|
@ -0,0 +1,80 @@
|
|||
import ClipboardActionDefault from '../../src/actions/default';
|
||||
|
||||
describe('ClipboardActionDefault', () => {
|
||||
before(() => {
|
||||
global.input = document.createElement('input');
|
||||
global.input.setAttribute('id', 'input');
|
||||
global.input.setAttribute('value', 'abc');
|
||||
document.body.appendChild(global.input);
|
||||
|
||||
global.paragraph = document.createElement('p');
|
||||
global.paragraph.setAttribute('id', 'paragraph');
|
||||
global.paragraph.textContent = 'abc';
|
||||
document.body.appendChild(global.paragraph);
|
||||
});
|
||||
|
||||
after(() => {
|
||||
document.body.innerHTML = '';
|
||||
});
|
||||
|
||||
describe('#resolveOptions', () => {
|
||||
it('should set base properties', () => {
|
||||
const selectedText = ClipboardActionDefault({
|
||||
container: document.body,
|
||||
text: 'foo',
|
||||
});
|
||||
|
||||
assert.equal(selectedText, 'foo');
|
||||
});
|
||||
});
|
||||
|
||||
describe('#set action', () => {
|
||||
it('should throw an error since "action" is invalid', (done) => {
|
||||
try {
|
||||
let clip = ClipboardActionDefault({
|
||||
text: 'foo',
|
||||
action: 'paste',
|
||||
});
|
||||
} catch (e) {
|
||||
assert.equal(
|
||||
e.message,
|
||||
'Invalid "action" value, use either "copy" or "cut"'
|
||||
);
|
||||
done();
|
||||
}
|
||||
});
|
||||
});
|
||||
|
||||
describe('#set target', () => {
|
||||
it('should throw an error since "target" do not match any element', (done) => {
|
||||
try {
|
||||
let clip = ClipboardActionDefault({
|
||||
target: document.querySelector('#foo'),
|
||||
});
|
||||
} catch (e) {
|
||||
assert.equal(e.message, 'Invalid "target" value, use a valid Element');
|
||||
done();
|
||||
}
|
||||
});
|
||||
});
|
||||
|
||||
describe('#selectedText', () => {
|
||||
it('should select text from editable element', () => {
|
||||
const selectedText = ClipboardActionDefault({
|
||||
container: document.body,
|
||||
target: document.querySelector('#input'),
|
||||
});
|
||||
|
||||
assert.equal(selectedText, 'abc');
|
||||
});
|
||||
|
||||
it('should select text from non-editable element', () => {
|
||||
const selectedText = ClipboardActionDefault({
|
||||
container: document.body,
|
||||
target: document.querySelector('#paragraph'),
|
||||
});
|
||||
|
||||
assert.equal(selectedText, 'abc');
|
||||
});
|
||||
});
|
||||
});
|
|
@ -0,0 +1,192 @@
|
|||
import Clipboard from '../src/clipboard';
|
||||
|
||||
describe('Clipboard', () => {
|
||||
before(() => {
|
||||
global.button = document.createElement('button');
|
||||
global.button.setAttribute('class', 'btn');
|
||||
global.button.setAttribute('data-clipboard-text', 'foo');
|
||||
document.body.appendChild(global.button);
|
||||
|
||||
global.span = document.createElement('span');
|
||||
global.span.innerHTML = 'bar';
|
||||
|
||||
global.button.appendChild(span);
|
||||
|
||||
global.event = {
|
||||
target: global.button,
|
||||
currentTarget: global.button,
|
||||
};
|
||||
});
|
||||
|
||||
after(() => {
|
||||
document.body.innerHTML = '';
|
||||
});
|
||||
|
||||
describe('#resolveOptions', () => {
|
||||
before(() => {
|
||||
global.fn = () => {};
|
||||
});
|
||||
|
||||
it('should set action as a function', () => {
|
||||
let clipboard = new Clipboard('.btn', {
|
||||
action: global.fn,
|
||||
});
|
||||
|
||||
assert.equal(global.fn, clipboard.action);
|
||||
});
|
||||
|
||||
it('should set target as a function', () => {
|
||||
let clipboard = new Clipboard('.btn', {
|
||||
target: global.fn,
|
||||
});
|
||||
|
||||
assert.equal(global.fn, clipboard.target);
|
||||
});
|
||||
|
||||
it('should set text as a function', () => {
|
||||
let clipboard = new Clipboard('.btn', {
|
||||
text: global.fn,
|
||||
});
|
||||
|
||||
assert.equal(global.fn, clipboard.text);
|
||||
});
|
||||
|
||||
it('should set container as an object', () => {
|
||||
let clipboard = new Clipboard('.btn', {
|
||||
container: document.body,
|
||||
});
|
||||
|
||||
assert.equal(document.body, clipboard.container);
|
||||
});
|
||||
|
||||
it('should set container as body by default', () => {
|
||||
let clipboard = new Clipboard('.btn');
|
||||
|
||||
assert.equal(document.body, clipboard.container);
|
||||
});
|
||||
});
|
||||
|
||||
describe('#listenClick', () => {
|
||||
it('should add a click event listener to the passed selector', () => {
|
||||
let clipboard = new Clipboard('.btn');
|
||||
assert.isObject(clipboard.listener);
|
||||
});
|
||||
});
|
||||
|
||||
describe('#onClick', () => {
|
||||
it('should init when called', (done) => {
|
||||
let clipboard = new Clipboard('.btn');
|
||||
|
||||
clipboard.on('success', () => {
|
||||
done();
|
||||
});
|
||||
|
||||
clipboard.onClick(global.event);
|
||||
});
|
||||
|
||||
it("should use an event's currentTarget when not equal to target", (done) => {
|
||||
let clipboard = new Clipboard('.btn');
|
||||
let bubbledEvent = {
|
||||
target: global.span,
|
||||
currentTarget: global.button,
|
||||
};
|
||||
|
||||
clipboard.on('success', () => {
|
||||
done();
|
||||
});
|
||||
|
||||
clipboard.onClick(bubbledEvent);
|
||||
});
|
||||
|
||||
it('should throw an exception when target is invalid', (done) => {
|
||||
try {
|
||||
const clipboard = new Clipboard('.btn', {
|
||||
target() {
|
||||
return null;
|
||||
},
|
||||
});
|
||||
|
||||
clipboard.onClick(global.event);
|
||||
} catch (e) {
|
||||
assert.equal(e.message, 'Invalid "target" value, use a valid Element');
|
||||
done();
|
||||
}
|
||||
});
|
||||
});
|
||||
|
||||
describe('#static isSupported', () => {
|
||||
it('should return the support of the given action', () => {
|
||||
assert.equal(Clipboard.isSupported('copy'), true);
|
||||
assert.equal(Clipboard.isSupported('cut'), true);
|
||||
});
|
||||
|
||||
it('should return the support of the cut and copy actions', () => {
|
||||
assert.equal(Clipboard.isSupported(), true);
|
||||
});
|
||||
});
|
||||
|
||||
describe('#static copy', () => {
|
||||
it('should copy in an programatic way based on text', () => {
|
||||
assert.equal(Clipboard.copy('lorem'), 'lorem');
|
||||
});
|
||||
|
||||
it('should copy in an programatic way based on target', () => {
|
||||
assert.equal(Clipboard.copy(document.querySelector('span')), 'bar');
|
||||
});
|
||||
});
|
||||
|
||||
describe('#static cut', () => {
|
||||
it('should cut in an programatic way based on text', () => {
|
||||
assert.equal(Clipboard.cut(document.querySelector('span')), 'bar');
|
||||
});
|
||||
});
|
||||
|
||||
describe('#destroy', () => {
|
||||
it('should destroy an existing instance of ClipboardActionDefault', () => {
|
||||
let clipboard = new Clipboard('.btn');
|
||||
|
||||
clipboard.onClick(global.event);
|
||||
clipboard.destroy();
|
||||
|
||||
assert.equal(clipboard.clipboardAction, null);
|
||||
});
|
||||
});
|
||||
|
||||
describe('#events', () => {
|
||||
it('should fire a success event with certain properties', (done) => {
|
||||
let clipboard = new Clipboard('.btn');
|
||||
|
||||
clipboard.on('success', (e) => {
|
||||
assert.property(e, 'action');
|
||||
assert.equal(e.action, 'copy');
|
||||
assert.property(e, 'text');
|
||||
assert.property(e, 'trigger');
|
||||
assert.property(e, 'clearSelection');
|
||||
|
||||
done();
|
||||
});
|
||||
|
||||
clipboard.onClick(global.event);
|
||||
});
|
||||
});
|
||||
|
||||
describe('#clearSelection', () => {
|
||||
it('should clear text selection without moving focus', (done) => {
|
||||
let clipboard = new Clipboard('.btn');
|
||||
|
||||
clipboard.on('success', (e) => {
|
||||
e.clearSelection();
|
||||
|
||||
let selectedElem = document.activeElement;
|
||||
let selectedText = window.getSelection().toString();
|
||||
|
||||
assert.equal(selectedElem, e.trigger);
|
||||
assert.equal(selectedText, '');
|
||||
|
||||
done();
|
||||
});
|
||||
|
||||
clipboard.onClick(global.event);
|
||||
});
|
||||
});
|
||||
});
|
|
@ -0,0 +1,49 @@
|
|||
import select from 'select';
|
||||
import command from '../../src/common/command';
|
||||
|
||||
describe('#command', () => {
|
||||
before(() => {
|
||||
global.stub = sinon.stub(document, 'execCommand');
|
||||
global.input = document.createElement('input');
|
||||
global.input.setAttribute('id', 'input');
|
||||
global.input.setAttribute('value', 'abc');
|
||||
document.body.appendChild(global.input);
|
||||
});
|
||||
|
||||
after(() => {
|
||||
global.stub.restore();
|
||||
document.body.innerHTML = '';
|
||||
});
|
||||
|
||||
it('should execute cut', (done) => {
|
||||
global.stub.returns(true);
|
||||
select(document.querySelector('#input'));
|
||||
|
||||
assert.isTrue(command('cut'));
|
||||
done();
|
||||
});
|
||||
|
||||
it('should execute copy', (done) => {
|
||||
global.stub.returns(true);
|
||||
select(document.querySelector('#input'));
|
||||
|
||||
assert.isTrue(command('copy'));
|
||||
done();
|
||||
});
|
||||
|
||||
it('should not execute copy', (done) => {
|
||||
global.stub.returns(false);
|
||||
select(document.querySelector('#input'));
|
||||
|
||||
assert.isFalse(command('copy'));
|
||||
done();
|
||||
});
|
||||
|
||||
it('should not execute cut', (done) => {
|
||||
global.stub.returns(false);
|
||||
select(document.querySelector('#input'));
|
||||
|
||||
assert.isFalse(command('cut'));
|
||||
done();
|
||||
});
|
||||
});
|
|
@ -0,0 +1,13 @@
|
|||
import createFakeElement from '../../src/common/create-fake-element';
|
||||
|
||||
describe('createFakeElement', () => {
|
||||
it('should define a fake element and set the position right style property', (done) => {
|
||||
// Set document direction
|
||||
document.documentElement.setAttribute('dir', 'rtl');
|
||||
|
||||
const el = createFakeElement(document.body);
|
||||
|
||||
assert.equal(el.style.right, '-9999px');
|
||||
done();
|
||||
});
|
||||
});
|
|
@ -0,0 +1,46 @@
|
|||
const pkg = require('./package.json');
|
||||
const path = require('path');
|
||||
const webpack = require('webpack');
|
||||
const UglifyJSPlugin = require('uglifyjs-webpack-plugin');
|
||||
|
||||
const production = process.env.NODE_ENV === 'production' || false;
|
||||
|
||||
const banner = `clipboard.js v${pkg.version}
|
||||
https://clipboardjs.com/
|
||||
|
||||
Licensed MIT © Zeno Rocha`;
|
||||
|
||||
module.exports = {
|
||||
entry: './src/clipboard.js',
|
||||
mode: 'production',
|
||||
target: ['web', 'es5'],
|
||||
output: {
|
||||
filename: production ? 'clipboard.min.js' : 'clipboard.js',
|
||||
path: path.resolve(__dirname, 'dist'),
|
||||
library: 'ClipboardJS',
|
||||
globalObject: 'this',
|
||||
libraryExport: 'default',
|
||||
libraryTarget: 'umd',
|
||||
},
|
||||
module: {
|
||||
rules: [{ test: /\.js$/, exclude: /node_modules/, loader: 'babel-loader' }],
|
||||
},
|
||||
optimization: {
|
||||
minimize: production,
|
||||
minimizer: [
|
||||
new UglifyJSPlugin({
|
||||
parallel: require('os').cpus().length,
|
||||
uglifyOptions: {
|
||||
ie8: false,
|
||||
keep_fnames: false,
|
||||
output: {
|
||||
beautify: false,
|
||||
comments: (node, { value, type }) =>
|
||||
type == 'comment2' && value.startsWith('!'),
|
||||
},
|
||||
},
|
||||
}),
|
||||
],
|
||||
},
|
||||
plugins: [new webpack.BannerPlugin({ banner })],
|
||||
};
|
|
@ -0,0 +1,7 @@
|
|||
root = true
|
||||
|
||||
[*]
|
||||
charset = utf-8
|
||||
end_of_line = lf
|
||||
insert_final_newline = true
|
||||
indent_size = 2
|
|
@ -0,0 +1,919 @@
|
|||
## [1.11.10](https://github.com/iamkun/dayjs/compare/v1.11.9...v1.11.10) (2023-09-19)
|
||||
|
||||
|
||||
### Bug Fixes
|
||||
|
||||
* Add Korean Day of Month with ordinal ([#2395](https://github.com/iamkun/dayjs/issues/2395)) ([dd55ee2](https://github.com/iamkun/dayjs/commit/dd55ee2aadd1009242235e47d558bbf028827896))
|
||||
* change back fa locale to the Gregorian calendar equivalent ([#2411](https://github.com/iamkun/dayjs/issues/2411)) ([95e9458](https://github.com/iamkun/dayjs/commit/95e9458b221fe35e59ee4a160a5db247313a68fb))
|
||||
* duration plugin - MILLISECONDS_A_MONTH const calculation ([#2362](https://github.com/iamkun/dayjs/issues/2362)) ([f0a0b54](https://github.com/iamkun/dayjs/commit/f0a0b546b074b3b511c2319a1ce83d412894b91f))
|
||||
* duration plugin getter get result 0 instead of undefined ([#2369](https://github.com/iamkun/dayjs/issues/2369)) ([061aa7e](https://github.com/iamkun/dayjs/commit/061aa7ed6c31696974665fc9b11a74d30841ebed))
|
||||
* fix isDayjs check logic ([#2383](https://github.com/iamkun/dayjs/issues/2383)) ([5f3f878](https://github.com/iamkun/dayjs/commit/5f3f8786c796cd432fe6bcb6966a810daea89203))
|
||||
* fix timezone plugin to get correct locale setting ([#2420](https://github.com/iamkun/dayjs/issues/2420)) ([4f45012](https://github.com/iamkun/dayjs/commit/4f4501256fa1bc72128aae1d841bbd782df86aed))
|
||||
* **locale:** add meridiem in `ar` locale ([#2418](https://github.com/iamkun/dayjs/issues/2418)) ([361be5c](https://github.com/iamkun/dayjs/commit/361be5c7c628614ee833d710acbe154a598b904d))
|
||||
* round durations to millisecond precision for ISO string ([#2367](https://github.com/iamkun/dayjs/issues/2367)) ([890a17a](https://github.com/iamkun/dayjs/commit/890a17a8d8ddd43c7c8b806e3afc7b27f3288d27))
|
||||
* sub-second precisions need to be rounded at the seconds field to avoid adding floats ([#2377](https://github.com/iamkun/dayjs/issues/2377)) ([a9d7d03](https://github.com/iamkun/dayjs/commit/a9d7d0398d22ebd4bfc3812ca0134a97606d54d9))
|
||||
* update $x logic to avoid plugin error ([#2429](https://github.com/iamkun/dayjs/issues/2429)) ([2254635](https://github.com/iamkun/dayjs/commit/22546357f30924fcff3b3ffa14fd04be21f97a5e))
|
||||
* Update Slovenian locale for relative time ([#2396](https://github.com/iamkun/dayjs/issues/2396)) ([5470a15](https://github.com/iamkun/dayjs/commit/5470a15e437fac803797363063b24f3ba3bd5299))
|
||||
* update uzbek language translation ([#2327](https://github.com/iamkun/dayjs/issues/2327)) ([0a91056](https://github.com/iamkun/dayjs/commit/0a910564d76dc7c128da8e0d85d8e11ebdb5660b))
|
||||
|
||||
## [1.11.9](https://github.com/iamkun/dayjs/compare/v1.11.8...v1.11.9) (2023-07-01)
|
||||
|
||||
|
||||
### Bug Fixes
|
||||
|
||||
* Add null to min and max plugin return type ([#2355](https://github.com/iamkun/dayjs/issues/2355)) ([62d9042](https://github.com/iamkun/dayjs/commit/62d9042eb84b78d78324694ccbeaad1679d37e68))
|
||||
* check if null passed to objectSupport parser ([#2175](https://github.com/iamkun/dayjs/issues/2175)) ([013968f](https://github.com/iamkun/dayjs/commit/013968f609c32e2269df69b4dd1feb2e8e1e035a))
|
||||
* dayjs.diff improve performance ([#2244](https://github.com/iamkun/dayjs/issues/2244)) ([33c80e1](https://github.com/iamkun/dayjs/commit/33c80e14cf14f70ceb4f54639e266cd70a3c3996))
|
||||
* dayjs(null) throws error, not return dayjs object as invalid date ([#2334](https://github.com/iamkun/dayjs/issues/2334)) ([c79e2f5](https://github.com/iamkun/dayjs/commit/c79e2f5d03eef5660b1f13385b69c0c9668d2f98))
|
||||
* objectSupport plugin causes an error when null is passed to dayjs function (closes [#2277](https://github.com/iamkun/dayjs/issues/2277)) ([#2342](https://github.com/iamkun/dayjs/issues/2342)) ([89bf31c](https://github.com/iamkun/dayjs/commit/89bf31ce0a36dcfc892029dc019d85d3654cf5fb))
|
||||
* Optimize format method ([#2313](https://github.com/iamkun/dayjs/issues/2313)) ([1fe1b1d](https://github.com/iamkun/dayjs/commit/1fe1b1d9a214d3b8c9f267b432801424a493f1c4))
|
||||
* update Duration plugin add/subtract take into account days in month ([#2337](https://github.com/iamkun/dayjs/issues/2337)) ([3b1060f](https://github.com/iamkun/dayjs/commit/3b1060f92183ab3a3c49289c2d87fbdd34c1eacc))
|
||||
* update MinMax plugin 1. ignore the 'null' in args 2. return the only one arg ([#2330](https://github.com/iamkun/dayjs/issues/2330)) ([3c2c6ee](https://github.com/iamkun/dayjs/commit/3c2c6ee4db00bbb43a7a3bb0b56bc0d0f03daddc))
|
||||
|
||||
## [1.11.8](https://github.com/iamkun/dayjs/compare/v1.11.7...v1.11.8) (2023-06-02)
|
||||
|
||||
|
||||
### Bug Fixes
|
||||
|
||||
* .format add padding to 'YYYY' ([#2231](https://github.com/iamkun/dayjs/issues/2231)) ([00c223b](https://github.com/iamkun/dayjs/commit/00c223b7e92970d07557133994fcb225a6d4c960))
|
||||
* Added .valueOf method to Duration class ([#2226](https://github.com/iamkun/dayjs/issues/2226)) ([9b4fcfd](https://github.com/iamkun/dayjs/commit/9b4fcfde35b39693894be1821b6c7222fac98657))
|
||||
* timezone type mark `date` parameter as optional ([#2222](https://github.com/iamkun/dayjs/issues/2222)) ([b87aa0e](https://github.com/iamkun/dayjs/commit/b87aa0ed9a748c478a66ef48230cd1d6350d7b8a))
|
||||
* type file first parameter date is optional in isSame(), isBefore(), isAfter() ([#2272](https://github.com/iamkun/dayjs/issues/2272)) ([4d56f3e](https://github.com/iamkun/dayjs/commit/4d56f3eb2b3770879d60f824590bf1b32f237d47))
|
||||
|
||||
## [1.11.7](https://github.com/iamkun/dayjs/compare/v1.11.6...v1.11.7) (2022-12-06)
|
||||
|
||||
|
||||
### Bug Fixes
|
||||
|
||||
* Add locale (zh-tw) meridiem ([#2149](https://github.com/iamkun/dayjs/issues/2149)) ([1e9ba76](https://github.com/iamkun/dayjs/commit/1e9ba761ff4e3f2759106dfe1aa9054d5826451c))
|
||||
* update fa locale ([#2151](https://github.com/iamkun/dayjs/issues/2151)) ([1c26732](https://github.com/iamkun/dayjs/commit/1c267321a1a01b4947e1482bac67d67ebc7c3dfa))
|
||||
|
||||
## [1.11.6](https://github.com/iamkun/dayjs/compare/v1.11.5...v1.11.6) (2022-10-21)
|
||||
|
||||
|
||||
### Bug Fixes
|
||||
|
||||
* add BigIntSupport plugin ([#2087](https://github.com/iamkun/dayjs/issues/2087)) ([f6dce48](https://github.com/iamkun/dayjs/commit/f6dce48a9e39677718b087867d9fd901d5078155))
|
||||
* Fix objectSupport collides with Duration plugin - issue [#2027](https://github.com/iamkun/dayjs/issues/2027) ([#2038](https://github.com/iamkun/dayjs/issues/2038)) ([c9370ea](https://github.com/iamkun/dayjs/commit/c9370ea96bf420439ee7eaa4146e8ed643160312))
|
||||
|
||||
## [1.11.5](https://github.com/iamkun/dayjs/compare/v1.11.4...v1.11.5) (2022-08-12)
|
||||
|
||||
|
||||
### Bug Fixes
|
||||
|
||||
* ordinal for nl not working ([#2011](https://github.com/iamkun/dayjs/issues/2011)) ([c93c85e](https://github.com/iamkun/dayjs/commit/c93c85eaa11564a1aae2d823480a417812c01bf4))
|
||||
* wrong ordinal for french locale ([#2010](https://github.com/iamkun/dayjs/issues/2010)) ([dd192a7](https://github.com/iamkun/dayjs/commit/dd192a72fc5d26ce56481e89b0c1ccf5f939be0c))
|
||||
|
||||
## [1.11.4](https://github.com/iamkun/dayjs/compare/v1.11.3...v1.11.4) (2022-07-19)
|
||||
|
||||
|
||||
### Bug Fixes
|
||||
|
||||
* correct past property in ku (kurdish) locale ([#1916](https://github.com/iamkun/dayjs/issues/1916)) ([74e82b9](https://github.com/iamkun/dayjs/commit/74e82b9da5ec8b90361fc27ac7c8b63faf354502))
|
||||
* fix French [fr] local ordinal ([#1932](https://github.com/iamkun/dayjs/issues/1932)) ([8f09834](https://github.com/iamkun/dayjs/commit/8f09834a88b8e7f8353c6e7473d4711596890a8c))
|
||||
* fix objectSupport plugin ConfigTypeMap type ([#1441](https://github.com/iamkun/dayjs/issues/1441)) ([#1990](https://github.com/iamkun/dayjs/issues/1990)) ([fd51fe4](https://github.com/iamkun/dayjs/commit/fd51fe4f7fa799d8c598343e71fa59299ec4cf93))
|
||||
* fix type error to add ordianl property in InstanceLocaleDataReturn and GlobalLocaleDataReturn types ([#1931](https://github.com/iamkun/dayjs/issues/1931)) ([526f0ae](https://github.com/iamkun/dayjs/commit/526f0ae549ffbeeb9ef1099ca23964791fc59743))
|
||||
* update locale ar-* meridiem function ([#1954](https://github.com/iamkun/dayjs/issues/1954)) ([3d31611](https://github.com/iamkun/dayjs/commit/3d316117f04362d31f4e8bd349620b8414ce5d0c))
|
||||
* zh-tw / zh-hk locale ordinal error ([#1976](https://github.com/iamkun/dayjs/issues/1976)) ([0a1bd08](https://github.com/iamkun/dayjs/commit/0a1bd08e736be7d4e378aaca280caa6543f8066d))
|
||||
|
||||
## [1.11.3](https://github.com/iamkun/dayjs/compare/v1.11.2...v1.11.3) (2022-06-06)
|
||||
|
||||
|
||||
### Bug Fixes
|
||||
|
||||
* customParseFormat plugin to parse comma as a separator character ([#1913](https://github.com/iamkun/dayjs/issues/1913)) ([41b1405](https://github.com/iamkun/dayjs/commit/41b1405971e099431211ae6c2a100cd797da4427))
|
||||
* update Dutch [nl] locale ordinal ([#1908](https://github.com/iamkun/dayjs/issues/1908)) ([5da98f8](https://github.com/iamkun/dayjs/commit/5da98f8085d2d2847d79e38c795082703a14f24b))
|
||||
|
||||
## [1.11.2](https://github.com/iamkun/dayjs/compare/v1.11.1...v1.11.2) (2022-05-06)
|
||||
|
||||
|
||||
### Bug Fixes
|
||||
|
||||
* add OpUnitType (week) to quarterOfYear startOf/endOf types ([#1865](https://github.com/iamkun/dayjs/issues/1865)) ([400bc3e](https://github.com/iamkun/dayjs/commit/400bc3e8915e0c58e7abbfd3a1235364b1abaf3e))
|
||||
* Fix type issue with ManipulateType ([#1864](https://github.com/iamkun/dayjs/issues/1864)) ([d033dfc](https://github.com/iamkun/dayjs/commit/d033dfcfc1d2ced39b2733898e8d85ad5984c9e9))
|
||||
* fix UTC plugin .valueOf not taking DST into account ([#1448](https://github.com/iamkun/dayjs/issues/1448)) ([27d1c50](https://github.com/iamkun/dayjs/commit/27d1c506100ae6624f258c21cc06b24768ced733))
|
||||
|
||||
## [1.11.1](https://github.com/iamkun/dayjs/compare/v1.11.0...v1.11.1) (2022-04-15)
|
||||
|
||||
|
||||
### Bug Fixes
|
||||
|
||||
* add Bengali (Bangladesh) [bn-bd] locale ([#1806](https://github.com/iamkun/dayjs/issues/1806)) ([840ed76](https://github.com/iamkun/dayjs/commit/840ed76eedc085afefc4dedd05f31d44196b63b0))
|
||||
* refactor replace deprecated String.prototype.substr() ([#1836](https://github.com/iamkun/dayjs/issues/1836)) ([627fa39](https://github.com/iamkun/dayjs/commit/627fa393e4daf83c92431162dbe18534b23fcbae))
|
||||
* Update German [de] locale, adds the abbreviations for month including a . in the end, as in September -> Sept. ([#1831](https://github.com/iamkun/dayjs/issues/1831)) ([4e2802c](https://github.com/iamkun/dayjs/commit/4e2802cc3bec2941ffb737a15fb531c90951eafe))
|
||||
* update Italian (Switzerland) [it-ch] locale relativeTime ([#1829](https://github.com/iamkun/dayjs/issues/1829)) ([8e6d11d](https://github.com/iamkun/dayjs/commit/8e6d11d053393d97bee1ba411adb2d82de1a58c4))
|
||||
* update Kurdish [ku] locale strings and formatted output contains non-standard kurdish characters ([#1848](https://github.com/iamkun/dayjs/issues/1848)) ([a597d0b](https://github.com/iamkun/dayjs/commit/a597d0b1b8dd28e626f8c59d326622088f7b51e7))
|
||||
* update locale bo [Tibetan]: corrected the orders in formats ([#1823](https://github.com/iamkun/dayjs/issues/1823)) ([e790516](https://github.com/iamkun/dayjs/commit/e79051617af6787358f6c9b5443d987b8b53a9e1))
|
||||
|
||||
# [1.11.0](https://github.com/iamkun/dayjs/compare/v1.10.8...v1.11.0) (2022-03-14)
|
||||
|
||||
|
||||
### Bug Fixes
|
||||
|
||||
* Add Kirundi (rn) locale ([#1793](https://github.com/iamkun/dayjs/issues/1793)) ([74e5247](https://github.com/iamkun/dayjs/commit/74e5247227a779fffde39bdfcd1ee19911496709))
|
||||
* add missing date shorthand D type definition ([#1752](https://github.com/iamkun/dayjs/issues/1752)) ([b045baf](https://github.com/iamkun/dayjs/commit/b045baf1646a81f7e4f446f355d02d5fb0ef4aa7))
|
||||
* Add relative time to Galician (gl) and fix ordinals ([#1800](https://github.com/iamkun/dayjs/issues/1800)) ([dcbf170](https://github.com/iamkun/dayjs/commit/dcbf1708400624addfbddbc71e0f6a9ac15fa961))
|
||||
* update German locales (de-at, de-ch) ([#1775](https://github.com/iamkun/dayjs/issues/1775)) ([f9055a7](https://github.com/iamkun/dayjs/commit/f9055a77bf3d84c575e5fcf99e21611138ba64d7))
|
||||
* update Icelandic [is] locale relativeTime config ([#1796](https://github.com/iamkun/dayjs/issues/1796)) ([76f9e17](https://github.com/iamkun/dayjs/commit/76f9e1756de7e99c01e471dab30ea074b9ec9629))
|
||||
* Update index.d.ts note ([#1716](https://github.com/iamkun/dayjs/issues/1716)) ([5a108ff](https://github.com/iamkun/dayjs/commit/5a108ff3159c53fd270ea7638f33c35c934d6457))
|
||||
* Update locale German [de] monthsShort ([#1746](https://github.com/iamkun/dayjs/issues/1746)) ([4a7b7d0](https://github.com/iamkun/dayjs/commit/4a7b7d07c885bb9338514c234dbb708e24e9863e))
|
||||
* update meridiem function to Kurdish (ku) locale ([#1725](https://github.com/iamkun/dayjs/issues/1725)) ([efd3904](https://github.com/iamkun/dayjs/commit/efd3904ff8cbf0a4fc064911dda76fc86b669f7b))
|
||||
* update updateLocal plugin typescript types ([#1692](https://github.com/iamkun/dayjs/issues/1692)) ([c7a3f73](https://github.com/iamkun/dayjs/commit/c7a3f73064dbb63b4d365b2ad4c792f075f4d8d8))
|
||||
|
||||
|
||||
### Features
|
||||
|
||||
* Fallback to language only locale + support uppercase locales ([#1524](https://github.com/iamkun/dayjs/issues/1524)) ([9138dc2](https://github.com/iamkun/dayjs/commit/9138dc28206875372da4fb74c64716437cd11b95))
|
||||
|
||||
## [1.10.8](https://github.com/iamkun/dayjs/compare/v1.10.7...v1.10.8) (2022-02-28)
|
||||
|
||||
|
||||
### Bug Fixes
|
||||
|
||||
* set locale pt, pt-br correct weekdays and months ([#1697](https://github.com/iamkun/dayjs/issues/1697)) ([e019301](https://github.com/iamkun/dayjs/commit/e01930171c8235f58a114236f146086428f99569))
|
||||
|
||||
## [1.10.7](https://github.com/iamkun/dayjs/compare/v1.10.6...v1.10.7) (2021-09-10)
|
||||
|
||||
|
||||
### Bug Fixes
|
||||
|
||||
* Add Spanish (Mexico) [es-mx] locale ([#1614](https://github.com/iamkun/dayjs/issues/1614)) ([3393f2a](https://github.com/iamkun/dayjs/commit/3393f2ad55346d55902683a2e31c6f253d96c8c2))
|
||||
* Add Arabic (Iraq) [ar-iq] locale ([#1627](https://github.com/iamkun/dayjs/issues/1627)) ([b5a1391](https://github.com/iamkun/dayjs/commit/b5a1391011b247d08863d291542db5937b23b427))
|
||||
* add format object type to type file ([#1572](https://github.com/iamkun/dayjs/issues/1572)) ([5a79cc6](https://github.com/iamkun/dayjs/commit/5a79cc6408e825d9e123629eb44fc19c996d7751))
|
||||
* duration plugin when parsing duration from ISO string, set missing components to 0 instead of NaN ([#1611](https://github.com/iamkun/dayjs/issues/1611)) ([252585b](https://github.com/iamkun/dayjs/commit/252585b4b2bd59508150e21bb994908a9d78f9b0))
|
||||
* narrow type for `add` and `subtract` ([#1576](https://github.com/iamkun/dayjs/issues/1576)) ([1686962](https://github.com/iamkun/dayjs/commit/16869621b1a42563064dbf87f80c1ebfd74c1188))
|
||||
* update customParseFormat plugin strict x X parsing ([#1571](https://github.com/iamkun/dayjs/issues/1571)) ([08adda5](https://github.com/iamkun/dayjs/commit/08adda54edbcca38601f57841921d0f87f84e49e))
|
||||
* update Lithuanian [lt] locale spelling for single month ([#1609](https://github.com/iamkun/dayjs/issues/1609)) ([255dc54](https://github.com/iamkun/dayjs/commit/255dc54d9295de135a9037ce6ca13cae4bfd2cfb))
|
||||
* Update Norwegian Bokmål [nb] local yearStart 4 ([#1608](https://github.com/iamkun/dayjs/issues/1608)) ([7a8467c](https://github.com/iamkun/dayjs/commit/7a8467c0b7d59821f7e19d4a6973bcda8e4c19b1))
|
||||
* update plugin advancedFormat `isValid` validation ([#1566](https://github.com/iamkun/dayjs/issues/1566)) ([755fc8b](https://github.com/iamkun/dayjs/commit/755fc8bb1c532eb991459f180eee81367d12016c))
|
||||
* update Sinhalese [si] locale month name ([#1475](https://github.com/iamkun/dayjs/issues/1475)) ([63de2a8](https://github.com/iamkun/dayjs/commit/63de2a8b7dcd7e68c132c85d88572d4c9d296907))
|
||||
* update utcOffset plugin type file ([#1604](https://github.com/iamkun/dayjs/issues/1604)) ([f68e4b1](https://github.com/iamkun/dayjs/commit/f68e4b1a29fc33542f74cde10ec6d9fb045ca37e))
|
||||
|
||||
## [1.10.6](https://github.com/iamkun/dayjs/compare/v1.10.5...v1.10.6) (2021-07-06)
|
||||
|
||||
|
||||
### Bug Fixes
|
||||
|
||||
* add invalid date string override ([#1465](https://github.com/iamkun/dayjs/issues/1465)) ([#1470](https://github.com/iamkun/dayjs/issues/1470)) ([06f88f4](https://github.com/iamkun/dayjs/commit/06f88f425828b1ce96b737332d25145a95a4ee9d))
|
||||
* add sv-fi Finland Swedish locale ([#1522](https://github.com/iamkun/dayjs/issues/1522)) ([8e32164](https://github.com/iamkun/dayjs/commit/8e32164855cff724642e24c37a631eb4c4d760c8))
|
||||
* customParseFormat support parsing X x timestamp ([#1567](https://github.com/iamkun/dayjs/issues/1567)) ([eb087f5](https://github.com/iamkun/dayjs/commit/eb087f52861313b8dd8a5c1b77858665ec72859e))
|
||||
* dayjs ConfigTypeMap add null & undefined ([#1560](https://github.com/iamkun/dayjs/issues/1560)) ([b5e40e6](https://github.com/iamkun/dayjs/commit/b5e40e6f16abeaea6a0facfa466d20aefaa8a444))
|
||||
* Fix DayOfYear plugin when using BadMutable plugin ([#1511](https://github.com/iamkun/dayjs/issues/1511)) ([0b0c6a3](https://github.com/iamkun/dayjs/commit/0b0c6a31ec9c0aff991b0e8dd6eed116201274cc))
|
||||
* Implement ordinal in Bulgarian translation (fixes [#1501](https://github.com/iamkun/dayjs/issues/1501)) ([#1502](https://github.com/iamkun/dayjs/issues/1502)) ([b728da5](https://github.com/iamkun/dayjs/commit/b728da5ed9ed08210004ed20ce5fcd52a92de7da))
|
||||
* more strict delimiter in REGEX_PARSE ([#1555](https://github.com/iamkun/dayjs/issues/1555)) ([bfdab5c](https://github.com/iamkun/dayjs/commit/bfdab5c0d45a5736b68e8e1b1354fc021e05f607))
|
||||
* parameter type ([#1549](https://github.com/iamkun/dayjs/issues/1549)) ([f369844](https://github.com/iamkun/dayjs/commit/f369844dd69d253c4c7cbf68150939db3db233be))
|
||||
* update customParseFormat plugin to custom two-digit year parse function ([#1421](https://github.com/iamkun/dayjs/issues/1421)) ([bb5df55](https://github.com/iamkun/dayjs/commit/bb5df55cd3975dc7638b8f4e762afa470b6620f7))
|
||||
* update names of weekdays and months in Bulgarian [bg] to lowercase ([#1438](https://github.com/iamkun/dayjs/issues/1438)) ([b246210](https://github.com/iamkun/dayjs/commit/b24621091fec9cf6704de21e4b323f6f0c4abbf1))
|
||||
* update type file `.diff` ([#1505](https://github.com/iamkun/dayjs/issues/1505)) ([6508494](https://github.com/iamkun/dayjs/commit/6508494a4e62977b4397baaeef293d1bcf3c7235))
|
||||
* update UTC plugin type file for strict parsing ([#1443](https://github.com/iamkun/dayjs/issues/1443)) ([b4f28df](https://github.com/iamkun/dayjs/commit/b4f28df219fe63202dffdbeeaec5677c4d2c9111))
|
||||
|
||||
## [1.10.5](https://github.com/iamkun/dayjs/compare/v1.10.4...v1.10.5) (2021-05-26)
|
||||
|
||||
|
||||
### Bug Fixes
|
||||
|
||||
* add meridiem in ar locales ([#1375](https://github.com/iamkun/dayjs/issues/1375)) ([319f616](https://github.com/iamkun/dayjs/commit/319f616e572a03b984013d04d1b3a18ffd5b1190))
|
||||
* Added Zulu support to customParseFormat ([#1359](https://github.com/iamkun/dayjs/issues/1359)) ([1138a3f](https://github.com/iamkun/dayjs/commit/1138a3f0a76592c6d72fb86c4399e133fa41e2ec))
|
||||
* fix Bengali [bn] locale monthsShort error ([a0e6c0c](https://github.com/iamkun/dayjs/commit/a0e6c0cf3e1828020dfa11432c6716990f6ed5e0))
|
||||
* fix missing types for ArraySupport plugin ([#1401](https://github.com/iamkun/dayjs/issues/1401)) ([b1abdc4](https://github.com/iamkun/dayjs/commit/b1abdc40ee6c9d18ff46c311a114e0755677ea6f))
|
||||
* fix Ukrainian [uk] locale ([#1463](https://github.com/iamkun/dayjs/issues/1463)) ([0fdac93](https://github.com/iamkun/dayjs/commit/0fdac93ff2531542301b76952be9b084b2e2dfa0))
|
||||
* hotfix for `Duration` types ([#1357](https://github.com/iamkun/dayjs/issues/1357)) ([855b7b3](https://github.com/iamkun/dayjs/commit/855b7b3d049a3903794f91db3419f167c00dabd2)), closes [#1354](https://github.com/iamkun/dayjs/issues/1354)
|
||||
* timezone plugin DST error ([#1352](https://github.com/iamkun/dayjs/issues/1352)) ([71bed15](https://github.com/iamkun/dayjs/commit/71bed155edf32bff24379930ac684fc783538d8f))
|
||||
* Update duration plugin change string to number ([#1394](https://github.com/iamkun/dayjs/issues/1394)) ([e1546d1](https://github.com/iamkun/dayjs/commit/e1546d1a0cdb97ae92cf11efe61d94707af6a3a3))
|
||||
* update Duration plugin to support no-argument ([#1400](https://github.com/iamkun/dayjs/issues/1400)) ([8d9a5ae](https://github.com/iamkun/dayjs/commit/8d9a5ae0749e1b4e76babd4deeaa3b1d9776c29b))
|
||||
* Update Finnish [fi] locale to set yearStart ([#1378](https://github.com/iamkun/dayjs/issues/1378)) ([f3370bd](https://github.com/iamkun/dayjs/commit/f3370bda4e435118f714c8a7daf5c88cfc4b69ba))
|
||||
* update Russian [ru] locale meridiem and unit tests ([#1403](https://github.com/iamkun/dayjs/issues/1403)) ([f10f39d](https://github.com/iamkun/dayjs/commit/f10f39de7db70244a3c35e4a421090a12972457b))
|
||||
* update Russian [ru] locale yearStart config ([#1372](https://github.com/iamkun/dayjs/issues/1372)) ([5052515](https://github.com/iamkun/dayjs/commit/5052515fe35b2444201ef8ef87220b1876a94d0a))
|
||||
* update Slovenian [sl] locale to set correct ordinal ([#1386](https://github.com/iamkun/dayjs/issues/1386)) ([cb4f746](https://github.com/iamkun/dayjs/commit/cb4f74633b3020d6dbf19548c8cb13613dafca18))
|
||||
* update Spanish [es] locale to change month names to lowercase ([#1414](https://github.com/iamkun/dayjs/issues/1414)) ([9c20e77](https://github.com/iamkun/dayjs/commit/9c20e77caf7b1b5eccf418175203b198d4e29535))
|
||||
* update Swedish [sv] locale to set correct yearStart ([#1385](https://github.com/iamkun/dayjs/issues/1385)) ([66c5935](https://github.com/iamkun/dayjs/commit/66c59354964ef456bcd5f6152819618f44978082))
|
||||
* update UTC plugin to support string argument like +HH:mm ([#1395](https://github.com/iamkun/dayjs/issues/1395)) ([656127c](https://github.com/iamkun/dayjs/commit/656127cc44eda50923a1ac755602863fc32b9e69))
|
||||
|
||||
## [1.10.4](https://github.com/iamkun/dayjs/compare/v1.10.3...v1.10.4) (2021-01-22)
|
||||
|
||||
|
||||
### Bug Fixes
|
||||
|
||||
* Correct handling negative duration ([#1317](https://github.com/iamkun/dayjs/issues/1317)) ([3f5c085](https://github.com/iamkun/dayjs/commit/3f5c085608182472f20b84766b10949945663e44))
|
||||
* Improve `Duration` types ([#1338](https://github.com/iamkun/dayjs/issues/1338)) ([4aca4b1](https://github.com/iamkun/dayjs/commit/4aca4b1b584a15de1146d929f95c944594032f20))
|
||||
* parse a string for MMM month format with underscore delimiter ([#1349](https://github.com/iamkun/dayjs/issues/1349)) ([82ef9a3](https://github.com/iamkun/dayjs/commit/82ef9a304f06287ac0a14c4da9a7fe6152b5fec9))
|
||||
* Update Bengali [bn] locale ([#1329](https://github.com/iamkun/dayjs/issues/1329)) ([02d96ec](https://github.com/iamkun/dayjs/commit/02d96ec7189f62d6ef8987135919cbb5ceff20a6))
|
||||
* update locale Portuguese [pt] yearStart ([#1345](https://github.com/iamkun/dayjs/issues/1345)) ([5c785d5](https://github.com/iamkun/dayjs/commit/5c785d528cc08811638d7cbfc7fc158d67b32d75))
|
||||
* update Polish [pl] locale yearStart ([#1348](https://github.com/iamkun/dayjs/issues/1348)) ([e93e6b8](https://github.com/iamkun/dayjs/commit/e93e6b8ffa61036b26382f1763e3864d4a7d5df5))
|
||||
* Update Slovenian [sl] relativeTime locale ([#1333](https://github.com/iamkun/dayjs/issues/1333)) ([fe5f1d0](https://github.com/iamkun/dayjs/commit/fe5f1d0afbe57b70339e268047e6c3028ca3d59b))
|
||||
|
||||
## [1.10.3](https://github.com/iamkun/dayjs/compare/v1.10.2...v1.10.3) (2021-01-09)
|
||||
|
||||
|
||||
### Bug Fixes
|
||||
|
||||
* fix customParseFormat plugin strict mode parse meridiem bug ([#1321](https://github.com/iamkun/dayjs/issues/1321)) ([e49eeef](https://github.com/iamkun/dayjs/commit/e49eeefbe8acb36419d36ca2e7ed8bc152f73ac1))
|
||||
* fix weekYear plugin missing locale bug ([#1319](https://github.com/iamkun/dayjs/issues/1319)) ([344bdc0](https://github.com/iamkun/dayjs/commit/344bdc0eed6843edb05723dc7853a41833d88f08)), closes [#1304](https://github.com/iamkun/dayjs/issues/1304)
|
||||
* update advancedFormat plugin to add format options for iso week and weekyear ([#1309](https://github.com/iamkun/dayjs/issues/1309)) ([2c54c64](https://github.com/iamkun/dayjs/commit/2c54c6441871a175ac9b95e41e4cd075dbac10cb))
|
||||
* update devHelper to add dev warning setting locale before loading ([c5cc893](https://github.com/iamkun/dayjs/commit/c5cc89355e1e206ca72433c19c40cb528690b04f))
|
||||
* update German [de] locale yearStart ([1858df8](https://github.com/iamkun/dayjs/commit/1858df8008de56570680723df89b36a8cbc970ef)), closes [#1264](https://github.com/iamkun/dayjs/issues/1264)
|
||||
|
||||
## [1.10.2](https://github.com/iamkun/dayjs/compare/v1.10.1...v1.10.2) (2021-01-05)
|
||||
|
||||
|
||||
### Bug Fixes
|
||||
|
||||
* fix parse regex bug ([#1307](https://github.com/iamkun/dayjs/issues/1307)) ([db2b6a5](https://github.com/iamkun/dayjs/commit/db2b6a5ea8e70f9fda645d113ca33495aa96b616)), closes [#1305](https://github.com/iamkun/dayjs/issues/1305)
|
||||
* remove module entry in package.json to revert 1.10.1 change ([#1314](https://github.com/iamkun/dayjs/issues/1314)) ([824dcb8](https://github.com/iamkun/dayjs/commit/824dcb8dfcccf14f64b6a2741a00fcdfe53dcd98))
|
||||
* update devHelper add warning "passing Year as a Number will be parsed as a Unix timestamp" ([#1315](https://github.com/iamkun/dayjs/issues/1315)) ([b0dda31](https://github.com/iamkun/dayjs/commit/b0dda3139e25441ab4e7c1f4f192dee0ecce6ef8))
|
||||
|
||||
## [1.10.1](https://github.com/iamkun/dayjs/compare/v1.10.0...v1.10.1) (2021-01-03)
|
||||
|
||||
|
||||
### Bug Fixes
|
||||
|
||||
* fix typescript type error UnitTypeLongPlural ([#1302](https://github.com/iamkun/dayjs/issues/1302)) ([bfaabe4](https://github.com/iamkun/dayjs/commit/bfaabe4f398c11564eca6cda7c8aded22e1b231a)), closes [#1300](https://github.com/iamkun/dayjs/issues/1300)
|
||||
|
||||
# [1.10.0](https://github.com/iamkun/dayjs/compare/v1.9.8...v1.10.0) (2021-01-03)
|
||||
|
||||
|
||||
### Bug Fixes
|
||||
|
||||
* add ordinal to localeData plugin ([#1266](https://github.com/iamkun/dayjs/issues/1266)) ([fd229fa](https://github.com/iamkun/dayjs/commit/fd229fa5bd26bcba810e2535eb937ea8d99106c2))
|
||||
* add preParsePostFormat plugin & update Arabic [ar] locale ([#1255](https://github.com/iamkun/dayjs/issues/1255)) ([f2e4790](https://github.com/iamkun/dayjs/commit/f2e479006a9a49bc0917f8620101d40ac645f7f2))
|
||||
* add type support for plural forms of units ([#1289](https://github.com/iamkun/dayjs/issues/1289)) ([de49bb1](https://github.com/iamkun/dayjs/commit/de49bb100badfb92b9a5933cc568841f340a923f))
|
||||
* escape last period to match only milliseconds ([#1239](https://github.com/iamkun/dayjs/issues/1239)) ([#1295](https://github.com/iamkun/dayjs/issues/1295)) ([64037e6](https://github.com/iamkun/dayjs/commit/64037e6a8cf303dcfd2b954f309bd9691f87fffc))
|
||||
|
||||
|
||||
### Features
|
||||
|
||||
* add ES6 Module Support, package.json module point to "esm/index.js" ([#1298](https://github.com/iamkun/dayjs/issues/1298)) ([f63375d](https://github.com/iamkun/dayjs/commit/f63375dea89becbd3bb2bb8ea7289c58c752bfed)), closes [#598](https://github.com/iamkun/dayjs/issues/598) [#313](https://github.com/iamkun/dayjs/issues/313)
|
||||
|
||||
## [1.9.8](https://github.com/iamkun/dayjs/compare/v1.9.7...v1.9.8) (2020-12-27)
|
||||
|
||||
|
||||
### Bug Fixes
|
||||
|
||||
* fix Ukrainian [uk] locale typo ([1605cc0](https://github.com/iamkun/dayjs/commit/1605cc0f6fe0e9c46a92d529bc9cd6e130432337))
|
||||
* update Hebrew [he] locale for double units ([#1287](https://github.com/iamkun/dayjs/issues/1287)) ([1c4b0da](https://github.com/iamkun/dayjs/commit/1c4b0da1468522e59dc9ee646d10dd2b31477d99))
|
||||
* update zh locale meridiem "noon" ([0e7ff3d](https://github.com/iamkun/dayjs/commit/0e7ff3dd29ca3aed85cb76dfcb8298d326e26542))
|
||||
* update zh-cn locale definition of noon ([#1278](https://github.com/iamkun/dayjs/issues/1278)) ([d5930b9](https://github.com/iamkun/dayjs/commit/d5930b96ff884f4176ca3fcb1bc95e8f1ec75c71))
|
||||
|
||||
## [1.9.7](https://github.com/iamkun/dayjs/compare/v1.9.6...v1.9.7) (2020-12-05)
|
||||
|
||||
|
||||
### Bug Fixes
|
||||
|
||||
* add duration.format to format a Duration ([#1202](https://github.com/iamkun/dayjs/issues/1202)) ([9a859a1](https://github.com/iamkun/dayjs/commit/9a859a147ba223a1eeff0f2bb6f33d97e0ccc6c7))
|
||||
* Add function handling for relativeTime.future and relativeTime.past ([#1197](https://github.com/iamkun/dayjs/issues/1197)) ([ef1979c](https://github.com/iamkun/dayjs/commit/ef1979ce85c61fe2d759ef3c37cb6aaf2358094f))
|
||||
* avoid install installed plugin ([#1214](https://github.com/iamkun/dayjs/issues/1214)) ([a92eb6c](https://github.com/iamkun/dayjs/commit/a92eb6c4dc1437ec920e69484d52984f5921a8ea))
|
||||
* avoid memory leak after installing a plugin too many times ([b8d2e32](https://github.com/iamkun/dayjs/commit/b8d2e32a9eb59661a7ed6200daa070687becaebd))
|
||||
* fix diff bug when UTC plugin enabled ([#1201](https://github.com/iamkun/dayjs/issues/1201)) ([9544ed2](https://github.com/iamkun/dayjs/commit/9544ed2a6c466b8308d26b33a388a6737435a1f4)), closes [#1200](https://github.com/iamkun/dayjs/issues/1200)
|
||||
* fix startOf/endOf bug in timezone plugin ([#1229](https://github.com/iamkun/dayjs/issues/1229)) ([eb5fbc4](https://github.com/iamkun/dayjs/commit/eb5fbc4c7d1b62a8615d2f263b404a9515d8e15c))
|
||||
* fix utc plugin diff edge case ([#1187](https://github.com/iamkun/dayjs/issues/1187)) ([971b3d4](https://github.com/iamkun/dayjs/commit/971b3d40b4c9403165138f1034e2223cd97c3abf))
|
||||
* update customParseFormat plugin to parse 2-digit offset ([#1209](https://github.com/iamkun/dayjs/issues/1209)) ([b56936a](https://github.com/iamkun/dayjs/commit/b56936ab77b8f6289a1b77d49307b495c4bf9f91)), closes [#1205](https://github.com/iamkun/dayjs/issues/1205)
|
||||
* Update timezone plugin type definition ([#1221](https://github.com/iamkun/dayjs/issues/1221)) ([34cfb92](https://github.com/iamkun/dayjs/commit/34cfb920b9653ad44d4b31fe49e533692a3ce01b))
|
||||
|
||||
## [1.9.6](https://github.com/iamkun/dayjs/compare/v1.9.5...v1.9.6) (2020-11-10)
|
||||
|
||||
|
||||
### Bug Fixes
|
||||
|
||||
* fix customParseFormat plugin parsing date bug ([#1198](https://github.com/iamkun/dayjs/issues/1198)) ([50f05ad](https://github.com/iamkun/dayjs/commit/50f05ad3addf27827c5657ae7519514e40d9faec)), closes [#1194](https://github.com/iamkun/dayjs/issues/1194)
|
||||
* Update lv (Latvian) locale relative time ([#1192](https://github.com/iamkun/dayjs/issues/1192)) ([6d6c684](https://github.com/iamkun/dayjs/commit/6d6c6841b13ba4f7e69de92caf132a3592c5253a))
|
||||
|
||||
## [1.9.5](https://github.com/iamkun/dayjs/compare/v1.9.4...v1.9.5) (2020-11-05)
|
||||
|
||||
|
||||
### Bug Fixes
|
||||
|
||||
* customParseFormat plugin supports parsing localizedFormats ([#1110](https://github.com/iamkun/dayjs/issues/1110)) ([402b603](https://github.com/iamkun/dayjs/commit/402b603aa3ee4199786950bc88b3fdc6b527aa35))
|
||||
* fix customParseFormat plugin parse meridiem bug ([#1169](https://github.com/iamkun/dayjs/issues/1169)) ([9e8f8d9](https://github.com/iamkun/dayjs/commit/9e8f8d96c69d557f4d267f42567c25ae9e7ab227)), closes [#1168](https://github.com/iamkun/dayjs/issues/1168)
|
||||
* fix devHelper error in umd bundle in browser ([#1165](https://github.com/iamkun/dayjs/issues/1165)) ([d11b5ee](https://github.com/iamkun/dayjs/commit/d11b5ee7dc11af671355f65ccda00f6ba42cc725))
|
||||
* fix utc plugin diff bug in DST ([#1171](https://github.com/iamkun/dayjs/issues/1171)) ([f8da3fe](https://github.com/iamkun/dayjs/commit/f8da3fe7e50c84c0502bf5be0b364910922dbd79)), closes [#1097](https://github.com/iamkun/dayjs/issues/1097) [#1021](https://github.com/iamkun/dayjs/issues/1021)
|
||||
* isoWeek plugin type ([#1177](https://github.com/iamkun/dayjs/issues/1177)) ([c3d0436](https://github.com/iamkun/dayjs/commit/c3d0436b06f74989e3a2c751a5d170f8072c4aad))
|
||||
* update localeData plugin to support meridiem ([#1174](https://github.com/iamkun/dayjs/issues/1174)) ([fdb09e4](https://github.com/iamkun/dayjs/commit/fdb09e4074cc7e8f6196846f18d3566c1f9e8fcd)), closes [#1172](https://github.com/iamkun/dayjs/issues/1172)
|
||||
* update timezone plugin parse Date instance / timestamp logic & remove useless test ([#1183](https://github.com/iamkun/dayjs/issues/1183)) ([a7f858b](https://github.com/iamkun/dayjs/commit/a7f858bb70ad81f718ba35c479e84b54eace48b2))
|
||||
|
||||
## [1.9.4](https://github.com/iamkun/dayjs/compare/v1.9.3...v1.9.4) (2020-10-23)
|
||||
|
||||
|
||||
### Bug Fixes
|
||||
|
||||
* Add descriptions to types ([#1148](https://github.com/iamkun/dayjs/issues/1148)) ([9a407a1](https://github.com/iamkun/dayjs/commit/9a407a140b089345a387d1aceab4d0d1635229c7))
|
||||
* add devHelper plugin ([#1163](https://github.com/iamkun/dayjs/issues/1163)) ([de49dc8](https://github.com/iamkun/dayjs/commit/de49dc80c83b85de4170571b64412bd60ada221b))
|
||||
* Fix Hungarian (hu) locale ([#1112](https://github.com/iamkun/dayjs/issues/1112)) ([ab13754](https://github.com/iamkun/dayjs/commit/ab13754f43c5033dacaa0eb2042dc4ab1a7a2754))
|
||||
* fix minMax plugin parsing empty array bug ([#1062](https://github.com/iamkun/dayjs/issues/1062)) ([368108b](https://github.com/iamkun/dayjs/commit/368108bc6d5cb1542f711b8eba722bd4dfaab0cd))
|
||||
* update adding/subtracting Duration from Dayjs object ([#1156](https://github.com/iamkun/dayjs/issues/1156)) ([f861aca](https://github.com/iamkun/dayjs/commit/f861acac3e83e28d3a4a96312c71119fd6b544fc))
|
||||
* update en-NZ locale to use proper ordinal formatting function ([#1143](https://github.com/iamkun/dayjs/issues/1143)) ([fcdbc58](https://github.com/iamkun/dayjs/commit/fcdbc5880710456a29b2bacf250542230bf48b99))
|
||||
* update localeData plugin type ([#1116](https://github.com/iamkun/dayjs/issues/1116)) ([ee5a4ec](https://github.com/iamkun/dayjs/commit/ee5a4ec41edddfb57d103c35182dc635c9264a10))
|
||||
* update timezone plugin to support custom parse format ([#1160](https://github.com/iamkun/dayjs/issues/1160)) ([48cbf31](https://github.com/iamkun/dayjs/commit/48cbf3118ba5427de428777c2e025896db654f2e)), closes [#1159](https://github.com/iamkun/dayjs/issues/1159)
|
||||
* update timezone plugin to support keepLocalTime ([#1161](https://github.com/iamkun/dayjs/issues/1161)) ([1d429e5](https://github.com/iamkun/dayjs/commit/1d429e5fe4467ebddcf81b43cf6f36e5e3be944c)), closes [#1149](https://github.com/iamkun/dayjs/issues/1149)
|
||||
|
||||
## [1.9.3](https://github.com/iamkun/dayjs/compare/v1.9.2...v1.9.3) (2020-10-13)
|
||||
|
||||
|
||||
### Bug Fixes
|
||||
|
||||
* fix localizedFormat export error ([#1133](https://github.com/iamkun/dayjs/issues/1133)) ([deecd6a](https://github.com/iamkun/dayjs/commit/deecd6ab8a2f4173ee7046f6b568b41fd2677531)), closes [#1132](https://github.com/iamkun/dayjs/issues/1132)
|
||||
|
||||
## [1.9.2](https://github.com/iamkun/dayjs/compare/v1.9.1...v1.9.2) (2020-10-13)
|
||||
|
||||
|
||||
### Bug Fixes
|
||||
|
||||
* add arraySupport plugin ([#1129](https://github.com/iamkun/dayjs/issues/1129)) ([be505c2](https://github.com/iamkun/dayjs/commit/be505c2c540261027342cecc55d8919a3d18d893))
|
||||
* export type of duration plugin ([#1094](https://github.com/iamkun/dayjs/issues/1094)) ([2c92e71](https://github.com/iamkun/dayjs/commit/2c92e71bf55d09601120cdf433da7a19cc8abff6))
|
||||
* Fix LocaleData plugin longDateFormat lowercase error ([#1101](https://github.com/iamkun/dayjs/issues/1101)) ([7937ccd](https://github.com/iamkun/dayjs/commit/7937ccdeac47d094a60e65ebb62a6020b81c46f4))
|
||||
* Fix objectSupport plugin bug in UTC ([#1107](https://github.com/iamkun/dayjs/issues/1107)) ([fe90bb6](https://github.com/iamkun/dayjs/commit/fe90bb6944f2ff1969ca975954d303b449dfa95b)), closes [#1105](https://github.com/iamkun/dayjs/issues/1105)
|
||||
* fix Serbian locale grammar (sr, sr-cyrl) ([#1108](https://github.com/iamkun/dayjs/issues/1108)) ([cc87eff](https://github.com/iamkun/dayjs/commit/cc87eff8b75b0d86ce0956516319d402bccae6c0))
|
||||
* Fix typo for "monday" in arabic ([#1067](https://github.com/iamkun/dayjs/issues/1067)) ([2e1e426](https://github.com/iamkun/dayjs/commit/2e1e42650124f30282dc4d710798d576b928f1c7))
|
||||
* support dayjs.add(Duration), dayjs.subtract(Duration) ([#1099](https://github.com/iamkun/dayjs/issues/1099)) ([b1a0294](https://github.com/iamkun/dayjs/commit/b1a02942c5238203aaa04ce9a074c73742324ab7))
|
||||
* update Breton [br] locale relativeTime config ([#1103](https://github.com/iamkun/dayjs/issues/1103)) ([b038bfd](https://github.com/iamkun/dayjs/commit/b038bfdb128889d677c95534d2be29cc30c9e72f))
|
||||
* update Catalan [ca] locale ordinal ([73da380](https://github.com/iamkun/dayjs/commit/73da38024c8b550bdcfbe3ff7e578e742c7aecf2))
|
||||
* update German [de] locale relativeTime config ([#1109](https://github.com/iamkun/dayjs/issues/1109)) ([f6e771b](https://github.com/iamkun/dayjs/commit/f6e771b70f93d19ebb12e6b794aa4628a1796248))
|
||||
* update localeData plugin to add longDateFormat to global localeData ([#1106](https://github.com/iamkun/dayjs/issues/1106)) ([16937d1](https://github.com/iamkun/dayjs/commit/16937d16e053b8c1d4a607622fa2fdbfd9809832))
|
||||
* Update objectSupport plugin to return current date time while parsing empty object ([f56783e](https://github.com/iamkun/dayjs/commit/f56783e14d8cf50916b015e7188b23bb6fbca839))
|
||||
|
||||
## [1.9.1](https://github.com/iamkun/dayjs/compare/v1.9.0...v1.9.1) (2020-09-28)
|
||||
|
||||
|
||||
### Bug Fixes
|
||||
|
||||
* Fix objectSupport plugin to get the correct result (zero-based month) ([#1089](https://github.com/iamkun/dayjs/issues/1089)) ([f95ac15](https://github.com/iamkun/dayjs/commit/f95ac15a4577ae5a3d1ce353872a2cd9fc454bc2))
|
||||
|
||||
# [1.9.0](https://github.com/iamkun/dayjs/compare/v1.8.36...v1.9.0) (2020-09-28)
|
||||
|
||||
|
||||
### Bug Fixes
|
||||
|
||||
* Add `setDefault` typing to timezone.d.ts ([#1057](https://github.com/iamkun/dayjs/issues/1057)) ([c0f0886](https://github.com/iamkun/dayjs/commit/c0f088620f17260e6e3ebce7697d561b5623f5f3))
|
||||
* fix DST bug in utc plugin ([#1053](https://github.com/iamkun/dayjs/issues/1053)) ([3d73543](https://github.com/iamkun/dayjs/commit/3d7354361f042ced1176d91f9ae9edffe6173425))
|
||||
* Fix optional type for timezone plugin ([#1081](https://github.com/iamkun/dayjs/issues/1081)) ([a6ebcf2](https://github.com/iamkun/dayjs/commit/a6ebcf283a83273562dce5663155e3b3a12ea9a5)), closes [#1079](https://github.com/iamkun/dayjs/issues/1079)
|
||||
* Fix timezone plugin conversion bug ([#1073](https://github.com/iamkun/dayjs/issues/1073)) ([16816a3](https://github.com/iamkun/dayjs/commit/16816a31ff43220aca9d1d179df6b729182abb55))
|
||||
* update duration plugin type file ([#1065](https://github.com/iamkun/dayjs/issues/1065)) ([94af9af](https://github.com/iamkun/dayjs/commit/94af9af27c5bc182cbb24f1845e561dd1d82d776))
|
||||
* update timezone plugin to support getting offset name e.g. EST ([#1069](https://github.com/iamkun/dayjs/issues/1069)) ([cbb755e](https://github.com/iamkun/dayjs/commit/cbb755e5c68d49c5678291f3ce832b32831a056e))
|
||||
* update utc plugin to support keepLocalTime `.utc(true)` ([#1080](https://github.com/iamkun/dayjs/issues/1080)) ([5ce4e0d](https://github.com/iamkun/dayjs/commit/5ce4e0d2f552f3645262537ff7afdc946f5a7e72))
|
||||
|
||||
|
||||
### Features
|
||||
|
||||
* Correct casing for en-sg locale name ([#1048](https://github.com/iamkun/dayjs/issues/1048)) ([2edaddc](https://github.com/iamkun/dayjs/commit/2edaddc22a7eb914f915531f389766217acd7034))
|
||||
|
||||
## [1.8.36](https://github.com/iamkun/dayjs/compare/v1.8.35...v1.8.36) (2020-09-17)
|
||||
|
||||
|
||||
### Bug Fixes
|
||||
|
||||
* Add Amharic (am) locale ([#1046](https://github.com/iamkun/dayjs/issues/1046)) ([cdc49a1](https://github.com/iamkun/dayjs/commit/cdc49a1911c74b7ea96ed222f42796d53715cfed))
|
||||
* Export Duration type in duration plugin ([#1043](https://github.com/iamkun/dayjs/issues/1043)) ([0f20c3a](https://github.com/iamkun/dayjs/commit/0f20c3ac75d9ac1026a15a7bb343d3a150d9b30f))
|
||||
* Fix duration plugin parsing milliseconds bug ([#1042](https://github.com/iamkun/dayjs/issues/1042)) ([fe2301b](https://github.com/iamkun/dayjs/commit/fe2301b22318886aaa89ed1620e0a118e98c2b8a))
|
||||
* Timezone plugin set default timezone ([#1033](https://github.com/iamkun/dayjs/issues/1033)) ([0c2050a](https://github.com/iamkun/dayjs/commit/0c2050a152da708b01edd6150a5013f642b14576))
|
||||
* Timezone plugin should have the same behavior in latest ICU version ([#1032](https://github.com/iamkun/dayjs/issues/1032)) ([de31592](https://github.com/iamkun/dayjs/commit/de315921575cc50c38464b27d0338e30a54d8e2a))
|
||||
* Update Finnish (fi) locale ([#963](https://github.com/iamkun/dayjs/issues/963)) ([cf8b6a0](https://github.com/iamkun/dayjs/commit/cf8b6a096f24b54cbdb95675ac386d8ac85ea616))
|
||||
* Update Polish (pl) , Hungarian (hr) and Lithuanian (lt) localization ([#1045](https://github.com/iamkun/dayjs/issues/1045)) ([638fd39](https://github.com/iamkun/dayjs/commit/638fd394fc24f4188390faf387da6b156e7c6320))
|
||||
|
||||
## [1.8.35](https://github.com/iamkun/dayjs/compare/v1.8.34...v1.8.35) (2020-09-02)
|
||||
|
||||
|
||||
### Bug Fixes
|
||||
|
||||
* Fix BadMutable plugin bug in .diff ([#1023](https://github.com/iamkun/dayjs/issues/1023)) ([40ab6d9](https://github.com/iamkun/dayjs/commit/40ab6d9a53e8047cfca63c611c25dd045372d021))
|
||||
* fix LocaleData plugin to support instance.weekdays() API ([#1019](https://github.com/iamkun/dayjs/issues/1019)) ([a09d259](https://github.com/iamkun/dayjs/commit/a09d259a407b81d1cb6bb5623fad551c775d8674)), closes [#1017](https://github.com/iamkun/dayjs/issues/1017)
|
||||
* Update Dutch (nl) locale to set correct yearStart ([1533a2c](https://github.com/iamkun/dayjs/commit/1533a2cc1475270032da2d87b19fc3d62327e6e3))
|
||||
|
||||
## [1.8.34](https://github.com/iamkun/dayjs/compare/v1.8.33...v1.8.34) (2020-08-20)
|
||||
|
||||
|
||||
### Bug Fixes
|
||||
|
||||
* Fix Timezone plugin to preserve milliseconds while changing timezone ([#1003](https://github.com/iamkun/dayjs/issues/1003)) ([5f446ed](https://github.com/iamkun/dayjs/commit/5f446eda770fa97e895c81a8195b3ba5d082cef0)), closes [#1002](https://github.com/iamkun/dayjs/issues/1002)
|
||||
* support parsing unlimited decimals of millisecond ([#1010](https://github.com/iamkun/dayjs/issues/1010)) ([d1bdd36](https://github.com/iamkun/dayjs/commit/d1bdd36a56e3d1786523a180e3fc18068f609135)), closes [#544](https://github.com/iamkun/dayjs/issues/544)
|
||||
* update Duration plugin to support global locale ([#1008](https://github.com/iamkun/dayjs/issues/1008)) ([1c49c83](https://github.com/iamkun/dayjs/commit/1c49c83e79811eede13db6372b5d65db598aee77)), closes [#1007](https://github.com/iamkun/dayjs/issues/1007)
|
||||
|
||||
## [1.8.33](https://github.com/iamkun/dayjs/compare/v1.8.32...v1.8.33) (2020-08-10)
|
||||
|
||||
|
||||
### Bug Fixes
|
||||
|
||||
* Add PluralGetSet plugin for plural getters/setters ([#996](https://github.com/iamkun/dayjs/issues/996)) ([f76e3ce](https://github.com/iamkun/dayjs/commit/f76e3ce2fbe5d3e9ed9121086baf55eb0cc4d355))
|
||||
* Add typescript type defs in esm build ([#985](https://github.com/iamkun/dayjs/issues/985)) ([50e3b3c](https://github.com/iamkun/dayjs/commit/50e3b3c6719cb0b4ec6eff394dacd63d5db8f253))
|
||||
* Fix isoWeek Plugin cal bug in UTC mode ([#993](https://github.com/iamkun/dayjs/issues/993)) ([f2e5f32](https://github.com/iamkun/dayjs/commit/f2e5f327aaf12b4572296ec6e107ecc05fcf76e7))
|
||||
* Fix Timezone plugin parsing js date, Day.js object, timestamp bug && update type file ([#994](https://github.com/iamkun/dayjs/issues/994)) ([22f3d49](https://github.com/iamkun/dayjs/commit/22f3d49405da98db6da56d1673eebcd01b57554b)), closes [#992](https://github.com/iamkun/dayjs/issues/992) [#989](https://github.com/iamkun/dayjs/issues/989)
|
||||
* Fix Timezone plugin UTCOffset rounding bug ([#987](https://github.com/iamkun/dayjs/issues/987)) ([b07182b](https://github.com/iamkun/dayjs/commit/b07182bbdf5aef7f6bf1e88fcd38432e2b8ee465)), closes [#986](https://github.com/iamkun/dayjs/issues/986)
|
||||
* Fix UTC plugin bug while comparing an utc instance to a local one ([#995](https://github.com/iamkun/dayjs/issues/995)) ([747c0fb](https://github.com/iamkun/dayjs/commit/747c0fb4eba6353755b5dad3417fd8d5a408c378))
|
||||
* Update pt-br locale weekStart 0 ([#984](https://github.com/iamkun/dayjs/issues/984)) ([0f881c1](https://github.com/iamkun/dayjs/commit/0f881c18efb02b9d0ba7f76cba92bb504226fa95))
|
||||
|
||||
## [1.8.32](https://github.com/iamkun/dayjs/compare/v1.8.31...v1.8.32) (2020-08-04)
|
||||
|
||||
|
||||
### Bug Fixes
|
||||
|
||||
* Add Experimental Timezone Plugin ([#974](https://github.com/iamkun/dayjs/issues/974)) ([e69caba](https://github.com/iamkun/dayjs/commit/e69caba1b0957241a855aa0ae38db899fa2c3795))
|
||||
* fix parse date string error e.g. '2020/9/30' ([#980](https://github.com/iamkun/dayjs/issues/980)) ([231790d](https://github.com/iamkun/dayjs/commit/231790da62af0494732960c2c50d86ae9bf63ec6)), closes [#979](https://github.com/iamkun/dayjs/issues/979)
|
||||
* update monthDiff function to get more accurate results ([19e8a7f](https://github.com/iamkun/dayjs/commit/19e8a7f2f7582b717f49d446822e39603694433c))
|
||||
* Update UTC plugin to support keepLocalTime ([#973](https://github.com/iamkun/dayjs/issues/973)) ([9f488e5](https://github.com/iamkun/dayjs/commit/9f488e5aca92f0b4c2951459436829d79f86d8d7))
|
||||
|
||||
## [1.8.31](https://github.com/iamkun/dayjs/compare/v1.8.30...v1.8.31) (2020-07-29)
|
||||
|
||||
|
||||
### Bug Fixes
|
||||
|
||||
* Rollback LocalePresetType to string ([#968](https://github.com/iamkun/dayjs/issues/968)) ([b342bd3](https://github.com/iamkun/dayjs/commit/b342bd3d84987d6c7587a0c4590d614fb0e670d7))
|
||||
* Update Regex to parse 'YYYY' correctly ([#969](https://github.com/iamkun/dayjs/issues/969)) ([70c1239](https://github.com/iamkun/dayjs/commit/70c123990dcc6bd479fa2b5d7f9985127872a826))
|
||||
|
||||
## [1.8.30](https://github.com/iamkun/dayjs/compare/v1.8.29...v1.8.30) (2020-07-22)
|
||||
|
||||
|
||||
### Bug Fixes
|
||||
|
||||
* Add Haitian Creole (ht) and Spanish Puerto Rico (es-pr) locale configs ([#958](https://github.com/iamkun/dayjs/issues/958)) ([b2642e2](https://github.com/iamkun/dayjs/commit/b2642e2d1f87734a34808c66e5176cb18bc0414d))
|
||||
* Fix UTC plugin wrong hour bug while adding month or year ([#957](https://github.com/iamkun/dayjs/issues/957)) ([28ae070](https://github.com/iamkun/dayjs/commit/28ae070024ff26685c88ce4cc8747307e86923c9))
|
||||
* Update French (fr) locale to set correct yearStart ([14ab808](https://github.com/iamkun/dayjs/commit/14ab808a7b7e226f2eb2cbe894916a18ed5d967d)), closes [#956](https://github.com/iamkun/dayjs/issues/956)
|
||||
|
||||
## [1.8.29](https://github.com/iamkun/dayjs/compare/v1.8.28...v1.8.29) (2020-07-02)
|
||||
|
||||
|
||||
### Bug Fixes
|
||||
|
||||
* Duration plugin supports parse ISO string with week (W) ([#950](https://github.com/iamkun/dayjs/issues/950)) ([f0fc12a](https://github.com/iamkun/dayjs/commit/f0fc12adadcab53fb0577ad8f5e2f1cf784fd8f5))
|
||||
* LocaleData plugin supports locale order ([#938](https://github.com/iamkun/dayjs/issues/938)) ([62f429d](https://github.com/iamkun/dayjs/commit/62f429db73a0a069b1267231dea172b85f4b90e3)), closes [#936](https://github.com/iamkun/dayjs/issues/936)
|
||||
* Update type definition to support array format ([#945](https://github.com/iamkun/dayjs/issues/945)) ([81d4740](https://github.com/iamkun/dayjs/commit/81d4740511d47e34f891b21afeb0449ef8a28688)), closes [#944](https://github.com/iamkun/dayjs/issues/944)
|
||||
* Update type definition to support strict mode ([#951](https://github.com/iamkun/dayjs/issues/951)) ([8d54f3f](https://github.com/iamkun/dayjs/commit/8d54f3f7d4d161e72c767fa09699e70a2b3d681c))
|
||||
|
||||
## [1.8.28](https://github.com/iamkun/dayjs/compare/v1.8.27...v1.8.28) (2020-05-28)
|
||||
|
||||
|
||||
### Bug Fixes
|
||||
|
||||
* Fix CustomParseFormat plugin month index error ([#918](https://github.com/iamkun/dayjs/issues/918)) ([fa2ec7f](https://github.com/iamkun/dayjs/commit/fa2ec7fcb980dcd2c7498dafe2f9ca2e52d735cf)), closes [#915](https://github.com/iamkun/dayjs/issues/915)
|
||||
* Update Ukrainian (uk) locale monthFormat and monthStandalone ([#899](https://github.com/iamkun/dayjs/issues/899)) ([a08756e](https://github.com/iamkun/dayjs/commit/a08756e80bd1d7126fca28c5ad9e382613fc86c4))
|
||||
|
||||
## [1.8.27](https://github.com/iamkun/dayjs/compare/v1.8.26...v1.8.27) (2020-05-14)
|
||||
|
||||
|
||||
### Bug Fixes
|
||||
|
||||
* Add Kinyarwanda (rw) locale ([#903](https://github.com/iamkun/dayjs/issues/903)) ([f355235](https://github.com/iamkun/dayjs/commit/f355235a836540d77880959fb1b614c87e9f7b3e))
|
||||
* Add plugin objectSupport ([#887](https://github.com/iamkun/dayjs/issues/887)) ([52dfb13](https://github.com/iamkun/dayjs/commit/52dfb13a6b84f0a753cc5761192b92416f440961))
|
||||
* Add Turkmen (tk) locale ([#893](https://github.com/iamkun/dayjs/issues/893)) ([a9ca8dc](https://github.com/iamkun/dayjs/commit/a9ca8dcbbd0964c5b9abb4e8a2d620c983cf091a))
|
||||
* Fix CustomParseFormat plugin set locale error ([#896](https://github.com/iamkun/dayjs/issues/896)) ([8035c8a](https://github.com/iamkun/dayjs/commit/8035c8a760549b631252252718db3cdc4ab2f68f))
|
||||
* Fix locale month function bug ([#908](https://github.com/iamkun/dayjs/issues/908)) ([bf347c3](https://github.com/iamkun/dayjs/commit/bf347c36e401f50727fb5afcc537497b54b90d6b))
|
||||
* Update CustomParseFormat plugin to support Array formats ([#906](https://github.com/iamkun/dayjs/issues/906)) ([97856c6](https://github.com/iamkun/dayjs/commit/97856c603ef5fbbeb1cf8a42387479e56a77dbe8))
|
||||
|
||||
## [1.8.26](https://github.com/iamkun/dayjs/compare/v1.8.25...v1.8.26) (2020-04-30)
|
||||
|
||||
|
||||
### Bug Fixes
|
||||
|
||||
* Fix Duration plugin `.toISOString` format bug ([#889](https://github.com/iamkun/dayjs/issues/889)) ([058d624](https://github.com/iamkun/dayjs/commit/058d624808fd2be024ae846bcb2e03885f39b556)), closes [#888](https://github.com/iamkun/dayjs/issues/888)
|
||||
* Fix WeekOfYear plugin bug while using BadMutable plugin ([#884](https://github.com/iamkun/dayjs/issues/884)) ([2977438](https://github.com/iamkun/dayjs/commit/2977438458542573a4500e21f7ba5d1f8442960e))
|
||||
* Update CustomParseFormat plugin strict mode ([#882](https://github.com/iamkun/dayjs/issues/882)) ([db642ac](https://github.com/iamkun/dayjs/commit/db642ac73e52e00d8c41546b2935c9e691cf66e0))
|
||||
* Update RelativeTime plugin default config ([#883](https://github.com/iamkun/dayjs/issues/883)) ([0606f42](https://github.com/iamkun/dayjs/commit/0606f425aef8ccbfc3da3e43cba368130603b0cc))
|
||||
|
||||
## [1.8.25](https://github.com/iamkun/dayjs/compare/v1.8.24...v1.8.25) (2020-04-21)
|
||||
|
||||
|
||||
### Bug Fixes
|
||||
|
||||
* Fix CustomParseFormat plugin of parsing only YYYY / YYYY-MM bug ([#873](https://github.com/iamkun/dayjs/issues/873)) ([3cea04d](https://github.com/iamkun/dayjs/commit/3cea04d33d54d44bbdd3d026b5c7f67ebf176116)), closes [#849](https://github.com/iamkun/dayjs/issues/849)
|
||||
* Fix Duration plugin get seconds ([#867](https://github.com/iamkun/dayjs/issues/867)) ([62b092d](https://github.com/iamkun/dayjs/commit/62b092d9f9a3db5506ef01f798bdf211f163f53f))
|
||||
* Fix type definition of locale ([9790b85](https://github.com/iamkun/dayjs/commit/9790b853e6113243a7f4a81dd12c6509e406a102))
|
||||
* Fix UTC plugin startOf, endOf bug ([#872](https://github.com/iamkun/dayjs/issues/872)) ([4141084](https://github.com/iamkun/dayjs/commit/4141084ba96d35cadcda3f1e661bf1d0f6c8e4de)), closes [#809](https://github.com/iamkun/dayjs/issues/809) [#808](https://github.com/iamkun/dayjs/issues/808)
|
||||
|
||||
## [1.8.24](https://github.com/iamkun/dayjs/compare/v1.8.23...v1.8.24) (2020-04-10)
|
||||
|
||||
|
||||
### Bug Fixes
|
||||
|
||||
* Add config option to RelativeTime plugin ([#851](https://github.com/iamkun/dayjs/issues/851)) ([bd24034](https://github.com/iamkun/dayjs/commit/bd24034b95bfc656024b75ef3f3c986708845fed))
|
||||
* add Duration plugin ([#858](https://github.com/iamkun/dayjs/issues/858)) ([d568273](https://github.com/iamkun/dayjs/commit/d568273223199ca0497f238e2cc3a8d3dcf32d0f))
|
||||
* Add en-in, en-tt locales ([#855](https://github.com/iamkun/dayjs/issues/855)) ([c39fb96](https://github.com/iamkun/dayjs/commit/c39fb96e2a9102c14b004c14a6c073af9d266f2f))
|
||||
* add isToday, isTomorrow, isYesterday plugins ([#857](https://github.com/iamkun/dayjs/issues/857)) ([fc08ab6](https://github.com/iamkun/dayjs/commit/fc08ab68f8a28269802deeab9d6b0473b92cdc51))
|
||||
* Add option callback to Calendar plugin ([#839](https://github.com/iamkun/dayjs/issues/839)) ([b25be90](https://github.com/iamkun/dayjs/commit/b25be9094325295310c8fc5e617fb058be8a5f68))
|
||||
* Fix monthsShort for locale fr ([#862](https://github.com/iamkun/dayjs/issues/862)) ([d2de9a0](https://github.com/iamkun/dayjs/commit/d2de9a0b44b830038ed0094f79bfd40726311f2a))
|
||||
* Update Breton locale (br) meridiem config ([#856](https://github.com/iamkun/dayjs/issues/856)) ([a2a6672](https://github.com/iamkun/dayjs/commit/a2a66720abb788a8f1cffbfd0929b35579f29c72))
|
||||
* Update Ukrainian (uk) locale relative time ([#842](https://github.com/iamkun/dayjs/issues/842)) ([578bc1a](https://github.com/iamkun/dayjs/commit/578bc1a23c6e737783bbac3da12c0ed5d1edcf82))
|
||||
|
||||
## [1.8.23](https://github.com/iamkun/dayjs/compare/v1.8.22...v1.8.23) (2020-03-16)
|
||||
|
||||
|
||||
### Bug Fixes
|
||||
|
||||
* Add Chinese (zh) locale ([f9b8945](https://github.com/iamkun/dayjs/commit/f9b89453166d8b53d33b1d7eefd9942022552e6e))
|
||||
* Fix IsoWeek plugin typescript definition ([#828](https://github.com/iamkun/dayjs/issues/828)) ([30aab0c](https://github.com/iamkun/dayjs/commit/30aab0c7bce85dfac0ae208a891def30f88b5cb4))
|
||||
* Update Arabic (ar) locale relative time ([#836](https://github.com/iamkun/dayjs/issues/836)) ([14044c6](https://github.com/iamkun/dayjs/commit/14044c6fda1229e3f0e5473d3f886bd79589b15f))
|
||||
* Update Slovak (sk) locale, Czech (cs) locale ([#833](https://github.com/iamkun/dayjs/issues/833)) ([f0d451f](https://github.com/iamkun/dayjs/commit/f0d451f795e9ebf752cd854d51b25b11de2343a3))
|
||||
* Update Thai (th) locale relativeTime ([#826](https://github.com/iamkun/dayjs/issues/826)) ([63b7c03](https://github.com/iamkun/dayjs/commit/63b7c03a6dbb0507d60776e8bad6cccde3828b88)), closes [#816](https://github.com/iamkun/dayjs/issues/816)
|
||||
|
||||
## [1.8.22](https://github.com/iamkun/dayjs/compare/v1.8.21...v1.8.22) (2020-03-08)
|
||||
|
||||
|
||||
### Bug Fixes
|
||||
|
||||
* Add IsoWeek plugin ([#811](https://github.com/iamkun/dayjs/issues/811)) ([28a2207](https://github.com/iamkun/dayjs/commit/28a2207ef9849afbac15dd29267b2e7a09cd3c16))
|
||||
* Fix unsupported locale fallback to previous one ([#819](https://github.com/iamkun/dayjs/issues/819)) ([4868715](https://github.com/iamkun/dayjs/commit/48687152cf5bee6a4c1b8ceea4bda8b9bab9be10))
|
||||
|
||||
## [1.8.21](https://github.com/iamkun/dayjs/compare/v1.8.20...v1.8.21) (2020-02-26)
|
||||
|
||||
|
||||
### Bug Fixes
|
||||
|
||||
* Set + Get accept 'D' as the short version of 'date' ([#795](https://github.com/iamkun/dayjs/issues/795)) ([523c038](https://github.com/iamkun/dayjs/commit/523c03880fa8bbad83214494ad02cd606cdb8b30))
|
||||
* Update DayOfYear plugin type ([#799](https://github.com/iamkun/dayjs/issues/799)) ([5809652](https://github.com/iamkun/dayjs/commit/5809652e40245b7759827d9bf317abdcfa75a330))
|
||||
* Update fi (Finnish) locale relativeTime ([#797](https://github.com/iamkun/dayjs/issues/797)) ([4a470fb](https://github.com/iamkun/dayjs/commit/4a470fbd6fef9e051727d0f26d53cc050b85935d))
|
||||
|
||||
## [1.8.20](https://github.com/iamkun/dayjs/compare/v1.8.19...v1.8.20) (2020-02-04)
|
||||
|
||||
|
||||
### Bug Fixes
|
||||
|
||||
* Add Bislama Locale (bi) ([#780](https://github.com/iamkun/dayjs/issues/780)) ([9ac6ab4](https://github.com/iamkun/dayjs/commit/9ac6ab481bc883dd4ecc02caab12c8b2fc218a42))
|
||||
* Fix weekOfYear plugin to support yearStart locale for better week number result ([#769](https://github.com/iamkun/dayjs/issues/769)) ([f00db36](https://github.com/iamkun/dayjs/commit/f00db36e70bc7beaca1abadeb30a9b1fbb3261ee))
|
||||
* Update et (Estonian) locale relativeTime ([#790](https://github.com/iamkun/dayjs/issues/790)) ([d8e0f45](https://github.com/iamkun/dayjs/commit/d8e0f45f6cd2d5e5704b9797929227454c92d1a5))
|
||||
* Update LocaleData plugin to support dayjs.localeData().weekdays() API ([287fed6](https://github.com/iamkun/dayjs/commit/287fed6db9eb4fd979b4861aca4dacbd32422533)), closes [#779](https://github.com/iamkun/dayjs/issues/779)
|
||||
* Update LocaleData plugin to support dayjs.months dayjs.weekdays API ([144c2ae](https://github.com/iamkun/dayjs/commit/144c2ae6e15fbf89e3acd7c8cb9e237c5f6e1348)), closes [#779](https://github.com/iamkun/dayjs/issues/779)
|
||||
* Update pl locale fusional config ([d372475](https://github.com/iamkun/dayjs/commit/d3724758bb27d5b17587b995ba14e7e80dcd1151))
|
||||
|
||||
## [1.8.19](https://github.com/iamkun/dayjs/compare/v1.8.18...v1.8.19) (2020-01-06)
|
||||
|
||||
|
||||
### Bug Fixes
|
||||
|
||||
* Add UpdateLocale plugin to update a locale's properties ([#766](https://github.com/iamkun/dayjs/issues/766)) ([82ce2ba](https://github.com/iamkun/dayjs/commit/82ce2ba8d7e402e40f6d005d400eb5356a0b0633))
|
||||
* Fix CustomParseFormat Plugin 'YYYY-MM' use first day of the month ([ba709ec](https://github.com/iamkun/dayjs/commit/ba709eca86a71ae648bc68bf67d9abdc229198d4)), closes [#761](https://github.com/iamkun/dayjs/issues/761)
|
||||
* Fix CustomParseFormat Plugin to set correct locale ([66ce23f](https://github.com/iamkun/dayjs/commit/66ce23f2e18c5506e8f1a7ef20d3483a4df80087))
|
||||
* Fix WeekOfYear Plugin wrong calender week number bug ([79b86db](https://github.com/iamkun/dayjs/commit/79b86dbbf3cfd3f1e2165b3d479a7061ad1b6925)), closes [#760](https://github.com/iamkun/dayjs/issues/760)
|
||||
* Update RelativeTime plugin to support function to make additional processing ([#767](https://github.com/iamkun/dayjs/issues/767)) ([4bd9250](https://github.com/iamkun/dayjs/commit/4bd9250fbe7131e2fddfb5fa1b3350e8c2262ca9))
|
||||
* Update ru, uk, cs locale to support relativeTime with plural ([3f080f7](https://github.com/iamkun/dayjs/commit/3f080f7d6bfdc4018cbb7c4d0112ff1ead4ef6b8))
|
||||
|
||||
## [1.8.18](https://github.com/iamkun/dayjs/compare/v1.8.17...v1.8.18) (2019-12-18)
|
||||
|
||||
|
||||
### Bug Fixes
|
||||
|
||||
* Add missing locale type definition ([#716](https://github.com/iamkun/dayjs/issues/716)) ([cde5d0b](https://github.com/iamkun/dayjs/commit/cde5d0b91be7b2f5f3098de4aa0b9a4f0f28ea5c))
|
||||
* Fix .locale() handel unsupported locale ([78ec173](https://github.com/iamkun/dayjs/commit/78ec173fcecc1299516ab7b44f4554d431b4b2fd))
|
||||
* Update Italian locale (it) ([#727](https://github.com/iamkun/dayjs/issues/727)) ([5b53e98](https://github.com/iamkun/dayjs/commit/5b53e98c0a3ba0eb9573a9c77caeb907439be9e7))
|
||||
* Update locale (fa) ([#733](https://github.com/iamkun/dayjs/issues/733)) ([9ad2e47](https://github.com/iamkun/dayjs/commit/9ad2e47e0569b23991bb0d5578f49c792c12df08))
|
||||
* Update locale (zh-cn) ([#706](https://github.com/iamkun/dayjs/issues/706)) ([e31e544](https://github.com/iamkun/dayjs/commit/e31e54414fb90e1f54da13a117748ba37f52645d))
|
||||
* Update locale (zh-cn) meridiem ([#735](https://github.com/iamkun/dayjs/issues/735)) ([15d1b81](https://github.com/iamkun/dayjs/commit/15d1b813e7faf5a1f9d1ea6fc673fd27ac49d8b1))
|
||||
* Update LocaleData plugin to support dayjs().longDateFormat() ([#734](https://github.com/iamkun/dayjs/issues/734)) ([aa0f210](https://github.com/iamkun/dayjs/commit/aa0f210a1e3c4f6aba61c3b96f9eb445b43a33f0)), closes [#680](https://github.com/iamkun/dayjs/issues/680)
|
||||
* Update Mongolian (mn) locale relativeTime ([#753](https://github.com/iamkun/dayjs/issues/753)) ([6d51435](https://github.com/iamkun/dayjs/commit/6d51435092c0c94d8e50256d3f0f058cdd15febe))
|
||||
* Update Swedish locale (sv) fix ordinal error ([#745](https://github.com/iamkun/dayjs/issues/745)) ([49670d5](https://github.com/iamkun/dayjs/commit/49670d5ae31e4e21636cc5a8bfe35fef0f6d9e4a)), closes [#743](https://github.com/iamkun/dayjs/issues/743)
|
||||
|
||||
## [1.8.17](https://github.com/iamkun/dayjs/compare/v1.8.16...v1.8.17) (2019-11-06)
|
||||
|
||||
|
||||
### Bug Fixes
|
||||
|
||||
* Fix set utcOffset in utc mode ([d148115](https://github.com/iamkun/dayjs/commit/d148115dad8f1a5afc0a64e9b8163dfeba4616b6))
|
||||
* Update advancedFormat plugin to support w ww wo week tokens … ([#678](https://github.com/iamkun/dayjs/issues/678)) ([26cfa63](https://github.com/iamkun/dayjs/commit/26cfa63a524b803f7966dac5464f9cbf8f63387e)), closes [#676](https://github.com/iamkun/dayjs/issues/676)
|
||||
* Update ka locale weekdays ([f8ca3d4](https://github.com/iamkun/dayjs/commit/f8ca3d4ba1d3cbe41613d3909c0627935a51a0c4))
|
||||
* Update nb locale ([#679](https://github.com/iamkun/dayjs/issues/679)) ([1063b0e](https://github.com/iamkun/dayjs/commit/1063b0e1b5c19a1354d233cc0f21438e7073233a))
|
||||
* Update Polish locale (pl)([#713](https://github.com/iamkun/dayjs/issues/713)) ([30d2f02](https://github.com/iamkun/dayjs/commit/30d2f026b47188833a4f44fee4bab52467d4a718))
|
||||
* Update Ukrainian locale (uk) ([#710](https://github.com/iamkun/dayjs/issues/710)) ([360161c](https://github.com/iamkun/dayjs/commit/360161cac75f597fdd51d9d1ff138601282a1b4b))
|
||||
* UTC plugin set utcOffset value ([#668](https://github.com/iamkun/dayjs/issues/668)) ([8877883](https://github.com/iamkun/dayjs/commit/88778838e71dd309e79cd1a8094d5bea36ca3390))
|
||||
|
||||
## [1.8.16](https://github.com/iamkun/dayjs/compare/v1.8.15...v1.8.16) (2019-08-27)
|
||||
|
||||
|
||||
### Bug Fixes
|
||||
|
||||
* Fix relativeTime Plugin .FromNow() result error in UTC mode ([a385d5c](https://github.com/iamkun/dayjs/commit/a385d5c))
|
||||
* Handle locale in WeekOfYear plugin ([#658](https://github.com/iamkun/dayjs/issues/658)) ([0e45b0a](https://github.com/iamkun/dayjs/commit/0e45b0a))
|
||||
* LocaleData plugin returns all months and weekdays data when pas no argument ([#645](https://github.com/iamkun/dayjs/issues/645)) ([95e70b4](https://github.com/iamkun/dayjs/commit/95e70b4))
|
||||
* Return null in toJSON if not valid ([#633](https://github.com/iamkun/dayjs/issues/633)) ([19affc8](https://github.com/iamkun/dayjs/commit/19affc8))
|
||||
* Update Danish (da) locale ([#626](https://github.com/iamkun/dayjs/issues/626)) ([ac2ec77](https://github.com/iamkun/dayjs/commit/ac2ec77))
|
||||
* Update Korean locale meridiem ([#642](https://github.com/iamkun/dayjs/issues/642)) ([b457146](https://github.com/iamkun/dayjs/commit/b457146))
|
||||
* update Occitan locale Catalan locale ([#630](https://github.com/iamkun/dayjs/issues/630)) ([fef135e](https://github.com/iamkun/dayjs/commit/fef135e))
|
||||
* update pt-br locale ([#628](https://github.com/iamkun/dayjs/issues/628)) ([ccf596d](https://github.com/iamkun/dayjs/commit/ccf596d))
|
||||
* Update weekdaysShort to some locale files ([#643](https://github.com/iamkun/dayjs/issues/643)) ([cc1f15f](https://github.com/iamkun/dayjs/commit/cc1f15f))
|
||||
|
||||
## [1.8.15](https://github.com/iamkun/dayjs/compare/v1.8.14...v1.8.15) (2019-07-08)
|
||||
|
||||
|
||||
### Bug Fixes
|
||||
|
||||
* Fix dayjs.locale() returns current global locale ([#602](https://github.com/iamkun/dayjs/issues/602)) ([790cd1a](https://github.com/iamkun/dayjs/commit/790cd1a))
|
||||
* Fix incorrect Thai locale translation of July ([#607](https://github.com/iamkun/dayjs/issues/607)) ([43cbfd3](https://github.com/iamkun/dayjs/commit/43cbfd3))
|
||||
* Lowercase french locale months and weekdays ([#615](https://github.com/iamkun/dayjs/issues/615)) ([e5a257c](https://github.com/iamkun/dayjs/commit/e5a257c))
|
||||
* Type - Export Ls object to query all available locales ([#623](https://github.com/iamkun/dayjs/issues/623)) ([f6bfae0](https://github.com/iamkun/dayjs/commit/f6bfae0))
|
||||
* Update nb (Norsk Bokmål) locale ([#604](https://github.com/iamkun/dayjs/issues/604)) ([907f5c9](https://github.com/iamkun/dayjs/commit/907f5c9))
|
||||
* Update types of `.diff` API ([#617](https://github.com/iamkun/dayjs/issues/617)) ([f0f43d2](https://github.com/iamkun/dayjs/commit/f0f43d2))
|
||||
|
||||
## [1.8.14](https://github.com/iamkun/dayjs/compare/v1.8.13...v1.8.14) (2019-05-07)
|
||||
|
||||
|
||||
### Bug Fixes
|
||||
|
||||
* Fix `.format` API returns UTC offset when value is 0 bug ([b254964](https://github.com/iamkun/dayjs/commit/b254964))
|
||||
* Fix QuarterOfYear plugin bug ([#591](https://github.com/iamkun/dayjs/issues/591)) ([434f774](https://github.com/iamkun/dayjs/commit/434f774))
|
||||
* Fix UTC plugin add day DST bug ([#590](https://github.com/iamkun/dayjs/issues/590)) ([86cd839](https://github.com/iamkun/dayjs/commit/86cd839))
|
||||
|
||||
## [1.8.13](https://github.com/iamkun/dayjs/compare/v1.8.12...v1.8.13) (2019-04-26)
|
||||
|
||||
|
||||
### Bug Fixes
|
||||
|
||||
* Add missing relativeTime and formats for some locales ([#560](https://github.com/iamkun/dayjs/issues/560)) ([96b917e](https://github.com/iamkun/dayjs/commit/96b917e))
|
||||
* Add weekday (locale aware day of the week) plugin ([#569](https://github.com/iamkun/dayjs/issues/569)) ([9007cc5](https://github.com/iamkun/dayjs/commit/9007cc5)), closes [#559](https://github.com/iamkun/dayjs/issues/559)
|
||||
* Allow customizing "am" / "pm" strings with locale meridiem function ([#580](https://github.com/iamkun/dayjs/issues/580)) ([576e93e](https://github.com/iamkun/dayjs/commit/576e93e)), closes [#578](https://github.com/iamkun/dayjs/issues/578)
|
||||
* Fix `.add` day/week decimal rouding bug ([800f6c9](https://github.com/iamkun/dayjs/commit/800f6c9))
|
||||
* Fix `.diff` type definition error ([#565](https://github.com/iamkun/dayjs/issues/565)) ([c4921ae](https://github.com/iamkun/dayjs/commit/c4921ae)), closes [#561](https://github.com/iamkun/dayjs/issues/561)
|
||||
* Fix CustomParseFormat plugin bug ([#568](https://github.com/iamkun/dayjs/issues/568)) ([1f5a9db](https://github.com/iamkun/dayjs/commit/1f5a9db)), closes [#555](https://github.com/iamkun/dayjs/issues/555)
|
||||
* Fix relativeTime plugin Math.round bug ([40bea40](https://github.com/iamkun/dayjs/commit/40bea40))
|
||||
* skip square brackets in buddhistEra, advancedFormat plugins ([#556](https://github.com/iamkun/dayjs/issues/556)) ([9279718](https://github.com/iamkun/dayjs/commit/9279718)), closes [#554](https://github.com/iamkun/dayjs/issues/554)
|
||||
* Update Indonesian locale([#574](https://github.com/iamkun/dayjs/issues/574)) ([0aa7143](https://github.com/iamkun/dayjs/commit/0aa7143))
|
||||
* Update locale month to support both array and function ([#581](https://github.com/iamkun/dayjs/issues/581)) ([b6599d3](https://github.com/iamkun/dayjs/commit/b6599d3))
|
||||
* Update LocalizedFormat plugin lowercase formats logic ([#557](https://github.com/iamkun/dayjs/issues/557)) ([d409304](https://github.com/iamkun/dayjs/commit/d409304))
|
||||
|
||||
## [1.8.12](https://github.com/iamkun/dayjs/compare/v1.8.11...v1.8.12) (2019-04-02)
|
||||
|
||||
|
||||
### Bug Fixes
|
||||
|
||||
* Add .get API ([7318797](https://github.com/iamkun/dayjs/commit/7318797))
|
||||
* Add 79 locales ([#541](https://github.com/iamkun/dayjs/issues/541)) ([f75a125](https://github.com/iamkun/dayjs/commit/f75a125))
|
||||
* Add Calendar plugin ([d1b9cf9](https://github.com/iamkun/dayjs/commit/d1b9cf9))
|
||||
* Add isoWeeksInYear plugin ([2db8631](https://github.com/iamkun/dayjs/commit/2db8631))
|
||||
* Add Occitan (oc-lnc) locale file ([#551](https://github.com/iamkun/dayjs/issues/551)) ([c30b715](https://github.com/iamkun/dayjs/commit/c30b715))
|
||||
* Add plugin minMax to sopport .max .min ([2870a23](https://github.com/iamkun/dayjs/commit/2870a23))
|
||||
* Fix set Month Year error in last day of the month ([d058f4a](https://github.com/iamkun/dayjs/commit/d058f4a))
|
||||
* Update ko locale weekdaysShort ([#543](https://github.com/iamkun/dayjs/issues/543)) ([317fd3e](https://github.com/iamkun/dayjs/commit/317fd3e))
|
||||
* Update localizedFormat plugin to support lowercase localizable formats (l, ll, lll, llll) ([#546](https://github.com/iamkun/dayjs/issues/546)) ([f2b5ebf](https://github.com/iamkun/dayjs/commit/f2b5ebf))
|
||||
|
||||
## [1.8.11](https://github.com/iamkun/dayjs/compare/v1.8.10...v1.8.11) (2019-03-21)
|
||||
|
||||
|
||||
### Bug Fixes
|
||||
|
||||
* Add .add('quarter') .startOf('quarter') through plugin quarterOfYear ([dde39e9](https://github.com/iamkun/dayjs/commit/dde39e9)), closes [#537](https://github.com/iamkun/dayjs/issues/537) [#531](https://github.com/iamkun/dayjs/issues/531)
|
||||
* Add locale support for Azerbaijani language (az) ([#535](https://github.com/iamkun/dayjs/issues/535)) ([eeb20fa](https://github.com/iamkun/dayjs/commit/eeb20fa))
|
||||
* Correct typescript definition `add` ([22a249c](https://github.com/iamkun/dayjs/commit/22a249c)), closes [#531](https://github.com/iamkun/dayjs/issues/531)
|
||||
* Fix CustomParseFormat plugin formatting bug ([#536](https://github.com/iamkun/dayjs/issues/536)) ([8578546](https://github.com/iamkun/dayjs/commit/8578546)), closes [#533](https://github.com/iamkun/dayjs/issues/533)
|
||||
* Update pt locale ([#538](https://github.com/iamkun/dayjs/issues/538)) ([1ac9e1e](https://github.com/iamkun/dayjs/commit/1ac9e1e))
|
||||
|
||||
## [1.8.10](https://github.com/iamkun/dayjs/compare/v1.8.9...v1.8.10) (2019-03-10)
|
||||
|
||||
|
||||
### Bug Fixes
|
||||
|
||||
* **locale:** Add nepali (ne) locale ([#524](https://github.com/iamkun/dayjs/issues/524)) ([bdbec01](https://github.com/iamkun/dayjs/commit/bdbec01))
|
||||
* Add WeekYear plugin ([a892608](https://github.com/iamkun/dayjs/commit/a892608))
|
||||
* API .locale() with no argument should return current locale name string ([8d63d88](https://github.com/iamkun/dayjs/commit/8d63d88))
|
||||
* CustomParseFormat correct parse HH:mm:ss with only one digit like 0:12:10 ([600d547](https://github.com/iamkun/dayjs/commit/600d547))
|
||||
* CustomParseFormat plugin parse Do format string ([bf27fda](https://github.com/iamkun/dayjs/commit/bf27fda)), closes [#522](https://github.com/iamkun/dayjs/issues/522)
|
||||
* Expand setters like .year(2000) .hour(12) ([ac532a0](https://github.com/iamkun/dayjs/commit/ac532a0))
|
||||
* Move toObject, toArray API to separate plugin from core ([40a3431](https://github.com/iamkun/dayjs/commit/40a3431))
|
||||
|
||||
## [1.8.9](https://github.com/iamkun/dayjs/compare/v1.8.8...v1.8.9) (2019-03-06)
|
||||
|
||||
|
||||
### Features
|
||||
|
||||
* Add UTC mode with UTC plugin ([#517](https://github.com/iamkun/dayjs/issues/517)) ([caf335c](https://github.com/iamkun/dayjs/commit/caf335c))
|
||||
|
||||
> For plugin developers: Please note, we have changed the name of some method in `Utils` in order to reduce the file size. ([#517](https://github.com/iamkun/dayjs/issues/517)) ([detail](https://github.com/iamkun/dayjs/pull/517/files#diff-2b4ca49d4bb0a774c4d4c1672d7aa781R46))
|
||||
|
||||
### Bug Fixes
|
||||
|
||||
* Add locale de-AT ([#515](https://github.com/iamkun/dayjs/issues/515)) ([d93f7b6](https://github.com/iamkun/dayjs/commit/d93f7b6))
|
||||
* Add locale zh-hk ([#516](https://github.com/iamkun/dayjs/issues/516)) ([5fc05a6](https://github.com/iamkun/dayjs/commit/5fc05a6))
|
||||
|
||||
## [1.8.8](https://github.com/iamkun/dayjs/compare/v1.8.7...v1.8.8) (2019-02-25)
|
||||
|
||||
|
||||
### Bug Fixes
|
||||
|
||||
* Update relativeTime plugin type definition ([de56f2c](https://github.com/iamkun/dayjs/commit/de56f2c))
|
||||
|
||||
## [1.8.7](https://github.com/iamkun/dayjs/compare/v1.8.6...v1.8.7) (2019-02-24)
|
||||
|
||||
|
||||
### Bug Fixes
|
||||
|
||||
* Add plugin type definitions ([#418](https://github.com/iamkun/dayjs/issues/418)) ([361d437](https://github.com/iamkun/dayjs/commit/361d437))
|
||||
* Add Swahili locale ([#508](https://github.com/iamkun/dayjs/issues/508)) ([b9cee84](https://github.com/iamkun/dayjs/commit/b9cee84))
|
||||
* Parse month string 'MMMM MMM (February, Feb)' in customParseFormat ([#457](https://github.com/iamkun/dayjs/issues/457)) ([f343206](https://github.com/iamkun/dayjs/commit/f343206))
|
||||
* Update declaration file .diff .isBefore .isSame .isAfter ([#496](https://github.com/iamkun/dayjs/issues/496)) ([4523275](https://github.com/iamkun/dayjs/commit/4523275))
|
||||
* Word orders corrections for locale 'fa' ([#491](https://github.com/iamkun/dayjs/issues/491)) ([56050c2](https://github.com/iamkun/dayjs/commit/56050c2))
|
||||
|
||||
## [1.8.6](https://github.com/iamkun/dayjs/compare/v1.8.5...v1.8.6) (2019-02-14)
|
||||
|
||||
|
||||
### Bug Fixes
|
||||
|
||||
* Add Bahasa Melayu (Malaysia) locale ([#485](https://github.com/iamkun/dayjs/issues/485)) ([cb208b0](https://github.com/iamkun/dayjs/commit/cb208b0))
|
||||
* Copy & export built-in en locale to /locale folder as a separate file ([a7e05e0](https://github.com/iamkun/dayjs/commit/a7e05e0))
|
||||
* Fix bug in customParseFormat plugin while month(MM) is '01' ([9884ca5](https://github.com/iamkun/dayjs/commit/9884ca5)), closes [#494](https://github.com/iamkun/dayjs/issues/494)
|
||||
* Fix startOf week bug while week start is not Sunday ([5eaf77b](https://github.com/iamkun/dayjs/commit/5eaf77b))
|
||||
* Implemented isBetween inclusivity ([#464](https://github.com/iamkun/dayjs/issues/464)) ([af2f4f1](https://github.com/iamkun/dayjs/commit/af2f4f1))
|
||||
* Update Swedish and Finnish locales ([#488](https://github.com/iamkun/dayjs/issues/488)) ([f142082](https://github.com/iamkun/dayjs/commit/f142082))
|
||||
* Fix commonJS require ES Module bug in webpack4 ([23f9f3d](https://github.com/iamkun/dayjs/commit/23f9f3d)), check [#492](https://github.com/iamkun/dayjs/issues/492)
|
||||
|
||||
> Get access to ESM code with `import dayjs from 'dayjs/esm'`
|
||||
|
||||
## [1.8.5](https://github.com/iamkun/dayjs/compare/v1.8.4...v1.8.5) (2019-02-07)
|
||||
|
||||
|
||||
### Bug Fixes
|
||||
|
||||
* Add en-gb locale ([#478](https://github.com/iamkun/dayjs/issues/478)) ([508c3a7](https://github.com/iamkun/dayjs/commit/508c3a7))
|
||||
* **module:** transpile everything except ES6 modules in the 'module' entrypoint ([#477](https://github.com/iamkun/dayjs/issues/477)) ([#480](https://github.com/iamkun/dayjs/issues/480)) ([#482](https://github.com/iamkun/dayjs/issues/482)) ([767017d](https://github.com/iamkun/dayjs/commit/767017d))
|
||||
* update customParseFormat plugin support hh:mm ([54947cc](https://github.com/iamkun/dayjs/commit/54947cc)), closes [#484](https://github.com/iamkun/dayjs/issues/484)
|
||||
* Update module in package.json ([5c5a7a0](https://github.com/iamkun/dayjs/commit/5c5a7a0))
|
||||
|
||||
## [1.8.4](https://github.com/iamkun/dayjs/compare/v1.8.3...v1.8.4) (2019-02-05)
|
||||
|
||||
* Allow set start day of week in locale && Allow set week in weekOfYear plugin ([1295591](https://github.com/iamkun/dayjs/commit/1295591))
|
||||
### Bug Fixes
|
||||
* update all locale files with correct week start ([5b03412](https://github.com/iamkun/dayjs/commit/5b03412))
|
||||
* update es es-do locale adding weekStart && update weekStart test ([66e42ec](https://github.com/iamkun/dayjs/commit/66e42ec))
|
||||
* Revert default export ([b00da1b](https://github.com/iamkun/dayjs/commit/b00da1b))
|
||||
|
||||
## [1.8.3](https://github.com/iamkun/dayjs/compare/v1.8.2...v1.8.3) (2019-02-04)
|
||||
|
||||
|
||||
### Bug Fixes
|
||||
|
||||
* fix ios safari YYYY-MM-DD HH:mm parse BUG ([e02ae82](https://github.com/iamkun/dayjs/commit/e02ae82)), closes [#254](https://github.com/iamkun/dayjs/issues/254)
|
||||
|
||||
## [1.8.2](https://github.com/iamkun/dayjs/compare/v1.8.1...v1.8.2) (2019-02-02)
|
||||
|
||||
|
||||
### Bug Fixes
|
||||
|
||||
* Add missing czech language locale ([#461](https://github.com/iamkun/dayjs/issues/461)) ([7e04004](https://github.com/iamkun/dayjs/commit/7e04004))
|
||||
* Add utcOffset api method and fix calculating diff error in DST ([#453](https://github.com/iamkun/dayjs/issues/453)) ([ce2e30e](https://github.com/iamkun/dayjs/commit/ce2e30e))
|
||||
* Fix it locale error ([#458](https://github.com/iamkun/dayjs/issues/458)) ([f6d9a64](https://github.com/iamkun/dayjs/commit/f6d9a64))
|
||||
* Add DayOfYear plugin (#454)
|
||||
* Fix es locale monthsShort error
|
||||
|
||||
## [1.8.1](https://github.com/iamkun/dayjs/compare/v1.8.0...v1.8.1) (2019-02-02)
|
||||
|
||||
* Add LocalizedFormat plugin supplying format like LTS, LT, LLLL
|
||||
|
||||
* <del>update declaration File with default export (#278)</del>
|
||||
> <del>From v1.8.1, in TypeScript Project, just `import from dayjs from 'dayjs'`</del>
|
||||
* add ES2015 module support (#451)
|
||||
|
||||
### Performance Improvements
|
||||
|
||||
* **format:** reuse matches instead of created when replacing ([#441](https://github.com/iamkun/dayjs/issues/441)) ([10b79d8](https://github.com/iamkun/dayjs/commit/10b79d8))
|
||||
|
||||
# [1.8.0](https://github.com/iamkun/dayjs/compare/v1.7.8...v1.8.0) (2019-01-14)
|
||||
|
||||
|
||||
### Features
|
||||
|
||||
* add CustomParseFormat plugin and QuarterOfYear plugin ([#450](https://github.com/iamkun/dayjs/issues/450)) ([8f6f63c](https://github.com/iamkun/dayjs/commit/8f6f63c))
|
||||
|
||||
## [1.7.8](https://github.com/iamkun/dayjs/compare/v1.7.7...v1.7.8) (2018-12-13)
|
||||
|
||||
|
||||
### Feature
|
||||
|
||||
* update isSame isBefore isAfter supports units ([fd65464](https://github.com/iamkun/dayjs/commit/fd65464))
|
||||
|
||||
* add greek lithuanian locales
|
||||
|
||||
## [1.7.7](https://github.com/iamkun/dayjs/compare/v1.7.6...v1.7.7) (2018-09-26)
|
||||
|
||||
|
||||
### Bug Fixes
|
||||
|
||||
* **DST:** fix daylight saving time DST bug && add test ([#354](https://github.com/iamkun/dayjs/issues/354)) ([6fca6d5](https://github.com/iamkun/dayjs/commit/6fca6d5))
|
||||
|
||||
## [1.7.6](https://github.com/iamkun/dayjs/compare/v1.7.5...v1.7.6) (2018-09-25)
|
||||
|
||||
|
||||
### Bug Fixes
|
||||
|
||||
* **add dayjs.unix:** add dayjs.unix to parse timestamp in seconds && locale update ([5711c5e](https://github.com/iamkun/dayjs/commit/5711c5e))
|
||||
|
||||
## [1.7.5](https://github.com/iamkun/dayjs/compare/v1.7.4...v1.7.5) (2018-08-10)
|
||||
|
||||
|
||||
### Bug Fixes
|
||||
|
||||
* add isBetween API & update ([b5fc3d1](https://github.com/iamkun/dayjs/commit/b5fc3d1))
|
||||
|
||||
## [1.7.4](https://github.com/iamkun/dayjs/compare/v1.7.3...v1.7.4) (2018-07-11)
|
||||
|
||||
|
||||
### Bug Fixes
|
||||
|
||||
* update set week logic ([60b6325](https://github.com/iamkun/dayjs/commit/60b6325)), closes [#276](https://github.com/iamkun/dayjs/issues/276)
|
||||
|
||||
## [1.7.3](https://github.com/iamkun/dayjs/compare/v1.7.2...v1.7.3) (2018-07-10)
|
||||
|
||||
|
||||
### Bug Fixes
|
||||
|
||||
* **locale-nl:** set correct weekdays and months ([6d089d7](https://github.com/iamkun/dayjs/commit/6d089d7))
|
||||
|
||||
## [1.7.2](https://github.com/iamkun/dayjs/compare/v1.7.1...v1.7.2) (2018-07-04)
|
||||
|
||||
|
||||
### Bug Fixes
|
||||
|
||||
* DEPRECATED isLeapYear, use IsLeapYear plugin instead ([e2e5116](https://github.com/iamkun/dayjs/commit/e2e5116))
|
||||
|
||||
## [1.7.1](https://github.com/iamkun/dayjs/compare/v1.7.0...v1.7.1) (2018-07-03)
|
||||
|
||||
|
||||
### Bug Fixes
|
||||
|
||||
* fix week() error near the end of the year ([fa03689](https://github.com/iamkun/dayjs/commit/fa03689))
|
||||
|
||||
# [1.7.0](https://github.com/iamkun/dayjs/compare/v1.6.10...v1.7.0) (2018-07-02)
|
||||
|
||||
|
||||
### Features
|
||||
|
||||
* Added method `.week()` to retrieve week of the year ([e1c1b1c](https://github.com/iamkun/dayjs/commit/e1c1b1c))
|
||||
* Updated Japanese locae
|
||||
|
||||
## [1.6.10](https://github.com/iamkun/dayjs/compare/v1.6.9...v1.6.10) (2018-06-25)
|
||||
|
||||
|
||||
### Bug Fixes
|
||||
|
||||
* Add relative locales to russian language ([c7e9898](https://github.com/iamkun/dayjs/commit/c7e9898)), closes [#256](https://github.com/iamkun/dayjs/issues/256)
|
||||
|
||||
## [1.6.9](https://github.com/iamkun/dayjs/compare/v1.6.8...v1.6.9) (2018-06-14)
|
||||
|
||||
|
||||
### Bug Fixes
|
||||
|
||||
* add isDayjs => boolean API ([6227c8b](https://github.com/iamkun/dayjs/commit/6227c8b))
|
||||
|
||||
## [1.6.8](https://github.com/iamkun/dayjs/compare/v1.6.7...v1.6.8) (2018-06-14)
|
||||
|
||||
|
||||
### Bug Fixes
|
||||
|
||||
* fix Advanced format bug in zh-cn ([0c07874](https://github.com/iamkun/dayjs/commit/0c07874)), closes [#242](https://github.com/iamkun/dayjs/issues/242)
|
||||
|
||||
## [1.6.7](https://github.com/iamkun/dayjs/compare/v1.6.6...v1.6.7) (2018-06-11)
|
||||
|
||||
|
||||
### Bug Fixes
|
||||
|
||||
* fix id locale ([1ebbeb8](https://github.com/iamkun/dayjs/commit/1ebbeb8)), closes [#234](https://github.com/iamkun/dayjs/issues/234)
|
||||
|
||||
<a name="1.6.6"></a>
|
||||
## [1.6.6](https://github.com/iamkun/dayjs/compare/v1.6.5...v1.6.6) (2018-06-06)
|
||||
|
||||
|
||||
### Bug Fixes
|
||||
|
||||
* format API update and locale file update ([5ca48f0](https://github.com/iamkun/dayjs/commit/5ca48f0)), closes [#228](https://github.com/iamkun/dayjs/issues/228)
|
||||
|
||||
<a name="1.6.5"></a>
|
||||
## [1.6.5](https://github.com/iamkun/dayjs/compare/v1.6.4...v1.6.5) (2018-05-31)
|
||||
|
||||
|
||||
### Bug Fixes
|
||||
|
||||
* bugfix, utils update and locale file update ([ebcb6d5](https://github.com/iamkun/dayjs/commit/ebcb6d5)), closes [#214](https://github.com/iamkun/dayjs/issues/214)
|
||||
|
||||
<a name="1.6.4"></a>
|
||||
## [1.6.4](https://github.com/iamkun/dayjs/compare/v1.6.3...v1.6.4) (2018-05-25)
|
||||
|
||||
|
||||
### Bug Fixes
|
||||
|
||||
* add RelativeTime plugin and locale file update ([c1fbbca](https://github.com/iamkun/dayjs/commit/c1fbbca)), closes [#198](https://github.com/iamkun/dayjs/issues/198)
|
||||
|
||||
<a name="1.6.3"></a>
|
||||
## [1.6.3](https://github.com/iamkun/dayjs/compare/v1.6.2...v1.6.3) (2018-05-21)
|
||||
|
||||
|
||||
### Bug Fixes
|
||||
|
||||
* Changing locales locally is immutable from this release ([2cce729](https://github.com/iamkun/dayjs/commit/2cce729)), closes [#182](https://github.com/iamkun/dayjs/issues/182)
|
||||
* instance locale change should be immutable ([84597c9](https://github.com/iamkun/dayjs/commit/84597c9))
|
||||
* Add more locales
|
||||
* english ordinal fix
|
||||
|
||||
<a name="1.6.2"></a>
|
||||
## [1.6.2](https://github.com/iamkun/dayjs/compare/v1.6.1...v1.6.2) (2018-05-18)
|
||||
|
||||
|
||||
### Bug Fixes
|
||||
|
||||
* change-log update && test new npm release ([aa49cba](https://github.com/iamkun/dayjs/commit/aa49cba)), closes [#163](https://github.com/iamkun/dayjs/issues/163)
|
||||
|
||||
<a name="1.6.1"></a>
|
||||
## [1.6.1](https://github.com/iamkun/dayjs/compare/v1.6.0...v1.6.1) (2018-05-18)
|
||||
|
||||
|
||||
### Bug Fixes
|
||||
|
||||
* Add German, Brazilian Portuguese locales
|
||||
* add() & parse() bug fix & add locale de, pt-br ([bf1331e](https://github.com/iamkun/dayjs/commit/bf1331e))
|
||||
|
||||
<a name="1.6.0"></a>
|
||||
# [1.6.0](https://github.com/iamkun/dayjs/compare/v1.5.24...v1.6.0) (2018-05-15)
|
||||
|
||||
|
||||
### Features
|
||||
|
||||
* Locale && Plugin ([2342c55](https://github.com/iamkun/dayjs/commit/2342c55)), closes [#141](https://github.com/iamkun/dayjs/issues/141)
|
|
@ -0,0 +1,21 @@
|
|||
MIT License
|
||||
|
||||
Copyright (c) 2018-present, iamkun
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
of this software and associated documentation files (the "Software"), to deal
|
||||
in the Software without restriction, including without limitation the rights
|
||||
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||
copies of the Software, and to permit persons to whom the Software is
|
||||
furnished to do so, subject to the following conditions:
|
||||
|
||||
The above copyright notice and this permission notice shall be included in all
|
||||
copies or substantial portions of the Software.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||
SOFTWARE.
|
|
@ -0,0 +1,149 @@
|
|||
English | [简体中文](./docs/zh-cn/README.zh-CN.md) | [日本語](./docs/ja/README-ja.md) | [Português Brasileiro](./docs/pt-br/README-pt-br.md) | [한국어](./docs/ko/README-ko.md) | [Español (España)](./docs/es-es/README-es-es.md) | [Русский](./docs/ru/README-ru.md) | [Türkçe](./docs/tr/README-tr.md) | [සිංහල](./docs/si/README-si.md) | [עברית](./docs/he/README-he.md)
|
||||
|
||||
<p align="center"><a href="https://day.js.org/" target="_blank" rel="noopener noreferrer"><img width="550"
|
||||
src="https://user-images.githubusercontent.com/17680888/39081119-3057bbe2-456e-11e8-862c-646133ad4b43.png"
|
||||
alt="Day.js" /></a></p>
|
||||
<p align="center">Fast <b>2kB</b> alternative to Moment.js with the same modern API</p>
|
||||
<p align="center">
|
||||
<a href="https://unpkg.com/dayjs/dayjs.min.js"><img
|
||||
src="https://img.badgesize.io/https://unpkg.com/dayjs/dayjs.min.js?compression=gzip&style=flat-square"
|
||||
alt="Gzip Size"></a>
|
||||
<a href="https://www.npmjs.com/package/dayjs"><img src="https://img.shields.io/npm/v/dayjs.svg?style=flat-square&colorB=51C838"
|
||||
alt="NPM Version"></a>
|
||||
<a href="https://travis-ci.com/iamkun/dayjs"><img
|
||||
src="https://img.shields.io/travis/iamkun/dayjs/master.svg?style=flat-square" alt="Build Status"></a>
|
||||
<a href="https://codecov.io/gh/iamkun/dayjs"><img
|
||||
src="https://img.shields.io/codecov/c/github/iamkun/dayjs/master.svg?style=flat-square" alt="Codecov"></a>
|
||||
<a href="https://github.com/iamkun/dayjs/blob/master/LICENSE"><img
|
||||
src="https://img.shields.io/badge/license-MIT-brightgreen.svg?style=flat-square" alt="License"></a>
|
||||
<br>
|
||||
<a href="https://saucelabs.com/u/dayjs">
|
||||
<img width="750" src="https://user-images.githubusercontent.com/17680888/40040137-8e3323a6-584b-11e8-9dba-bbe577ee8a7b.png" alt="Sauce Test Status">
|
||||
</a>
|
||||
</p>
|
||||
|
||||
> Day.js is a minimalist JavaScript library that parses, validates, manipulates, and displays dates and times for modern browsers with a largely Moment.js-compatible API. If you use Moment.js, you already know how to use Day.js.
|
||||
|
||||
```js
|
||||
dayjs().startOf('month').add(1, 'day').set('year', 2018).format('YYYY-MM-DD HH:mm:ss');
|
||||
```
|
||||
|
||||
* 🕒 Familiar Moment.js API & patterns
|
||||
* 💪 Immutable
|
||||
* 🔥 Chainable
|
||||
* 🌐 I18n support
|
||||
* 📦 2kb mini library
|
||||
* 👫 All browsers supported
|
||||
|
||||
---
|
||||
|
||||
## Getting Started
|
||||
|
||||
### Documentation
|
||||
|
||||
You can find more details, API, and other docs on [day.js.org](https://day.js.org/) website.
|
||||
|
||||
### Installation
|
||||
|
||||
```console
|
||||
npm install dayjs --save
|
||||
```
|
||||
|
||||
📚[Installation Guide](https://day.js.org/docs/en/installation/installation)
|
||||
|
||||
### API
|
||||
|
||||
It's easy to use Day.js APIs to parse, validate, manipulate, and display dates and times.
|
||||
|
||||
```javascript
|
||||
dayjs('2018-08-08') // parse
|
||||
|
||||
dayjs().format('{YYYY} MM-DDTHH:mm:ss SSS [Z] A') // display
|
||||
|
||||
dayjs().set('month', 3).month() // get & set
|
||||
|
||||
dayjs().add(1, 'year') // manipulate
|
||||
|
||||
dayjs().isBefore(dayjs()) // query
|
||||
```
|
||||
|
||||
📚[API Reference](https://day.js.org/docs/en/parse/parse)
|
||||
|
||||
### I18n
|
||||
|
||||
Day.js has great support for internationalization.
|
||||
|
||||
But none of them will be included in your build unless you use it.
|
||||
|
||||
```javascript
|
||||
import 'dayjs/locale/es' // load on demand
|
||||
|
||||
dayjs.locale('es') // use Spanish locale globally
|
||||
|
||||
dayjs('2018-05-05').locale('zh-cn').format() // use Chinese Simplified locale in a specific instance
|
||||
```
|
||||
|
||||
📚[Internationalization](https://day.js.org/docs/en/i18n/i18n)
|
||||
|
||||
### Plugin
|
||||
|
||||
A plugin is an independent module that can be added to Day.js to extend functionality or add new features.
|
||||
|
||||
```javascript
|
||||
import advancedFormat from 'dayjs/plugin/advancedFormat' // load on demand
|
||||
|
||||
dayjs.extend(advancedFormat) // use plugin
|
||||
|
||||
dayjs().format('Q Do k kk X x') // more available formats
|
||||
```
|
||||
|
||||
📚[Plugin List](https://day.js.org/docs/en/plugin/plugin)
|
||||
|
||||
## Sponsors
|
||||
|
||||
Support this project by becoming a sponsor. Your logo will show up here with a link to your website.
|
||||
|
||||
[[Become a sponsor via Github](https://github.com/sponsors/iamkun/)] [[Become a sponsor via OpenCollective](https://opencollective.com/dayjs#sponsor)]
|
||||
|
||||
<a href="https://toyokumo.co.jp" target="_blank">
|
||||
<img width="70" src="https://user-images.githubusercontent.com/17680888/197092231-2367b5eb-1e43-467e-a311-23f7cd97b086.png">
|
||||
</a>
|
||||
|
||||
<a href="https://github.com/alan-eu" target="_blank">
|
||||
<img width="70" src="https://avatars.githubusercontent.com/u/18175329?s=52&v=4">
|
||||
</a>
|
||||
|
||||
<a href="https://opencollective.com/sight-and-sound-ministries" target="_blank">
|
||||
<img width="70" src="https://user-images.githubusercontent.com/17680888/232316426-cb99b4cf-0ccb-4e73-a6ce-e16dba6aadf4.png">
|
||||
</a>
|
||||
|
||||
<a href="https://www.exoflare.com/open-source/?utm_source=dayjs&utm_campaign=open_source" target="_blank">
|
||||
<img width="70" src="https://user-images.githubusercontent.com/17680888/162761622-1407a849-0c41-4591-8aa9-f98114ec2092.png">
|
||||
</a>
|
||||
|
||||
<a href="https://rxdb.info/?utm_source=day.js.org&utm_medium=banner&utm_campaign=day.js.org-sponsored" target="_blank"><img width="70" src="https://user-images.githubusercontent.com/17680888/200301812-9c9bd523-5dc4-4cab-b380-543fbcd3802c.svg"></a>
|
||||
|
||||
<a href="https://github.com/vendure-ecommerce" target="_blank"><img width="70" src="https://avatars.githubusercontent.com/u/39629390?s=52&v=4"></a>
|
||||
|
||||
<a href="https://opencollective.com/docbot" target="_blank"><img width="70" src="https://images.opencollective.com/docbot/457761e/logo.png"></a>
|
||||
|
||||
<a href="https://opencollective.com/datawrapper" target="_blank"><img width="70" src="https://images.opencollective.com/datawrapper/c13e229/logo.png"></a>
|
||||
|
||||
## Contributors
|
||||
|
||||
This project exists thanks to all the people who contribute.
|
||||
|
||||
Please give us a 💖 star 💖 to support us. Thank you.
|
||||
|
||||
And thank you to all our backers! 🙏
|
||||
|
||||
<a href="https://opencollective.com/dayjs/backer/0/website?requireActive=false" target="_blank"><img width="35" src="https://opencollective.com/dayjs/backer/0/avatar.svg?requireActive=false"></a>
|
||||
<a href="https://opencollective.com/dayjs/backer/1/website?requireActive=false" target="_blank"><img width="35" src="https://opencollective.com/dayjs/backer/1/avatar.svg?requireActive=false"></a>
|
||||
<a href="https://opencollective.com/dayjs/backer/2/website?requireActive=false" target="_blank"><img width="35" src="https://opencollective.com/dayjs/backer/2/avatar.svg?requireActive=false"></a>
|
||||
<a href="https://opencollective.com/dayjs/backer/3/website?requireActive=false" target="_blank"><img width="35" src="https://opencollective.com/dayjs/backer/3/avatar.svg?requireActive=false"></a>
|
||||
<br />
|
||||
<a href="https://opencollective.com/dayjs#backers" target="_blank"><img src="https://opencollective.com/dayjs/contributors.svg?width=890" /></a>
|
||||
|
||||
## License
|
||||
|
||||
Day.js is licensed under a [MIT License](./LICENSE).
|
File diff suppressed because one or more lines are too long
|
@ -0,0 +1,25 @@
|
|||
export var SECONDS_A_MINUTE = 60;
|
||||
export var SECONDS_A_HOUR = SECONDS_A_MINUTE * 60;
|
||||
export var SECONDS_A_DAY = SECONDS_A_HOUR * 24;
|
||||
export var SECONDS_A_WEEK = SECONDS_A_DAY * 7;
|
||||
export var MILLISECONDS_A_SECOND = 1e3;
|
||||
export var MILLISECONDS_A_MINUTE = SECONDS_A_MINUTE * MILLISECONDS_A_SECOND;
|
||||
export var MILLISECONDS_A_HOUR = SECONDS_A_HOUR * MILLISECONDS_A_SECOND;
|
||||
export var MILLISECONDS_A_DAY = SECONDS_A_DAY * MILLISECONDS_A_SECOND;
|
||||
export var MILLISECONDS_A_WEEK = SECONDS_A_WEEK * MILLISECONDS_A_SECOND; // English locales
|
||||
|
||||
export var MS = 'millisecond';
|
||||
export var S = 'second';
|
||||
export var MIN = 'minute';
|
||||
export var H = 'hour';
|
||||
export var D = 'day';
|
||||
export var W = 'week';
|
||||
export var M = 'month';
|
||||
export var Q = 'quarter';
|
||||
export var Y = 'year';
|
||||
export var DATE = 'date';
|
||||
export var FORMAT_DEFAULT = 'YYYY-MM-DDTHH:mm:ssZ';
|
||||
export var INVALID_DATE_STRING = 'Invalid Date'; // regex
|
||||
|
||||
export var REGEX_PARSE = /^(\d{4})[-/]?(\d{1,2})?[-/]?(\d{0,2})[Tt\s]*(\d{1,2})?:?(\d{1,2})?:?(\d{1,2})?[.:]?(\d+)?$/;
|
||||
export var REGEX_FORMAT = /\[([^\]]+)]|Y{1,4}|M{1,4}|D{1,2}|d{1,4}|H{1,2}|h{1,2}|a|A|m{1,2}|s{1,2}|Z{1,2}|SSS/g;
|
|
@ -0,0 +1,429 @@
|
|||
/// <reference path="./locale/index.d.ts" />
|
||||
|
||||
export = dayjs;
|
||||
|
||||
declare function dayjs (date?: dayjs.ConfigType): dayjs.Dayjs
|
||||
|
||||
declare function dayjs (date?: dayjs.ConfigType, format?: dayjs.OptionType, strict?: boolean): dayjs.Dayjs
|
||||
|
||||
declare function dayjs (date?: dayjs.ConfigType, format?: dayjs.OptionType, locale?: string, strict?: boolean): dayjs.Dayjs
|
||||
|
||||
declare namespace dayjs {
|
||||
interface ConfigTypeMap {
|
||||
default: string | number | Date | Dayjs | null | undefined
|
||||
}
|
||||
|
||||
export type ConfigType = ConfigTypeMap[keyof ConfigTypeMap]
|
||||
|
||||
export interface FormatObject { locale?: string, format?: string, utc?: boolean }
|
||||
|
||||
export type OptionType = FormatObject | string | string[]
|
||||
|
||||
export type UnitTypeShort = 'd' | 'D' | 'M' | 'y' | 'h' | 'm' | 's' | 'ms'
|
||||
|
||||
export type UnitTypeLong = 'millisecond' | 'second' | 'minute' | 'hour' | 'day' | 'month' | 'year' | 'date'
|
||||
|
||||
export type UnitTypeLongPlural = 'milliseconds' | 'seconds' | 'minutes' | 'hours' | 'days' | 'months' | 'years' | 'dates'
|
||||
|
||||
export type UnitType = UnitTypeLong | UnitTypeLongPlural | UnitTypeShort;
|
||||
|
||||
export type OpUnitType = UnitType | "week" | "weeks" | 'w';
|
||||
export type QUnitType = UnitType | "quarter" | "quarters" | 'Q';
|
||||
export type ManipulateType = Exclude<OpUnitType, 'date' | 'dates'>;
|
||||
class Dayjs {
|
||||
constructor (config?: ConfigType)
|
||||
/**
|
||||
* All Day.js objects are immutable. Still, `dayjs#clone` can create a clone of the current object if you need one.
|
||||
* ```
|
||||
* dayjs().clone()// => Dayjs
|
||||
* dayjs(dayjs('2019-01-25')) // passing a Dayjs object to a constructor will also clone it
|
||||
* ```
|
||||
* Docs: https://day.js.org/docs/en/parse/dayjs-clone
|
||||
*/
|
||||
clone(): Dayjs
|
||||
/**
|
||||
* This returns a `boolean` indicating whether the Day.js object contains a valid date or not.
|
||||
* ```
|
||||
* dayjs().isValid()// => boolean
|
||||
* ```
|
||||
* Docs: https://day.js.org/docs/en/parse/is-valid
|
||||
*/
|
||||
isValid(): boolean
|
||||
/**
|
||||
* Get the year.
|
||||
* ```
|
||||
* dayjs().year()// => 2020
|
||||
* ```
|
||||
* Docs: https://day.js.org/docs/en/get-set/year
|
||||
*/
|
||||
year(): number
|
||||
/**
|
||||
* Set the year.
|
||||
* ```
|
||||
* dayjs().year(2000)// => Dayjs
|
||||
* ```
|
||||
* Docs: https://day.js.org/docs/en/get-set/year
|
||||
*/
|
||||
year(value: number): Dayjs
|
||||
/**
|
||||
* Get the month.
|
||||
*
|
||||
* Months are zero indexed, so January is month 0.
|
||||
* ```
|
||||
* dayjs().month()// => 0-11
|
||||
* ```
|
||||
* Docs: https://day.js.org/docs/en/get-set/month
|
||||
*/
|
||||
month(): number
|
||||
/**
|
||||
* Set the month.
|
||||
*
|
||||
* Months are zero indexed, so January is month 0.
|
||||
*
|
||||
* Accepts numbers from 0 to 11. If the range is exceeded, it will bubble up to the next year.
|
||||
* ```
|
||||
* dayjs().month(0)// => Dayjs
|
||||
* ```
|
||||
* Docs: https://day.js.org/docs/en/get-set/month
|
||||
*/
|
||||
month(value: number): Dayjs
|
||||
/**
|
||||
* Get the date of the month.
|
||||
* ```
|
||||
* dayjs().date()// => 1-31
|
||||
* ```
|
||||
* Docs: https://day.js.org/docs/en/get-set/date
|
||||
*/
|
||||
date(): number
|
||||
/**
|
||||
* Set the date of the month.
|
||||
*
|
||||
* Accepts numbers from 1 to 31. If the range is exceeded, it will bubble up to the next months.
|
||||
* ```
|
||||
* dayjs().date(1)// => Dayjs
|
||||
* ```
|
||||
* Docs: https://day.js.org/docs/en/get-set/date
|
||||
*/
|
||||
date(value: number): Dayjs
|
||||
/**
|
||||
* Get the day of the week.
|
||||
*
|
||||
* Returns numbers from 0 (Sunday) to 6 (Saturday).
|
||||
* ```
|
||||
* dayjs().day()// 0-6
|
||||
* ```
|
||||
* Docs: https://day.js.org/docs/en/get-set/day
|
||||
*/
|
||||
day(): number
|
||||
/**
|
||||
* Set the day of the week.
|
||||
*
|
||||
* Accepts numbers from 0 (Sunday) to 6 (Saturday). If the range is exceeded, it will bubble up to next weeks.
|
||||
* ```
|
||||
* dayjs().day(0)// => Dayjs
|
||||
* ```
|
||||
* Docs: https://day.js.org/docs/en/get-set/day
|
||||
*/
|
||||
day(value: number): Dayjs
|
||||
/**
|
||||
* Get the hour.
|
||||
* ```
|
||||
* dayjs().hour()// => 0-23
|
||||
* ```
|
||||
* Docs: https://day.js.org/docs/en/get-set/hour
|
||||
*/
|
||||
hour(): number
|
||||
/**
|
||||
* Set the hour.
|
||||
*
|
||||
* Accepts numbers from 0 to 23. If the range is exceeded, it will bubble up to the next day.
|
||||
* ```
|
||||
* dayjs().hour(12)// => Dayjs
|
||||
* ```
|
||||
* Docs: https://day.js.org/docs/en/get-set/hour
|
||||
*/
|
||||
hour(value: number): Dayjs
|
||||
/**
|
||||
* Get the minutes.
|
||||
* ```
|
||||
* dayjs().minute()// => 0-59
|
||||
* ```
|
||||
* Docs: https://day.js.org/docs/en/get-set/minute
|
||||
*/
|
||||
minute(): number
|
||||
/**
|
||||
* Set the minutes.
|
||||
*
|
||||
* Accepts numbers from 0 to 59. If the range is exceeded, it will bubble up to the next hour.
|
||||
* ```
|
||||
* dayjs().minute(59)// => Dayjs
|
||||
* ```
|
||||
* Docs: https://day.js.org/docs/en/get-set/minute
|
||||
*/
|
||||
minute(value: number): Dayjs
|
||||
/**
|
||||
* Get the seconds.
|
||||
* ```
|
||||
* dayjs().second()// => 0-59
|
||||
* ```
|
||||
* Docs: https://day.js.org/docs/en/get-set/second
|
||||
*/
|
||||
second(): number
|
||||
/**
|
||||
* Set the seconds.
|
||||
*
|
||||
* Accepts numbers from 0 to 59. If the range is exceeded, it will bubble up to the next minutes.
|
||||
* ```
|
||||
* dayjs().second(1)// Dayjs
|
||||
* ```
|
||||
*/
|
||||
second(value: number): Dayjs
|
||||
/**
|
||||
* Get the milliseconds.
|
||||
* ```
|
||||
* dayjs().millisecond()// => 0-999
|
||||
* ```
|
||||
* Docs: https://day.js.org/docs/en/get-set/millisecond
|
||||
*/
|
||||
millisecond(): number
|
||||
/**
|
||||
* Set the milliseconds.
|
||||
*
|
||||
* Accepts numbers from 0 to 999. If the range is exceeded, it will bubble up to the next seconds.
|
||||
* ```
|
||||
* dayjs().millisecond(1)// => Dayjs
|
||||
* ```
|
||||
* Docs: https://day.js.org/docs/en/get-set/millisecond
|
||||
*/
|
||||
millisecond(value: number): Dayjs
|
||||
/**
|
||||
* Generic setter, accepting unit as first argument, and value as second, returns a new instance with the applied changes.
|
||||
*
|
||||
* In general:
|
||||
* ```
|
||||
* dayjs().set(unit, value) === dayjs()[unit](value)
|
||||
* ```
|
||||
* Units are case insensitive, and support plural and short forms.
|
||||
* ```
|
||||
* dayjs().set('date', 1)
|
||||
* dayjs().set('month', 3) // April
|
||||
* dayjs().set('second', 30)
|
||||
* ```
|
||||
* Docs: https://day.js.org/docs/en/get-set/set
|
||||
*/
|
||||
set(unit: UnitType, value: number): Dayjs
|
||||
/**
|
||||
* String getter, returns the corresponding information getting from Day.js object.
|
||||
*
|
||||
* In general:
|
||||
* ```
|
||||
* dayjs().get(unit) === dayjs()[unit]()
|
||||
* ```
|
||||
* Units are case insensitive, and support plural and short forms.
|
||||
* ```
|
||||
* dayjs().get('year')
|
||||
* dayjs().get('month') // start 0
|
||||
* dayjs().get('date')
|
||||
* ```
|
||||
* Docs: https://day.js.org/docs/en/get-set/get
|
||||
*/
|
||||
get(unit: UnitType): number
|
||||
/**
|
||||
* Returns a cloned Day.js object with a specified amount of time added.
|
||||
* ```
|
||||
* dayjs().add(7, 'day')// => Dayjs
|
||||
* ```
|
||||
* Units are case insensitive, and support plural and short forms.
|
||||
*
|
||||
* Docs: https://day.js.org/docs/en/manipulate/add
|
||||
*/
|
||||
add(value: number, unit?: ManipulateType): Dayjs
|
||||
/**
|
||||
* Returns a cloned Day.js object with a specified amount of time subtracted.
|
||||
* ```
|
||||
* dayjs().subtract(7, 'year')// => Dayjs
|
||||
* ```
|
||||
* Units are case insensitive, and support plural and short forms.
|
||||
*
|
||||
* Docs: https://day.js.org/docs/en/manipulate/subtract
|
||||
*/
|
||||
subtract(value: number, unit?: ManipulateType): Dayjs
|
||||
/**
|
||||
* Returns a cloned Day.js object and set it to the start of a unit of time.
|
||||
* ```
|
||||
* dayjs().startOf('year')// => Dayjs
|
||||
* ```
|
||||
* Units are case insensitive, and support plural and short forms.
|
||||
*
|
||||
* Docs: https://day.js.org/docs/en/manipulate/start-of
|
||||
*/
|
||||
startOf(unit: OpUnitType): Dayjs
|
||||
/**
|
||||
* Returns a cloned Day.js object and set it to the end of a unit of time.
|
||||
* ```
|
||||
* dayjs().endOf('month')// => Dayjs
|
||||
* ```
|
||||
* Units are case insensitive, and support plural and short forms.
|
||||
*
|
||||
* Docs: https://day.js.org/docs/en/manipulate/end-of
|
||||
*/
|
||||
endOf(unit: OpUnitType): Dayjs
|
||||
/**
|
||||
* Get the formatted date according to the string of tokens passed in.
|
||||
*
|
||||
* To escape characters, wrap them in square brackets (e.g. [MM]).
|
||||
* ```
|
||||
* dayjs().format()// => current date in ISO8601, without fraction seconds e.g. '2020-04-02T08:02:17-05:00'
|
||||
* dayjs('2019-01-25').format('[YYYYescape] YYYY-MM-DDTHH:mm:ssZ[Z]')// 'YYYYescape 2019-01-25T00:00:00-02:00Z'
|
||||
* dayjs('2019-01-25').format('DD/MM/YYYY') // '25/01/2019'
|
||||
* ```
|
||||
* Docs: https://day.js.org/docs/en/display/format
|
||||
*/
|
||||
format(template?: string): string
|
||||
/**
|
||||
* This indicates the difference between two date-time in the specified unit.
|
||||
*
|
||||
* To get the difference in milliseconds, use `dayjs#diff`
|
||||
* ```
|
||||
* const date1 = dayjs('2019-01-25')
|
||||
* const date2 = dayjs('2018-06-05')
|
||||
* date1.diff(date2) // 20214000000 default milliseconds
|
||||
* date1.diff() // milliseconds to current time
|
||||
* ```
|
||||
*
|
||||
* To get the difference in another unit of measurement, pass that measurement as the second argument.
|
||||
* ```
|
||||
* const date1 = dayjs('2019-01-25')
|
||||
* date1.diff('2018-06-05', 'month') // 7
|
||||
* ```
|
||||
* Units are case insensitive, and support plural and short forms.
|
||||
*
|
||||
* Docs: https://day.js.org/docs/en/display/difference
|
||||
*/
|
||||
diff(date?: ConfigType, unit?: QUnitType | OpUnitType, float?: boolean): number
|
||||
/**
|
||||
* This returns the number of **milliseconds** since the Unix Epoch of the Day.js object.
|
||||
* ```
|
||||
* dayjs('2019-01-25').valueOf() // 1548381600000
|
||||
* +dayjs(1548381600000) // 1548381600000
|
||||
* ```
|
||||
* To get a Unix timestamp (the number of seconds since the epoch) from a Day.js object, you should use Unix Timestamp `dayjs#unix()`.
|
||||
*
|
||||
* Docs: https://day.js.org/docs/en/display/unix-timestamp-milliseconds
|
||||
*/
|
||||
valueOf(): number
|
||||
/**
|
||||
* This returns the Unix timestamp (the number of **seconds** since the Unix Epoch) of the Day.js object.
|
||||
* ```
|
||||
* dayjs('2019-01-25').unix() // 1548381600
|
||||
* ```
|
||||
* This value is floored to the nearest second, and does not include a milliseconds component.
|
||||
*
|
||||
* Docs: https://day.js.org/docs/en/display/unix-timestamp
|
||||
*/
|
||||
unix(): number
|
||||
/**
|
||||
* Get the number of days in the current month.
|
||||
* ```
|
||||
* dayjs('2019-01-25').daysInMonth() // 31
|
||||
* ```
|
||||
* Docs: https://day.js.org/docs/en/display/days-in-month
|
||||
*/
|
||||
daysInMonth(): number
|
||||
/**
|
||||
* To get a copy of the native `Date` object parsed from the Day.js object use `dayjs#toDate`.
|
||||
* ```
|
||||
* dayjs('2019-01-25').toDate()// => Date
|
||||
* ```
|
||||
*/
|
||||
toDate(): Date
|
||||
/**
|
||||
* To serialize as an ISO 8601 string.
|
||||
* ```
|
||||
* dayjs('2019-01-25').toJSON() // '2019-01-25T02:00:00.000Z'
|
||||
* ```
|
||||
* Docs: https://day.js.org/docs/en/display/as-json
|
||||
*/
|
||||
toJSON(): string
|
||||
/**
|
||||
* To format as an ISO 8601 string.
|
||||
* ```
|
||||
* dayjs('2019-01-25').toISOString() // '2019-01-25T02:00:00.000Z'
|
||||
* ```
|
||||
* Docs: https://day.js.org/docs/en/display/as-iso-string
|
||||
*/
|
||||
toISOString(): string
|
||||
/**
|
||||
* Returns a string representation of the date.
|
||||
* ```
|
||||
* dayjs('2019-01-25').toString() // 'Fri, 25 Jan 2019 02:00:00 GMT'
|
||||
* ```
|
||||
* Docs: https://day.js.org/docs/en/display/as-string
|
||||
*/
|
||||
toString(): string
|
||||
/**
|
||||
* Get the UTC offset in minutes.
|
||||
* ```
|
||||
* dayjs().utcOffset()
|
||||
* ```
|
||||
* Docs: https://day.js.org/docs/en/manipulate/utc-offset
|
||||
*/
|
||||
utcOffset(): number
|
||||
/**
|
||||
* This indicates whether the Day.js object is before the other supplied date-time.
|
||||
* ```
|
||||
* dayjs().isBefore(dayjs('2011-01-01')) // default milliseconds
|
||||
* ```
|
||||
* If you want to limit the granularity to a unit other than milliseconds, pass it as the second parameter.
|
||||
* ```
|
||||
* dayjs().isBefore('2011-01-01', 'year')// => boolean
|
||||
* ```
|
||||
* Units are case insensitive, and support plural and short forms.
|
||||
*
|
||||
* Docs: https://day.js.org/docs/en/query/is-before
|
||||
*/
|
||||
isBefore(date?: ConfigType, unit?: OpUnitType): boolean
|
||||
/**
|
||||
* This indicates whether the Day.js object is the same as the other supplied date-time.
|
||||
* ```
|
||||
* dayjs().isSame(dayjs('2011-01-01')) // default milliseconds
|
||||
* ```
|
||||
* If you want to limit the granularity to a unit other than milliseconds, pass it as the second parameter.
|
||||
* ```
|
||||
* dayjs().isSame('2011-01-01', 'year')// => boolean
|
||||
* ```
|
||||
* Docs: https://day.js.org/docs/en/query/is-same
|
||||
*/
|
||||
isSame(date?: ConfigType, unit?: OpUnitType): boolean
|
||||
/**
|
||||
* This indicates whether the Day.js object is after the other supplied date-time.
|
||||
* ```
|
||||
* dayjs().isAfter(dayjs('2011-01-01')) // default milliseconds
|
||||
* ```
|
||||
* If you want to limit the granularity to a unit other than milliseconds, pass it as the second parameter.
|
||||
* ```
|
||||
* dayjs().isAfter('2011-01-01', 'year')// => boolean
|
||||
* ```
|
||||
* Units are case insensitive, and support plural and short forms.
|
||||
*
|
||||
* Docs: https://day.js.org/docs/en/query/is-after
|
||||
*/
|
||||
isAfter(date?: ConfigType, unit?: OpUnitType): boolean
|
||||
|
||||
locale(): string
|
||||
|
||||
locale(preset: string | ILocale, object?: Partial<ILocale>): Dayjs
|
||||
}
|
||||
|
||||
export type PluginFunc<T = unknown> = (option: T, c: typeof Dayjs, d: typeof dayjs) => void
|
||||
|
||||
export function extend<T = unknown>(plugin: PluginFunc<T>, option?: T): Dayjs
|
||||
|
||||
export function locale(preset?: string | ILocale, object?: Partial<ILocale>, isLocal?: boolean): string
|
||||
|
||||
export function isDayjs(d: any): d is Dayjs
|
||||
|
||||
export function unix(t: number): Dayjs
|
||||
|
||||
const Ls : { [key: string] : ILocale }
|
||||
}
|
|
@ -0,0 +1,541 @@
|
|||
import * as C from './constant';
|
||||
import en from './locale/en';
|
||||
import U from './utils';
|
||||
var L = 'en'; // global locale
|
||||
|
||||
var Ls = {}; // global loaded locale
|
||||
|
||||
Ls[L] = en;
|
||||
var IS_DAYJS = '$isDayjsObject'; // eslint-disable-next-line no-use-before-define
|
||||
|
||||
var isDayjs = function isDayjs(d) {
|
||||
return d instanceof Dayjs || !!(d && d[IS_DAYJS]);
|
||||
};
|
||||
|
||||
var parseLocale = function parseLocale(preset, object, isLocal) {
|
||||
var l;
|
||||
if (!preset) return L;
|
||||
|
||||
if (typeof preset === 'string') {
|
||||
var presetLower = preset.toLowerCase();
|
||||
|
||||
if (Ls[presetLower]) {
|
||||
l = presetLower;
|
||||
}
|
||||
|
||||
if (object) {
|
||||
Ls[presetLower] = object;
|
||||
l = presetLower;
|
||||
}
|
||||
|
||||
var presetSplit = preset.split('-');
|
||||
|
||||
if (!l && presetSplit.length > 1) {
|
||||
return parseLocale(presetSplit[0]);
|
||||
}
|
||||
} else {
|
||||
var name = preset.name;
|
||||
Ls[name] = preset;
|
||||
l = name;
|
||||
}
|
||||
|
||||
if (!isLocal && l) L = l;
|
||||
return l || !isLocal && L;
|
||||
};
|
||||
|
||||
var dayjs = function dayjs(date, c) {
|
||||
if (isDayjs(date)) {
|
||||
return date.clone();
|
||||
} // eslint-disable-next-line no-nested-ternary
|
||||
|
||||
|
||||
var cfg = typeof c === 'object' ? c : {};
|
||||
cfg.date = date;
|
||||
cfg.args = arguments; // eslint-disable-line prefer-rest-params
|
||||
|
||||
return new Dayjs(cfg); // eslint-disable-line no-use-before-define
|
||||
};
|
||||
|
||||
var wrapper = function wrapper(date, instance) {
|
||||
return dayjs(date, {
|
||||
locale: instance.$L,
|
||||
utc: instance.$u,
|
||||
x: instance.$x,
|
||||
$offset: instance.$offset // todo: refactor; do not use this.$offset in you code
|
||||
|
||||
});
|
||||
};
|
||||
|
||||
var Utils = U; // for plugin use
|
||||
|
||||
Utils.l = parseLocale;
|
||||
Utils.i = isDayjs;
|
||||
Utils.w = wrapper;
|
||||
|
||||
var parseDate = function parseDate(cfg) {
|
||||
var date = cfg.date,
|
||||
utc = cfg.utc;
|
||||
if (date === null) return new Date(NaN); // null is invalid
|
||||
|
||||
if (Utils.u(date)) return new Date(); // today
|
||||
|
||||
if (date instanceof Date) return new Date(date);
|
||||
|
||||
if (typeof date === 'string' && !/Z$/i.test(date)) {
|
||||
var d = date.match(C.REGEX_PARSE);
|
||||
|
||||
if (d) {
|
||||
var m = d[2] - 1 || 0;
|
||||
var ms = (d[7] || '0').substring(0, 3);
|
||||
|
||||
if (utc) {
|
||||
return new Date(Date.UTC(d[1], m, d[3] || 1, d[4] || 0, d[5] || 0, d[6] || 0, ms));
|
||||
}
|
||||
|
||||
return new Date(d[1], m, d[3] || 1, d[4] || 0, d[5] || 0, d[6] || 0, ms);
|
||||
}
|
||||
}
|
||||
|
||||
return new Date(date); // everything else
|
||||
};
|
||||
|
||||
var Dayjs = /*#__PURE__*/function () {
|
||||
function Dayjs(cfg) {
|
||||
this.$L = parseLocale(cfg.locale, null, true);
|
||||
this.parse(cfg); // for plugin
|
||||
|
||||
this.$x = this.$x || cfg.x || {};
|
||||
this[IS_DAYJS] = true;
|
||||
}
|
||||
|
||||
var _proto = Dayjs.prototype;
|
||||
|
||||
_proto.parse = function parse(cfg) {
|
||||
this.$d = parseDate(cfg);
|
||||
this.init();
|
||||
};
|
||||
|
||||
_proto.init = function init() {
|
||||
var $d = this.$d;
|
||||
this.$y = $d.getFullYear();
|
||||
this.$M = $d.getMonth();
|
||||
this.$D = $d.getDate();
|
||||
this.$W = $d.getDay();
|
||||
this.$H = $d.getHours();
|
||||
this.$m = $d.getMinutes();
|
||||
this.$s = $d.getSeconds();
|
||||
this.$ms = $d.getMilliseconds();
|
||||
} // eslint-disable-next-line class-methods-use-this
|
||||
;
|
||||
|
||||
_proto.$utils = function $utils() {
|
||||
return Utils;
|
||||
};
|
||||
|
||||
_proto.isValid = function isValid() {
|
||||
return !(this.$d.toString() === C.INVALID_DATE_STRING);
|
||||
};
|
||||
|
||||
_proto.isSame = function isSame(that, units) {
|
||||
var other = dayjs(that);
|
||||
return this.startOf(units) <= other && other <= this.endOf(units);
|
||||
};
|
||||
|
||||
_proto.isAfter = function isAfter(that, units) {
|
||||
return dayjs(that) < this.startOf(units);
|
||||
};
|
||||
|
||||
_proto.isBefore = function isBefore(that, units) {
|
||||
return this.endOf(units) < dayjs(that);
|
||||
};
|
||||
|
||||
_proto.$g = function $g(input, get, set) {
|
||||
if (Utils.u(input)) return this[get];
|
||||
return this.set(set, input);
|
||||
};
|
||||
|
||||
_proto.unix = function unix() {
|
||||
return Math.floor(this.valueOf() / 1000);
|
||||
};
|
||||
|
||||
_proto.valueOf = function valueOf() {
|
||||
// timezone(hour) * 60 * 60 * 1000 => ms
|
||||
return this.$d.getTime();
|
||||
};
|
||||
|
||||
_proto.startOf = function startOf(units, _startOf) {
|
||||
var _this = this;
|
||||
|
||||
// startOf -> endOf
|
||||
var isStartOf = !Utils.u(_startOf) ? _startOf : true;
|
||||
var unit = Utils.p(units);
|
||||
|
||||
var instanceFactory = function instanceFactory(d, m) {
|
||||
var ins = Utils.w(_this.$u ? Date.UTC(_this.$y, m, d) : new Date(_this.$y, m, d), _this);
|
||||
return isStartOf ? ins : ins.endOf(C.D);
|
||||
};
|
||||
|
||||
var instanceFactorySet = function instanceFactorySet(method, slice) {
|
||||
var argumentStart = [0, 0, 0, 0];
|
||||
var argumentEnd = [23, 59, 59, 999];
|
||||
return Utils.w(_this.toDate()[method].apply( // eslint-disable-line prefer-spread
|
||||
_this.toDate('s'), (isStartOf ? argumentStart : argumentEnd).slice(slice)), _this);
|
||||
};
|
||||
|
||||
var $W = this.$W,
|
||||
$M = this.$M,
|
||||
$D = this.$D;
|
||||
var utcPad = "set" + (this.$u ? 'UTC' : '');
|
||||
|
||||
switch (unit) {
|
||||
case C.Y:
|
||||
return isStartOf ? instanceFactory(1, 0) : instanceFactory(31, 11);
|
||||
|
||||
case C.M:
|
||||
return isStartOf ? instanceFactory(1, $M) : instanceFactory(0, $M + 1);
|
||||
|
||||
case C.W:
|
||||
{
|
||||
var weekStart = this.$locale().weekStart || 0;
|
||||
var gap = ($W < weekStart ? $W + 7 : $W) - weekStart;
|
||||
return instanceFactory(isStartOf ? $D - gap : $D + (6 - gap), $M);
|
||||
}
|
||||
|
||||
case C.D:
|
||||
case C.DATE:
|
||||
return instanceFactorySet(utcPad + "Hours", 0);
|
||||
|
||||
case C.H:
|
||||
return instanceFactorySet(utcPad + "Minutes", 1);
|
||||
|
||||
case C.MIN:
|
||||
return instanceFactorySet(utcPad + "Seconds", 2);
|
||||
|
||||
case C.S:
|
||||
return instanceFactorySet(utcPad + "Milliseconds", 3);
|
||||
|
||||
default:
|
||||
return this.clone();
|
||||
}
|
||||
};
|
||||
|
||||
_proto.endOf = function endOf(arg) {
|
||||
return this.startOf(arg, false);
|
||||
};
|
||||
|
||||
_proto.$set = function $set(units, _int) {
|
||||
var _C$D$C$DATE$C$M$C$Y$C;
|
||||
|
||||
// private set
|
||||
var unit = Utils.p(units);
|
||||
var utcPad = "set" + (this.$u ? 'UTC' : '');
|
||||
var name = (_C$D$C$DATE$C$M$C$Y$C = {}, _C$D$C$DATE$C$M$C$Y$C[C.D] = utcPad + "Date", _C$D$C$DATE$C$M$C$Y$C[C.DATE] = utcPad + "Date", _C$D$C$DATE$C$M$C$Y$C[C.M] = utcPad + "Month", _C$D$C$DATE$C$M$C$Y$C[C.Y] = utcPad + "FullYear", _C$D$C$DATE$C$M$C$Y$C[C.H] = utcPad + "Hours", _C$D$C$DATE$C$M$C$Y$C[C.MIN] = utcPad + "Minutes", _C$D$C$DATE$C$M$C$Y$C[C.S] = utcPad + "Seconds", _C$D$C$DATE$C$M$C$Y$C[C.MS] = utcPad + "Milliseconds", _C$D$C$DATE$C$M$C$Y$C)[unit];
|
||||
var arg = unit === C.D ? this.$D + (_int - this.$W) : _int;
|
||||
|
||||
if (unit === C.M || unit === C.Y) {
|
||||
// clone is for badMutable plugin
|
||||
var date = this.clone().set(C.DATE, 1);
|
||||
date.$d[name](arg);
|
||||
date.init();
|
||||
this.$d = date.set(C.DATE, Math.min(this.$D, date.daysInMonth())).$d;
|
||||
} else if (name) this.$d[name](arg);
|
||||
|
||||
this.init();
|
||||
return this;
|
||||
};
|
||||
|
||||
_proto.set = function set(string, _int2) {
|
||||
return this.clone().$set(string, _int2);
|
||||
};
|
||||
|
||||
_proto.get = function get(unit) {
|
||||
return this[Utils.p(unit)]();
|
||||
};
|
||||
|
||||
_proto.add = function add(number, units) {
|
||||
var _this2 = this,
|
||||
_C$MIN$C$H$C$S$unit;
|
||||
|
||||
number = Number(number); // eslint-disable-line no-param-reassign
|
||||
|
||||
var unit = Utils.p(units);
|
||||
|
||||
var instanceFactorySet = function instanceFactorySet(n) {
|
||||
var d = dayjs(_this2);
|
||||
return Utils.w(d.date(d.date() + Math.round(n * number)), _this2);
|
||||
};
|
||||
|
||||
if (unit === C.M) {
|
||||
return this.set(C.M, this.$M + number);
|
||||
}
|
||||
|
||||
if (unit === C.Y) {
|
||||
return this.set(C.Y, this.$y + number);
|
||||
}
|
||||
|
||||
if (unit === C.D) {
|
||||
return instanceFactorySet(1);
|
||||
}
|
||||
|
||||
if (unit === C.W) {
|
||||
return instanceFactorySet(7);
|
||||
}
|
||||
|
||||
var step = (_C$MIN$C$H$C$S$unit = {}, _C$MIN$C$H$C$S$unit[C.MIN] = C.MILLISECONDS_A_MINUTE, _C$MIN$C$H$C$S$unit[C.H] = C.MILLISECONDS_A_HOUR, _C$MIN$C$H$C$S$unit[C.S] = C.MILLISECONDS_A_SECOND, _C$MIN$C$H$C$S$unit)[unit] || 1; // ms
|
||||
|
||||
var nextTimeStamp = this.$d.getTime() + number * step;
|
||||
return Utils.w(nextTimeStamp, this);
|
||||
};
|
||||
|
||||
_proto.subtract = function subtract(number, string) {
|
||||
return this.add(number * -1, string);
|
||||
};
|
||||
|
||||
_proto.format = function format(formatStr) {
|
||||
var _this3 = this;
|
||||
|
||||
var locale = this.$locale();
|
||||
if (!this.isValid()) return locale.invalidDate || C.INVALID_DATE_STRING;
|
||||
var str = formatStr || C.FORMAT_DEFAULT;
|
||||
var zoneStr = Utils.z(this);
|
||||
var $H = this.$H,
|
||||
$m = this.$m,
|
||||
$M = this.$M;
|
||||
var weekdays = locale.weekdays,
|
||||
months = locale.months,
|
||||
meridiem = locale.meridiem;
|
||||
|
||||
var getShort = function getShort(arr, index, full, length) {
|
||||
return arr && (arr[index] || arr(_this3, str)) || full[index].slice(0, length);
|
||||
};
|
||||
|
||||
var get$H = function get$H(num) {
|
||||
return Utils.s($H % 12 || 12, num, '0');
|
||||
};
|
||||
|
||||
var meridiemFunc = meridiem || function (hour, minute, isLowercase) {
|
||||
var m = hour < 12 ? 'AM' : 'PM';
|
||||
return isLowercase ? m.toLowerCase() : m;
|
||||
};
|
||||
|
||||
var matches = function matches(match) {
|
||||
switch (match) {
|
||||
case 'YY':
|
||||
return String(_this3.$y).slice(-2);
|
||||
|
||||
case 'YYYY':
|
||||
return Utils.s(_this3.$y, 4, '0');
|
||||
|
||||
case 'M':
|
||||
return $M + 1;
|
||||
|
||||
case 'MM':
|
||||
return Utils.s($M + 1, 2, '0');
|
||||
|
||||
case 'MMM':
|
||||
return getShort(locale.monthsShort, $M, months, 3);
|
||||
|
||||
case 'MMMM':
|
||||
return getShort(months, $M);
|
||||
|
||||
case 'D':
|
||||
return _this3.$D;
|
||||
|
||||
case 'DD':
|
||||
return Utils.s(_this3.$D, 2, '0');
|
||||
|
||||
case 'd':
|
||||
return String(_this3.$W);
|
||||
|
||||
case 'dd':
|
||||
return getShort(locale.weekdaysMin, _this3.$W, weekdays, 2);
|
||||
|
||||
case 'ddd':
|
||||
return getShort(locale.weekdaysShort, _this3.$W, weekdays, 3);
|
||||
|
||||
case 'dddd':
|
||||
return weekdays[_this3.$W];
|
||||
|
||||
case 'H':
|
||||
return String($H);
|
||||
|
||||
case 'HH':
|
||||
return Utils.s($H, 2, '0');
|
||||
|
||||
case 'h':
|
||||
return get$H(1);
|
||||
|
||||
case 'hh':
|
||||
return get$H(2);
|
||||
|
||||
case 'a':
|
||||
return meridiemFunc($H, $m, true);
|
||||
|
||||
case 'A':
|
||||
return meridiemFunc($H, $m, false);
|
||||
|
||||
case 'm':
|
||||
return String($m);
|
||||
|
||||
case 'mm':
|
||||
return Utils.s($m, 2, '0');
|
||||
|
||||
case 's':
|
||||
return String(_this3.$s);
|
||||
|
||||
case 'ss':
|
||||
return Utils.s(_this3.$s, 2, '0');
|
||||
|
||||
case 'SSS':
|
||||
return Utils.s(_this3.$ms, 3, '0');
|
||||
|
||||
case 'Z':
|
||||
return zoneStr;
|
||||
// 'ZZ' logic below
|
||||
|
||||
default:
|
||||
break;
|
||||
}
|
||||
|
||||
return null;
|
||||
};
|
||||
|
||||
return str.replace(C.REGEX_FORMAT, function (match, $1) {
|
||||
return $1 || matches(match) || zoneStr.replace(':', '');
|
||||
}); // 'ZZ'
|
||||
};
|
||||
|
||||
_proto.utcOffset = function utcOffset() {
|
||||
// Because a bug at FF24, we're rounding the timezone offset around 15 minutes
|
||||
// https://github.com/moment/moment/pull/1871
|
||||
return -Math.round(this.$d.getTimezoneOffset() / 15) * 15;
|
||||
};
|
||||
|
||||
_proto.diff = function diff(input, units, _float) {
|
||||
var _this4 = this;
|
||||
|
||||
var unit = Utils.p(units);
|
||||
var that = dayjs(input);
|
||||
var zoneDelta = (that.utcOffset() - this.utcOffset()) * C.MILLISECONDS_A_MINUTE;
|
||||
var diff = this - that;
|
||||
|
||||
var getMonth = function getMonth() {
|
||||
return Utils.m(_this4, that);
|
||||
};
|
||||
|
||||
var result;
|
||||
|
||||
switch (unit) {
|
||||
case C.Y:
|
||||
result = getMonth() / 12;
|
||||
break;
|
||||
|
||||
case C.M:
|
||||
result = getMonth();
|
||||
break;
|
||||
|
||||
case C.Q:
|
||||
result = getMonth() / 3;
|
||||
break;
|
||||
|
||||
case C.W:
|
||||
result = (diff - zoneDelta) / C.MILLISECONDS_A_WEEK;
|
||||
break;
|
||||
|
||||
case C.D:
|
||||
result = (diff - zoneDelta) / C.MILLISECONDS_A_DAY;
|
||||
break;
|
||||
|
||||
case C.H:
|
||||
result = diff / C.MILLISECONDS_A_HOUR;
|
||||
break;
|
||||
|
||||
case C.MIN:
|
||||
result = diff / C.MILLISECONDS_A_MINUTE;
|
||||
break;
|
||||
|
||||
case C.S:
|
||||
result = diff / C.MILLISECONDS_A_SECOND;
|
||||
break;
|
||||
|
||||
default:
|
||||
result = diff; // milliseconds
|
||||
|
||||
break;
|
||||
}
|
||||
|
||||
return _float ? result : Utils.a(result);
|
||||
};
|
||||
|
||||
_proto.daysInMonth = function daysInMonth() {
|
||||
return this.endOf(C.M).$D;
|
||||
};
|
||||
|
||||
_proto.$locale = function $locale() {
|
||||
// get locale object
|
||||
return Ls[this.$L];
|
||||
};
|
||||
|
||||
_proto.locale = function locale(preset, object) {
|
||||
if (!preset) return this.$L;
|
||||
var that = this.clone();
|
||||
var nextLocaleName = parseLocale(preset, object, true);
|
||||
if (nextLocaleName) that.$L = nextLocaleName;
|
||||
return that;
|
||||
};
|
||||
|
||||
_proto.clone = function clone() {
|
||||
return Utils.w(this.$d, this);
|
||||
};
|
||||
|
||||
_proto.toDate = function toDate() {
|
||||
return new Date(this.valueOf());
|
||||
};
|
||||
|
||||
_proto.toJSON = function toJSON() {
|
||||
return this.isValid() ? this.toISOString() : null;
|
||||
};
|
||||
|
||||
_proto.toISOString = function toISOString() {
|
||||
// ie 8 return
|
||||
// new Dayjs(this.valueOf() + this.$d.getTimezoneOffset() * 60000)
|
||||
// .format('YYYY-MM-DDTHH:mm:ss.SSS[Z]')
|
||||
return this.$d.toISOString();
|
||||
};
|
||||
|
||||
_proto.toString = function toString() {
|
||||
return this.$d.toUTCString();
|
||||
};
|
||||
|
||||
return Dayjs;
|
||||
}();
|
||||
|
||||
var proto = Dayjs.prototype;
|
||||
dayjs.prototype = proto;
|
||||
[['$ms', C.MS], ['$s', C.S], ['$m', C.MIN], ['$H', C.H], ['$W', C.D], ['$M', C.M], ['$y', C.Y], ['$D', C.DATE]].forEach(function (g) {
|
||||
proto[g[1]] = function (input) {
|
||||
return this.$g(input, g[0], g[1]);
|
||||
};
|
||||
});
|
||||
|
||||
dayjs.extend = function (plugin, option) {
|
||||
if (!plugin.$i) {
|
||||
// install plugin only once
|
||||
plugin(option, Dayjs, dayjs);
|
||||
plugin.$i = true;
|
||||
}
|
||||
|
||||
return dayjs;
|
||||
};
|
||||
|
||||
dayjs.locale = parseLocale;
|
||||
dayjs.isDayjs = isDayjs;
|
||||
|
||||
dayjs.unix = function (timestamp) {
|
||||
return dayjs(timestamp * 1e3);
|
||||
};
|
||||
|
||||
dayjs.en = Ls[L];
|
||||
dayjs.Ls = Ls;
|
||||
dayjs.p = {};
|
||||
export default dayjs;
|
|
@ -0,0 +1,39 @@
|
|||
// Afrikaans [af]
|
||||
import dayjs from '../index';
|
||||
var locale = {
|
||||
name: 'af',
|
||||
weekdays: 'Sondag_Maandag_Dinsdag_Woensdag_Donderdag_Vrydag_Saterdag'.split('_'),
|
||||
months: 'Januarie_Februarie_Maart_April_Mei_Junie_Julie_Augustus_September_Oktober_November_Desember'.split('_'),
|
||||
weekStart: 1,
|
||||
weekdaysShort: 'Son_Maa_Din_Woe_Don_Vry_Sat'.split('_'),
|
||||
monthsShort: 'Jan_Feb_Mrt_Apr_Mei_Jun_Jul_Aug_Sep_Okt_Nov_Des'.split('_'),
|
||||
weekdaysMin: 'So_Ma_Di_Wo_Do_Vr_Sa'.split('_'),
|
||||
ordinal: function ordinal(n) {
|
||||
return n;
|
||||
},
|
||||
formats: {
|
||||
LT: 'HH:mm',
|
||||
LTS: 'HH:mm:ss',
|
||||
L: 'DD/MM/YYYY',
|
||||
LL: 'D MMMM YYYY',
|
||||
LLL: 'D MMMM YYYY HH:mm',
|
||||
LLLL: 'dddd, D MMMM YYYY HH:mm'
|
||||
},
|
||||
relativeTime: {
|
||||
future: 'oor %s',
|
||||
past: '%s gelede',
|
||||
s: "'n paar sekondes",
|
||||
m: "'n minuut",
|
||||
mm: '%d minute',
|
||||
h: "'n uur",
|
||||
hh: '%d ure',
|
||||
d: "'n dag",
|
||||
dd: '%d dae',
|
||||
M: "'n maand",
|
||||
MM: '%d maande',
|
||||
y: "'n jaar",
|
||||
yy: '%d jaar'
|
||||
}
|
||||
};
|
||||
dayjs.locale(locale, null, true);
|
||||
export default locale;
|
|
@ -0,0 +1,40 @@
|
|||
// Amharic [am]
|
||||
import dayjs from '../index';
|
||||
var locale = {
|
||||
name: 'am',
|
||||
weekdays: 'እሑድ_ሰኞ_ማክሰኞ_ረቡዕ_ሐሙስ_አርብ_ቅዳሜ'.split('_'),
|
||||
weekdaysShort: 'እሑድ_ሰኞ_ማክሰ_ረቡዕ_ሐሙስ_አርብ_ቅዳሜ'.split('_'),
|
||||
weekdaysMin: 'እሑ_ሰኞ_ማክ_ረቡ_ሐሙ_አር_ቅዳ'.split('_'),
|
||||
months: 'ጃንዋሪ_ፌብሯሪ_ማርች_ኤፕሪል_ሜይ_ጁን_ጁላይ_ኦገስት_ሴፕቴምበር_ኦክቶበር_ኖቬምበር_ዲሴምበር'.split('_'),
|
||||
monthsShort: 'ጃንዋ_ፌብሯ_ማርች_ኤፕሪ_ሜይ_ጁን_ጁላይ_ኦገስ_ሴፕቴ_ኦክቶ_ኖቬም_ዲሴም'.split('_'),
|
||||
weekStart: 1,
|
||||
yearStart: 4,
|
||||
relativeTime: {
|
||||
future: 'በ%s',
|
||||
past: '%s በፊት',
|
||||
s: 'ጥቂት ሰከንዶች',
|
||||
m: 'አንድ ደቂቃ',
|
||||
mm: '%d ደቂቃዎች',
|
||||
h: 'አንድ ሰዓት',
|
||||
hh: '%d ሰዓታት',
|
||||
d: 'አንድ ቀን',
|
||||
dd: '%d ቀናት',
|
||||
M: 'አንድ ወር',
|
||||
MM: '%d ወራት',
|
||||
y: 'አንድ ዓመት',
|
||||
yy: '%d ዓመታት'
|
||||
},
|
||||
formats: {
|
||||
LT: 'HH:mm',
|
||||
LTS: 'HH:mm:ss',
|
||||
L: 'DD/MM/YYYY',
|
||||
LL: 'MMMM D ፣ YYYY',
|
||||
LLL: 'MMMM D ፣ YYYY HH:mm',
|
||||
LLLL: 'dddd ፣ MMMM D ፣ YYYY HH:mm'
|
||||
},
|
||||
ordinal: function ordinal(n) {
|
||||
return n + "\u129B";
|
||||
}
|
||||
};
|
||||
dayjs.locale(locale, null, true);
|
||||
export default locale;
|
|
@ -0,0 +1,41 @@
|
|||
// Arabic (Algeria) [ar-dz]
|
||||
import dayjs from '../index';
|
||||
var locale = {
|
||||
name: 'ar-dz',
|
||||
weekdays: 'الأحد_الإثنين_الثلاثاء_الأربعاء_الخميس_الجمعة_السبت'.split('_'),
|
||||
months: 'جانفي_فيفري_مارس_أفريل_ماي_جوان_جويلية_أوت_سبتمبر_أكتوبر_نوفمبر_ديسمبر'.split('_'),
|
||||
weekdaysShort: 'احد_اثنين_ثلاثاء_اربعاء_خميس_جمعة_سبت'.split('_'),
|
||||
monthsShort: 'جانفي_فيفري_مارس_أفريل_ماي_جوان_جويلية_أوت_سبتمبر_أكتوبر_نوفمبر_ديسمبر'.split('_'),
|
||||
weekdaysMin: 'أح_إث_ثلا_أر_خم_جم_سب'.split('_'),
|
||||
ordinal: function ordinal(n) {
|
||||
return n;
|
||||
},
|
||||
formats: {
|
||||
LT: 'HH:mm',
|
||||
LTS: 'HH:mm:ss',
|
||||
L: 'DD/MM/YYYY',
|
||||
LL: 'D MMMM YYYY',
|
||||
LLL: 'D MMMM YYYY HH:mm',
|
||||
LLLL: 'dddd D MMMM YYYY HH:mm'
|
||||
},
|
||||
meridiem: function meridiem(hour) {
|
||||
return hour > 12 ? 'م' : 'ص';
|
||||
},
|
||||
relativeTime: {
|
||||
future: 'في %s',
|
||||
past: 'منذ %s',
|
||||
s: 'ثوان',
|
||||
m: 'دقيقة',
|
||||
mm: '%d دقائق',
|
||||
h: 'ساعة',
|
||||
hh: '%d ساعات',
|
||||
d: 'يوم',
|
||||
dd: '%d أيام',
|
||||
M: 'شهر',
|
||||
MM: '%d أشهر',
|
||||
y: 'سنة',
|
||||
yy: '%d سنوات'
|
||||
}
|
||||
};
|
||||
dayjs.locale(locale, null, true);
|
||||
export default locale;
|
|
@ -0,0 +1,42 @@
|
|||
// Arabic (Iraq) [ar-iq]
|
||||
import dayjs from '../index';
|
||||
var locale = {
|
||||
name: 'ar-iq',
|
||||
weekdays: 'الأحد_الإثنين_الثلاثاء_الأربعاء_الخميس_الجمعة_السبت'.split('_'),
|
||||
months: 'كانون الثاني_شباط_آذار_نيسان_أيار_حزيران_تموز_آب_أيلول_تشرين الأول_ تشرين الثاني_كانون الأول'.split('_'),
|
||||
weekStart: 1,
|
||||
weekdaysShort: 'أحد_إثنين_ثلاثاء_أربعاء_خميس_جمعة_سبت'.split('_'),
|
||||
monthsShort: 'كانون الثاني_شباط_آذار_نيسان_أيار_حزيران_تموز_آب_أيلول_تشرين الأول_ تشرين الثاني_كانون الأول'.split('_'),
|
||||
weekdaysMin: 'ح_ن_ث_ر_خ_ج_س'.split('_'),
|
||||
ordinal: function ordinal(n) {
|
||||
return n;
|
||||
},
|
||||
formats: {
|
||||
LT: 'HH:mm',
|
||||
LTS: 'HH:mm:ss',
|
||||
L: 'DD/MM/YYYY',
|
||||
LL: 'D MMMM YYYY',
|
||||
LLL: 'D MMMM YYYY HH:mm',
|
||||
LLLL: 'dddd D MMMM YYYY HH:mm'
|
||||
},
|
||||
meridiem: function meridiem(hour) {
|
||||
return hour > 12 ? 'م' : 'ص';
|
||||
},
|
||||
relativeTime: {
|
||||
future: 'في %s',
|
||||
past: 'منذ %s',
|
||||
s: 'ثوان',
|
||||
m: 'دقيقة',
|
||||
mm: '%d دقائق',
|
||||
h: 'ساعة',
|
||||
hh: '%d ساعات',
|
||||
d: 'يوم',
|
||||
dd: '%d أيام',
|
||||
M: 'شهر',
|
||||
MM: '%d أشهر',
|
||||
y: 'سنة',
|
||||
yy: '%d سنوات'
|
||||
}
|
||||
};
|
||||
dayjs.locale(locale, null, true);
|
||||
export default locale;
|
|
@ -0,0 +1,41 @@
|
|||
// Arabic (Kuwait) [ar-kw]
|
||||
import dayjs from '../index';
|
||||
var locale = {
|
||||
name: 'ar-kw',
|
||||
weekdays: 'الأحد_الإثنين_الثلاثاء_الأربعاء_الخميس_الجمعة_السبت'.split('_'),
|
||||
months: 'يناير_فبراير_مارس_أبريل_ماي_يونيو_يوليوز_غشت_شتنبر_أكتوبر_نونبر_دجنبر'.split('_'),
|
||||
weekdaysShort: 'احد_اثنين_ثلاثاء_اربعاء_خميس_جمعة_سبت'.split('_'),
|
||||
monthsShort: 'يناير_فبراير_مارس_أبريل_ماي_يونيو_يوليوز_غشت_شتنبر_أكتوبر_نونبر_دجنبر'.split('_'),
|
||||
weekdaysMin: 'ح_ن_ث_ر_خ_ج_س'.split('_'),
|
||||
ordinal: function ordinal(n) {
|
||||
return n;
|
||||
},
|
||||
formats: {
|
||||
LT: 'HH:mm',
|
||||
LTS: 'HH:mm:ss',
|
||||
L: 'DD/MM/YYYY',
|
||||
LL: 'D MMMM YYYY',
|
||||
LLL: 'D MMMM YYYY HH:mm',
|
||||
LLLL: 'dddd D MMMM YYYY HH:mm'
|
||||
},
|
||||
meridiem: function meridiem(hour) {
|
||||
return hour > 12 ? 'م' : 'ص';
|
||||
},
|
||||
relativeTime: {
|
||||
future: 'في %s',
|
||||
past: 'منذ %s',
|
||||
s: 'ثوان',
|
||||
m: 'دقيقة',
|
||||
mm: '%d دقائق',
|
||||
h: 'ساعة',
|
||||
hh: '%d ساعات',
|
||||
d: 'يوم',
|
||||
dd: '%d أيام',
|
||||
M: 'شهر',
|
||||
MM: '%d أشهر',
|
||||
y: 'سنة',
|
||||
yy: '%d سنوات'
|
||||
}
|
||||
};
|
||||
dayjs.locale(locale, null, true);
|
||||
export default locale;
|
|
@ -0,0 +1,27 @@
|
|||
// Arabic (Lybia) [ar-ly]
|
||||
import dayjs from '../index';
|
||||
var locale = {
|
||||
name: 'ar-ly',
|
||||
weekdays: 'الأحد_الإثنين_الثلاثاء_الأربعاء_الخميس_الجمعة_السبت'.split('_'),
|
||||
months: 'يناير_فبراير_مارس_أبريل_مايو_يونيو_يوليو_أغسطس_سبتمبر_أكتوبر_نوفمبر_ديسمبر'.split('_'),
|
||||
weekStart: 6,
|
||||
weekdaysShort: 'أحد_إثنين_ثلاثاء_أربعاء_خميس_جمعة_سبت'.split('_'),
|
||||
monthsShort: 'يناير_فبراير_مارس_أبريل_مايو_يونيو_يوليو_أغسطس_سبتمبر_أكتوبر_نوفمبر_ديسمبر'.split('_'),
|
||||
weekdaysMin: 'ح_ن_ث_ر_خ_ج_س'.split('_'),
|
||||
ordinal: function ordinal(n) {
|
||||
return n;
|
||||
},
|
||||
meridiem: function meridiem(hour) {
|
||||
return hour > 12 ? 'م' : 'ص';
|
||||
},
|
||||
formats: {
|
||||
LT: 'HH:mm',
|
||||
LTS: 'HH:mm:ss',
|
||||
L: 'D/M/YYYY',
|
||||
LL: 'D MMMM YYYY',
|
||||
LLL: 'D MMMM YYYY HH:mm',
|
||||
LLLL: 'dddd D MMMM YYYY HH:mm'
|
||||
}
|
||||
};
|
||||
dayjs.locale(locale, null, true);
|
||||
export default locale;
|
|
@ -0,0 +1,42 @@
|
|||
// Arabic (Morocco) [ar-ma]
|
||||
import dayjs from '../index';
|
||||
var locale = {
|
||||
name: 'ar-ma',
|
||||
weekdays: 'الأحد_الإثنين_الثلاثاء_الأربعاء_الخميس_الجمعة_السبت'.split('_'),
|
||||
months: 'يناير_فبراير_مارس_أبريل_ماي_يونيو_يوليوز_غشت_شتنبر_أكتوبر_نونبر_دجنبر'.split('_'),
|
||||
weekStart: 6,
|
||||
weekdaysShort: 'احد_إثنين_ثلاثاء_اربعاء_خميس_جمعة_سبت'.split('_'),
|
||||
monthsShort: 'يناير_فبراير_مارس_أبريل_ماي_يونيو_يوليوز_غشت_شتنبر_أكتوبر_نونبر_دجنبر'.split('_'),
|
||||
weekdaysMin: 'ح_ن_ث_ر_خ_ج_س'.split('_'),
|
||||
ordinal: function ordinal(n) {
|
||||
return n;
|
||||
},
|
||||
formats: {
|
||||
LT: 'HH:mm',
|
||||
LTS: 'HH:mm:ss',
|
||||
L: 'DD/MM/YYYY',
|
||||
LL: 'D MMMM YYYY',
|
||||
LLL: 'D MMMM YYYY HH:mm',
|
||||
LLLL: 'dddd D MMMM YYYY HH:mm'
|
||||
},
|
||||
meridiem: function meridiem(hour) {
|
||||
return hour > 12 ? 'م' : 'ص';
|
||||
},
|
||||
relativeTime: {
|
||||
future: 'في %s',
|
||||
past: 'منذ %s',
|
||||
s: 'ثوان',
|
||||
m: 'دقيقة',
|
||||
mm: '%d دقائق',
|
||||
h: 'ساعة',
|
||||
hh: '%d ساعات',
|
||||
d: 'يوم',
|
||||
dd: '%d أيام',
|
||||
M: 'شهر',
|
||||
MM: '%d أشهر',
|
||||
y: 'سنة',
|
||||
yy: '%d سنوات'
|
||||
}
|
||||
};
|
||||
dayjs.locale(locale, null, true);
|
||||
export default locale;
|
|
@ -0,0 +1,41 @@
|
|||
// Arabic (Saudi Arabia) [ar-sa]
|
||||
import dayjs from '../index';
|
||||
var locale = {
|
||||
name: 'ar-sa',
|
||||
weekdays: 'الأحد_الإثنين_الثلاثاء_الأربعاء_الخميس_الجمعة_السبت'.split('_'),
|
||||
months: 'يناير_فبراير_مارس_أبريل_مايو_يونيو_يوليو_أغسطس_سبتمبر_أكتوبر_نوفمبر_ديسمبر'.split('_'),
|
||||
weekdaysShort: 'أحد_إثنين_ثلاثاء_أربعاء_خميس_جمعة_سبت'.split('_'),
|
||||
monthsShort: 'يناير_فبراير_مارس_أبريل_مايو_يونيو_يوليو_أغسطس_سبتمبر_أكتوبر_نوفمبر_ديسمبر'.split('_'),
|
||||
weekdaysMin: 'ح_ن_ث_ر_خ_ج_س'.split('_'),
|
||||
ordinal: function ordinal(n) {
|
||||
return n;
|
||||
},
|
||||
formats: {
|
||||
LT: 'HH:mm',
|
||||
LTS: 'HH:mm:ss',
|
||||
L: 'DD/MM/YYYY',
|
||||
LL: 'D MMMM YYYY',
|
||||
LLL: 'D MMMM YYYY HH:mm',
|
||||
LLLL: 'dddd D MMMM YYYY HH:mm'
|
||||
},
|
||||
meridiem: function meridiem(hour) {
|
||||
return hour > 12 ? 'م' : 'ص';
|
||||
},
|
||||
relativeTime: {
|
||||
future: 'في %s',
|
||||
past: 'منذ %s',
|
||||
s: 'ثوان',
|
||||
m: 'دقيقة',
|
||||
mm: '%d دقائق',
|
||||
h: 'ساعة',
|
||||
hh: '%d ساعات',
|
||||
d: 'يوم',
|
||||
dd: '%d أيام',
|
||||
M: 'شهر',
|
||||
MM: '%d أشهر',
|
||||
y: 'سنة',
|
||||
yy: '%d سنوات'
|
||||
}
|
||||
};
|
||||
dayjs.locale(locale, null, true);
|
||||
export default locale;
|
|
@ -0,0 +1,42 @@
|
|||
// Arabic (Tunisia) [ar-tn]
|
||||
import dayjs from '../index';
|
||||
var locale = {
|
||||
name: 'ar-tn',
|
||||
weekdays: 'الأحد_الإثنين_الثلاثاء_الأربعاء_الخميس_الجمعة_السبت'.split('_'),
|
||||
months: 'جانفي_فيفري_مارس_أفريل_ماي_جوان_جويلية_أوت_سبتمبر_أكتوبر_نوفمبر_ديسمبر'.split('_'),
|
||||
weekStart: 1,
|
||||
weekdaysShort: 'أحد_إثنين_ثلاثاء_أربعاء_خميس_جمعة_سبت'.split('_'),
|
||||
monthsShort: 'جانفي_فيفري_مارس_أفريل_ماي_جوان_جويلية_أوت_سبتمبر_أكتوبر_نوفمبر_ديسمبر'.split('_'),
|
||||
weekdaysMin: 'ح_ن_ث_ر_خ_ج_س'.split('_'),
|
||||
ordinal: function ordinal(n) {
|
||||
return n;
|
||||
},
|
||||
formats: {
|
||||
LT: 'HH:mm',
|
||||
LTS: 'HH:mm:ss',
|
||||
L: 'DD/MM/YYYY',
|
||||
LL: 'D MMMM YYYY',
|
||||
LLL: 'D MMMM YYYY HH:mm',
|
||||
LLLL: 'dddd D MMMM YYYY HH:mm'
|
||||
},
|
||||
meridiem: function meridiem(hour) {
|
||||
return hour > 12 ? 'م' : 'ص';
|
||||
},
|
||||
relativeTime: {
|
||||
future: 'في %s',
|
||||
past: 'منذ %s',
|
||||
s: 'ثوان',
|
||||
m: 'دقيقة',
|
||||
mm: '%d دقائق',
|
||||
h: 'ساعة',
|
||||
hh: '%d ساعات',
|
||||
d: 'يوم',
|
||||
dd: '%d أيام',
|
||||
M: 'شهر',
|
||||
MM: '%d أشهر',
|
||||
y: 'سنة',
|
||||
yy: '%d سنوات'
|
||||
}
|
||||
};
|
||||
dayjs.locale(locale, null, true);
|
||||
export default locale;
|
|
@ -0,0 +1,77 @@
|
|||
// Arabic [ar]
|
||||
import dayjs from '../index';
|
||||
var months = 'يناير_فبراير_مارس_أبريل_مايو_يونيو_يوليو_أغسطس_سبتمبر_أكتوبر_نوفمبر_ديسمبر'.split('_');
|
||||
var symbolMap = {
|
||||
1: '١',
|
||||
2: '٢',
|
||||
3: '٣',
|
||||
4: '٤',
|
||||
5: '٥',
|
||||
6: '٦',
|
||||
7: '٧',
|
||||
8: '٨',
|
||||
9: '٩',
|
||||
0: '٠'
|
||||
};
|
||||
var numberMap = {
|
||||
'١': '1',
|
||||
'٢': '2',
|
||||
'٣': '3',
|
||||
'٤': '4',
|
||||
'٥': '5',
|
||||
'٦': '6',
|
||||
'٧': '7',
|
||||
'٨': '8',
|
||||
'٩': '9',
|
||||
'٠': '0'
|
||||
};
|
||||
var locale = {
|
||||
name: 'ar',
|
||||
weekdays: 'الأحد_الإثنين_الثلاثاء_الأربعاء_الخميس_الجمعة_السبت'.split('_'),
|
||||
weekdaysShort: 'أحد_إثنين_ثلاثاء_أربعاء_خميس_جمعة_سبت'.split('_'),
|
||||
weekdaysMin: 'ح_ن_ث_ر_خ_ج_س'.split('_'),
|
||||
months: months,
|
||||
monthsShort: months,
|
||||
weekStart: 6,
|
||||
meridiem: function meridiem(hour) {
|
||||
return hour > 12 ? 'م' : 'ص';
|
||||
},
|
||||
relativeTime: {
|
||||
future: 'بعد %s',
|
||||
past: 'منذ %s',
|
||||
s: 'ثانية واحدة',
|
||||
m: 'دقيقة واحدة',
|
||||
mm: '%d دقائق',
|
||||
h: 'ساعة واحدة',
|
||||
hh: '%d ساعات',
|
||||
d: 'يوم واحد',
|
||||
dd: '%d أيام',
|
||||
M: 'شهر واحد',
|
||||
MM: '%d أشهر',
|
||||
y: 'عام واحد',
|
||||
yy: '%d أعوام'
|
||||
},
|
||||
preparse: function preparse(string) {
|
||||
return string.replace(/[١٢٣٤٥٦٧٨٩٠]/g, function (match) {
|
||||
return numberMap[match];
|
||||
}).replace(/،/g, ',');
|
||||
},
|
||||
postformat: function postformat(string) {
|
||||
return string.replace(/\d/g, function (match) {
|
||||
return symbolMap[match];
|
||||
}).replace(/,/g, '،');
|
||||
},
|
||||
ordinal: function ordinal(n) {
|
||||
return n;
|
||||
},
|
||||
formats: {
|
||||
LT: 'HH:mm',
|
||||
LTS: 'HH:mm:ss',
|
||||
L: 'D/M/YYYY',
|
||||
LL: 'D MMMM YYYY',
|
||||
LLL: 'D MMMM YYYY HH:mm',
|
||||
LLLL: 'dddd D MMMM YYYY HH:mm'
|
||||
}
|
||||
};
|
||||
dayjs.locale(locale, null, true);
|
||||
export default locale;
|
|
@ -0,0 +1,39 @@
|
|||
// Azerbaijani [az]
|
||||
import dayjs from '../index';
|
||||
var locale = {
|
||||
name: 'az',
|
||||
weekdays: 'Bazar_Bazar ertəsi_Çərşənbə axşamı_Çərşənbə_Cümə axşamı_Cümə_Şənbə'.split('_'),
|
||||
weekdaysShort: 'Baz_BzE_ÇAx_Çər_CAx_Cüm_Şən'.split('_'),
|
||||
weekdaysMin: 'Bz_BE_ÇA_Çə_CA_Cü_Şə'.split('_'),
|
||||
months: 'yanvar_fevral_mart_aprel_may_iyun_iyul_avqust_sentyabr_oktyabr_noyabr_dekabr'.split('_'),
|
||||
monthsShort: 'yan_fev_mar_apr_may_iyn_iyl_avq_sen_okt_noy_dek'.split('_'),
|
||||
weekStart: 1,
|
||||
formats: {
|
||||
LT: 'H:mm',
|
||||
LTS: 'H:mm:ss',
|
||||
L: 'DD.MM.YYYY',
|
||||
LL: 'D MMMM YYYY г.',
|
||||
LLL: 'D MMMM YYYY г., H:mm',
|
||||
LLLL: 'dddd, D MMMM YYYY г., H:mm'
|
||||
},
|
||||
relativeTime: {
|
||||
future: '%s sonra',
|
||||
past: '%s əvvəl',
|
||||
s: 'bir neçə saniyə',
|
||||
m: 'bir dəqiqə',
|
||||
mm: '%d dəqiqə',
|
||||
h: 'bir saat',
|
||||
hh: '%d saat',
|
||||
d: 'bir gün',
|
||||
dd: '%d gün',
|
||||
M: 'bir ay',
|
||||
MM: '%d ay',
|
||||
y: 'bir il',
|
||||
yy: '%d il'
|
||||
},
|
||||
ordinal: function ordinal(n) {
|
||||
return n;
|
||||
}
|
||||
};
|
||||
dayjs.locale(locale, null, true);
|
||||
export default locale;
|
|
@ -0,0 +1,24 @@
|
|||
// Belarusian [be]
|
||||
import dayjs from '../index';
|
||||
var locale = {
|
||||
name: 'be',
|
||||
weekdays: 'нядзелю_панядзелак_аўторак_сераду_чацвер_пятніцу_суботу'.split('_'),
|
||||
months: 'студзеня_лютага_сакавіка_красавіка_траўня_чэрвеня_ліпеня_жніўня_верасня_кастрычніка_лістапада_снежня'.split('_'),
|
||||
weekStart: 1,
|
||||
weekdaysShort: 'нд_пн_ат_ср_чц_пт_сб'.split('_'),
|
||||
monthsShort: 'студ_лют_сак_крас_трав_чэрв_ліп_жнів_вер_каст_ліст_снеж'.split('_'),
|
||||
weekdaysMin: 'нд_пн_ат_ср_чц_пт_сб'.split('_'),
|
||||
ordinal: function ordinal(n) {
|
||||
return n;
|
||||
},
|
||||
formats: {
|
||||
LT: 'HH:mm',
|
||||
LTS: 'HH:mm:ss',
|
||||
L: 'DD.MM.YYYY',
|
||||
LL: 'D MMMM YYYY г.',
|
||||
LLL: 'D MMMM YYYY г., HH:mm',
|
||||
LLLL: 'dddd, D MMMM YYYY г., HH:mm'
|
||||
}
|
||||
};
|
||||
dayjs.locale(locale, null, true);
|
||||
export default locale;
|
|
@ -0,0 +1,55 @@
|
|||
// Bulgarian [bg]
|
||||
import dayjs from '../index';
|
||||
var locale = {
|
||||
name: 'bg',
|
||||
weekdays: 'неделя_понеделник_вторник_сряда_четвъртък_петък_събота'.split('_'),
|
||||
weekdaysShort: 'нед_пон_вто_сря_чет_пет_съб'.split('_'),
|
||||
weekdaysMin: 'нд_пн_вт_ср_чт_пт_сб'.split('_'),
|
||||
months: 'януари_февруари_март_април_май_юни_юли_август_септември_октомври_ноември_декември'.split('_'),
|
||||
monthsShort: 'янр_фев_мар_апр_май_юни_юли_авг_сеп_окт_ное_дек'.split('_'),
|
||||
weekStart: 1,
|
||||
ordinal: function ordinal(n) {
|
||||
var last2Digits = n % 100;
|
||||
|
||||
if (last2Digits > 10 && last2Digits < 20) {
|
||||
return n + "-\u0442\u0438";
|
||||
}
|
||||
|
||||
var lastDigit = n % 10;
|
||||
|
||||
if (lastDigit === 1) {
|
||||
return n + "-\u0432\u0438";
|
||||
} else if (lastDigit === 2) {
|
||||
return n + "-\u0440\u0438";
|
||||
} else if (lastDigit === 7 || lastDigit === 8) {
|
||||
return n + "-\u043C\u0438";
|
||||
}
|
||||
|
||||
return n + "-\u0442\u0438";
|
||||
},
|
||||
formats: {
|
||||
LT: 'H:mm',
|
||||
LTS: 'H:mm:ss',
|
||||
L: 'D.MM.YYYY',
|
||||
LL: 'D MMMM YYYY',
|
||||
LLL: 'D MMMM YYYY H:mm',
|
||||
LLLL: 'dddd, D MMMM YYYY H:mm'
|
||||
},
|
||||
relativeTime: {
|
||||
future: 'след %s',
|
||||
past: 'преди %s',
|
||||
s: 'няколко секунди',
|
||||
m: 'минута',
|
||||
mm: '%d минути',
|
||||
h: 'час',
|
||||
hh: '%d часа',
|
||||
d: 'ден',
|
||||
dd: '%d дена',
|
||||
M: 'месец',
|
||||
MM: '%d месеца',
|
||||
y: 'година',
|
||||
yy: '%d години'
|
||||
}
|
||||
};
|
||||
dayjs.locale(locale, null, true);
|
||||
export default locale;
|
|
@ -0,0 +1,39 @@
|
|||
// Bislama [bi]
|
||||
import dayjs from '../index';
|
||||
var locale = {
|
||||
name: 'bi',
|
||||
weekdays: 'Sande_Mande_Tusde_Wenesde_Tosde_Fraede_Sarade'.split('_'),
|
||||
months: 'Januari_Februari_Maj_Eprel_Mei_Jun_Julae_Okis_Septemba_Oktoba_Novemba_Disemba'.split('_'),
|
||||
weekStart: 1,
|
||||
weekdaysShort: 'San_Man_Tus_Wen_Tos_Frae_Sar'.split('_'),
|
||||
monthsShort: 'Jan_Feb_Maj_Epr_Mai_Jun_Jul_Oki_Sep_Okt_Nov_Dis'.split('_'),
|
||||
weekdaysMin: 'San_Ma_Tu_We_To_Fr_Sar'.split('_'),
|
||||
ordinal: function ordinal(n) {
|
||||
return n;
|
||||
},
|
||||
formats: {
|
||||
LT: 'h:mm A',
|
||||
LTS: 'h:mm:ss A',
|
||||
L: 'DD/MM/YYYY',
|
||||
LL: 'D MMMM YYYY',
|
||||
LLL: 'D MMMM YYYY h:mm A',
|
||||
LLLL: 'dddd, D MMMM YYYY h:mm A'
|
||||
},
|
||||
relativeTime: {
|
||||
future: 'lo %s',
|
||||
past: '%s bifo',
|
||||
s: 'sam seken',
|
||||
m: 'wan minit',
|
||||
mm: '%d minit',
|
||||
h: 'wan haoa',
|
||||
hh: '%d haoa',
|
||||
d: 'wan dei',
|
||||
dd: '%d dei',
|
||||
M: 'wan manis',
|
||||
MM: '%d manis',
|
||||
y: 'wan yia',
|
||||
yy: '%d yia'
|
||||
}
|
||||
};
|
||||
dayjs.locale(locale, null, true);
|
||||
export default locale;
|
|
@ -0,0 +1,39 @@
|
|||
// Bambara [bm]
|
||||
import dayjs from '../index';
|
||||
var locale = {
|
||||
name: 'bm',
|
||||
weekdays: 'Kari_Ntɛnɛn_Tarata_Araba_Alamisa_Juma_Sibiri'.split('_'),
|
||||
months: 'Zanwuyekalo_Fewuruyekalo_Marisikalo_Awirilikalo_Mɛkalo_Zuwɛnkalo_Zuluyekalo_Utikalo_Sɛtanburukalo_ɔkutɔburukalo_Nowanburukalo_Desanburukalo'.split('_'),
|
||||
weekStart: 1,
|
||||
weekdaysShort: 'Kar_Ntɛ_Tar_Ara_Ala_Jum_Sib'.split('_'),
|
||||
monthsShort: 'Zan_Few_Mar_Awi_Mɛ_Zuw_Zul_Uti_Sɛt_ɔku_Now_Des'.split('_'),
|
||||
weekdaysMin: 'Ka_Nt_Ta_Ar_Al_Ju_Si'.split('_'),
|
||||
ordinal: function ordinal(n) {
|
||||
return n;
|
||||
},
|
||||
formats: {
|
||||
LT: 'HH:mm',
|
||||
LTS: 'HH:mm:ss',
|
||||
L: 'DD/MM/YYYY',
|
||||
LL: 'MMMM [tile] D [san] YYYY',
|
||||
LLL: 'MMMM [tile] D [san] YYYY [lɛrɛ] HH:mm',
|
||||
LLLL: 'dddd MMMM [tile] D [san] YYYY [lɛrɛ] HH:mm'
|
||||
},
|
||||
relativeTime: {
|
||||
future: '%s kɔnɔ',
|
||||
past: 'a bɛ %s bɔ',
|
||||
s: 'sanga dama dama',
|
||||
m: 'miniti kelen',
|
||||
mm: 'miniti %d',
|
||||
h: 'lɛrɛ kelen',
|
||||
hh: 'lɛrɛ %d',
|
||||
d: 'tile kelen',
|
||||
dd: 'tile %d',
|
||||
M: 'kalo kelen',
|
||||
MM: 'kalo %d',
|
||||
y: 'san kelen',
|
||||
yy: 'san %d'
|
||||
}
|
||||
};
|
||||
dayjs.locale(locale, null, true);
|
||||
export default locale;
|
|
@ -0,0 +1,81 @@
|
|||
// Bengali (Bangladesh) [bn-bd]
|
||||
import dayjs from '../index';
|
||||
var symbolMap = {
|
||||
1: '১',
|
||||
2: '২',
|
||||
3: '৩',
|
||||
4: '৪',
|
||||
5: '৫',
|
||||
6: '৬',
|
||||
7: '৭',
|
||||
8: '৮',
|
||||
9: '৯',
|
||||
0: '০'
|
||||
};
|
||||
var numberMap = {
|
||||
'১': '1',
|
||||
'২': '2',
|
||||
'৩': '3',
|
||||
'৪': '4',
|
||||
'৫': '5',
|
||||
'৬': '6',
|
||||
'৭': '7',
|
||||
'৮': '8',
|
||||
'৯': '9',
|
||||
'০': '0'
|
||||
};
|
||||
var locale = {
|
||||
name: 'bn-bd',
|
||||
weekdays: 'রবিবার_সোমবার_মঙ্গলবার_বুধবার_বৃহস্পতিবার_শুক্রবার_শনিবার'.split('_'),
|
||||
months: 'জানুয়ারি_ফেব্রুয়ারি_মার্চ_এপ্রিল_মে_জুন_জুলাই_আগস্ট_সেপ্টেম্বর_অক্টোবর_নভেম্বর_ডিসেম্বর'.split('_'),
|
||||
weekdaysShort: 'রবি_সোম_মঙ্গল_বুধ_বৃহস্পতি_শুক্র_শনি'.split('_'),
|
||||
monthsShort: 'জানু_ফেব্রু_মার্চ_এপ্রিল_মে_জুন_জুলাই_আগস্ট_সেপ্ট_অক্টো_নভে_ডিসে'.split('_'),
|
||||
weekdaysMin: 'রবি_সোম_মঙ্গ_বুধ_বৃহঃ_শুক্র_শনি'.split('_'),
|
||||
weekStart: 0,
|
||||
preparse: function preparse(string) {
|
||||
return string.replace(/[১২৩৪৫৬৭৮৯০]/g, function (match) {
|
||||
return numberMap[match];
|
||||
});
|
||||
},
|
||||
postformat: function postformat(string) {
|
||||
return string.replace(/\d/g, function (match) {
|
||||
return symbolMap[match];
|
||||
});
|
||||
},
|
||||
ordinal: function ordinal(n) {
|
||||
var s = ['ই', 'লা', 'রা', 'ঠা', 'শে'];
|
||||
var v = n % 100;
|
||||
return "[" + n + (s[(v - 20) % 10] || s[v] || s[0]) + "]";
|
||||
},
|
||||
formats: {
|
||||
LT: 'A h:mm সময়',
|
||||
LTS: 'A h:mm:ss সময়',
|
||||
L: 'DD/MM/YYYY খ্রিস্টাব্দ',
|
||||
LL: 'D MMMM YYYY খ্রিস্টাব্দ',
|
||||
LLL: 'D MMMM YYYY খ্রিস্টাব্দ, A h:mm সময়',
|
||||
LLLL: 'dddd, D MMMM YYYY খ্রিস্টাব্দ, A h:mm সময়'
|
||||
},
|
||||
meridiem: function meridiem(hour) {
|
||||
return (
|
||||
/* eslint-disable no-nested-ternary */
|
||||
hour < 4 ? 'রাত' : hour < 6 ? 'ভোর' : hour < 12 ? 'সকাল' : hour < 15 ? 'দুপুর' : hour < 18 ? 'বিকাল' : hour < 20 ? 'সন্ধ্যা' : 'রাত'
|
||||
);
|
||||
},
|
||||
relativeTime: {
|
||||
future: '%s পরে',
|
||||
past: '%s আগে',
|
||||
s: 'কয়েক সেকেন্ড',
|
||||
m: 'এক মিনিট',
|
||||
mm: '%d মিনিট',
|
||||
h: 'এক ঘন্টা',
|
||||
hh: '%d ঘন্টা',
|
||||
d: 'এক দিন',
|
||||
dd: '%d দিন',
|
||||
M: 'এক মাস',
|
||||
MM: '%d মাস',
|
||||
y: 'এক বছর',
|
||||
yy: '%d বছর'
|
||||
}
|
||||
};
|
||||
dayjs.locale(locale, null, true);
|
||||
export default locale;
|
|
@ -0,0 +1,72 @@
|
|||
// Bengali [bn]
|
||||
import dayjs from '../index';
|
||||
var symbolMap = {
|
||||
1: '১',
|
||||
2: '২',
|
||||
3: '৩',
|
||||
4: '৪',
|
||||
5: '৫',
|
||||
6: '৬',
|
||||
7: '৭',
|
||||
8: '৮',
|
||||
9: '৯',
|
||||
0: '০'
|
||||
};
|
||||
var numberMap = {
|
||||
'১': '1',
|
||||
'২': '2',
|
||||
'৩': '3',
|
||||
'৪': '4',
|
||||
'৫': '5',
|
||||
'৬': '6',
|
||||
'৭': '7',
|
||||
'৮': '8',
|
||||
'৯': '9',
|
||||
'০': '0'
|
||||
};
|
||||
var locale = {
|
||||
name: 'bn',
|
||||
weekdays: 'রবিবার_সোমবার_মঙ্গলবার_বুধবার_বৃহস্পতিবার_শুক্রবার_শনিবার'.split('_'),
|
||||
months: 'জানুয়ারি_ফেব্রুয়ারি_মার্চ_এপ্রিল_মে_জুন_জুলাই_আগস্ট_সেপ্টেম্বর_অক্টোবর_নভেম্বর_ডিসেম্বর'.split('_'),
|
||||
weekdaysShort: 'রবি_সোম_মঙ্গল_বুধ_বৃহস্পতি_শুক্র_শনি'.split('_'),
|
||||
monthsShort: 'জানু_ফেব্রু_মার্চ_এপ্রিল_মে_জুন_জুলাই_আগস্ট_সেপ্ট_অক্টো_নভে_ডিসে'.split('_'),
|
||||
weekdaysMin: 'রবি_সোম_মঙ্গ_বুধ_বৃহঃ_শুক্র_শনি'.split('_'),
|
||||
preparse: function preparse(string) {
|
||||
return string.replace(/[১২৩৪৫৬৭৮৯০]/g, function (match) {
|
||||
return numberMap[match];
|
||||
});
|
||||
},
|
||||
postformat: function postformat(string) {
|
||||
return string.replace(/\d/g, function (match) {
|
||||
return symbolMap[match];
|
||||
});
|
||||
},
|
||||
ordinal: function ordinal(n) {
|
||||
return n;
|
||||
},
|
||||
formats: {
|
||||
LT: 'A h:mm সময়',
|
||||
LTS: 'A h:mm:ss সময়',
|
||||
L: 'DD/MM/YYYY',
|
||||
LL: 'D MMMM YYYY',
|
||||
LLL: 'D MMMM YYYY, A h:mm সময়',
|
||||
LLLL: 'dddd, D MMMM YYYY, A h:mm সময়'
|
||||
},
|
||||
relativeTime: {
|
||||
future: '%s পরে',
|
||||
past: '%s আগে',
|
||||
s: 'কয়েক সেকেন্ড',
|
||||
m: 'এক মিনিট',
|
||||
mm: '%d মিনিট',
|
||||
h: 'এক ঘন্টা',
|
||||
hh: '%d ঘন্টা',
|
||||
d: 'এক দিন',
|
||||
dd: '%d দিন',
|
||||
M: 'এক মাস',
|
||||
MM: '%d মাস',
|
||||
y: 'এক বছর',
|
||||
yy: '%d বছর'
|
||||
}
|
||||
};
|
||||
dayjs.locale(locale, null, true);
|
||||
export default locale;
|
|
@ -0,0 +1,38 @@
|
|||
// Tibetan [bo]
|
||||
import dayjs from '../index';
|
||||
var locale = {
|
||||
name: 'bo',
|
||||
weekdays: 'གཟའ་ཉི་མ་_གཟའ་ཟླ་བ་_གཟའ་མིག་དམར་_གཟའ་ལྷག་པ་_གཟའ་ཕུར་བུ_གཟའ་པ་སངས་_གཟའ་སྤེན་པ་'.split('_'),
|
||||
weekdaysShort: 'ཉི་མ་_ཟླ་བ་_མིག་དམར་_ལྷག་པ་_ཕུར་བུ_པ་སངས་_སྤེན་པ་'.split('_'),
|
||||
weekdaysMin: 'ཉི་མ་_ཟླ་བ་_མིག་དམར་_ལྷག་པ་_ཕུར་བུ_པ་སངས་_སྤེན་པ་'.split('_'),
|
||||
months: 'ཟླ་བ་དང་པོ_ཟླ་བ་གཉིས་པ_ཟླ་བ་གསུམ་པ_ཟླ་བ་བཞི་པ_ཟླ་བ་ལྔ་པ_ཟླ་བ་དྲུག་པ_ཟླ་བ་བདུན་པ_ཟླ་བ་བརྒྱད་པ_ཟླ་བ་དགུ་པ_ཟླ་བ་བཅུ་པ_ཟླ་བ་བཅུ་གཅིག་པ_ཟླ་བ་བཅུ་གཉིས་པ'.split('_'),
|
||||
monthsShort: 'ཟླ་དང་པོ_ཟླ་གཉིས་པ_ཟླ་གསུམ་པ_ཟླ་བཞི་པ_ཟླ་ལྔ་པ_ཟླ་དྲུག་པ_ཟླ་བདུན་པ_ཟླ་བརྒྱད་པ_ཟླ་དགུ་པ_ཟླ་བཅུ་པ_ཟླ་བཅུ་གཅིག་པ_ཟླ་བཅུ་གཉིས་པ'.split('_'),
|
||||
ordinal: function ordinal(n) {
|
||||
return n;
|
||||
},
|
||||
formats: {
|
||||
LT: 'A h:mm',
|
||||
LTS: 'A h:mm:ss',
|
||||
L: 'DD/MM/YYYY',
|
||||
LL: 'D MMMM YYYY',
|
||||
LLL: 'D MMMM YYYY, A h:mm',
|
||||
LLLL: 'dddd, D MMMM YYYY, A h:mm'
|
||||
},
|
||||
relativeTime: {
|
||||
future: '%s ལ་',
|
||||
past: '%s སྔོན་ལ་',
|
||||
s: 'ཏོག་ཙམ་',
|
||||
m: 'སྐར་མ་གཅིག་',
|
||||
mm: 'སྐར་མ་ %d',
|
||||
h: 'ཆུ་ཚོད་གཅིག་',
|
||||
hh: 'ཆུ་ཚོད་ %d',
|
||||
d: 'ཉིན་གཅིག་',
|
||||
dd: 'ཉིན་ %d',
|
||||
M: 'ཟླ་བ་གཅིག་',
|
||||
MM: 'ཟླ་བ་ %d',
|
||||
y: 'ལོ་གཅིག་',
|
||||
yy: 'ལོ་ %d'
|
||||
}
|
||||
};
|
||||
dayjs.locale(locale, null, true);
|
||||
export default locale;
|
|
@ -0,0 +1,93 @@
|
|||
// Breton [br]
|
||||
import dayjs from '../index';
|
||||
|
||||
function lastNumber(number) {
|
||||
if (number > 9) {
|
||||
return lastNumber(number % 10);
|
||||
}
|
||||
|
||||
return number;
|
||||
}
|
||||
|
||||
function softMutation(text) {
|
||||
var mutationTable = {
|
||||
m: 'v',
|
||||
b: 'v',
|
||||
d: 'z'
|
||||
};
|
||||
return mutationTable[text.charAt(0)] + text.substring(1);
|
||||
}
|
||||
|
||||
function mutation(text, number) {
|
||||
if (number === 2) {
|
||||
return softMutation(text);
|
||||
}
|
||||
|
||||
return text;
|
||||
}
|
||||
|
||||
function relativeTimeWithMutation(number, withoutSuffix, key) {
|
||||
var format = {
|
||||
mm: 'munutenn',
|
||||
MM: 'miz',
|
||||
dd: 'devezh'
|
||||
};
|
||||
return number + " " + mutation(format[key], number);
|
||||
}
|
||||
|
||||
function specialMutationForYears(number) {
|
||||
/* istanbul ignore next line */
|
||||
switch (lastNumber(number)) {
|
||||
case 1:
|
||||
case 3:
|
||||
case 4:
|
||||
case 5:
|
||||
case 9:
|
||||
return number + " bloaz";
|
||||
|
||||
default:
|
||||
return number + " vloaz";
|
||||
}
|
||||
}
|
||||
|
||||
var locale = {
|
||||
name: 'br',
|
||||
weekdays: 'Sul_Lun_Meurzh_Mercʼher_Yaou_Gwener_Sadorn'.split('_'),
|
||||
months: 'Genver_Cʼhwevrer_Meurzh_Ebrel_Mae_Mezheven_Gouere_Eost_Gwengolo_Here_Du_Kerzu'.split('_'),
|
||||
weekStart: 1,
|
||||
weekdaysShort: 'Sul_Lun_Meu_Mer_Yao_Gwe_Sad'.split('_'),
|
||||
monthsShort: 'Gen_Cʼhwe_Meu_Ebr_Mae_Eve_Gou_Eos_Gwe_Her_Du_Ker'.split('_'),
|
||||
weekdaysMin: 'Su_Lu_Me_Mer_Ya_Gw_Sa'.split('_'),
|
||||
ordinal: function ordinal(n) {
|
||||
return n;
|
||||
},
|
||||
formats: {
|
||||
LT: 'h[e]mm A',
|
||||
LTS: 'h[e]mm:ss A',
|
||||
L: 'DD/MM/YYYY',
|
||||
LL: 'D [a viz] MMMM YYYY',
|
||||
LLL: 'D [a viz] MMMM YYYY h[e]mm A',
|
||||
LLLL: 'dddd, D [a viz] MMMM YYYY h[e]mm A'
|
||||
},
|
||||
relativeTime: {
|
||||
future: 'a-benn %s',
|
||||
past: '%s ʼzo',
|
||||
s: 'un nebeud segondennoù',
|
||||
m: 'ur vunutenn',
|
||||
mm: relativeTimeWithMutation,
|
||||
h: 'un eur',
|
||||
hh: '%d eur',
|
||||
d: 'un devezh',
|
||||
dd: relativeTimeWithMutation,
|
||||
M: 'ur miz',
|
||||
MM: relativeTimeWithMutation,
|
||||
y: 'ur bloaz',
|
||||
yy: specialMutationForYears
|
||||
},
|
||||
meridiem: function meridiem(hour) {
|
||||
return hour < 12 ? 'a.m.' : 'g.m.';
|
||||
} // a-raok merenn | goude merenn
|
||||
|
||||
};
|
||||
dayjs.locale(locale, null, true);
|
||||
export default locale;
|
|
@ -0,0 +1,24 @@
|
|||
// Bosnian [bs]
|
||||
import dayjs from '../index';
|
||||
var locale = {
|
||||
name: 'bs',
|
||||
weekdays: 'nedjelja_ponedjeljak_utorak_srijeda_četvrtak_petak_subota'.split('_'),
|
||||
months: 'januar_februar_mart_april_maj_juni_juli_august_septembar_oktobar_novembar_decembar'.split('_'),
|
||||
weekStart: 1,
|
||||
weekdaysShort: 'ned._pon._uto._sri._čet._pet._sub.'.split('_'),
|
||||
monthsShort: 'jan._feb._mar._apr._maj._jun._jul._aug._sep._okt._nov._dec.'.split('_'),
|
||||
weekdaysMin: 'ne_po_ut_sr_če_pe_su'.split('_'),
|
||||
ordinal: function ordinal(n) {
|
||||
return n;
|
||||
},
|
||||
formats: {
|
||||
LT: 'H:mm',
|
||||
LTS: 'H:mm:ss',
|
||||
L: 'DD.MM.YYYY',
|
||||
LL: 'D. MMMM YYYY',
|
||||
LLL: 'D. MMMM YYYY H:mm',
|
||||
LLLL: 'dddd, D. MMMM YYYY H:mm'
|
||||
}
|
||||
};
|
||||
dayjs.locale(locale, null, true);
|
||||
export default locale;
|
|
@ -0,0 +1,44 @@
|
|||
// Catalan [ca]
|
||||
import dayjs from '../index';
|
||||
var locale = {
|
||||
name: 'ca',
|
||||
weekdays: 'Diumenge_Dilluns_Dimarts_Dimecres_Dijous_Divendres_Dissabte'.split('_'),
|
||||
weekdaysShort: 'Dg._Dl._Dt._Dc._Dj._Dv._Ds.'.split('_'),
|
||||
weekdaysMin: 'Dg_Dl_Dt_Dc_Dj_Dv_Ds'.split('_'),
|
||||
months: 'Gener_Febrer_Març_Abril_Maig_Juny_Juliol_Agost_Setembre_Octubre_Novembre_Desembre'.split('_'),
|
||||
monthsShort: 'Gen._Febr._Març_Abr._Maig_Juny_Jul._Ag._Set._Oct._Nov._Des.'.split('_'),
|
||||
weekStart: 1,
|
||||
formats: {
|
||||
LT: 'H:mm',
|
||||
LTS: 'H:mm:ss',
|
||||
L: 'DD/MM/YYYY',
|
||||
LL: 'D MMMM [de] YYYY',
|
||||
LLL: 'D MMMM [de] YYYY [a les] H:mm',
|
||||
LLLL: 'dddd D MMMM [de] YYYY [a les] H:mm',
|
||||
ll: 'D MMM YYYY',
|
||||
lll: 'D MMM YYYY, H:mm',
|
||||
llll: 'ddd D MMM YYYY, H:mm'
|
||||
},
|
||||
relativeTime: {
|
||||
future: 'd\'aquí %s',
|
||||
past: 'fa %s',
|
||||
s: 'uns segons',
|
||||
m: 'un minut',
|
||||
mm: '%d minuts',
|
||||
h: 'una hora',
|
||||
hh: '%d hores',
|
||||
d: 'un dia',
|
||||
dd: '%d dies',
|
||||
M: 'un mes',
|
||||
MM: '%d mesos',
|
||||
y: 'un any',
|
||||
yy: '%d anys'
|
||||
},
|
||||
ordinal: function ordinal(n) {
|
||||
var ord;
|
||||
if (n === 1 || n === 3) ord = 'r';else if (n === 2) ord = 'n';else if (n === 4) ord = 't';else ord = 'è';
|
||||
return "" + n + ord;
|
||||
}
|
||||
};
|
||||
dayjs.locale(locale, null, true);
|
||||
export default locale;
|
|
@ -0,0 +1,120 @@
|
|||
// Czech [cs]
|
||||
import dayjs from '../index';
|
||||
|
||||
function plural(n) {
|
||||
return n > 1 && n < 5 && ~~(n / 10) !== 1; // eslint-disable-line
|
||||
}
|
||||
/* eslint-disable */
|
||||
|
||||
|
||||
function translate(number, withoutSuffix, key, isFuture) {
|
||||
var result = number + " ";
|
||||
|
||||
switch (key) {
|
||||
case 's':
|
||||
// a few seconds / in a few seconds / a few seconds ago
|
||||
return withoutSuffix || isFuture ? 'pár sekund' : 'pár sekundami';
|
||||
|
||||
case 'm':
|
||||
// a minute / in a minute / a minute ago
|
||||
return withoutSuffix ? 'minuta' : isFuture ? 'minutu' : 'minutou';
|
||||
|
||||
case 'mm':
|
||||
// 9 minutes / in 9 minutes / 9 minutes ago
|
||||
if (withoutSuffix || isFuture) {
|
||||
return result + (plural(number) ? 'minuty' : 'minut');
|
||||
}
|
||||
|
||||
return result + "minutami";
|
||||
|
||||
case 'h':
|
||||
// an hour / in an hour / an hour ago
|
||||
return withoutSuffix ? 'hodina' : isFuture ? 'hodinu' : 'hodinou';
|
||||
|
||||
case 'hh':
|
||||
// 9 hours / in 9 hours / 9 hours ago
|
||||
if (withoutSuffix || isFuture) {
|
||||
return result + (plural(number) ? 'hodiny' : 'hodin');
|
||||
}
|
||||
|
||||
return result + "hodinami";
|
||||
|
||||
case 'd':
|
||||
// a day / in a day / a day ago
|
||||
return withoutSuffix || isFuture ? 'den' : 'dnem';
|
||||
|
||||
case 'dd':
|
||||
// 9 days / in 9 days / 9 days ago
|
||||
if (withoutSuffix || isFuture) {
|
||||
return result + (plural(number) ? 'dny' : 'dní');
|
||||
}
|
||||
|
||||
return result + "dny";
|
||||
|
||||
case 'M':
|
||||
// a month / in a month / a month ago
|
||||
return withoutSuffix || isFuture ? 'měsíc' : 'měsícem';
|
||||
|
||||
case 'MM':
|
||||
// 9 months / in 9 months / 9 months ago
|
||||
if (withoutSuffix || isFuture) {
|
||||
return result + (plural(number) ? 'měsíce' : 'měsíců');
|
||||
}
|
||||
|
||||
return result + "m\u011Bs\xEDci";
|
||||
|
||||
case 'y':
|
||||
// a year / in a year / a year ago
|
||||
return withoutSuffix || isFuture ? 'rok' : 'rokem';
|
||||
|
||||
case 'yy':
|
||||
// 9 years / in 9 years / 9 years ago
|
||||
if (withoutSuffix || isFuture) {
|
||||
return result + (plural(number) ? 'roky' : 'let');
|
||||
}
|
||||
|
||||
return result + "lety";
|
||||
}
|
||||
}
|
||||
/* eslint-enable */
|
||||
|
||||
|
||||
var locale = {
|
||||
name: 'cs',
|
||||
weekdays: 'neděle_pondělí_úterý_středa_čtvrtek_pátek_sobota'.split('_'),
|
||||
weekdaysShort: 'ne_po_út_st_čt_pá_so'.split('_'),
|
||||
weekdaysMin: 'ne_po_út_st_čt_pá_so'.split('_'),
|
||||
months: 'leden_únor_březen_duben_květen_červen_červenec_srpen_září_říjen_listopad_prosinec'.split('_'),
|
||||
monthsShort: 'led_úno_bře_dub_kvě_čvn_čvc_srp_zář_říj_lis_pro'.split('_'),
|
||||
weekStart: 1,
|
||||
yearStart: 4,
|
||||
ordinal: function ordinal(n) {
|
||||
return n + ".";
|
||||
},
|
||||
formats: {
|
||||
LT: 'H:mm',
|
||||
LTS: 'H:mm:ss',
|
||||
L: 'DD.MM.YYYY',
|
||||
LL: 'D. MMMM YYYY',
|
||||
LLL: 'D. MMMM YYYY H:mm',
|
||||
LLLL: 'dddd D. MMMM YYYY H:mm',
|
||||
l: 'D. M. YYYY'
|
||||
},
|
||||
relativeTime: {
|
||||
future: 'za %s',
|
||||
past: 'před %s',
|
||||
s: translate,
|
||||
m: translate,
|
||||
mm: translate,
|
||||
h: translate,
|
||||
hh: translate,
|
||||
d: translate,
|
||||
dd: translate,
|
||||
M: translate,
|
||||
MM: translate,
|
||||
y: translate,
|
||||
yy: translate
|
||||
}
|
||||
};
|
||||
dayjs.locale(locale, null, true);
|
||||
export default locale;
|
|
@ -0,0 +1,24 @@
|
|||
// Chuvash [cv]
|
||||
import dayjs from '../index';
|
||||
var locale = {
|
||||
name: 'cv',
|
||||
weekdays: 'вырсарникун_тунтикун_ытларикун_юнкун_кӗҫнерникун_эрнекун_шӑматкун'.split('_'),
|
||||
months: 'кӑрлач_нарӑс_пуш_ака_май_ҫӗртме_утӑ_ҫурла_авӑн_юпа_чӳк_раштав'.split('_'),
|
||||
weekStart: 1,
|
||||
weekdaysShort: 'выр_тун_ытл_юн_кӗҫ_эрн_шӑм'.split('_'),
|
||||
monthsShort: 'кӑр_нар_пуш_ака_май_ҫӗр_утӑ_ҫур_авн_юпа_чӳк_раш'.split('_'),
|
||||
weekdaysMin: 'вр_тн_ыт_юн_кҫ_эр_шм'.split('_'),
|
||||
ordinal: function ordinal(n) {
|
||||
return n;
|
||||
},
|
||||
formats: {
|
||||
LT: 'HH:mm',
|
||||
LTS: 'HH:mm:ss',
|
||||
L: 'DD-MM-YYYY',
|
||||
LL: 'YYYY [ҫулхи] MMMM [уйӑхӗн] D[-мӗшӗ]',
|
||||
LLL: 'YYYY [ҫулхи] MMMM [уйӑхӗн] D[-мӗшӗ], HH:mm',
|
||||
LLLL: 'dddd, YYYY [ҫулхи] MMMM [уйӑхӗн] D[-мӗшӗ], HH:mm'
|
||||
}
|
||||
};
|
||||
dayjs.locale(locale, null, true);
|
||||
export default locale;
|
|
@ -0,0 +1,39 @@
|
|||
// Welsh [cy]
|
||||
import dayjs from '../index';
|
||||
var locale = {
|
||||
name: 'cy',
|
||||
weekdays: 'Dydd Sul_Dydd Llun_Dydd Mawrth_Dydd Mercher_Dydd Iau_Dydd Gwener_Dydd Sadwrn'.split('_'),
|
||||
months: 'Ionawr_Chwefror_Mawrth_Ebrill_Mai_Mehefin_Gorffennaf_Awst_Medi_Hydref_Tachwedd_Rhagfyr'.split('_'),
|
||||
weekStart: 1,
|
||||
weekdaysShort: 'Sul_Llun_Maw_Mer_Iau_Gwe_Sad'.split('_'),
|
||||
monthsShort: 'Ion_Chwe_Maw_Ebr_Mai_Meh_Gor_Aws_Med_Hyd_Tach_Rhag'.split('_'),
|
||||
weekdaysMin: 'Su_Ll_Ma_Me_Ia_Gw_Sa'.split('_'),
|
||||
ordinal: function ordinal(n) {
|
||||
return n;
|
||||
},
|
||||
formats: {
|
||||
LT: 'HH:mm',
|
||||
LTS: 'HH:mm:ss',
|
||||
L: 'DD/MM/YYYY',
|
||||
LL: 'D MMMM YYYY',
|
||||
LLL: 'D MMMM YYYY HH:mm',
|
||||
LLLL: 'dddd, D MMMM YYYY HH:mm'
|
||||
},
|
||||
relativeTime: {
|
||||
future: 'mewn %s',
|
||||
past: '%s yn ôl',
|
||||
s: 'ychydig eiliadau',
|
||||
m: 'munud',
|
||||
mm: '%d munud',
|
||||
h: 'awr',
|
||||
hh: '%d awr',
|
||||
d: 'diwrnod',
|
||||
dd: '%d diwrnod',
|
||||
M: 'mis',
|
||||
MM: '%d mis',
|
||||
y: 'blwyddyn',
|
||||
yy: '%d flynedd'
|
||||
}
|
||||
};
|
||||
dayjs.locale(locale, null, true);
|
||||
export default locale;
|
|
@ -0,0 +1,39 @@
|
|||
// Danish [da]
|
||||
import dayjs from '../index';
|
||||
var locale = {
|
||||
name: 'da',
|
||||
weekdays: 'søndag_mandag_tirsdag_onsdag_torsdag_fredag_lørdag'.split('_'),
|
||||
weekdaysShort: 'søn._man._tirs._ons._tors._fre._lør.'.split('_'),
|
||||
weekdaysMin: 'sø._ma._ti._on._to._fr._lø.'.split('_'),
|
||||
months: 'januar_februar_marts_april_maj_juni_juli_august_september_oktober_november_december'.split('_'),
|
||||
monthsShort: 'jan._feb._mar._apr._maj_juni_juli_aug._sept._okt._nov._dec.'.split('_'),
|
||||
weekStart: 1,
|
||||
ordinal: function ordinal(n) {
|
||||
return n + ".";
|
||||
},
|
||||
formats: {
|
||||
LT: 'HH:mm',
|
||||
LTS: 'HH:mm:ss',
|
||||
L: 'DD.MM.YYYY',
|
||||
LL: 'D. MMMM YYYY',
|
||||
LLL: 'D. MMMM YYYY HH:mm',
|
||||
LLLL: 'dddd [d.] D. MMMM YYYY [kl.] HH:mm'
|
||||
},
|
||||
relativeTime: {
|
||||
future: 'om %s',
|
||||
past: '%s siden',
|
||||
s: 'få sekunder',
|
||||
m: 'et minut',
|
||||
mm: '%d minutter',
|
||||
h: 'en time',
|
||||
hh: '%d timer',
|
||||
d: 'en dag',
|
||||
dd: '%d dage',
|
||||
M: 'en måned',
|
||||
MM: '%d måneder',
|
||||
y: 'et år',
|
||||
yy: '%d år'
|
||||
}
|
||||
};
|
||||
dayjs.locale(locale, null, true);
|
||||
export default locale;
|
|
@ -0,0 +1,63 @@
|
|||
// German (Austria) [de-at]
|
||||
import dayjs from '../index';
|
||||
var texts = {
|
||||
s: 'ein paar Sekunden',
|
||||
m: ['eine Minute', 'einer Minute'],
|
||||
mm: '%d Minuten',
|
||||
h: ['eine Stunde', 'einer Stunde'],
|
||||
hh: '%d Stunden',
|
||||
d: ['ein Tag', 'einem Tag'],
|
||||
dd: ['%d Tage', '%d Tagen'],
|
||||
M: ['ein Monat', 'einem Monat'],
|
||||
MM: ['%d Monate', '%d Monaten'],
|
||||
y: ['ein Jahr', 'einem Jahr'],
|
||||
yy: ['%d Jahre', '%d Jahren']
|
||||
};
|
||||
|
||||
function relativeTimeFormatter(number, withoutSuffix, key) {
|
||||
var l = texts[key];
|
||||
|
||||
if (Array.isArray(l)) {
|
||||
l = l[withoutSuffix ? 0 : 1];
|
||||
}
|
||||
|
||||
return l.replace('%d', number);
|
||||
}
|
||||
|
||||
var locale = {
|
||||
name: 'de-at',
|
||||
weekdays: 'Sonntag_Montag_Dienstag_Mittwoch_Donnerstag_Freitag_Samstag'.split('_'),
|
||||
weekdaysShort: 'So._Mo._Di._Mi._Do._Fr._Sa.'.split('_'),
|
||||
weekdaysMin: 'So_Mo_Di_Mi_Do_Fr_Sa'.split('_'),
|
||||
months: 'Jänner_Februar_März_April_Mai_Juni_Juli_August_September_Oktober_November_Dezember'.split('_'),
|
||||
monthsShort: 'Jän._Feb._März_Apr._Mai_Juni_Juli_Aug._Sep._Okt._Nov._Dez.'.split('_'),
|
||||
ordinal: function ordinal(n) {
|
||||
return n + ".";
|
||||
},
|
||||
weekStart: 1,
|
||||
formats: {
|
||||
LTS: 'HH:mm:ss',
|
||||
LT: 'HH:mm',
|
||||
L: 'DD.MM.YYYY',
|
||||
LL: 'D. MMMM YYYY',
|
||||
LLL: 'D. MMMM YYYY HH:mm',
|
||||
LLLL: 'dddd, D. MMMM YYYY HH:mm'
|
||||
},
|
||||
relativeTime: {
|
||||
future: 'in %s',
|
||||
past: 'vor %s',
|
||||
s: relativeTimeFormatter,
|
||||
m: relativeTimeFormatter,
|
||||
mm: relativeTimeFormatter,
|
||||
h: relativeTimeFormatter,
|
||||
hh: relativeTimeFormatter,
|
||||
d: relativeTimeFormatter,
|
||||
dd: relativeTimeFormatter,
|
||||
M: relativeTimeFormatter,
|
||||
MM: relativeTimeFormatter,
|
||||
y: relativeTimeFormatter,
|
||||
yy: relativeTimeFormatter
|
||||
}
|
||||
};
|
||||
dayjs.locale(locale, null, true);
|
||||
export default locale;
|
|
@ -0,0 +1,63 @@
|
|||
// German (Switzerland) [de-ch]
|
||||
import dayjs from '../index';
|
||||
var texts = {
|
||||
s: 'ein paar Sekunden',
|
||||
m: ['eine Minute', 'einer Minute'],
|
||||
mm: '%d Minuten',
|
||||
h: ['eine Stunde', 'einer Stunde'],
|
||||
hh: '%d Stunden',
|
||||
d: ['ein Tag', 'einem Tag'],
|
||||
dd: ['%d Tage', '%d Tagen'],
|
||||
M: ['ein Monat', 'einem Monat'],
|
||||
MM: ['%d Monate', '%d Monaten'],
|
||||
y: ['ein Jahr', 'einem Jahr'],
|
||||
yy: ['%d Jahre', '%d Jahren']
|
||||
};
|
||||
|
||||
function relativeTimeFormatter(number, withoutSuffix, key) {
|
||||
var l = texts[key];
|
||||
|
||||
if (Array.isArray(l)) {
|
||||
l = l[withoutSuffix ? 0 : 1];
|
||||
}
|
||||
|
||||
return l.replace('%d', number);
|
||||
}
|
||||
|
||||
var locale = {
|
||||
name: 'de-ch',
|
||||
weekdays: 'Sonntag_Montag_Dienstag_Mittwoch_Donnerstag_Freitag_Samstag'.split('_'),
|
||||
weekdaysShort: 'So_Mo_Di_Mi_Do_Fr_Sa'.split('_'),
|
||||
weekdaysMin: 'So_Mo_Di_Mi_Do_Fr_Sa'.split('_'),
|
||||
months: 'Januar_Februar_März_April_Mai_Juni_Juli_August_September_Oktober_November_Dezember'.split('_'),
|
||||
monthsShort: 'Jan._Feb._März_Apr._Mai_Juni_Juli_Aug._Sep._Okt._Nov._Dez.'.split('_'),
|
||||
ordinal: function ordinal(n) {
|
||||
return n + ".";
|
||||
},
|
||||
weekStart: 1,
|
||||
formats: {
|
||||
LT: 'HH:mm',
|
||||
LTS: 'HH:mm:ss',
|
||||
L: 'DD.MM.YYYY',
|
||||
LL: 'D. MMMM YYYY',
|
||||
LLL: 'D. MMMM YYYY HH:mm',
|
||||
LLLL: 'dddd, D. MMMM YYYY HH:mm'
|
||||
},
|
||||
relativeTime: {
|
||||
future: 'in %s',
|
||||
past: 'vor %s',
|
||||
s: relativeTimeFormatter,
|
||||
m: relativeTimeFormatter,
|
||||
mm: relativeTimeFormatter,
|
||||
h: relativeTimeFormatter,
|
||||
hh: relativeTimeFormatter,
|
||||
d: relativeTimeFormatter,
|
||||
dd: relativeTimeFormatter,
|
||||
M: relativeTimeFormatter,
|
||||
MM: relativeTimeFormatter,
|
||||
y: relativeTimeFormatter,
|
||||
yy: relativeTimeFormatter
|
||||
}
|
||||
};
|
||||
dayjs.locale(locale, null, true);
|
||||
export default locale;
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue