164 lines
		
	
	
		
			4.4 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
			
		
		
	
	
			164 lines
		
	
	
		
			4.4 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
| // Variables used by Scriptable.
 | ||
| // These must be at the very top of the file. Do not edit.
 | ||
| // icon-color: purple; icon-glyph: comment-alt;
 | ||
| //
 | ||
| // iOS 桌面组件脚本 @「小件件」
 | ||
| // 开发说明:请从 Widget 类开始编写,注释请勿修改
 | ||
| // https://x.im3x.cn
 | ||
| //
 | ||
| 
 | ||
| // 添加require,是为了vscode中可以正确引入包,以获得自动补全等功能
 | ||
| if (typeof require === 'undefined') require = importModule
 | ||
| const {
 | ||
|   Base
 | ||
| } = require("./「小件件」开发环境")
 | ||
| 
 | ||
| // @组件代码开始
 | ||
| class Widget extends Base {
 | ||
|   constructor(arg) {
 | ||
|     super(arg)
 | ||
|     this.name = '一言'
 | ||
|     this.desc = '在茫茫句海中寻找能感动你的句子'
 | ||
|     this.settings = this.getSettings(true, true)
 | ||
|     if (this.settings && this.settings['arg']) {
 | ||
|       this.arg = this.settings['arg']
 | ||
|     }
 | ||
|     console.log('arg=' + this.arg)
 | ||
|     // 注册设置
 | ||
|     this.registerAction('插件设置', this.actionSetting)
 | ||
|   }
 | ||
| 
 | ||
|   async render() {
 | ||
|     let w = new ListWidget()
 | ||
|     await this.renderHeader(
 | ||
|       w,
 | ||
|       'https://txc.gtimg.com/data/285778/2020/1012/f9cf50f08ebb8bd391a7118c8348f5d8.png',
 | ||
|       '一言'
 | ||
|     )
 | ||
|     let data = await this._getData()
 | ||
|     let content = w.addText(data['hitokoto'])
 | ||
|     content.font = Font.lightSystemFont(16)
 | ||
|     w.addSpacer()
 | ||
|     let footer = w.addText(data['from'])
 | ||
|     footer.font = Font.lightSystemFont(12)
 | ||
|     footer.textOpacity = 0.5
 | ||
|     footer.rightAlignText()
 | ||
|     footer.lineLimit = 1
 | ||
| 
 | ||
|     w.url = this.actionUrl("menus", JSON.stringify(data));
 | ||
| 
 | ||
|     return w
 | ||
|   }
 | ||
| 
 | ||
|   async _getData() {
 | ||
|     let args = 'abcdefghijk'
 | ||
|     const types = this.arg.split('')
 | ||
|       .filter(c => args.indexOf(c) > -1)
 | ||
|       .map(c => `c=${c}`)
 | ||
|       .join('&') || 'c=k'
 | ||
|     let api = `https://v1.hitokoto.cn/?${types}&encode=json`
 | ||
|     return await this.httpGet(api)
 | ||
|   }
 | ||
|   async actionSetting() {
 | ||
|     let a = new Alert()
 | ||
|     a.title = "插件设置"
 | ||
|     a.message = "桌面组件的个性化设置"
 | ||
|     a.addAction("句子类型")
 | ||
|     a.addCancelAction("取消设置")
 | ||
|     let id = await a.presentSheet()
 | ||
|     if (id === 0) {
 | ||
|       return await this.actionSetting1()
 | ||
|     }
 | ||
|   }
 | ||
|   /**
 | ||
|    * 句子类型设置
 | ||
|    */
 | ||
|   async actionSetting1() {
 | ||
|     console.warn('setting--->' + this.arg)
 | ||
|     // 设置句子类型
 | ||
|     // 1. 获取本地存储(如果有)
 | ||
|     let caches = {}
 | ||
|     if (this.arg) {
 | ||
|       this.arg.split('').map(a => {
 | ||
|         caches[a] = true
 | ||
|       })
 | ||
|     }
 | ||
|     let a1 = new Alert()
 | ||
|     let keys = [
 | ||
|       ['a', '动画'],
 | ||
|       ['b', '漫画'],
 | ||
|       ['c', '游戏'],
 | ||
|       ['d', '文学'],
 | ||
|       ['e', '原创'],
 | ||
|       ['g', '其他'],
 | ||
|       ['h', '影视'],
 | ||
|       ['i', '诗词'],
 | ||
|       ['k', '哲学'],
 | ||
|       ['j', '网易云'],
 | ||
|       ['f', '来自网络'],
 | ||
|     ]
 | ||
|     a1.title = "句子类型"
 | ||
|     a1.message = "桌面组件显示的语句内容类型"
 | ||
|     keys.map(k => {
 | ||
|       let _id = k[0]
 | ||
|       let _name = k[1]
 | ||
|       if (caches[_id]) {
 | ||
|         _name = `✅ ${_name}`
 | ||
|       }
 | ||
|       a1.addAction(_name)
 | ||
|     })
 | ||
|     a1.addCancelAction("完成设置")
 | ||
|     let id1 = await a1.presentSheet()
 | ||
|     if (id1 === -1) return this.saveSettings()
 | ||
|     console.log(id1)
 | ||
|     let arg = keys[id1]
 | ||
|     // 本地存储
 | ||
|     if (caches[arg[0]]) {
 | ||
|       // 已经有了,那么就取消
 | ||
|       caches[arg[0]] = false
 | ||
|     } else {
 | ||
|       caches[arg[0]] = true
 | ||
|     }
 | ||
|     // 重新获取设置
 | ||
|     let _caches = []
 | ||
|     for (let k in caches) {
 | ||
|       if (caches[k]) {
 | ||
|         _caches.push(k)
 | ||
|       }
 | ||
|     }
 | ||
|     this.arg = _caches.join('');
 | ||
|     this.settings["arg"] = this.arg;
 | ||
|     // this.saveSettings(false);
 | ||
|     // console.log('save-setting:' + this.arg)
 | ||
|     // Keychain.set(this.SETTING_KEY, this.arg)
 | ||
|     return await this.actionSetting1()
 | ||
|   }
 | ||
| 
 | ||
|   // 用户点击组件,触发的 action
 | ||
|   async actionMenus(content) {
 | ||
|     // this.settings = this.getSettings()
 | ||
|     const data = JSON.parse(content)
 | ||
|     const alert = new Alert()
 | ||
|     alert.title = "一言"
 | ||
|     alert.message = data['hitokoto']
 | ||
|     alert.addAction("复制内容")
 | ||
|     alert.addAction("内容设置")
 | ||
|     alert.addAction("关于一言")
 | ||
|     alert.addCancelAction("取消操作")
 | ||
|     const idx = await alert.presentSheet()
 | ||
|     if (idx === 0) {
 | ||
|       Pasteboard.copyString(data['hitokoto'] + "\n" + "—— " + data['from'])
 | ||
|     } else if (idx === 1) {
 | ||
|       return await this.actionSetting1()
 | ||
|     } else if (idx === 2) {
 | ||
|       Safari.openInApp('https://hitokoto.cn/about', false)
 | ||
|     }
 | ||
|   }
 | ||
| }
 | ||
| // @组件代码结束
 | ||
| 
 | ||
| const {
 | ||
|   Testing
 | ||
| } = require("./「小件件」开发环境")
 | ||
| await Testing(Widget)
 |