Skip to content

Commit

Permalink
Merge pull request #5 from lspriv/develop
Browse files Browse the repository at this point in the history
release v1.1.0
  • Loading branch information
lspriv committed Feb 21, 2024
2 parents d8dc5cb + 0e9c245 commit 64ca4bc
Show file tree
Hide file tree
Showing 7 changed files with 145 additions and 62 deletions.
9 changes: 7 additions & 2 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -55,6 +55,10 @@ Page({

ics插件解析了ics源中 `vevent` `valarm` `vjournal` `vtodo` 这四种组件的信息并处理加入到日历中去,在默认选项下(即使用插件时没有配置选项),会将这四种组件的信息作为日程schedule加入到日历。

> [!IMPORTANT]
> 一定要将订阅源链接域名配置到小程序后台downloadFile合法域名
> 操作:小程序后台->开发->开发设置->服务器域名->downloadFile合法域名
### 插件预设
ics插件包里内置了一个有关中国节假日订阅的选项预设 `ICSCnPreset`

Expand All @@ -78,8 +82,9 @@ Page({
- [`中国节假日补班日历`](https://github.com/lanceliao/china-holiday-calender)
- [`中国节假日放假调休安排日历`](https://github.com/congqiu/ChineseHoliday)

> [!TIP]
> ics文件中vevent组件属性summary的值只要是 '节假日 \*\*' (节假日和后面有空格)这种格式,ICSCnPreset预设就可以使用
> [!NOTE]
> - ics文件中vevent组件属性summary的值只要是 '节假日 \*\*' (节假日和后面有空格)这种格式,ICSCnPreset预设就可以使用
> - ICSCnPreset预设也有自己的选项配置
### 插件选项

Expand Down
1 change: 1 addition & 0 deletions dev/app.json
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@
"navigationBarTitleText": "wc plugin ics",
"navigationBarTextStyle": "black"
},
"darkmode": true,
"lazyCodeLoading": "requiredComponents",
"sitemapLocation": "sitemap.json"
}
2 changes: 1 addition & 1 deletion dev/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,6 @@
"author": "lspriv",
"license": "MIT",
"dependencies": {
"@lspriv/wx-calendar": "^1.6.0"
"@lspriv/wx-calendar": "^1.6.1-alpha.0"
}
}
4 changes: 2 additions & 2 deletions package.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "@lspriv/wc-plugin-ics",
"version": "1.0.0",
"version": "1.1.0",
"description": "小程序日历组件订阅插件",
"main": "./dist/index.js",
"types": "./types/index.d.ts",
Expand Down Expand Up @@ -32,7 +32,7 @@
"devDependencies": {
"@inquirer/prompts": "^3.3.2",
"@lspriv/wc-shared": "^1.1.0",
"@lspriv/wx-calendar": "^1.6.0",
"@lspriv/wx-calendar": "^1.6.1-alpha.0",
"@rollup/plugin-commonjs": "^25.0.7",
"@rollup/plugin-node-resolve": "^15.2.3",
"@rollup/plugin-terser": "^0.4.4",
Expand Down
8 changes: 4 additions & 4 deletions rollup.config.js
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@
import commonjs from '@rollup/plugin-commonjs';
import resolve from '@rollup/plugin-node-resolve';
import typescript from '@rollup/plugin-typescript';
import sourcemaps from 'rollup-plugin-sourcemaps';
// import sourcemaps from 'rollup-plugin-sourcemaps';
import clear from 'rollup-plugin-cleaner';
import size from 'rollup-plugin-filesize';
import terser from '@rollup/plugin-terser';
Expand Down Expand Up @@ -40,8 +40,8 @@ export default {
output: [
{
file: `${OUTDIR}/index.js`,
format: 'cjs',
sourcemap: true
format: 'cjs'
// sourcemap: true
}
],
treeshake: {
Expand Down Expand Up @@ -81,7 +81,7 @@ export default {
comments: /^!/
}
}),
sourcemaps(),
// sourcemaps(),
size({
reporter: function (options, bundle, info) {
return `[${now().grey}] ` + `pack complete`.cyan + ` ${info.fileName.blue} ${info.bundleSize.magenta}`;
Expand Down
4 changes: 2 additions & 2 deletions src/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -4,8 +4,8 @@
* See File LICENSE for detail or copy at https://opensource.org/licenses/MIT
* @Description: 入口
* @Author: lspriv
* @LastEditTime: 2024-02-19 21:11:20
* @LastEditTime: 2024-02-21 15:36:13
*/
export * from './plugin';

export { ICSCnPreset } from './presets';
export { ICSCnPreset, type ICSCnPresetOptions } from './presets';
179 changes: 128 additions & 51 deletions src/presets.ts
Original file line number Diff line number Diff line change
Expand Up @@ -4,10 +4,53 @@
* See File LICENSE for detail or copy at https://opensource.org/licenses/MIT
* @Description: Description
* @Author: lspriv
* @LastEditTime: 2024-02-20 17:16:58
* @LastEditTime: 2024-02-21 15:33:57
*/
import { WcMark } from '@lspriv/wx-calendar/lib';
import type { ICSOpts, ICSMark, CurrentSeries } from './plugin';
import { ICSOpts, ICSMark, CurrentSeries, ICSPlugin } from './plugin';

export interface ICSCnPresetOptions {
/** 节假日字体颜色 */
festivalColor?: string;
/** 节假日匹配 */
festivalPattern?: RegExp;
/** 角标工作日文本 */
cornerWorkText?: string;
/** 角标休息日文本 */
cornerRestText?: string;
/** 角标工作日文本颜色 */
cornerWorkColor?: string;
/** 角标休息日文本颜色 */
cornerRestColor?: string;
/** 匹配工作日 */
workPattern?: RegExp;
/** 匹配休息日 */
restPattern?: RegExp;
/** [vevent] 是否显示vevent日程 */
eventSchedule?: boolean;
/** [vevent] 日程字体颜色 */
eventScheduleColor?: string;
/** [vevent] 日程背景颜色 */
eventScheduleBgColor?: string;
/** [vtodo] 是否显示vtodo日程 */
todoSchedule?: boolean;
/** [vtodo] 日程字体颜色 */
todoScheduleColor?: string;
/** [vtodo] 日程背景颜色 */
todoScheduleBgColor?: string;
/** [valarm] 是否显示valarm日程 */
alarmSchedule?: boolean;
/** [valarm] 日程字体颜色 */
alarmScheduleColor?: string;
/** [valarm] 日程背景颜色 */
alarmScheduleBgColor?: string;
/** [vjournal] 是否显示vjournal日程 */
journalSchedule?: boolean;
/** [vjournal] 日程字体颜色 */
journalScheduleColor?: string;
/** [vjournal] 日程背景颜色 */
journalScheduleBgColor?: string;
}

const FtvPattern = /^[^\s]+/;

Expand All @@ -20,23 +63,53 @@ const restPattern = /(\u5047\u671f|\u5047\u65e5|\u653e\u5047|\u8c03\u4f11|\u4f11
const WORK_KEY = '__CN_PRE_WORK__';
const REST_KEY = '__CN_PRE_REST__';

export const ICSCnPreset = (): ICSOpts => {
let series: CurrentSeries = {};
export function ICSCnPreset(plugin: ICSPlugin): ICSOpts;
export function ICSCnPreset(options: ICSCnPresetOptions): (plugin?: ICSPlugin) => ICSOpts;

export function ICSCnPreset(plugin: ICSPlugin | ICSCnPresetOptions): ICSOpts | ((plugin: ICSPlugin) => ICSOpts) {
const isICSInstance = plugin instanceof ICSPlugin;
const opts: ICSCnPresetOptions = isICSInstance ? {} : plugin;

const config: ICSCnPresetOptions = {
festivalColor: opts?.festivalColor || 'var(--wc-solar-color)',
festivalPattern: opts?.festivalPattern || FtvPattern,
cornerWorkText: opts?.cornerWorkText || '班',
cornerRestText: opts?.cornerRestText || '休',
cornerWorkColor: opts?.cornerWorkColor || '#f37b1d',
cornerRestColor: opts?.cornerRestColor || '#61b057',
workPattern: opts?.workPattern || workPattern,
restPattern: opts?.restPattern || restPattern,
eventSchedule: opts?.eventSchedule ?? true,
eventScheduleColor: opts?.eventScheduleColor,
eventScheduleBgColor: opts?.eventScheduleBgColor,
todoSchedule: opts?.todoSchedule ?? true,
todoScheduleColor: opts?.todoScheduleColor || '#e7a23d',
todoScheduleBgColor: opts?.todoScheduleBgColor || '#faecd8',
alarmSchedule: opts?.alarmSchedule ?? true,
alarmScheduleColor: opts?.alarmScheduleColor || '#f56c6d',
alarmScheduleBgColor: opts?.alarmScheduleBgColor || '#fde2e2',
journalSchedule: opts?.journalSchedule ?? true,
journalScheduleColor: opts?.journalScheduleColor || '#67c23a',
journalScheduleBgColor: opts?.journalScheduleBgColor || '#e1f3d8'
};

return {
eventMarkAs: ['festival', 'corner', 'schedule'],
event: function (props) {
const summary = props.summary as string;
const isWork = workPattern.test(summary);
props[WORK_KEY] = isWork;
function createICSOptions(): ICSOpts {
let series: CurrentSeries = {};

const mark = {} as ICSMark;
let flag = false;
return {
event: function (props) {
const summary = props.summary as string;
const isWork = config.workPattern!.test(summary);
const isRest = config.restPattern!.test(summary);
props[REST_KEY] = isRest;
props[WORK_KEY] = isWork;

// 生成节假日
if (!isWork) {
const mark = {} as ICSMark;
let flag = false;

// 生成节假日
const date = +new Date(props.date!.year, props.date!.month - 1, props.date!.day);
const name = summary.match(FtvPattern)?.[0] || summary;
const name = summary.match(config.festivalPattern!)?.[0] || summary;

const seriename = series!.name;
const seriedate = series!.date;
Expand All @@ -45,45 +118,49 @@ export const ICSCnPreset = (): ICSOpts => {
series!.date = date;

if (!seriedate || seriename !== name || Math.abs(date - seriedate) > 86400000) {
mark.festival = { text: name, color: 'var(--wc-solar-color)', key: props.icskey };
mark.festival = { text: name, color: config.festivalColor, key: props.icskey };
flag = true;
}
}

// 生成角标
const isRest = restPattern.test(summary);
props[REST_KEY] = isRest;
if (isWork || isRest) {
mark.corner = { key: props.icskey } as WcMark;
mark.corner.text = isWork ? '班' : '休';
mark.corner.color = isWork ? '#f37b1d' : '#61b057';
flag = true;
}
// 生成角标
if (isWork || isRest) {
mark.corner = { key: props.icskey } as WcMark;
mark.corner.text = isWork ? config.cornerWorkText! : config.cornerRestText!;
mark.corner.color = isWork ? config.cornerWorkColor : config.cornerRestColor;
flag = true;
}

// 生成日程
if (props.description) {
mark.schedule = { text: props.description, key: props.icskey };
}
// 生成日程
if (config.eventSchedule && props.description) {
mark.schedule = {
text: props.description,
color: config.eventScheduleColor,
bgColor: config.eventScheduleBgColor,
key: props.icskey
};
}

return flag ? mark : void 0;
},
todoScheduleText: props => props.description as string,
todoScheduleColor: '#e7a23d',
todoScheduleBgColor: '#faecd8',
journalScheduleText: props => props.description as string,
journalScheduleColor: '#67c23a',
journalScheduleBgColor: '#e1f3d8',
alarmScheduleText: props => props.description as string,
alarmScheduleColor: '#f56c6d',
alarmScheduleBgColor: '#fde2e2',
collectAnuualMark: function (props) {
if (props[REST_KEY] || props[WORK_KEY]) {
// 生成年度标记
return { rwtype: props[WORK_KEY] ? 'work' : 'rest' };
return flag ? mark : void 0;
},
todoScheduleText: props => (config.todoSchedule ? void 0 : (props.description as string)),
todoScheduleColor: config.todoScheduleColor,
todoScheduleBgColor: config.todoScheduleBgColor,
journalScheduleText: props => (config.journalSchedule ? void 0 : (props.description as string)),
journalScheduleColor: config.journalScheduleColor,
journalScheduleBgColor: config.journalScheduleBgColor,
alarmScheduleText: props => (config.alarmSchedule ? void 0 : (props.description as string)),
alarmScheduleColor: config.alarmScheduleColor,
alarmScheduleBgColor: config.alarmScheduleBgColor,
collectAnuualMark: function (props) {
if (props[REST_KEY] || props[WORK_KEY]) {
// 生成年度标记
return { rwtype: props[WORK_KEY] ? 'work' : 'rest' };
}
},
afterMarked: function () {
series = {};
}
},
afterMarked: function () {
series = {};
}
};
};
};
}
return isICSInstance ? createICSOptions() : createICSOptions;
}

0 comments on commit 64ca4bc

Please sign in to comment.