@aleen42/calendar 1.0.0-beta.4 → 1.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/calendar.css +1 -1
- package/dist/calendar.js +36 -48
- package/dist/calendar.legacy.min.js +1 -1
- package/dist/calendar.min.css +1 -1
- package/dist/calendar.min.js +1 -1
- package/dist/iconfont.css +1 -1
- package/package.json +3 -3
package/dist/calendar.css
CHANGED
|
@@ -1958,7 +1958,7 @@ body p {
|
|
|
1958
1958
|
height: 100%;
|
|
1959
1959
|
table-layout: fixed;
|
|
1960
1960
|
}
|
|
1961
|
-
.m-cal-month .content-wrapper .aside-content > ul > li table td {
|
|
1961
|
+
.m-cal-month .content-wrapper .aside-content > ul > li table td:not(.ico) {
|
|
1962
1962
|
padding-left: 4px;
|
|
1963
1963
|
overflow: hidden;
|
|
1964
1964
|
word-wrap: normal;
|
package/dist/calendar.js
CHANGED
|
@@ -6287,16 +6287,13 @@ const fmtDate = formatter(DIGI_DATE);
|
|
|
6287
6287
|
(__webpack_require__(9363)/* .config */ .$)(language, DIGI_DATE, fmtDate);
|
|
6288
6288
|
|
|
6289
6289
|
// moment adaptors
|
|
6290
|
-
const
|
|
6290
|
+
const strictDate = t => (t = moment(t, DIGI_DATE, true)).isValid() && t;
|
|
6291
6291
|
|
|
6292
6292
|
/** @return {import('moment').Moment} */// 在英文 locale 下兼容 MM/DD/YYYY 格式的 moment 构造
|
|
6293
6293
|
const mm = /** number[] | string | Date | Moment? */ t => strictDate(t) || moment(t);
|
|
6294
6294
|
|
|
6295
6295
|
// 严格的 YYYY-MM-DD 或 MM/DD/YYYY (在英文 locale 下) 日期
|
|
6296
|
-
|
|
6297
|
-
|
|
6298
|
-
// 自动适配输入时间 (HH:MM => Ah:MM => H => HH => Hmm => HHmm) 的 moment 构造 (TODO: 当没有命中前两种情形时, 提取数字生成的很可能是错误的时间).
|
|
6299
|
-
mm.time = t => parse((t = t.trim()), HHMM) || parse(t, AhMM) || parse((t = t.replace(/\D/g, '')), t.length > 2 ? 'Hmm' : 'H');
|
|
6296
|
+
mm.date = strictDate;
|
|
6300
6297
|
|
|
6301
6298
|
const now = new Date();
|
|
6302
6299
|
const date = d => formatter(`D${/[zjka]/.test(language) ? 'o' : 'D'}`)(d).replace(/^0/, '');
|
|
@@ -6307,7 +6304,8 @@ _.assign(module.exports = formatter, /** @lends module.exports */ {
|
|
|
6307
6304
|
setDefaultTZ,
|
|
6308
6305
|
|
|
6309
6306
|
// common date formats
|
|
6310
|
-
|
|
6307
|
+
HHMM,
|
|
6308
|
+
AhMM,
|
|
6311
6309
|
// iso date: || 2022-05-25
|
|
6312
6310
|
i : formatter(ISO_DATE, /* no locale */ 0),
|
|
6313
6311
|
// iso date & time: || 2022-05-25 13:00:00
|
|
@@ -7939,8 +7937,8 @@ module.exports = (target, methodName, after/* (result) */, before/* (...argument
|
|
|
7939
7937
|
const prev = target[methodName];
|
|
7940
7938
|
target[methodName] = function () {
|
|
7941
7939
|
const self = this;
|
|
7942
|
-
|
|
7943
|
-
const result = prev && prev.apply(self,
|
|
7940
|
+
before && before.apply(self, arguments);
|
|
7941
|
+
const result = prev && prev.apply(self, arguments), hookResult = after && after.call(self, result);
|
|
7944
7942
|
return hookResult !== undefined ? hookResult : result;
|
|
7945
7943
|
};
|
|
7946
7944
|
}
|
|
@@ -10839,15 +10837,15 @@ function Email(name, address) {
|
|
|
10839
10837
|
* @return {function(String | Email): Email}
|
|
10840
10838
|
*/
|
|
10841
10839
|
const parser = loose => email => {
|
|
10842
|
-
const [list, errorKey] = email instanceof Email ? [[email]] : parseAddressList(email
|
|
10843
|
-
return loose ? list[0] || Email()
|
|
10840
|
+
const [list, errorKey] = email instanceof Email ? [[email]] : parseAddressList(email)
|
|
10841
|
+
return loose ? list[0] || Object.assign(Email(), {rawInput : `${email}`})
|
|
10844
10842
|
: !errorKey && list[0] && !list[1] && validateAddress(list[0].address || '') ? list[0]
|
|
10845
10843
|
: undefined;
|
|
10846
10844
|
};
|
|
10847
10845
|
|
|
10848
10846
|
/**
|
|
10849
10847
|
* 用于替代旧版的 `new Email(address)` 方法, 如果有多个地址, 只返回第一个, 如果一个地址都没有, 返回空地址
|
|
10850
|
-
* @param {String | Email}
|
|
10848
|
+
* @param {String | Email} email
|
|
10851
10849
|
* @return {Email}
|
|
10852
10850
|
*/
|
|
10853
10851
|
const of = parser(/* loose= */1);
|
|
@@ -10882,13 +10880,13 @@ Object.assign(Email, {
|
|
|
10882
10880
|
|
|
10883
10881
|
|
|
10884
10882
|
/**
|
|
10885
|
-
* @param {String | Email}
|
|
10883
|
+
* @param {String | Email} email
|
|
10886
10884
|
* @return {boolean}
|
|
10887
10885
|
*/
|
|
10888
10886
|
test : email => !!forStrict(email),
|
|
10889
10887
|
|
|
10890
10888
|
/**
|
|
10891
|
-
* @param {String | Email}
|
|
10889
|
+
* @param {String | Email} email
|
|
10892
10890
|
* @return {Email | undefined}
|
|
10893
10891
|
*/
|
|
10894
10892
|
strict : forStrict,
|
|
@@ -10909,13 +10907,12 @@ function validateAddress(address) {
|
|
|
10909
10907
|
// -------
|
|
10910
10908
|
|
|
10911
10909
|
/**
|
|
10912
|
-
* @param {string}
|
|
10910
|
+
* @param {string} addressList
|
|
10913
10911
|
* @param {string} [separators] - external separators besides "," and ";"
|
|
10914
|
-
* @param {boolean | number} [stopOnError]
|
|
10915
10912
|
* @return {[Email[], String]} [array of {@link Email}, errorKey]
|
|
10916
10913
|
* @see 实现参考 java 源码: com.tebie.cmapp.ajxvr.lib.FlexAddressParser
|
|
10917
10914
|
*/
|
|
10918
|
-
function parseAddressList(addressList, separators = ''
|
|
10915
|
+
function parseAddressList(addressList, separators = '') {
|
|
10919
10916
|
// 避免传入非字符串类型引发死循环
|
|
10920
10917
|
addressList = addressList != null ? `${addressList}` : '';
|
|
10921
10918
|
|
|
@@ -10927,6 +10924,9 @@ function parseAddressList(addressList, separators = '', stopOnError) {
|
|
|
10927
10924
|
const TOKEN_RAW_NAME = 6; // foo
|
|
10928
10925
|
const TOKEN_RAW_ADDR = 7; // foo@bar
|
|
10929
10926
|
|
|
10927
|
+
// 控制参数
|
|
10928
|
+
let stopOnError = true;
|
|
10929
|
+
|
|
10930
10930
|
// 运行时变量
|
|
10931
10931
|
let token = TOKEN_BLANKS;
|
|
10932
10932
|
let tokenStart = 0; // inclusive
|
|
@@ -10951,7 +10951,9 @@ function parseAddressList(addressList, separators = '', stopOnError) {
|
|
|
10951
10951
|
function nextElement() {
|
|
10952
10952
|
let name;
|
|
10953
10953
|
let addr;
|
|
10954
|
+
let rawTokenEnd;
|
|
10954
10955
|
|
|
10956
|
+
const rawTokenStart = tokenStart;
|
|
10955
10957
|
const nameIsRaw = token === TOKEN_RAW_NAME;
|
|
10956
10958
|
if (nameIsRaw || token === TOKEN_QUOTED_NAME) {
|
|
10957
10959
|
let nameStart = tokenStart, nameEnd = tokenEnd;
|
|
@@ -10966,25 +10968,25 @@ function parseAddressList(addressList, separators = '', stopOnError) {
|
|
|
10966
10968
|
break;
|
|
10967
10969
|
}
|
|
10968
10970
|
}
|
|
10969
|
-
name = addressList.slice(nameStart, nameEnd);
|
|
10971
|
+
name = addressList.slice(nameStart, rawTokenEnd = nameEnd);
|
|
10970
10972
|
}
|
|
10971
10973
|
|
|
10972
10974
|
if (token === TOKEN_TAGGED_ADDR || (name == null && token === TOKEN_RAW_ADDR)) {
|
|
10973
|
-
addr = addressList.slice(tokenStart, tokenEnd);
|
|
10975
|
+
addr = addressList.slice(tokenStart, rawTokenEnd = tokenEnd);
|
|
10974
10976
|
token = nextToken();
|
|
10975
10977
|
}
|
|
10976
10978
|
|
|
10977
10979
|
// the raw text should be treated as an address #CM-32730 !1631
|
|
10978
|
-
return nameIsRaw && !addr ? Email(void 0, name) : Email(
|
|
10979
|
-
unquote(name,
|
|
10980
|
-
unquote(addr,
|
|
10981
|
-
);
|
|
10980
|
+
return Object.assign(nameIsRaw && !addr ? Email(void 0, name) : Email(
|
|
10981
|
+
unquote(name, '"', '"'), // unquote name
|
|
10982
|
+
unquote(addr, '<', '>'), // unquote addr
|
|
10983
|
+
), {rawInput : addressList.slice(rawTokenStart, rawTokenEnd)});
|
|
10982
10984
|
}
|
|
10983
10985
|
|
|
10984
|
-
function unquote(s,
|
|
10985
|
-
return
|
|
10986
|
+
function unquote(s, startSymbol, endSymbol) {
|
|
10987
|
+
return s && s.length > 1 && s.startsWith(startSymbol) && s.endsWith(endSymbol)
|
|
10986
10988
|
// check and unescape any escaped character
|
|
10987
|
-
? s.
|
|
10989
|
+
? s.substring(1, s.length - 1).replace(/\\(.)/gi, '$1')
|
|
10988
10990
|
: s;
|
|
10989
10991
|
}
|
|
10990
10992
|
|
|
@@ -29170,7 +29172,7 @@ var handlers = {
|
|
|
29170
29172
|
|
|
29171
29173
|
break;
|
|
29172
29174
|
|
|
29173
|
-
case 'year
|
|
29175
|
+
case 'year picked':
|
|
29174
29176
|
if (format.hasMonth) {
|
|
29175
29177
|
this.showView(VIEWS.MONTHS);
|
|
29176
29178
|
} else {
|
|
@@ -32387,18 +32389,6 @@ __webpack_require__.d(__webpack_exports__, {
|
|
|
32387
32389
|
Calendar: function() { return /* binding */ Calendar; }
|
|
32388
32390
|
});
|
|
32389
32391
|
|
|
32390
|
-
// NAMESPACE OBJECT: ./calendar.hbs
|
|
32391
|
-
var calendar_namespaceObject = {};
|
|
32392
|
-
__webpack_require__.r(calendar_namespaceObject);
|
|
32393
|
-
__webpack_require__.d(calendar_namespaceObject, {
|
|
32394
|
-
"default": function() { return calendar; },
|
|
32395
|
-
eventListTpl: function() { return eventListTpl; },
|
|
32396
|
-
eventTpl: function() { return eventTpl; },
|
|
32397
|
-
monthEventListTpl: function() { return monthEventListTpl; },
|
|
32398
|
-
monthEventsTpl: function() { return monthEventsTpl; },
|
|
32399
|
-
viewTpl: function() { return viewTpl; }
|
|
32400
|
-
});
|
|
32401
|
-
|
|
32402
32392
|
// EXTERNAL MODULE: ./lib/cui/util/js/fn.js
|
|
32403
32393
|
var js_fn = __webpack_require__(9837);
|
|
32404
32394
|
// EXTERNAL MODULE: ./lib/i18n.js
|
|
@@ -32737,10 +32727,10 @@ var template = __webpack_require__(1937);
|
|
|
32737
32727
|
const partials = /* #__PURE__ */ template({
|
|
32738
32728
|
// partials
|
|
32739
32729
|
"typeIco": "{{#eq sensitivity 2}}<i class=\"iconfont icon-private\"></i>{{/eq}} {{#if @supportInvite}}<i class=\"iconfont icon-{{if$ attendees.length 'meeting' 'calendar'}}\"></i>{{/if}}",
|
|
32740
|
-
"detailIco": "<i class=\"iconfont icon-remind\" title=\"{{i18n 'cal/tips_alarmclock'}}\"></i> <i class=\"iconfont icon-{{if$ (and @supportExceptions exceptionDate) 'no'}}repeat\" title=\"{{i18n (join 'cal/tips_repeat' (if$ (and @supportExceptions exceptionDate) '_exception'))}}\"></i> {{#if attachments}} <i class=\"iconfont iconacc\"></i> {{/if}}",
|
|
32730
|
+
"detailIco": "{{#if (or reminders reminder)}} <i class=\"iconfont icon-remind\" title=\"{{i18n 'cal/tips_alarmclock'}}\"></i> {{/if}} {{#if (and recurrence (ne recurrence.type -1))}} <i class=\"iconfont icon-{{if$ (and @supportExceptions exceptionDate) 'no'}}repeat\" title=\"{{i18n (join 'cal/tips_repeat' (if$ (and @supportExceptions exceptionDate) '_exception'))}}\"></i> {{/if}} {{#if attachments}} <i class=\"iconfont iconacc\"></i> {{/if}}",
|
|
32741
32731
|
"ico": "{{>typeIco}} {{>detailIco}}",
|
|
32742
32732
|
"eventPartial": "<li class=\"event_selection {{if$ exceptionDate 'exception' }} {{if$ isOutOfDate 'out-dated'}}\" data-=\"{{json .}}\" data-uid=\"{{UID}}\"> <span class=\"event_icon f-fr\">{{>ico}} {{{endLabel}}}</span> <p class=\"event_msg f-ellipsis\"> {{{startLabel}}} <a title=\"{{name}}\">{{name}}</a> </p> </li>",})
|
|
32743
|
-
/* harmony default export */ var calendar = (/* #__PURE__ */
|
|
32733
|
+
/* harmony default export */ var calendar = (/* #__PURE__ */(/* unused pure expression or super */ null && (CTemplate("", partials))));
|
|
32744
32734
|
const eventTpl = /* #__PURE__ */ template("{{>eventPartial}}", partials);
|
|
32745
32735
|
const monthEventsTpl = /* #__PURE__ */ template("{{#if .}} <ul class=MonthEvent>{{#each .}} {{>eventPartial startLabel=(join '<span class=event_time>' (if$ allDayEvent (i18n 'cal/lb_all_day') (date$ rangeStart 'T')) '</span>')}} {{/each}}</ul> {{/if}}", partials);
|
|
32746
32736
|
const monthEventListTpl = /* #__PURE__ */ template("{{#each .}} <li class=\"sidebar clearfix f-csp\" data-=\"{{json .}}\" data-uid=\"{{UID}}\"> <table> <colgroup> <col width=60> <col> <col class=j-attach-col> </colgroup> <tr> <td>{{if$ allDayEvent (i18n 'cal/lb_all_day') (date$ rangeStart 'T')}}</td> <td class=name colspan=2>{{name}}</td> </tr> <tr> <td>{{date$DUR (math duration '*' 1000)}}</td> <td>{{location}}</td> <td class=ico>{{>ico}}</td> </tr> </table> </li> {{/each}}", partials);
|
|
@@ -32794,9 +32784,7 @@ const {mm: index_mm, i : isoDate, I : isoDatetime} = util_date, {rcCheck, rcChec
|
|
|
32794
32784
|
* @returns {{refreshView, selectedEvents}}
|
|
32795
32785
|
*/
|
|
32796
32786
|
const Calendar = ([$context, $datePicker], viewType, options) => {
|
|
32797
|
-
const {
|
|
32798
|
-
data : {supportExceptions : options.supportExceptions ?? 0, supportInvite : options.supportInvite ?? 0},
|
|
32799
|
-
}));
|
|
32787
|
+
const templateData = {supportExceptions : options.supportExceptions ?? 0, supportInvite : options.supportInvite ?? 0};
|
|
32800
32788
|
|
|
32801
32789
|
let dialog, refreshView, adjustContainer, adjustNow, selectedEvents;
|
|
32802
32790
|
|
|
@@ -32811,7 +32799,7 @@ const Calendar = ([$context, $datePicker], viewType, options) => {
|
|
|
32811
32799
|
// m-cal-month | m-cal-week | m-cal-day | m-cal-list
|
|
32812
32800
|
.addClass(`m-cal-${viewType.toLowerCase()}`)
|
|
32813
32801
|
// calMain_MONTH | calMain_WEEK | calMain_DAY | calMain_LIST
|
|
32814
|
-
.addClass(`calMain calMain_${viewType}`).attr({color : colorName || '', firstWeekDay}).html(viewTpl(viewType))
|
|
32802
|
+
.addClass(`calMain calMain_${viewType}`).attr({color : colorName || '', firstWeekDay}).html(viewTpl(viewType, {data : templateData}))
|
|
32815
32803
|
.off('click');
|
|
32816
32804
|
|
|
32817
32805
|
const $toolbarDatePicker = external_$_('.j-picker', $context), $calendar = external_$_('.calendar', $context);
|
|
@@ -33036,7 +33024,7 @@ const Calendar = ([$context, $datePicker], viewType, options) => {
|
|
|
33036
33024
|
: i === 6 || !isWeek ? '<span class=date-next></span>' // 占位对齐
|
|
33037
33025
|
: '',
|
|
33038
33026
|
},
|
|
33039
|
-
})).toggleClass(VERTICAL_CLASS, !isAllDay);
|
|
33027
|
+
}, {data : templateData})).toggleClass(VERTICAL_CLASS, !isAllDay);
|
|
33040
33028
|
|
|
33041
33029
|
if (isAllDay) {
|
|
33042
33030
|
external_$_('>ul', external_$_(`>td:eq(${i + 1})`, external_$_('tr', $allDays.height('')))).append($li);
|
|
@@ -33250,13 +33238,13 @@ const Calendar = ([$context, $datePicker], viewType, options) => {
|
|
|
33250
33238
|
beforeRender?.(js_fn.flat(cachedList, 'events'));
|
|
33251
33239
|
|
|
33252
33240
|
// 渲染日历表格数据
|
|
33253
|
-
list.map((item, i) => external_$_(`td:eq(${i})>`, $tbody).append(monthEventsTpl(sort(item.events))));
|
|
33241
|
+
list.map((item, i) => external_$_(`td:eq(${i})>`, $tbody).append(monthEventsTpl(sort(item.events), {data : templateData})));
|
|
33254
33242
|
adjustTable();
|
|
33255
33243
|
scrollTop && ($scroll[0].scrollTop = scrollTop);
|
|
33256
33244
|
|
|
33257
33245
|
// 渲染当前所选天的事件列表数据
|
|
33258
33246
|
js_fn.map(external_$_('.j-attach-col', external_$_('>ul', $aside)
|
|
33259
|
-
.html(monthEventListTpl(sort(list[external_$_('td', $tbody).index(external_$_(`td.${CAL_SELECTED_CLASS}`, $tbody)[0])].events)))
|
|
33247
|
+
.html(monthEventListTpl(sort(list[external_$_('td', $tbody).index(external_$_(`td.${CAL_SELECTED_CLASS}`, $tbody)[0])].events), {data : templateData}))
|
|
33260
33248
|
), col => {
|
|
33261
33249
|
const count = external_$_('i', external_$_(col).closest('table')).length;
|
|
33262
33250
|
col.width = 20 * count + /** gap = */ 4 * (count - 1) + /** padding-left = */ 4;
|
|
@@ -33378,7 +33366,7 @@ const Calendar = ([$context, $datePicker], viewType, options) => {
|
|
|
33378
33366
|
jquery_crc($tbody.html(eventListTpl(list.slice(start, start + _limit).map(event => ({
|
|
33379
33367
|
...event,
|
|
33380
33368
|
highlight : (highlightIds || []).includes(event.id),
|
|
33381
|
-
})))));
|
|
33369
|
+
})), {data : templateData})));
|
|
33382
33370
|
beforeRender?.(list);
|
|
33383
33371
|
$window.resize();
|
|
33384
33372
|
onChecked();
|