@yuebai008/cli
Version:
Command line interface for rapid qg-minigame development
1 lines • 7.18 kB
JavaScript
import*as Common from"../../core/common/common.js";import*as i18n from"../../core/i18n/i18n.js";import throttlingSettingsTabStyles from"./throttlingSettingsTab.css.js";import*as UI from"../../ui/legacy/legacy.js";const UIStrings={networkThrottlingProfiles:"Network Throttling Profiles",addCustomProfile:"Add custom profile...",dms:"{PH1} `ms`",profileName:"Profile Name",download:"Download",upload:"Upload",latency:"Latency",optional:"optional",profileNameCharactersLengthMust:"Profile Name characters length must be between 1 to {PH1} inclusive",sMustBeANumberBetweenSkbsToSkbs:"{PH1} must be a number between {PH2} `kbit/s` to {PH3} `kbit/s` inclusive",latencyMustBeAnIntegerBetweenSms:"Latency must be an integer between {PH1} `ms` to {PH2} `ms` inclusive",dskbits:"{PH1} `kbit/s`",fsmbits:"{PH1} `Mbit/s`"},str_=i18n.i18n.registerUIStrings("panels/mobile_throttling/ThrottlingSettingsTab.ts",UIStrings),i18nString=i18n.i18n.getLocalizedString.bind(void 0,str_);let throttlingSettingsTabInstance;export class ThrottlingSettingsTab extends UI.Widget.VBox{list;customSetting;editor;constructor(){super(!0);const t=this.contentElement.createChild("div","header");t.textContent=i18nString(UIStrings.networkThrottlingProfiles),UI.ARIAUtils.markAsHeading(t,1);const i=UI.UIUtils.createTextButton(i18nString(UIStrings.addCustomProfile),this.addButtonClicked.bind(this),"add-conditions-button");this.contentElement.appendChild(i),this.list=new UI.ListWidget.ListWidget(this),this.list.element.classList.add("conditions-list"),this.list.show(this.contentElement),this.customSetting=Common.Settings.Settings.instance().moduleSetting("customNetworkConditions"),this.customSetting.addChangeListener(this.conditionsUpdated,this),this.setDefaultFocusedElement(i)}static instance(t={forceNew:null}){const{forceNew:i}=t;return throttlingSettingsTabInstance&&!i||(throttlingSettingsTabInstance=new ThrottlingSettingsTab),throttlingSettingsTabInstance}wasShown(){super.wasShown(),this.list.registerCSSFiles([throttlingSettingsTabStyles]),this.registerCSSFiles([throttlingSettingsTabStyles]),this.conditionsUpdated()}conditionsUpdated(){this.list.clear();const t=this.customSetting.get();for(let i=0;i<t.length;++i)this.list.appendItem(t[i],!0);this.list.appendSeparator()}addButtonClicked(){this.list.addNewItem(this.customSetting.get().length,{title:()=>"",download:-1,upload:-1,latency:0})}renderItem(t,i){const e=document.createElement("div");e.classList.add("conditions-list-item");const n=e.createChild("div","conditions-list-text conditions-list-title").createChild("div","conditions-list-title-text"),s=this.retrieveOptionsTitle(t);return n.textContent=s,UI.Tooltip.Tooltip.install(n,s),e.createChild("div","conditions-list-separator"),e.createChild("div","conditions-list-text").textContent=throughputText(t.download),e.createChild("div","conditions-list-separator"),e.createChild("div","conditions-list-text").textContent=throughputText(t.upload),e.createChild("div","conditions-list-separator"),e.createChild("div","conditions-list-text").textContent=i18nString(UIStrings.dms,{PH1:t.latency}),e}removeItemRequested(t,i){const e=this.customSetting.get();e.splice(i,1),this.customSetting.set(e)}retrieveOptionsTitle(t){return"function"==typeof t.title?t.title():t.title}commitEdit(t,i,e){t.title=i.control("title").value.trim();const n=i.control("download").value.trim();t.download=n?125*parseInt(n,10):-1;const s=i.control("upload").value.trim();t.upload=s?125*parseInt(s,10):-1;const o=i.control("latency").value.trim();t.latency=o?parseInt(o,10):0;const r=this.customSetting.get();e&&r.push(t),this.customSetting.set(r)}beginEdit(t){const i=this.createEditor();return i.control("title").value=this.retrieveOptionsTitle(t),i.control("download").value=t.download<=0?"":String(t.download/125),i.control("upload").value=t.upload<=0?"":String(t.upload/125),i.control("latency").value=t.latency?String(t.latency):"",i}createEditor(){if(this.editor)return this.editor;const t=new UI.ListWidget.Editor;this.editor=t;const i=t.contentElement(),e=i.createChild("div","conditions-edit-row"),n=e.createChild("div","conditions-list-text conditions-list-title"),s=i18nString(UIStrings.profileName);n.createChild("div","conditions-list-title-text").textContent=s,e.createChild("div","conditions-list-separator conditions-list-separator-invisible");const o=e.createChild("div","conditions-list-text"),r=i18nString(UIStrings.download);o.createChild("div","conditions-list-title-text").textContent=r,e.createChild("div","conditions-list-separator conditions-list-separator-invisible");const l=e.createChild("div","conditions-list-text").createChild("div","conditions-list-title-text"),d=i18nString(UIStrings.upload);l.textContent=d,e.createChild("div","conditions-list-separator conditions-list-separator-invisible");const a=e.createChild("div","conditions-list-text"),c=i18nString(UIStrings.latency);a.createChild("div","conditions-list-title-text").textContent=c;const g=i.createChild("div","conditions-edit-row"),h=t.createInput("title","text","",(function(t,i,e){const n=e.value.trim(),s=n.length>0&&n.length<=49;if(!s){return{valid:s,errorMessage:i18nString(UIStrings.profileNameCharactersLengthMust,{PH1:49})}}return{valid:s,errorMessage:void 0}}));UI.ARIAUtils.setLabel(h,s),g.createChild("div","conditions-list-text conditions-list-title").appendChild(h),g.createChild("div","conditions-list-separator conditions-list-separator-invisible");let u=g.createChild("div","conditions-list-text");const p=t.createInput("download","text",i18n.i18n.lockedString("kbit/s"),I);u.appendChild(p),UI.ARIAUtils.setLabel(p,r);const m=u.createChild("div","conditions-edit-optional"),S=i18nString(UIStrings.optional);m.textContent=S,UI.ARIAUtils.setDescription(p,S),g.createChild("div","conditions-list-separator conditions-list-separator-invisible"),u=g.createChild("div","conditions-list-text");const v=t.createInput("upload","text",i18n.i18n.lockedString("kbit/s"),I);UI.ARIAUtils.setLabel(v,d),u.appendChild(v);u.createChild("div","conditions-edit-optional").textContent=S,UI.ARIAUtils.setDescription(v,S),g.createChild("div","conditions-list-separator conditions-list-separator-invisible"),u=g.createChild("div","conditions-list-text");const C=t.createInput("latency","text",i18n.i18n.lockedString("ms"),(function(t,i,e){const n=1e6,s=e.value.trim(),o=Number(s),r=Number.isInteger(o)&&o>=0&&o<=n;if(!r){return{valid:r,errorMessage:i18nString(UIStrings.latencyMustBeAnIntegerBetweenSms,{PH1:0,PH2:n})}}return{valid:r,errorMessage:void 0}}));UI.ARIAUtils.setLabel(C,c),u.appendChild(C);return u.createChild("div","conditions-edit-optional").textContent=S,UI.ARIAUtils.setDescription(C,S),t;function I(t,i,e){const n=1e7,s=e.value.trim(),o=Number(s),r=e.getAttribute("aria-label"),l=!Number.isNaN(o)&&o>=0&&o<=n;if(!l){return{valid:l,errorMessage:i18nString(UIStrings.sMustBeANumberBetweenSkbsToSkbs,{PH1:String(r),PH2:0,PH3:n})}}return{valid:l,errorMessage:void 0}}}}function throughputText(t){if(t<0)return"";const i=t/125;if(i<1e3)return i18nString(UIStrings.dskbits,{PH1:i});if(i<1e4){const t=(i/1e3).toFixed(1);return i18nString(UIStrings.fsmbits,{PH1:t})}return i18nString(UIStrings.fsmbits,{PH1:i/1e3|0})}