阶段2:拆分为 ES Module + Rollup 构建,重写 README
- src/ 下拆分为入口/语言包/默认配置/主函数/工具模块,主函数整体搬入零改动 - rollup 打包 UMD(moeplayer.js + moeplayer.min.js),用户使用方式不变 - 库拷贝逻辑移至 scripts/copy-libs.js - README 重写:中文文档、快速开始、路线图、致谢原作者 - index.html 增加皮肤切换演示(默认/红色/西瓜)
This commit is contained in:
@@ -6,17 +6,24 @@ MoePlayer —— 一款中文友好的开源网页视频播放器(MIT 协议
|
|||||||
|
|
||||||
目标定位:中文文档 + 主流浏览器/手机 H5 支持 + 官方 Moodle media 插件(`media_moeplayer`,独立仓库)。
|
目标定位:中文文档 + 主流浏览器/手机 H5 支持 + 官方 Moodle media 插件(`media_moeplayer`,独立仓库)。
|
||||||
|
|
||||||
**注意**:当前处于改造阶段 2(改名 + 模块化)。改名已完成:目录 `moeplayer/`、全局变量/API 为 `MoePlayer`(语言包全局变量 `moeplayerLanguage`);单文件拆分为 ES Module 待做。
|
**注意**:当前处于改造阶段 2(改名 + 模块化)。改名已完成:目录 `moeplayer/`、全局变量/API 为 `MoePlayer`(语言包全局变量 `moeplayerLanguage`);单文件已拆分为 ES Module(源码在 `src/`,经 rollup 打包为 UMD 产物)。**主函数 `moeplayerEmbed` 尚未内部拆分**,仍是一个 ~6400 行的巨大函数,位于 `src/core/moeplayerEmbed.js`。
|
||||||
|
|
||||||
## 目录结构
|
## 目录结构
|
||||||
|
|
||||||
```
|
```
|
||||||
├── index.html # 演示/测试页(含 API 调用示例)
|
├── index.html # 演示/测试页(含 API 调用示例)
|
||||||
├── package.json # npm 工程化入口,依赖与构建脚本
|
├── package.json # npm 工程化入口,依赖与构建脚本
|
||||||
├── scripts/build.js # 构建脚本:压缩核心 + 从 node_modules 拷贝运行时库
|
├── rollup.config.js # rollup 配置:src/ 打包为 UMD 产物 + terser 压缩
|
||||||
|
├── scripts/copy-libs.js # 构建脚本第二步:从 node_modules 拷贝运行时库
|
||||||
|
├── src/ # 播放器源码(ES Module,2026-07 由单文件拆分而来)
|
||||||
|
│ ├── index.js # 入口:export default moeplayerEmbed
|
||||||
|
│ ├── language.js # 默认中文语言包
|
||||||
|
│ ├── defaults.js # videoObjectDefault 默认配置
|
||||||
|
│ ├── core/moeplayerEmbed.js # 主函数,【整体搬自旧单文件,内部未拆分,逻辑零改动】
|
||||||
|
│ └── utils/ # 工具函数:type/dom/format/net/cookie/path
|
||||||
├── moeplayer/ # 播放器本体,部署时整个上传到网站
|
├── moeplayer/ # 播放器本体,部署时整个上传到网站
|
||||||
│ ├── js/moeplayer.js # 核心源码(UMD 模块,~7400 行,ES5)
|
│ ├── js/moeplayer.js # UMD 产物,【由 npm run build 自动生成,勿手改】
|
||||||
│ ├── js/moeplayer.min.js # 压缩版,【由 npm run build 自动生成,勿手改】
|
│ ├── js/moeplayer.min.js # 压缩版,同上
|
||||||
│ ├── css/moeplayer.css # 默认皮肤;另有 moeplayer.red.css、moeplayer.ixigua.css
|
│ ├── css/moeplayer.css # 默认皮肤;另有 moeplayer.red.css、moeplayer.ixigua.css
|
||||||
│ ├── css/images/ # 皮肤图片资源
|
│ ├── css/images/ # 皮肤图片资源
|
||||||
│ ├── language/ # 语言包:zh.cn.js(默认内嵌)、zh.hk.js、en.js
|
│ ├── language/ # 语言包:zh.cn.js(默认内嵌)、zh.hk.js、en.js
|
||||||
@@ -29,12 +36,13 @@ MoePlayer —— 一款中文友好的开源网页视频播放器(MIT 协议
|
|||||||
## 构建与依赖
|
## 构建与依赖
|
||||||
|
|
||||||
- 安装:`npm install`
|
- 安装:`npm install`
|
||||||
- 构建:`npm run build` —— 做两件事:
|
- 构建:`npm run build`(即 `rollup -c && node scripts/copy-libs.js`) —— 做两件事:
|
||||||
1. terser 压缩 `moeplayer/js/moeplayer.js` → `moeplayer.min.js`
|
1. rollup 把 `src/` 的 ES Module 打包为 UMD:`moeplayer/js/moeplayer.js`,并经 @rollup/plugin-terser 生成 `moeplayer.min.js`(保留 `软件名称|版权` 头部注释)
|
||||||
2. 从 node_modules 拷贝 hls.js / flv.js / mpegts.js 的产物及 LICENSE 到 `moeplayer/` 对应目录
|
2. `scripts/copy-libs.js` 从 node_modules 拷贝 hls.js / flv.js / mpegts.js 的产物及 LICENSE 到 `moeplayer/` 对应目录
|
||||||
- **改动 `moeplayer.js` 后必须执行 `npm run build`** 重新生成 min 版
|
- **改动 `src/` 后必须执行 `npm run build`** 重新生成两个产物;`moeplayer/js/` 下两个 js 均为生成物,勿手改
|
||||||
- 升级依赖:改 `package.json` 版本号后 `npm install && npm run build`
|
- 升级依赖:改 `package.json` 版本号后 `npm install && npm run build`
|
||||||
- 运行时机制:播放器用 `getPath()` 定位自身所在目录,按需动态 `<script>` 加载同级 `hls.js/` 等目录里的文件,库挂全局变量(`Hls`/`flvjs`/`mpegts`)。**这个目录结构约定不能破坏**
|
- 运行时机制:播放器用 `getPath()` 定位自身所在目录,按需动态 `<script>` 加载同级 `hls.js/` 等目录里的文件,库挂全局变量(`Hls`/`flvjs`/`mpegts`)。**这个目录结构约定不能破坏**
|
||||||
|
- rollup 配置要点:`treeshake: false`(完整保留所有工具函数,与旧单文件一致);UMD `name: 'MoePlayer'`、`exports: 'default'`,CJS/AMD/全局变量行为与旧 UMD 等价
|
||||||
|
|
||||||
## 测试方式
|
## 测试方式
|
||||||
|
|
||||||
@@ -43,8 +51,9 @@ MoePlayer —— 一款中文友好的开源网页视频播放器(MIT 协议
|
|||||||
## 代码风格
|
## 代码风格
|
||||||
|
|
||||||
- 注释与文档使用中文(项目惯例)
|
- 注释与文档使用中文(项目惯例)
|
||||||
- 核心源码为单文件 ES5 风格(`var`、函数式),阶段 2/3 重构前保持一致,不要引入 ES6+ 语法
|
- `src/` 为 ES Module 源码,但函数体保持旧单文件的 ES5 风格(`var`、函数式),阶段 2/3 重构前不要在函数体内引入 ES6+ 语法;只允许模块级的 `import`/`export` 语句
|
||||||
- `moeplayer/` 下由构建生成的文件(min.js、hls.js/flv.js/mpegts.js 目录内容)不要手动修改
|
- 主函数 `moeplayerEmbed` 整体搬迁、内部逻辑零改动;语言包替换机制(`window.moeplayerLanguage`)在其内部,勿动
|
||||||
|
- `moeplayer/` 下由构建生成的文件(js 两个产物、hls.js/flv.js/mpegts.js 目录内容)不要手动修改
|
||||||
|
|
||||||
## Git 约定
|
## Git 约定
|
||||||
|
|
||||||
@@ -54,7 +63,7 @@ MoePlayer —— 一款中文友好的开源网页视频播放器(MIT 协议
|
|||||||
## 改造路线图
|
## 改造路线图
|
||||||
|
|
||||||
1. ~~工程化:npm + 构建脚本 + 依赖 npm 化~~(已完成)
|
1. ~~工程化:npm + 构建脚本 + 依赖 npm 化~~(已完成)
|
||||||
2. 改名 ckplayer → MoePlayer(已完成)+ 单文件拆分为 ES Module(待做)+ README 重写
|
2. 改名 ckplayer → MoePlayer(已完成)+ 单文件拆分为 ES Module(已完成,`src/` + rollup 打包;主函数 `moeplayerEmbed` 内部尚未拆分)+ README 重写
|
||||||
3. 核心与 UI 分层、皮肤改用 CSS 变量 + SVG 图标
|
3. 核心与 UI 分层、皮肤改用 CSS 变量 + SVG 图标
|
||||||
4. 协议插件化(hls/mpegts 按需加载,移除 flv.js)、移动端 H5 兼容专项
|
4. 协议插件化(hls/mpegts 按需加载,移除 flv.js)、移动端 H5 兼容专项
|
||||||
5. Moodle media 插件(独立仓库 moodle-media_moeplayer)
|
5. Moodle media 插件(独立仓库 moodle-media_moeplayer)
|
||||||
|
|||||||
@@ -1,42 +1,72 @@
|
|||||||
#### 介绍
|
# MoePlayer
|
||||||
一款用于在网页上播放视频的软件,本软件为开源软件,遵守开源协议:MIT
|
|
||||||
|
|
||||||
#### 视频格式支持
|
一款中文友好的开源网页视频播放器(MIT 协议),fork 自已停止维护的 [ckplayer](http://www.ckplayer.com) X3,在其基础上持续现代化改造。
|
||||||
支持mp4,flv,m3u8,ts等格式
|
|
||||||
|
|
||||||
#### 播放形式支持
|
> 本项目处于活跃改造期,API 与 ckplayer X3 基本兼容,但全局变量已更名为 `MoePlayer`,CSS 类名前缀已更名为 `moeplayer-*`。
|
||||||
支持点播、直播、直播+回放
|
|
||||||
|
|
||||||
#### 平台支持
|
## 特性
|
||||||
支持移动端,PC端。
|
|
||||||
|
|
||||||
#### 功能支持
|
- 支持 mp4 / flv / m3u8 / ts 等格式(m3u8/flv/ts 基于 hls.js、flv.js、mpegts.js)
|
||||||
支持使用js监听播放器的各种状态,支持使用js控制播放器的各种操作
|
- 支持点播、直播、直播+回放
|
||||||
|
- 支持 PC 与移动端 H5
|
||||||
|
- 支持使用 JS 监听播放器各种状态、控制播放器各种操作
|
||||||
|
- 零框架依赖,引入一个 JS 和一个 CSS 即可使用
|
||||||
|
- 多实例友好:同一页面可创建多个播放器
|
||||||
|
|
||||||
#### 软件架构
|
## 快速开始
|
||||||
本软件采用javascript编写核心代码,css文件定义播放器风格
|
|
||||||
|
|
||||||
#### 安装教程
|
将 `moeplayer` 文件夹上传到网站环境中,在页面引入 `moeplayer.js` 和 `moeplayer.css`:
|
||||||
不存在安装过程,将下载包里的ckplayer文件夹上传到网站环境中,在需要播放视频的页面上引入ckplayer.js及ckplayer.css文件,在需要插入视频的地方使用如下代码:
|
|
||||||
|
|
||||||
```
|
```html
|
||||||
<link type="text/css" rel="stylesheet" href="ckplayer/css/ckplayer.css" />
|
<link type="text/css" rel="stylesheet" href="moeplayer/css/moeplayer.css" />
|
||||||
<script type="text/javascript" src="ckplayer/js/ckplayer.js" charset="UTF-8"></script>
|
<script type="text/javascript" src="moeplayer/js/moeplayer.min.js" charset="UTF-8"></script>
|
||||||
<div class="video" style="width: 600px;height: 400px;">播放器容器</div>
|
<div class="video" style="width: 600px;height: 400px;">播放器容器</div>
|
||||||
<script type="text/javascript">
|
<script type="text/javascript">
|
||||||
//定义一个变量:videoObject,用来做为视频初始化配置
|
|
||||||
var videoObject = {
|
var videoObject = {
|
||||||
container: '.video', //“#”代表容器的ID,“.”或“”代表容器的class
|
container: '.video', //“#”代表容器的ID,“.”或“”代表容器的class
|
||||||
video: 'http://ckplayer-video.oss-cn-shanghai.aliyuncs.com/sample-mp4/05cacb4e02f9d9e.mp4'//视频地址
|
video: 'https://example.com/sample.mp4' //视频地址
|
||||||
};
|
};
|
||||||
var player = new ckplayer(videoObject);//初始化播放器
|
var player = new MoePlayer(videoObject); //初始化播放器
|
||||||
</script>
|
</script>
|
||||||
```
|
```
|
||||||
|
|
||||||
|
更多配置与 API 可参考本仓库的 `index.html` 演示页;原 ckplayer 手册(http://www.ckplayer.com/manual/ )在改造期内仍有参考价值。
|
||||||
|
|
||||||
#### 使用说明
|
### 语言
|
||||||
使用过程中碰到问题,请至官网查看手册:http://www.ckplayer.com/manual/
|
|
||||||
|
|
||||||
#### 参与贡献
|
默认中文。引入语言包可切换其它语言(需在引入 moeplayer.js 之前引入):
|
||||||
niandeng
|
|
||||||
|
|
||||||
|
```html
|
||||||
|
<script type="text/javascript" src="moeplayer/language/en.js" charset="UTF-8"></script>
|
||||||
|
```
|
||||||
|
|
||||||
|
### 皮肤
|
||||||
|
|
||||||
|
默认皮肤 `moeplayer.css`,另有红色 `moeplayer.red.css`、西瓜风格 `moeplayer.ixigua.css`,替换 CSS 文件即可换肤。
|
||||||
|
|
||||||
|
## 从源码构建
|
||||||
|
|
||||||
|
```bash
|
||||||
|
npm install
|
||||||
|
npm run build
|
||||||
|
```
|
||||||
|
|
||||||
|
源码在 `src/`(ES Module),构建产物输出到 `moeplayer/js/`(UMD,含未压缩版与 min 版),同时从 npm 依赖拷贝 hls.js / flv.js / mpegts.js 运行时库到 `moeplayer/` 对应目录。
|
||||||
|
|
||||||
|
## 改造路线图
|
||||||
|
|
||||||
|
- [x] 工程化:npm + rollup 构建,依赖 npm 化管理
|
||||||
|
- [x] 改名 ckplayer → MoePlayer,单文件拆分为 ES Module
|
||||||
|
- [ ] 核心与 UI 分层,皮肤改用 CSS 变量 + SVG 图标
|
||||||
|
- [ ] 协议插件化(hls/mpegts 按需加载,移除已停维护的 flv.js)
|
||||||
|
- [ ] 移动端 H5 兼容性专项
|
||||||
|
- [ ] Moodle media 插件(独立仓库 moodle-media_moeplayer)
|
||||||
|
- [ ] 完整中文文档
|
||||||
|
|
||||||
|
## 致谢
|
||||||
|
|
||||||
|
感谢 ckplayer 原作者 [niandeng](http://www.ckplayer.com) 的开源工作,本项目在其 X3 版本基础上继续演进。
|
||||||
|
|
||||||
|
## 协议
|
||||||
|
|
||||||
|
[MIT](LICENSE) © MoePlayer 项目 & ckplayer 原作者 niandeng
|
||||||
|
|||||||
+11
-1
@@ -3,7 +3,7 @@
|
|||||||
<head>
|
<head>
|
||||||
<meta charset="UTF-8">
|
<meta charset="UTF-8">
|
||||||
<title>MoePlayer</title>
|
<title>MoePlayer</title>
|
||||||
<link type="text/css" rel="stylesheet" href="moeplayer/css/moeplayer.css" />
|
<link id="skin" type="text/css" rel="stylesheet" href="moeplayer/css/moeplayer.css" />
|
||||||
<!--
|
<!--
|
||||||
如果需要使用其它语言,请在此处引入相应的js,比如:<script type="text/javascript" src="moeplayer/language/en.js" charset="UTF-8"></script>
|
如果需要使用其它语言,请在此处引入相应的js,比如:<script type="text/javascript" src="moeplayer/language/en.js" charset="UTF-8"></script>
|
||||||
-->
|
-->
|
||||||
@@ -44,12 +44,22 @@
|
|||||||
player.ended(function(){
|
player.ended(function(){
|
||||||
document.getElementById('state').innerHTML='监听到播放结束';
|
document.getElementById('state').innerHTML='监听到播放结束';
|
||||||
});
|
});
|
||||||
|
//皮肤切换:替换引入的CSS文件
|
||||||
|
function changeSkin(css){
|
||||||
|
document.getElementById('skin').href='moeplayer/css/'+css;
|
||||||
|
}
|
||||||
</script>
|
</script>
|
||||||
<p>以下链接指向原 ckplayer 项目:</p>
|
<p>以下链接指向原 ckplayer 项目:</p>
|
||||||
<p>官网:<a href="https://www.ckplayer.com" target="_blank">www.ckplayer.com</a></p>
|
<p>官网:<a href="https://www.ckplayer.com" target="_blank">www.ckplayer.com</a></p>
|
||||||
<p>手册:<a href="https://www.ckplayer.com/manual/" target="_blank">www.ckplayer.com/manual/</a></p>
|
<p>手册:<a href="https://www.ckplayer.com/manual/" target="_blank">www.ckplayer.com/manual/</a></p>
|
||||||
<p>社区:<a href="https://bbs.ckplayer.com/" target="_blank">bbs.ckplayer.com</a></p>
|
<p>社区:<a href="https://bbs.ckplayer.com/" target="_blank">bbs.ckplayer.com</a></p>
|
||||||
<p>全功能演示:<a href="https://www.ckplayer.com/demo.html" target="_blank">www.ckplayer.com/demo.html</a></p>
|
<p>全功能演示:<a href="https://www.ckplayer.com/demo.html" target="_blank">www.ckplayer.com/demo.html</a></p>
|
||||||
|
<p>皮肤切换:</p>
|
||||||
|
<p>
|
||||||
|
<button type="button" onclick="changeSkin('moeplayer.css')">默认</button>
|
||||||
|
<button type="button" onclick="changeSkin('moeplayer.red.css')">红色</button>
|
||||||
|
<button type="button" onclick="changeSkin('moeplayer.ixigua.css')">西瓜</button>
|
||||||
|
</p>
|
||||||
<p>控制示例:</p>
|
<p>控制示例:</p>
|
||||||
<p>
|
<p>
|
||||||
<button type="button" onclick="player.play()" >播放</button>
|
<button type="button" onclick="player.play()" >播放</button>
|
||||||
|
|||||||
+7374
-7337
File diff suppressed because it is too large
Load Diff
Vendored
+7
-1
File diff suppressed because one or more lines are too long
Generated
+501
-1
@@ -14,7 +14,8 @@
|
|||||||
"mpegts.js": "^1.8.0"
|
"mpegts.js": "^1.8.0"
|
||||||
},
|
},
|
||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
"terser": "^5.0.0"
|
"@rollup/plugin-terser": "^1.0.0",
|
||||||
|
"rollup": "^4.62.2"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/@jridgewell/gen-mapping": {
|
"node_modules/@jridgewell/gen-mapping": {
|
||||||
@@ -67,6 +68,425 @@
|
|||||||
"@jridgewell/sourcemap-codec": "^1.4.14"
|
"@jridgewell/sourcemap-codec": "^1.4.14"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"node_modules/@rollup/plugin-terser": {
|
||||||
|
"version": "1.0.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/@rollup/plugin-terser/-/plugin-terser-1.0.0.tgz",
|
||||||
|
"integrity": "sha512-FnCxhTBx6bMOYQrar6C8h3scPt8/JwIzw3+AJ2K++6guogH5fYaIFia+zZuhqv0eo1RN7W1Pz630SyvLbDjhtQ==",
|
||||||
|
"dev": true,
|
||||||
|
"license": "MIT",
|
||||||
|
"dependencies": {
|
||||||
|
"serialize-javascript": "^7.0.3",
|
||||||
|
"smob": "^1.0.0",
|
||||||
|
"terser": "^5.17.4"
|
||||||
|
},
|
||||||
|
"engines": {
|
||||||
|
"node": ">=20.0.0"
|
||||||
|
},
|
||||||
|
"peerDependencies": {
|
||||||
|
"rollup": "^2.0.0||^3.0.0||^4.0.0"
|
||||||
|
},
|
||||||
|
"peerDependenciesMeta": {
|
||||||
|
"rollup": {
|
||||||
|
"optional": true
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"node_modules/@rollup/rollup-android-arm-eabi": {
|
||||||
|
"version": "4.62.2",
|
||||||
|
"resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.62.2.tgz",
|
||||||
|
"integrity": "sha512-6o7ZLZK+BeenkZCFNDXqpbjw9bD6nuWonvS/lwQJp7NoVVxm6p3qE7qQ5jGuBjiFsgvqjD8mZAU5oWxTmbOeOg==",
|
||||||
|
"cpu": [
|
||||||
|
"arm"
|
||||||
|
],
|
||||||
|
"dev": true,
|
||||||
|
"license": "MIT",
|
||||||
|
"optional": true,
|
||||||
|
"os": [
|
||||||
|
"android"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"node_modules/@rollup/rollup-android-arm64": {
|
||||||
|
"version": "4.62.2",
|
||||||
|
"resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.62.2.tgz",
|
||||||
|
"integrity": "sha512-BaH7BllCACHoH1LguOU56UItGfUWjujlO65kS9LAodViaN4bwIKd7oeW/ZHJ/4ljr/7MIiENnNy3HJ0zXv8Zkw==",
|
||||||
|
"cpu": [
|
||||||
|
"arm64"
|
||||||
|
],
|
||||||
|
"dev": true,
|
||||||
|
"license": "MIT",
|
||||||
|
"optional": true,
|
||||||
|
"os": [
|
||||||
|
"android"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"node_modules/@rollup/rollup-darwin-arm64": {
|
||||||
|
"version": "4.62.2",
|
||||||
|
"resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.62.2.tgz",
|
||||||
|
"integrity": "sha512-v39RCCvj4He82I9sFmk+M1VZ0PLM9sfsLVikjfx2hYBNALhrrOR2D3JjQA6AhlaSOgcR+RzrKY7e1+bT6SUO/A==",
|
||||||
|
"cpu": [
|
||||||
|
"arm64"
|
||||||
|
],
|
||||||
|
"dev": true,
|
||||||
|
"license": "MIT",
|
||||||
|
"optional": true,
|
||||||
|
"os": [
|
||||||
|
"darwin"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"node_modules/@rollup/rollup-darwin-x64": {
|
||||||
|
"version": "4.62.2",
|
||||||
|
"resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.62.2.tgz",
|
||||||
|
"integrity": "sha512-yl0y2vq3S3lHeuXhEdss6TWfKW8vkujImO12tn4ZkG/4oghr09LvdYm2RElVjokTQiUvDUGXLGsYeLqUMCKpGA==",
|
||||||
|
"cpu": [
|
||||||
|
"x64"
|
||||||
|
],
|
||||||
|
"dev": true,
|
||||||
|
"license": "MIT",
|
||||||
|
"optional": true,
|
||||||
|
"os": [
|
||||||
|
"darwin"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"node_modules/@rollup/rollup-freebsd-arm64": {
|
||||||
|
"version": "4.62.2",
|
||||||
|
"resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-arm64/-/rollup-freebsd-arm64-4.62.2.tgz",
|
||||||
|
"integrity": "sha512-tT4pvt4qXD+vEoezupCWi+a1F0vvDiksiHc+PxRlYTOH1I6/X4id9jPxTP+Fg+545euaFT1jJVs4CEdHZAU1vw==",
|
||||||
|
"cpu": [
|
||||||
|
"arm64"
|
||||||
|
],
|
||||||
|
"dev": true,
|
||||||
|
"license": "MIT",
|
||||||
|
"optional": true,
|
||||||
|
"os": [
|
||||||
|
"freebsd"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"node_modules/@rollup/rollup-freebsd-x64": {
|
||||||
|
"version": "4.62.2",
|
||||||
|
"resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-x64/-/rollup-freebsd-x64-4.62.2.tgz",
|
||||||
|
"integrity": "sha512-6nU5F2wCW+qvCBhTn1pdIU3bzsIoF7EUwsCDRxilWGprQR6yd508YnH9+OKFCwpfS8pjZqDUmnCAr7exax0XCg==",
|
||||||
|
"cpu": [
|
||||||
|
"x64"
|
||||||
|
],
|
||||||
|
"dev": true,
|
||||||
|
"license": "MIT",
|
||||||
|
"optional": true,
|
||||||
|
"os": [
|
||||||
|
"freebsd"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"node_modules/@rollup/rollup-linux-arm-gnueabihf": {
|
||||||
|
"version": "4.62.2",
|
||||||
|
"resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.62.2.tgz",
|
||||||
|
"integrity": "sha512-n1GJHPOvpIfhi3TmrCeh6S6URt9BFCt0KQE3qvexyGCTAKpR4Lg+eWvNZEqu7epxwus/8ElT3hacYEucm49SZg==",
|
||||||
|
"cpu": [
|
||||||
|
"arm"
|
||||||
|
],
|
||||||
|
"dev": true,
|
||||||
|
"libc": [
|
||||||
|
"glibc"
|
||||||
|
],
|
||||||
|
"license": "MIT",
|
||||||
|
"optional": true,
|
||||||
|
"os": [
|
||||||
|
"linux"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"node_modules/@rollup/rollup-linux-arm-musleabihf": {
|
||||||
|
"version": "4.62.2",
|
||||||
|
"resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.62.2.tgz",
|
||||||
|
"integrity": "sha512-JqgflS8wEB+UXV/vS1RpRbifGBeN4D5lz8D8oOFbFZw4vedvdOgCFAjfBmIMdW3yL10XpQQ0Ambepw6MXrhOnA==",
|
||||||
|
"cpu": [
|
||||||
|
"arm"
|
||||||
|
],
|
||||||
|
"dev": true,
|
||||||
|
"libc": [
|
||||||
|
"musl"
|
||||||
|
],
|
||||||
|
"license": "MIT",
|
||||||
|
"optional": true,
|
||||||
|
"os": [
|
||||||
|
"linux"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"node_modules/@rollup/rollup-linux-arm64-gnu": {
|
||||||
|
"version": "4.62.2",
|
||||||
|
"resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.62.2.tgz",
|
||||||
|
"integrity": "sha512-wnFJkogWvN4jm/hQRF2UBaeUmk20j5+DmHvoyWii2b8HJDyvz1MF2OU/6ynXt2KR63rbZLWkFpoytpdc/yBuSA==",
|
||||||
|
"cpu": [
|
||||||
|
"arm64"
|
||||||
|
],
|
||||||
|
"dev": true,
|
||||||
|
"libc": [
|
||||||
|
"glibc"
|
||||||
|
],
|
||||||
|
"license": "MIT",
|
||||||
|
"optional": true,
|
||||||
|
"os": [
|
||||||
|
"linux"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"node_modules/@rollup/rollup-linux-arm64-musl": {
|
||||||
|
"version": "4.62.2",
|
||||||
|
"resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.62.2.tgz",
|
||||||
|
"integrity": "sha512-HVu2bp0zhvJ8xHEV9+UUs7S90VadmBSY3LcIMvozbPo4AuMGDWlz3ymHLHZPX4hR67TKTt8Qp5PJ5RBg/i+RMQ==",
|
||||||
|
"cpu": [
|
||||||
|
"arm64"
|
||||||
|
],
|
||||||
|
"dev": true,
|
||||||
|
"libc": [
|
||||||
|
"musl"
|
||||||
|
],
|
||||||
|
"license": "MIT",
|
||||||
|
"optional": true,
|
||||||
|
"os": [
|
||||||
|
"linux"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"node_modules/@rollup/rollup-linux-loong64-gnu": {
|
||||||
|
"version": "4.62.2",
|
||||||
|
"resolved": "https://registry.npmjs.org/@rollup/rollup-linux-loong64-gnu/-/rollup-linux-loong64-gnu-4.62.2.tgz",
|
||||||
|
"integrity": "sha512-mQqqAV8QaoSgr9I2fKDLY2BAVvmKjWoGiu/cSYQonsLvtqwEn1E4QYfnCOcp5zoEqNhsDYin1s6jx/VJmrxlZg==",
|
||||||
|
"cpu": [
|
||||||
|
"loong64"
|
||||||
|
],
|
||||||
|
"dev": true,
|
||||||
|
"libc": [
|
||||||
|
"glibc"
|
||||||
|
],
|
||||||
|
"license": "MIT",
|
||||||
|
"optional": true,
|
||||||
|
"os": [
|
||||||
|
"linux"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"node_modules/@rollup/rollup-linux-loong64-musl": {
|
||||||
|
"version": "4.62.2",
|
||||||
|
"resolved": "https://registry.npmjs.org/@rollup/rollup-linux-loong64-musl/-/rollup-linux-loong64-musl-4.62.2.tgz",
|
||||||
|
"integrity": "sha512-IxKLoxCQ2IWi6bT2akyDUBGsOImDKB+sPp4EsTmwFQ/fMwpCKm8uLSSgP/Kx/QYUgKis6SEZ5/Nlhup0DIA0PQ==",
|
||||||
|
"cpu": [
|
||||||
|
"loong64"
|
||||||
|
],
|
||||||
|
"dev": true,
|
||||||
|
"libc": [
|
||||||
|
"musl"
|
||||||
|
],
|
||||||
|
"license": "MIT",
|
||||||
|
"optional": true,
|
||||||
|
"os": [
|
||||||
|
"linux"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"node_modules/@rollup/rollup-linux-ppc64-gnu": {
|
||||||
|
"version": "4.62.2",
|
||||||
|
"resolved": "https://registry.npmjs.org/@rollup/rollup-linux-ppc64-gnu/-/rollup-linux-ppc64-gnu-4.62.2.tgz",
|
||||||
|
"integrity": "sha512-Mk5ha2RQSgyFfmYYLkBpPnUk8D8FriBxesO1u9O75X0mHgXL1UQcH5Itl2lurWL2tj0RxV9b9tJgipac0hRY9A==",
|
||||||
|
"cpu": [
|
||||||
|
"ppc64"
|
||||||
|
],
|
||||||
|
"dev": true,
|
||||||
|
"libc": [
|
||||||
|
"glibc"
|
||||||
|
],
|
||||||
|
"license": "MIT",
|
||||||
|
"optional": true,
|
||||||
|
"os": [
|
||||||
|
"linux"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"node_modules/@rollup/rollup-linux-ppc64-musl": {
|
||||||
|
"version": "4.62.2",
|
||||||
|
"resolved": "https://registry.npmjs.org/@rollup/rollup-linux-ppc64-musl/-/rollup-linux-ppc64-musl-4.62.2.tgz",
|
||||||
|
"integrity": "sha512-CjvEnqJL/0/TQ3TXX3OPIJ/kmBellrWd4heXUmHeJlTnmwjKpSJzoehLaL6Xk0ZnMHBu9dZuFADNOrtjF4v+2w==",
|
||||||
|
"cpu": [
|
||||||
|
"ppc64"
|
||||||
|
],
|
||||||
|
"dev": true,
|
||||||
|
"libc": [
|
||||||
|
"musl"
|
||||||
|
],
|
||||||
|
"license": "MIT",
|
||||||
|
"optional": true,
|
||||||
|
"os": [
|
||||||
|
"linux"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"node_modules/@rollup/rollup-linux-riscv64-gnu": {
|
||||||
|
"version": "4.62.2",
|
||||||
|
"resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.62.2.tgz",
|
||||||
|
"integrity": "sha512-1SiZbzwdkaDURsew/tSOrooKiYy7EQGT6m8ufavAi9NEyQb/6VuIxFXAL1fqa4iZe3g4NbNk4P7J32z2tw5Mgg==",
|
||||||
|
"cpu": [
|
||||||
|
"riscv64"
|
||||||
|
],
|
||||||
|
"dev": true,
|
||||||
|
"libc": [
|
||||||
|
"glibc"
|
||||||
|
],
|
||||||
|
"license": "MIT",
|
||||||
|
"optional": true,
|
||||||
|
"os": [
|
||||||
|
"linux"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"node_modules/@rollup/rollup-linux-riscv64-musl": {
|
||||||
|
"version": "4.62.2",
|
||||||
|
"resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-musl/-/rollup-linux-riscv64-musl-4.62.2.tgz",
|
||||||
|
"integrity": "sha512-nQts12zJ3NQRoE6uYljOH89v7szzLDvG2JD/vsX+vGXU8w/At1GowTZ5/7qeFQ8m7L55rpR8Okugnuo5bgjy2Q==",
|
||||||
|
"cpu": [
|
||||||
|
"riscv64"
|
||||||
|
],
|
||||||
|
"dev": true,
|
||||||
|
"libc": [
|
||||||
|
"musl"
|
||||||
|
],
|
||||||
|
"license": "MIT",
|
||||||
|
"optional": true,
|
||||||
|
"os": [
|
||||||
|
"linux"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"node_modules/@rollup/rollup-linux-s390x-gnu": {
|
||||||
|
"version": "4.62.2",
|
||||||
|
"resolved": "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.62.2.tgz",
|
||||||
|
"integrity": "sha512-E9/ll019jhPIJgpzfZoIkBGhcz+kKNgVWYRY0zr9srBdPPFVpvOKW8VaJKUbeK+eZXyQF9ltME+Kk6affeaPgg==",
|
||||||
|
"cpu": [
|
||||||
|
"s390x"
|
||||||
|
],
|
||||||
|
"dev": true,
|
||||||
|
"libc": [
|
||||||
|
"glibc"
|
||||||
|
],
|
||||||
|
"license": "MIT",
|
||||||
|
"optional": true,
|
||||||
|
"os": [
|
||||||
|
"linux"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"node_modules/@rollup/rollup-linux-x64-gnu": {
|
||||||
|
"version": "4.62.2",
|
||||||
|
"resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.62.2.tgz",
|
||||||
|
"integrity": "sha512-5BqxR/pshjey51iliyzTD5Xi3EN0aLmQ2lZ3lvefVV9c82BvrLo2/6OT55iifpWBufs6kdwWbuOKS841DrmK9A==",
|
||||||
|
"cpu": [
|
||||||
|
"x64"
|
||||||
|
],
|
||||||
|
"dev": true,
|
||||||
|
"libc": [
|
||||||
|
"glibc"
|
||||||
|
],
|
||||||
|
"license": "MIT",
|
||||||
|
"optional": true,
|
||||||
|
"os": [
|
||||||
|
"linux"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"node_modules/@rollup/rollup-linux-x64-musl": {
|
||||||
|
"version": "4.62.2",
|
||||||
|
"resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.62.2.tgz",
|
||||||
|
"integrity": "sha512-uNN83XxQrRAh/w0/pmAfibcwyb6YWt4gP+dpnQKPVJshAloQ785ii8CT8ZCIxkGg9opVsvAlGhFitSm6D1Jjpg==",
|
||||||
|
"cpu": [
|
||||||
|
"x64"
|
||||||
|
],
|
||||||
|
"dev": true,
|
||||||
|
"libc": [
|
||||||
|
"musl"
|
||||||
|
],
|
||||||
|
"license": "MIT",
|
||||||
|
"optional": true,
|
||||||
|
"os": [
|
||||||
|
"linux"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"node_modules/@rollup/rollup-openbsd-x64": {
|
||||||
|
"version": "4.62.2",
|
||||||
|
"resolved": "https://registry.npmjs.org/@rollup/rollup-openbsd-x64/-/rollup-openbsd-x64-4.62.2.tgz",
|
||||||
|
"integrity": "sha512-srjEIxSH3LRnJN6THczDHWQplqEMFiAJrTab0msUryh9kwNpkICf3Ea6q6MN/2cZwRFUNx5w+h6Hpi4QuHS6Zg==",
|
||||||
|
"cpu": [
|
||||||
|
"x64"
|
||||||
|
],
|
||||||
|
"dev": true,
|
||||||
|
"license": "MIT",
|
||||||
|
"optional": true,
|
||||||
|
"os": [
|
||||||
|
"openbsd"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"node_modules/@rollup/rollup-openharmony-arm64": {
|
||||||
|
"version": "4.62.2",
|
||||||
|
"resolved": "https://registry.npmjs.org/@rollup/rollup-openharmony-arm64/-/rollup-openharmony-arm64-4.62.2.tgz",
|
||||||
|
"integrity": "sha512-8hOJnxgbyObnCm5AlRA3A931xX19xq80RjVTKgJOvEKWqJruP/Uf12IbAOaDjjEXYRewwHLfmF0YRIdK3OwKWA==",
|
||||||
|
"cpu": [
|
||||||
|
"arm64"
|
||||||
|
],
|
||||||
|
"dev": true,
|
||||||
|
"license": "MIT",
|
||||||
|
"optional": true,
|
||||||
|
"os": [
|
||||||
|
"openharmony"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"node_modules/@rollup/rollup-win32-arm64-msvc": {
|
||||||
|
"version": "4.62.2",
|
||||||
|
"resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.62.2.tgz",
|
||||||
|
"integrity": "sha512-mmF4AY1i0hG/bLWUctUq59gtmgaSIRa3cu/A3JFRp/sCNEme2bgDEiDS22P9FbnJB8NJNF4jPJiSP5RHQpUTDg==",
|
||||||
|
"cpu": [
|
||||||
|
"arm64"
|
||||||
|
],
|
||||||
|
"dev": true,
|
||||||
|
"license": "MIT",
|
||||||
|
"optional": true,
|
||||||
|
"os": [
|
||||||
|
"win32"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"node_modules/@rollup/rollup-win32-ia32-msvc": {
|
||||||
|
"version": "4.62.2",
|
||||||
|
"resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.62.2.tgz",
|
||||||
|
"integrity": "sha512-DZgkknc6jhHrk46V25vbAM0zZkyP0nSDkJB8/dRkLTxv470dOmWDqGoEJl/9A0dFfS7yE3REOwNDxpHwSLSt0Q==",
|
||||||
|
"cpu": [
|
||||||
|
"ia32"
|
||||||
|
],
|
||||||
|
"dev": true,
|
||||||
|
"license": "MIT",
|
||||||
|
"optional": true,
|
||||||
|
"os": [
|
||||||
|
"win32"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"node_modules/@rollup/rollup-win32-x64-gnu": {
|
||||||
|
"version": "4.62.2",
|
||||||
|
"resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-gnu/-/rollup-win32-x64-gnu-4.62.2.tgz",
|
||||||
|
"integrity": "sha512-T6xr6ucWSFto+VGajA8YH26LdpHRuP4YLHEKAtCWvJDOlnmWcDZVCI2Jmjr+IFHDlt2zRaTAKE4tfjTaWLgJBg==",
|
||||||
|
"cpu": [
|
||||||
|
"x64"
|
||||||
|
],
|
||||||
|
"dev": true,
|
||||||
|
"license": "MIT",
|
||||||
|
"optional": true,
|
||||||
|
"os": [
|
||||||
|
"win32"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"node_modules/@rollup/rollup-win32-x64-msvc": {
|
||||||
|
"version": "4.62.2",
|
||||||
|
"resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.62.2.tgz",
|
||||||
|
"integrity": "sha512-BfzEnDJOt9T8M989/lA37EcJgat01wLRnoi5dQf3QzOH7jzpqTAzdDbVfRljVr5r+jzKqpbHeyOfAaXxAd0PAA==",
|
||||||
|
"cpu": [
|
||||||
|
"x64"
|
||||||
|
],
|
||||||
|
"dev": true,
|
||||||
|
"license": "MIT",
|
||||||
|
"optional": true,
|
||||||
|
"os": [
|
||||||
|
"win32"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"node_modules/@types/estree": {
|
||||||
|
"version": "1.0.9",
|
||||||
|
"resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.9.tgz",
|
||||||
|
"integrity": "sha512-GhdPgy1el4/ImP05X05Uw4cw2/M93BCUmnEvWZNStlCzEKME4Fkk+YpoA5OiHNQmoS7Cafb8Xa3Pya8m1Qrzeg==",
|
||||||
|
"dev": true,
|
||||||
|
"license": "MIT"
|
||||||
|
},
|
||||||
"node_modules/acorn": {
|
"node_modules/acorn": {
|
||||||
"version": "8.17.0",
|
"version": "8.17.0",
|
||||||
"resolved": "https://registry.npmjs.org/acorn/-/acorn-8.17.0.tgz",
|
"resolved": "https://registry.npmjs.org/acorn/-/acorn-8.17.0.tgz",
|
||||||
@@ -110,6 +530,21 @@
|
|||||||
"webworkify-webpack": "^2.1.5"
|
"webworkify-webpack": "^2.1.5"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"node_modules/fsevents": {
|
||||||
|
"version": "2.3.3",
|
||||||
|
"resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz",
|
||||||
|
"integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==",
|
||||||
|
"dev": true,
|
||||||
|
"hasInstallScript": true,
|
||||||
|
"license": "MIT",
|
||||||
|
"optional": true,
|
||||||
|
"os": [
|
||||||
|
"darwin"
|
||||||
|
],
|
||||||
|
"engines": {
|
||||||
|
"node": "^8.16.0 || ^10.6.0 || >=11.0.0"
|
||||||
|
}
|
||||||
|
},
|
||||||
"node_modules/hls.js": {
|
"node_modules/hls.js": {
|
||||||
"version": "1.6.16",
|
"version": "1.6.16",
|
||||||
"resolved": "https://registry.npmjs.org/hls.js/-/hls.js-1.6.16.tgz",
|
"resolved": "https://registry.npmjs.org/hls.js/-/hls.js-1.6.16.tgz",
|
||||||
@@ -126,6 +561,71 @@
|
|||||||
"webworkify-webpack": "github:xqq/webworkify-webpack"
|
"webworkify-webpack": "github:xqq/webworkify-webpack"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"node_modules/rollup": {
|
||||||
|
"version": "4.62.2",
|
||||||
|
"resolved": "https://registry.npmjs.org/rollup/-/rollup-4.62.2.tgz",
|
||||||
|
"integrity": "sha512-RFnrW4lhXA3s3eqHDZvN654g8OTjzRfqpIRJYczCGB6HzphckVAi/Qh4tbPUbRuDi7s1Llv8g/NspLkttY3gTA==",
|
||||||
|
"dev": true,
|
||||||
|
"license": "MIT",
|
||||||
|
"dependencies": {
|
||||||
|
"@types/estree": "1.0.9"
|
||||||
|
},
|
||||||
|
"bin": {
|
||||||
|
"rollup": "dist/bin/rollup"
|
||||||
|
},
|
||||||
|
"engines": {
|
||||||
|
"node": ">=18.0.0",
|
||||||
|
"npm": ">=8.0.0"
|
||||||
|
},
|
||||||
|
"optionalDependencies": {
|
||||||
|
"@rollup/rollup-android-arm-eabi": "4.62.2",
|
||||||
|
"@rollup/rollup-android-arm64": "4.62.2",
|
||||||
|
"@rollup/rollup-darwin-arm64": "4.62.2",
|
||||||
|
"@rollup/rollup-darwin-x64": "4.62.2",
|
||||||
|
"@rollup/rollup-freebsd-arm64": "4.62.2",
|
||||||
|
"@rollup/rollup-freebsd-x64": "4.62.2",
|
||||||
|
"@rollup/rollup-linux-arm-gnueabihf": "4.62.2",
|
||||||
|
"@rollup/rollup-linux-arm-musleabihf": "4.62.2",
|
||||||
|
"@rollup/rollup-linux-arm64-gnu": "4.62.2",
|
||||||
|
"@rollup/rollup-linux-arm64-musl": "4.62.2",
|
||||||
|
"@rollup/rollup-linux-loong64-gnu": "4.62.2",
|
||||||
|
"@rollup/rollup-linux-loong64-musl": "4.62.2",
|
||||||
|
"@rollup/rollup-linux-ppc64-gnu": "4.62.2",
|
||||||
|
"@rollup/rollup-linux-ppc64-musl": "4.62.2",
|
||||||
|
"@rollup/rollup-linux-riscv64-gnu": "4.62.2",
|
||||||
|
"@rollup/rollup-linux-riscv64-musl": "4.62.2",
|
||||||
|
"@rollup/rollup-linux-s390x-gnu": "4.62.2",
|
||||||
|
"@rollup/rollup-linux-x64-gnu": "4.62.2",
|
||||||
|
"@rollup/rollup-linux-x64-musl": "4.62.2",
|
||||||
|
"@rollup/rollup-openbsd-x64": "4.62.2",
|
||||||
|
"@rollup/rollup-openharmony-arm64": "4.62.2",
|
||||||
|
"@rollup/rollup-win32-arm64-msvc": "4.62.2",
|
||||||
|
"@rollup/rollup-win32-ia32-msvc": "4.62.2",
|
||||||
|
"@rollup/rollup-win32-x64-gnu": "4.62.2",
|
||||||
|
"@rollup/rollup-win32-x64-msvc": "4.62.2",
|
||||||
|
"fsevents": "~2.3.2"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"node_modules/serialize-javascript": {
|
||||||
|
"version": "7.0.7",
|
||||||
|
"resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-7.0.7.tgz",
|
||||||
|
"integrity": "sha512-YAy8Od6KV+uuwUuU50np8fGB/Aues6Y0nAhA9y/hId74PlKUcme4pXcBD46NWKr1Q4osN/iseZ17YqO1XfmI8g==",
|
||||||
|
"dev": true,
|
||||||
|
"license": "BSD-3-Clause",
|
||||||
|
"engines": {
|
||||||
|
"node": ">=20.0.0"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"node_modules/smob": {
|
||||||
|
"version": "1.6.2",
|
||||||
|
"resolved": "https://registry.npmjs.org/smob/-/smob-1.6.2.tgz",
|
||||||
|
"integrity": "sha512-RQsvleCbF8cVHEv+xuDGaA4pOizFqJ0GgjtMSRo6oP8pnN7WsigHgVGey6aILRBKv4W2YOMHLqbKdnB6hpB9fw==",
|
||||||
|
"dev": true,
|
||||||
|
"license": "MIT",
|
||||||
|
"engines": {
|
||||||
|
"node": ">=20.0.0"
|
||||||
|
}
|
||||||
|
},
|
||||||
"node_modules/source-map": {
|
"node_modules/source-map": {
|
||||||
"version": "0.6.1",
|
"version": "0.6.1",
|
||||||
"resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
|
"resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
|
||||||
|
|||||||
+3
-2
@@ -4,7 +4,7 @@
|
|||||||
"description": "一款中文友好的网页视频播放器(fork 自 ckplayer X3),支持 mp4/flv/m3u8/ts,可搭配 Moodle media 插件使用",
|
"description": "一款中文友好的网页视频播放器(fork 自 ckplayer X3),支持 mp4/flv/m3u8/ts,可搭配 Moodle media 插件使用",
|
||||||
"license": "MIT",
|
"license": "MIT",
|
||||||
"scripts": {
|
"scripts": {
|
||||||
"build": "node scripts/build.js"
|
"build": "rollup -c && node scripts/copy-libs.js"
|
||||||
},
|
},
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"flv.js": "^1.6.2",
|
"flv.js": "^1.6.2",
|
||||||
@@ -12,6 +12,7 @@
|
|||||||
"mpegts.js": "^1.8.0"
|
"mpegts.js": "^1.8.0"
|
||||||
},
|
},
|
||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
"terser": "^5.0.0"
|
"@rollup/plugin-terser": "^1.0.0",
|
||||||
|
"rollup": "^4.62.2"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -0,0 +1,49 @@
|
|||||||
|
/*
|
||||||
|
* rollup 构建配置
|
||||||
|
* 功能:把 src/ 下的 ES Module 打包成与旧版等价的 UMD 产物
|
||||||
|
* 1. moeplayer/js/moeplayer.js —— 未压缩版
|
||||||
|
* 2. moeplayer/js/moeplayer.min.js —— terser 压缩版(保留版权注释)
|
||||||
|
* 运行时依赖(hls.js/flv.js/mpegts.js)的拷贝由 scripts/copy-libs.js 完成
|
||||||
|
* 用法:npm run build
|
||||||
|
*/
|
||||||
|
import terser from '@rollup/plugin-terser';
|
||||||
|
|
||||||
|
// 产物头部版权注释(与 src/index.js 顶部一致)
|
||||||
|
const banner = `/*
|
||||||
|
* 软件名称:MoePlayer
|
||||||
|
* 版本:X3
|
||||||
|
* 版权:MoePlayer 项目(fork 自 ckplayer, www.ckplayer.com)
|
||||||
|
* 开源协议:MIT
|
||||||
|
*/`;
|
||||||
|
|
||||||
|
const outputBase = {
|
||||||
|
format: 'umd',
|
||||||
|
name: 'MoePlayer',
|
||||||
|
// 仅导出 moeplayerEmbed 函数本身,与旧 UMD 的 module.exports = factory() 行为一致
|
||||||
|
exports: 'default',
|
||||||
|
banner
|
||||||
|
};
|
||||||
|
|
||||||
|
export default {
|
||||||
|
input: 'src/index.js',
|
||||||
|
// 关闭 tree-shaking:完整保留所有工具函数(含暂未被引用的),与旧单文件内容一致
|
||||||
|
treeshake: false,
|
||||||
|
output: [
|
||||||
|
{
|
||||||
|
...outputBase,
|
||||||
|
file: 'moeplayer/js/moeplayer.js'
|
||||||
|
},
|
||||||
|
{
|
||||||
|
...outputBase,
|
||||||
|
file: 'moeplayer/js/moeplayer.min.js',
|
||||||
|
plugins: [
|
||||||
|
terser({
|
||||||
|
format: {
|
||||||
|
// 保留文件头部的版权注释
|
||||||
|
comments: /^!|软件名称|版权/
|
||||||
|
}
|
||||||
|
})
|
||||||
|
]
|
||||||
|
}
|
||||||
|
]
|
||||||
|
};
|
||||||
@@ -1,14 +1,12 @@
|
|||||||
/*
|
/*
|
||||||
* 构建脚本
|
* 构建脚本(第二步)
|
||||||
* 功能:
|
* 功能:从 node_modules 拷贝运行时依赖(hls.js/flv.js/mpegts.js)到 moeplayer/ 对应目录
|
||||||
* 1. 使用 terser 将 moeplayer/js/moeplayer.js 压缩为 moeplayer.min.js
|
|
||||||
* 2. 从 node_modules 拷贝运行时依赖(hls.js/flv.js/mpegts.js)到 moeplayer/ 对应目录
|
|
||||||
* 播放器运行时会按需动态加载这些文件,目录结构需与 getPath() 的约定保持一致
|
* 播放器运行时会按需动态加载这些文件,目录结构需与 getPath() 的约定保持一致
|
||||||
* 用法:npm run build
|
* 第一步(rollup 打包压缩)见 rollup.config.js
|
||||||
|
* 用法:npm run build(即 rollup -c && node scripts/copy-libs.js)
|
||||||
*/
|
*/
|
||||||
const fs = require('fs');
|
const fs = require('fs');
|
||||||
const path = require('path');
|
const path = require('path');
|
||||||
const terser = require('terser');
|
|
||||||
|
|
||||||
const root = path.resolve(__dirname, '..');
|
const root = path.resolve(__dirname, '..');
|
||||||
|
|
||||||
@@ -19,23 +17,6 @@ const libs = [
|
|||||||
['mpegts.js', 'mpegts.js', ['mpegts.js', 'mpegts.js.map', 'LICENSE']]
|
['mpegts.js', 'mpegts.js', ['mpegts.js', 'mpegts.js.map', 'LICENSE']]
|
||||||
];
|
];
|
||||||
|
|
||||||
async function minifyCore() {
|
|
||||||
const src = path.join(root, 'moeplayer/js/moeplayer.js');
|
|
||||||
const dist = path.join(root, 'moeplayer/js/moeplayer.min.js');
|
|
||||||
const code = fs.readFileSync(src, 'utf8');
|
|
||||||
const result = await terser.minify(code, {
|
|
||||||
output: {
|
|
||||||
// 保留文件头部的版权注释
|
|
||||||
comments: /^!|软件名称|版权/
|
|
||||||
}
|
|
||||||
});
|
|
||||||
if (result.error) {
|
|
||||||
throw result.error;
|
|
||||||
}
|
|
||||||
fs.writeFileSync(dist, result.code, 'utf8');
|
|
||||||
console.log('压缩完成: moeplayer/js/moeplayer.min.js (' + result.code.length + ' bytes)');
|
|
||||||
}
|
|
||||||
|
|
||||||
function copyLibs() {
|
function copyLibs() {
|
||||||
for (const [pkg, dir, files] of libs) {
|
for (const [pkg, dir, files] of libs) {
|
||||||
const pkgRoot = path.dirname(require.resolve(pkg + '/package.json'));
|
const pkgRoot = path.dirname(require.resolve(pkg + '/package.json'));
|
||||||
@@ -55,11 +36,10 @@ function copyLibs() {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
(async () => {
|
try {
|
||||||
await minifyCore();
|
|
||||||
copyLibs();
|
copyLibs();
|
||||||
console.log('构建完成');
|
console.log('依赖拷贝完成');
|
||||||
})().catch(err => {
|
} catch (err) {
|
||||||
console.error('构建失败:', err);
|
console.error('拷贝失败:', err);
|
||||||
process.exit(1);
|
process.exit(1);
|
||||||
});
|
}
|
||||||
File diff suppressed because it is too large
Load Diff
@@ -0,0 +1,62 @@
|
|||||||
|
/*
|
||||||
|
* videoObjectDefault
|
||||||
|
* 功能:静态变量,默认播放配置,当外部传递过来的配置有未包含在varsDefault里的,则使用varsDefault里的配置
|
||||||
|
*/
|
||||||
|
var videoObjectDefault= {
|
||||||
|
container: '',//视频容器的ID
|
||||||
|
volume: 0.8,//默认音量,范围0-1
|
||||||
|
poster: '',//封面图片地址
|
||||||
|
autoplay: false,//是否自动播放
|
||||||
|
loop: false,//是否需要循环播放
|
||||||
|
live: false,//是否是直播
|
||||||
|
rotate:0,//视频旋转角度
|
||||||
|
zoom:0,//默认缩放比例
|
||||||
|
ad:null,//广告
|
||||||
|
backLive:false,//显示返回直播按钮
|
||||||
|
seek: 0,//默认需要跳转的秒数
|
||||||
|
next: null,//下一集按钮动作
|
||||||
|
loaded: '',//加载播放器后调用的函数
|
||||||
|
plug: '',//使用插件
|
||||||
|
duration:0,//视频总时间
|
||||||
|
preview: null,//预览图片对象
|
||||||
|
prompt: null,//提示点功能
|
||||||
|
crossOrigin:'',//跨域请求字符
|
||||||
|
video: null,//视频地址
|
||||||
|
type:'',//视频类型
|
||||||
|
playbackrate: 1,//默认倍速
|
||||||
|
ended:null,//结束显示的内容
|
||||||
|
webFull:false,//页面全屏按钮事件
|
||||||
|
theatre:null,//剧场模式
|
||||||
|
controls:false,//是否显示自带控制栏
|
||||||
|
rightBar:null,//是否开启右边控制栏
|
||||||
|
smallWindows:null,//是否启用小窗口模式
|
||||||
|
smallWindowsDrag:true,//当处于小窗口模式时是否可拖动播放器
|
||||||
|
screenshot:false,//截图功能是否开启
|
||||||
|
timeScheduleAdjust:1,//是否可调节播放进度,0不启用,1是启用,2是只能前进(向右拖动),3是只能后退,4是只能前进但能回到第一次拖动时的位置,5是看过的地方可以随意拖动
|
||||||
|
logo:'',//logo
|
||||||
|
menu:null,//右键菜单
|
||||||
|
information:{//关于
|
||||||
|
'Load:':'{loadTime} second',
|
||||||
|
'Duration:':'{duration} second',
|
||||||
|
'Size:':'{videoWidth}x{videoHeight}',
|
||||||
|
'Volume:':'{volume}%',
|
||||||
|
'Fps:':'{fps}fps',
|
||||||
|
'Sudio decoded:':'{audioDecodedByteCount} Byte',
|
||||||
|
'Video decoded:':'{videoDecodedByteCount} Byte'
|
||||||
|
},
|
||||||
|
track:null,//字幕
|
||||||
|
title:'',//视频标题
|
||||||
|
language:'',//语言包文件
|
||||||
|
barHideTime:1500,//控制栏隐藏时间
|
||||||
|
playbackrateOpen:true,//是否开启控制栏倍速选项
|
||||||
|
playbackrateList:[0.75,1,1.25,1.5,2,4],//倍速配置值
|
||||||
|
cookie:null,//开启cookie功能
|
||||||
|
domain:null,//指定cookie保存的域
|
||||||
|
cookiePath:'/',//指定cookie保存路径
|
||||||
|
documentFocusPause:false,//窗口失去焦点后暂停播放
|
||||||
|
mouseWheelVolume:2,//是否启用鼠标滚轮调节音量功能,0=不启用,1=启用,2=全屏时才启用
|
||||||
|
keyVolume:2,//是否启用键盘控制音量调节,0=不启用,1=启用,2=全屏时才启用
|
||||||
|
errorShow:true//是否显示错误信息
|
||||||
|
};
|
||||||
|
|
||||||
|
export { videoObjectDefault };
|
||||||
@@ -0,0 +1,9 @@
|
|||||||
|
/*
|
||||||
|
* 软件名称:MoePlayer
|
||||||
|
* 版本:X3
|
||||||
|
* 版权:MoePlayer 项目(fork 自 ckplayer, www.ckplayer.com)
|
||||||
|
* 开源协议:MIT
|
||||||
|
*/
|
||||||
|
import moeplayerEmbed from './core/moeplayerEmbed.js';
|
||||||
|
|
||||||
|
export default moeplayerEmbed;
|
||||||
@@ -0,0 +1,69 @@
|
|||||||
|
/*
|
||||||
|
* language
|
||||||
|
* 功能:静态变量,包含播放器用到的默认语言包
|
||||||
|
* 引入其它语言js后该变量将被替换成新引入的语言包
|
||||||
|
*/
|
||||||
|
var language={
|
||||||
|
play:'%E6%92%AD%E6%94%BE',
|
||||||
|
pause:'%E6%9A%82%E5%81%9C',
|
||||||
|
refresh:'%E9%87%8D%E6%92%AD',
|
||||||
|
full:'%E5%85%A8%E5%B1%8F',
|
||||||
|
exitFull:'%E9%80%80%E5%87%BA%E5%85%A8%E5%B1%8F',
|
||||||
|
webFull:'%E9%A1%B5%E9%9D%A2%E5%85%A8%E5%B1%8F',
|
||||||
|
exitWebFull:'%E9%80%80%E5%87%BA%E9%A1%B5%E9%9D%A2%E5%85%A8%E5%B1%8F',
|
||||||
|
theatre:'%E5%89%A7%E5%9C%BA%E6%A8%A1%E5%BC%8F',
|
||||||
|
exitTheatre:'%E9%80%80%E5%87%BA%E5%89%A7%E5%9C%BA%E6%A8%A1%E5%BC%8F',
|
||||||
|
volume:'%E9%9F%B3%E9%87%8F%EF%BC%9A',
|
||||||
|
muted:'%E9%9D%99%E9%9F%B3',
|
||||||
|
exitmuted:'%E6%81%A2%E5%A4%8D%E9%9F%B3%E9%87%8F',
|
||||||
|
seek:'seek%EF%BC%9A',
|
||||||
|
waiting:'%E7%BC%93%E5%86%B2',
|
||||||
|
live:'%E7%9B%B4%E6%92%AD%E4%B8%AD',
|
||||||
|
backLive:'%E8%BF%94%E5%9B%9E%E7%9B%B4%E6%92%AD',
|
||||||
|
lookBack:'%E5%9B%9E%E7%9C%8B%EF%BC%9A',
|
||||||
|
next:'%E4%B8%8B%E4%B8%80%E9%9B%86',
|
||||||
|
screenshot:'%E8%A7%86%E9%A2%91%E6%88%AA%E5%9B%BE',
|
||||||
|
smallwindows:'%E5%B0%8F%E7%AA%97%E5%8F%A3%E6%92%AD%E6%94%BE%E5%8A%9F%E8%83%BD',
|
||||||
|
playbackrate:'%E5%80%8D%E9%80%9F',
|
||||||
|
playbackrateSuffix:'%E5%80%8D',
|
||||||
|
track:'%E5%AD%97%E5%B9%95',
|
||||||
|
noTrack:'%E6%97%A0%E5%AD%97%E5%B9%95',
|
||||||
|
definition:'%E6%B8%85%E6%99%B0%E5%BA%A6',
|
||||||
|
switchTo:'%E5%88%87%E6%8D%A2%E6%88%90%EF%BC%9A',
|
||||||
|
closeTime:'%7Bseconds%7D%E7%A7%92%E5%90%8E%E5%8F%AF%E5%85%B3%E9%97%AD%E5%B9%BF%E5%91%8A',
|
||||||
|
closeAd:'%E5%85%B3%E9%97%AD%E5%B9%BF%E5%91%8A',
|
||||||
|
second:'%E7%A7%92',
|
||||||
|
details:'%E6%9F%A5%E7%9C%8B%E8%AF%A6%E6%83%85',
|
||||||
|
copy:'%E5%A4%8D%E5%88%B6',
|
||||||
|
copySucceeded:'%E5%A4%8D%E5%88%B6%E6%88%90%E5%8A%9F%EF%BC%8C%E5%8F%AF%E8%B4%B4%E7%B2%98%EF%BC%81',
|
||||||
|
smallwindowsOpen:'%E5%B0%8F%E7%AA%97%E5%8F%A3%E5%8A%9F%E8%83%BD%E5%B7%B2%E5%BC%80%E5%90%AF',
|
||||||
|
smallwindowsClose:'%E5%B0%8F%E7%AA%97%E5%8F%A3%E5%8A%9F%E8%83%BD%E5%B7%B2%E5%85%B3%E9%97%AD',
|
||||||
|
screenshotStart:'%E6%88%AA%E5%9B%BE%E4%B8%AD%EF%BC%8C%E8%AF%B7%E7%A8%8D%E5%80%99...',
|
||||||
|
screenshotClose:'%E6%88%AA%E5%9B%BE%E5%8A%9F%E8%83%BD%E5%B7%B2%E5%85%B3%E9%97%AD',
|
||||||
|
loopOpen:'%E5%BE%AA%E7%8E%AF%E6%92%AD%E6%94%BE',
|
||||||
|
loopClose:'%E5%B7%B2%E5%85%B3%E9%97%AD%E5%BE%AA%E7%8E%AF%E6%92%AD%E6%94%BE',
|
||||||
|
close:'%E5%85%B3%E9%97%AD',
|
||||||
|
down:'%E4%B8%8B%E8%BD%BD',
|
||||||
|
p50:'50%25',
|
||||||
|
p75:'75%25',
|
||||||
|
p100:'100%25',
|
||||||
|
timeScheduleAdjust:{
|
||||||
|
prohibit:'%E8%A7%86%E9%A2%91%E7%A6%81%E6%AD%A2%E6%8B%96%E5%8A%A8',
|
||||||
|
prohibitBackOff:'%E8%A7%86%E9%A2%91%E7%A6%81%E6%AD%A2%E9%87%8D%E5%A4%8D%E8%A7%82%E7%9C%8B',
|
||||||
|
prohibitForward:'%E8%A7%86%E9%A2%91%E7%A6%81%E6%AD%A2%E5%BF%AB%E8%BF%9B',
|
||||||
|
prohibitLookBack:'%E8%A7%86%E9%A2%91%E7%A6%81%E6%AD%A2%E6%92%AD%E6%94%BE%E9%83%A8%E5%88%86%E5%86%85%E5%AE%B9',
|
||||||
|
prohibitForwardNotViewed:'%E8%A7%86%E9%A2%91%E7%A6%81%E6%AD%A2%E6%92%AD%E6%94%BE%E6%9C%AA%E8%A7%82%E7%9C%8B%E7%9A%84%E9%83%A8%E5%88%86'
|
||||||
|
},
|
||||||
|
error:{
|
||||||
|
noMessage:'%E6%9C%AA%E7%9F%A5%E9%94%99%E8%AF%AF',
|
||||||
|
supportVideoError:'%E8%AF%A5%E6%B5%8F%E8%A7%88%E5%99%A8%E7%89%88%E6%9C%AC%E5%A4%AA%E4%BD%8E%EF%BC%8C%E5%BB%BA%E8%AE%AE%E6%9B%B4%E6%8D%A2%E6%88%90%E5%85%B6%E5%AE%83%E6%B5%8F%E8%A7%88%E5%99%A8',
|
||||||
|
videoTypeError:'%E8%AF%A5%E6%B5%8F%E8%A7%88%E5%99%A8%E4%B8%8D%E6%94%AF%E6%8C%81%E6%92%AD%E6%94%BE%E8%AF%A5%E8%A7%86%E9%A2%91%EF%BC%8C%E5%BB%BA%E8%AE%AE%E6%9B%B4%E6%8D%A2%E6%88%90%E5%85%B6%E5%AE%83%E6%B5%8F%E8%A7%88%E5%99%A8',
|
||||||
|
loadingFailed:'%E5%8A%A0%E8%BD%BD%E5%A4%B1%E8%B4%A5',
|
||||||
|
emptied:'%E8%A7%86%E9%A2%91%E6%96%87%E4%BB%B6%E5%8A%A0%E8%BD%BD%E8%BF%87%E7%A8%8B%E4%B8%AD%E5%87%BA%E7%8E%B0%E9%94%99%E8%AF%AF',
|
||||||
|
screenshot:'%E8%A7%86%E9%A2%91%E6%88%AA%E5%9B%BE%E5%A4%B1%E8%B4%A5',
|
||||||
|
ajax:'Ajax%E6%95%B0%E6%8D%AE%E8%AF%B7%E6%B1%82%E9%94%99%E8%AF%AF',
|
||||||
|
noVideoContainer:'%E6%9C%AA%E6%89%BE%E5%88%B0%E6%94%BE%E7%BD%AE%E8%A7%86%E9%A2%91%E7%9A%84%E5%AE%B9%E5%99%A8'
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
export { language };
|
||||||
@@ -0,0 +1,64 @@
|
|||||||
|
import { isUndefined } from './type.js';
|
||||||
|
|
||||||
|
/*
|
||||||
|
* cookie
|
||||||
|
* 功能,操作cookie
|
||||||
|
*/
|
||||||
|
function cookie(name,value,domain,path){
|
||||||
|
if(isUndefined(domain)){
|
||||||
|
domain='';
|
||||||
|
}
|
||||||
|
if(isUndefined(path)){
|
||||||
|
path='/';
|
||||||
|
}
|
||||||
|
var ckStr=';domain='+domain+';path='+path;
|
||||||
|
if(location.protocol=='https'){
|
||||||
|
ckStr+=';SameSite=None;Secure=true';
|
||||||
|
}
|
||||||
|
var set=function(name,value){
|
||||||
|
var time = 360*24*60*60*1000;
|
||||||
|
var exp = new Date();
|
||||||
|
exp.setTime(exp.getTime() + time);
|
||||||
|
try{
|
||||||
|
document.cookie = name + '='+ escape (value) + ';expires=' + exp.toGMTString()+ckStr;
|
||||||
|
}
|
||||||
|
catch(event){console.error(event)}
|
||||||
|
},
|
||||||
|
get=function(name){
|
||||||
|
var arr,reg=new RegExp('(^| )'+name+'=([^;]*)(;|$)');
|
||||||
|
if(arr=document.cookie.match(reg)){
|
||||||
|
return unescape(arr[2]);
|
||||||
|
}
|
||||||
|
else{
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
},
|
||||||
|
del=function(name){
|
||||||
|
var exp = new Date();
|
||||||
|
exp.setTime(exp.getTime() - 1);
|
||||||
|
var cval=get(name);
|
||||||
|
if(cval!=null){
|
||||||
|
document.cookie= name + '='+cval+';expires='+exp.toGMTString()+ckStr;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
if(!isUndefined(name) && !isUndefined(value)){
|
||||||
|
if(value=='delete'){
|
||||||
|
del(name);
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
else{
|
||||||
|
set(name,value);
|
||||||
|
return get(name);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
else if(!isUndefined(name) && isUndefined(value)){
|
||||||
|
return get(name);
|
||||||
|
}
|
||||||
|
else if(!isUndefined(name)){
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
export { cookie };
|
||||||
@@ -0,0 +1,220 @@
|
|||||||
|
import { valType, isUndefined } from './type.js';
|
||||||
|
|
||||||
|
/*
|
||||||
|
* documentReady
|
||||||
|
* 功能:判断页面加载完成
|
||||||
|
* @fn:页面加载完成后执行的函数
|
||||||
|
*/
|
||||||
|
function documentReady(fn) {
|
||||||
|
var isReady = false;
|
||||||
|
var timer = null;
|
||||||
|
var doReady = function() {
|
||||||
|
if(timer) clearInterval(timer);
|
||||||
|
if(isReady) return;
|
||||||
|
isReady = true;
|
||||||
|
if(valType(fn) == 'function') {
|
||||||
|
fn();
|
||||||
|
}
|
||||||
|
};
|
||||||
|
var bodyLoad = function() {
|
||||||
|
timer = setInterval(function() {
|
||||||
|
try {
|
||||||
|
if(!isUndefined(document.readyState) && document.readyState == 'complete') {
|
||||||
|
doReady();
|
||||||
|
}
|
||||||
|
} catch(event) {};
|
||||||
|
}, 10);
|
||||||
|
};
|
||||||
|
var w3c = function() {
|
||||||
|
|
||||||
|
if(valType(fn) == 'function') {
|
||||||
|
fn();
|
||||||
|
}
|
||||||
|
removeListener(window, 'load', w3c);
|
||||||
|
};
|
||||||
|
if(!isUndefined(document.body)){
|
||||||
|
if(valType(fn) == 'function') {
|
||||||
|
fn();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else{
|
||||||
|
try {
|
||||||
|
addListener(window, 'load', w3c);
|
||||||
|
} catch(event) {
|
||||||
|
bodyLoad();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* checkJs
|
||||||
|
* 功能:判断js是否已加载
|
||||||
|
* @file:js文件路径
|
||||||
|
*/
|
||||||
|
function checkJs(file) {
|
||||||
|
var scriptList = document.scripts;
|
||||||
|
for (var i = 0; i < scriptList.length; i++) {
|
||||||
|
if(scriptList[i].src==file){
|
||||||
|
return scriptList[i];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* getMaxZIndex
|
||||||
|
* 功能:获取当前页面最大深度
|
||||||
|
*/
|
||||||
|
function getMaxZIndex() {
|
||||||
|
var arr = document.all || document.querySelectorAll('*');
|
||||||
|
var maxZ = -1;
|
||||||
|
for (var i = 0; i < arr.length; i++) {
|
||||||
|
var temp = null;
|
||||||
|
try {
|
||||||
|
temp = window.getComputedStyle(arr[i], null).zIndex;
|
||||||
|
} catch (event) {
|
||||||
|
if (arr[i].style) {
|
||||||
|
temp = arr[i].style.zIndex;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (temp != 'auto' && parseInt(temp) > maxZ) {
|
||||||
|
maxZ = parseInt(temp);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return maxZ;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* getWindowSize
|
||||||
|
* 功能:获取window的宽和高
|
||||||
|
*/
|
||||||
|
function getWindowSize() {
|
||||||
|
return {
|
||||||
|
width: window.innerWidth,
|
||||||
|
height: window.innerHeight
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* prev
|
||||||
|
* 功能:获取指定节点前一个同胞节点
|
||||||
|
* @ele:要获取的节点
|
||||||
|
*/
|
||||||
|
function prev(ele) {
|
||||||
|
var e = ele.previousSibling;
|
||||||
|
if (e == null) { //测试同胞节点是否存在,否则返回空
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
if (e.nodeType == 3) { //如果同胞节点为文本节点
|
||||||
|
var t = prev(e);
|
||||||
|
if (t && t.nodeType == 1) {
|
||||||
|
return t;
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
if (e.nodeType == 1) { //确认节点为节点节点才返回
|
||||||
|
return e;
|
||||||
|
} else {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* next
|
||||||
|
* 功能:获取指定节点下一个同胞节点
|
||||||
|
* @ele:要获取的节点
|
||||||
|
*/
|
||||||
|
function next(ele) {
|
||||||
|
var e = ele.nextSibling;
|
||||||
|
if (e == null) { //测试同胞节点是否存在,否则返回空
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
if (e.nodeType == 3) { //如果同胞节点为文本节点
|
||||||
|
var t = next(e);
|
||||||
|
if (t && t.nodeType == 1) {
|
||||||
|
return t;
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
if (e.nodeType == 1) { //确认节点为节点才返回
|
||||||
|
return e;
|
||||||
|
} else {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* addListener
|
||||||
|
* 功能:事件监听
|
||||||
|
* @ele:监听对象,@e:事件名称,@f:返回事件函数
|
||||||
|
*/
|
||||||
|
function addListener(ele, e, f, t) {
|
||||||
|
if (isUndefined(t)) {
|
||||||
|
t = false;
|
||||||
|
}
|
||||||
|
if (ele.addEventListener) {
|
||||||
|
try {
|
||||||
|
ele.addEventListener(e, f, t);
|
||||||
|
} catch (event) {}
|
||||||
|
} else if (ele.attachEvent) {
|
||||||
|
try {
|
||||||
|
ele.attachEvent('on' + e, f);
|
||||||
|
} catch (event) {}
|
||||||
|
} else {
|
||||||
|
ele['on' + e] = f;
|
||||||
|
}
|
||||||
|
if(isUndefined(ele.listenerList)){
|
||||||
|
ele.listenerList=[];
|
||||||
|
}
|
||||||
|
ele.listenerList.push([e,f]);
|
||||||
|
return ele;
|
||||||
|
};
|
||||||
|
|
||||||
|
/*
|
||||||
|
* removeListener
|
||||||
|
* 功能:删除事件监听
|
||||||
|
* @ele:监听对象,@e:事件名称,@f:返回事件函数
|
||||||
|
*/
|
||||||
|
function removeListener(ele, e, f, t) {
|
||||||
|
if (isUndefined(t)) {
|
||||||
|
t = false;
|
||||||
|
}
|
||||||
|
if (ele.removeEventListener) {
|
||||||
|
try {
|
||||||
|
ele.removeEventListener(e, f, t);
|
||||||
|
} catch (e) {}
|
||||||
|
} else if (ele.detachEvent) {
|
||||||
|
try {
|
||||||
|
ele.detachEvent('on' + e, f);
|
||||||
|
} catch (e) {}
|
||||||
|
} else {
|
||||||
|
ele['on' + e] = null;
|
||||||
|
}
|
||||||
|
if(!isUndefined(ele.listenerList)){
|
||||||
|
var temp=[];
|
||||||
|
for(var i=0;i<ele.listenerList.length;i++){
|
||||||
|
if(ele.listenerList[i][0]!=e || ele.listenerList[i][1]!=f){
|
||||||
|
temp.push(ele.listenerList[i]);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
ele.listenerList=temp;
|
||||||
|
}
|
||||||
|
return ele;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* documentHidden
|
||||||
|
* 功能,监听页面切换到其它标签,执行fn函数
|
||||||
|
*/
|
||||||
|
function documentHidden(fn){
|
||||||
|
if(!isUndefined(document.visibilityState)){
|
||||||
|
fn(document.visibilityState === 'visible'?'show':'hidden');
|
||||||
|
addListener(document,'visibilitychange',function(){
|
||||||
|
fn(document.visibilityState === 'visible'?'show':'hidden');
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
export { prev, next, addListener, removeListener, getMaxZIndex, getWindowSize, documentReady, documentHidden, checkJs };
|
||||||
@@ -0,0 +1,260 @@
|
|||||||
|
import { isUndefined, valType } from './type.js';
|
||||||
|
|
||||||
|
/*
|
||||||
|
* formatSeconds
|
||||||
|
* 功能:將秒转化成时分秒
|
||||||
|
*/
|
||||||
|
function formatSeconds(val) {
|
||||||
|
if(isUndefined(val)) val=0;
|
||||||
|
var result = parseInt(val);
|
||||||
|
if(isUndefined(result)) result=0;
|
||||||
|
if(result<0) result=0;
|
||||||
|
var h = Math.floor(result / 3600) < 10 ? '0' + Math.floor(result / 3600) : Math.floor(result / 3600),
|
||||||
|
m = Math.floor((result / 60 % 60)) < 10 ? '0' + Math.floor((result / 60 % 60)) : Math.floor((result / 60 % 60)),
|
||||||
|
s = Math.floor((result % 60)) < 10 ? '0' + Math.floor((result % 60)) : Math.floor((result % 60)),
|
||||||
|
res = '';
|
||||||
|
if(h !== '00') res += h+':';
|
||||||
|
res += m+':'+s;
|
||||||
|
return res;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* date
|
||||||
|
* 功能:格式化的时间字符串
|
||||||
|
*/
|
||||||
|
function date(format, timestamp) {
|
||||||
|
if(isUndefined(timestamp)){
|
||||||
|
timestamp=new Date();
|
||||||
|
}
|
||||||
|
if(timestamp.toString().length<13) timestamp=timestamp*1000;
|
||||||
|
var a, jsdate = ((timestamp) ? new Date(timestamp) : new Date());
|
||||||
|
var pad = function(n, c) {
|
||||||
|
if((n = n + '').length < c) {
|
||||||
|
return new Array(++c - n.length).join('0') + n;
|
||||||
|
} else {
|
||||||
|
return n;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
var txt_weekdays = ['Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday'];
|
||||||
|
var txt_ordin = {
|
||||||
|
1: 'st',
|
||||||
|
2: 'nd',
|
||||||
|
3: 'rd',
|
||||||
|
21: 'st',
|
||||||
|
22: 'nd',
|
||||||
|
23: 'rd',
|
||||||
|
31: 'st'
|
||||||
|
};
|
||||||
|
var txt_months = ['', 'January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December'];
|
||||||
|
var f = {
|
||||||
|
// Day
|
||||||
|
d: function() {
|
||||||
|
return pad(f.j(), 2)
|
||||||
|
},
|
||||||
|
D: function() {
|
||||||
|
return f.l().substr(0, 3)
|
||||||
|
},
|
||||||
|
j: function() {
|
||||||
|
return jsdate.getDate()
|
||||||
|
},
|
||||||
|
l: function() {
|
||||||
|
return txt_weekdays[f.w()]
|
||||||
|
},
|
||||||
|
N: function() {
|
||||||
|
return f.w() + 1
|
||||||
|
},
|
||||||
|
S: function() {
|
||||||
|
return txt_ordin[f.j()] ? txt_ordin[f.j()] : 'th'
|
||||||
|
},
|
||||||
|
w: function() {
|
||||||
|
return jsdate.getDay()
|
||||||
|
},
|
||||||
|
z: function() {
|
||||||
|
return(jsdate - new Date(jsdate.getFullYear() + '/1/1')) / 864e5 >> 0
|
||||||
|
},
|
||||||
|
|
||||||
|
// Week
|
||||||
|
W: function() {
|
||||||
|
var a = f.z(),
|
||||||
|
b = 364 + f.L() - a;
|
||||||
|
var nd2, nd = (new Date(jsdate.getFullYear() + '/1/1').getDay() || 7) - 1;
|
||||||
|
if(b <= 2 && ((jsdate.getDay() || 7) - 1) <= 2 - b) {
|
||||||
|
return 1;
|
||||||
|
} else {
|
||||||
|
if(a <= 2 && nd >= 4 && a >= (6 - nd)) {
|
||||||
|
nd2 = new Date(jsdate.getFullYear() - 1 + '/12/31');
|
||||||
|
return date('W', Math.round(nd2.getTime() / 1000));
|
||||||
|
} else {
|
||||||
|
return(1 + (nd <= 3 ? ((a + nd) / 7) : (a - (7 - nd)) / 7) >> 0);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
|
||||||
|
// Month
|
||||||
|
F: function() {
|
||||||
|
return txt_months[f.n()]
|
||||||
|
},
|
||||||
|
m: function() {
|
||||||
|
return pad(f.n(), 2)
|
||||||
|
},
|
||||||
|
M: function() {
|
||||||
|
return f.F().substr(0, 3)
|
||||||
|
},
|
||||||
|
n: function() {
|
||||||
|
return jsdate.getMonth() + 1
|
||||||
|
},
|
||||||
|
t: function() {
|
||||||
|
var n;
|
||||||
|
if((n = jsdate.getMonth() + 1) == 2) {
|
||||||
|
return 28 + f.L();
|
||||||
|
} else {
|
||||||
|
if(n & 1 && n < 8 || !(n & 1) && n > 7) {
|
||||||
|
return 31;
|
||||||
|
} else {
|
||||||
|
return 30;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
|
||||||
|
// Year
|
||||||
|
L: function() {
|
||||||
|
var y = f.Y();
|
||||||
|
return(!(y & 3) && (y % 1e2 || !(y % 4e2))) ? 1 : 0
|
||||||
|
},
|
||||||
|
//o not supported yet
|
||||||
|
Y: function() {
|
||||||
|
return jsdate.getFullYear()
|
||||||
|
},
|
||||||
|
y: function() {
|
||||||
|
return(jsdate.getFullYear() + '').slice(2)
|
||||||
|
},
|
||||||
|
|
||||||
|
// Time
|
||||||
|
a: function() {
|
||||||
|
return jsdate.getHours() > 11 ? 'pm' : 'am'
|
||||||
|
},
|
||||||
|
A: function() {
|
||||||
|
return f.a().toUpperCase()
|
||||||
|
},
|
||||||
|
B: function() {
|
||||||
|
// peter paul koch:
|
||||||
|
var off = (jsdate.getTimezoneOffset() + 60) * 60;
|
||||||
|
var theSeconds = (jsdate.getHours() * 3600) + (jsdate.getMinutes() * 60) + jsdate.getSeconds() + off;
|
||||||
|
var beat = Math.floor(theSeconds / 86.4);
|
||||||
|
if(beat > 1000) beat -= 1000;
|
||||||
|
if(beat < 0) beat += 1000;
|
||||||
|
if((String(beat)).length == 1) beat = '00' + beat;
|
||||||
|
if((String(beat)).length == 2) beat = '0' + beat;
|
||||||
|
return beat;
|
||||||
|
},
|
||||||
|
g: function() {
|
||||||
|
return jsdate.getHours() % 12 || 12
|
||||||
|
},
|
||||||
|
G: function() {
|
||||||
|
return jsdate.getHours()
|
||||||
|
},
|
||||||
|
h: function() {
|
||||||
|
return pad(f.g(), 2)
|
||||||
|
},
|
||||||
|
H: function() {
|
||||||
|
return pad(jsdate.getHours(), 2)
|
||||||
|
},
|
||||||
|
i: function() {
|
||||||
|
return pad(jsdate.getMinutes(), 2)
|
||||||
|
},
|
||||||
|
s: function() {
|
||||||
|
return pad(jsdate.getSeconds(), 2)
|
||||||
|
},
|
||||||
|
//u not supported yet
|
||||||
|
|
||||||
|
// Timezone
|
||||||
|
//e not supported yet
|
||||||
|
//I not supported yet
|
||||||
|
O: function() {
|
||||||
|
var t = pad(Math.abs(jsdate.getTimezoneOffset() / 60 * 100), 4);
|
||||||
|
if(jsdate.getTimezoneOffset() > 0) t = '-' + t;
|
||||||
|
else t = '+' + t;
|
||||||
|
return t;
|
||||||
|
},
|
||||||
|
P: function() {
|
||||||
|
var O = f.O();
|
||||||
|
return(O.substr(0, 3) + ':' + O.substr(3, 2))
|
||||||
|
},
|
||||||
|
//T not supported yet
|
||||||
|
//Z not supported yet
|
||||||
|
|
||||||
|
// Full Date/Time
|
||||||
|
c: function() {
|
||||||
|
return f.Y() + '-' + f.m() + '-' + f.d() + 'T' + f.h() + ':' + f.i() + ':' + f.s() + f.P()
|
||||||
|
},
|
||||||
|
//r not supported yet
|
||||||
|
U: function() {
|
||||||
|
return Math.round(jsdate.getTime() / 1000)
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
return format.replace(/([a-zA-Z])/g,function(t, s) {
|
||||||
|
var ret='';
|
||||||
|
if(t != s) {
|
||||||
|
// escaped
|
||||||
|
ret = s;
|
||||||
|
} else if(f[s]) {
|
||||||
|
// a date function exists
|
||||||
|
ret = f[s]();
|
||||||
|
} else {
|
||||||
|
// nothing special
|
||||||
|
ret = s;
|
||||||
|
}
|
||||||
|
return ret;
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* arrayToString
|
||||||
|
* 功能,二维数组传化成字符串
|
||||||
|
*/
|
||||||
|
function arrayToString(arr) {
|
||||||
|
var str='';
|
||||||
|
if(!isUndefined(arr)){
|
||||||
|
for(var i=0;i<arr.length;i++){
|
||||||
|
var temp=arr[i];
|
||||||
|
if(i>0){
|
||||||
|
str+=',';
|
||||||
|
}
|
||||||
|
for(var y=0;y<temp.length;y++){
|
||||||
|
if(y>0){
|
||||||
|
str+=';';
|
||||||
|
}
|
||||||
|
if(valType(temp[y])=='number'){
|
||||||
|
str+=parseInt(temp[y]*100);
|
||||||
|
}
|
||||||
|
else{
|
||||||
|
str+=temp[y];
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return str;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* stringToArray
|
||||||
|
* 功能,字符串转化成二维数组
|
||||||
|
*/
|
||||||
|
function stringToArray(str) {
|
||||||
|
var newArr=[];
|
||||||
|
if(!isUndefined(str)){
|
||||||
|
var arr=str.split(',');
|
||||||
|
for(var i=0;i<arr.length;i++){
|
||||||
|
var temp=arr[i].split(';');
|
||||||
|
temp[1]=parseInt(temp[1])*0.01;
|
||||||
|
temp[2]=parseInt(temp[2])*0.01;
|
||||||
|
newArr.push(temp);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return newArr;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
export { formatSeconds, date, arrayToString, stringToArray };
|
||||||
@@ -0,0 +1,186 @@
|
|||||||
|
import { standardization, isUndefined, valType } from './type.js';
|
||||||
|
import { addListener } from './dom.js';
|
||||||
|
|
||||||
|
/*
|
||||||
|
* ajax
|
||||||
|
* 功能:ajax功能
|
||||||
|
* @cObj:传递的参数,包含请求地址,请求类型,编码等
|
||||||
|
*/
|
||||||
|
function ajax(cObj) {
|
||||||
|
var callback = null;
|
||||||
|
var obj = {
|
||||||
|
method: 'get',//请求类型
|
||||||
|
dataType: 'json',//请求的数据类型
|
||||||
|
charset: 'utf-8',
|
||||||
|
async: true,//true表示异步,false表示同步
|
||||||
|
url: '',
|
||||||
|
data: null,
|
||||||
|
success: null,
|
||||||
|
error:null
|
||||||
|
};
|
||||||
|
obj = standardization(obj, cObj);
|
||||||
|
if (isUndefined(obj['url'])) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
/*
|
||||||
|
* errorFun
|
||||||
|
*功能:执行error
|
||||||
|
*/
|
||||||
|
var errorFun=function(info){
|
||||||
|
if(!isUndefined(obj['error']) && valType(obj['error'])=='function'){
|
||||||
|
obj['error'](info);
|
||||||
|
}
|
||||||
|
else{
|
||||||
|
obj['success'](null);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
/*
|
||||||
|
* successFun
|
||||||
|
*功能:执行success
|
||||||
|
*/
|
||||||
|
var successFun=function(success){
|
||||||
|
if(!isUndefined(obj['success']) && valType(obj['success'])=='function'){
|
||||||
|
obj['success'](success);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
/*
|
||||||
|
* createXHR
|
||||||
|
*功能:用来为ajax函数提供支持
|
||||||
|
*/
|
||||||
|
var createXHR=function() {
|
||||||
|
if (window.XMLHttpRequest) {
|
||||||
|
return new XMLHttpRequest();
|
||||||
|
} else if (window.ActiveXObject) {
|
||||||
|
try {
|
||||||
|
return new ActiveXObject('Microsoft.XMLHTTP');
|
||||||
|
} catch(event) {
|
||||||
|
try {
|
||||||
|
return new ActiveXObject('Msxml2.XMLHTTP');
|
||||||
|
} catch(event) {}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
};
|
||||||
|
/*
|
||||||
|
* formatParams
|
||||||
|
* 功能:将对象转成地址字符串,为ajax函数提供支持
|
||||||
|
* @obj:传递一个对象
|
||||||
|
*/
|
||||||
|
var formatParams=function(obj) {
|
||||||
|
var arr = [];
|
||||||
|
for (var key in obj) {
|
||||||
|
arr.push(encodeURIComponent(key) + '=' + encodeURIComponent(obj[key]));
|
||||||
|
}
|
||||||
|
return arr.join('&');
|
||||||
|
};
|
||||||
|
if (valType(cObj) != 'object') {
|
||||||
|
if(!isUndefined(obj['error'])){
|
||||||
|
obj.error(event);
|
||||||
|
}
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (obj.dataType === 'json' || obj.dataType === 'text' || obj.dataType === 'html' || obj.dataType === 'xml') {
|
||||||
|
var xhr = createXHR();
|
||||||
|
callback = function() {
|
||||||
|
//判断http的交互是否成功
|
||||||
|
if (xhr.status === 200) {
|
||||||
|
if (obj.dataType === 'json') {
|
||||||
|
try {
|
||||||
|
successFun(eval('(' + xhr.responseText + ')')); //回调传递参数
|
||||||
|
}
|
||||||
|
catch(event) {
|
||||||
|
successFun(null);
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
successFun(xhr.responseText); //回调传递参数
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
errorFun({code:xhr.status,message:xhr.statusText});
|
||||||
|
}
|
||||||
|
};
|
||||||
|
obj.data = formatParams(obj.data); //通过params()将名值对转换成字符串
|
||||||
|
if (obj.method === 'get' && !isUndefined(obj.data)) {
|
||||||
|
if (obj.data != '') {
|
||||||
|
if (obj.url.indexOf('?') == -1) {
|
||||||
|
obj.url += '?' + obj.data
|
||||||
|
} else {
|
||||||
|
obj.url += '&' + obj.data;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (obj.async === true) { //true表示异步,false表示同步
|
||||||
|
addListener(xhr,'readystatechange',function(event){
|
||||||
|
if (this.readyState === 4 && callback != null) { //判断对象的状态是否交互完成
|
||||||
|
callback(); //回调
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
xhr.open(obj.method, obj.url, obj.async);
|
||||||
|
if (obj.method === 'post') {
|
||||||
|
try{
|
||||||
|
xhr.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
|
||||||
|
xhr.setRequestHeader('charset', obj['charset']);
|
||||||
|
xhr.send(obj.data);
|
||||||
|
}
|
||||||
|
catch(event){
|
||||||
|
callback();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
try{
|
||||||
|
xhr.send(null); //get方式则填null
|
||||||
|
}
|
||||||
|
catch(event){
|
||||||
|
callback();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (obj.async === false) { //同步
|
||||||
|
callback();
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
else if (obj.dataType === 'jsonp') {
|
||||||
|
var oHead = document.getElementsByTagName('head')[0];
|
||||||
|
var oScript = document.createElement('script');
|
||||||
|
var callbackName = 'callback' + new Date().getTime();
|
||||||
|
var params = formatParams(obj.data) + '&callback=' + callbackName; //按时间戳拼接字符串
|
||||||
|
//拼接好src
|
||||||
|
oScript.src = obj.url.split('?') + '?' + params;
|
||||||
|
//插入script标签
|
||||||
|
oHead.insertBefore(oScript, oHead.firstChild);
|
||||||
|
//jsonp的回调函数
|
||||||
|
window[callbackName] = function(json) {
|
||||||
|
if(!isUndefined(obj['success']) && valType(obj['success'])==='function'){
|
||||||
|
obj['success'](json);
|
||||||
|
}
|
||||||
|
oHead.removeChild(oScript);
|
||||||
|
};
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* dataURLtoBlob
|
||||||
|
* 功能,base64转blob
|
||||||
|
*/
|
||||||
|
function dataURLtoBlob(dataurl) {
|
||||||
|
var arr = dataurl.split(','), mime = arr[0].match(/:(.*?);/)[1],bstr = atob(arr[1]), n = bstr.length, u8arr = new Uint8Array(n);
|
||||||
|
while (n--) {
|
||||||
|
u8arr[n] = bstr.charCodeAt(n);
|
||||||
|
}
|
||||||
|
return new Blob([u8arr], { type: mime });
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* getApp
|
||||||
|
* 功能,获取平台类型是否是iphone
|
||||||
|
*/
|
||||||
|
function getApp(){
|
||||||
|
var u = navigator.userAgent.toLowerCase();
|
||||||
|
if(u.indexOf('iphone')>-1){
|
||||||
|
return 'iphone';
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
export { ajax, dataURLtoBlob, getApp };
|
||||||
@@ -0,0 +1,26 @@
|
|||||||
|
import { isUndefined } from './type.js';
|
||||||
|
|
||||||
|
/*
|
||||||
|
* getPath
|
||||||
|
* 功能:获取该js文件所在路径
|
||||||
|
*/
|
||||||
|
function getPath(siz) {
|
||||||
|
var scriptList = document.scripts,
|
||||||
|
thisPath = scriptList[scriptList.length - 1].src;
|
||||||
|
for (var i = 0; i < scriptList.length; i++) {
|
||||||
|
var scriptName = scriptList[i].getAttribute('name') || scriptList[i].getAttribute('data-name');
|
||||||
|
var src = scriptList[i].src.slice(scriptList[i].src.lastIndexOf('/') + 1, scriptList[i].src.lastIndexOf('.'));
|
||||||
|
if ((scriptName && (scriptName == 'moeplayer' || scriptName == 'moeplayer.min')) || (scriptList[i].src && (src == 'moeplayer' || src == 'moeplayer.min'))) {
|
||||||
|
thisPath = scriptList[i].src;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
var path=thisPath.substring(0, thisPath.lastIndexOf('/js/') + 1);
|
||||||
|
if(!isUndefined(siz)){
|
||||||
|
path+=siz+'/';
|
||||||
|
}
|
||||||
|
return path;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
export { getPath };
|
||||||
@@ -0,0 +1,99 @@
|
|||||||
|
/*
|
||||||
|
* standardization
|
||||||
|
* 功能:将对象Object标准化,将n对象替换进o对象
|
||||||
|
* @o:标准化对象,@n:外部传递对象
|
||||||
|
*/
|
||||||
|
function standardization(o, n) { //n替换进o
|
||||||
|
var h = {};
|
||||||
|
var k;
|
||||||
|
for (k in o) {
|
||||||
|
h[k] = o[k];
|
||||||
|
}
|
||||||
|
for (k in n) {
|
||||||
|
if(k in h){
|
||||||
|
h[k] = n[k];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return h;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* mergeObj
|
||||||
|
* 功能:将新对象合并到原对象中,需要确保原对像里有对应的值并且类型一样
|
||||||
|
* @o:原对象,@n:新对象
|
||||||
|
*/
|
||||||
|
function mergeObj(o,n){
|
||||||
|
var h = {};
|
||||||
|
var k;
|
||||||
|
for (k in o) {
|
||||||
|
h[k] = o[k];
|
||||||
|
}
|
||||||
|
for (k in n) {
|
||||||
|
if(k in h){
|
||||||
|
switch(valType(h[k])){
|
||||||
|
case 'object':
|
||||||
|
if(valType(n[k])=='object'){
|
||||||
|
h[k] = mergeObj(h[k],n[k]);
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
if(valType(h[k])==valType(n[k])){
|
||||||
|
h[k] = n[k];
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return h;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* valType
|
||||||
|
* 功能:判断变量类型
|
||||||
|
*/
|
||||||
|
function valType(val) {
|
||||||
|
if(typeof val==='undefined') return 'undefined';
|
||||||
|
var str=Object.prototype.toString.call(val).split(' ')[1].replace(']','').toLowerCase();
|
||||||
|
if(str.substr(0,4)=='html' && (str.substr(-7)=='element' || str.substr(-8)=='document' || str=='window')){
|
||||||
|
str='htmlobject';
|
||||||
|
}
|
||||||
|
if(str=='htmlcollection' || str=='nodelist'){
|
||||||
|
str='htmlarray';
|
||||||
|
}
|
||||||
|
return str;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* isUndefined
|
||||||
|
* 功能:判断变量是否存在或值是否为undefined
|
||||||
|
*/
|
||||||
|
function isUndefined(val) {
|
||||||
|
try {
|
||||||
|
return valType(val)==='undefined' || val === undefined || val === null || (valType(val)==='number' && isNaN(val));
|
||||||
|
} catch (event) {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* decodeURIString
|
||||||
|
* 功能,解码中文
|
||||||
|
*/
|
||||||
|
function decodeURIString(obj){
|
||||||
|
for(var k in obj){
|
||||||
|
if(valType(obj[k])=='string' && obj[k]){
|
||||||
|
try{
|
||||||
|
obj[k]=decodeURI(obj[k]);
|
||||||
|
}
|
||||||
|
catch(event){}
|
||||||
|
}
|
||||||
|
if(valType(obj[k])=='object'){
|
||||||
|
obj[k]=decodeURIString(obj[k]);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return obj;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
export { standardization, mergeObj, valType, isUndefined, decodeURIString };
|
||||||
Reference in New Issue
Block a user