guy
8 years ago
56 changed files with 1683 additions and 2090 deletions
@ -1 +1 @@
|
||||
Demo.CONFIG = Demo.LAYOUT_CONFIG.concat(Demo.BASE_CONFIG).concat(Demo.CASE_CONFIG).concat(Demo.WIDGET_CONFIG).concat(Demo.COMPONENT_CONFIG); |
||||
Demo.CONFIG = Demo.CORE_CONFIG.concat(Demo.BASE_CONFIG).concat(Demo.CASE_CONFIG).concat(Demo.WIDGET_CONFIG).concat(Demo.COMPONENT_CONFIG); |
@ -0,0 +1,84 @@
|
||||
Demo.Func = BI.inherit(BI.Widget, { |
||||
props: { |
||||
baseCls: "demo-func" |
||||
}, |
||||
_createNav: function(v){ |
||||
var m = this.MONTH, y = this.YEAR; |
||||
m += v; |
||||
while(m < 0){ |
||||
y--; |
||||
m += 12; |
||||
} |
||||
while(m > 11){ |
||||
y++; |
||||
m -= 12; |
||||
} |
||||
var calendar = BI.createWidget({ |
||||
type: "bi.calendar", |
||||
logic: { |
||||
dynamic: false |
||||
}, |
||||
year: y, |
||||
month: m, |
||||
day: this.DAY |
||||
}) |
||||
calendar.setValue(this.selectedTime); |
||||
return calendar; |
||||
}, |
||||
|
||||
_stringfyTimeObject: function(timeOb){ |
||||
return timeOb.year + "-" + (timeOb.month + 1) + "-" + timeOb.day; |
||||
}, |
||||
|
||||
render: function () { |
||||
var self = this, d = new Date(); |
||||
this.YEAR = d.getFullYear(); |
||||
this.MONTH = d.getMonth(); |
||||
this.DAY = d.getDate(); |
||||
|
||||
this.selectedTime = { |
||||
year: this.YEAR, |
||||
month: this.MONTH, |
||||
day: this.DAY |
||||
}; |
||||
|
||||
var tip = BI.createWidget({ |
||||
type: "bi.label" |
||||
}); |
||||
|
||||
var nav = BI.createWidget({ |
||||
type: "bi.navigation", |
||||
element: this, |
||||
tab: { |
||||
height: 30, |
||||
items: [{ |
||||
once: false, |
||||
text: "后退", |
||||
value: -1, |
||||
cls: "mvc-button layout-bg3" |
||||
},tip, { |
||||
once: false, |
||||
text: "前进", |
||||
value: 1, |
||||
cls: "mvc-button layout-bg4" |
||||
}] |
||||
}, |
||||
cardCreator: BI.bind(this._createNav, this), |
||||
|
||||
afterCardCreated: function(){ |
||||
|
||||
}, |
||||
|
||||
afterCardShow: function(){ |
||||
this.setValue(self.selectedTime); |
||||
} |
||||
}) |
||||
|
||||
nav.on(BI.Navigation.EVENT_CHANGE, function(){ |
||||
self.selectedTime = nav.getValue(); |
||||
tip.setText(self._stringfyTimeObject(self.selectedTime)); |
||||
}); |
||||
tip.setText(this._stringfyTimeObject(this.selectedTime)); |
||||
} |
||||
}); |
||||
$.shortcut("demo.calendar", Demo.Func); |
@ -0,0 +1,184 @@
|
||||
Demo.CORE_CONFIG = [{ |
||||
id: 1, |
||||
text: "核心控件", |
||||
}, { |
||||
id: 101, |
||||
pId: 1, |
||||
text: "布局" |
||||
}, { |
||||
pId: 101, |
||||
text: "bi.center_adapt", |
||||
value: "demo.center_adapt" |
||||
}, { |
||||
pId: 101, |
||||
text: "bi.vertical_adapt", |
||||
value: "demo.vertical_adapt" |
||||
}, { |
||||
pId: 101, |
||||
text: "bi.horizontal_adapt", |
||||
value: "demo.horizontal_adapt" |
||||
}, { |
||||
pId: 101, |
||||
text: "bi.horizontal_auto", |
||||
value: "demo.horizontal_auto" |
||||
}, { |
||||
pId: 101, |
||||
text: "bi.horizontal_float", |
||||
value: "demo.horizontal_float" |
||||
}, { |
||||
pId: 101, |
||||
text: "bi.left_right_vertical_adapt", |
||||
value: "demo.left_right_vertical_adapt" |
||||
}, { |
||||
pId: 101, |
||||
text: "bi.center", |
||||
value: "demo.center_layout" |
||||
}, { |
||||
pId: 101, |
||||
text: "bi.float_center", |
||||
value: "demo.float_center" |
||||
}, { |
||||
pId: 101, |
||||
text: "bi.vertical", |
||||
value: "demo.vertical" |
||||
}, { |
||||
pId: 101, |
||||
text: "bi.horizontal", |
||||
value: "demo.horizontal" |
||||
}, { |
||||
pId: 101, |
||||
text: "bi.border", |
||||
value: "demo.border" |
||||
}, { |
||||
pId: 101, |
||||
text: "bi.left, bi.right", |
||||
value: "demo.flow" |
||||
}, { |
||||
pId: 101, |
||||
text: "bi.inline", |
||||
value: "demo.inline" |
||||
}, { |
||||
pId: 101, |
||||
text: "bi.htape", |
||||
value: "demo.htape" |
||||
}, { |
||||
pId: 101, |
||||
text: "bi.vtape", |
||||
value: "demo.vtape" |
||||
}, { |
||||
pId: 101, |
||||
text: "bi.grid", |
||||
value: "demo.grid" |
||||
}, { |
||||
pId: 101, |
||||
text: "bi.table", |
||||
value: "demo.table_layout" |
||||
}, { |
||||
pId: 101, |
||||
text: "bi.td", |
||||
value: "demo.td" |
||||
}, { |
||||
pId: 1, |
||||
id: 102, |
||||
text: "抽象控件" |
||||
}, { |
||||
pId: 102, |
||||
text: "bi.button_group", |
||||
value: "demo.button_group" |
||||
}, { |
||||
pId: 102, |
||||
text: "bi.button_tree", |
||||
value: "demo.button_tree" |
||||
}, { |
||||
pId: 102, |
||||
text: "bi.button_map", |
||||
value: "demo.button_map" |
||||
}, { |
||||
pId: 102, |
||||
id: 10201, |
||||
text: "组合控件" |
||||
}, { |
||||
pId: 10201, |
||||
text: "bi.combo", |
||||
value: "demo.combo" |
||||
}, { |
||||
pId: 10201, |
||||
text: "bi.expander", |
||||
value: "demo.expander" |
||||
}, { |
||||
pId: 10201, |
||||
text: "bi.group_combo", |
||||
value: "demo.group_combo" |
||||
}, { |
||||
pId: 10201, |
||||
text: "bi.loader", |
||||
value: "demo.loader" |
||||
}, { |
||||
pId: 10201, |
||||
text: "bi.navigation", |
||||
value: "demo.navigation" |
||||
}, { |
||||
pId: 10201, |
||||
text: "bi.searcher", |
||||
value: "demo.searcher" |
||||
}, { |
||||
pId: 10201, |
||||
text: "bi.switcher", |
||||
value: "demo.switcher" |
||||
}, { |
||||
pId: 10201, |
||||
text: "bi.tab", |
||||
value: "demo.tab" |
||||
}, { |
||||
pId: 102, |
||||
id: 10202, |
||||
text: "弹出层" |
||||
}, { |
||||
pId: 10202, |
||||
text: "bi.layer_float_box", |
||||
value: "demo.layer_float_box" |
||||
}, { |
||||
pId: 10202, |
||||
text: "bi.layer_popup", |
||||
value: "demo.layer_popup" |
||||
}, { |
||||
pId: 10202, |
||||
text: "bi.layer_scroll", |
||||
value: "demo.layer_scroll" |
||||
}, { |
||||
pId: 10202, |
||||
text: "bi.layer_searcher", |
||||
value: "demo.layer_searcher" |
||||
}, { |
||||
pId: 102, |
||||
text: "bi.customtree", |
||||
value: "demo.customtree" |
||||
}, { |
||||
pId: 102, |
||||
text: "bi.grid_view", |
||||
value: "demo.grid_view" |
||||
}, { |
||||
pId: 102, |
||||
text: "bi.collection", |
||||
value: "demo.collection" |
||||
}, { |
||||
pId: 1, |
||||
text: "widget", |
||||
value: "demo.widget" |
||||
}, { |
||||
pId: 1, |
||||
text: "single", |
||||
value: "demo.single" |
||||
}, { |
||||
pId: 1, |
||||
text: "BasicButton", |
||||
value: "demo.basic_button" |
||||
}, { |
||||
pId: 1, |
||||
text: "NodeButton", |
||||
value: "demo.node_button" |
||||
}, { |
||||
pId: 1, |
||||
text: "pane", |
||||
value: "demo.pane" |
||||
}]; |
@ -1,76 +0,0 @@
|
||||
Demo.LAYOUT_CONFIG = [{ |
||||
id: 1, |
||||
text: "布局" |
||||
}, { |
||||
pId: 1, |
||||
text: "bi.center_adapt", |
||||
value: "demo.center_adapt" |
||||
}, { |
||||
pId: 1, |
||||
text: "bi.vertical_adapt", |
||||
value: "demo.vertical_adapt" |
||||
}, { |
||||
pId: 1, |
||||
text: "bi.horizontal_adapt", |
||||
value: "demo.horizontal_adapt" |
||||
}, { |
||||
pId: 1, |
||||
text: "bi.horizontal_auto", |
||||
value: "demo.horizontal_auto" |
||||
}, { |
||||
pId: 1, |
||||
text: "bi.horizontal_float", |
||||
value: "demo.horizontal_float" |
||||
}, { |
||||
pId: 1, |
||||
text: "bi.left_right_vertical_adapt", |
||||
value: "demo.left_right_vertical_adapt" |
||||
}, { |
||||
pId: 1, |
||||
text: "bi.center", |
||||
value: "demo.center_layout" |
||||
}, { |
||||
pId: 1, |
||||
text: "bi.float_center", |
||||
value: "demo.float_center" |
||||
}, { |
||||
pId: 1, |
||||
text: "bi.vertical", |
||||
value: "demo.vertical" |
||||
}, { |
||||
pId: 1, |
||||
text: "bi.horizontal", |
||||
value: "demo.horizontal" |
||||
}, { |
||||
pId: 1, |
||||
text: "bi.border", |
||||
value: "demo.border" |
||||
}, { |
||||
pId: 1, |
||||
text: "bi.left, bi.right", |
||||
value: "demo.flow" |
||||
}, { |
||||
pId: 1, |
||||
text: "bi.inline", |
||||
value: "demo.inline" |
||||
}, { |
||||
pId: 1, |
||||
text: "bi.htape", |
||||
value: "demo.htape" |
||||
}, { |
||||
pId: 1, |
||||
text: "bi.vtape", |
||||
value: "demo.vtape" |
||||
}, { |
||||
pId: 1, |
||||
text: "bi.grid", |
||||
value: "demo.grid" |
||||
}, { |
||||
pId: 1, |
||||
text: "bi.table", |
||||
value: "demo.table_layout" |
||||
}, { |
||||
pId: 1, |
||||
text: "bi.td", |
||||
value: "demo.td" |
||||
}]; |
@ -0,0 +1,11 @@
|
||||
Demo.Func = BI.inherit(BI.Widget, { |
||||
props: { |
||||
baseCls: "demo-func" |
||||
}, |
||||
render: function () { |
||||
return { |
||||
type: "bi.layout", |
||||
} |
||||
} |
||||
}); |
||||
$.shortcut("demo.combo", Demo.Func); |
@ -0,0 +1,24 @@
|
||||
Demo.Func = BI.inherit(BI.Widget, { |
||||
props: { |
||||
baseCls: "demo-func" |
||||
}, |
||||
render: function () { |
||||
return { |
||||
type: "bi.button_group", |
||||
chooseType: BI.ButtonGroup.CHOOSE_TYPE_NONE, |
||||
layouts: [{ |
||||
type: "bi.vertical" |
||||
}, { |
||||
type: "bi.center_adapt", |
||||
}], |
||||
items: [{ |
||||
type: "bi.label", |
||||
text: "button_group是一类具有相同属性或相似属性的抽象, 本案例实现的是布局的嵌套(vertical布局下内嵌center_adapt布局)" |
||||
}, { |
||||
type: "bi.button", |
||||
text: "1" |
||||
}] |
||||
} |
||||
} |
||||
}); |
||||
$.shortcut("demo.button_group", Demo.Func); |
@ -0,0 +1,26 @@
|
||||
Demo.Func = BI.inherit(BI.Widget, { |
||||
props: { |
||||
baseCls: "demo-func" |
||||
}, |
||||
render: function () { |
||||
return { |
||||
type: "bi.button_map", |
||||
chooseType: BI.ButtonGroup.CHOOSE_TYPE_MULTI, |
||||
layouts: [{ |
||||
type: "bi.vertical" |
||||
}, { |
||||
type: "bi.center_adapt", |
||||
}], |
||||
items: [{ |
||||
type: "bi.label", |
||||
text: "0", |
||||
value: 0 |
||||
}, { |
||||
type: "bi.button", |
||||
text: "1", |
||||
value: 1 |
||||
}] |
||||
} |
||||
} |
||||
}); |
||||
$.shortcut("demo.button_map", Demo.Func); |
@ -0,0 +1,26 @@
|
||||
Demo.Func = BI.inherit(BI.Widget, { |
||||
props: { |
||||
baseCls: "demo-func" |
||||
}, |
||||
render: function () { |
||||
return { |
||||
type: "bi.button_tree", |
||||
chooseType: BI.ButtonGroup.CHOOSE_TYPE_MULTI, |
||||
layouts: [{ |
||||
type: "bi.vertical" |
||||
}, { |
||||
type: "bi.center_adapt", |
||||
}], |
||||
items: [{ |
||||
type: "bi.label", |
||||
text: "0", |
||||
value: 0 |
||||
}, { |
||||
type: "bi.button", |
||||
text: "1", |
||||
value: 1 |
||||
}] |
||||
} |
||||
} |
||||
}); |
||||
$.shortcut("demo.button_tree", Demo.Func); |
@ -1,3 +1,7 @@
|
||||
Demo = { |
||||
version: 1.0 |
||||
}; |
||||
|
||||
BI.i18n = { |
||||
"BI-Basic_OK": "确定" |
||||
}; |
@ -1,192 +0,0 @@
|
||||
/** |
||||
* Created by Young's on 2016/8/17. |
||||
* 加载面板,一般只用于 requestAsync 中 |
||||
*/ |
||||
BI.RequstLoading = BI.inherit(BI.Widget, { |
||||
_defaultConfig: function () { |
||||
return BI.extend(BI.RequstLoading.superclass._defaultConfig.apply(this, arguments), {}); |
||||
}, |
||||
|
||||
_init: function () { |
||||
BI.RequstLoading.superclass._init.apply(this, arguments); |
||||
var self = this, o = this.options; |
||||
var mask = BI.Maskers.create(BI.RequstLoading.MASK_ID); |
||||
this.callback = o.callback; |
||||
this.paneTab = BI.createWidget({ |
||||
type: "bi.tab", |
||||
cardCreator: BI.bind(this._cardCreator, this), |
||||
defaultShowIndex: BI.RequstLoading.ERROR, |
||||
width: 400, |
||||
height: 300 |
||||
}); |
||||
var tempIcon = BI.createWidget({ |
||||
type: "bi.icon_button", |
||||
cls: "data-link-test-fail-icon", |
||||
width: 0, |
||||
height: 0 |
||||
}); |
||||
BI.createWidget({ |
||||
type: "bi.absolute", |
||||
element: $('body'), |
||||
items: [{ |
||||
el: tempIcon, |
||||
bottom: 0 |
||||
}] |
||||
}); |
||||
|
||||
BI.createWidget({ |
||||
type: "bi.absolute", |
||||
element: mask, |
||||
cls: "bi-request-loading", |
||||
items: [{ |
||||
el: { |
||||
type: "bi.layout", |
||||
cls: "mask-pane" |
||||
}, |
||||
top: 0, |
||||
left: 0, |
||||
bottom: 0, |
||||
right: 0 |
||||
}, { |
||||
el: { |
||||
type: "bi.center_adapt", |
||||
items: [this.paneTab] |
||||
}, |
||||
top: 0, |
||||
left: 0, |
||||
right: 0, |
||||
bottom: 0 |
||||
}] |
||||
}); |
||||
}, |
||||
|
||||
_cardCreator: function (v) { |
||||
var self = this; |
||||
var cancel = BI.createWidget({ |
||||
type: "bi.button", |
||||
text: BI.i18nText("BI-Basic_Cancel"), |
||||
title: BI.i18nText("BI-Basic_Cancel"), |
||||
level: "ignore", |
||||
height: 28, |
||||
width: 90, |
||||
handler: function () { |
||||
BI.Maskers.hide(BI.RequstLoading.MASK_ID); |
||||
} |
||||
}); |
||||
var retry = BI.createWidget({ |
||||
type: "bi.button", |
||||
text: BI.i18nText("BI-Basic_Retry"), |
||||
title: BI.i18nText("BI-Basic_Retry"), |
||||
level: "common", |
||||
height: 28, |
||||
width: 90, |
||||
handler: function () { |
||||
self.paneTab.setSelect(BI.RequstLoading.LOADING); |
||||
self.callback(); |
||||
} |
||||
}); |
||||
switch (v) { |
||||
case BI.RequstLoading.LOADING: |
||||
return BI.createWidget({ |
||||
type: "bi.vertical", |
||||
items: [{ |
||||
type: "bi.center_adapt", |
||||
cls: "loading-bar-icon", |
||||
items: [{ |
||||
type: "bi.icon", |
||||
width: 208, |
||||
height: 15 |
||||
}] |
||||
}, { |
||||
type: "bi.label", |
||||
cls: "loading-comment", |
||||
text: BI.i18nText("BI-Basic_Loading"), |
||||
height: 30 |
||||
}], |
||||
width: 208, |
||||
height: 200, |
||||
vgap: 10 |
||||
}); |
||||
case BI.RequstLoading.LOADING_TIMEOUT: |
||||
return BI.createWidget({ |
||||
type: "bi.vertical", |
||||
items: [{ |
||||
type: "bi.center_adapt", |
||||
cls: "loading-bar-icon", |
||||
items: [{ |
||||
type: "bi.icon", |
||||
width: 208, |
||||
height: 15 |
||||
}] |
||||
}, { |
||||
type: "bi.label", |
||||
cls: "loading-comment", |
||||
text: BI.i18nText("BI-Basic_Loading"), |
||||
height: 30 |
||||
}, { |
||||
type: "bi.label", |
||||
text: BI.i18nText("BI-Request_Time_Out_Toast_Tip"), |
||||
cls: "load-timeout-warning" |
||||
}, { |
||||
type: "bi.left_right_vertical_adapt", |
||||
items: { |
||||
left: [cancel], |
||||
right: [retry] |
||||
}, |
||||
height: 30, |
||||
llgap: 100, |
||||
rrgap: 100 |
||||
}], |
||||
vgap: 10 |
||||
}); |
||||
case BI.RequstLoading.ERROR: |
||||
return BI.createWidget({ |
||||
type: "bi.vertical", |
||||
items: [{ |
||||
type: "bi.center_adapt", |
||||
cls: "data-link-test-fail-icon", |
||||
items: [{ |
||||
type: "bi.icon", |
||||
width: 126, |
||||
height: 126 |
||||
}] |
||||
}, { |
||||
type: "bi.label", |
||||
text: BI.i18nText("BI-Connection_Lost"), |
||||
cls: "load-fail-comment" |
||||
}, { |
||||
type: "bi.left_right_vertical_adapt", |
||||
items: { |
||||
left: [cancel], |
||||
right: [retry] |
||||
}, |
||||
height: 30, |
||||
llgap: 100, |
||||
rrgap: 100 |
||||
}], |
||||
vgap: 20 |
||||
}); |
||||
} |
||||
}, |
||||
|
||||
showLoading: function () { |
||||
BI.Maskers.show(BI.RequstLoading.MASK_ID); |
||||
this.paneTab.setSelect(BI.RequstLoading.LOADING); |
||||
}, |
||||
|
||||
showError: function () { |
||||
BI.Maskers.show(BI.RequstLoading.MASK_ID); |
||||
this.paneTab.setSelect(BI.RequstLoading.ERROR); |
||||
}, |
||||
|
||||
setCallback: function (callback) { |
||||
this.callback = callback; |
||||
} |
||||
}); |
||||
BI.extend(BI.RequstLoading, { |
||||
MASK_ID: "___request__loading___", |
||||
LOADING: 1, |
||||
LOADING_TIMEOUT: 2, |
||||
ERROR: 3 |
||||
}); |
||||
$.shortcut("bi.request_loading", BI.RequstLoading); |
@ -1,117 +0,0 @@
|
||||
/** |
||||
* 组件请求数据超时提示 |
||||
* Created by Young's on 2017/2/4. |
||||
*/ |
||||
BI.TimeoutToast = BI.inherit(BI.Tip, { |
||||
_defaultConfig: function () { |
||||
return BI.extend(BI.TimeoutToast.superclass._defaultConfig.apply(this, arguments), { |
||||
baseCls: "bi-timeout-toast" |
||||
}); |
||||
}, |
||||
|
||||
_init: function () { |
||||
BI.TimeoutToast.superclass._init.apply(this, arguments); |
||||
var self = this; |
||||
this.requests = []; |
||||
this.toast = BI.createWidget({ |
||||
type: "bi.vertical_adapt", |
||||
element: this, |
||||
items: [{ |
||||
type: "bi.label", |
||||
text: BI.i18nText("BI-Request_Time_Out_Toast_Tip") |
||||
}, { |
||||
type: "bi.text_button", |
||||
cls: "cancel-button", |
||||
width: 60, |
||||
height: 22, |
||||
text: BI.i18nText("BI-Basic_Cancel"), |
||||
title: BI.i18nText("BI-Basic_Cancel"), |
||||
handler: function () { |
||||
self.cancelAllRequests(); |
||||
} |
||||
}, { |
||||
type: "bi.text_button", |
||||
cls: "retry-button", |
||||
width: 60, |
||||
height: 22, |
||||
text: BI.i18nText("BI-Basic_Retry"), |
||||
title: BI.i18nText("BI-Basic_Retry"), |
||||
handler: function () { |
||||
self.toast.element.slideUp(500); |
||||
self._retryAll(); |
||||
} |
||||
}, { |
||||
type: "bi.icon_button", |
||||
cls: "close-font", |
||||
width: 20, |
||||
height: 20, |
||||
title: BI.i18nText("BI-Basic_Close"), |
||||
handler: function () { |
||||
self.toast.element.slideUp(500); |
||||
} |
||||
}], |
||||
width: 520, |
||||
height: 30, |
||||
hgap: 2 |
||||
}); |
||||
|
||||
BI.createWidget({ |
||||
type: "bi.absolute", |
||||
element: $("body"), |
||||
items: [{ |
||||
el: this.toast, |
||||
left: "50%", |
||||
top: 0 |
||||
}] |
||||
}); |
||||
this.toast.element.css({"margin-left": -1 * this.toast.element.outerWidth() / 2}); |
||||
this.toast.setVisible(false); |
||||
}, |
||||
|
||||
_retryAll: function () { |
||||
var self = this; |
||||
var clonedRequests = BI.deepClone(this.requests); |
||||
this.requests = []; |
||||
BI.each(clonedRequests, function (i, options) { |
||||
BI.isFunction(self.callback) && self.callback(options); |
||||
}); |
||||
}, |
||||
|
||||
cancelAllRequests: function () { |
||||
this.toast.element.slideUp(500); |
||||
BI.each(this.requests, function (i, reqArgs) { |
||||
if (BI.isNotNull(reqArgs) && BI.isFunction(reqArgs.complete)) { |
||||
reqArgs.complete(); |
||||
} |
||||
}); |
||||
this.requests = []; |
||||
}, |
||||
|
||||
setCallback: function (callback) { |
||||
this.callback = callback; |
||||
}, |
||||
|
||||
addReq: function (options) { |
||||
var self = this; |
||||
if (this.requests.length === 0) { |
||||
setTimeout(function () { |
||||
if (self.requests.contains(options)) { |
||||
self.toast.element.slideDown(500); |
||||
} |
||||
}, 5 * 60 * 1000); //5 min
|
||||
} |
||||
this.requests.push(options); |
||||
}, |
||||
|
||||
removeReq: function (options) { |
||||
BI.remove(this.requests, options); |
||||
if (this.requests.length === 0) { |
||||
this.toast.element.slideUp(500); |
||||
} |
||||
}, |
||||
|
||||
hasReq: function (options) { |
||||
return this.requests.contains(options); |
||||
} |
||||
}); |
||||
$.shortcut("bi.timeout_toast", BI.TimeoutToast); |
Loading…
Reference in new issue