├── 7058EC8E-E2B9-4134-A85D-C92BE50493FD.png ├── AlfredMagic.alfredworkflow ├── CanIUse └── caniuse.js ├── Config └── CustomerConfig.js ├── LICENSE ├── MDN └── MDN.js ├── PICS ├── .DS_Store ├── CanIUse-1.png ├── CanIUse-key.gif ├── CanIUse.gif ├── CodeExpander-Content.png ├── CodeExpander-key.png ├── MDN-key.png ├── MDN.gif ├── React-key.png ├── React.gif ├── React.png ├── ShellHere.gif ├── So-1.png ├── So-key.gif ├── So.gif ├── VariableName-1.gif ├── VariableName-2.gif ├── VariableName-key.png └── VariableName.gif ├── README.md ├── ReactDocument └── ReactDocument.js ├── StackOverFlow └── so.js ├── VariableNameTransLate ├── MainLogic │ ├── FeachDataFromServer.js │ └── ProcessingResults.js ├── bigHump.js ├── bigUnderLine.js ├── littleHump.js └── littleUnderLine.js ├── VueDocument └── VueDocument.js ├── icon.png ├── info.plist ├── package-lock.json └── package.json /7058EC8E-E2B9-4134-A85D-C92BE50493FD.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CoderMageFox/alfredMagic/8282ce76cbdd7695e0f0f250f9dd8b19cec3baae/7058EC8E-E2B9-4134-A85D-C92BE50493FD.png -------------------------------------------------------------------------------- /AlfredMagic.alfredworkflow: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CoderMageFox/alfredMagic/8282ce76cbdd7695e0f0f250f9dd8b19cec3baae/AlfredMagic.alfredworkflow -------------------------------------------------------------------------------- /CanIUse/caniuse.js: -------------------------------------------------------------------------------- 1 | const alfy = require('alfy'); 2 | const CanIUse = require('caniuse-api'); 3 | class FeachCanIuseAction { 4 | constructor(){} 5 | //主寻找逻辑 6 | findName(input){ 7 | let alfyResultArr = []; 8 | let inputGuess = CanIUse.find(input); 9 | //此逻辑用于判断精准查询,代码层面可后续优化 10 | if (input === CanIUse.find(input)){ 11 | alfyResultArr.push(this.preciseQuery(input)) 12 | }else 13 | inputGuess.map((item)=>{ 14 | alfyResultArr.push(this.preciseQuery(item)) 15 | }); 16 | alfy.output(alfyResultArr) 17 | } 18 | //格式化拿到的数据 19 | FormatResults(CompatibilityResult){ 20 | let ChromeSupportVersion,FirefoxSupportVersion,IESupportVersion,SafariSupportVersion,ResultString; 21 | ChromeSupportVersion = `${CompatibilityResult['chrome']['y'] || `暂无数据`}`; 22 | FirefoxSupportVersion = `${CompatibilityResult['firefox']['y'] || `暂无数据`}` ; 23 | IESupportVersion = `${CompatibilityResult['ie']['y'] || `暂无数据`}` ; 24 | SafariSupportVersion = `${CompatibilityResult['safari']['y'] || `暂无数据`} `; 25 | ResultString = `最低兼容版本 Chrome:${ChromeSupportVersion} FireFox:${FirefoxSupportVersion} IE:${IESupportVersion} Safari:${SafariSupportVersion}` 26 | return ResultString 27 | }; 28 | //精准查询 29 | preciseQuery(input){ 30 | let response = CanIUse.getSupport(input); 31 | let FormattedResult = this.FormatResults(response); 32 | return { 33 | title: input, 34 | subtitle: FormattedResult, 35 | arg: `https://caniuse.com/#search=${input}` 36 | } 37 | } 38 | 39 | } 40 | let actions = new FeachCanIuseAction; 41 | 42 | (function () { 43 | actions.findName(alfy.input); 44 | })(); 45 | -------------------------------------------------------------------------------- /Config/CustomerConfig.js: -------------------------------------------------------------------------------- 1 | const alfy = require('alfy'); 2 | const _ = require('lodash') 3 | //此处Key为GitHub上搜集而来,如有冒犯请谅解 4 | const KeyArray = [ 5 | { 6 | keyfrom: 'node-translator', 7 | key: '2058911035' 8 | }, 9 | { 10 | keyfrom: 'kaiyao-robot', 11 | key: '2016811247' 12 | }, 13 | { 14 | keyfrom: 'myWebsite', 15 | key: '423366321' 16 | }, 17 | { 18 | keyfrom: 'github-wdict', 19 | key: '619541059' 20 | }, 21 | { 22 | keyfrom: 'lanyuejin', 23 | key: '2033774719' 24 | }, 25 | ]; 26 | 27 | module.exports = { 28 | youDaoApi: 'http://fanyi.youdao.com/openapi.do', 29 | getParams: function () { 30 | let selected = _.sample(KeyArray); 31 | return { 32 | query: { 33 | keyfrom: selected.keyfrom, 34 | key: selected.key, 35 | type: 'data', 36 | doctype: 'json', 37 | version: '1.1', 38 | q: alfy.input 39 | } 40 | } 41 | }, 42 | }; 43 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2019 CoderMageFox 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /MDN/MDN.js: -------------------------------------------------------------------------------- 1 | const alfy = require('alfy'); 2 | 3 | class MDNActions { 4 | constructor() { 5 | this.URL = `https://developer.mozilla.org/zh-CN/`; //可修改为en-US查询英文文档 6 | } 7 | //请求MDN接口主逻辑 8 | feachMDNResult(input) { 9 | let encodedInput = encodeURI(input); 10 | alfy.fetch(`${this.URL}search.json?q=${encodedInput}`).then(MDNResponse => { 11 | this.processResponse(MDNResponse) 12 | }); 13 | } 14 | 15 | //处理返回的响应,只取Documents部分,不做分页 16 | processResponse(response) { 17 | let documents, ProcessedResponse,optimizedResponse, HTMLTagReg; 18 | //匹配全局HTML标签 19 | HTMLTagReg = /<\/?.+?\/?>/g; 20 | documents = response.documents; 21 | ProcessedResponse = []; 22 | documents.map((data) => { 23 | ProcessedResponse.push({ 24 | title: data.title, 25 | //正则替换的原因是excerpt的返回结果里带了HTML标签,影响阅读. 26 | subtitle: data.excerpt.replace(HTMLTagReg, ''), 27 | arg: data.url,//此处将url置为arg是为了后面引用URL打开网页 28 | }) 29 | }); 30 | optimizedResponse = this.optimizeSearchResults(ProcessedResponse); 31 | this.outputResults(optimizedResponse) 32 | } 33 | optimizeSearchResults(ProcessedResponse) { 34 | //TODO:OptimizeSearchResults函数用于优化搜索结果.文档的搜索结果有部分英文结果排在前面,我们需要把这部分结果挪到后面去,根据对象内的键值对数组重新排序 35 | return ProcessedResponse 36 | } 37 | 38 | outputResults(result) { 39 | if (!result) { 40 | alfy.output([{ 41 | title: '未找到数据', 42 | subtitle: '请输入正确的关键字', 43 | arg: 'Error!' 44 | }]) 45 | } else { 46 | alfy.output(result); 47 | } 48 | } 49 | } 50 | 51 | let FeachMDN = new MDNActions; 52 | (function () { 53 | FeachMDN.feachMDNResult(alfy.input); 54 | })(); 55 | -------------------------------------------------------------------------------- /PICS/.DS_Store: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CoderMageFox/alfredMagic/8282ce76cbdd7695e0f0f250f9dd8b19cec3baae/PICS/.DS_Store -------------------------------------------------------------------------------- /PICS/CanIUse-1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CoderMageFox/alfredMagic/8282ce76cbdd7695e0f0f250f9dd8b19cec3baae/PICS/CanIUse-1.png -------------------------------------------------------------------------------- /PICS/CanIUse-key.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CoderMageFox/alfredMagic/8282ce76cbdd7695e0f0f250f9dd8b19cec3baae/PICS/CanIUse-key.gif -------------------------------------------------------------------------------- /PICS/CanIUse.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CoderMageFox/alfredMagic/8282ce76cbdd7695e0f0f250f9dd8b19cec3baae/PICS/CanIUse.gif -------------------------------------------------------------------------------- /PICS/CodeExpander-Content.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CoderMageFox/alfredMagic/8282ce76cbdd7695e0f0f250f9dd8b19cec3baae/PICS/CodeExpander-Content.png -------------------------------------------------------------------------------- /PICS/CodeExpander-key.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CoderMageFox/alfredMagic/8282ce76cbdd7695e0f0f250f9dd8b19cec3baae/PICS/CodeExpander-key.png -------------------------------------------------------------------------------- /PICS/MDN-key.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CoderMageFox/alfredMagic/8282ce76cbdd7695e0f0f250f9dd8b19cec3baae/PICS/MDN-key.png -------------------------------------------------------------------------------- /PICS/MDN.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CoderMageFox/alfredMagic/8282ce76cbdd7695e0f0f250f9dd8b19cec3baae/PICS/MDN.gif -------------------------------------------------------------------------------- /PICS/React-key.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CoderMageFox/alfredMagic/8282ce76cbdd7695e0f0f250f9dd8b19cec3baae/PICS/React-key.png -------------------------------------------------------------------------------- /PICS/React.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CoderMageFox/alfredMagic/8282ce76cbdd7695e0f0f250f9dd8b19cec3baae/PICS/React.gif -------------------------------------------------------------------------------- /PICS/React.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CoderMageFox/alfredMagic/8282ce76cbdd7695e0f0f250f9dd8b19cec3baae/PICS/React.png -------------------------------------------------------------------------------- /PICS/ShellHere.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CoderMageFox/alfredMagic/8282ce76cbdd7695e0f0f250f9dd8b19cec3baae/PICS/ShellHere.gif -------------------------------------------------------------------------------- /PICS/So-1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CoderMageFox/alfredMagic/8282ce76cbdd7695e0f0f250f9dd8b19cec3baae/PICS/So-1.png -------------------------------------------------------------------------------- /PICS/So-key.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CoderMageFox/alfredMagic/8282ce76cbdd7695e0f0f250f9dd8b19cec3baae/PICS/So-key.gif -------------------------------------------------------------------------------- /PICS/So.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CoderMageFox/alfredMagic/8282ce76cbdd7695e0f0f250f9dd8b19cec3baae/PICS/So.gif -------------------------------------------------------------------------------- /PICS/VariableName-1.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CoderMageFox/alfredMagic/8282ce76cbdd7695e0f0f250f9dd8b19cec3baae/PICS/VariableName-1.gif -------------------------------------------------------------------------------- /PICS/VariableName-2.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CoderMageFox/alfredMagic/8282ce76cbdd7695e0f0f250f9dd8b19cec3baae/PICS/VariableName-2.gif -------------------------------------------------------------------------------- /PICS/VariableName-key.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CoderMageFox/alfredMagic/8282ce76cbdd7695e0f0f250f9dd8b19cec3baae/PICS/VariableName-key.png -------------------------------------------------------------------------------- /PICS/VariableName.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CoderMageFox/alfredMagic/8282ce76cbdd7695e0f0f250f9dd8b19cec3baae/PICS/VariableName.gif -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # AlfredMagic 2 | ##### 一个面向中文前端开发者效率提升的Alfred插件 3 | ![](https://img.shields.io/badge/NodeJs-8.0%2B-green.svg) ![](https://img.shields.io/badge/Alfred-3-green.svg) 4 | 5 | ##### Require Node.js 8+,[alfred3](https://www.alfredapp.com/) PowerPack. 6 | ![](./icon.png) 7 | 8 | 9 | Base on [alfy](https://github.com/sindresorhus/alfy),AppleScript,Alfred,JavaScript. 10 | 11 | >本插件针对前端开发者日常碰到的部分琐事进行了WorkFlow化,比较高频的如文档查询/变量命名/驼峰和Action的变量编写规则切换等.亲友均反应有不错的效率提升,在项目高压的时候有奇效. 12 | 13 | >希望,它能让你不加班. 14 | 15 | **易扩展**,**可配置**,**单独模块可分拆** 16 | 17 | **Version 0.0.2** 18 | 19 | **注意:由于Alfred自身限制,所有功能快捷键需要您自己设置.可以通过查看文档/Workflow Script中的备注寻找对应的WorkFlow进行快捷键设置** 20 | 21 | 使用方法:直接下载项目中的AlfredMagic.alfredworkflow双击安装即可. 22 | 23 | (防墙)百度网盘下载链接: https://pan.baidu.com/s/1oO4PWQiLgCpbU3wY6yC4Hw 提取码: yetm 24 | 25 | 26 | ##### Code By [CoderMageFox](https://github.com/CoderMageFox) Blog:[No Silver Bullet](http://blog.codermagefox.com/) Mail:codermagefox@codermagefox.com 27 | 28 | # 变量命名/网页翻译 29 | 30 | #### WorkFlow查询关键字:`vn` 31 | 32 | >代码思路参考自CodeVar https://github.com/xudaolong/CodeVar 在此表示感谢. 33 | 34 | #### 例子: 35 | 36 | 37 | ![](./PICS/VariableName.gif) 38 | 39 | 40 | ####例子:使用变量命名生成一段代码 41 | 42 | ![](./PICS/VariableName-1.gif) 43 | 44 | #### 快捷键查询 45 | 在此处设置 46 | 47 | ![](./PICS/VariableName-key.png) 48 | 49 | 设置后选中内容并使用快捷键即可一键翻译. 50 | 51 | ![](./PICS/VariableName-2.gif) 52 | 53 | ####在设置中可以直接查看如何选择其他命名方式.提供了action命令以便直接调用大写+下划线写法(0.0.2更新) 54 | 55 | 56 | # CanIUse兼容性查询 57 | #### WorkFlow查询关键字:`use` 58 | #### 例子: 59 | 60 | ![](./PICS/CanIUse.gif) 61 | 62 | Tips: 63 | 64 | 1.CanIUse查询不支持中文,输入中文将直接进入搜索. 65 | 66 | 2.由于alfy限制,CanIUse查询不支持空格. 67 | 68 | #### 快捷键查询 69 | 在此处设置 70 | 71 | ![](./PICS/CanIUse-1.png) 72 | 73 | 设置后选中内容并使用快捷键即可一键查询. 74 | 75 | ![](./PICS/CanIUse-key.gif) 76 | 77 | # MDN文档查询 78 | #### WorkFlow查询关键字:`mdn` 79 | #### 例子: 80 | 81 | ![](./PICS/MDN.gif) 82 | 83 | Tips: 84 | 85 | 1.MDN搜索基本无限制.如果需要配置英文文档,请参考MDN.js下的注释. 86 | 87 | #### 快捷键查询 88 | 在此处设置 89 | 90 | ![](./PICS/MDN-key.png) 91 | 92 | 设置后选中内容并使用快捷键即可一键查询. 93 | 94 | # React文档查询/Vue文档查询 95 | #### WorkFlow查询关键字:`react`,`vue` 96 | #### 例子: 97 | 98 | ![](./PICS/React.gif) 99 | 100 | Tips: 101 | 102 | 1.Vue与React文档检索代码部分基本相同,调用的是algolia的搜索,你可以通过修改配置项添加自己的文档搜索,具体见 https://www.algolia.com/doc/api-reference/ 103 | 104 | 2.同理,如果想搜索英文文档,请直接寻找对应的Key做替换即可. 105 | 106 | #### 设置与代码 107 | 在此处设置 108 | 109 | 110 | ![](./PICS/React-key.png) 111 | 112 | # ShellHere 113 | 114 | #### WorkFlow查询关键字:`>h` (>是直接执行命令行) 115 | 116 | >代码来自 https://github.com/LeEnno/alfred-terminalfinder 117 | 118 | #### 例子:(配合Alfred Find命令使用) 119 | 120 | ![](./PICS/ShellHere.gif) 121 | 122 | # StackOverFlow中文查询 123 | #### WorkFlow查询关键字:`so` 124 | #### 例子: 125 | 126 | ![](./PICS/So.gif) 127 | 128 | Tips: 129 | 130 | 1.使用的API为有道词典标准翻译,不一定准,但是可以省你不少时间.你可以在进入页面后自行修饰搜索词汇. 131 | 132 | 2.由于未对中英文输入做区分,输入英文可能出现不可预料的Bug.(如果是查报错的话应该就直接用快捷键了吧?没人会再敲一遍吧?) 133 | 134 | #### 快捷键查询 135 | 在此处设置 136 | 137 | ![](./PICS/So-1.png) 138 | 139 | 设置后选中内容并使用快捷键即可一键查询. 140 | 141 | ![](./PICS/So-key.gif) 142 | 143 | **注意!使用API查询的方式是有限制的(一定时间内300次),如果频繁查询可能会出现400错误.因为这个问题我将节流时间调的很大,如果用起来体验不佳请自行调整Script的节流时间.** 144 | -------------------------------------------------------------------------------- /ReactDocument/ReactDocument.js: -------------------------------------------------------------------------------- 1 | const alfy = require('alfy'); 2 | const algoliaSearch = require('algoliasearch'); 3 | //React.js文档的algoliasearchID与Key 4 | let client = algoliaSearch('BH4D9OD16A', 'fb1476c24383a4a7a8d944449c21fdba'); 5 | let index = client.initIndex('react_china'); 6 | const _ = require('lodash'); 7 | //获取React文档数据 8 | class VueDocumentActions { 9 | constructor(index) { 10 | this.index=index; 11 | } 12 | getVueDocumentSearch(Params) { 13 | this.index.search( 14 | { 15 | query: Params, 16 | hitsPerPage: 50, 17 | }, 18 | function searchDone(err, content) { 19 | if (err) throw err; 20 | let ResultArr; 21 | ResultArr=[]; 22 | content.hits.map((hit)=>{ 23 | let subtitle; 24 | subtitle = 'React'; 25 | _.forEach(hit.hierarchy,function (value) { 26 | if(value!==null) 27 | {subtitle += '=>'+value } 28 | }); 29 | ResultArr.push({ 30 | title:`${hit.anchor==='ad'?`进入文档`:hit.anchor}`, 31 | subtitle:subtitle, 32 | arg:hit.url, 33 | }) 34 | }); 35 | alfy.output(ResultArr) 36 | } 37 | ); 38 | } 39 | } 40 | 41 | let FeachVue = new VueDocumentActions(index); 42 | (function () { 43 | FeachVue.getVueDocumentSearch(alfy.input); 44 | })(); 45 | -------------------------------------------------------------------------------- /StackOverFlow/so.js: -------------------------------------------------------------------------------- 1 | const alfy = require('alfy'); 2 | const Config = require('../Config/CustomerConfig'); 3 | //有道翻译获取原始翻译数据(用于SO搜索) 4 | class SoActions { 5 | constructor() {} 6 | getOriginResult(Api, Params) { 7 | let ResultValueArr, ResultTranslationArr; 8 | alfy.fetch(Api, Params).then(Result => { 9 | if (Result.errorCode === 0) { 10 | ResultValueArr = []; 11 | ResultTranslationArr = Result.translation; 12 | ResultTranslationArr.map((item) => { 13 | ResultValueArr.push({ 14 | title: item, 15 | subtitle: `标准翻译结果: ${item}`, 16 | arg: item, 17 | }) 18 | }); 19 | this.getResultFromSo(ResultValueArr) 20 | } 21 | }); 22 | } 23 | //从stackexchangeAPI拉取SO数据(注意,有调用限制) 24 | getResultFromSo(ResultValueArr) { 25 | let transResult, outputResult; 26 | transResult = ResultValueArr[0].arg; 27 | outputResult = []; 28 | //此处是为了在第一项中显示翻译结果,添加了第一项的结果查询 29 | outputResult.push(ResultValueArr[0]); 30 | let encodedtransResult = encodeURI(transResult); 31 | alfy.fetch(`https://api.stackexchange.com/2.2/search?order=desc&sort=votes&intitle=${encodedtransResult}&site=stackoverflow`, transResult).then((Result) => { 32 | if (Result.items.length === 0) { 33 | outputResult.push({ 34 | title: '无可用回答,请尝试重新输入', 35 | subtitle: '提示:请不要输入过多的关键字以免影响翻译', 36 | arg: null 37 | }) 38 | } else { 39 | Result.items.map((question) => { 40 | outputResult.push({ 41 | title: question.title, 42 | subtitle: `已有回答${question.answer_count || 0}个,浏览数${question.view_count || 0}个`, 43 | arg: question.link 44 | }); 45 | }) 46 | } 47 | alfy.output(outputResult); 48 | }) 49 | } 50 | } 51 | let FeachSo = new SoActions; 52 | (function () { 53 | FeachSo.getOriginResult(Config.youDaoApi, Config.getParams()) 54 | })(); 55 | -------------------------------------------------------------------------------- /VariableNameTransLate/MainLogic/FeachDataFromServer.js: -------------------------------------------------------------------------------- 1 | 'use strict'; 2 | const alfy = require('alfy'); 3 | const ErrResult = [{ 4 | title: '无返回结果', 5 | subtitle: `找不到相关结果,原因可能是Key失效/服务抽风/你输入了奇怪的内容`, 6 | arg: 'error', 7 | }]; 8 | module.exports = { 9 | //有道翻译处理后的翻译数据(用于变量命名) 10 | getJoinedResult: function (Api, Params, Name) { 11 | alfy.fetch(Api, Params).then(Result => { 12 | if (Result.errorCode === 0) { 13 | let ResultValueArr, ResultTranslationArr; 14 | //默认初始值: 15 | //ValueArr用于获取 16 | ResultValueArr = []; 17 | ResultTranslationArr = Result.translation; 18 | ResultTranslationArr.map((item) => { 19 | ResultValueArr.push({ 20 | title: Name(item), 21 | subtitle: `标准翻译结果: ${item}`, 22 | arg: Name(item), 23 | }); 24 | }); 25 | // 网络翻译结果 26 | if (Result.web) { 27 | let WebResult = Result.web; 28 | WebResult.map((item) => { 29 | ResultValueArr.push({ 30 | title: Name(item.value[0]), 31 | subtitle: `其他翻译结果:${Name(item.value[0])}`, 32 | arg: Name(item.value[0]), 33 | }); 34 | }) 35 | } 36 | alfy.output(ResultValueArr); 37 | } else { 38 | alfy.output(ErrResult); 39 | } 40 | }); 41 | }, 42 | }; 43 | -------------------------------------------------------------------------------- /VariableNameTransLate/MainLogic/ProcessingResults.js: -------------------------------------------------------------------------------- 1 | //此类用于储存各种格式化字符串方法 2 | class FormatterActions { 3 | constructor(){} 4 | //formatterBasic用于将返回结果全部转为标准小写格式数组 5 | static formatterBasic(string){ 6 | let stringArray = string.toLowerCase(); 7 | return stringArray.split(' '); 8 | } 9 | //littleHump方法用于将返回转为小驼峰格式并拼接,一般用于普通函数命名 10 | littleHump(string){ 11 | let basicStrArr = FormatterActions.formatterBasic(string); 12 | // 小驼峰命名 13 | return basicStrArr.reduce(function (prev, cur) { 14 | return prev + cur.charAt(0).toUpperCase()+ cur.substring(1); 15 | }); 16 | } 17 | //bigHump方法用于将返回全部转为大驼峰并拼接,一般用于构造函数. 18 | bigtHump(string){ 19 | let basicStrArr = FormatterActions.formatterBasic(string); 20 | let bigHumpArray = basicStrArr.map((item)=>{ 21 | return item.charAt(0).toUpperCase()+ item.substring(1); 22 | }); 23 | return bigHumpArray.join('') 24 | } 25 | //littleUnderLine方法用于将返回转为全部是小写的_拼接,常用于CSS命名等. 26 | littleUnderLine(string){ 27 | let basicStrArr = FormatterActions.formatterBasic(string); 28 | return basicStrArr.reduce(function (prev, cur) { 29 | return prev + '_' +cur 30 | }); 31 | } 32 | //bigUnderLine方法用于将返回转为全部是大写的_拼接,常用于命令式风格/静态语言命名 33 | bigUnderLine(string){ 34 | let basicStrArr = FormatterActions.formatterBasic(string); 35 | let bigCaseArray = basicStrArr.map((item)=>{ 36 | return item.toUpperCase(); 37 | }); 38 | return bigCaseArray.join('_') 39 | } 40 | } 41 | let Processer = new FormatterActions; 42 | module.exports = { 43 | Processer, 44 | }; 45 | -------------------------------------------------------------------------------- /VariableNameTransLate/bigHump.js: -------------------------------------------------------------------------------- 1 | //bigtHump主逻辑入口 2 | 3 | const Config = require('../Config/CustomerConfig.js'); 4 | const GetResult = require('./MainLogic/FeachDataFromServer.js'); 5 | const {Processer} = require('./MainLogic/ProcessingResults.js'); 6 | 7 | (function () { 8 | GetResult.getJoinedResult(Config.youDaoApi,Config.getParams(),Processer.bigtHump); 9 | })(); 10 | -------------------------------------------------------------------------------- /VariableNameTransLate/bigUnderLine.js: -------------------------------------------------------------------------------- 1 | //bigUnderLine主逻辑入口 2 | 3 | const Config = require('../Config/CustomerConfig.js'); 4 | const GetResult = require('./MainLogic/FeachDataFromServer.js'); 5 | const {Processer} = require('./MainLogic/ProcessingResults.js'); 6 | 7 | (function () { 8 | GetResult.getJoinedResult(Config.youDaoApi,Config.getParams(),Processer.bigUnderLine); 9 | })(); 10 | -------------------------------------------------------------------------------- /VariableNameTransLate/littleHump.js: -------------------------------------------------------------------------------- 1 | //LittleHump主逻辑入口 2 | 3 | const Config = require('../Config/CustomerConfig.js'); 4 | const GetResult = require('./MainLogic/FeachDataFromServer.js'); 5 | const {Processer} = require('./MainLogic/ProcessingResults.js'); 6 | 7 | (function () { 8 | GetResult.getJoinedResult(Config.youDaoApi,Config.getParams(),Processer.littleHump); 9 | })(); 10 | -------------------------------------------------------------------------------- /VariableNameTransLate/littleUnderLine.js: -------------------------------------------------------------------------------- 1 | //LittleUnderLine主逻辑入口 2 | 3 | const Config = require('../Config/CustomerConfig.js'); 4 | const GetResult = require('./MainLogic/FeachDataFromServer.js'); 5 | const {Processer} = require('./MainLogic/ProcessingResults.js'); 6 | 7 | (function () { 8 | GetResult.getJoinedResult(Config.youDaoApi,Config.getParams(),Processer.littleUnderLine); 9 | })(); 10 | -------------------------------------------------------------------------------- /VueDocument/VueDocument.js: -------------------------------------------------------------------------------- 1 | const alfy = require('alfy'); 2 | const algoliaSearch = require('algoliasearch'); 3 | //Vue.js文档的algoliasearchID与Key 4 | let client = algoliaSearch('BH4D9OD16A', '5638280abff9d207417bb03be05f0b25'); 5 | let index = client.initIndex('vuejs_cn2'); 6 | const _ = require('lodash') 7 | //获取Vue文档数据 8 | class VueDocumentActions { 9 | constructor(index) { 10 | this.index=index; 11 | } 12 | getVueDocumentSearch(Params) { 13 | this.index.search( 14 | { 15 | query: Params, 16 | hitsPerPage: 50, 17 | }, 18 | function searchDone(err, content) { 19 | if (err) throw err; 20 | let ResultArr; 21 | ResultArr=[]; 22 | content.hits.map((hit)=>{ 23 | let subtitle; 24 | subtitle = 'Vue'; 25 | _.forEach(hit.hierarchy,function (value) { 26 | if(value!==null) 27 | {subtitle += '=>'+value } 28 | }); 29 | ResultArr.push({ 30 | title:`${hit.anchor==='ad'?`进入文档`:hit.anchor}`, 31 | subtitle:subtitle, 32 | arg:hit.url, 33 | }) 34 | }); 35 | alfy.output(ResultArr) 36 | } 37 | ); 38 | } 39 | } 40 | 41 | let FeachVue = new VueDocumentActions(index); 42 | (function () { 43 | FeachVue.getVueDocumentSearch(alfy.input); 44 | })(); 45 | -------------------------------------------------------------------------------- /icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CoderMageFox/alfredMagic/8282ce76cbdd7695e0f0f250f9dd8b19cec3baae/icon.png -------------------------------------------------------------------------------- /info.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | bundleid 6 | AlfredMagic 7 | category 8 | Tools 9 | connections 10 | 11 | 0A329E4B-AB21-41F7-A869-D878DF4EAE92 12 | 13 | 215B1908-2E7D-4BDE-93DC-F82AE36D1118 14 | 15 | 16 | destinationuid 17 | 3008B138-78B6-4133-BACC-0625A9310DD1 18 | modifiers 19 | 0 20 | modifiersubtext 21 | 22 | vitoclose 23 | 24 | 25 | 26 | 234343B8-6F8E-448E-A094-9D864621269C 27 | 28 | 29 | destinationuid 30 | 3789B239-CC9B-4580-8BD6-9AF9F5EF1296 31 | modifiers 32 | 0 33 | modifiersubtext 34 | 35 | vitoclose 36 | 37 | 38 | 39 | 31797CFC-07C7-497E-A94C-37F74F9E4787 40 | 41 | 42 | destinationuid 43 | F2A678A6-E2DC-4974-8EA7-F9FBDDC77A2C 44 | modifiers 45 | 0 46 | modifiersubtext 47 | 48 | vitoclose 49 | 50 | 51 | 52 | 34051885-0A8D-4535-8DBF-32E3546D43B7 53 | 54 | 55 | destinationuid 56 | 3789B239-CC9B-4580-8BD6-9AF9F5EF1296 57 | modifiers 58 | 0 59 | modifiersubtext 60 | 61 | vitoclose 62 | 63 | 64 | 65 | 6E95249C-5186-4D8F-B728-B8D776F3D0A5 66 | 67 | 68 | destinationuid 69 | 8282DD10-3AA9-469C-B681-3629599AB9CA 70 | modifiers 71 | 0 72 | modifiersubtext 73 | 74 | vitoclose 75 | 76 | 77 | 78 | 7058EC8E-E2B9-4134-A85D-C92BE50493FD 79 | 80 | 81 | destinationuid 82 | 0A329E4B-AB21-41F7-A869-D878DF4EAE92 83 | modifiers 84 | 0 85 | modifiersubtext 86 | 87 | vitoclose 88 | 89 | 90 | 91 | 88FDD877-4B13-4BA5-9F5F-E2BE993943B1 92 | 93 | 94 | destinationuid 95 | 7058EC8E-E2B9-4134-A85D-C92BE50493FD 96 | modifiers 97 | 0 98 | modifiersubtext 99 | 100 | vitoclose 101 | 102 | 103 | 104 | D8C3711E-187C-4066-968E-810B4E920193 105 | 106 | 107 | destinationuid 108 | 65362015-A490-4647-95D0-76F3001CFA9E 109 | modifiers 110 | 0 111 | modifiersubtext 112 | 113 | vitoclose 114 | 115 | 116 | 117 | E929FD56-B257-4345-91B1-DE719771AFC4 118 | 119 | 120 | destinationuid 121 | 63044A5D-9F66-45B8-A33D-C050FFD61232 122 | modifiers 123 | 0 124 | modifiersubtext 125 | 126 | vitoclose 127 | 128 | 129 | 130 | F51437FF-2925-4621-8486-5718CC330DD9 131 | 132 | 133 | destinationuid 134 | 65362015-A490-4647-95D0-76F3001CFA9E 135 | modifiers 136 | 0 137 | modifiersubtext 138 | 139 | vitoclose 140 | 141 | 142 | 143 | F5A2EF40-DCAC-4284-902D-8DA1FAD5D8D2 144 | 145 | 146 | destinationuid 147 | 8282DD10-3AA9-469C-B681-3629599AB9CA 148 | modifiers 149 | 0 150 | modifiersubtext 151 | 152 | vitoclose 153 | 154 | 155 | 156 | F67D9F7B-A274-440B-82AD-729BFD821AD9 157 | 158 | 159 | destinationuid 160 | 4491DCB4-1051-40D6-9980-15D9F9E9CD34 161 | modifiers 162 | 0 163 | modifiersubtext 164 | 165 | vitoclose 166 | 167 | 168 | 169 | 170 | createdby 171 | CoderMageFox 172 | description 173 | 一个面向前端开发者效率提升的中文WorkFlow. 174 | disabled 175 | 176 | name 177 | AlfredMagic 178 | objects 179 | 180 | 181 | config 182 | 183 | alfredfiltersresults 184 | 185 | alfredfiltersresultsmatchmode 186 | 2 187 | argumenttrimmode 188 | 0 189 | argumenttype 190 | 0 191 | escaping 192 | 127 193 | keyword 194 | so 195 | queuedelaycustom 196 | 10 197 | queuedelayimmediatelyinitially 198 | 199 | queuedelaymode 200 | 2 201 | queuemode 202 | 1 203 | runningsubtext 204 | 少女祈祷中...... 205 | script 206 | ./node_modules/.bin/run-node './StackOverFlow/so.js' {query} 207 | 208 | //注意:API有同一IP 300次调用限制,如果超过需要等待 2小时左右.所以我将输入节流做的很大,请自行调整Run Behaviour 209 | 210 | scriptargtype 211 | 0 212 | scriptfile 213 | 214 | subtext 215 | 中文翻译不一定准,英文可直接用快捷键查询 216 | title 217 | StackOverFlow中文查询 218 | type 219 | 0 220 | withspace 221 | 222 | 223 | type 224 | alfred.workflow.input.scriptfilter 225 | uid 226 | 34051885-0A8D-4535-8DBF-32E3546D43B7 227 | version 228 | 2 229 | 230 | 231 | config 232 | 233 | alfredfiltersresults 234 | 235 | alfredfiltersresultsmatchmode 236 | 0 237 | argumenttrimmode 238 | 0 239 | argumenttype 240 | 0 241 | escaping 242 | 126 243 | keyword 244 | use 245 | queuedelaycustom 246 | 3 247 | queuedelayimmediatelyinitially 248 | 249 | queuedelaymode 250 | 0 251 | queuemode 252 | 1 253 | runningsubtext 254 | CanIUse查询中... 255 | script 256 | ./node_modules/.bin/run-node './CanIUse/caniuse.js' {query} 257 | //CanIuse查询组件,可自定义Key,回车为打开CanIuse相关搜索. 258 | scriptargtype 259 | 0 260 | scriptfile 261 | 262 | subtext 263 | 264 | title 265 | CanIUse查询 266 | type 267 | 0 268 | withspace 269 | 270 | 271 | type 272 | alfred.workflow.input.scriptfilter 273 | uid 274 | F51437FF-2925-4621-8486-5718CC330DD9 275 | version 276 | 2 277 | 278 | 279 | config 280 | 281 | browser 282 | 283 | spaces 284 | 285 | url 286 | {query} 287 | utf8 288 | 289 | 290 | type 291 | alfred.workflow.action.openurl 292 | uid 293 | 3789B239-CC9B-4580-8BD6-9AF9F5EF1296 294 | version 295 | 1 296 | 297 | 298 | config 299 | 300 | browser 301 | 302 | spaces 303 | 304 | url 305 | {query} 306 | utf8 307 | 308 | 309 | type 310 | alfred.workflow.action.openurl 311 | uid 312 | 65362015-A490-4647-95D0-76F3001CFA9E 313 | version 314 | 1 315 | 316 | 317 | config 318 | 319 | action 320 | 0 321 | argument 322 | 1 323 | argumenttext 324 | https://stackoverflow.com/search?q= 325 | focusedappvariable 326 | 327 | focusedappvariablename 328 | 329 | hotkey 330 | 1 331 | hotmod 332 | 524288 333 | hotstring 334 | S 335 | leftcursor 336 | 337 | modsmode 338 | 0 339 | relatedAppsMode 340 | 0 341 | 342 | type 343 | alfred.workflow.trigger.hotkey 344 | uid 345 | 234343B8-6F8E-448E-A094-9D864621269C 346 | version 347 | 2 348 | 349 | 350 | config 351 | 352 | action 353 | 0 354 | argument 355 | 1 356 | argumenttext 357 | https://caniuse.com/#search= 358 | focusedappvariable 359 | 360 | focusedappvariablename 361 | 362 | hotkey 363 | 32 364 | hotmod 365 | 524288 366 | hotstring 367 | U 368 | leftcursor 369 | 370 | modsmode 371 | 0 372 | relatedAppsMode 373 | 0 374 | 375 | type 376 | alfred.workflow.trigger.hotkey 377 | uid 378 | D8C3711E-187C-4066-968E-810B4E920193 379 | version 380 | 2 381 | 382 | 383 | config 384 | 385 | alfredfiltersresults 386 | 387 | alfredfiltersresultsmatchmode 388 | 0 389 | argumenttrimmode 390 | 0 391 | argumenttype 392 | 0 393 | escaping 394 | 127 395 | keyword 396 | vue 397 | queuedelaycustom 398 | 4 399 | queuedelayimmediatelyinitially 400 | 401 | queuedelaymode 402 | 2 403 | queuemode 404 | 1 405 | runningsubtext 406 | Waiting... 407 | script 408 | ./node_modules/.bin/run-node './VueDocument/VueDocument.js' {query} 409 | 410 | //Vue.js文档查询 411 | scriptargtype 412 | 0 413 | scriptfile 414 | 415 | subtext 416 | 417 | title 418 | Vue.js文档查询 419 | type 420 | 0 421 | withspace 422 | 423 | 424 | type 425 | alfred.workflow.input.scriptfilter 426 | uid 427 | E929FD56-B257-4345-91B1-DE719771AFC4 428 | version 429 | 2 430 | 431 | 432 | config 433 | 434 | browser 435 | 436 | spaces 437 | 438 | url 439 | {query} 440 | utf8 441 | 442 | 443 | type 444 | alfred.workflow.action.openurl 445 | uid 446 | 63044A5D-9F66-45B8-A33D-C050FFD61232 447 | version 448 | 1 449 | 450 | 451 | config 452 | 453 | alfredfiltersresults 454 | 455 | alfredfiltersresultsmatchmode 456 | 0 457 | argumenttrimmode 458 | 0 459 | argumenttype 460 | 0 461 | escaping 462 | 127 463 | keyword 464 | mdn 465 | queuedelaycustom 466 | 3 467 | queuedelayimmediatelyinitially 468 | 469 | queuedelaymode 470 | 2 471 | queuemode 472 | 1 473 | runningsubtext 474 | MDN查询中... 475 | script 476 | ./node_modules/.bin/run-node './MDN/MDN.js' {query} 477 | 478 | //使用MDN查询 479 | scriptargtype 480 | 0 481 | scriptfile 482 | 483 | subtext 484 | 模糊搜索可能会导致请求结果较慢 485 | title 486 | MDN查询 487 | type 488 | 0 489 | withspace 490 | 491 | 492 | type 493 | alfred.workflow.input.scriptfilter 494 | uid 495 | F5A2EF40-DCAC-4284-902D-8DA1FAD5D8D2 496 | version 497 | 2 498 | 499 | 500 | config 501 | 502 | browser 503 | 504 | spaces 505 | 506 | url 507 | {query} 508 | utf8 509 | 510 | 511 | type 512 | alfred.workflow.action.openurl 513 | uid 514 | 8282DD10-3AA9-469C-B681-3629599AB9CA 515 | version 516 | 1 517 | 518 | 519 | config 520 | 521 | alfredfiltersresults 522 | 523 | alfredfiltersresultsmatchmode 524 | 0 525 | argumenttrimmode 526 | 0 527 | argumenttype 528 | 0 529 | escaping 530 | 127 531 | keyword 532 | react 533 | queuedelaycustom 534 | 4 535 | queuedelayimmediatelyinitially 536 | 537 | queuedelaymode 538 | 2 539 | queuemode 540 | 1 541 | runningsubtext 542 | Waiting... 543 | script 544 | ./node_modules/.bin/run-node './ReactDocument/ReactDocument.js' {query} 545 | 546 | //React.js文档查询 547 | scriptargtype 548 | 0 549 | scriptfile 550 | 551 | subtext 552 | 553 | title 554 | React.js文档查询 555 | type 556 | 0 557 | withspace 558 | 559 | 560 | type 561 | alfred.workflow.input.scriptfilter 562 | uid 563 | 31797CFC-07C7-497E-A94C-37F74F9E4787 564 | version 565 | 2 566 | 567 | 568 | config 569 | 570 | action 571 | 0 572 | argument 573 | 1 574 | argumenttext 575 | https://developer.mozilla.org/zh-CN/search?q= 576 | focusedappvariable 577 | 578 | focusedappvariablename 579 | 580 | hotkey 581 | 0 582 | hotmod 583 | 0 584 | leftcursor 585 | 586 | modsmode 587 | 0 588 | relatedAppsMode 589 | 0 590 | 591 | type 592 | alfred.workflow.trigger.hotkey 593 | uid 594 | 6E95249C-5186-4D8F-B728-B8D776F3D0A5 595 | version 596 | 2 597 | 598 | 599 | config 600 | 601 | browser 602 | 603 | spaces 604 | 605 | url 606 | {query} 607 | utf8 608 | 609 | 610 | type 611 | alfred.workflow.action.openurl 612 | uid 613 | F2A678A6-E2DC-4974-8EA7-F9FBDDC77A2C 614 | version 615 | 1 616 | 617 | 618 | config 619 | 620 | action 621 | 1 622 | argument 623 | 1 624 | argumenttext 625 | vn 626 | focusedappvariable 627 | 628 | focusedappvariablename 629 | 630 | hotkey 631 | 9 632 | hotmod 633 | 524288 634 | hotstring 635 | V 636 | leftcursor 637 | 638 | modsmode 639 | 0 640 | relatedAppsMode 641 | 0 642 | 643 | type 644 | alfred.workflow.trigger.hotkey 645 | uid 646 | 88FDD877-4B13-4BA5-9F5F-E2BE993943B1 647 | version 648 | 2 649 | 650 | 651 | config 652 | 653 | alfredfiltersresults 654 | 655 | alfredfiltersresultsmatchmode 656 | 0 657 | argumenttrimmode 658 | 0 659 | argumenttype 660 | 0 661 | escaping 662 | 127 663 | keyword 664 | vn 665 | queuedelaycustom 666 | 3 667 | queuedelayimmediatelyinitially 668 | 669 | queuedelaymode 670 | 0 671 | queuemode 672 | 1 673 | runningsubtext 674 | Waiting... 675 | script 676 | ./node_modules/.bin/run-node './VariableNameTransLate/bigHump.js' {query} 677 | 678 | //变量/函数通用取名命令 679 | //修改bigHump.js修改默认命名生成,可选: 680 | //bigHump.js:大驼峰命名 681 | //littleHump.js小驼峰命名 682 | //bigUnderLine:大写加下划线 683 | //littleUnderLine:小写加下划线 684 | scriptargtype 685 | 0 686 | scriptfile 687 | 688 | subtext 689 | 690 | title 691 | 输入中英文均可互译 692 | type 693 | 0 694 | withspace 695 | 696 | 697 | type 698 | alfred.workflow.input.scriptfilter 699 | uid 700 | 7058EC8E-E2B9-4134-A85D-C92BE50493FD 701 | version 702 | 2 703 | 704 | 705 | config 706 | 707 | autopaste 708 | 709 | clipboardtext 710 | {query} 711 | transient 712 | 713 | 714 | type 715 | alfred.workflow.output.clipboard 716 | uid 717 | 0A329E4B-AB21-41F7-A869-D878DF4EAE92 718 | version 719 | 2 720 | 721 | 722 | config 723 | 724 | autopaste 725 | 726 | clipboardtext 727 | {query} 728 | transient 729 | 730 | 731 | type 732 | alfred.workflow.output.clipboard 733 | uid 734 | 3008B138-78B6-4133-BACC-0625A9310DD1 735 | version 736 | 2 737 | 738 | 739 | config 740 | 741 | alfredfiltersresults 742 | 743 | alfredfiltersresultsmatchmode 744 | 0 745 | argumenttrimmode 746 | 0 747 | argumenttype 748 | 0 749 | escaping 750 | 127 751 | keyword 752 | action 753 | queuedelaycustom 754 | 3 755 | queuedelayimmediatelyinitially 756 | 757 | queuedelaymode 758 | 0 759 | queuemode 760 | 1 761 | runningsubtext 762 | Waiting... 763 | script 764 | ./node_modules/.bin/run-node './VariableNameTransLate/bigUnderLine.js' {query} 765 | 766 | scriptargtype 767 | 0 768 | scriptfile 769 | 770 | subtext 771 | 772 | title 773 | 输入中文直接转换为大写+下划线格式(ReduxAction) 774 | type 775 | 0 776 | withspace 777 | 778 | 779 | type 780 | alfred.workflow.input.scriptfilter 781 | uid 782 | 215B1908-2E7D-4BDE-93DC-F82AE36D1118 783 | version 784 | 2 785 | 786 | 787 | config 788 | 789 | applescript 790 | on alfred_script(q) 791 | tell application "Finder" 792 | set pathList to (quoted form of POSIX path of (folder of the front window as alias)) 793 | end tell 794 | 795 | tell application "System Events" 796 | if not (exists (processes where name is "Terminal")) then 797 | do shell script "open -a Terminal " & pathList 798 | else 799 | tell application "Terminal" 800 | activate 801 | tell application "System Events" to tell process "Terminal.app" to keystroke "t" using command down 802 | do script ("cd " & pathList) in first window 803 | end tell 804 | end if 805 | end tell 806 | end alfred_script 807 | cachescript 808 | 809 | 810 | type 811 | alfred.workflow.action.applescript 812 | uid 813 | 4491DCB4-1051-40D6-9980-15D9F9E9CD34 814 | version 815 | 1 816 | 817 | 818 | config 819 | 820 | argumenttype 821 | 2 822 | keyword 823 | >h 824 | subtext 825 | 可在此处调起Shell命令窗口 826 | text 827 | 在此处调起Shell命令窗口 828 | withspace 829 | 830 | 831 | type 832 | alfred.workflow.input.keyword 833 | uid 834 | F67D9F7B-A274-440B-82AD-729BFD821AD9 835 | version 836 | 1 837 | 838 | 839 | readme 840 | 841 | alfredMagic:一个面向效率的中文WorkFlow 842 | 843 | CodeBy:CoderMageFox 844 | Lincense:MIT 845 | Document:https://codermagefox.github.io/alfredMagic/ 846 | Blog:http://blog.codermagefox.com 847 | Mail:codermagefox@codermagefox.com 848 | Version:0.0.1(是的,还是一个很不Cooool的版本) 849 | 850 | Have a nice time! 851 | 852 | uidata 853 | 854 | 0A329E4B-AB21-41F7-A869-D878DF4EAE92 855 | 856 | xpos 857 | 640 858 | ypos 859 | 550 860 | 861 | 215B1908-2E7D-4BDE-93DC-F82AE36D1118 862 | 863 | xpos 864 | 30 865 | ypos 866 | 680 867 | 868 | 234343B8-6F8E-448E-A094-9D864621269C 869 | 870 | xpos 871 | 430 872 | ypos 873 | 140 874 | 875 | 3008B138-78B6-4133-BACC-0625A9310DD1 876 | 877 | xpos 878 | 640 879 | ypos 880 | 680 881 | 882 | 31797CFC-07C7-497E-A94C-37F74F9E4787 883 | 884 | xpos 885 | 430 886 | ypos 887 | 390 888 | 889 | 34051885-0A8D-4535-8DBF-32E3546D43B7 890 | 891 | xpos 892 | 430 893 | ypos 894 | 20 895 | 896 | 3789B239-CC9B-4580-8BD6-9AF9F5EF1296 897 | 898 | xpos 899 | 610 900 | ypos 901 | 70 902 | 903 | 4491DCB4-1051-40D6-9980-15D9F9E9CD34 904 | 905 | xpos 906 | 640 907 | ypos 908 | 810 909 | 910 | 63044A5D-9F66-45B8-A33D-C050FFD61232 911 | 912 | xpos 913 | 620 914 | ypos 915 | 270 916 | 917 | 65362015-A490-4647-95D0-76F3001CFA9E 918 | 919 | xpos 920 | 200 921 | ypos 922 | 70 923 | 924 | 6E95249C-5186-4D8F-B728-B8D776F3D0A5 925 | 926 | xpos 927 | 30 928 | ypos 929 | 390 930 | 931 | 7058EC8E-E2B9-4134-A85D-C92BE50493FD 932 | 933 | xpos 934 | 320 935 | ypos 936 | 550 937 | 938 | 8282DD10-3AA9-469C-B681-3629599AB9CA 939 | 940 | xpos 941 | 190 942 | ypos 943 | 330 944 | 945 | 88FDD877-4B13-4BA5-9F5F-E2BE993943B1 946 | 947 | xpos 948 | 30 949 | ypos 950 | 550 951 | 952 | D8C3711E-187C-4066-968E-810B4E920193 953 | 954 | xpos 955 | 40 956 | ypos 957 | 140 958 | 959 | E929FD56-B257-4345-91B1-DE719771AFC4 960 | 961 | xpos 962 | 430 963 | ypos 964 | 270 965 | 966 | F2A678A6-E2DC-4974-8EA7-F9FBDDC77A2C 967 | 968 | xpos 969 | 620 970 | ypos 971 | 390 972 | 973 | F51437FF-2925-4621-8486-5718CC330DD9 974 | 975 | xpos 976 | 40 977 | ypos 978 | 20 979 | 980 | F5A2EF40-DCAC-4284-902D-8DA1FAD5D8D2 981 | 982 | xpos 983 | 30 984 | ypos 985 | 270 986 | 987 | F67D9F7B-A274-440B-82AD-729BFD821AD9 988 | 989 | xpos 990 | 440 991 | ypos 992 | 810 993 | 994 | 995 | webaddress 996 | https://codermagefox.github.io/alfredMagic/ 997 | 998 | 999 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "alfredFE", 3 | "version": "0.0.1", 4 | "description": "", 5 | "main": "index.js", 6 | "scripts": { 7 | "test": "echo \"Error: no test specified\" && exit 1" 8 | }, 9 | "author": "", 10 | "license": "ISC", 11 | "devDependencies": { 12 | "alfy": "^0.6.0" 13 | }, 14 | "dependencies": { 15 | "algoliasearch": "^3.31.0", 16 | "caniuse-api": "^3.0.0", 17 | "install": "^0.12.2", 18 | "lodash": "^4.17.13", 19 | "lodash.difference": "^4.5.0", 20 | "lodash.sample": "^4.2.1", 21 | "lodash.union": "^4.6.0", 22 | "lodash.without": "^4.4.0", 23 | "npm": "^6.8.0", 24 | "quicktype": "^15.0.174" 25 | } 26 | } 27 | --------------------------------------------------------------------------------