@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 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 parse = (t, pattern) => (t = moment(t, pattern, /* strict: */true)).isValid() && t;
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
- const strictDate = mm.date = _.fn(parse, _, DIGI_DATE);
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
- const args = before && before.apply(self, arguments);
7943
- const result = prev && prev.apply(self, Array.isArray(args) ? args : arguments), hookResult = after && after.call(self, result);
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, '', !loose)
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} [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} [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} [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} [addressList]
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 = '', stopOnError) {
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, /^"(.*?)"?$/), // unquote name
10980
- unquote(addr, /^<(.*?)>?$/), // 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, regex) {
10985
- return regex.test(s)
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.replace(regex, '$1').replace(/\\(.)/g, '$1')
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 ed':
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__ */template("", partials));
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 {eventTpl, eventListTpl, viewTpl, monthEventsTpl, monthEventListTpl} = js_fn.mapValues(calendar_namespaceObject, tpl => tpl.config?.({
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();