提交 9886ede4 编写于 作者: AndroidLeaves's avatar AndroidLeaves

update

上级 29f9ee98
...@@ -3,7 +3,7 @@ ...@@ -3,7 +3,7 @@
// icon-color: deep-green; icon-glyph: clock; // icon-color: deep-green; icon-glyph: clock;
/** /**
* Author:LSP * Author:LSP
* Date:2023-02-04 * Date:2023-02-13
*/ */
// ------------------------------------------------------- // -------------------------------------------------------
// 是否是开发环境,配合手机端调试使用,正式发布设置为false // 是否是开发环境,配合手机端调试使用,正式发布设置为false
...@@ -314,7 +314,7 @@ class Widget extends BaseWidget { ...@@ -314,7 +314,7 @@ class Widget extends BaseWidget {
// ---------------------------------------- // ----------------------------------------
let hStack = stack.addStack(); let hStack = stack.addStack();
hStack.addSpacer(); hStack.addSpacer();
let textSpan = hStack.addText(`${this.prefixTitle()}${this.countDownName()}${isOverdue ? timeInterval + 1 : timeInterval}周年`); let textSpan = hStack.addText(`${this.prefixTitle()}${this.countDownName()}${timeInterval + 1}周年`);
textSpan.textColor = this.dynamicColor(this.titleDayColor(), this.titleNightColor()); textSpan.textColor = this.dynamicColor(this.titleDayColor(), this.titleNightColor());
textSpan.font = Font.mediumSystemFont(this.titleFontSize()); textSpan.font = Font.mediumSystemFont(this.titleFontSize());
hStack.addSpacer(); hStack.addSpacer();
......
// Variables used by Scriptable. // Variables used by Scriptable.
// These must be at the very top of the file. Do not edit. // These must be at the very top of the file. Do not edit.
// icon-color: red; icon-glyph: user-astronaut; // icon-color: deep-blue; icon-glyph: film;
/** /**
* Author:LSP * Author:LSP
* Date:2022-12-05 * Date:2023-02-04
*/ */
// ------------------------------------------------------- // -------------------------------------------------------
// 是否是开发环境,配合手机端调试使用,正式发布设置为false // 是否是开发环境,配合手机端调试使用,正式发布设置为false
const isDev = true; const isDev = false;
console.log(`开发环境 👉👉👉 ${isDev ? 'DEV' : 'RELEASE'}`); const dependencyLSP = '20230204';
console.log(`当前环境 👉👉👉👉👉 ${isDev ? 'DEV' : 'RELEASE'}`);
console.log(`----------------------------------------`); console.log(`----------------------------------------`);
// 分支
const branch = 'master';
// 仓库根目录
const remoteRoot = `https://gitcode.net/enoyee/scriptable/-/raw/${branch}`;
// 依赖包目录 // 依赖包目录
const fm = FileManager.local(); const fm = FileManager.local();
const rootDir = fm.documentsDirectory(); const rootDir = fm.documentsDirectory();
...@@ -21,253 +25,172 @@ await downloadLSPDependency(); ...@@ -21,253 +25,172 @@ await downloadLSPDependency();
// ------------------------------------------------------- // -------------------------------------------------------
if (typeof require === 'undefined') require = importModule if (typeof require === 'undefined') require = importModule
// 引入相关方法 // 引入相关方法
const { const { BaseWidget } = require(dependencyFileName);
writeWidgetSetting,
generateAlert,
generateInputAlert,
presentSheet,
readWidgetSetting,
drawTextWithCustomFont,
httpGet,
getDateStr,
getImageByUrl,
presentViewInApp,
} = require(dependencyFileName);
// @定义小组件
class Widget extends BaseWidget {
// ↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓ constructor(scriptName) {
// ↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓ super(scriptName);
// ↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓START↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓ this.domain = 'https://www.cikeee.com';
//=========================组件默认配置========================= this.defaultConfig.refreshInterval = `${2 * 60}`;
const defaultPreference = { this.backgroundColor = '#f0f0f4,#161823';
caiyun: 'UR8ASaplvIwavDfR', this.defaultConfig.bgType = '2';
}; this.titleColor = Color.dynamic(new Color('#222222'), new Color('#AAAAAA'));
this.descColor = Color.dynamic(new Color('#FFFFFF'), new Color('#EEEEEE'));
this.subTitleColor = Color.dynamic(new Color('#555555'), new Color('#AAAAAA'));
}
const getValueByKey = (key) => readWidgetSetting()[key] ?? defaultPreference[key]; async getAppViewOptions() {
const caiyun = () => getValueByKey('caiyun'); return {
widgetProvider: {
small: true, // 是否提供小号组件
medium: false, // 是否提供中号组件
large: false, // 是否提供大号组件
},
// 预览界面的组件设置item
settingItems: [
{
name: 'pic',
label: '选择图片',
type: 'cell',
icon: { name: 'tag', color: '#7678ed', },
showDesc: false,
needLoading: true,
},
],
// cell类型的item点击回调
onItemClick: async (item) => {
let widgetSetting = this.readWidgetSetting();
let insertDesc = '';
switch (item.name) {
case 'pic':
try {
let image = await Photos.fromLibrary();
this.useFileManager().writeImgCache('pic', image);
} catch (error) {
}
break;
}
// 写入更新配置
this.writeWidgetSetting(widgetSetting);
return {
desc: { value: insertDesc },
};
},
};
}
// --------------------------NET START-------------------------- async render({ widgetSetting, family }) {
return await this.provideLargeWidget();
}
// --------------------------NET END-------------------------- async provideLargeWidget() {
// ----------------------------------------
const widgetSize = this.getWidgetSize('小号');
console.log(JSON.stringify(widgetSize, null, 2)); //
//=================================
const widget = new ListWidget();
//=================================
let stack = widget.addStack();
stack.size = new Size(widgetSize.width - 12, widgetSize.height - 12);
let image = await this.getImageByUrl("https://s1.ax1x.com/2023/02/09/pSWWFeO.png");
stack.backgroundImage = this.useFileManager().readImgCache('pic')
stack.centerAlignContent()
// Widget创建 let picStack = stack.addStack();
const createWidget = async (widgetSetting, family) => { picStack.size = new Size(widgetSize.width - 4, widgetSize.height - 4);
//================================= picStack.backgroundImage = image
const widget = new ListWidget();
widget.setPadding(0, 0, 0, 0);
//=================================
let stack = widget.addStack();
stack.layoutHorizontally();
//---------------------------------
const localQuickConfigs = widgetSetting.quickStart;
const quickConfigJSON = localQuickConfigs ? localQuickConfigs : JSON.stringify(defaultPreference.quickConfigs);
const quickConfigArr = JSON.parse(quickConfigJSON);
await quickStack(stack, quickConfigArr);
//---------------------------------
let rightStack = stack.addStack();
rightStack.layoutVertically();
rightStack.addSpacer();
await loadWeatherStack(rightStack);
rightStack.addSpacer();
//=================================
stack.addSpacer();
return widget;
}
// let imgSpan = stack.addImage(image)
// imgSpan.centerAlignImage();
// imgSpan.applyFillingContentMode();
//=================================
return widget;
}
//=========================配置界面========================= // --------------------------NET START--------------------------
await presentViewInApp({ async loadHTML(url) {
widgetProvider: { let req = new Request(url);
small: false, // 是否提供小号组件 req.headers = {
medium: true, // 是否提供中号组件 "user-agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/107.0.0.0 Safari/537.36",
large: false, // 是否提供大号组件
},
// 预览界面的组件设置item
settingItems: [
{
name: 'otherSetting',
label: '其他设置',
type: 'cell',
icon: 'https://gitcode.net/4qiao/framework/raw/master/img/icon/setting.gif',
needLoading: true,
childItems: [
{
name: 'quickFontSize',
label: '启动文字大小',
type: 'cell',
icon: { name: 'pencil.and.outline', color: '#7743DB', },
needLoading: false,
alert: {
title: '启动文字大小',
options: [
{
key: 'quickFontSize',
hint: '请输入字号',
}
]
},
default: quickFontSize(),
},
{
name: 'quickFontColor',
label: '启动文字颜色',
type: 'color',
icon: { name: 'pencil.and.outline', color: '#7743DB', },
needLoading: false,
default: quickFontColor(),
},
{
name: 'temperatureFontSize',
label: '温度文字大小',
type: 'cell',
icon: { name: 'thermometer.medium', color: '#E0144C', },
needLoading: false,
alert: {
title: '温度文字大小',
options: [
{
key: 'temperatureFontSize',
hint: '请输入字号',
}
]
},
default: temperatureFontSize(),
},
{
name: 'temperatureFontColor',
label: '温度文字颜色',
type: 'color',
icon: { name: 'thermometer.medium', color: '#E0144C', },
needLoading: false,
default: temperatureFontColor(),
},
{
name: 'dateFontSize',
label: '日期文字大小',
type: 'cell',
icon: 'https://s3.uuu.ovh/imgs/2022/12/05/ac2c5b8843ff2719.gif',
needLoading: false,
alert: {
title: '日期文字大小',
options: [
{
key: 'dateFontSize',
hint: '请输入字号',
}
]
},
default: dateFontSize(),
},
{
name: 'dateFontColor',
label: '日期文字颜色',
type: 'color',
icon: 'https://s3.uuu.ovh/imgs/2022/12/05/ac2c5b8843ff2719.gif',
needLoading: false,
default: dateFontColor(),
},
{
name: 'weatherFontSize',
label: '天气文字大小',
type: 'cell',
icon: 'https://s3.uuu.ovh/imgs/2022/12/05/a95f9edce36891d9.gif',
needLoading: false,
alert: {
title: '天气文字大小',
options: [
{
key: 'weatherFontSize',
hint: '请输入字号',
}
]
},
default: weatherFontSize(),
},
{
name: 'weatherFontColor',
label: '天气文字颜色',
type: 'color',
icon: 'https://s3.uuu.ovh/imgs/2022/12/05/a95f9edce36891d9.gif',
needLoading: false,
default: weatherFontColor(),
},
{
name: 'covFontSize',
label: '疫情文字大小',
type: 'cell',
icon: 'https://s3.uuu.ovh/imgs/2022/12/05/2cd3dee47cd0824f.png',
needLoading: false,
alert: {
title: '疫情文字大小',
options: [
{
key: 'covFontSize',
hint: '请输入字号',
}
]
},
default: covFontSize(),
},
{
name: 'covFontColor',
label: '疫情文字颜色',
type: 'color',
icon: 'https://s3.uuu.ovh/imgs/2022/12/05/2cd3dee47cd0824f.png',
needLoading: false,
default: covFontColor(),
},
]
},
],
// cell类型的item点击回调
onItemClick: async (item) => {
let widgetSetting = readWidgetSetting();
let insertDesc;
switch (item.name) {
case '':
break
}
// 写入更新配置
writeWidgetSetting(widgetSetting);
return {
desc: { value: insertDesc },
}; };
}, let html = await req.loadString();
// UI渲染 return html.replace(/(\r\n|\n|\r)/gm, "");
render: async ({ widgetSetting, family }) => { }
Object.assign(defaultPreference, widgetSetting);
async loadMovieCalendar() {
const link = this.domain;
let response = undefined;
try { try {
return await createWidget(defaultPreference, family); const ufm = this.useFileManager();
} catch (e) { const webview = new WebView();
if (config.runsInApp) { const cacheFileName = this.md5(link);
await generateAlert({ const lastCacheTime = ufm.getCacheModifyDate(cacheFileName);
title: '❌运行错误', const timeInterval = Math.floor((this.getCurrentTimeStamp() - lastCacheTime) / 60);
message: `${e}`, // 读取本地缓存
options: ['确定'] const localCache = ufm.readStringCache(cacheFileName);
}); const canUseCache = localCache != null && localCache.length > 0;
// 过时且有本地缓存则直接返回本地缓存数据
const { refreshInterval = '0' } = this.readWidgetSetting();
const shouldLoadCache = timeInterval <= Number(refreshInterval) && canUseCache;
let html = undefined;
if (!shouldLoadCache) {
console.log(`-->>在线加载网页数据:${link}`);
html = await this.loadHTML(link);
ufm.writeStringCache(cacheFileName, html);
} else {
html = ufm.readStringCache(cacheFileName);
console.log(`-->>加载缓存网页数据:${link}`);
}
await webview.loadHTML(html);
const getData =
`
function getData() {
let movieImg = document.getElementById('movie-img').src;
let movieDesc = document.querySelector('span#movie-text').textContent;
let movieName = document.querySelector('a#movie-name').textContent.replaceAll('——', '');
let movieInformation = document.querySelector('a#movie-information').textContent;
let movieRating = movieInformation.slice(0, 3);
movieInformation = movieInformation.slice(5);
let movieLink = document.querySelector('a#movie-img-a').href;
return { movieImg, movieDesc, movieName, movieInformation, movieRating, movieLink };
}
getData()
`
// 热榜数据
response = await webview.evaluateJavaScript(getData, false);
if (response.titleArr?.length > 0) {
this.useFileManager().writeStringCache('movieCalendar', JSON.stringify(response));
} }
console.error(e); } catch (error) {
console.error(`🚫 请求数据出错了=>${error}`);
response = JSON.parse(this.useFileManager().readStringCache('movieCalendar'));
} }
return response;
} }
}); // --------------------------NET END--------------------------
}
await new Widget(Script.name()).run();
// ↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑END↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑
// ↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑
// ↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑
// ================================================================================= // =================================================================================
// ================================================================================= // =================================================================================
async function downloadLSPDependency() { async function downloadLSPDependency() {
let fm = FileManager.local(); let fm = FileManager.local();
const dependencyURL = "https://gitee.com/enjoyee/scriptable/raw/develop/_LSP.js"; const dependencyURL = `${remoteRoot}/_LSP.js`;
const update = needUpdateDependency();
if (isDev) { if (isDev) {
const iCloudPath = FileManager.iCloud().documentsDirectory(); const iCloudPath = FileManager.iCloud().documentsDirectory();
const localIcloudDependencyExit = fm.isFileStoredIniCloud(`${iCloudPath}/_LSP.js`); const localIcloudDependencyExit = fm.isFileStoredIniCloud(`${iCloudPath}/_LSP.js`);
const localDependencyExit = fm.fileExists(`${rootDir}/_LSP.js`); const localDependencyExit = fm.fileExists(`${rootDir}/_LSP.js`);
const fileExist = localIcloudDependencyExit || localDependencyExit; const fileExist = localIcloudDependencyExit || localDependencyExit;
console.log(`🚀 DEV开发依赖文件${fileExist ? '已存在 ✅' : '不存在 🚫'}`); console.log(`🚀 DEV开发依赖文件${fileExist ? '已存在 ✅' : '不存在 🚫'}`);
if (!fileExist) { if (!fileExist || update) {
console.log(`🤖 DEV 开始下载依赖~`); console.log(`🤖 DEV 开始${update ? '更新' + dependencyLSP : '下载'}依赖~`);
keySave('VERSION', dependencyLSP);
await downloadFile2Scriptable('_LSP', dependencyURL); await downloadFile2Scriptable('_LSP', dependencyURL);
} }
return return
...@@ -277,20 +200,20 @@ async function downloadLSPDependency() { ...@@ -277,20 +200,20 @@ async function downloadLSPDependency() {
console.log(`----------------------------------------`); console.log(`----------------------------------------`);
const remoteDependencyExit = fm.fileExists(`${cacheDir}/_LSP.js`); const remoteDependencyExit = fm.fileExists(`${cacheDir}/_LSP.js`);
console.log(`🚀 RELEASE依赖文件${remoteDependencyExit ? '已存在 ✅' : '不存在 🚫'}`); console.log(`🚀 RELEASE依赖文件${remoteDependencyExit ? '已存在 ✅' : '不存在 🚫'}`);
console.log(`----------------------------------------`);
// ------------------------------ // ------------------------------
if (!remoteDependencyExit) { // 下载依赖 if (!remoteDependencyExit || update) { // 下载依赖
// 创建根目录 // 创建根目录
if (!fm.fileExists(cacheDir)) { if (!fm.fileExists(cacheDir)) {
fm.createDirectory(cacheDir, true); fm.createDirectory(cacheDir, true);
} }
// 下载 // 下载
console.log('🤖 RELEASE开始下载依赖~'); console.log(`🤖 RELEASE开始${update ? '更新' : '下载'}依赖~`);
console.log(`----------------------------------------`); console.log(`----------------------------------------`);
const req = new Request(dependencyURL); const req = new Request(dependencyURL);
const moduleJs = await req.load(); const moduleJs = await req.load();
if (moduleJs) { if (moduleJs) {
fm.write(fm.joinPath(cacheDir, '/_LSP.js'), moduleJs); fm.write(fm.joinPath(cacheDir, '/_LSP.js'), moduleJs);
keySave('VERSION', dependencyLSP);
console.log('✅ LSP远程依赖环境下载成功!'); console.log('✅ LSP远程依赖环境下载成功!');
console.log(`----------------------------------------`); console.log(`----------------------------------------`);
} else { } else {
...@@ -340,5 +263,25 @@ async function downloadFile2Scriptable(moduleName, url) { ...@@ -340,5 +263,25 @@ async function downloadFile2Scriptable(moduleName, url) {
return saveFile2Scriptable(`${moduleName}`, content); return saveFile2Scriptable(`${moduleName}`, content);
}; };
/**
* 是否需要更新依赖版本
*/
function needUpdateDependency() {
return dependencyLSP != keyGet('VERSION');
};
function keySave(cacheKey, cache) {
if (cache) {
Keychain.set(Script.name() + cacheKey, cache);
}
}
function keyGet(cacheKey, defaultValue = '') {
if (Keychain.contains(Script.name() + cacheKey)) {
return Keychain.get(Script.name() + cacheKey);
} else {
return defaultValue;
}
}
// ================================================================================= // =================================================================================
// ================================================================================= // =================================================================================
\ No newline at end of file
...@@ -3,7 +3,7 @@ ...@@ -3,7 +3,7 @@
// icon-color: blue; icon-glyph: mobile-alt; // icon-color: blue; icon-glyph: mobile-alt;
/** /**
* Author:LSP * Author:LSP
* Date:2023-02-04 * Date:2023-02-13
*/ */
// ------------------------------------------------------- // -------------------------------------------------------
// 是否是开发环境,配合手机端调试使用,正式发布设置为false // 是否是开发环境,配合手机端调试使用,正式发布设置为false
...@@ -264,7 +264,7 @@ class Widget extends BaseWidget { ...@@ -264,7 +264,7 @@ class Widget extends BaseWidget {
let displayStack = stack.addStack(); let displayStack = stack.addStack();
displayStack.centerAlignContent(); displayStack.centerAlignContent();
displayStack.addSpacer(descLeftSpacer); displayStack.addSpacer(descLeftSpacer);
textSpan = displayStack.addText(`${voiceBalance ? `${this.fee.balance}${this.fee.unit}` : 'NAN'}`); textSpan = displayStack.addText(`${this.fee.balance}${this.fee.unit}`);
textSpan.textColor = descTextColor; textSpan.textColor = descTextColor;
textSpan.font = infoFont; textSpan.font = infoFont;
displayStack.addSpacer(); displayStack.addSpacer();
...@@ -278,7 +278,7 @@ class Widget extends BaseWidget { ...@@ -278,7 +278,7 @@ class Widget extends BaseWidget {
displayStack = stack.addStack(); displayStack = stack.addStack();
displayStack.centerAlignContent(); displayStack.centerAlignContent();
displayStack.addSpacer(descLeftSpacer); displayStack.addSpacer(descLeftSpacer);
textSpan = displayStack.addText(`${voiceBalance ? `${voiceBalance}${this.voice.unit}` : 'NAN'} `); textSpan = displayStack.addText(`${voiceBalance}${this.voice.unit}`);
textSpan.textColor = descTextColor; textSpan.textColor = descTextColor;
textSpan.font = infoFont; textSpan.font = infoFont;
displayStack.addSpacer(); displayStack.addSpacer();
...@@ -292,7 +292,7 @@ class Widget extends BaseWidget { ...@@ -292,7 +292,7 @@ class Widget extends BaseWidget {
displayStack = stack.addStack(); displayStack = stack.addStack();
displayStack.centerAlignContent(); displayStack.centerAlignContent();
displayStack.addSpacer(descLeftSpacer); displayStack.addSpacer(descLeftSpacer);
textSpan = displayStack.addText(`${voiceBalance ? `${this.flow.balance}${this.flow.unit}` : 'NAN'} `); textSpan = displayStack.addText(`${this.flow.balance}${this.flow.unit}`);
textSpan.textColor = descTextColor; textSpan.textColor = descTextColor;
textSpan.font = infoFont; textSpan.font = infoFont;
displayStack.addSpacer(); displayStack.addSpacer();
......
...@@ -3,7 +3,7 @@ ...@@ -3,7 +3,7 @@
// icon-color: red; icon-glyph: mobile-alt; // icon-color: red; icon-glyph: mobile-alt;
/** /**
* Author:LSP * Author:LSP
* Date:2023-02-04 * Date:2023-02-13
*/ */
// ------------------------------------------------------- // -------------------------------------------------------
// 是否是开发环境,配合手机端调试使用,正式发布设置为false // 是否是开发环境,配合手机端调试使用,正式发布设置为false
...@@ -241,7 +241,7 @@ class Widget extends BaseWidget { ...@@ -241,7 +241,7 @@ class Widget extends BaseWidget {
let displayStack = stack.addStack(); let displayStack = stack.addStack();
displayStack.centerAlignContent(); displayStack.centerAlignContent();
displayStack.addSpacer(descLeftSpacer); displayStack.addSpacer(descLeftSpacer);
textSpan = displayStack.addText(`${voiceBalance ? `${this.fee.balance}${this.fee.unit}` : 'NAN'}`); textSpan = displayStack.addText(`${this.fee.balance}${this.fee.unit}`);
textSpan.textColor = descTextColor textSpan.textColor = descTextColor
textSpan.font = infoFont textSpan.font = infoFont
displayStack.addSpacer(); displayStack.addSpacer();
...@@ -255,7 +255,7 @@ class Widget extends BaseWidget { ...@@ -255,7 +255,7 @@ class Widget extends BaseWidget {
displayStack = stack.addStack(); displayStack = stack.addStack();
displayStack.centerAlignContent(); displayStack.centerAlignContent();
displayStack.addSpacer(descLeftSpacer); displayStack.addSpacer(descLeftSpacer);
textSpan = displayStack.addText(`${voiceBalance ? `${voiceBalance}${this.voice.unit}` : 'NAN'}`); textSpan = displayStack.addText(`${voiceBalance}${this.voice.unit}`);
textSpan.textColor = descTextColor textSpan.textColor = descTextColor
textSpan.font = infoFont textSpan.font = infoFont
displayStack.addSpacer(); displayStack.addSpacer();
...@@ -269,7 +269,7 @@ class Widget extends BaseWidget { ...@@ -269,7 +269,7 @@ class Widget extends BaseWidget {
displayStack = stack.addStack(); displayStack = stack.addStack();
displayStack.centerAlignContent(); displayStack.centerAlignContent();
displayStack.addSpacer(descLeftSpacer); displayStack.addSpacer(descLeftSpacer);
textSpan = displayStack.addText(`${voiceBalance ? `${this.flow.balance}${this.flow.unit}` : 'NAN'}`); textSpan = displayStack.addText(`${this.flow.balance}${this.flow.unit}`);
textSpan.textColor = descTextColor textSpan.textColor = descTextColor
textSpan.font = infoFont textSpan.font = infoFont
displayStack.addSpacer(); displayStack.addSpacer();
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册