{ "actions": [ { "type": "@comment", "parameters": { "text": { "value": "b23.tv trace parameter cleanup" } } }, { "type": "@flow.javascript", "parameters": { "script": { "value": "(()=>{$app.strings={en:{COPY:\"Copy\",COPIED:\"Copied\",\"b23clean.converting\":\"Converting...\",\"b23clean.noUrl\":\"No link detected\",\"b23clean.noBiliUrl\":\"Not a bilibili link\",\"b23clean.success\":\"Converted to BV video link\"},\"zh-Hans\":{COPY:\"复制\",COPIED:\"已复制\",\"b23clean.converting\":\"正在转换...\",\"b23clean.noUrl\":\"未检测到链接\",\"b23clean.noBiliUrl\":\"不是 bilibili 链接\",\"b23clean.success\":\"已转换为 BV 视频链接\"}},$app.theme=\"auto\",$app.minSDKVer=\"2.19.0\",$app.minOSVer=\"14.0.0\",$app.idleTimerDisabled=!1,$app.keyboardToolbarEnabled=!0,$app.rotateDisabled=!1;class e{static #e=$objc(\"UIApplication\").$sharedApplication();static #t=$objc(\"UINotificationFeedbackGenerator\").$new();static feedbackSuccess(){e.#t.$notificationOccurred(0)}static feedbackError(){e.#t.$notificationOccurred(2)}static align={left:0,right:1,top:2,bottom:3};static textColor=$color(\"primaryText\");static linkColor=$color(\"systemLink\");static primaryViewBackgroundColor=$color(\"primarySurface\");static scrollViewBackgroundColor=$color(\"insetGroupedBackground\");static scrollViewList=[\"list\",\"matrix\"];static isLargeScreen=$device.isIpad||$device.isIpadPro;static get windowSize(){return $objc(\"UIWindow\").$keyWindow().jsValue().size}static NavigationBarNormalHeight=$objc(\"UINavigationController\").invoke(\"alloc.init\").$navigationBar().jsValue().frame.height;static NavigationBarLargeTitleHeight=$objc(\"UITabBarController\").invoke(\"alloc.init\").$tabBar().jsValue().frame.height+e.NavigationBarNormalHeight;static get isSplitScreenMode(){return e.isLargeScreen&&$device.info.screen.width!==e.windowSize.width}static get topSafeAreaInsets(){return e.#e?.$keyWindow()?.$safeAreaInsets()?.top??0}static get bottomSafeAreaInsets(){return e.#e?.$keyWindow()?.$safeAreaInsets()?.bottom??0}static get statusBarOrientation(){return e.#e.$statusBarOrientation()}static get consoleBarHeight(){if($app.isDebugging){let t=e.#e.$statusBarFrame().height+26;return $device.isIphoneX&&(t+=30),t}return 0}static get isHorizontal(){return 3===e.statusBarOrientation||4===e.statusBarOrientation}static loading(){let t=$ui.create(e.blurBox({cornerRadius:15},[{type:\"spinner\",props:{loading:!0,style:0},layout:(e,t)=>{e.size.equalTo(t.prev),e.center.equalTo(t.super)}}]));return{start:()=>{$ui.controller.view.insertAtIndex(t,0),t.layout((t,i)=>{t.center.equalTo(i.super);let a=Math.min(.6*Math.min(e.windowSize.width,e.windowSize.height),260);t.size.equalTo($size(a,a))}),t.moveToFront()},end:()=>{t.remove()}}}static defaultBackgroundColor(t){return e.scrollViewList.indexOf(t)>-1?e.scrollViewBackgroundColor:e.primaryViewBackgroundColor}static separatorLine(t={},i=e.align.bottom){return{type:\"canvas\",props:t,layout:(t,a)=>{void 0===a.prev?t.top.equalTo(a.super):i===e.align.bottom?t.top.equalTo(a.prev.bottom):t.top.equalTo(a.prev.top),t.height.equalTo(1/$device.info.screen.scale),t.left.right.inset(0)},events:{draw:(e,i)=>{i.strokeColor=t.bgcolor??$color(\"separatorColor\"),i.setLineWidth(1),i.moveToPoint(0,0),i.addLineToPoint(e.frame.width,0),i.strokePath()}}}}static blurBox(e={},t=[],i=$layout.fill){return{type:\"blur\",props:Object.assign({style:$blurStyle.thinMaterial},e),views:t,layout:i}}static getContentSize(t,i=\"A\",a=e.windowSize.width,o){let r={text:i,width:a,font:t};return void 0!==o&&(r.lineSpacing=o),$text.sizeThatFits(r)}static getSymbolSize(e,t){let i=(e=\"string\"==typeof e?$image(e):e).size.width/e.size.height;return e.size.width>e.size.height?$size(t,t/i):$size(t*i,t)}static push({views:e,statusBarStyle:t=0,title:i=\"\",navButtons:a=[{title:\"\"}],bgcolor:o=e[0]?.props?.bgcolor??\"primarySurface\",titleView:r,disappeared:s}={}){let n={statusBarStyle:t,navButtons:a,title:i,bgcolor:\"string\"==typeof o?$color(o):o};r&&(n.titleView=r),$ui.push({props:n,events:{disappeared:()=>{void 0!==s&&s()}},views:[{type:\"view\",views:e,layout:(e,t)=>{e.top.equalTo(t.super.safeArea),e.bottom.equalTo(t.super),e.left.right.equalTo(t.super.safeArea)}}]})}}class t{static type={info:void 0,success:\"checkmark\",warning:\"exclamationmark.triangle\",error:\"xmark.circle\"};static edges=40;static iconSize=100;static labelTopMargin=10;static defaultFont=$font(\"default\",26);width=Math.min(.6*e.windowSize.width,260);labelWidth=this.width-2*t.edges;id=$text.uuid;#i=\"\";font=t.defaultFont;type=t.type.info;labelLines=2;constructor(e,i=t.type.info,a=2,o=t.defaultFont){this.type=i,this.message=e,this.labelLines=a,this.font=o}get message(){return this.#i}set message(i){this.#i=i,this.fontHeight=e.getContentSize(this.font,this.message,this.labelWidth,this.labelLines).height,this.height=(this.hasIcon?t.labelTopMargin+t.iconSize:0)+this.fontHeight+2*t.edges}get hasIcon(){return void 0!==this.type}get blurBox(){let i=e.blurBox({id:this.id,cornerRadius:15,alpha:0},[{type:\"image\",props:{symbol:this.type,hidden:!this.hasIcon,tintColor:$color(\"lightGray\")},layout:(e,i)=>{e.top.inset(t.edges),e.size.equalTo(t.iconSize),e.centerX.equalTo(i.super)}},{type:\"label\",props:{font:this.font,text:this.message,align:$align.center,lines:this.labelLines,color:$color(\"lightGray\")},layout:(e,i)=>{e.bottom.equalTo(i.supper).offset(-t.edges),e.width.equalTo(this.labelWidth),e.height.equalTo(this.fontHeight),e.centerX.equalTo(i.super)}}]);return i.events={tapped:()=>{this.remove()}},i}show(){$ui.controller.view.insertAtIndex($ui.create(this.blurBox),0);let e=$(this.id);e.layout((e,t)=>{e.center.equalTo(t.super),e.size.equalTo($size(this.width,this.height))}),e.moveToFront(),$ui.animate({duration:.2,animation:()=>{e.alpha=1}})}remove(){let e=$(this.id);e&&$ui.animate({duration:.2,animation:()=>{e.alpha=0},completion:()=>{e.remove()}})}static toast({message:e,type:i=t.type.info,show:a=!0,displayTime:o=2,labelLines:r=2,font:s=t.defaultFont}){let n=new t(e,i,r,s);return a&&(n.show(),$delay(o,()=>{n.remove()})),n}static info(e,i={}){return t.toast(Object.assign({message:e,type:t.type.info},i))}static success(e,i={}){return t.toast(Object.assign({message:e,type:t.type.success},i))}static warning(e,i={}){return t.toast(Object.assign({message:e,type:t.type.warning},i))}static error(e,i={}){return t.toast(Object.assign({message:e,type:t.type.error},i))}}async function i(e){if(-1===e.indexOf(\"bilibili.com\")&&-1===e.indexOf(\"b23.tv\"))throw Error($l10n(\"b23clean.noBiliUrl\"));let t=e;e.indexOf(\"b23.tv\")>=0&&(t=(await $http.get(e)).response.url);let i=t.indexOf(\"?\");return i>-1&&(t=t.substring(0,i-1)),t}async function a(){let e=t.info($l10n(\"b23clean.converting\"),{show:!1});try{let a=(()=>{let e=[$actions.inputValue,$clipboard.text];for(let t=0;t1){let e=await $ui.menu({items:a});o=a[e.index]}if(-1===o.indexOf(\"bilibili.com\")&&-1===o.indexOf(\"b23.tv\"))throw Error($l10n(\"b23clean.noBiliUrl\"));e.show(),o=await i(o),e.remove(),await $ui.alert({title:$l10n(\"b23clean.success\"),message:o,actions:[{title:$l10n(\"OK\")},{title:$l10n(\"COPY\"),handler:()=>{$clipboard.text=o,t.success($l10n(\"COPIED\"))}}]})}catch(i){e.remove(),$delay(.5,()=>t.error(String(i)))}}({run:()=>{a().catch(e=>console.error(e))}}).run()})();" } } } ], "buildVersion": 1, "clientMinVersion": 1, "summary": "", "icon": { "glyph": "trash", "color": "#FF3300" }, "clientVersion": 592, "name": "b23clean" }