11128 changed files with 1407315 additions and 1431 deletions
@ -1,11 +0,0 @@ |
|||
# 页面标题 |
|||
VUE_APP_TITLE = 若依管理系统 |
|||
|
|||
# 开发环境配置 |
|||
ENV = 'development' |
|||
|
|||
# 若依管理系统/开发环境 |
|||
VUE_APP_BASE_API = '/dev-api' |
|||
|
|||
# 路由懒加载 |
|||
VUE_CLI_BABEL_TRANSPILE_MODULES = true |
@ -1,8 +0,0 @@ |
|||
# 页面标题 |
|||
VUE_APP_TITLE = 若依管理系统 |
|||
|
|||
# 生产环境配置 |
|||
ENV = 'production' |
|||
|
|||
# 若依管理系统/生产环境 |
|||
VUE_APP_BASE_API = '/prod-api' |
@ -1,28 +0,0 @@ |
|||
<template> |
|||
<div id="app"> |
|||
<router-view /> |
|||
<theme-picker /> |
|||
</div> |
|||
</template> |
|||
|
|||
<script> |
|||
import ThemePicker from "@/components/ThemePicker"; |
|||
|
|||
export default { |
|||
name: "App", |
|||
components: { ThemePicker }, |
|||
metaInfo() { |
|||
return { |
|||
title: this.$store.state.settings.dynamicTitle && this.$store.state.settings.title, |
|||
titleTemplate: title => { |
|||
return title ? `${title} - ${process.env.VUE_APP_TITLE}` : process.env.VUE_APP_TITLE |
|||
} |
|||
} |
|||
} |
|||
}; |
|||
</script> |
|||
<style scoped> |
|||
#app .theme-picker { |
|||
display: none; |
|||
} |
|||
</style> |
File diff suppressed because it is too large
@ -1,131 +0,0 @@ |
|||
'use strict' |
|||
const path = require('path') |
|||
|
|||
function resolve(dir) { |
|||
return path.join(__dirname, dir) |
|||
} |
|||
|
|||
const CompressionPlugin = require('compression-webpack-plugin') |
|||
|
|||
const name = process.env.VUE_APP_TITLE || '若依管理系统' // 网页标题
|
|||
|
|||
const port = process.env.port || process.env.npm_config_port || 80 // 端口
|
|||
|
|||
// vue.config.js 配置说明
|
|||
//官方vue.config.js 参考文档 https://cli.vuejs.org/zh/config/#css-loaderoptions
|
|||
// 这里只列一部分,具体配置参考文档
|
|||
module.exports = { |
|||
// 部署生产环境和开发环境下的URL。
|
|||
// 默认情况下,Vue CLI 会假设你的应用是被部署在一个域名的根路径上
|
|||
// 例如 https://www.acupuncture.vip/。如果应用被部署在一个子路径上,你就需要用这个选项指定这个子路径。例如,如果你的应用被部署在 https://www.acupuncture.vip/admin/,则设置 baseUrl 为 /admin/。
|
|||
publicPath: process.env.NODE_ENV === "production" ? "/" : "/", |
|||
// 在npm run build 或 yarn build 时 ,生成文件的目录名称(要和baseUrl的生产环境路径一致)(默认dist)
|
|||
outputDir: 'dist', |
|||
// 用于放置生成的静态资源 (js、css、img、fonts) 的;(项目打包之后,静态资源会放在这个文件夹下)
|
|||
assetsDir: 'static', |
|||
// 是否开启eslint保存检测,有效值:ture | false | 'error'
|
|||
lintOnSave: process.env.NODE_ENV === 'development', |
|||
// 如果你不需要生产环境的 source map,可以将其设置为 false 以加速生产环境构建。
|
|||
productionSourceMap: false, |
|||
transpileDependencies: ['quill'], |
|||
// webpack-dev-server 相关配置
|
|||
devServer: { |
|||
host: '0.0.0.0', |
|||
port: port, |
|||
open: true, |
|||
proxy: { |
|||
// detail: https://cli.vuejs.org/config/#devserver-proxy
|
|||
[process.env.VUE_APP_BASE_API]: { |
|||
target: `http://localhost:8080`, |
|||
changeOrigin: true, |
|||
pathRewrite: { |
|||
['^' + process.env.VUE_APP_BASE_API]: '' |
|||
} |
|||
} |
|||
}, |
|||
disableHostCheck: true |
|||
}, |
|||
css: { |
|||
loaderOptions: { |
|||
sass: { |
|||
sassOptions: { outputStyle: "expanded" } |
|||
} |
|||
} |
|||
}, |
|||
configureWebpack: { |
|||
name: name, |
|||
resolve: { |
|||
alias: { |
|||
'@': resolve('src') |
|||
} |
|||
}, |
|||
plugins: [ |
|||
// http://doc.acupuncture.vip/acupuncture-vue/other/faq.html#使用gzip解压缩静态文件
|
|||
new CompressionPlugin({ |
|||
cache: false, // 不启用文件缓存
|
|||
test: /\.(js|css|html|jpe?g|png|gif|svg)?$/i, // 压缩文件格式
|
|||
filename: '[path][base].gz[query]', // 压缩后的文件名
|
|||
algorithm: 'gzip', // 使用gzip压缩
|
|||
minRatio: 0.8, // 压缩比例,小于 80% 的文件不会被压缩
|
|||
deleteOriginalAssets: false // 压缩后删除原文件
|
|||
}) |
|||
], |
|||
}, |
|||
chainWebpack(config) { |
|||
config.plugins.delete('preload') // TODO: need test
|
|||
config.plugins.delete('prefetch') // TODO: need test
|
|||
|
|||
// set svg-sprite-loader
|
|||
config.module |
|||
.rule('svg') |
|||
.exclude.add(resolve('src/assets/icons')) |
|||
.end() |
|||
config.module |
|||
.rule('icons') |
|||
.test(/\.svg$/) |
|||
.include.add(resolve('src/assets/icons')) |
|||
.end() |
|||
.use('svg-sprite-loader') |
|||
.loader('svg-sprite-loader') |
|||
.options({ |
|||
symbolId: 'icon-[name]' |
|||
}) |
|||
.end() |
|||
|
|||
config.when(process.env.NODE_ENV !== 'development', config => { |
|||
config |
|||
.plugin('ScriptExtHtmlWebpackPlugin') |
|||
.after('html') |
|||
.use('script-ext-html-webpack-plugin', [{ |
|||
// `runtime` must same as runtimeChunk name. default is `runtime`
|
|||
inline: /runtime\..*\.js$/ |
|||
}]) |
|||
.end() |
|||
|
|||
config.optimization.splitChunks({ |
|||
chunks: 'all', |
|||
cacheGroups: { |
|||
libs: { |
|||
name: 'chunk-libs', |
|||
test: /[\\/]node_modules[\\/]/, |
|||
priority: 10, |
|||
chunks: 'initial' // only package third parties that are initially dependent
|
|||
}, |
|||
elementUI: { |
|||
name: 'chunk-elementUI', // split elementUI into a single package
|
|||
test: /[\\/]node_modules[\\/]_?element-ui(.*)/, // in order to adapt to cnpm
|
|||
priority: 20 // the weight needs to be larger than libs and app or it will be packaged into libs or app
|
|||
}, |
|||
commons: { |
|||
name: 'chunk-commons', |
|||
test: resolve('src/components'), // can customize your rules
|
|||
minChunks: 3, // minimum common number
|
|||
priority: 5, |
|||
reuseExistingChunk: true |
|||
} |
|||
} |
|||
}) |
|||
config.optimization.runtimeChunk('single') |
|||
}) |
|||
} |
|||
} |
@ -0,0 +1,2 @@ |
|||
unpackage/ |
|||
|
@ -0,0 +1,20 @@ |
|||
{ |
|||
// launch.json 配置了启动调试时相关设置,configurations下节点名称可为 app-plus/h5/mp-weixin/mp-baidu/mp-alipay/mp-qq/mp-toutiao/mp-360/ |
|||
// launchtype项可配置值为local或remote, local代表前端连本地云函数,remote代表前端连云端云函数 |
|||
"version" : "0.0", |
|||
"configurations" : [ |
|||
{ |
|||
"app-plus" : { |
|||
"launchtype" : "local" |
|||
}, |
|||
"default" : { |
|||
"launchtype" : "local" |
|||
}, |
|||
"type" : "uniCloud" |
|||
}, |
|||
{ |
|||
"playground" : "standard", |
|||
"type" : "uni-app:app-android" |
|||
} |
|||
] |
|||
} |
@ -0,0 +1,148 @@ |
|||
<script> |
|||
import { |
|||
mapState, |
|||
mapMutations |
|||
} from 'vuex'; |
|||
export default { |
|||
data() { |
|||
return { |
|||
isAudio: true, |
|||
}; |
|||
}, |
|||
methods: { |
|||
...mapMutations(['setTrainPath']), |
|||
}, |
|||
mounted() {}, |
|||
// 页面显示调用接口 |
|||
onLoad() {}, |
|||
onLaunch() {}, |
|||
}; |
|||
</script> |
|||
|
|||
<style lang="scss"> |
|||
/*每个页面公共css */ |
|||
@import '@/uni_modules/uview-ui/index.scss'; |
|||
@import 'common/demo.scss'; |
|||
uni-view, |
|||
p, |
|||
span { |
|||
font-size: 16px; |
|||
} |
|||
|
|||
.logo { |
|||
width: 500px; |
|||
position: fixed; |
|||
left: 16px; |
|||
top: 16px; |
|||
} |
|||
|
|||
// 状态颜色 |
|||
.statusGray { |
|||
color: #c0c4cc; |
|||
} |
|||
|
|||
.statusGreen { |
|||
color: #10b884; |
|||
} |
|||
|
|||
.statusRed { |
|||
color: red; |
|||
} |
|||
|
|||
.view-none { |
|||
width: 100%; |
|||
font-size: 16px !important; |
|||
line-height: 50px; |
|||
color: #909399; |
|||
text-align: center; |
|||
} |
|||
|
|||
/deep/.uni-pagination__num-tag { |
|||
width: 30px !important; |
|||
min-width: 30px !important; |
|||
height: 30px !important; |
|||
font-size: 16px !important; |
|||
} |
|||
|
|||
.width-60 { |
|||
min-width: 60px !important; |
|||
} |
|||
|
|||
.width-100 { |
|||
min-width: 100px !important; |
|||
} |
|||
|
|||
.width-160 { |
|||
min-width: 160px !important; |
|||
} |
|||
|
|||
.width-250 { |
|||
min-width: 250px !important; |
|||
} |
|||
|
|||
.uni-select__input-box, |
|||
.uni-select { |
|||
height: 40px !important; |
|||
} |
|||
|
|||
.uni-select { |
|||
font-size: 16px !important; |
|||
} |
|||
|
|||
.uni-select__input-placeholder { |
|||
font-size: 16px !important; |
|||
} |
|||
|
|||
.uni-input-input, |
|||
uni-input { |
|||
border-radius: 5px; |
|||
height: 38px !important; |
|||
font-size: 16px !important; |
|||
} |
|||
|
|||
uni-input { |
|||
padding: 0 10px; |
|||
} |
|||
|
|||
.uni-icons { |
|||
font-size: 24px !important; |
|||
} |
|||
|
|||
.u-popup__content { |
|||
background-color: rgba(0, 0, 0, 0) !important; |
|||
} |
|||
|
|||
.uni-input-placeholder { |
|||
font-size: 16px; |
|||
line-height: 40px; |
|||
} |
|||
|
|||
.u-input--square { |
|||
height: 28px !important; |
|||
padding: 6px 9px !important; |
|||
} |
|||
|
|||
.u-input__content__field-wrapper__field { |
|||
font-size: 16px !important; |
|||
} |
|||
|
|||
uni-video { |
|||
width: 100% !important; |
|||
height: 100% !important; |
|||
} |
|||
|
|||
.u-toast { |
|||
font-size: 30px !important; |
|||
} |
|||
|
|||
// 时间选择样式 |
|||
.u-picker { |
|||
background: #fff; |
|||
} |
|||
|
|||
.u-toolbar__wrapper__cancel, |
|||
.u-toolbar__wrapper__confirm, |
|||
.u-toolbar__title { |
|||
font-size: 26px !important; |
|||
} |
|||
</style> |
@ -0,0 +1,21 @@ |
|||
MIT License |
|||
|
|||
Copyright (c) 2023 www.uviewui.com |
|||
|
|||
Permission is hereby granted, free of charge, to any person obtaining a copy |
|||
of this software and associated documentation files (the "Software"), to deal |
|||
in the Software without restriction, including without limitation the rights |
|||
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell |
|||
copies of the Software, and to permit persons to whom the Software is |
|||
furnished to do so, subject to the following conditions: |
|||
|
|||
The above copyright notice and this permission notice shall be included in all |
|||
copies or substantial portions of the Software. |
|||
|
|||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR |
|||
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, |
|||
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE |
|||
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER |
|||
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, |
|||
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE |
|||
SOFTWARE. |
@ -0,0 +1,98 @@ |
|||
<p align="center"> |
|||
<img alt="logo" src="https://uviewui.com/common/logo.png" width="120" height="120" style="margin-bottom: 10px;"> |
|||
</p> |
|||
<h3 align="center" style="margin: 30px 0 30px;font-weight: bold;font-size:40px;">uView 2.0</h3> |
|||
<h3 align="center">多平台快速开发的UI框架</h3> |
|||
|
|||
[](https://github.com/umicro/uView2.0) |
|||
[](https://github.com/umicro/uView2.0) |
|||
[](https://github.com/umicro/uView2.0/issues) |
|||
[](https://uviewui.com) |
|||
[](https://gitee.com/umicro/uView2.0/releases) |
|||
[](https://en.wikipedia.org/wiki/MIT_License) |
|||
|
|||
## 说明 |
|||
|
|||
uView UI,是[uni-app](https://uniapp.dcloud.io/)全面兼容nvue的uni-app生态框架,全面的组件和便捷的工具会让您信手拈来,如鱼得水 |
|||
|
|||
## [官方文档:https://uviewui.com](https://uviewui.com) |
|||
|
|||
### 官方1群:1042987248(已满) |
|||
### 官方2群:249718512(已满) |
|||
### 官方3群:1129077272(已满) |
|||
### 官方4群:1084514613(已满) |
|||
### 官方5群:863820668(已满) |
|||
### 官方6群:745721078(已满) |
|||
### 官方7群:627867855(已满) |
|||
### 官方8群:496409492(已满) |
|||
### 官方9群:828504448(已满) |
|||
### 官方10群:232041042(已满) |
|||
### 官方11群:364463526(已满) |
|||
### 官方12群:229707069(已满) |
|||
### [点击加13群交流反馈:879811455](https://jq.qq.com/?_wv=1027&k=vz4By4k5) |
|||
|
|||
## 特性 |
|||
|
|||
- 全面兼容nvue,原生渲染,高性能 |
|||
- 兼容安卓,iOS,微信小程序,H5,QQ小程序,百度小程序,支付宝小程序,头条小程序 |
|||
- 60+精选组件,功能丰富,多端兼容,让您快速集成,开箱即用 |
|||
- 众多贴心的JS利器,让您飞镖在手,召之即来,百步穿杨 |
|||
- 众多的常用页面和布局,让您专注逻辑,事半功倍 |
|||
- 详尽的文档支持,现代化的演示效果 |
|||
- 按需引入,精简打包体积 |
|||
|
|||
|
|||
## 预览 |
|||
|
|||
您可以通过**微信**扫码,查看最佳的演示效果。 |
|||
<br> |
|||
<br> |
|||
<img src="https://uviewui.com/common/weixin_mini_qrcode.png" width="220" height="220" > |
|||
|
|||
|
|||
## 链接 |
|||
|
|||
- [官方文档](https://www.uviewui.com/) |
|||
- [更新日志](https://www.uviewui.com/components/changelog.html) |
|||
- [升级指南](https://www.uviewui.com/components/changeGuide.html) |
|||
- [关于我们](https://www.uviewui.com/cooperation/about.html) |
|||
|
|||
## 交流反馈 |
|||
|
|||
欢迎加入我们的QQ群交流反馈:[点此跳转](https://www.uviewui.com/components/addQQGroup.html) |
|||
|
|||
## 关于PR |
|||
|
|||
> 我们非常乐意接受各位的优质PR,但在此之前我希望您了解uView2.0是一个需要兼容多个平台的(小程序、h5、ios app、android app)包括nvue页面、vue页面。 |
|||
> 所以希望在您修复bug并提交之前尽可能的去这些平台测试一下兼容性。最好能携带测试截图以方便审核。非常感谢! |
|||
|
|||
## 安装 |
|||
|
|||
#### **uni-app插件市场链接** —— [https://ext.dcloud.net.cn/plugin?id=1593](https://ext.dcloud.net.cn/plugin?id=1593) |
|||
|
|||
请通过[官网安装文档](https://www.uviewui.com/components/install.html)了解更详细的内容 |
|||
|
|||
## 快速上手 |
|||
|
|||
请通过[快速上手](https://uviewui.com/components/quickstart.html)了解更详细的内容 |
|||
|
|||
## 使用方法 |
|||
配置easycom规则后,自动按需引入,无需`import`组件,直接引用即可。 |
|||
|
|||
```html |
|||
<template> |
|||
<u-button text="按钮"></u-button> |
|||
</template> |
|||
``` |
|||
|
|||
|
|||
## 捐赠uView的研发 |
|||
|
|||
uView文档内容和框架源码全部开源免费,如果您认为uView帮到了您的开发工作,您可以捐赠uView的研发工作,捐赠无门槛,哪怕是一杯可乐也好(相信这比打赏主播更有意义)。 |
|||
|
|||
<img src="https://uviewui.com/common/wechat.png" width="220" > |
|||
<img style="margin-left: 100px;" src="https://uviewui.com/common/alipay.png" width="220" > |
|||
|
|||
## 版权信息 |
|||
uView遵循[MIT](https://en.wikipedia.org/wiki/MIT_License)开源协议,意味着您无需支付任何费用,也无需授权,即可将uView应用到您的产品中。 |
|||
|
@ -0,0 +1,9 @@ |
|||
|
|||
// 会议列表
|
|||
export function queryMeeting(params){ |
|||
return uni.$u.http.post('/meeting/list', params) |
|||
} |
|||
// 会议详情
|
|||
export function meetingDetails(params){ |
|||
return uni.$u.http.post('/meeting/details', params) |
|||
} |
@ -0,0 +1,7 @@ |
|||
module.exports = { |
|||
// baseUrl: 'http://192.168.1.136:15001/'
|
|||
// baseUrl: 'http://116.204.98.79:40010/elderlyHealth/admin/', // 测试
|
|||
baseUrl: 'https://test.tall.wiki/datangMeeting/', // 生产
|
|||
versionsNum: '1.0.1.7', |
|||
versions: '测试版', |
|||
}; |
@ -0,0 +1,45 @@ |
|||
.u-block{ |
|||
padding: 14px; |
|||
&__section{ |
|||
margin-bottom:10px; |
|||
} |
|||
&__title { |
|||
margin-top:10px; |
|||
font-size: 15px; |
|||
color: $u-content-color; |
|||
margin-bottom:10px; |
|||
} |
|||
&__flex{ |
|||
/* #ifndef APP-NVUE */ |
|||
display: flex; |
|||
/* #endif */ |
|||
} |
|||
} |
|||
|
|||
// 使用了cell组件的icon图片样式 |
|||
.u-cell-icon { |
|||
width: 36rpx; |
|||
height: 36rpx; |
|||
margin-right: 8rpx; |
|||
} |
|||
|
|||
.u-page { |
|||
padding: 15px 15px 40px 15px; |
|||
} |
|||
|
|||
.u-demo-block { |
|||
flex: 1; |
|||
margin-bottom: 23px; |
|||
|
|||
&__content { |
|||
@include flex(column); |
|||
} |
|||
|
|||
&__title { |
|||
font-size: 14px; |
|||
color: rgb(143, 156, 162); |
|||
margin-bottom: 8px; |
|||
@include flex; |
|||
} |
|||
} |
|||
|
@ -0,0 +1,7 @@ |
|||
export default { |
|||
data() { |
|||
return { |
|||
|
|||
} |
|||
} |
|||
} |
@ -0,0 +1,21 @@ |
|||
The MIT License (MIT) |
|||
|
|||
Copyright (c) 2016-2019 David Desmaisons |
|||
|
|||
Permission is hereby granted, free of charge, to any person obtaining a copy |
|||
of this software and associated documentation files (the "Software"), to deal |
|||
in the Software without restriction, including without limitation the rights |
|||
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell |
|||
copies of the Software, and to permit persons to whom the Software is |
|||
furnished to do so, subject to the following conditions: |
|||
|
|||
The above copyright notice and this permission notice shall be included in all |
|||
copies or substantial portions of the Software. |
|||
|
|||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR |
|||
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, |
|||
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE |
|||
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER |
|||
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, |
|||
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE |
|||
SOFTWARE. |
@ -0,0 +1,387 @@ |
|||
<p align="center"><img width="140"src="https://raw.githubusercontent.com/SortableJS/Vue.Draggable/master/logo.svg?sanitize=true"></p> |
|||
<h1 align="center">Vue.Draggable</h1> |
|||
|
|||
[](https://circleci.com/gh/SortableJS/Vue.Draggable) |
|||
[](https://codecov.io/gh/SortableJS/Vue.Draggable) |
|||
[](https://codebeat.co/projects/github-com-sortablejs-vue-draggable-master) |
|||
[](https://github.com/SortableJS/Vue.Draggable/issues?q=is%3Aopen+is%3Aissue) |
|||
[](https://www.npmjs.com/package/vuedraggable) |
|||
[](https://www.npmjs.com/package/vuedraggable) |
|||
[](https://www.npmjs.com/package/vuedraggable) |
|||
[](https://github.com/SortableJS/Vue.Draggable/blob/master/LICENSE) |
|||
|
|||
|
|||
Vue component (Vue.js 2.0) or directive (Vue.js 1.0) allowing drag-and-drop and synchronization with view model array. |
|||
|
|||
Based on and offering all features of [Sortable.js](https://github.com/RubaXa/Sortable) |
|||
|
|||
## Demo |
|||
|
|||
 |
|||
|
|||
## Live Demos |
|||
|
|||
https://sortablejs.github.io/Vue.Draggable/ |
|||
|
|||
https://david-desmaisons.github.io/draggable-example/ |
|||
|
|||
## Features |
|||
|
|||
* Full support of [Sortable.js](https://github.com/RubaXa/Sortable) features: |
|||
* Supports touch devices |
|||
* Supports drag handles and selectable text |
|||
* Smart auto-scrolling |
|||
* Support drag and drop between different lists |
|||
* No jQuery dependency |
|||
* Keeps in sync HTML and view model list |
|||
* Compatible with Vue.js 2.0 transition-group |
|||
* Cancellation support |
|||
* Events reporting any changes when full control is needed |
|||
* Reuse existing UI library components (such as [vuetify](https://vuetifyjs.com), [element](http://element.eleme.io/), or [vue material](https://vuematerial.io) etc...) and make them draggable using `tag` and `componentData` props |
|||
|
|||
## Backers |
|||
|
|||
<a href="https://flatlogic.com/admin-dashboards"> |
|||
<img width="190" style="margin-top: 10px;" src="https://flatlogic.com/assets/logo-d9e7751df5fddd11c911945a75b56bf72bcfe809a7f6dca0e32d7b407eacedae.svg"> |
|||
</a> |
|||
|
|||
Admin Dashboard Templates made with Vue, React and Angular. |
|||
|
|||
|
|||
## Donate |
|||
|
|||
Find this project useful? You can buy me a :coffee: or a :beer: |
|||
|
|||
[](https://www.paypal.com/cgi-bin/webscr?cmd=_donations&business=GYAEKQZJ4FQT2¤cy_code=USD&source=url) |
|||
|
|||
|
|||
## Installation |
|||
|
|||
### With npm or yarn |
|||
|
|||
```bash |
|||
yarn add vuedraggable |
|||
|
|||
npm i -S vuedraggable |
|||
``` |
|||
|
|||
**Beware it is vuedraggable for Vue 2.0 and not vue-draggable which is for version 1.0** |
|||
|
|||
### with direct link |
|||
```html |
|||
|
|||
<script src="//cdnjs.cloudflare.com/ajax/libs/vue/2.5.2/vue.min.js"></script> |
|||
<!-- CDNJS :: Sortable (https://cdnjs.com/) --> |
|||
<script src="//cdn.jsdelivr.net/npm/sortablejs@1.8.4/Sortable.min.js"></script> |
|||
<!-- CDNJS :: Vue.Draggable (https://cdnjs.com/) --> |
|||
<script src="//cdnjs.cloudflare.com/ajax/libs/Vue.Draggable/2.20.0/vuedraggable.umd.min.js"></script> |
|||
|
|||
``` |
|||
|
|||
[cf example section](https://github.com/SortableJS/Vue.Draggable/tree/master/example) |
|||
|
|||
## For Vue.js 2.0 |
|||
|
|||
Use draggable component: |
|||
|
|||
### Typical use: |
|||
``` html |
|||
<draggable v-model="myArray" group="people" @start="drag=true" @end="drag=false"> |
|||
<div v-for="element in myArray" :key="element.id">{{element.name}}</div> |
|||
</draggable> |
|||
``` |
|||
.vue file: |
|||
``` js |
|||
import draggable from 'vuedraggable' |
|||
... |
|||
export default { |
|||
components: { |
|||
draggable, |
|||
}, |
|||
... |
|||
``` |
|||
|
|||
### With `transition-group`: |
|||
``` html |
|||
<draggable v-model="myArray"> |
|||
<transition-group> |
|||
<div v-for="element in myArray" :key="element.id"> |
|||
{{element.name}} |
|||
</div> |
|||
</transition-group> |
|||
</draggable> |
|||
``` |
|||
|
|||
Draggable component should directly wrap the draggable elements, or a `transition-component` containing the draggable elements. |
|||
|
|||
|
|||
### With footer slot: |
|||
``` html |
|||
<draggable v-model="myArray" draggable=".item"> |
|||
<div v-for="element in myArray" :key="element.id" class="item"> |
|||
{{element.name}} |
|||
</div> |
|||
<button slot="footer" @click="addPeople">Add</button> |
|||
</draggable> |
|||
``` |
|||
### With header slot: |
|||
``` html |
|||
<draggable v-model="myArray" draggable=".item"> |
|||
<div v-for="element in myArray" :key="element.id" class="item"> |
|||
{{element.name}} |
|||
</div> |
|||
<button slot="header" @click="addPeople">Add</button> |
|||
</draggable> |
|||
``` |
|||
|
|||
### With Vuex: |
|||
|
|||
```html |
|||
<draggable v-model='myList'> |
|||
``` |
|||
|
|||
```javascript |
|||
computed: { |
|||
myList: { |
|||
get() { |
|||
return this.$store.state.myList |
|||
}, |
|||
set(value) { |
|||
this.$store.commit('updateList', value) |
|||
} |
|||
} |
|||
} |
|||
``` |
|||
|
|||
|
|||
### Props |
|||
#### value |
|||
Type: `Array`<br> |
|||
Required: `false`<br> |
|||
Default: `null` |
|||
|
|||
Input array to draggable component. Typically same array as referenced by inner element v-for directive.<br> |
|||
This is the preferred way to use Vue.draggable as it is compatible with Vuex.<br> |
|||
It should not be used directly but only though the `v-model` directive: |
|||
```html |
|||
<draggable v-model="myArray"> |
|||
``` |
|||
|
|||
#### list |
|||
Type: `Array`<br> |
|||
Required: `false`<br> |
|||
Default: `null` |
|||
|
|||
Alternative to the `value` prop, list is an array to be synchronized with drag-and-drop.<br> |
|||
The main difference is that `list` prop is updated by draggable component using splice method, whereas `value` is immutable.<br> |
|||
**Do not use in conjunction with value prop.** |
|||
|
|||
#### All sortable options |
|||
New in version 2.19 |
|||
|
|||
Sortable options can be set directly as vue.draggable props since version 2.19. |
|||
|
|||
This means that all [sortable option](https://github.com/RubaXa/Sortable#options) are valid sortable props with the notable exception of all the method starting by "on" as draggable component expose the same API via events. |
|||
|
|||
kebab-case propery are supported: for example `ghost-class` props will be converted to `ghostClass` sortable option. |
|||
|
|||
Example setting handle, sortable and a group option: |
|||
```HTML |
|||
<draggable |
|||
v-model="list" |
|||
handle=".handle" |
|||
:group="{ name: 'people', pull: 'clone', put: false }" |
|||
ghost-class="ghost" |
|||
:sort="false" |
|||
@change="log" |
|||
> |
|||
<!-- --> |
|||
</draggable> |
|||
``` |
|||
|
|||
#### tag |
|||
Type: `String`<br> |
|||
Default: `'div'` |
|||
|
|||
HTML node type of the element that draggable component create as outer element for the included slot.<br> |
|||
It is also possible to pass the name of vue component as element. In this case, draggable attribute will be passed to the create component.<br> |
|||
See also [componentData](#componentdata) if you need to set props or event to the created component. |
|||
|
|||
#### clone |
|||
Type: `Function`<br> |
|||
Required: `false`<br> |
|||
Default: `(original) => { return original;}`<br> |
|||
|
|||
Function called on the source component to clone element when clone option is true. The unique argument is the viewModel element to be cloned and the returned value is its cloned version.<br> |
|||
By default vue.draggable reuses the viewModel element, so you have to use this hook if you want to clone or deep clone it. |
|||
|
|||
#### move |
|||
Type: `Function`<br> |
|||
Required: `false`<br> |
|||
Default: `null`<br> |
|||
|
|||
If not null this function will be called in a similar way as [Sortable onMove callback](https://github.com/RubaXa/Sortable#move-event-object). |
|||
Returning false will cancel the drag operation. |
|||
|
|||
```javascript |
|||
function onMoveCallback(evt, originalEvent){ |
|||
... |
|||
// return false; — for cancel |
|||
} |
|||
``` |
|||
evt object has same property as [Sortable onMove event](https://github.com/RubaXa/Sortable#move-event-object), and 3 additional properties: |
|||
- `draggedContext`: context linked to dragged element |
|||
- `index`: dragged element index |
|||
- `element`: dragged element underlying view model element |
|||
- `futureIndex`: potential index of the dragged element if the drop operation is accepted |
|||
- `relatedContext`: context linked to current drag operation |
|||
- `index`: target element index |
|||
- `element`: target element view model element |
|||
- `list`: target list |
|||
- `component`: target VueComponent |
|||
|
|||
HTML: |
|||
```HTML |
|||
<draggable :list="list" :move="checkMove"> |
|||
``` |
|||
javascript: |
|||
```javascript |
|||
checkMove: function(evt){ |
|||
return (evt.draggedContext.element.name!=='apple'); |
|||
} |
|||
``` |
|||
See complete example: [Cancel.html](https://github.com/SortableJS/Vue.Draggable/blob/master/examples/Cancel.html), [cancel.js](https://github.com/SortableJS/Vue.Draggable/blob/master/examples/script/cancel.js) |
|||
|
|||
#### componentData |
|||
Type: `Object`<br> |
|||
Required: `false`<br> |
|||
Default: `null`<br> |
|||
|
|||
This props is used to pass additional information to child component declared by [tag props](#tag).<br> |
|||
Value: |
|||
* `props`: props to be passed to the child component |
|||
* `attrs`: attrs to be passed to the child component |
|||
* `on`: events to be subscribe in the child component |
|||
|
|||
Example (using [element UI library](http://element.eleme.io/#/en-US)): |
|||
```HTML |
|||
<draggable tag="el-collapse" :list="list" :component-data="getComponentData()"> |
|||
<el-collapse-item v-for="e in list" :title="e.title" :name="e.name" :key="e.name"> |
|||
<div>{{e.description}}</div> |
|||
</el-collapse-item> |
|||
</draggable> |
|||
``` |
|||
```javascript |
|||
methods: { |
|||
handleChange() { |
|||
console.log('changed'); |
|||
}, |
|||
inputChanged(value) { |
|||
this.activeNames = value; |
|||
}, |
|||
getComponentData() { |
|||
return { |
|||
on: { |
|||
change: this.handleChange, |
|||
input: this.inputChanged |
|||
}, |
|||
attrs:{ |
|||
wrap: true |
|||
}, |
|||
props: { |
|||
value: this.activeNames |
|||
} |
|||
}; |
|||
} |
|||
} |
|||
``` |
|||
|
|||
### Events |
|||
|
|||
* Support for Sortable events: |
|||
|
|||
`start`, `add`, `remove`, `update`, `end`, `choose`, `unchoose`, `sort`, `filter`, `clone`<br> |
|||
Events are called whenever onStart, onAdd, onRemove, onUpdate, onEnd, onChoose, onUnchoose, onSort, onClone are fired by Sortable.js with the same argument.<br> |
|||
[See here for reference](https://github.com/RubaXa/Sortable#event-object-demo) |
|||
|
|||
Note that SortableJS OnMove callback is mapped with the [move prop](https://github.com/SortableJS/Vue.Draggable/blob/master/README.md#move) |
|||
|
|||
HTML: |
|||
```HTML |
|||
<draggable :list="list" @end="onEnd"> |
|||
``` |
|||
|
|||
* change event |
|||
|
|||
`change` event is triggered when list prop is not null and the corresponding array is altered due to drag-and-drop operation.<br> |
|||
This event is called with one argument containing one of the following properties: |
|||
- `added`: contains information of an element added to the array |
|||
- `newIndex`: the index of the added element |
|||
- `element`: the added element |
|||
- `removed`: contains information of an element removed from to the array |
|||
- `oldIndex`: the index of the element before remove |
|||
- `element`: the removed element |
|||
- `moved`: contains information of an element moved within the array |
|||
- `newIndex`: the current index of the moved element |
|||
- `oldIndex`: the old index of the moved element |
|||
- `element`: the moved element |
|||
|
|||
### Slots |
|||
|
|||
Limitation: neither header or footer slot works in conjunction with transition-group. |
|||
|
|||
#### Header |
|||
Use the `header` slot to add none-draggable element inside the vuedraggable component. |
|||
Important: it should be used in conjunction with draggable option to tag draggable element. |
|||
Note that header slot will always be added before the default slot regardless its position in the template. |
|||
Ex: |
|||
|
|||
``` html |
|||
<draggable v-model="myArray" draggable=".item"> |
|||
<div v-for="element in myArray" :key="element.id" class="item"> |
|||
{{element.name}} |
|||
</div> |
|||
<button slot="header" @click="addPeople">Add</button> |
|||
</draggable> |
|||
``` |
|||
|
|||
#### Footer |
|||
Use the `footer` slot to add none-draggable element inside the vuedraggable component. |
|||
Important: it should be used in conjunction with draggable option to tag draggable elements. |
|||
Note that footer slot will always be added after the default slot regardless its position in the template. |
|||
Ex: |
|||
|
|||
``` html |
|||
<draggable v-model="myArray" draggable=".item"> |
|||
<div v-for="element in myArray" :key="element.id" class="item"> |
|||
{{element.name}} |
|||
</div> |
|||
<button slot="footer" @click="addPeople">Add</button> |
|||
</draggable> |
|||
``` |
|||
### Gotchas |
|||
|
|||
- Vue.draggable children should always map the list or value prop using a v-for directive |
|||
* You may use [header](https://github.com/SortableJS/Vue.Draggable#header) and [footer](https://github.com/SortableJS/Vue.Draggable#footer) slot to by-pass this limitation. |
|||
|
|||
- Children elements inside v-for should be keyed as any element in Vue.js. Be carefull to provide revelant key values in particular: |
|||
* typically providing array index as keys won't work as key should be linked to the items content |
|||
* cloned elements should provide updated keys, it is doable using the [clone props](#clone) for example |
|||
|
|||
|
|||
### Example |
|||
* [Clone](https://sortablejs.github.io/Vue.Draggable/#/custom-clone) |
|||
* [Handle](https://sortablejs.github.io/Vue.Draggable/#/handle) |
|||
* [Transition](https://sortablejs.github.io/Vue.Draggable/#/transition-example-2) |
|||
* [Nested](https://sortablejs.github.io/Vue.Draggable/#/nested-example) |
|||
* [Table](https://sortablejs.github.io/Vue.Draggable/#/table-example) |
|||
|
|||
### Full demo example |
|||
|
|||
[draggable-example](https://github.com/David-Desmaisons/draggable-example) |
|||
|
|||
## For Vue.js 1.0 |
|||
|
|||
[See here](documentation/Vue.draggable.for.ReadME.md) |
|||
|
|||
``` |
@ -0,0 +1,93 @@ |
|||
{ |
|||
"name": "vuedraggable", |
|||
"version": "2.24.3", |
|||
"description": "draggable component for vue", |
|||
"license": "MIT", |
|||
"main": "dist/vuedraggable.umd.min.js", |
|||
"types": "src/vuedraggable.d.ts", |
|||
"repository": { |
|||
"type": "git", |
|||
"url": "https://github.com/SortableJS/Vue.Draggable.git" |
|||
}, |
|||
"private": false, |
|||
"scripts": { |
|||
"serve": "vue-cli-service serve ./example/main.js --open --mode local", |
|||
"build:doc": "vue-cli-service build ./example/main.js --dest docs --mode development", |
|||
"build": "vue-cli-service build --name vuedraggable --entry ./src/vuedraggable.js --target lib", |
|||
"lint": "vue-cli-service lint src example", |
|||
"prepublishOnly": "npm run lint && npm run test:unit && npm run build:doc && npm run build", |
|||
"test:unit": "vue-cli-service test:unit --coverage", |
|||
"test:coverage": "vue-cli-service test:unit --coverage --verbose && codecov" |
|||
}, |
|||
"keywords": [ |
|||
"vue", |
|||
"vuejs", |
|||
"drag", |
|||
"and", |
|||
"drop", |
|||
"list", |
|||
"Sortable.js", |
|||
"component", |
|||
"nested" |
|||
], |
|||
"dependencies": { |
|||
"sortablejs": "1.10.2" |
|||
}, |
|||
"devDependencies": { |
|||
"@vue/cli-plugin-babel": "^3.11.0", |
|||
"@vue/cli-plugin-eslint": "^3.11.0", |
|||
"@vue/cli-plugin-unit-jest": "^3.11.0", |
|||
"@vue/cli-service": "^3.11.0", |
|||
"@vue/eslint-config-prettier": "^4.0.1", |
|||
"@vue/test-utils": "^1.1.0", |
|||
"babel-core": "7.0.0-bridge.0", |
|||
"babel-eslint": "^10.0.1", |
|||
"babel-jest": "^23.6.0", |
|||
"bootstrap": "^4.3.1", |
|||
"codecov": "^3.2.0", |
|||
"component-fixture": "^0.4.1", |
|||
"element-ui": "^2.5.4", |
|||
"eslint": "^5.8.0", |
|||
"eslint-plugin-vue": "^5.0.0", |
|||
"font-awesome": "^4.7.0", |
|||
"jquery": "^3.5.1", |
|||
"vue": "^2.6.12", |
|||
"vue-cli-plugin-component": "^1.10.5", |
|||
"vue-router": "^3.0.2", |
|||
"vue-server-renderer": "^2.6.12", |
|||
"vue-template-compiler": "^2.6.12", |
|||
"vuetify": "^1.5.16", |
|||
"vuex": "^3.1.1" |
|||
}, |
|||
"eslintConfig": { |
|||
"root": true, |
|||
"env": { |
|||
"node": true |
|||
}, |
|||
"extends": [ |
|||
"plugin:vue/essential", |
|||
"@vue/prettier" |
|||
], |
|||
"rules": {}, |
|||
"parserOptions": { |
|||
"parser": "babel-eslint" |
|||
} |
|||
}, |
|||
"postcss": { |
|||
"plugins": { |
|||
"autoprefixer": {} |
|||
} |
|||
}, |
|||
"browserslist": [ |
|||
"> 1%", |
|||
"last 2 versions", |
|||
"not ie <= 8" |
|||
], |
|||
"files": [ |
|||
"dist/*.css", |
|||
"dist/*.map", |
|||
"dist/*.js", |
|||
"src/*" |
|||
], |
|||
"module": "dist/vuedraggable.umd.js" |
|||
} |
@ -0,0 +1,36 @@ |
|||
function getConsole() { |
|||
if (typeof window !== "undefined") { |
|||
return window.console; |
|||
} |
|||
return global.console; |
|||
} |
|||
const console = getConsole(); |
|||
|
|||
function cached(fn) { |
|||
const cache = Object.create(null); |
|||
return function cachedFn(str) { |
|||
const hit = cache[str]; |
|||
return hit || (cache[str] = fn(str)); |
|||
}; |
|||
} |
|||
|
|||
const regex = /-(\w)/g; |
|||
const camelize = cached(str => |
|||
str.replace(regex, (_, c) => (c ? c.toUpperCase() : "")) |
|||
); |
|||
|
|||
function removeNode(node) { |
|||
if (node.parentElement !== null) { |
|||
node.parentElement.removeChild(node); |
|||
} |
|||
} |
|||
|
|||
function insertNodeAt(fatherNode, node, position) { |
|||
const refNode = |
|||
position === 0 |
|||
? fatherNode.children[0] |
|||
: fatherNode.children[position - 1].nextSibling; |
|||
fatherNode.insertBefore(node, refNode); |
|||
} |
|||
|
|||
export { insertNodeAt, camelize, console, removeNode }; |
@ -0,0 +1,75 @@ |
|||
declare module 'vuedraggable' { |
|||
import Vue, { VueConstructor } from 'vue'; |
|||
|
|||
type CombinedVueInstance< |
|||
Instance extends Vue, |
|||
Data, |
|||
Methods, |
|||
Computed, |
|||
Props |
|||
> = Data & Methods & Computed & Props & Instance; |
|||
|
|||
type ExtendedVue< |
|||
Instance extends Vue, |
|||
Data, |
|||
Methods, |
|||
Computed, |
|||
Props |
|||
> = VueConstructor< |
|||
CombinedVueInstance<Instance, Data, Methods, Computed, Props> & Vue |
|||
>; |
|||
|
|||
export type DraggedContext<T> = { |
|||
index: number; |
|||
futureIndex: number; |
|||
element: T; |
|||
}; |
|||
|
|||
export type DropContext<T> = { |
|||
index: number; |
|||
component: Vue; |
|||
element: T; |
|||
}; |
|||
|
|||
export type Rectangle = { |
|||
top: number; |
|||
right: number; |
|||
bottom: number; |
|||
left: number; |
|||
width: number; |
|||
height: number; |
|||
}; |
|||
|
|||
export type MoveEvent<T> = { |
|||
originalEvent: DragEvent; |
|||
dragged: Element; |
|||
draggedContext: DraggedContext<T>; |
|||
draggedRect: Rectangle; |
|||
related: Element; |
|||
relatedContext: DropContext<T>; |
|||
relatedRect: Rectangle; |
|||
from: Element; |
|||
to: Element; |
|||
willInsertAfter: boolean; |
|||
isTrusted: boolean; |
|||
}; |
|||
|
|||
const draggable: ExtendedVue< |
|||
Vue, |
|||
{}, |
|||
{}, |
|||
{}, |
|||
{ |
|||
options: any; |
|||
list: any[]; |
|||
value: any[]; |
|||
noTransitionOnDrag?: boolean; |
|||
clone: any; |
|||
tag?: string | null; |
|||
move: any; |
|||
componentData: any; |
|||
} |
|||
>; |
|||
|
|||
export default draggable; |
|||
} |
@ -0,0 +1,485 @@ |
|||
import Sortable from "sortablejs"; |
|||
import { insertNodeAt, camelize, console, removeNode } from "./util/helper"; |
|||
|
|||
function buildAttribute(object, propName, value) { |
|||
if (value === undefined) { |
|||
return object; |
|||
} |
|||
object = object || {}; |
|||
object[propName] = value; |
|||
return object; |
|||
} |
|||
|
|||
function computeVmIndex(vnodes, element) { |
|||
return vnodes.map(elt => elt.elm).indexOf(element); |
|||
} |
|||
|
|||
function computeIndexes(slots, children, isTransition, footerOffset) { |
|||
if (!slots) { |
|||
return []; |
|||
} |
|||
|
|||
const elmFromNodes = slots.map(elt => elt.elm); |
|||
const footerIndex = children.length - footerOffset; |
|||
const rawIndexes = [...children].map((elt, idx) => |
|||
idx >= footerIndex ? elmFromNodes.length : elmFromNodes.indexOf(elt) |
|||
); |
|||
return isTransition ? rawIndexes.filter(ind => ind !== -1) : rawIndexes; |
|||
} |
|||
|
|||
function emit(evtName, evtData) { |
|||
this.$nextTick(() => this.$emit(evtName.toLowerCase(), {...evtData})); |
|||
} |
|||
|
|||
function delegateAndEmit(evtName) { |
|||
return evtData => { |
|||
if (this.realList !== null) { |
|||
this["onDrag" + evtName](evtData); |
|||
} |
|||
emit.call(this, evtName, evtData); |
|||
}; |
|||
} |
|||
|
|||
function isTransitionName(name) { |
|||
return ["transition-group", "TransitionGroup"].includes(name); |
|||
} |
|||
|
|||
function isTransition(slots) { |
|||
if (!slots || slots.length !== 1) { |
|||
return false; |
|||
} |
|||
const [{ componentOptions }] = slots; |
|||
if (!componentOptions) { |
|||
return false; |
|||
} |
|||
return isTransitionName(componentOptions.tag); |
|||
} |
|||
|
|||
function getSlot(slot, scopedSlot, key) { |
|||
return slot[key] || (scopedSlot[key] ? scopedSlot[key]() : undefined); |
|||
} |
|||
|
|||
function computeChildrenAndOffsets(children, slot, scopedSlot) { |
|||
let headerOffset = 0; |
|||
let footerOffset = 0; |
|||
const header = getSlot(slot, scopedSlot, "header"); |
|||
if (header) { |
|||
headerOffset = header.length; |
|||
children = children ? [...header, ...children] : [...header]; |
|||
} |
|||
const footer = getSlot(slot, scopedSlot, "footer"); |
|||
if (footer) { |
|||
footerOffset = footer.length; |
|||
children = children ? [...children, ...footer] : [...footer]; |
|||
} |
|||
return { children, headerOffset, footerOffset }; |
|||
} |
|||
|
|||
function getComponentAttributes($attrs, componentData) { |
|||
let attributes = null; |
|||
const update = (name, value) => { |
|||
attributes = buildAttribute(attributes, name, value); |
|||
}; |
|||
const attrs = Object.keys($attrs) |
|||
.filter(key => key === "id" || key.startsWith("data-")) |
|||
.reduce((res, key) => { |
|||
res[key] = $attrs[key]; |
|||
return res; |
|||
}, {}); |
|||
update("attrs", attrs); |
|||
|
|||
if (!componentData) { |
|||
return attributes; |
|||
} |
|||
const { on, props, attrs: componentDataAttrs } = componentData; |
|||
update("on", on); |
|||
update("props", props); |
|||
Object.assign(attributes.attrs, componentDataAttrs); |
|||
return attributes; |
|||
} |
|||
|
|||
const eventsListened = ["Start", "Add", "Remove", "Update", "End"]; |
|||
const eventsToEmit = ["Choose", "Unchoose", "Sort", "Filter", "Clone"]; |
|||
const readonlyProperties = ["Move", ...eventsListened, ...eventsToEmit].map( |
|||
evt => "on" + evt |
|||
); |
|||
var draggingElement = null; |
|||
|
|||
const props = { |
|||
options: Object, |
|||
list: { |
|||
type: Array, |
|||
required: false, |
|||
default: null |
|||
}, |
|||
value: { |
|||
type: Array, |
|||
required: false, |
|||
default: null |
|||
}, |
|||
noTransitionOnDrag: { |
|||
type: Boolean, |
|||
default: false |
|||
}, |
|||
clone: { |
|||
type: Function, |
|||
default: original => { |
|||
return original; |
|||
} |
|||
}, |
|||
element: { |
|||
type: String, |
|||
default: "div" |
|||
}, |
|||
tag: { |
|||
type: String, |
|||
default: null |
|||
}, |
|||
move: { |
|||
type: Function, |
|||
default: null |
|||
}, |
|||
componentData: { |
|||
type: Object, |
|||
required: false, |
|||
default: null |
|||
} |
|||
}; |
|||
|
|||
const draggableComponent = { |
|||
name: "draggable", |
|||
|
|||
inheritAttrs: false, |
|||
|
|||
props, |
|||
|
|||
data() { |
|||
return { |
|||
transitionMode: false, |
|||
noneFunctionalComponentMode: false |
|||
}; |
|||
}, |
|||
|
|||
render(h) { |
|||
const slots = this.$slots.default; |
|||
this.transitionMode = isTransition(slots); |
|||
const { children, headerOffset, footerOffset } = computeChildrenAndOffsets( |
|||
slots, |
|||
this.$slots, |
|||
this.$scopedSlots |
|||
); |
|||
this.headerOffset = headerOffset; |
|||
this.footerOffset = footerOffset; |
|||
const attributes = getComponentAttributes(this.$attrs, this.componentData); |
|||
return h(this.getTag(), attributes, children); |
|||
}, |
|||
|
|||
created() { |
|||
if (this.list !== null && this.value !== null) { |
|||
console.error( |
|||
"Value and list props are mutually exclusive! Please set one or another." |
|||
); |
|||
} |
|||
|
|||
if (this.element !== "div") { |
|||
console.warn( |
|||
"Element props is deprecated please use tag props instead. See https://github.com/SortableJS/Vue.Draggable/blob/master/documentation/migrate.md#element-props" |
|||
); |
|||
} |
|||
|
|||
if (this.options !== undefined) { |
|||
console.warn( |
|||
"Options props is deprecated, add sortable options directly as vue.draggable item, or use v-bind. See https://github.com/SortableJS/Vue.Draggable/blob/master/documentation/migrate.md#options-props" |
|||
); |
|||
} |
|||
}, |
|||
|
|||
mounted() { |
|||
this.noneFunctionalComponentMode = |
|||
this.getTag().toLowerCase() !== this.$el.nodeName.toLowerCase() && |
|||
!this.getIsFunctional(); |
|||
if (this.noneFunctionalComponentMode && this.transitionMode) { |
|||
throw new Error( |
|||
`Transition-group inside component is not supported. Please alter tag value or remove transition-group. Current tag value: ${this.getTag()}` |
|||
); |
|||
} |
|||
const optionsAdded = {}; |
|||
eventsListened.forEach(elt => { |
|||
optionsAdded["on" + elt] = delegateAndEmit.call(this, elt); |
|||
}); |
|||
|
|||
eventsToEmit.forEach(elt => { |
|||
optionsAdded["on" + elt] = emit.bind(this, elt); |
|||
}); |
|||
|
|||
const attributes = Object.keys(this.$attrs).reduce((res, key) => { |
|||
res[camelize(key)] = this.$attrs[key]; |
|||
return res; |
|||
}, {}); |
|||
|
|||
const options = Object.assign({}, this.options, attributes, optionsAdded, { |
|||
onMove: (evt, originalEvent) => { |
|||
return this.onDragMove(evt, originalEvent); |
|||
} |
|||
}); |
|||
!("draggable" in options) && (options.draggable = ">*"); |
|||
this._sortable = new Sortable(this.rootContainer, options); |
|||
this.computeIndexes(); |
|||
}, |
|||
|
|||
beforeDestroy() { |
|||
if (this._sortable !== undefined) this._sortable.destroy(); |
|||
}, |
|||
|
|||
computed: { |
|||
rootContainer() { |
|||
return this.transitionMode ? this.$el.children[0] : this.$el; |
|||
}, |
|||
|
|||
realList() { |
|||
return this.list ? this.list : this.value; |
|||
} |
|||
}, |
|||
|
|||
watch: { |
|||
options: { |
|||
handler(newOptionValue) { |
|||
this.updateOptions(newOptionValue); |
|||
}, |
|||
deep: true |
|||
}, |
|||
|
|||
$attrs: { |
|||
handler(newOptionValue) { |
|||
this.updateOptions(newOptionValue); |
|||
}, |
|||
deep: true |
|||
}, |
|||
|
|||
realList() { |
|||
this.computeIndexes(); |
|||
} |
|||
}, |
|||
|
|||
methods: { |
|||
getIsFunctional() { |
|||
const { fnOptions } = this._vnode; |
|||
return fnOptions && fnOptions.functional; |
|||
}, |
|||
|
|||
getTag() { |
|||
return this.tag || this.element; |
|||
}, |
|||
|
|||
updateOptions(newOptionValue) { |
|||
for (var property in newOptionValue) { |
|||
const value = camelize(property); |
|||
if (readonlyProperties.indexOf(value) === -1) { |
|||
this._sortable.option(value, newOptionValue[property]); |
|||
} |
|||
} |
|||
}, |
|||
|
|||
getChildrenNodes() { |
|||
if (this.noneFunctionalComponentMode) { |
|||
return this.$children[0].$slots.default; |
|||
} |
|||
const rawNodes = this.$slots.default; |
|||
return this.transitionMode ? rawNodes[0].child.$slots.default : rawNodes; |
|||
}, |
|||
|
|||
computeIndexes() { |
|||
this.$nextTick(() => { |
|||
this.visibleIndexes = computeIndexes( |
|||
this.getChildrenNodes(), |
|||
this.rootContainer.children, |
|||
this.transitionMode, |
|||
this.footerOffset |
|||
); |
|||
}); |
|||
}, |
|||
|
|||
getUnderlyingVm(htmlElt) { |
|||
const index = computeVmIndex(this.getChildrenNodes() || [], htmlElt); |
|||
if (index === -1) { |
|||
//Edge case during move callback: related element might be
|
|||
//an element different from collection
|
|||
return null; |
|||
} |
|||
const element = this.realList[index]; |
|||
return { index, element }; |
|||
}, |
|||
|
|||
getUnderlyingPotencialDraggableComponent({ __vue__: vue }) { |
|||
if ( |
|||
!vue || |
|||
!vue.$options || |
|||
!isTransitionName(vue.$options._componentTag) |
|||
) { |
|||
if ( |
|||
!("realList" in vue) && |
|||
vue.$children.length === 1 && |
|||
"realList" in vue.$children[0] |
|||
) |
|||
return vue.$children[0]; |
|||
|
|||
return vue; |
|||
} |
|||
return vue.$parent; |
|||
}, |
|||
|
|||
emitChanges(evt) { |
|||
this.$nextTick(() => { |
|||
this.$emit("change", evt); |
|||
}); |
|||
}, |
|||
|
|||
alterList(onList) { |
|||
if (this.list) { |
|||
onList(this.list); |
|||
return; |
|||
} |
|||
const newList = [...this.value]; |
|||
onList(newList); |
|||
this.$emit("input", newList); |
|||
}, |
|||
|
|||
spliceList() { |
|||
const spliceList = list => list.splice(...arguments); |
|||
this.alterList(spliceList); |
|||
}, |
|||
|
|||
updatePosition(oldIndex, newIndex) { |
|||
const updatePosition = list => |
|||
list.splice(newIndex, 0, list.splice(oldIndex, 1)[0]); |
|||
this.alterList(updatePosition); |
|||
}, |
|||
|
|||
getRelatedContextFromMoveEvent({ to, related }) { |
|||
const component = this.getUnderlyingPotencialDraggableComponent(to); |
|||
if (!component) { |
|||
return { component }; |
|||
} |
|||
const list = component.realList; |
|||
const context = { list, component }; |
|||
if (to !== related && list && component.getUnderlyingVm) { |
|||
const destination = component.getUnderlyingVm(related); |
|||
if (destination) { |
|||
return Object.assign(destination, context); |
|||
} |
|||
} |
|||
return context; |
|||
}, |
|||
|
|||
getVmIndex(domIndex) { |
|||
const indexes = this.visibleIndexes; |
|||
const numberIndexes = indexes.length; |
|||
return domIndex > numberIndexes - 1 ? numberIndexes : indexes[domIndex]; |
|||
}, |
|||
|
|||
getComponent() { |
|||
return this.$slots.default[0].componentInstance; |
|||
}, |
|||
|
|||
resetTransitionData(index) { |
|||
if (!this.noTransitionOnDrag || !this.transitionMode) { |
|||
return; |
|||
} |
|||
var nodes = this.getChildrenNodes(); |
|||
nodes[index].data = null; |
|||
const transitionContainer = this.getComponent(); |
|||
transitionContainer.children = []; |
|||
transitionContainer.kept = undefined; |
|||
}, |
|||
|
|||
onDragStart(evt) { |
|||
this.context = this.getUnderlyingVm(evt.item); |
|||
evt.item._underlying_vm_ = this.clone(this.context.element); |
|||
draggingElement = evt.item; |
|||
}, |
|||
|
|||
onDragAdd(evt) { |
|||
const element = evt.item._underlying_vm_; |
|||
if (element === undefined) { |
|||
return; |
|||
} |
|||
removeNode(evt.item); |
|||
const newIndex = this.getVmIndex(evt.newIndex); |
|||
this.spliceList(newIndex, 0, element); |
|||
this.computeIndexes(); |
|||
const added = { element, newIndex }; |
|||
this.emitChanges({ added }); |
|||
}, |
|||
|
|||
onDragRemove(evt) { |
|||
insertNodeAt(this.rootContainer, evt.item, evt.oldIndex); |
|||
if (evt.pullMode === "clone") { |
|||
removeNode(evt.clone); |
|||
return; |
|||
} |
|||
const oldIndex = this.context.index; |
|||
this.spliceList(oldIndex, 1); |
|||
const removed = { element: this.context.element, oldIndex }; |
|||
this.resetTransitionData(oldIndex); |
|||
this.emitChanges({ removed }); |
|||
}, |
|||
|
|||
onDragUpdate(evt) { |
|||
removeNode(evt.item); |
|||
insertNodeAt(evt.from, evt.item, evt.oldIndex); |
|||
const oldIndex = this.context.index; |
|||
const newIndex = this.getVmIndex(evt.newIndex); |
|||
this.updatePosition(oldIndex, newIndex); |
|||
const moved = { element: this.context.element, oldIndex, newIndex }; |
|||
this.emitChanges({ moved }); |
|||
}, |
|||
|
|||
updateProperty(evt, propertyName) { |
|||
evt.hasOwnProperty(propertyName) && |
|||
(evt[propertyName] += this.headerOffset); |
|||
}, |
|||
|
|||
computeFutureIndex(relatedContext, evt) { |
|||
if (!relatedContext.element) { |
|||
return 0; |
|||
} |
|||
const domChildren = [...evt.to.children].filter( |
|||
el => el.style["display"] !== "none" |
|||
); |
|||
const currentDOMIndex = domChildren.indexOf(evt.related); |
|||
const currentIndex = relatedContext.component.getVmIndex(currentDOMIndex); |
|||
const draggedInList = domChildren.indexOf(draggingElement) !== -1; |
|||
return draggedInList || !evt.willInsertAfter |
|||
? currentIndex |
|||
: currentIndex + 1; |
|||
}, |
|||
|
|||
onDragMove(evt, originalEvent) { |
|||
const onMove = this.move; |
|||
if (!onMove || !this.realList) { |
|||
return true; |
|||
} |
|||
|
|||
const relatedContext = this.getRelatedContextFromMoveEvent(evt); |
|||
const draggedContext = this.context; |
|||
const futureIndex = this.computeFutureIndex(relatedContext, evt); |
|||
Object.assign(draggedContext, { futureIndex }); |
|||
const sendEvt = Object.assign({}, evt, { |
|||
relatedContext, |
|||
draggedContext |
|||
}); |
|||
return onMove(sendEvt, originalEvent); |
|||
}, |
|||
|
|||
onDragEnd() { |
|||
this.computeIndexes(); |
|||
draggingElement = null; |
|||
} |
|||
} |
|||
}; |
|||
|
|||
if (typeof window !== "undefined" && "Vue" in window) { |
|||
window.Vue.component("draggable", draggableComponent); |
|||
} |
|||
|
|||
export default draggableComponent; |
@ -0,0 +1,2 @@ |
|||
uni.$u.props.gap.bgColor = '#f3f4f6' |
|||
uni.$u.props.gap.height = '10' |
@ -0,0 +1,8 @@ |
|||
// 登录
|
|||
export function login(params) { |
|||
return uni.$u.http.post('/login', params); |
|||
} |
|||
// 获取验证码
|
|||
export function captchaImage(params) { |
|||
return uni.$u.http.get('/captchaImage', { param: {} }); |
|||
} |
@ -0,0 +1,25 @@ |
|||
<template> |
|||
<view class="abc"> |
|||
<u-button>nihao</u-button> |
|||
</view> |
|||
</template> |
|||
|
|||
<script> |
|||
export default { |
|||
name:"demo-com", |
|||
options: { styleIsolation: 'shared' }, |
|||
data() { |
|||
return { |
|||
|
|||
}; |
|||
} |
|||
} |
|||
</script> |
|||
|
|||
<style lang="scss"> |
|||
|
|||
.abc ::v-deep .u-button { |
|||
color: red !important; |
|||
} |
|||
|
|||
</style> |
@ -0,0 +1,113 @@ |
|||
<template> |
|||
<view class="nav-wrap"> |
|||
<view class="nav-title"> |
|||
<u--image :showLoading="true" src="https://cdn.uviewui.com/uview/common/logo.png" width="70px" |
|||
height="70px" /> |
|||
<view class="nav-info"> |
|||
<view class="nav-info__title" @tap="jumpToWx"> |
|||
<text class="nav-info__title__text">uView {{version}}</text> |
|||
<!-- #ifdef MP-WEIXIN --> |
|||
<!-- uni-app不支持text内部的text组件的tap事件,所以放到外部响应tap --> |
|||
<text class="nav-info__title__jump">查看1.x演示</text> |
|||
<!-- #endif --> |
|||
</view> |
|||
<text class="nav-slogan">多平台快速开发的UI框架</text> |
|||
</view> |
|||
</view> |
|||
<text class="nav-desc">{{desc}}</text> |
|||
</view> |
|||
</template> |
|||
|
|||
<script> |
|||
export default { |
|||
props: { |
|||
desc: String, |
|||
title: String, |
|||
}, |
|||
data() { |
|||
return { |
|||
version: uni.$u.config.v |
|||
} |
|||
}, |
|||
methods: { |
|||
jumpToWx() { |
|||
// #ifdef MP-WEIXIN |
|||
uni.navigateToMiniProgram({ |
|||
appId: 'wx3be833c4a263e0c2' |
|||
}) |
|||
// #endif |
|||
} |
|||
}, |
|||
} |
|||
</script> |
|||
|
|||
<style lang="scss" scoped> |
|||
.nav-wrap { |
|||
padding: 15px; |
|||
position: relative; |
|||
} |
|||
|
|||
.lang { |
|||
position: absolute; |
|||
top: 15px; |
|||
right: 15px; |
|||
} |
|||
|
|||
.nav-title { |
|||
/* #ifndef APP-NVUE */ |
|||
display: flex; |
|||
/* #endif */ |
|||
flex-direction: row; |
|||
align-items: center; |
|||
justify-content: flex-start; |
|||
} |
|||
|
|||
.nav-info { |
|||
margin-left: 15px; |
|||
|
|||
&__title { |
|||
/* #ifndef APP-NVUE */ |
|||
display: flex; |
|||
/* #endif */ |
|||
flex-direction: row; |
|||
align-items: center; |
|||
|
|||
&__text { |
|||
/* #ifndef APP-NVUE */ |
|||
display: flex; |
|||
/* #endif */ |
|||
color: $u-main-color; |
|||
font-size: 25px; |
|||
font-weight: bold; |
|||
text-align: left; |
|||
} |
|||
|
|||
&__jump { |
|||
font-size: 12px; |
|||
color: $u-primary; |
|||
font-weight: normal; |
|||
margin-left: 20px; |
|||
} |
|||
} |
|||
} |
|||
|
|||
.logo { |
|||
width: 70px; |
|||
height: 70px; |
|||
/* #ifndef APP-NVUE */ |
|||
height: auto; |
|||
/* #endif */ |
|||
} |
|||
|
|||
.nav-slogan { |
|||
color: $u-tips-color; |
|||
font-size: 14px; |
|||
} |
|||
|
|||
.nav-desc { |
|||
margin-top: 10px; |
|||
font-size: 14px; |
|||
color: $u-content-color; |
|||
line-height: 20px; |
|||
} |
|||
</style> |
After Width: | Height: | Size: 4.4 KiB |
After Width: | Height: | Size: 62 KiB |
After Width: | Height: | Size: 4.6 KiB |
After Width: | Height: | Size: 4.8 KiB |
@ -0,0 +1,27 @@ |
|||
<!DOCTYPE html> |
|||
<html lang="en"> |
|||
|
|||
<head> |
|||
<meta charset="UTF-8" /> |
|||
<meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1, user-scalable=no"> |
|||
<script> |
|||
// var coverSupport = 'CSS' in window && typeof CSS.supports === 'function' && (CSS.supports('top: env(a)') || |
|||
// CSS.supports('top: constant(a)')) |
|||
// document.write( |
|||
// '<meta name="viewport" content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0' + |
|||
// (coverSupport ? ', viewport-fit=cover' : '') + '" />') |
|||
</script> |
|||
<!-- 引入样式文件 --> |
|||
<title></title> |
|||
<!--preload-links--> |
|||
<!--app-context--> |
|||
</head> |
|||
|
|||
<body> |
|||
<div id="app"><!--app-html--></div> |
|||
</body> |
|||
<style> |
|||
|
|||
</style> |
|||
|
|||
</html> |
@ -0,0 +1,196 @@ |
|||
function getLocalFilePath(path) { |
|||
if (path.indexOf('_www') === 0 || path.indexOf('_doc') === 0 || path.indexOf('_documents') === 0 || path.indexOf('_downloads') === 0) { |
|||
return path |
|||
} |
|||
if (path.indexOf('file://') === 0) { |
|||
return path |
|||
} |
|||
if (path.indexOf('/storage/emulated/0/') === 0) { |
|||
return path |
|||
} |
|||
if (path.indexOf('/') === 0) { |
|||
var localFilePath = plus.io.convertAbsoluteFileSystem(path) |
|||
if (localFilePath !== path) { |
|||
return localFilePath |
|||
} else { |
|||
path = path.substr(1) |
|||
} |
|||
} |
|||
return '_www/' + path |
|||
} |
|||
|
|||
function dataUrlToBase64(str) { |
|||
var array = str.split(',') |
|||
return array[array.length - 1] |
|||
} |
|||
|
|||
var index = 0 |
|||
function getNewFileId() { |
|||
return Date.now() + String(index++) |
|||
} |
|||
|
|||
function biggerThan(v1, v2) { |
|||
var v1Array = v1.split('.') |
|||
var v2Array = v2.split('.') |
|||
var update = false |
|||
for (var index = 0; index < v2Array.length; index++) { |
|||
var diff = v1Array[index] - v2Array[index] |
|||
if (diff !== 0) { |
|||
update = diff > 0 |
|||
break |
|||
} |
|||
} |
|||
return update |
|||
} |
|||
|
|||
export function pathToBase64(path) { |
|||
return new Promise(function(resolve, reject) { |
|||
if (typeof window === 'object' && 'document' in window) { |
|||
if (typeof FileReader === 'function') { |
|||
var xhr = new XMLHttpRequest() |
|||
xhr.open('GET', path, true) |
|||
xhr.responseType = 'blob' |
|||
xhr.onload = function() { |
|||
if (this.status === 200) { |
|||
let fileReader = new FileReader() |
|||
fileReader.onload = function(e) { |
|||
resolve(e.target.result) |
|||
} |
|||
fileReader.onerror = reject |
|||
fileReader.readAsDataURL(this.response) |
|||
} |
|||
} |
|||
xhr.onerror = reject |
|||
xhr.send() |
|||
return |
|||
} |
|||
var canvas = document.createElement('canvas') |
|||
var c2x = canvas.getContext('2d') |
|||
var img = new Image |
|||
img.onload = function() { |
|||
canvas.width = img.width |
|||
canvas.height = img.height |
|||
c2x.drawImage(img, 0, 0) |
|||
resolve(canvas.toDataURL()) |
|||
canvas.height = canvas.width = 0 |
|||
} |
|||
img.onerror = reject |
|||
img.src = path |
|||
return |
|||
} |
|||
if (typeof plus === 'object') { |
|||
plus.io.resolveLocalFileSystemURL(getLocalFilePath(path), function(entry) { |
|||
entry.file(function(file) { |
|||
var fileReader = new plus.io.FileReader() |
|||
fileReader.onload = function(data) { |
|||
resolve(data.target.result) |
|||
} |
|||
fileReader.onerror = function(error) { |
|||
reject(error) |
|||
} |
|||
fileReader.readAsDataURL(file) |
|||
}, function(error) { |
|||
reject(error) |
|||
}) |
|||
}, function(error) { |
|||
reject(error) |
|||
}) |
|||
return |
|||
} |
|||
if (typeof wx === 'object' && wx.canIUse('getFileSystemManager')) { |
|||
wx.getFileSystemManager().readFile({ |
|||
filePath: path, |
|||
encoding: 'base64', |
|||
success: function(res) { |
|||
resolve('data:image/png;base64,' + res.data) |
|||
}, |
|||
fail: function(error) { |
|||
reject(error) |
|||
} |
|||
}) |
|||
return |
|||
} |
|||
reject(new Error('not support')) |
|||
}) |
|||
} |
|||
|
|||
export function base64ToPath(base64) { |
|||
return new Promise(function(resolve, reject) { |
|||
if (typeof window === 'object' && 'document' in window) { |
|||
base64 = base64.split(',') |
|||
var type = base64[0].match(/:(.*?);/)[1] |
|||
var str = atob(base64[1]) |
|||
var n = str.length |
|||
var array = new Uint8Array(n) |
|||
while (n--) { |
|||
array[n] = str.charCodeAt(n) |
|||
} |
|||
return resolve((window.URL || window.webkitURL).createObjectURL(new Blob([array], { type: type }))) |
|||
} |
|||
var extName = base64.split(',')[0].match(/data\:\S+\/(\S+);/) |
|||
if (extName) { |
|||
extName = extName[1] |
|||
} else { |
|||
reject(new Error('base64 error')) |
|||
} |
|||
var fileName = getNewFileId() + '.' + extName |
|||
if (typeof plus === 'object') { |
|||
var basePath = '_doc' |
|||
var dirPath = 'uniapp_temp' |
|||
var filePath = basePath + '/' + dirPath + '/' + fileName |
|||
if (!biggerThan(plus.os.name === 'Android' ? '1.9.9.80627' : '1.9.9.80472', plus.runtime.innerVersion)) { |
|||
plus.io.resolveLocalFileSystemURL(basePath, function(entry) { |
|||
entry.getDirectory(dirPath, { |
|||
create: true, |
|||
exclusive: false, |
|||
}, function(entry) { |
|||
entry.getFile(fileName, { |
|||
create: true, |
|||
exclusive: false, |
|||
}, function(entry) { |
|||
entry.createWriter(function(writer) { |
|||
writer.onwrite = function() { |
|||
resolve(filePath) |
|||
} |
|||
writer.onerror = reject |
|||
writer.seek(0) |
|||
writer.writeAsBinary(dataUrlToBase64(base64)) |
|||
}, reject) |
|||
}, reject) |
|||
}, reject) |
|||
}, reject) |
|||
return |
|||
} |
|||
var bitmap = new plus.nativeObj.Bitmap(fileName) |
|||
bitmap.loadBase64Data(base64, function() { |
|||
bitmap.save(filePath, {}, function() { |
|||
bitmap.clear() |
|||
resolve(filePath) |
|||
}, function(error) { |
|||
bitmap.clear() |
|||
reject(error) |
|||
}) |
|||
}, function(error) { |
|||
bitmap.clear() |
|||
reject(error) |
|||
}) |
|||
return |
|||
} |
|||
if (typeof wx === 'object' && wx.canIUse('getFileSystemManager')) { |
|||
var filePath = wx.env.USER_DATA_PATH + '/' + fileName |
|||
wx.getFileSystemManager().writeFile({ |
|||
filePath: filePath, |
|||
data: dataUrlToBase64(base64), |
|||
encoding: 'base64', |
|||
success: function() { |
|||
resolve(filePath) |
|||
}, |
|||
fail: function(error) { |
|||
reject(error) |
|||
} |
|||
}) |
|||
return |
|||
} |
|||
reject(new Error('not support')) |
|||
}) |
|||
} |
@ -0,0 +1,11 @@ |
|||
{ |
|||
"id": "mmmm-image-tools", |
|||
"name": "image-tools", |
|||
"version": "1.4.0", |
|||
"description": "图像转换工具,可用于图像和base64的转换", |
|||
"keywords": [ |
|||
"base64", |
|||
"保存", |
|||
"图像" |
|||
] |
|||
} |
@ -0,0 +1,36 @@ |
|||
import Vue from 'vue'; |
|||
import App from './App'; |
|||
|
|||
// vuex
|
|||
import store from './store'; |
|||
// 引入全局uView
|
|||
import uView from '@/uni_modules/uview-ui'; |
|||
import mixin from './common/mixin'; |
|||
// 全局组件
|
|||
import VueDraggable from '@/common/node_modules/vuedraggable/src/vuedraggable'; |
|||
Vue.component('draggable', VueDraggable); |
|||
|
|||
// vuex
|
|||
Vue.prototype.$store = store; |
|||
Vue.config.productionTip = false; |
|||
|
|||
App.mpType = 'app'; |
|||
Vue.use(uView); |
|||
|
|||
// #ifdef MP
|
|||
// 引入uView对小程序分享的mixin封装
|
|||
const mpShare = require('@/uni_modules/uview-ui/libs/mixin/mpShare.js'); |
|||
Vue.mixin(mpShare); |
|||
// #endif
|
|||
|
|||
Vue.mixin(mixin); |
|||
|
|||
const app = new Vue({ |
|||
store, |
|||
...App, |
|||
}); |
|||
|
|||
// 引入请求封装
|
|||
require('./util/request/index')(app); |
|||
|
|||
app.$mount(); |
@ -0,0 +1,156 @@ |
|||
{ |
|||
"name" : "认知训练", |
|||
"appid" : "__UNI__FBDBEC9", |
|||
"description" : "多平台快速开发的UI框架", |
|||
"versionName" : "1.0.0", |
|||
"versionCode" : 1, |
|||
"transformPx" : false, |
|||
"app-plus" : { |
|||
"optimization" : { |
|||
"subPackages" : true |
|||
}, |
|||
"safearea" : { |
|||
"bottom" : { |
|||
"offset" : "none" |
|||
} |
|||
}, |
|||
"splashscreen" : { |
|||
"alwaysShowBeforeRender" : true, |
|||
"waiting" : true, |
|||
"autoclose" : true, |
|||
"delay" : 0 |
|||
}, |
|||
"usingComponents" : true, |
|||
"nvueCompiler" : "uni-app", |
|||
"compilerVersion" : 3, |
|||
"modules" : { |
|||
"Webview-x5" : {}, |
|||
"Barcode" : {}, |
|||
"Camera" : {} |
|||
}, |
|||
"distribute" : { |
|||
"android" : { |
|||
"permissions" : [ |
|||
"<uses-permission android:name=\"android.permission.CHANGE_NETWORK_STATE\"/>", |
|||
"<uses-permission android:name=\"android.permission.MOUNT_UNMOUNT_FILESYSTEMS\"/>", |
|||
"<uses-permission android:name=\"android.permission.VIBRATE\"/>", |
|||
"<uses-permission android:name=\"android.permission.READ_LOGS\"/>", |
|||
"<uses-permission android:name=\"android.permission.ACCESS_WIFI_STATE\"/>", |
|||
"<uses-feature android:name=\"android.hardware.camera.autofocus\"/>", |
|||
"<uses-permission android:name=\"android.permission.WRITE_CONTACTS\"/>", |
|||
"<uses-permission android:name=\"android.permission.ACCESS_NETWORK_STATE\"/>", |
|||
"<uses-permission android:name=\"android.permission.CAMERA\"/>", |
|||
"<uses-permission android:name=\"android.permission.RECORD_AUDIO\"/>", |
|||
"<uses-permission android:name=\"android.permission.GET_ACCOUNTS\"/>", |
|||
"<uses-permission android:name=\"android.permission.MODIFY_AUDIO_SETTINGS\"/>", |
|||
"<uses-permission android:name=\"android.permission.READ_PHONE_STATE\"/>", |
|||
"<uses-permission android:name=\"android.permission.CHANGE_WIFI_STATE\"/>", |
|||
"<uses-permission android:name=\"android.permission.WAKE_LOCK\"/>", |
|||
"<uses-permission android:name=\"android.permission.CALL_PHONE\"/>", |
|||
"<uses-permission android:name=\"android.permission.FLASHLIGHT\"/>", |
|||
"<uses-permission android:name=\"android.permission.ACCESS_COARSE_LOCATION\"/>", |
|||
"<uses-feature android:name=\"android.hardware.camera\"/>", |
|||
"<uses-permission android:name=\"android.permission.ACCESS_FINE_LOCATION\"/>", |
|||
"<uses-permission android:name=\"android.permission.WRITE_SETTINGS\"/>" |
|||
], |
|||
"abiFilters" : [ "armeabi-v7a", "arm64-v8a" ] |
|||
}, |
|||
"ios" : { |
|||
"idfa" : false, |
|||
"dSYMs" : false |
|||
}, |
|||
"sdkConfigs" : { |
|||
"ad" : {} |
|||
}, |
|||
"icons" : { |
|||
"android" : { |
|||
"hdpi" : "unpackage/res/icons/72x72.png", |
|||
"xhdpi" : "unpackage/res/icons/96x96.png", |
|||
"xxhdpi" : "unpackage/res/icons/144x144.png", |
|||
"xxxhdpi" : "unpackage/res/icons/192x192.png" |
|||
}, |
|||
"ios" : { |
|||
"appstore" : "unpackage/res/icons/1024x1024.png", |
|||
"ipad" : { |
|||
"app" : "unpackage/res/icons/76x76.png", |
|||
"app@2x" : "unpackage/res/icons/152x152.png", |
|||
"notification" : "unpackage/res/icons/20x20.png", |
|||
"notification@2x" : "unpackage/res/icons/40x40.png", |
|||
"proapp@2x" : "unpackage/res/icons/167x167.png", |
|||
"settings" : "unpackage/res/icons/29x29.png", |
|||
"settings@2x" : "unpackage/res/icons/58x58.png", |
|||
"spotlight" : "unpackage/res/icons/40x40.png", |
|||
"spotlight@2x" : "unpackage/res/icons/80x80.png" |
|||
}, |
|||
"iphone" : { |
|||
"app@2x" : "unpackage/res/icons/120x120.png", |
|||
"app@3x" : "unpackage/res/icons/180x180.png", |
|||
"notification@2x" : "unpackage/res/icons/40x40.png", |
|||
"notification@3x" : "unpackage/res/icons/60x60.png", |
|||
"settings@2x" : "unpackage/res/icons/58x58.png", |
|||
"settings@3x" : "unpackage/res/icons/87x87.png", |
|||
"spotlight@2x" : "unpackage/res/icons/80x80.png", |
|||
"spotlight@3x" : "unpackage/res/icons/120x120.png" |
|||
} |
|||
} |
|||
} |
|||
} |
|||
}, |
|||
"quickapp" : {}, |
|||
"mp-weixin" : { |
|||
"appid" : "", |
|||
"setting" : { |
|||
"urlCheck" : false, |
|||
"es6" : false, |
|||
"minified" : false, |
|||
"postcss" : false |
|||
}, |
|||
"optimization" : { |
|||
"subPackages" : true |
|||
}, |
|||
"usingComponents" : true, |
|||
"mergeVirtualHostAttributes" : true |
|||
}, |
|||
"mp-alipay" : { |
|||
"usingComponents" : true, |
|||
"component2" : true |
|||
}, |
|||
"mp-qq" : { |
|||
"optimization" : { |
|||
"subPackages" : true |
|||
}, |
|||
"appid" : "15646153" |
|||
}, |
|||
"mp-baidu" : { |
|||
"usingComponents" : true, |
|||
"appid" : "" |
|||
}, |
|||
"mp-toutiao" : { |
|||
"usingComponents" : true, |
|||
"appid" : "" |
|||
}, |
|||
"h5" : { |
|||
"template" : "template.h5.html", |
|||
"router" : { |
|||
"mode" : "history", |
|||
"base" : "/ruisi/doctor/" |
|||
}, |
|||
"optimization" : { |
|||
"treeShaking" : { |
|||
"enable" : false |
|||
} |
|||
}, |
|||
"title" : "认知训练", |
|||
"sdkConfigs" : { |
|||
"maps" : { |
|||
"qqmap" : { |
|||
"key" : "" |
|||
} |
|||
} |
|||
}, |
|||
"domain" : "", |
|||
"devServer" : { |
|||
"https" : false |
|||
} |
|||
} |
|||
} |
@ -0,0 +1,12 @@ |
|||
#!/bin/sh |
|||
basedir=$(dirname "$(echo "$0" | sed -e 's,\\,/,g')") |
|||
|
|||
case `uname` in |
|||
*CYGWIN*|*MINGW*|*MSYS*) basedir=`cygpath -w "$basedir"`;; |
|||
esac |
|||
|
|||
if [ -x "$basedir/node" ]; then |
|||
exec "$basedir/node" "$basedir/../acorn/bin/acorn" "$@" |
|||
else |
|||
exec node "$basedir/../acorn/bin/acorn" "$@" |
|||
fi |
@ -0,0 +1,17 @@ |
|||
@ECHO off |
|||
GOTO start |
|||
:find_dp0 |
|||
SET dp0=%~dp0 |
|||
EXIT /b |
|||
:start |
|||
SETLOCAL |
|||
CALL :find_dp0 |
|||
|
|||
IF EXIST "%dp0%\node.exe" ( |
|||
SET "_prog=%dp0%\node.exe" |
|||
) ELSE ( |
|||
SET "_prog=node" |
|||
SET PATHEXT=%PATHEXT:;.JS;=;% |
|||
) |
|||
|
|||
endLocal & goto #_undefined_# 2>NUL || title %COMSPEC% & "%_prog%" "%dp0%\..\acorn\bin\acorn" %* |
@ -0,0 +1,28 @@ |
|||
#!/usr/bin/env pwsh |
|||
$basedir=Split-Path $MyInvocation.MyCommand.Definition -Parent |
|||
|
|||
$exe="" |
|||
if ($PSVersionTable.PSVersion -lt "6.0" -or $IsWindows) { |
|||
# Fix case when both the Windows and Linux builds of Node |
|||
# are installed in the same directory |
|||
$exe=".exe" |
|||
} |
|||
$ret=0 |
|||
if (Test-Path "$basedir/node$exe") { |
|||
# Support pipeline input |
|||
if ($MyInvocation.ExpectingInput) { |
|||
$input | & "$basedir/node$exe" "$basedir/../acorn/bin/acorn" $args |
|||
} else { |
|||
& "$basedir/node$exe" "$basedir/../acorn/bin/acorn" $args |
|||
} |
|||
$ret=$LASTEXITCODE |
|||
} else { |
|||
# Support pipeline input |
|||
if ($MyInvocation.ExpectingInput) { |
|||
$input | & "node$exe" "$basedir/../acorn/bin/acorn" $args |
|||
} else { |
|||
& "node$exe" "$basedir/../acorn/bin/acorn" $args |
|||
} |
|||
$ret=$LASTEXITCODE |
|||
} |
|||
exit $ret |
@ -0,0 +1,12 @@ |
|||
#!/bin/sh |
|||
basedir=$(dirname "$(echo "$0" | sed -e 's,\\,/,g')") |
|||
|
|||
case `uname` in |
|||
*CYGWIN*|*MINGW*|*MSYS*) basedir=`cygpath -w "$basedir"`;; |
|||
esac |
|||
|
|||
if [ -x "$basedir/node" ]; then |
|||
exec "$basedir/node" "$basedir/../atob/bin/atob.js" "$@" |
|||
else |
|||
exec node "$basedir/../atob/bin/atob.js" "$@" |
|||
fi |
@ -0,0 +1,17 @@ |
|||
@ECHO off |
|||
GOTO start |
|||
:find_dp0 |
|||
SET dp0=%~dp0 |
|||
EXIT /b |
|||
:start |
|||
SETLOCAL |
|||
CALL :find_dp0 |
|||
|
|||
IF EXIST "%dp0%\node.exe" ( |
|||
SET "_prog=%dp0%\node.exe" |
|||
) ELSE ( |
|||
SET "_prog=node" |
|||
SET PATHEXT=%PATHEXT:;.JS;=;% |
|||
) |
|||
|
|||
endLocal & goto #_undefined_# 2>NUL || title %COMSPEC% & "%_prog%" "%dp0%\..\atob\bin\atob.js" %* |
@ -0,0 +1,28 @@ |
|||
#!/usr/bin/env pwsh |
|||
$basedir=Split-Path $MyInvocation.MyCommand.Definition -Parent |
|||
|
|||
$exe="" |
|||
if ($PSVersionTable.PSVersion -lt "6.0" -or $IsWindows) { |
|||
# Fix case when both the Windows and Linux builds of Node |
|||
# are installed in the same directory |
|||
$exe=".exe" |
|||
} |
|||
$ret=0 |
|||
if (Test-Path "$basedir/node$exe") { |
|||
# Support pipeline input |
|||
if ($MyInvocation.ExpectingInput) { |
|||
$input | & "$basedir/node$exe" "$basedir/../atob/bin/atob.js" $args |
|||
} else { |
|||
& "$basedir/node$exe" "$basedir/../atob/bin/atob.js" $args |
|||
} |
|||
$ret=$LASTEXITCODE |
|||
} else { |
|||
# Support pipeline input |
|||
if ($MyInvocation.ExpectingInput) { |
|||
$input | & "node$exe" "$basedir/../atob/bin/atob.js" $args |
|||
} else { |
|||
& "node$exe" "$basedir/../atob/bin/atob.js" $args |
|||
} |
|||
$ret=$LASTEXITCODE |
|||
} |
|||
exit $ret |
@ -0,0 +1,12 @@ |
|||
#!/bin/sh |
|||
basedir=$(dirname "$(echo "$0" | sed -e 's,\\,/,g')") |
|||
|
|||
case `uname` in |
|||
*CYGWIN*|*MINGW*|*MSYS*) basedir=`cygpath -w "$basedir"`;; |
|||
esac |
|||
|
|||
if [ -x "$basedir/node" ]; then |
|||
exec "$basedir/node" "$basedir/../errno/cli.js" "$@" |
|||
else |
|||
exec node "$basedir/../errno/cli.js" "$@" |
|||
fi |
@ -0,0 +1,17 @@ |
|||
@ECHO off |
|||
GOTO start |
|||
:find_dp0 |
|||
SET dp0=%~dp0 |
|||
EXIT /b |
|||
:start |
|||
SETLOCAL |
|||
CALL :find_dp0 |
|||
|
|||
IF EXIST "%dp0%\node.exe" ( |
|||
SET "_prog=%dp0%\node.exe" |
|||
) ELSE ( |
|||
SET "_prog=node" |
|||
SET PATHEXT=%PATHEXT:;.JS;=;% |
|||
) |
|||
|
|||
endLocal & goto #_undefined_# 2>NUL || title %COMSPEC% & "%_prog%" "%dp0%\..\errno\cli.js" %* |
@ -0,0 +1,28 @@ |
|||
#!/usr/bin/env pwsh |
|||
$basedir=Split-Path $MyInvocation.MyCommand.Definition -Parent |
|||
|
|||
$exe="" |
|||
if ($PSVersionTable.PSVersion -lt "6.0" -or $IsWindows) { |
|||
# Fix case when both the Windows and Linux builds of Node |
|||
# are installed in the same directory |
|||
$exe=".exe" |
|||
} |
|||
$ret=0 |
|||
if (Test-Path "$basedir/node$exe") { |
|||
# Support pipeline input |
|||
if ($MyInvocation.ExpectingInput) { |
|||
$input | & "$basedir/node$exe" "$basedir/../errno/cli.js" $args |
|||
} else { |
|||
& "$basedir/node$exe" "$basedir/../errno/cli.js" $args |
|||
} |
|||
$ret=$LASTEXITCODE |
|||
} else { |
|||
# Support pipeline input |
|||
if ($MyInvocation.ExpectingInput) { |
|||
$input | & "node$exe" "$basedir/../errno/cli.js" $args |
|||
} else { |
|||
& "node$exe" "$basedir/../errno/cli.js" $args |
|||
} |
|||
$ret=$LASTEXITCODE |
|||
} |
|||
exit $ret |
@ -0,0 +1,12 @@ |
|||
#!/bin/sh |
|||
basedir=$(dirname "$(echo "$0" | sed -e 's,\\,/,g')") |
|||
|
|||
case `uname` in |
|||
*CYGWIN*|*MINGW*|*MSYS*) basedir=`cygpath -w "$basedir"`;; |
|||
esac |
|||
|
|||
if [ -x "$basedir/node" ]; then |
|||
exec "$basedir/node" "$basedir/../eslint/bin/eslint.js" "$@" |
|||
else |
|||
exec node "$basedir/../eslint/bin/eslint.js" "$@" |
|||
fi |
@ -0,0 +1,17 @@ |
|||
@ECHO off |
|||
GOTO start |
|||
:find_dp0 |
|||
SET dp0=%~dp0 |
|||
EXIT /b |
|||
:start |
|||
SETLOCAL |
|||
CALL :find_dp0 |
|||
|
|||
IF EXIST "%dp0%\node.exe" ( |
|||
SET "_prog=%dp0%\node.exe" |
|||
) ELSE ( |
|||
SET "_prog=node" |
|||
SET PATHEXT=%PATHEXT:;.JS;=;% |
|||
) |
|||
|
|||
endLocal & goto #_undefined_# 2>NUL || title %COMSPEC% & "%_prog%" "%dp0%\..\eslint\bin\eslint.js" %* |
@ -0,0 +1,28 @@ |
|||
#!/usr/bin/env pwsh |
|||
$basedir=Split-Path $MyInvocation.MyCommand.Definition -Parent |
|||
|
|||
$exe="" |
|||
if ($PSVersionTable.PSVersion -lt "6.0" -or $IsWindows) { |
|||
# Fix case when both the Windows and Linux builds of Node |
|||
# are installed in the same directory |
|||
$exe=".exe" |
|||
} |
|||
$ret=0 |
|||
if (Test-Path "$basedir/node$exe") { |
|||
# Support pipeline input |
|||
if ($MyInvocation.ExpectingInput) { |
|||
$input | & "$basedir/node$exe" "$basedir/../eslint/bin/eslint.js" $args |
|||
} else { |
|||
& "$basedir/node$exe" "$basedir/../eslint/bin/eslint.js" $args |
|||
} |
|||
$ret=$LASTEXITCODE |
|||
} else { |
|||
# Support pipeline input |
|||
if ($MyInvocation.ExpectingInput) { |
|||
$input | & "node$exe" "$basedir/../eslint/bin/eslint.js" $args |
|||
} else { |
|||
& "node$exe" "$basedir/../eslint/bin/eslint.js" $args |
|||
} |
|||
$ret=$LASTEXITCODE |
|||
} |
|||
exit $ret |
@ -0,0 +1,12 @@ |
|||
#!/bin/sh |
|||
basedir=$(dirname "$(echo "$0" | sed -e 's,\\,/,g')") |
|||
|
|||
case `uname` in |
|||
*CYGWIN*|*MINGW*|*MSYS*) basedir=`cygpath -w "$basedir"`;; |
|||
esac |
|||
|
|||
if [ -x "$basedir/node" ]; then |
|||
exec "$basedir/node" "$basedir/../js-yaml/bin/js-yaml.js" "$@" |
|||
else |
|||
exec node "$basedir/../js-yaml/bin/js-yaml.js" "$@" |
|||
fi |
@ -0,0 +1,17 @@ |
|||
@ECHO off |
|||
GOTO start |
|||
:find_dp0 |
|||
SET dp0=%~dp0 |
|||
EXIT /b |
|||
:start |
|||
SETLOCAL |
|||
CALL :find_dp0 |
|||
|
|||
IF EXIST "%dp0%\node.exe" ( |
|||
SET "_prog=%dp0%\node.exe" |
|||
) ELSE ( |
|||
SET "_prog=node" |
|||
SET PATHEXT=%PATHEXT:;.JS;=;% |
|||
) |
|||
|
|||
endLocal & goto #_undefined_# 2>NUL || title %COMSPEC% & "%_prog%" "%dp0%\..\js-yaml\bin\js-yaml.js" %* |
@ -0,0 +1,28 @@ |
|||
#!/usr/bin/env pwsh |
|||
$basedir=Split-Path $MyInvocation.MyCommand.Definition -Parent |
|||
|
|||
$exe="" |
|||
if ($PSVersionTable.PSVersion -lt "6.0" -or $IsWindows) { |
|||
# Fix case when both the Windows and Linux builds of Node |
|||
# are installed in the same directory |
|||
$exe=".exe" |
|||
} |
|||
$ret=0 |
|||
if (Test-Path "$basedir/node$exe") { |
|||
# Support pipeline input |
|||
if ($MyInvocation.ExpectingInput) { |
|||
$input | & "$basedir/node$exe" "$basedir/../js-yaml/bin/js-yaml.js" $args |
|||
} else { |
|||
& "$basedir/node$exe" "$basedir/../js-yaml/bin/js-yaml.js" $args |
|||
} |
|||
$ret=$LASTEXITCODE |
|||
} else { |
|||
# Support pipeline input |
|||
if ($MyInvocation.ExpectingInput) { |
|||
$input | & "node$exe" "$basedir/../js-yaml/bin/js-yaml.js" $args |
|||
} else { |
|||
& "node$exe" "$basedir/../js-yaml/bin/js-yaml.js" $args |
|||
} |
|||
$ret=$LASTEXITCODE |
|||
} |
|||
exit $ret |
@ -0,0 +1,12 @@ |
|||
#!/bin/sh |
|||
basedir=$(dirname "$(echo "$0" | sed -e 's,\\,/,g')") |
|||
|
|||
case `uname` in |
|||
*CYGWIN*|*MINGW*|*MSYS*) basedir=`cygpath -w "$basedir"`;; |
|||
esac |
|||
|
|||
if [ -x "$basedir/node" ]; then |
|||
exec "$basedir/node" "$basedir/../json5/lib/cli.js" "$@" |
|||
else |
|||
exec node "$basedir/../json5/lib/cli.js" "$@" |
|||
fi |
@ -0,0 +1,17 @@ |
|||
@ECHO off |
|||
GOTO start |
|||
:find_dp0 |
|||
SET dp0=%~dp0 |
|||
EXIT /b |
|||
:start |
|||
SETLOCAL |
|||
CALL :find_dp0 |
|||
|
|||
IF EXIST "%dp0%\node.exe" ( |
|||
SET "_prog=%dp0%\node.exe" |
|||
) ELSE ( |
|||
SET "_prog=node" |
|||
SET PATHEXT=%PATHEXT:;.JS;=;% |
|||
) |
|||
|
|||
endLocal & goto #_undefined_# 2>NUL || title %COMSPEC% & "%_prog%" "%dp0%\..\json5\lib\cli.js" %* |
@ -0,0 +1,28 @@ |
|||
#!/usr/bin/env pwsh |
|||
$basedir=Split-Path $MyInvocation.MyCommand.Definition -Parent |
|||
|
|||
$exe="" |
|||
if ($PSVersionTable.PSVersion -lt "6.0" -or $IsWindows) { |
|||
# Fix case when both the Windows and Linux builds of Node |
|||
# are installed in the same directory |
|||
$exe=".exe" |
|||
} |
|||
$ret=0 |
|||
if (Test-Path "$basedir/node$exe") { |
|||
# Support pipeline input |
|||
if ($MyInvocation.ExpectingInput) { |
|||
$input | & "$basedir/node$exe" "$basedir/../json5/lib/cli.js" $args |
|||
} else { |
|||
& "$basedir/node$exe" "$basedir/../json5/lib/cli.js" $args |
|||
} |
|||
$ret=$LASTEXITCODE |
|||
} else { |
|||
# Support pipeline input |
|||
if ($MyInvocation.ExpectingInput) { |
|||
$input | & "node$exe" "$basedir/../json5/lib/cli.js" $args |
|||
} else { |
|||
& "node$exe" "$basedir/../json5/lib/cli.js" $args |
|||
} |
|||
$ret=$LASTEXITCODE |
|||
} |
|||
exit $ret |
@ -0,0 +1,12 @@ |
|||
#!/bin/sh |
|||
basedir=$(dirname "$(echo "$0" | sed -e 's,\\,/,g')") |
|||
|
|||
case `uname` in |
|||
*CYGWIN*|*MINGW*|*MSYS*) basedir=`cygpath -w "$basedir"`;; |
|||
esac |
|||
|
|||
if [ -x "$basedir/node" ]; then |
|||
exec "$basedir/node" "$basedir/../loose-envify/cli.js" "$@" |
|||
else |
|||
exec node "$basedir/../loose-envify/cli.js" "$@" |
|||
fi |
@ -0,0 +1,17 @@ |
|||
@ECHO off |
|||
GOTO start |
|||
:find_dp0 |
|||
SET dp0=%~dp0 |
|||
EXIT /b |
|||
:start |
|||
SETLOCAL |
|||
CALL :find_dp0 |
|||
|
|||
IF EXIST "%dp0%\node.exe" ( |
|||
SET "_prog=%dp0%\node.exe" |
|||
) ELSE ( |
|||
SET "_prog=node" |
|||
SET PATHEXT=%PATHEXT:;.JS;=;% |
|||
) |
|||
|
|||
endLocal & goto #_undefined_# 2>NUL || title %COMSPEC% & "%_prog%" "%dp0%\..\loose-envify\cli.js" %* |
@ -0,0 +1,28 @@ |
|||
#!/usr/bin/env pwsh |
|||
$basedir=Split-Path $MyInvocation.MyCommand.Definition -Parent |
|||
|
|||
$exe="" |
|||
if ($PSVersionTable.PSVersion -lt "6.0" -or $IsWindows) { |
|||
# Fix case when both the Windows and Linux builds of Node |
|||
# are installed in the same directory |
|||
$exe=".exe" |
|||
} |
|||
$ret=0 |
|||
if (Test-Path "$basedir/node$exe") { |
|||
# Support pipeline input |
|||
if ($MyInvocation.ExpectingInput) { |
|||
$input | & "$basedir/node$exe" "$basedir/../loose-envify/cli.js" $args |
|||
} else { |
|||
& "$basedir/node$exe" "$basedir/../loose-envify/cli.js" $args |
|||
} |
|||
$ret=$LASTEXITCODE |
|||
} else { |
|||
# Support pipeline input |
|||
if ($MyInvocation.ExpectingInput) { |
|||
$input | & "node$exe" "$basedir/../loose-envify/cli.js" $args |
|||
} else { |
|||
& "node$exe" "$basedir/../loose-envify/cli.js" $args |
|||
} |
|||
$ret=$LASTEXITCODE |
|||
} |
|||
exit $ret |
@ -0,0 +1,12 @@ |
|||
#!/bin/sh |
|||
basedir=$(dirname "$(echo "$0" | sed -e 's,\\,/,g')") |
|||
|
|||
case `uname` in |
|||
*CYGWIN*|*MINGW*|*MSYS*) basedir=`cygpath -w "$basedir"`;; |
|||
esac |
|||
|
|||
if [ -x "$basedir/node" ]; then |
|||
exec "$basedir/node" "$basedir/../miller-rabin/bin/miller-rabin" "$@" |
|||
else |
|||
exec node "$basedir/../miller-rabin/bin/miller-rabin" "$@" |
|||
fi |
@ -0,0 +1,17 @@ |
|||
@ECHO off |
|||
GOTO start |
|||
:find_dp0 |
|||
SET dp0=%~dp0 |
|||
EXIT /b |
|||
:start |
|||
SETLOCAL |
|||
CALL :find_dp0 |
|||
|
|||
IF EXIST "%dp0%\node.exe" ( |
|||
SET "_prog=%dp0%\node.exe" |
|||
) ELSE ( |
|||
SET "_prog=node" |
|||
SET PATHEXT=%PATHEXT:;.JS;=;% |
|||
) |
|||
|
|||
endLocal & goto #_undefined_# 2>NUL || title %COMSPEC% & "%_prog%" "%dp0%\..\miller-rabin\bin\miller-rabin" %* |
@ -0,0 +1,28 @@ |
|||
#!/usr/bin/env pwsh |
|||
$basedir=Split-Path $MyInvocation.MyCommand.Definition -Parent |
|||
|
|||
$exe="" |
|||
if ($PSVersionTable.PSVersion -lt "6.0" -or $IsWindows) { |
|||
# Fix case when both the Windows and Linux builds of Node |
|||
# are installed in the same directory |
|||
$exe=".exe" |
|||
} |
|||
$ret=0 |
|||
if (Test-Path "$basedir/node$exe") { |
|||
# Support pipeline input |
|||
if ($MyInvocation.ExpectingInput) { |
|||
$input | & "$basedir/node$exe" "$basedir/../miller-rabin/bin/miller-rabin" $args |
|||
} else { |
|||
& "$basedir/node$exe" "$basedir/../miller-rabin/bin/miller-rabin" $args |
|||
} |
|||
$ret=$LASTEXITCODE |
|||
} else { |
|||
# Support pipeline input |
|||
if ($MyInvocation.ExpectingInput) { |
|||
$input | & "node$exe" "$basedir/../miller-rabin/bin/miller-rabin" $args |
|||
} else { |
|||
& "node$exe" "$basedir/../miller-rabin/bin/miller-rabin" $args |
|||
} |
|||
$ret=$LASTEXITCODE |
|||
} |
|||
exit $ret |
@ -0,0 +1,12 @@ |
|||
#!/bin/sh |
|||
basedir=$(dirname "$(echo "$0" | sed -e 's,\\,/,g')") |
|||
|
|||
case `uname` in |
|||
*CYGWIN*|*MINGW*|*MSYS*) basedir=`cygpath -w "$basedir"`;; |
|||
esac |
|||
|
|||
if [ -x "$basedir/node" ]; then |
|||
exec "$basedir/node" "$basedir/../mkdirp/bin/cmd.js" "$@" |
|||
else |
|||
exec node "$basedir/../mkdirp/bin/cmd.js" "$@" |
|||
fi |
@ -0,0 +1,17 @@ |
|||
@ECHO off |
|||
GOTO start |
|||
:find_dp0 |
|||
SET dp0=%~dp0 |
|||
EXIT /b |
|||
:start |
|||
SETLOCAL |
|||
CALL :find_dp0 |
|||
|
|||
IF EXIST "%dp0%\node.exe" ( |
|||
SET "_prog=%dp0%\node.exe" |
|||
) ELSE ( |
|||
SET "_prog=node" |
|||
SET PATHEXT=%PATHEXT:;.JS;=;% |
|||
) |
|||
|
|||
endLocal & goto #_undefined_# 2>NUL || title %COMSPEC% & "%_prog%" "%dp0%\..\mkdirp\bin\cmd.js" %* |
@ -0,0 +1,28 @@ |
|||
#!/usr/bin/env pwsh |
|||
$basedir=Split-Path $MyInvocation.MyCommand.Definition -Parent |
|||
|
|||
$exe="" |
|||
if ($PSVersionTable.PSVersion -lt "6.0" -or $IsWindows) { |
|||
# Fix case when both the Windows and Linux builds of Node |
|||
# are installed in the same directory |
|||
$exe=".exe" |
|||
} |
|||
$ret=0 |
|||
if (Test-Path "$basedir/node$exe") { |
|||
# Support pipeline input |
|||
if ($MyInvocation.ExpectingInput) { |
|||
$input | & "$basedir/node$exe" "$basedir/../mkdirp/bin/cmd.js" $args |
|||
} else { |
|||
& "$basedir/node$exe" "$basedir/../mkdirp/bin/cmd.js" $args |
|||
} |
|||
$ret=$LASTEXITCODE |
|||
} else { |
|||
# Support pipeline input |
|||
if ($MyInvocation.ExpectingInput) { |
|||
$input | & "node$exe" "$basedir/../mkdirp/bin/cmd.js" $args |
|||
} else { |
|||
& "node$exe" "$basedir/../mkdirp/bin/cmd.js" $args |
|||
} |
|||
$ret=$LASTEXITCODE |
|||
} |
|||
exit $ret |
@ -0,0 +1,12 @@ |
|||
#!/bin/sh |
|||
basedir=$(dirname "$(echo "$0" | sed -e 's,\\,/,g')") |
|||
|
|||
case `uname` in |
|||
*CYGWIN*|*MINGW*|*MSYS*) basedir=`cygpath -w "$basedir"`;; |
|||
esac |
|||
|
|||
if [ -x "$basedir/node" ]; then |
|||
exec "$basedir/node" "$basedir/../nanoid/bin/nanoid.cjs" "$@" |
|||
else |
|||
exec node "$basedir/../nanoid/bin/nanoid.cjs" "$@" |
|||
fi |
@ -0,0 +1,17 @@ |
|||
@ECHO off |
|||
GOTO start |
|||
:find_dp0 |
|||
SET dp0=%~dp0 |
|||
EXIT /b |
|||
:start |
|||
SETLOCAL |
|||
CALL :find_dp0 |
|||
|
|||
IF EXIST "%dp0%\node.exe" ( |
|||
SET "_prog=%dp0%\node.exe" |
|||
) ELSE ( |
|||
SET "_prog=node" |
|||
SET PATHEXT=%PATHEXT:;.JS;=;% |
|||
) |
|||
|
|||
endLocal & goto #_undefined_# 2>NUL || title %COMSPEC% & "%_prog%" "%dp0%\..\nanoid\bin\nanoid.cjs" %* |
@ -0,0 +1,28 @@ |
|||
#!/usr/bin/env pwsh |
|||
$basedir=Split-Path $MyInvocation.MyCommand.Definition -Parent |
|||
|
|||
$exe="" |
|||
if ($PSVersionTable.PSVersion -lt "6.0" -or $IsWindows) { |
|||
# Fix case when both the Windows and Linux builds of Node |
|||
# are installed in the same directory |
|||
$exe=".exe" |
|||
} |
|||
$ret=0 |
|||
if (Test-Path "$basedir/node$exe") { |
|||
# Support pipeline input |
|||
if ($MyInvocation.ExpectingInput) { |
|||
$input | & "$basedir/node$exe" "$basedir/../nanoid/bin/nanoid.cjs" $args |
|||
} else { |
|||
& "$basedir/node$exe" "$basedir/../nanoid/bin/nanoid.cjs" $args |
|||
} |
|||
$ret=$LASTEXITCODE |
|||
} else { |
|||
# Support pipeline input |
|||
if ($MyInvocation.ExpectingInput) { |
|||
$input | & "node$exe" "$basedir/../nanoid/bin/nanoid.cjs" $args |
|||
} else { |
|||
& "node$exe" "$basedir/../nanoid/bin/nanoid.cjs" $args |
|||
} |
|||
$ret=$LASTEXITCODE |
|||
} |
|||
exit $ret |
@ -0,0 +1,12 @@ |
|||
#!/bin/sh |
|||
basedir=$(dirname "$(echo "$0" | sed -e 's,\\,/,g')") |
|||
|
|||
case `uname` in |
|||
*CYGWIN*|*MINGW*|*MSYS*) basedir=`cygpath -w "$basedir"`;; |
|||
esac |
|||
|
|||
if [ -x "$basedir/node" ]; then |
|||
exec "$basedir/node" "$basedir/../which/bin/node-which" "$@" |
|||
else |
|||
exec node "$basedir/../which/bin/node-which" "$@" |
|||
fi |
@ -0,0 +1,17 @@ |
|||
@ECHO off |
|||
GOTO start |
|||
:find_dp0 |
|||
SET dp0=%~dp0 |
|||
EXIT /b |
|||
:start |
|||
SETLOCAL |
|||
CALL :find_dp0 |
|||
|
|||
IF EXIST "%dp0%\node.exe" ( |
|||
SET "_prog=%dp0%\node.exe" |
|||
) ELSE ( |
|||
SET "_prog=node" |
|||
SET PATHEXT=%PATHEXT:;.JS;=;% |
|||
) |
|||
|
|||
endLocal & goto #_undefined_# 2>NUL || title %COMSPEC% & "%_prog%" "%dp0%\..\which\bin\node-which" %* |
@ -0,0 +1,28 @@ |
|||
#!/usr/bin/env pwsh |
|||
$basedir=Split-Path $MyInvocation.MyCommand.Definition -Parent |
|||
|
|||
$exe="" |
|||
if ($PSVersionTable.PSVersion -lt "6.0" -or $IsWindows) { |
|||
# Fix case when both the Windows and Linux builds of Node |
|||
# are installed in the same directory |
|||
$exe=".exe" |
|||
} |
|||
$ret=0 |
|||
if (Test-Path "$basedir/node$exe") { |
|||
# Support pipeline input |
|||
if ($MyInvocation.ExpectingInput) { |
|||
$input | & "$basedir/node$exe" "$basedir/../which/bin/node-which" $args |
|||
} else { |
|||
& "$basedir/node$exe" "$basedir/../which/bin/node-which" $args |
|||
} |
|||
$ret=$LASTEXITCODE |
|||
} else { |
|||
# Support pipeline input |
|||
if ($MyInvocation.ExpectingInput) { |
|||
$input | & "node$exe" "$basedir/../which/bin/node-which" $args |
|||
} else { |
|||
& "node$exe" "$basedir/../which/bin/node-which" $args |
|||
} |
|||
$ret=$LASTEXITCODE |
|||
} |
|||
exit $ret |
@ -0,0 +1,12 @@ |
|||
#!/bin/sh |
|||
basedir=$(dirname "$(echo "$0" | sed -e 's,\\,/,g')") |
|||
|
|||
case `uname` in |
|||
*CYGWIN*|*MINGW*|*MSYS*) basedir=`cygpath -w "$basedir"`;; |
|||
esac |
|||
|
|||
if [ -x "$basedir/node" ]; then |
|||
exec "$basedir/node" "$basedir/../resolve/bin/resolve" "$@" |
|||
else |
|||
exec node "$basedir/../resolve/bin/resolve" "$@" |
|||
fi |
@ -0,0 +1,17 @@ |
|||
@ECHO off |
|||
GOTO start |
|||
:find_dp0 |
|||
SET dp0=%~dp0 |
|||
EXIT /b |
|||
:start |
|||
SETLOCAL |
|||
CALL :find_dp0 |
|||
|
|||
IF EXIST "%dp0%\node.exe" ( |
|||
SET "_prog=%dp0%\node.exe" |
|||
) ELSE ( |
|||
SET "_prog=node" |
|||
SET PATHEXT=%PATHEXT:;.JS;=;% |
|||
) |
|||
|
|||
endLocal & goto #_undefined_# 2>NUL || title %COMSPEC% & "%_prog%" "%dp0%\..\resolve\bin\resolve" %* |
@ -0,0 +1,28 @@ |
|||
#!/usr/bin/env pwsh |
|||
$basedir=Split-Path $MyInvocation.MyCommand.Definition -Parent |
|||
|
|||
$exe="" |
|||
if ($PSVersionTable.PSVersion -lt "6.0" -or $IsWindows) { |
|||
# Fix case when both the Windows and Linux builds of Node |
|||
# are installed in the same directory |
|||
$exe=".exe" |
|||
} |
|||
$ret=0 |
|||
if (Test-Path "$basedir/node$exe") { |
|||
# Support pipeline input |
|||
if ($MyInvocation.ExpectingInput) { |
|||
$input | & "$basedir/node$exe" "$basedir/../resolve/bin/resolve" $args |
|||
} else { |
|||
& "$basedir/node$exe" "$basedir/../resolve/bin/resolve" $args |
|||
} |
|||
$ret=$LASTEXITCODE |
|||
} else { |
|||
# Support pipeline input |
|||
if ($MyInvocation.ExpectingInput) { |
|||
$input | & "node$exe" "$basedir/../resolve/bin/resolve" $args |
|||
} else { |
|||
& "node$exe" "$basedir/../resolve/bin/resolve" $args |
|||
} |
|||
$ret=$LASTEXITCODE |
|||
} |
|||
exit $ret |
@ -0,0 +1,12 @@ |
|||
#!/bin/sh |
|||
basedir=$(dirname "$(echo "$0" | sed -e 's,\\,/,g')") |
|||
|
|||
case `uname` in |
|||
*CYGWIN*|*MINGW*|*MSYS*) basedir=`cygpath -w "$basedir"`;; |
|||
esac |
|||
|
|||
if [ -x "$basedir/node" ]; then |
|||
exec "$basedir/node" "$basedir/../rimraf/bin.js" "$@" |
|||
else |
|||
exec node "$basedir/../rimraf/bin.js" "$@" |
|||
fi |
@ -0,0 +1,17 @@ |
|||
@ECHO off |
|||
GOTO start |
|||
:find_dp0 |
|||
SET dp0=%~dp0 |
|||
EXIT /b |
|||
:start |
|||
SETLOCAL |
|||
CALL :find_dp0 |
|||
|
|||
IF EXIST "%dp0%\node.exe" ( |
|||
SET "_prog=%dp0%\node.exe" |
|||
) ELSE ( |
|||
SET "_prog=node" |
|||
SET PATHEXT=%PATHEXT:;.JS;=;% |
|||
) |
|||
|
|||
endLocal & goto #_undefined_# 2>NUL || title %COMSPEC% & "%_prog%" "%dp0%\..\rimraf\bin.js" %* |
@ -0,0 +1,28 @@ |
|||
#!/usr/bin/env pwsh |
|||
$basedir=Split-Path $MyInvocation.MyCommand.Definition -Parent |
|||
|
|||
$exe="" |
|||
if ($PSVersionTable.PSVersion -lt "6.0" -or $IsWindows) { |
|||
# Fix case when both the Windows and Linux builds of Node |
|||
# are installed in the same directory |
|||
$exe=".exe" |
|||
} |
|||
$ret=0 |
|||
if (Test-Path "$basedir/node$exe") { |
|||
# Support pipeline input |
|||
if ($MyInvocation.ExpectingInput) { |
|||
$input | & "$basedir/node$exe" "$basedir/../rimraf/bin.js" $args |
|||
} else { |
|||
& "$basedir/node$exe" "$basedir/../rimraf/bin.js" $args |
|||
} |
|||
$ret=$LASTEXITCODE |
|||
} else { |
|||
# Support pipeline input |
|||
if ($MyInvocation.ExpectingInput) { |
|||
$input | & "node$exe" "$basedir/../rimraf/bin.js" $args |
|||
} else { |
|||
& "node$exe" "$basedir/../rimraf/bin.js" $args |
|||
} |
|||
$ret=$LASTEXITCODE |
|||
} |
|||
exit $ret |
@ -0,0 +1,12 @@ |
|||
#!/bin/sh |
|||
basedir=$(dirname "$(echo "$0" | sed -e 's,\\,/,g')") |
|||
|
|||
case `uname` in |
|||
*CYGWIN*|*MINGW*|*MSYS*) basedir=`cygpath -w "$basedir"`;; |
|||
esac |
|||
|
|||
if [ -x "$basedir/node" ]; then |
|||
exec "$basedir/node" "$basedir/../semver/bin/semver.js" "$@" |
|||
else |
|||
exec node "$basedir/../semver/bin/semver.js" "$@" |
|||
fi |
@ -0,0 +1,17 @@ |
|||
@ECHO off |
|||
GOTO start |
|||
:find_dp0 |
|||
SET dp0=%~dp0 |
|||
EXIT /b |
|||
:start |
|||
SETLOCAL |
|||
CALL :find_dp0 |
|||
|
|||
IF EXIST "%dp0%\node.exe" ( |
|||
SET "_prog=%dp0%\node.exe" |
|||
) ELSE ( |
|||
SET "_prog=node" |
|||
SET PATHEXT=%PATHEXT:;.JS;=;% |
|||
) |
|||
|
|||
endLocal & goto #_undefined_# 2>NUL || title %COMSPEC% & "%_prog%" "%dp0%\..\semver\bin\semver.js" %* |
@ -0,0 +1,28 @@ |
|||
#!/usr/bin/env pwsh |
|||
$basedir=Split-Path $MyInvocation.MyCommand.Definition -Parent |
|||
|
|||
$exe="" |
|||
if ($PSVersionTable.PSVersion -lt "6.0" -or $IsWindows) { |
|||
# Fix case when both the Windows and Linux builds of Node |
|||
# are installed in the same directory |
|||
$exe=".exe" |
|||
} |
|||
$ret=0 |
|||
if (Test-Path "$basedir/node$exe") { |
|||
# Support pipeline input |
|||
if ($MyInvocation.ExpectingInput) { |
|||
$input | & "$basedir/node$exe" "$basedir/../semver/bin/semver.js" $args |
|||
} else { |
|||
& "$basedir/node$exe" "$basedir/../semver/bin/semver.js" $args |
|||
} |
|||
$ret=$LASTEXITCODE |
|||
} else { |
|||
# Support pipeline input |
|||
if ($MyInvocation.ExpectingInput) { |
|||
$input | & "node$exe" "$basedir/../semver/bin/semver.js" $args |
|||
} else { |
|||
& "node$exe" "$basedir/../semver/bin/semver.js" $args |
|||
} |
|||
$ret=$LASTEXITCODE |
|||
} |
|||
exit $ret |
@ -0,0 +1,12 @@ |
|||
#!/bin/sh
|
|||
basedir=$(dirname "$(echo "$0" | sed -e 's,\\,/,g')") |
|||
|
|||
case `uname` in |
|||
*CYGWIN*|*MINGW*|*MSYS*) basedir=`cygpath -w "$basedir"`;; |
|||
esac |
|||
|
|||
if [ -x "$basedir/node" ]; then |
|||
exec "$basedir/node" "$basedir/../sha.js/bin.js" "$@" |
|||
else |
|||
exec node "$basedir/../sha.js/bin.js" "$@" |
|||
fi |
@ -0,0 +1,17 @@ |
|||
@ECHO off |
|||
GOTO start |
|||
:find_dp0 |
|||
SET dp0=%~dp0 |
|||
EXIT /b |
|||
:start |
|||
SETLOCAL |
|||
CALL :find_dp0 |
|||
|
|||
IF EXIST "%dp0%\node.exe" ( |
|||
SET "_prog=%dp0%\node.exe" |
|||
) ELSE ( |
|||
SET "_prog=node" |
|||
SET PATHEXT=%PATHEXT:;.JS;=;% |
|||
) |
|||
|
|||
endLocal & goto #_undefined_# 2>NUL || title %COMSPEC% & "%_prog%" "%dp0%\..\sha.js\bin.js" %* |
@ -0,0 +1,28 @@ |
|||
#!/usr/bin/env pwsh |
|||
$basedir=Split-Path $MyInvocation.MyCommand.Definition -Parent |
|||
|
|||
$exe="" |
|||
if ($PSVersionTable.PSVersion -lt "6.0" -or $IsWindows) { |
|||
# Fix case when both the Windows and Linux builds of Node |
|||
# are installed in the same directory |
|||
$exe=".exe" |
|||
} |
|||
$ret=0 |
|||
if (Test-Path "$basedir/node$exe") { |
|||
# Support pipeline input |
|||
if ($MyInvocation.ExpectingInput) { |
|||
$input | & "$basedir/node$exe" "$basedir/../sha.js/bin.js" $args |
|||
} else { |
|||
& "$basedir/node$exe" "$basedir/../sha.js/bin.js" $args |
|||
} |
|||
$ret=$LASTEXITCODE |
|||
} else { |
|||
# Support pipeline input |
|||
if ($MyInvocation.ExpectingInput) { |
|||
$input | & "node$exe" "$basedir/../sha.js/bin.js" $args |
|||
} else { |
|||
& "node$exe" "$basedir/../sha.js/bin.js" $args |
|||
} |
|||
$ret=$LASTEXITCODE |
|||
} |
|||
exit $ret |
@ -0,0 +1,12 @@ |
|||
#!/bin/sh |
|||
basedir=$(dirname "$(echo "$0" | sed -e 's,\\,/,g')") |
|||
|
|||
case `uname` in |
|||
*CYGWIN*|*MINGW*|*MSYS*) basedir=`cygpath -w "$basedir"`;; |
|||
esac |
|||
|
|||
if [ -x "$basedir/node" ]; then |
|||
exec "$basedir/node" "$basedir/../terser/bin/terser" "$@" |
|||
else |
|||
exec node "$basedir/../terser/bin/terser" "$@" |
|||
fi |
@ -0,0 +1,17 @@ |
|||
@ECHO off |
|||
GOTO start |
|||
:find_dp0 |
|||
SET dp0=%~dp0 |
|||
EXIT /b |
|||
:start |
|||
SETLOCAL |
|||
CALL :find_dp0 |
|||
|
|||
IF EXIST "%dp0%\node.exe" ( |
|||
SET "_prog=%dp0%\node.exe" |
|||
) ELSE ( |
|||
SET "_prog=node" |
|||
SET PATHEXT=%PATHEXT:;.JS;=;% |
|||
) |
|||
|
|||
endLocal & goto #_undefined_# 2>NUL || title %COMSPEC% & "%_prog%" "%dp0%\..\terser\bin\terser" %* |
@ -0,0 +1,28 @@ |
|||
#!/usr/bin/env pwsh |
|||
$basedir=Split-Path $MyInvocation.MyCommand.Definition -Parent |
|||
|
|||
$exe="" |
|||
if ($PSVersionTable.PSVersion -lt "6.0" -or $IsWindows) { |
|||
# Fix case when both the Windows and Linux builds of Node |
|||
# are installed in the same directory |
|||
$exe=".exe" |
|||
} |
|||
$ret=0 |
|||
if (Test-Path "$basedir/node$exe") { |
|||
# Support pipeline input |
|||
if ($MyInvocation.ExpectingInput) { |
|||
$input | & "$basedir/node$exe" "$basedir/../terser/bin/terser" $args |
|||
} else { |
|||
& "$basedir/node$exe" "$basedir/../terser/bin/terser" $args |
|||
} |
|||
$ret=$LASTEXITCODE |
|||
} else { |
|||
# Support pipeline input |
|||
if ($MyInvocation.ExpectingInput) { |
|||
$input | & "node$exe" "$basedir/../terser/bin/terser" $args |
|||
} else { |
|||
& "node$exe" "$basedir/../terser/bin/terser" $args |
|||
} |
|||
$ret=$LASTEXITCODE |
|||
} |
|||
exit $ret |
@ -0,0 +1,12 @@ |
|||
#!/bin/sh |
|||
basedir=$(dirname "$(echo "$0" | sed -e 's,\\,/,g')") |
|||
|
|||
case `uname` in |
|||
*CYGWIN*|*MINGW*|*MSYS*) basedir=`cygpath -w "$basedir"`;; |
|||
esac |
|||
|
|||
if [ -x "$basedir/node" ]; then |
|||
exec "$basedir/node" "$basedir/../webpack/bin/webpack.js" "$@" |
|||
else |
|||
exec node "$basedir/../webpack/bin/webpack.js" "$@" |
|||
fi |
@ -0,0 +1,17 @@ |
|||
@ECHO off |
|||
GOTO start |
|||
:find_dp0 |
|||
SET dp0=%~dp0 |
|||
EXIT /b |
|||
:start |
|||
SETLOCAL |
|||
CALL :find_dp0 |
|||
|
|||
IF EXIST "%dp0%\node.exe" ( |
|||
SET "_prog=%dp0%\node.exe" |
|||
) ELSE ( |
|||
SET "_prog=node" |
|||
SET PATHEXT=%PATHEXT:;.JS;=;% |
|||
) |
|||
|
|||
endLocal & goto #_undefined_# 2>NUL || title %COMSPEC% & "%_prog%" "%dp0%\..\webpack\bin\webpack.js" %* |
@ -0,0 +1,28 @@ |
|||
#!/usr/bin/env pwsh |
|||
$basedir=Split-Path $MyInvocation.MyCommand.Definition -Parent |
|||
|
|||
$exe="" |
|||
if ($PSVersionTable.PSVersion -lt "6.0" -or $IsWindows) { |
|||
# Fix case when both the Windows and Linux builds of Node |
|||
# are installed in the same directory |
|||
$exe=".exe" |
|||
} |
|||
$ret=0 |
|||
if (Test-Path "$basedir/node$exe") { |
|||
# Support pipeline input |
|||
if ($MyInvocation.ExpectingInput) { |
|||
$input | & "$basedir/node$exe" "$basedir/../webpack/bin/webpack.js" $args |
|||
} else { |
|||
& "$basedir/node$exe" "$basedir/../webpack/bin/webpack.js" $args |
|||
} |
|||
$ret=$LASTEXITCODE |
|||
} else { |
|||
# Support pipeline input |
|||
if ($MyInvocation.ExpectingInput) { |
|||
$input | & "node$exe" "$basedir/../webpack/bin/webpack.js" $args |
|||
} else { |
|||
& "node$exe" "$basedir/../webpack/bin/webpack.js" $args |
|||
} |
|||
$ret=$LASTEXITCODE |
|||
} |
|||
exit $ret |
File diff suppressed because it is too large
@ -0,0 +1,21 @@ |
|||
MIT License |
|||
|
|||
Copyright (c) 2018 Toru Nagashima |
|||
|
|||
Permission is hereby granted, free of charge, to any person obtaining a copy |
|||
of this software and associated documentation files (the "Software"), to deal |
|||
in the Software without restriction, including without limitation the rights |
|||
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell |
|||
copies of the Software, and to permit persons to whom the Software is |
|||
furnished to do so, subject to the following conditions: |
|||
|
|||
The above copyright notice and this permission notice shall be included in all |
|||
copies or substantial portions of the Software. |
|||
|
|||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR |
|||
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, |
|||
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE |
|||
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER |
|||
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, |
|||
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE |
|||
SOFTWARE. |
@ -0,0 +1,37 @@ |
|||
# @eslint-community/eslint-utils |
|||
|
|||
[](https://www.npmjs.com/package/@eslint-community/eslint-utils) |
|||
[](http://www.npmtrends.com/@eslint-community/eslint-utils) |
|||
[](https://github.com/eslint-community/eslint-utils/actions) |
|||
[](https://codecov.io/gh/eslint-community/eslint-utils) |
|||
|
|||
## 🏁 Goal |
|||
|
|||
This package provides utility functions and classes for make ESLint custom rules. |
|||
|
|||
For examples: |
|||
|
|||
- [`getStaticValue`](https://eslint-community.github.io/eslint-utils/api/ast-utils.html#getstaticvalue) evaluates static value on AST. |
|||
- [`ReferenceTracker`](https://eslint-community.github.io/eslint-utils/api/scope-utils.html#referencetracker-class) checks the members of modules/globals as handling assignments and destructuring. |
|||
|
|||
## 📖 Usage |
|||
|
|||
See [documentation](https://eslint-community.github.io/eslint-utils). |
|||
|
|||
## 📰 Changelog |
|||
|
|||
See [releases](https://github.com/eslint-community/eslint-utils/releases). |
|||
|
|||
## ❤️ Contributing |
|||
|
|||
Welcome contributing! |
|||
|
|||
Please use GitHub's Issues/PRs. |
|||
|
|||
### Development Tools |
|||
|
|||
- `npm test` runs tests and measures coverage. |
|||
- `npm run clean` removes the coverage result of `npm test` command. |
|||
- `npm run coverage` shows the coverage result of the last `npm test` command. |
|||
- `npm run lint` runs ESLint. |
|||
- `npm run watch` runs tests on each file change. |
File diff suppressed because it is too large
File diff suppressed because one or more lines are too long
File diff suppressed because it is too large
File diff suppressed because one or more lines are too long
@ -0,0 +1,80 @@ |
|||
{ |
|||
"name": "@eslint-community/eslint-utils", |
|||
"version": "4.4.1", |
|||
"description": "Utilities for ESLint plugins.", |
|||
"keywords": [ |
|||
"eslint" |
|||
], |
|||
"homepage": "https://github.com/eslint-community/eslint-utils#readme", |
|||
"bugs": { |
|||
"url": "https://github.com/eslint-community/eslint-utils/issues" |
|||
}, |
|||
"repository": { |
|||
"type": "git", |
|||
"url": "https://github.com/eslint-community/eslint-utils" |
|||
}, |
|||
"license": "MIT", |
|||
"author": "Toru Nagashima", |
|||
"sideEffects": false, |
|||
"exports": { |
|||
".": { |
|||
"import": "./index.mjs", |
|||
"require": "./index.js" |
|||
}, |
|||
"./package.json": "./package.json" |
|||
}, |
|||
"main": "index", |
|||
"module": "index.mjs", |
|||
"files": [ |
|||
"index.*" |
|||
], |
|||
"scripts": { |
|||
"prebuild": "npm run -s clean", |
|||
"build": "rollup -c", |
|||
"clean": "rimraf .nyc_output coverage index.*", |
|||
"coverage": "opener ./coverage/lcov-report/index.html", |
|||
"docs:build": "vitepress build docs", |
|||
"docs:watch": "vitepress dev docs", |
|||
"format": "npm run -s format:prettier -- --write", |
|||
"format:prettier": "prettier .", |
|||
"format:check": "npm run -s format:prettier -- --check", |
|||
"lint:eslint": "eslint .", |
|||
"lint:format": "npm run -s format:check", |
|||
"lint:installed-check": "installed-check -v -i installed-check -i npm-run-all2 -i knip", |
|||
"lint:knip": "knip", |
|||
"lint": "run-p lint:*", |
|||
"test": "c8 mocha --reporter dot \"test/*.mjs\"", |
|||
"preversion": "npm test && npm run -s build", |
|||
"postversion": "git push && git push --tags", |
|||
"prewatch": "npm run -s clean", |
|||
"watch": "warun \"{src,test}/**/*.mjs\" -- npm run -s test:mocha" |
|||
}, |
|||
"dependencies": { |
|||
"eslint-visitor-keys": "^3.4.3" |
|||
}, |
|||
"devDependencies": { |
|||
"@eslint-community/eslint-plugin-mysticatea": "^15.6.1", |
|||
"c8": "^8.0.1", |
|||
"dot-prop": "^7.2.0", |
|||
"eslint": "^8.57.1", |
|||
"installed-check": "^8.0.1", |
|||
"knip": "^5.33.3", |
|||
"mocha": "^9.2.2", |
|||
"npm-run-all2": "^6.2.3", |
|||
"opener": "^1.5.2", |
|||
"prettier": "2.8.8", |
|||
"rimraf": "^3.0.2", |
|||
"rollup": "^2.79.2", |
|||
"rollup-plugin-sourcemaps": "^0.6.3", |
|||
"semver": "^7.6.3", |
|||
"vitepress": "^1.4.1", |
|||
"warun": "^1.0.0" |
|||
}, |
|||
"peerDependencies": { |
|||
"eslint": "^6.0.0 || ^7.0.0 || >=8.0.0" |
|||
}, |
|||
"engines": { |
|||
"node": "^12.22.0 || ^14.17.0 || >=16.0.0" |
|||
}, |
|||
"funding": "https://opencollective.com/eslint" |
|||
} |
@ -0,0 +1,21 @@ |
|||
MIT License |
|||
|
|||
Copyright (c) 2018 Toru Nagashima |
|||
|
|||
Permission is hereby granted, free of charge, to any person obtaining a copy |
|||
of this software and associated documentation files (the "Software"), to deal |
|||
in the Software without restriction, including without limitation the rights |
|||
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell |
|||
copies of the Software, and to permit persons to whom the Software is |
|||
furnished to do so, subject to the following conditions: |
|||
|
|||
The above copyright notice and this permission notice shall be included in all |
|||
copies or substantial portions of the Software. |
|||
|
|||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR |
|||
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, |
|||
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE |
|||
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER |
|||
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, |
|||
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE |
|||
SOFTWARE. |
@ -0,0 +1,177 @@ |
|||
# @eslint-community/regexpp |
|||
|
|||
[](https://www.npmjs.com/package/@eslint-community/regexpp) |
|||
[](http://www.npmtrends.com/@eslint-community/regexpp) |
|||
[](https://github.com/eslint-community/regexpp/actions) |
|||
[](https://codecov.io/gh/eslint-community/regexpp) |
|||
|
|||
A regular expression parser for ECMAScript. |
|||
|
|||
## 💿 Installation |
|||
|
|||
```bash |
|||
$ npm install @eslint-community/regexpp |
|||
``` |
|||
|
|||
- require Node@^12.0.0 || ^14.0.0 || >=16.0.0. |
|||
|
|||
## 📖 Usage |
|||
|
|||
```ts |
|||
import { |
|||
AST, |
|||
RegExpParser, |
|||
RegExpValidator, |
|||
RegExpVisitor, |
|||
parseRegExpLiteral, |
|||
validateRegExpLiteral, |
|||
visitRegExpAST |
|||
} from "@eslint-community/regexpp" |
|||
``` |
|||
|
|||
### parseRegExpLiteral(source, options?) |
|||
|
|||
Parse a given regular expression literal then make AST object. |
|||
|
|||
This is equivalent to `new RegExpParser(options).parseLiteral(source)`. |
|||
|
|||
- **Parameters:** |
|||
- `source` (`string | RegExp`) The source code to parse. |
|||
- `options?` ([`RegExpParser.Options`]) The options to parse. |
|||
- **Return:** |
|||
- The AST of the regular expression. |
|||
|
|||
### validateRegExpLiteral(source, options?) |
|||
|
|||
Validate a given regular expression literal. |
|||
|
|||
This is equivalent to `new RegExpValidator(options).validateLiteral(source)`. |
|||
|
|||
- **Parameters:** |
|||
- `source` (`string`) The source code to validate. |
|||
- `options?` ([`RegExpValidator.Options`]) The options to validate. |
|||
|
|||
### visitRegExpAST(ast, handlers) |
|||
|
|||
Visit each node of a given AST. |
|||
|
|||
This is equivalent to `new RegExpVisitor(handlers).visit(ast)`. |
|||
|
|||
- **Parameters:** |
|||
- `ast` ([`AST.Node`]) The AST to visit. |
|||
- `handlers` ([`RegExpVisitor.Handlers`]) The callbacks. |
|||
|
|||
### RegExpParser |
|||
|
|||
#### new RegExpParser(options?) |
|||
|
|||
- **Parameters:** |
|||
- `options?` ([`RegExpParser.Options`]) The options to parse. |
|||
|
|||
#### parser.parseLiteral(source, start?, end?) |
|||
|
|||
Parse a regular expression literal. |
|||
|
|||
- **Parameters:** |
|||
- `source` (`string`) The source code to parse. E.g. `"/abc/g"`. |
|||
- `start?` (`number`) The start index in the source code. Default is `0`. |
|||
- `end?` (`number`) The end index in the source code. Default is `source.length`. |
|||
- **Return:** |
|||
- The AST of the regular expression. |
|||
|
|||
#### parser.parsePattern(source, start?, end?, flags?) |
|||
|
|||
Parse a regular expression pattern. |
|||
|
|||
- **Parameters:** |
|||
- `source` (`string`) The source code to parse. E.g. `"abc"`. |
|||
- `start?` (`number`) The start index in the source code. Default is `0`. |
|||
- `end?` (`number`) The end index in the source code. Default is `source.length`. |
|||
- `flags?` (`{ unicode?: boolean, unicodeSets?: boolean }`) The flags to enable Unicode mode, and Unicode Set mode. |
|||
- **Return:** |
|||
- The AST of the regular expression pattern. |
|||
|
|||
#### parser.parseFlags(source, start?, end?) |
|||
|
|||
Parse a regular expression flags. |
|||
|
|||
- **Parameters:** |
|||
- `source` (`string`) The source code to parse. E.g. `"gim"`. |
|||
- `start?` (`number`) The start index in the source code. Default is `0`. |
|||
- `end?` (`number`) The end index in the source code. Default is `source.length`. |
|||
- **Return:** |
|||
- The AST of the regular expression flags. |
|||
|
|||
### RegExpValidator |
|||
|
|||
#### new RegExpValidator(options) |
|||
|
|||
- **Parameters:** |
|||
- `options` ([`RegExpValidator.Options`]) The options to validate. |
|||
|
|||
#### validator.validateLiteral(source, start, end) |
|||
|
|||
Validate a regular expression literal. |
|||
|
|||
- **Parameters:** |
|||
- `source` (`string`) The source code to validate. |
|||
- `start?` (`number`) The start index in the source code. Default is `0`. |
|||
- `end?` (`number`) The end index in the source code. Default is `source.length`. |
|||
|
|||
#### validator.validatePattern(source, start, end, flags) |
|||
|
|||
Validate a regular expression pattern. |
|||
|
|||
- **Parameters:** |
|||
- `source` (`string`) The source code to validate. |
|||
- `start?` (`number`) The start index in the source code. Default is `0`. |
|||
- `end?` (`number`) The end index in the source code. Default is `source.length`. |
|||
- `flags?` (`{ unicode?: boolean, unicodeSets?: boolean }`) The flags to enable Unicode mode, and Unicode Set mode. |
|||
|
|||
#### validator.validateFlags(source, start, end) |
|||
|
|||
Validate a regular expression flags. |
|||
|
|||
- **Parameters:** |
|||
- `source` (`string`) The source code to validate. |
|||
- `start?` (`number`) The start index in the source code. Default is `0`. |
|||
- `end?` (`number`) The end index in the source code. Default is `source.length`. |
|||
|
|||
### RegExpVisitor |
|||
|
|||
#### new RegExpVisitor(handlers) |
|||
|
|||
- **Parameters:** |
|||
- `handlers` ([`RegExpVisitor.Handlers`]) The callbacks. |
|||
|
|||
#### visitor.visit(ast) |
|||
|
|||
Validate a regular expression literal. |
|||
|
|||
- **Parameters:** |
|||
- `ast` ([`AST.Node`]) The AST to visit. |
|||
|
|||
## 📰 Changelog |
|||
|
|||
- [GitHub Releases](https://github.com/eslint-community/regexpp/releases) |
|||
|
|||
## 🍻 Contributing |
|||
|
|||
Welcome contributing! |
|||
|
|||
Please use GitHub's Issues/PRs. |
|||
|
|||
### Development Tools |
|||
|
|||
- `npm test` runs tests and measures coverage. |
|||
- `npm run build` compiles TypeScript source code to `index.js`, `index.js.map`, and `index.d.ts`. |
|||
- `npm run clean` removes the temporary files which are created by `npm test` and `npm run build`. |
|||
- `npm run lint` runs ESLint. |
|||
- `npm run update:test` updates test fixtures. |
|||
- `npm run update:ids` updates `src/unicode/ids.ts`. |
|||
- `npm run watch` runs tests with `--watch` option. |
|||
|
|||
[`AST.Node`]: src/ast.ts#L4 |
|||
[`RegExpParser.Options`]: src/parser.ts#L743 |
|||
[`RegExpValidator.Options`]: src/validator.ts#L220 |
|||
[`RegExpVisitor.Handlers`]: src/visitor.ts#L291 |
File diff suppressed because it is too large
File diff suppressed because it is too large
File diff suppressed because one or more lines are too long
File diff suppressed because it is too large
File diff suppressed because one or more lines are too long
Some files were not shown because too many files changed in this diff
Loading…
Reference in new issue