diff --git a/README.md b/README.md index 50ee5ada..13a389aa 100644 --- a/README.md +++ b/README.md @@ -1,4 +1,4 @@ -# 程序员手册 V1.0.3 +# 程序员手册 V1.1.0 ## 简介 @@ -36,6 +36,11 @@ ## 更新 +### v1.1.0 + +- 适配新版uTools +- 更新`uToolsAPI`里的文档至最新版 + ### v1.0.3 - 增加收藏的功能,调用官方的`收藏`插件进行收藏,手册界面选择文本后按`S`键即可收藏 diff --git a/assets/checkUpdate.js b/assets/checkUpdate.js deleted file mode 100644 index 1776c9d0..00000000 --- a/assets/checkUpdate.js +++ /dev/null @@ -1,30 +0,0 @@ -checkUpdate = () => { - let p = window.pluginInfo; - if (!utools.db.get(p.version)) { - $.get(p.publishPage, data => { - var re = new RegExp(`
你可以根据需要事先定义好一些回调函数,uTools会在事件产生时主动调用它们。
-onPluginReady(callback)
--当插件装载成功,uTools将会主动调用这个方法(生命周期内仅调用一次)。
-注意:在此方法未被执行前,无法调用其他方法。
-
utools.onPluginReady(() => {
-console.log('插件初始化完成')
-})
-
-callback
FunctiononPluginEnter(callback)
--每当插件从后台进入到前台时,uTools将会主动调用这个方法。
-
utools.onPluginEnter(({code, type, payload}) => {
-console.log('用户进入插件', code, type, payload)
-})
-
-callback
Function
- Object
- code
Stringtype
Stringpayload
String/Object/ArrayonPluginOut(callback)
--每当插件从前台进入到后台时,uTools将会主动调用这个方法。
-
utools.onPluginOut(() => {
-console.log('用户退出插件')
-})
-
-callback
FunctiononPluginDetach(callback)
--用户对插件进行分离操作时,uTools将会主动调用这个方法。
-
utools.onPluginDetach(() => {
-console.log('插件被分离')
-})
-
-callback
FunctiononDbPull(callback)
--当此插件的数据在其他设备上被更改后同步到此设备时,uTools将会主动调用这个方法(必须在插件可视的情况下才会触发)
-
utools.onDbPull(() => {
-console.log('onDbPull')
-})
-
-callback
Function返回
Boolean该方法只适用于在macOS
下执行,用于判断uTools是否拥有辅助权限,如果没有可以调用API方法requestPrivilege
请求
utools.isHadPrivilege()
-
- 返回
Boolean该方法只适用于在macOS
下执行,该方法调用后会弹出窗口向用户申请辅助权限。
utools.requestPrivilege()
-
- name
String返回
Stringutools.getPath('temp')
-
- 你可以通过名称请求以下的路径:
-home
用户的 home 文件夹(主目录)appData
当前用户的应用数据文件夹,默认对应:
- %APPDATA%
Windows 中~/Library/Application Support
macOS 中userData
储存你应用程序设置文件的文件夹,默认是 appData 文件夹附加应用的名称temp
临时文件夹exe
当前的可执行文件desktop
当前用户的桌面文件夹documents
用户文档目录的路径downloads
用户下载目录的路径music
用户音乐目录的路径pictures
用户图片目录的路径videos
用户视频目录的路径logs
应用程序的日志文件夹很多时候,插件中会提供一些功能供用户进行个性化设置(例如:网页快开
插件),这部分配置无法在plugin.json
事先定义好,所以我们提供了以下方法对插件功能进行动态增减。
-
返回
Array返回本插件所有动态增加的功能。
-const features = utools.getFeatures()
- console.log(features)
-
- 返回
Boolean为本插件动态新增某个功能。
-const featureConf = {
- "code": "hosts",
- "explain": "hosts切换",
- "cmds":["hosts"]
- }
- utools.setFeature(featureConf)
-
- --featrureConf 格式与
-plugin.json
中配置的格式一致
返回
Boolean动态删除本插件的某个功能。
-utools.removeFeature(featureCode)
-
- 传统的B/S结构的程序中,除了前端的开发之外,可能还需要有一台服务器、一门后端语言和一个数据库来处理和存储用户数据,这会带来很大的维护成本和可用性的问题。
-uTools的很多插件就像是一个微型的应用程序,总是会碰到一些数据需要持久化存储的场景,为了解决这个问题,我们整合并提供了一个nosql数据库系统,它可以很方便的使用,并在多个设备之间实现秒级同步。
-doc
Object返回
Object执行该方法将会创建或更新数据库文档
-// 创建请求
- utools.db.put({
- _id: "demo",
- data: "demo"
- })
- // 返回
- {id: "demo", ok: true, rev: "1-05c9b92e6f24287dc1f4ec79d9a34fa8"}
-
-
- // 更新请求
- utools.db.put({
- _id: "demo",
- data: "demo",
- _rev: "1-05c9b92e6f24287dc1f4ec79d9a34fa8"
- })
-
- _id
代表这个文档在数据库中唯一值,如果值不存在,则会创建一个新的文档,如果值已经存在,则会进行更新。你可能已经注意到,返回对象中包含一个rev
属性,这是代表此文档的版本,每次对文档进行更新时,都要带上最新的版本号,否则更新将失败。
-
另外需要注意,每次更新时都要传入完整的文档数据,无法对单个字段进行更新。
-id
String返回
Object执行该方法将会根据文档ID获取数据
-// 请求
- utools.db.get("demo")
- // 返回
- {_id: "demo", _rev: "3-9836c5c68af5aef618e17d615882942a", data: "demo"}
-
- id
String | Object返回
Object执行该方法将会删除数据库文档,可以传入文档对象或文档id进行操作。
-// 请求
- utools.db.remove("demo")
- // 返回
- {id: "demo", ok: true, rev: "2-effe5dbc23dffc180d8411b23f3108fb"}
-
- docs
Array返回
Array执行该方法将会批量更新数据库文档,传入需要更改的文档对象合并成数组进行批量更新。
-// 请求
- utools.db.bulkDocs([{
- _id: "demo1",
- data: "demo",
- _rev: "1-c8817a74e292eda4cba1a45924853af6"
- }, {
- _id: "demo2",
- data: "demo",
- _rev: "1-f0399b42cc6123a9cc8503632ba7b3a7"
- }])
- // 返回
- [{
- id: "demo1", ok: true, rev: "2-7857b2801bc0303d2cc0bb82e8afd796"
- }, {
- id: "demo2", ok: true, rev: "2-7857b2801bc0303d2cc0bb82e8afd796"
- }]
-
- preKey
String | []返回
Array执行该方法将会获取所有数据库文档,如果传入字符串,则会返回以字符串开头的文档,也可以传入指定ID的数组,不传入则为获取所有文档。
-// 根据preKey请求
- utools.db.allDocs("demo")
- // 返回
- [{
- _id: "demo/123", _rev: "2-7857b2801bc0303d2cc0bb82e8afd796", data: "demo"
- }, {
- _id: "demo/124", _rev: "1-f0399b42cc6123a9cc8503632ba7b3a7", data: "demo"
- }, {
- _id: "demo/125", _rev: "1-f0399b42cc6123a9cc8503632ba7b3a7", data: "demo"
- }]
- // 根据id数组请求
- utools.db.allDocs([
- "demo1",
- "demo2"
- ])
- // 返回
- [{
- _id: "demo1", _rev: "2-7857b2801bc0303d2cc0bb82e8afd796", data: "demo"
- }, {
- _id: "demo2", _rev: "1-f0399b42cc6123a9cc8503632ba7b3a7", data: "demo"
- }]
-
-
- 返回
Boolean执行该方法将会隐藏uTools主窗口,包括此时正在主窗口运行的插件,分离的插件不会被隐藏。
-utools.hideMainWindow()
-
- 返回
Boolean执行该方法将会显示uTools主窗口,包括此时正在主窗口运行的插件。
-utools.showMainWindow()
-
- height
Integer返回
Boolean执行该方法将会修改插件窗口的高度。
-utools.setExpendHeight(100)
-
- onChange
Function
- Object
- text
Stringplaceholder
String(可选)返回
Boolean设置子输入框,进入插件后,原本uTools的搜索条主输入框将会变成子输入框,设置完子输入框搜索条子输入框可以为插件所使用。
-utools.setSubInput(({text}) => {
- console.log(text)
- }, '网页搜索,回车打开')
-
- 返回
Boolean移出先前设置的子输入框,在插件切换到其他页面时可以重新设置子输入框为其所用。
-utools.removeSubInput()
-
- value
String返回
Boolean直接对子输入框的值进行设置。
-utools.setSubInputValue('uTools')
-
- 返回
Boolean执行该方法将会退出当前插件。
-utools.outPlugin()
-
- 返回
Boolean执行该方法将会弹出一个系统通知。
-utools.showNotification(body, clickFeatureCode = null, silent = true)
- - body 显示的内容
- - clickFeatureCode 用户点击系统通知时,uTools将会使用此`code`进入插件
- - silent 是否播放声音
-
- 在插件初始化完成时,uTools会自动在你的window对象上挂载utools对象,它将提供一些特有的api,使你的插件能够更好的与uTools主窗口沟通,并获得一些有意义的底层能力。
你可以根据需要事先定义好一些回调函数,uTools会在事件产生时主动调用它们。
onPluginReady(callback)
callback
Function当插件装载成功,uTools将会主动调用这个方法(生命周期内仅调用一次)。
utools.onPluginReady(() => {
+ console.log('插件装配完成,已准备好')
+ })
+
onPluginEnter(callback)
callback
Function
+ Object
code
String
plugin.json 配置的 feature.code
type
String
plugin.json 配置的 feature.cmd.code
payload
String | Object | Array
feature.cmd.type 对应匹配的数据
optional
Array | undefined
存在多个匹配时的可选匹配类型和数据 [{ type, payload }]
每当插件从后台进入到前台时,uTools将会主动调用这个方法。
utools.onPluginEnter(({code, type, payload, optional}) => {
+ console.log('用户进入插件', code, type, payload)
+ })
+
onPluginOut(callback)
callback
Function每当插件从前台进入到后台时,uTools将会主动调用这个方法。
utools.onPluginOut(() => {
+ console.log('用户退出插件')
+ })
+
onPluginDetach(callback)
callback
Function用户对插件进行分离操作时,uTools将会主动调用这个方法。
utools.onPluginDetach(() => {
+ console.log('插件被分离')
+ })
+
onDbPull(callback)
callback
Function当此插件的数据在其他设备上被更改后同步到此设备时,uTools将会主动调用这个方法
utools.onDbPull(() => {
+ console.log('onDbPull')
+ })
+
hideMainWindow(isRestorePreWindow)
isRestorePreWindow
Boolean
是否焦点回归到前面的活动窗口,默认 true
返回
Boolean
执行该方法将会隐藏uTools主窗口,包括此时正在主窗口运行的插件,分离的插件不会被隐藏。
utools.hideMainWindow()
+
showMainWindow()
返回
Boolean执行该方法将会显示uTools主窗口,包括此时正在主窗口运行的插件。
utools.showMainWindow()
+
setExpendHeight(height)
height
Integer返回
Boolean执行该方法将会修改插件窗口的高度。
utools.setExpendHeight(100)
+
setSubInput(onChange, placeholder, isFocus)
onChange
Function
Object
text
String子输入框文本修改时触发
placeholder
String (可选)
子输入框占位符
isFocus
Boolean (可选)
子输入框是否获得焦点,默认 true
返回
Boolean
设置子输入框,进入插件后,原本uTools的搜索条主输入框将会变成子输入框,子输入框可以为插件所使用。
主输入框
子输入框
utools.setSubInput(({ text }) => {
+ console.log(text)
+ }, '搜索')
+
removeSubInput()
返回
Boolean移出先前设置的子输入框,在插件切换到其他页面时可以重新设置子输入框为其所用。
utools.removeSubInput()
+
setSubInputValue(value)
value
String返回
Boolean直接对子输入框的值进行设置。
utools.setSubInputValue('uTools')
+
subInputFocus()
返回
Boolean子输入框获得焦点
utools.subInputFocus()
+
subInputSelect()
返回
Boolean子输入框获得焦点并选中
utools.subInputSelect()
+
subInputBlur()
返回
Boolean子输入框失去焦点,插件获得焦点
utools.subInputBlur()
+
outPlugin()
返回
Boolean执行该方法将会退出当前插件。
utools.outPlugin()
+
redirect(label, payload)
label
String
feature.cmd.label 名称
payload
String | Object
feature.cmd.type 对应的数据
返回
Boolean
该方法可以携带数据,跳转到另一个插件进行处理,如果用户未安装对应的插件,uTools会弹出提醒并引导进入插件中心下载。
//content 为string类型
+ utools.redirect('翻译', 'hello world')
+
+ //content 为object类型
+ utools.redirect('翻译', {
+ 'type': 'text',
+ 'data': 'hello world'
+ })
+
+ //传递图片
+ utools.redirect('图片识别', {
+ 'type': 'img',
+ // data 可以是本地图片路径、base64编码的图片、Buffer对象
+ 'data': '/path/to/img.jpg(支持jpeg|png|bmp)' //filePath、base64、Buffer
+ })
+
+ //传递文件、文件夹
+ utools.redirect('图片压缩', {
+ 'type': 'files',
+ // data 可以是本地文件、文件夹路径
+ 'data': '/path/to/img.jpg' //filePath、array
+ //'data': ['path1', 'path2'] //支持数组
+ })
+
showOpenDialog(options)
options
Object
与 Electron API dialog.showOpenDialogSync options 一致
返回
Array | undefined
返回选择的文件数组,用户取消返回 undefined
弹出文件选择框
utools.showOpenDialog({
+ filters: [{ 'name': 'plugin.json', extensions: ['json'] }],
+ properties: ['openFile']
+ })
+
showSaveDialog(options)
options
Object
与 Electron API dialog.showSaveDialogSync options 一致
返回
String | undefined
返回选择的路径,用户取消返回 undefined
弹出文件保存框
utools.showSaveDialog({
+ title: '保存位置',
+ defaultPath: utools.getPath('downloads')
+ buttonLabel: '保存'
+ })
+
showMessageBox(options)
options
Object
与 Electron API dialog.showMessageBoxSync options 一致
返回
Integer
返回点击按钮的索引
弹出消息框
utools.showMessageBox({
+ type: 'question',
+ buttons: ['取消', '关机'],
+ title: '关机确认',
+ message: '电脑确定要关机?',
+ defaultId: 1
+ })
+
findInPage(text, options)
text
String
要搜索的内容(必填)
options
Object (可选)
与 Electron API contentsfindinpagetext-options options 一致
插件页面中查找内容
utools.findInPage('utools')
+
stopFindInPage(action)
action
String
"clearSelection" | "keepSelection" | "activateSelection", 默认 "clearSelection"
停止插件页面中查找
utools.stopFindInPage()
+
startDrag(file)
file
String | Array
文件路径 或 文件路径集合
原生拖拽文件到其他窗口
utools.startDrag('/path/to/file')
+
createBrowserWindow(url, options)
url
String
相对路径的html文件 例如: test.html?param=xxx
options
Object
与 Electron API new BrowserWindow 参数一样, 注意: preload 需配置相对位置
创建浏览器窗口
utools.createBrowserWindow('test.html?param=xxxxxx', {
+ title: '测试窗口',
+ fullscreen: true,
+ webPreferences: {
+ preload: 'test/preload.js'
+ }
+ })
+
很多时候,插件中会提供一些功能供用户进行个性化设置(例如:网页快开
插件),这部分配置无法在plugin.json
事先定义好,所以我们提供了以下方法对插件功能进行动态增减。
getFeatures()
返回
Array返回本插件所有动态增加的功能。
const features = utools.getFeatures()
+ console.log(features)
+
setFeature(feature)
feature
Object
+ 格式与
plugin.json
中配置的格式一致
code
Stringexplain
Stringicon
String (可选)platform
Array (可选)cmds
Array返回
Boolean为本插件动态新增某个功能。
utools.setFeature({
+ "code": "hosts",
+ "explain": "hosts切换",
+ // "icon": "res/xxx.png",
+ // "icon": "data:image/png;base64,xxx...",
+ // "platform": ["win32", "darwin", "linux"]
+ "cmds": ["hosts"]
+ })
+
removeFeature(code)
code
String返回
Boolean动态删除本插件的某个功能。
utools.removeFeature('code')
+
屏幕取色 & 屏幕截图
screenColorPick(callback)
callback
Function
+ 取色结束回调
Object
hex
Stringrgb
String屏幕取色
utools.screenColorPick(({hex, rgb})=>{
+ console.log(hex) // #FFFFFF
+ console.log(rgb) // RGB(0, 0, 0)
+ })
+
screenCapture(callback)
callback
Function
+ 截图结束回调
String
图片的Base64字符串
屏幕截图
utools.screenCapture(base64Str => {
+ utools.redirect('识别图片中文字', { type: 'img', data: base64Str })
+ })
+
模拟敲击键盘 和 鼠标点击
simulateKeyboardTap(key, ...modifier)
key
String
键值
modifier
String (可选)
功能键
模拟键盘按键
// 模拟键盘敲击 Enter
+ utools.simulateKeyboardTap('enter')
+ // windows linux 模拟粘贴
+ utools.simulateKeyboardTap('v', 'ctrl')
+ // macos 模拟粘贴
+ utools.simulateKeyboardTap('v', 'command')
+ // 模拟 Ctrl + Alt + A
+ utools.simulateKeyboardTap('a', 'ctrl', 'alt')
+
simulateMouseMove(x, y)
x
Integery
Integer模拟鼠标移动
utools.simulateMouseMove(100,100)
+
simulateMouseClick(x, y)
x
Integer (可选)y
Integer (可选)模拟鼠标左键单击
utools.simulateMouseClick(100,100)
+
simulateMouseRightClick(x, y)
x
Integer (可选)y
Integer (可选)模拟鼠标右键单击
utools.simulateMouseRightClick(100,100)
+
simulateMouseDoubleClick(x, y)
x
Integer (可选)y
Integer (可选)模拟鼠标双击
utools.simulateMouseDoubleClick(100,100)
+
getCursorScreenPoint()
返回
Object
{ x: Integer, y: Integer }
获取鼠标绝对位置
const point = utools.getCursorScreenPoint()
+ console.log(point.x, point.y)
+
getPrimaryDisplay()
返回
Object
获取主显示器
const display = utools.getPrimaryDisplay()
+ console.log(display)
+
getAllDisplays()
返回
Array
Display对象 集合
获取所有显示器
const displays = utools.getAllDisplays()
+ console.log(displays)
+
getDisplayNearestPoint(point)
point
Object
返回
Object
获取位置所在的显示器
const display = utools.getDisplayNearestPoint({x: 100, y: 100 })
+ console.log(display)
+
getDisplayMatching(rect)
rect
Object
返回
Object
获取矩形所在的显示器
const display = utools.getDisplayMatching({x: 100, y: 100, width: 200, height: 200 })
+ console.log(display)
+
copyFile(file)
file
String | Array返回
Boolean复制文件到系统剪贴板
// 复制单个文件
+ utools.copyFile('/path/to/file')
+ // 复制多个文件
+ utools.copyFile(['/path/to/file1', '/path/to/file2'])
+
copyImage(img)
img
String | Buffer返回
Boolean复制图片到系统剪贴板
// 路径
+ utools.copyImage('/path/to/img.png')
+ // base64
+ utools.copyImage('data:image/png;base64,xxxxxxxxx')
+
copyText(text)
text
String返回
Boolean复制文本
utools.copyText('Hi, uTools')
+
showNotification(body)
body
String显示系统通知
utools.showNotification('Hi, uTools')
+
shellOpenItem(fullPath)
fullPath
String系统默认方式打开给定的文件
utools.shellOpenItem('/path/to/file')
+
shellShowItemInFolder(fullPath)
fullPath
String系统文件管理器中显示给定的文件
utools.shellShowItemInFolder('/path/to/file')
+
shellOpenExternal(url)
url
String系统默认的协议打开URL
// 浏览器打开
+ utools.shellOpenExternal('https://u.tools')
+
shellBeep()
播放哔哔声
utools.shellBeep()
+
getLocalId()
返回
String获取本地ID
console.log(utools.getLocalId())
+
getPath(name)
name
String
+ 你可以通过名称请求以下的路径:
home
用户的 home 文件夹(主目录)appData
当前用户的应用数据文件夹,默认对应:
+ %APPDATA%
Windows 中~/Library/Application Support
macOS 中userData
储存你应用程序设置文件的文件夹,默认是 appData 文件夹附加应用的名称temp
临时文件夹exe
当前的可执行文件desktop
当前用户的桌面文件夹documents
用户文档目录的路径downloads
用户下载目录的路径music
用户音乐目录的路径pictures
用户图片目录的路径videos
用户视频目录的路径logs
应用程序的日志文件夹返回
String获取路径
// 获取下载路径
+ console.log(utools.getPath('downloads'))
+
getCurrentFolderPath()
返回
String获取当前文件管理器路径(linux 不支持),呼出uTools前的活动窗口为资源管理器才能获取
console.log(utools.getCurrentFolderPath())
+
getCurrentBrowserUrl()
返回
String获取当前浏览器URL(linux 不支持), 呼出uTools前的活动窗口为浏览器才能获取
MacOs 支持浏览器 Safari、Chrome、Opera、Vivaldi、Brave
Windows 支持浏览器 Chrome、Firefox、Edge、IE、Opera、Brave
console.log(utools.getCurrentBrowserUrl())
+
isMacOs()
是否 MacOs 操作系统
if (utools.isMacOs()) {
+ console.log('mac')
+ }
+
isWindows()
是否 Windows 操作系统
if (utools.isWindows()) {
+ console.log('windows')
+ }
+
isLinux()
是否 Linux 操作系统
if (utools.isLinux()) {
+ console.log('linux')
+ }
+
传统的B/S结构的程序中,除了前端的开发之外,可能还需要有一台服务器、一门后端语言和一个数据库来处理和存储用户数据,这会带来很大的维护成本和可用性的问题。
uTools的很多插件就像是一个微型的应用程序,总是会碰到一些数据需要持久化存储的场景,为了解决这个问题,我们整合并提供了一个nosql数据库系统,它可以很方便的使用,如果开启同步的话可在多个设备之间实现秒级同步。
utools.db.put(doc)
doc
Object返回
Object执行该方法将会创建或更新数据库文档
// 创建请求
+ utools.db.put({
+ _id: "demo",
+ data: "demo"
+ })
+ // 返回 {id: "demo", ok: true, rev: "1-05c9b92e6f24287dc1f4ec79d9a34fa8"}
+
+ // 更新请求
+ utools.db.put({
+ _id: "demo",
+ data: "demo",
+ _rev: "1-05c9b92e6f24287dc1f4ec79d9a34fa8"
+ })
+
_id
代表这个文档在数据库中唯一值,如果值不存在,则会创建一个新的文档,如果值已经存在,则会进行更新。你可能已经注意到,返回对象中包含一个rev
属性,这是代表此文档的版本,每次对文档进行更新时,都要带上最新的版本号,否则更新将失败,版本化的意义在于解决同步时数据冲突。
另外需要注意,每次更新时都要传入完整的文档数据,无法对单个字段进行更新。
utools.db.get(id)
id
String返回
Object执行该方法将会根据文档ID获取数据
utools.db.get("demo")
+ // 返回 {_id: "demo", _rev: "3-9836c5c68af5aef618e17d615882942a", data: "demo"}
+
utools.db.remove(doc)
doc
String | Object返回
Object执行该方法将会删除数据库文档,可以传入文档对象或文档id进行操作。
utools.db.remove("demo")
+ // 返回 {id: "demo", ok: true, rev: "2-effe5dbc23dffc180d8411b23f3108fb"}
+
utools.db.bulkDocs(docs)
docs
Array返回
Array执行该方法将会批量更新数据库文档,传入需要更改的文档对象合并成数组进行批量更新。
utools.db.bulkDocs([{
+ _id: "demo1",
+ data: "demo",
+ _rev: "1-c8817a74e292eda4cba1a45924853af6"
+ }, {
+ _id: "demo2",
+ data: "demo",
+ _rev: "1-f0399b42cc6123a9cc8503632ba7b3a7"
+ }])
+ /* 返回
+ [{
+ id: "demo1", ok: true, rev: "2-7857b2801bc0303d2cc0bb82e8afd796"
+ }, {
+ id: "demo2", ok: true, rev: "2-7857b2801bc0303d2cc0bb82e8afd796"
+ }]
+ */
+
utools.db.allDocs(key)
key
String | Array返回
Array执行该方法将会获取所有数据库文档,如果传入字符串,则会返回以字符串开头的文档,也可以传入指定ID的数组,不传入则为获取所有文档。
// 获取所有文档
+ utools.db.allDocs()
+
+ // 传入字符串,则返回id以 demo 开头的文档
+ utools.db.allDocs("demo")
+ /* 返回
+ [{
+ _id: "demo/123", _rev: "2-7857b2801bc0303d2cc0bb82e8afd796", data: "demo"
+ }, {
+ _id: "demo/124", _rev: "1-f0399b42cc6123a9cc8503632ba7b3a7", data: "demo"
+ }, {
+ _id: "demo/125", _rev: "1-f0399b42cc6123a9cc8503632ba7b3a7", data: "demo"
+ }]
+ */
+ // 根据id数组请求
+ utools.db.allDocs([
+ "demo1",
+ "demo2"
+ ])
+ /* 返回
+ [{
+ _id: "demo1", _rev: "2-7857b2801bc0303d2cc0bb82e8afd796", data: "demo"
+ }, {
+ _id: "demo2", _rev: "1-f0399b42cc6123a9cc8503632ba7b3a7", data: "demo"
+ }]
+ */
+
可编程浏览器
getIdleUBrowsers()
返回
Array获取闲置的 ubrowser
console.log(utools.getIdleUBrowsers())
+ // [{ id: number, title: string, url: string }]
+
setUBrowserProxy(config)
config
Object
与 Electron API 一致
返回
Boolean
设置 ubrowser 代理
utools.setUBrowserProxy({
+ proxyRules: 'http=foopy:80;ftp=foopy2'
+ })
+
如上一章hello world的例子所示,plugin.json
文件可以让你的插件与uTools无缝的结合在一起,下面我们列出了所有可能的配置项及注释供你参考:
{
+ "pluginName": "插件名称",
+ "version": "0.0.1",
+ "description": "插件描述",
+ // 在uTools对应的位置显示
+ "author": "开发者",
+ // 如果配置了此项,用户点击`开发者`时,将在浏览器中打开此页面
+ "homepage": "https://u.tools",
+ // 入口文件,为空表示模板插件
+ "main": "index.html",
+ // 这是一个关键文件,你可以在此文件内调用uTools 、nodejs、electron提供的api
+ "preload":"preload.js",
+ // 此插件的图标,这是必须存在的,否则打包后将无法安装
+ "logo": "logo.png",
+ // 插件支持的平台(默认为全平台支持)
+ "platform": ["win32", "darwin", "linux"],
+ // 在开发模式下,可使用development配置替换 main、preload、logo 的值,在打包时,此字段会被删除
+ "development": {
+ "main": "",
+ "preload": "",
+ "logo": "",
+ // 可单独指定打包目录(默认为plugin.json所在目录)
+ "buildPath": ""
+ },
+ // 插件设置 (可选)
+ "pluginSetting":{
+ // 插件是否允许多开(默认不允许),多开方式:分离插件后,再次创建
+ "single": true,
+ // 插件高度(可动态修改,但用户不能调整高度)
+ "height": 0
+ },
+ /*
+ * features 描述了当uTools主输入框内容产生变化时,此插件是否显示在搜索列表中
+ * 一个插件可以有多个功能,一个功能可以提供多个命令供用户搜索
+ */
+ "features": [
+ {
+ // 插件提供的某个功能(必须)
+ "code": "uuid",
+ // 对此功能的说明,在搜索列表中出现
+ "explain": "随机唯一值",
+ // 功能图标, 相对路径 支持png、jpg、svg (可选)
+ "icon": "res/xxxx.png",
+ // 功能适配平台 ["win32", "darwin", "linux"] (可选)
+ "platform": ["win32", "darwin", "linux"],
+ "cmds":[
+ // cmds 可以是简单的字符串, 搜索进入
+ "uTools", "中文",
+
+ // cmds 也可以是一个对象,匹配场景,通过匹配过滤
+ {
+ // 类型,可能的值(img, files, regex, over)
+ "type": "img",
+ // 文字说明,在搜索列表中出现(必须)
+ "label": "图片匹配"
+ },
+
+ // files 实例
+ {
+ "type": "files",
+ "label": "文件匹配",
+ // 支持file或directory (可选)
+ "fileType": "file",
+ // 文件名称正则匹配 (可选)
+ "match": "/xxx/",
+ // 数量限制(不少于) (可选)
+ "minNum": 1,
+ // 数量限制(不多于) (可选)
+ "maxNum": 1
+ },
+
+ // regex 实例
+ {
+ "type": "regex",
+ "label": "文本正则匹配",
+ // 正则表达式字符串
+ "match":"/xxx/i",
+ // 长度限制(主输入框中的字符不少于) (可选)
+ "minLength": 1,
+ // 长度限制(不多于) (可选)
+ "maxLength": 1
+ },
+
+ // over 实例(当uTools主输入框中的关键字无任何匹配项时出现)
+ {
+ "type": "over",
+ "label": "无匹配时",
+ // 排除的正则 (可选)
+ "exclude":"/xxx/i",
+ // 长度限制(主输入框中的字符不少于) (可选)
+ "minLength": 1,
+ // 长度限制(不多于) (可选)
+ "maxLength": 1
+ },
+
+ // window 实例(根据呼出uTools前的活动窗口匹配)
+ // ps: 可使用uTools`窗口信息`关键字查看窗口信息
+ {
+ "type": "window",
+ "label": "窗口动作",
+ "match": {
+ // 应用
+ "app": ["xxx.app", "xxx.exe"],
+ // 匹配窗口标题的正则 (可选)
+ "title": "/xxxx/",
+ // 窗口类 Windows专有 (可选)
+ "class": ["xxx"]
+ }
+ }
+ ]
+ }
+ ]
+}
+
+当你在plugin.json
中配置了preload
属性,将载入对应的预加载脚本。
在传统的web开发中,所有的javascript脚本都在浏览器沙盒中运行,权限被严格限制,所能实现的功能非常有限。
通过preload.js
能够帮你突破沙盒限制,进入一个崭新的JavaScript世界。
preload.js
是一个特殊且单独的文件,不需要与其他业务代码编译在一起,在此文件中可以访问nodejs
、electron
、uTools
提供的api,并挂载到window
对象中,你其他的普通javascript代码就可以访问这些 api。
// 开发者可以暴露自定义API供后加载脚本使用
+
+ // preload.js 中使用nodejs
+ const { readFileSync } = require('fs')
+
+ window.readConfig = function () {
+ const data = readFileSync('./config.json')
+ return data
+ }
+
+
+ // index.html 后加载的内容可以使用window.readConfig()方法,但不能使用Node.js特性
+ console.log(window.readConfig()) // 正常执行
+ console.log(readFileSync('./config.json')) // 报错
+
+
通过这种机制可以获得强大的底层能力,配合html、css丰富的表现力,你完全可以按你理想中的样子去设计程序。
但是,更强大的能力如果不受约束就会伴随着更大风险,在使用预加载脚本时,应该时刻注意只提供必要且最小权限的api供后加载脚本使用。
(如果你想把插件提交到utools插件中心供其他用户下载使用,preload.js
必须是明文代码,且精简清晰可读。)
uTools 的插件开发给予了开发者最大的自由度,你可以随心所欲的设计页面结构、样式、交互,对于特别擅长前端开发的同学,这没有什么问题,但对于非前端开发者,要做出漂亮的、高质量的前端UI是一件困难的事情。
我们发现在uTools使用环境中,很多插件的场景都有其共性,所以我们抽象出一套体验统一、高质量、高性能的通用模版,如果你想开发的插件场景适合使用此模版,那么你只需提供数据并提供一些回调函数即可。
要使用uTools模版,首先第一步就是删除plugin.json
文件中的main
属性。
"main": "index.html"
...
+ 其他 js 代码
+ ...
+
+ // 在window上添加一个名称为“exports”的对象,用于描述插件的模版模式及设置回调
+ // 无UI模式
+ window.exports = {
+ "features.code": { // 注意:键对应的是plugin.json中的features.code
+ mode: "none", // 用于无需UI显示,执行一些简单的代码
+ args: {
+ // 进入插件时调用
+ enter: (action:{ code, type, payload }) => {
+ window.utools.hideMainWindow()
+ // do some thing
+ window.utools.outPlugin()
+ }
+ }
+ }
+ }
+
+ // 列表模式
+ window.exports = {
+ "features.code": { // 注意:键对应的是plugin.json中的features.code
+ mode: "list", // 列表模式
+ args: {
+ // 进入插件时调用(可选)
+ enter: (action, callbackSetList) => {
+ // 如果进入插件就要显示列表数据
+ callbackSetList([
+ {
+ title: '这是标题',
+ description: '这是描述',
+ icon:'' // 图标(可选)
+ }
+ ])
+ },
+ // 子输入框内容变化时被调用 可选 (未设置则无搜索)
+ search: (action, searchWord, callbackSetList) => {
+ // 获取一些数据
+ // 执行 callbackSetList 显示出来
+ callbackSetList([
+ {
+ title: '这是标题',
+ description: '这是描述',
+ icon:'' // 图标,
+ url: 'https://yuanliao.info',
+ other: 'xxx'
+ }
+ ])
+ },
+ // 用户选择列表中某个条目时被调用
+ select: (action, itemData, callbackSetList) => {
+ window.utools.hideMainWindow()
+ const url = itemData.url
+ require('electron').shell.openExternal(url)
+ window.utools.outPlugin()
+ },
+ // 子输入框为空时的占位符,默认为字符串"搜索"
+ placeholder: "搜索"
+ }
+ }
+ }
+ // 文档模式
+ window.exports = {
+ "features.code": { // 注意:键对应的是plugin.json中的features.code
+ mode: "doc", // 文档模式
+ args: {
+ // 索引集合
+ // indexes: require('./indexes.json')
+ indexes:[
+ {
+ t: '这是标题',
+ d: '这是描述'.
+ p: 'doc/xxx.html' //页面, 只能是相对路径
+ }
+ ],
+ // 子输入框为空时的占位符,默认为字符串"搜索"
+ placeholder: "搜索"
+ }
+ }
+ }
+
uTools browser 简称 ubrowser,是根据 uTools 的特性,量身打造的一个可编程浏览器。
这是令我们感到特别兴奋一组API,因为利用 ubrowser 你可以轻而易举连接一切互联网服务,而且可以与uTools完美结合。
ubrowser 拥有优雅的链式调用接口,你可以用口语化的数行代码,实现一系列匪夷所思的操作。例如:
1、自动化测试(自动打开页面、点击、判断,彻底解放测试人员。)
2、自动抢票
3、自动去除搜索引擎广告
4、自动将选中的文字、图片保存到各类云笔记
基本demo:
// 打开"必应" 并搜索 "uTools"
+ utools.ubrowser.goto('https://cn.bing.com')
+ .value('#sb_form_q', 'uTools')
+ .click('#sb_form_go')
+ .run({ width: 1000, height: 600 })
+
useragent(userAgent)
userAgent
String设置 User-Agent
goto(url, headers)
url
String
headers
Object (可选)
{ Referer: string, userAgent: string }
前往
goto(mdText, title)
mdText
String
Markdown 文本
title
String (可选)
窗口标题
Markdown 转 Html 并显示
viewport(width, height)
width
Integerheight
Integer页面大小
hide()
隐藏 ubrowser 窗口
show()
显示 ubrowser 窗口
css(cssCode)
cssCode
String注入样式
press(key, ...modifier)
key
String
modifier
String (可选)
control | ctrl | shift | meta | alt | command | cmd
键盘按键
paste(text)
text
String (可选)
文本字符串 | 图片base64
执行粘贴
screenshot(arg, savePath)
arg
String | Object (可选)String - 要截取的DOM元素
Object - 截图位置和大小 { x: Integer, y: Integer, width: Integer, height: Integer }
为空 截取整个窗口
savePath
String (可选)
图片保存路径, 也可以是完整PNG文件路径。默认 存储在临时目录
部分网页截图
pdf(options, savePath)
options
Object (可选)
{ marginsType: 0 | 1 | 2, pageSize: ('A3' | 'A4' | 'A5' | 'Legal' | 'Letter' | 'Tabloid') | { width: Integer, height: Integer } }
与 Electron API 一致
savePath
String (可选)
图片保存路径, 也可以是完整pdf文件路径。默认 存储在临时目录
保存页面为PDF
device(arg)
arg
String | Object
String - 'iPhone 11' | 'iPhone X' | 'iPad' | 'iPhone 6/7/8 Plus' | 'iPhone 6/7/8' | 'iPhone 5/SE' | 'HUAWEI Mate10' | 'HUAWEI Mate20' | 'HUAWEI Mate30' | 'HUAWEI Mate30 Pro'
Object - { size: { width: Integer, height: Integer }, useragent: String }
模拟设备
cookies(name)
name
String (可选)为空获取全部cookie + 获取cookie
setCookies(name, value)
name
Stringvalue
String设置 cookie
setCookies(cookies)
cookies
Array
[{ name: String, value: String }]
设置 cookie
removeCookies(name)
name
String删除 cookie
clearCookies(url)
url
String (可选)
在执行"goto"前执行 url参数必需
清空 cookie
devTools(mode)
mode
String (可选)
'right' | 'bottom' | 'undocked' | 'detach' 默认为 'detach'
打开开发者工具
evaluate(func, ...params)
func
Function
在网页内执行的函数
param
Any (可选)
传递给 func 的参数
执行JS函数 如果有返回值将加入到返回结果中
.evaluate((param1, param2) => {
+ return document.querySelector('div').innerText
+ }, 'param1', 'param2')
+
wait(ms)
ms
Integer
等待的毫秒数
等待
wait(selector, timeout)
selector
String
DOM元素
timeout
Integer (可选)
超时 默认 10000 ms
等待DOM元素出现
wait(func, timeout,...params)
func
Function
在网页内执行的函数,返回 true 结束等待
timeout
Integer (可选)
超时 默认 10000 ms
param
Any (可选)
传递给 func 的参数
等待JS函数执行返回 true
when(selector)
selector
String
DOM元素
当元素存在时执行直到碰到 end() 方法
when(func, ...params)
func
Function
在网页内执行的函数,返回 true 执行
param
Any (可选)
传递给 func 的参数
当JS函数执行返回 true 时执行, 直到碰到 end() 方法
end()
与 when 配套使用
click(selector)
selector
String单击元素
mousedown(selector)
selector
String元素触发按下鼠标左键
mouseup(selector)
selector
String元素触发释放鼠标左键
file(selector, payload)
selector
String
input type='file' 元素
payload
String | Array | Buffer
文件路径 或 路径集合 或 文件Buffer
为网页中的file input 赋值
value(selector, val)
selector
String
input textarea select 元素
val
String
为网页中的input textarea select 元素赋值
check(selector, checked)
selector
String
checkbox radio 元素
checked
Boolean
是否选中
checkbox radio 元素选中或取消选中
focus(selector)
selector
String元素获得焦点
scroll(selector)
selector
String滚动到元素位置
scroll(y)
y
IntegerY轴滚动
scroll(x, y)
x
Integery
IntegerX轴和Y轴滚动
run(ubrowserId)
ubrowserId
Integer
utools.getIdleUBrowsers() 中获得
返回
Promise
运行在闲置的 ubrowser 上
run(options)
options
Object
Object
返回
Promise
\ No newline at end of file diff --git a/docs/vim/Quickfix 窗口.html b/src/docs/vim/Quickfix 窗口.html similarity index 100% rename from docs/vim/Quickfix 窗口.html rename to src/docs/vim/Quickfix 窗口.html diff --git a/docs/vim/书签.html b/src/docs/vim/书签.html similarity index 100% rename from docs/vim/书签.html rename to src/docs/vim/书签.html diff --git a/docs/vim/代码折叠.html b/src/docs/vim/代码折叠.html similarity index 100% rename from docs/vim/代码折叠.html rename to src/docs/vim/代码折叠.html diff --git a/docs/vim/位置跳转.html b/src/docs/vim/位置跳转.html similarity index 100% rename from docs/vim/位置跳转.html rename to src/docs/vim/位置跳转.html diff --git a/docs/vim/光标移动.html b/src/docs/vim/光标移动.html similarity index 100% rename from docs/vim/光标移动.html rename to src/docs/vim/光标移动.html diff --git a/docs/vim/其他命令.html b/src/docs/vim/其他命令.html similarity index 100% rename from docs/vim/其他命令.html rename to src/docs/vim/其他命令.html diff --git a/docs/vim/可视模式.html b/src/docs/vim/可视模式.html similarity index 100% rename from docs/vim/可视模式.html rename to src/docs/vim/可视模式.html diff --git a/docs/vim/复制粘贴.html b/src/docs/vim/复制粘贴.html similarity index 100% rename from docs/vim/复制粘贴.html rename to src/docs/vim/复制粘贴.html diff --git a/docs/vim/外部命令.html b/src/docs/vim/外部命令.html similarity index 100% rename from docs/vim/外部命令.html rename to src/docs/vim/外部命令.html diff --git a/docs/vim/宏录制.html b/src/docs/vim/宏录制.html similarity index 100% rename from docs/vim/宏录制.html rename to src/docs/vim/宏录制.html diff --git a/docs/vim/已打开文件操作.html b/src/docs/vim/已打开文件操作.html similarity index 100% rename from docs/vim/已打开文件操作.html rename to src/docs/vim/已打开文件操作.html diff --git a/docs/vim/帮助信息.html b/src/docs/vim/帮助信息.html similarity index 100% rename from docs/vim/帮助信息.html rename to src/docs/vim/帮助信息.html diff --git a/docs/vim/常用设置.html b/src/docs/vim/常用设置.html similarity index 100% rename from docs/vim/常用设置.html rename to src/docs/vim/常用设置.html diff --git a/docs/vim/拼写检查.html b/src/docs/vim/拼写检查.html similarity index 100% rename from docs/vim/拼写检查.html rename to src/docs/vim/拼写检查.html diff --git a/docs/vim/插入模式.html b/src/docs/vim/插入模式.html similarity index 100% rename from docs/vim/插入模式.html rename to src/docs/vim/插入模式.html diff --git a/docs/vim/插入模式:进入退出.html b/src/docs/vim/插入模式:进入退出.html similarity index 100% rename from docs/vim/插入模式:进入退出.html rename to src/docs/vim/插入模式:进入退出.html diff --git a/docs/vim/文件操作.html b/src/docs/vim/文件操作.html similarity index 100% rename from docs/vim/文件操作.html rename to src/docs/vim/文件操作.html diff --git a/docs/vim/文本对象.html b/src/docs/vim/文本对象.html similarity index 100% rename from docs/vim/文本对象.html rename to src/docs/vim/文本对象.html diff --git a/docs/vim/文本编辑.html b/src/docs/vim/文本编辑.html similarity index 100% rename from docs/vim/文本编辑.html rename to src/docs/vim/文本编辑.html diff --git a/docs/vim/查找替换.html b/src/docs/vim/查找替换.html similarity index 100% rename from docs/vim/查找替换.html rename to src/docs/vim/查找替换.html diff --git a/docs/vim/标签页.html b/src/docs/vim/标签页.html similarity index 100% rename from docs/vim/标签页.html rename to src/docs/vim/标签页.html diff --git a/docs/vim/窗口操作.html b/src/docs/vim/窗口操作.html similarity index 100% rename from docs/vim/窗口操作.html rename to src/docs/vim/窗口操作.html diff --git a/docs/vue/VNode-接口.html b/src/docs/vue/VNode-接口.html similarity index 100% rename from docs/vue/VNode-接口.html rename to src/docs/vue/VNode-接口.html diff --git a/docs/vue/guide/class-and-style.html b/src/docs/vue/guide/class-and-style.html similarity index 100% rename from docs/vue/guide/class-and-style.html rename to src/docs/vue/guide/class-and-style.html diff --git a/docs/vue/guide/comparison.html b/src/docs/vue/guide/comparison.html similarity index 100% rename from docs/vue/guide/comparison.html rename to src/docs/vue/guide/comparison.html diff --git a/docs/vue/guide/components-custom-events.html b/src/docs/vue/guide/components-custom-events.html similarity index 100% rename from docs/vue/guide/components-custom-events.html rename to src/docs/vue/guide/components-custom-events.html diff --git a/docs/vue/guide/components-dynamic-async.html b/src/docs/vue/guide/components-dynamic-async.html similarity index 100% rename from docs/vue/guide/components-dynamic-async.html rename to src/docs/vue/guide/components-dynamic-async.html diff --git a/docs/vue/guide/components-edge-cases.html b/src/docs/vue/guide/components-edge-cases.html similarity index 100% rename from docs/vue/guide/components-edge-cases.html rename to src/docs/vue/guide/components-edge-cases.html diff --git a/docs/vue/guide/components-props.html b/src/docs/vue/guide/components-props.html similarity index 100% rename from docs/vue/guide/components-props.html rename to src/docs/vue/guide/components-props.html diff --git a/docs/vue/guide/components-registration.html b/src/docs/vue/guide/components-registration.html similarity index 100% rename from docs/vue/guide/components-registration.html rename to src/docs/vue/guide/components-registration.html diff --git a/docs/vue/guide/components-slots.html b/src/docs/vue/guide/components-slots.html similarity index 100% rename from docs/vue/guide/components-slots.html rename to src/docs/vue/guide/components-slots.html diff --git a/docs/vue/guide/components.html b/src/docs/vue/guide/components.html similarity index 100% rename from docs/vue/guide/components.html rename to src/docs/vue/guide/components.html diff --git a/docs/vue/guide/computed.html b/src/docs/vue/guide/computed.html similarity index 100% rename from docs/vue/guide/computed.html rename to src/docs/vue/guide/computed.html diff --git a/docs/vue/guide/conditional.html b/src/docs/vue/guide/conditional.html similarity index 100% rename from docs/vue/guide/conditional.html rename to src/docs/vue/guide/conditional.html diff --git a/docs/vue/guide/custom-directive.html b/src/docs/vue/guide/custom-directive.html similarity index 100% rename from docs/vue/guide/custom-directive.html rename to src/docs/vue/guide/custom-directive.html diff --git a/docs/vue/guide/deployment.html b/src/docs/vue/guide/deployment.html similarity index 100% rename from docs/vue/guide/deployment.html rename to src/docs/vue/guide/deployment.html diff --git a/docs/vue/guide/events.html b/src/docs/vue/guide/events.html similarity index 100% rename from docs/vue/guide/events.html rename to src/docs/vue/guide/events.html diff --git a/docs/vue/guide/filters.html b/src/docs/vue/guide/filters.html similarity index 100% rename from docs/vue/guide/filters.html rename to src/docs/vue/guide/filters.html diff --git a/docs/vue/guide/forms.html b/src/docs/vue/guide/forms.html similarity index 100% rename from docs/vue/guide/forms.html rename to src/docs/vue/guide/forms.html diff --git a/docs/vue/guide/index.html b/src/docs/vue/guide/index.html similarity index 100% rename from docs/vue/guide/index.html rename to src/docs/vue/guide/index.html diff --git a/docs/vue/guide/installation.html b/src/docs/vue/guide/installation.html similarity index 100% rename from docs/vue/guide/installation.html rename to src/docs/vue/guide/installation.html diff --git a/docs/vue/guide/instance.html b/src/docs/vue/guide/instance.html similarity index 100% rename from docs/vue/guide/instance.html rename to src/docs/vue/guide/instance.html diff --git a/docs/vue/guide/join.html b/src/docs/vue/guide/join.html similarity index 100% rename from docs/vue/guide/join.html rename to src/docs/vue/guide/join.html diff --git a/docs/vue/guide/list.html b/src/docs/vue/guide/list.html similarity index 100% rename from docs/vue/guide/list.html rename to src/docs/vue/guide/list.html diff --git a/docs/vue/guide/migration-vue-router.html b/src/docs/vue/guide/migration-vue-router.html similarity index 100% rename from docs/vue/guide/migration-vue-router.html rename to src/docs/vue/guide/migration-vue-router.html diff --git a/docs/vue/guide/migration-vuex.html b/src/docs/vue/guide/migration-vuex.html similarity index 100% rename from docs/vue/guide/migration-vuex.html rename to src/docs/vue/guide/migration-vuex.html diff --git a/docs/vue/guide/migration.html b/src/docs/vue/guide/migration.html similarity index 100% rename from docs/vue/guide/migration.html rename to src/docs/vue/guide/migration.html diff --git a/docs/vue/guide/mixins.html b/src/docs/vue/guide/mixins.html similarity index 100% rename from docs/vue/guide/mixins.html rename to src/docs/vue/guide/mixins.html diff --git a/docs/vue/guide/plugins.html b/src/docs/vue/guide/plugins.html similarity index 100% rename from docs/vue/guide/plugins.html rename to src/docs/vue/guide/plugins.html diff --git a/docs/vue/guide/reactivity.html b/src/docs/vue/guide/reactivity.html similarity index 100% rename from docs/vue/guide/reactivity.html rename to src/docs/vue/guide/reactivity.html diff --git a/docs/vue/guide/render-function.html b/src/docs/vue/guide/render-function.html similarity index 100% rename from docs/vue/guide/render-function.html rename to src/docs/vue/guide/render-function.html diff --git a/docs/vue/guide/routing.html b/src/docs/vue/guide/routing.html similarity index 100% rename from docs/vue/guide/routing.html rename to src/docs/vue/guide/routing.html diff --git a/docs/vue/guide/single-file-components.html b/src/docs/vue/guide/single-file-components.html similarity index 100% rename from docs/vue/guide/single-file-components.html rename to src/docs/vue/guide/single-file-components.html diff --git a/docs/vue/guide/ssr.html b/src/docs/vue/guide/ssr.html similarity index 100% rename from docs/vue/guide/ssr.html rename to src/docs/vue/guide/ssr.html diff --git a/docs/vue/guide/state-management.html b/src/docs/vue/guide/state-management.html similarity index 100% rename from docs/vue/guide/state-management.html rename to src/docs/vue/guide/state-management.html diff --git a/docs/vue/guide/syntax.html b/src/docs/vue/guide/syntax.html similarity index 100% rename from docs/vue/guide/syntax.html rename to src/docs/vue/guide/syntax.html diff --git a/docs/vue/guide/team.html b/src/docs/vue/guide/team.html similarity index 100% rename from docs/vue/guide/team.html rename to src/docs/vue/guide/team.html diff --git a/docs/vue/guide/transitioning-state.html b/src/docs/vue/guide/transitioning-state.html similarity index 100% rename from docs/vue/guide/transitioning-state.html rename to src/docs/vue/guide/transitioning-state.html diff --git a/docs/vue/guide/transitions.html b/src/docs/vue/guide/transitions.html similarity index 100% rename from docs/vue/guide/transitions.html rename to src/docs/vue/guide/transitions.html diff --git a/docs/vue/guide/typescript.html b/src/docs/vue/guide/typescript.html similarity index 100% rename from docs/vue/guide/typescript.html rename to src/docs/vue/guide/typescript.html diff --git a/docs/vue/guide/unit-testing.html b/src/docs/vue/guide/unit-testing.html similarity index 100% rename from docs/vue/guide/unit-testing.html rename to src/docs/vue/guide/unit-testing.html diff --git a/docs/vue/全局-API.html b/src/docs/vue/全局-API.html similarity index 100% rename from docs/vue/全局-API.html rename to src/docs/vue/全局-API.html diff --git a/docs/vue/全局配置.html b/src/docs/vue/全局配置.html similarity index 100% rename from docs/vue/全局配置.html rename to src/docs/vue/全局配置.html diff --git a/docs/vue/内置的组件.html b/src/docs/vue/内置的组件.html similarity index 100% rename from docs/vue/内置的组件.html rename to src/docs/vue/内置的组件.html diff --git a/docs/vue/实例属性.html b/src/docs/vue/实例属性.html similarity index 100% rename from docs/vue/实例属性.html rename to src/docs/vue/实例属性.html diff --git a/docs/vue/实例方法-事件.html b/src/docs/vue/实例方法-事件.html similarity index 100% rename from docs/vue/实例方法-事件.html rename to src/docs/vue/实例方法-事件.html diff --git a/docs/vue/实例方法-数据.html b/src/docs/vue/实例方法-数据.html similarity index 100% rename from docs/vue/实例方法-数据.html rename to src/docs/vue/实例方法-数据.html diff --git a/docs/vue/实例方法-生命周期.html b/src/docs/vue/实例方法-生命周期.html similarity index 100% rename from docs/vue/实例方法-生命周期.html rename to src/docs/vue/实例方法-生命周期.html diff --git a/docs/vue/指令.html b/src/docs/vue/指令.html similarity index 100% rename from docs/vue/指令.html rename to src/docs/vue/指令.html diff --git a/docs/vue/服务端渲染.html b/src/docs/vue/服务端渲染.html similarity index 100% rename from docs/vue/服务端渲染.html rename to src/docs/vue/服务端渲染.html diff --git a/docs/vue/特殊特性.html b/src/docs/vue/特殊特性.html similarity index 100% rename from docs/vue/特殊特性.html rename to src/docs/vue/特殊特性.html diff --git a/docs/vue/选项-DOM.html b/src/docs/vue/选项-DOM.html similarity index 100% rename from docs/vue/选项-DOM.html rename to src/docs/vue/选项-DOM.html diff --git a/docs/vue/选项-其它.html b/src/docs/vue/选项-其它.html similarity index 100% rename from docs/vue/选项-其它.html rename to src/docs/vue/选项-其它.html diff --git a/docs/vue/选项-数据.html b/src/docs/vue/选项-数据.html similarity index 100% rename from docs/vue/选项-数据.html rename to src/docs/vue/选项-数据.html diff --git a/docs/vue/选项-生命周期钩子.html b/src/docs/vue/选项-生命周期钩子.html similarity index 100% rename from docs/vue/选项-生命周期钩子.html rename to src/docs/vue/选项-生命周期钩子.html diff --git a/docs/vue/选项-组合.html b/src/docs/vue/选项-组合.html similarity index 100% rename from docs/vue/选项-组合.html rename to src/docs/vue/选项-组合.html diff --git a/docs/vue/选项-资源.html b/src/docs/vue/选项-资源.html similarity index 100% rename from docs/vue/选项-资源.html rename to src/docs/vue/选项-资源.html diff --git a/features/default.json b/src/features/default.json similarity index 100% rename from features/default.json rename to src/features/default.json diff --git a/features/devdocs.json b/src/features/devdocs.json similarity index 100% rename from features/devdocs.json rename to src/features/devdocs.json diff --git a/index.html b/src/index.html similarity index 90% rename from index.html rename to src/index.html index 9a634de6..5e91f01b 100644 --- a/index.html +++ b/src/index.html @@ -12,7 +12,7 @@ - +启动一个 ubrowser 运行