mirror of
https://shylinux.com/x/volcanos
synced 2025-04-26 01:04:06 +08:00
opt frame.js
This commit is contained in:
parent
307c9a1703
commit
40eba0d9ad
@ -16,6 +16,11 @@ Volcanos("page", {help: "用户界面", ClassList: {
|
|||||||
return (this.has(can, obj, key)? this.del(can, obj, key): this.add(can, obj, key)).indexOf(key) > -1
|
return (this.has(can, obj, key)? this.del(can, obj, key): this.add(can, obj, key)).indexOf(key) > -1
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
|
SelectChild: function(can, target, key, cb) { var i = 0
|
||||||
|
return can.page.Select(can, target, key, function(node) {
|
||||||
|
if (node.parentNode == target) { return cb(node, i++) }
|
||||||
|
})
|
||||||
|
},
|
||||||
SelectArgs: function(can, option, key, cb) {
|
SelectArgs: function(can, option, key, cb) {
|
||||||
if (can.base.isUndefined(key)) { var value = {}
|
if (can.base.isUndefined(key)) { var value = {}
|
||||||
can.page.SelectArgs(can, option, "", function(item) {
|
can.page.SelectArgs(can, option, "", function(item) {
|
||||||
|
18
lib/user.js
18
lib/user.js
@ -148,7 +148,7 @@ Volcanos("user", {help: "用户操作", info: {}, agent: {
|
|||||||
}); can.onmotion.story.auto(can, ui._target)
|
}); can.onmotion.story.auto(can, ui._target)
|
||||||
|
|
||||||
can.onengine.signal(can, chat.ONTOAST, can.request({}, {time: can.misc._time(), title: meta.title, content: meta.content, fileline: can.misc.FileLine(2, 2)}))
|
can.onengine.signal(can, chat.ONTOAST, can.request({}, {time: can.misc._time(), title: meta.title, content: meta.content, fileline: can.misc.FileLine(2, 2)}))
|
||||||
return !meta.action && can.onmotion.float.add(can, chat.TOAST, action), action
|
return action
|
||||||
},
|
},
|
||||||
share: function(can, msg, cmd) {
|
share: function(can, msg, cmd) {
|
||||||
can.run(msg, cmd||[ctx.ACTION, chat.SHARE], function(msg) {
|
can.run(msg, cmd||[ctx.ACTION, chat.SHARE], function(msg) {
|
||||||
@ -256,6 +256,7 @@ Volcanos("user", {help: "用户操作", info: {}, agent: {
|
|||||||
} }] }
|
} }] }
|
||||||
}) }] )
|
}) }] )
|
||||||
|
|
||||||
|
parent || can.page.Select(can, document.body, can.page.Keys("div.carte.float"), function(target) { can.page.Remove(can, target) })
|
||||||
can.page.ClassList.add(can, ui._target, chat.FLOAT)
|
can.page.ClassList.add(can, ui._target, chat.FLOAT)
|
||||||
ui._target.onmouseover = function(event) { can.onkeymap.prevent(event) }
|
ui._target.onmouseover = function(event) { can.onkeymap.prevent(event) }
|
||||||
var carte = {_target: ui._target, _parent: parent, layout: can.onlayout.figure(event, can, ui._target)}
|
var carte = {_target: ui._target, _parent: parent, layout: can.onlayout.figure(event, can, ui._target)}
|
||||||
@ -383,6 +384,21 @@ Volcanos("user", {help: "用户操作", info: {}, agent: {
|
|||||||
downloads: function(can, text, name, ext) { if (!text) { return }
|
downloads: function(can, text, name, ext) { if (!text) { return }
|
||||||
return can.user.download(can, URL.createObjectURL(new Blob([text])), name, ext)
|
return can.user.download(can, URL.createObjectURL(new Blob([text])), name, ext)
|
||||||
},
|
},
|
||||||
|
toimage: function(event, can, name, target, silent) {
|
||||||
|
can.require(["https://cdn.jsdelivr.net/npm/html2canvas@1.0.0-rc.5/dist/html2canvas.min.js"], function() {
|
||||||
|
html2canvas(target||can._target).then(function (canvas) { var url = canvas.toDataURL("image/png")
|
||||||
|
if (silent) { return can.user.download(can, url, name, "png") }
|
||||||
|
var toast = can.user.toast(can, {content: {img: url, style: {"max-height": 240, display: html.BLOCK}}, duration: -1,
|
||||||
|
action: shy({}, [cli.CLOSE, "download"], function(event, button) {
|
||||||
|
can.user.input(event, can, [{name: mdb.NAME, value: name}], function(list) { toast.close()
|
||||||
|
can.user.download(can, url, list[0], "png")
|
||||||
|
})
|
||||||
|
}),
|
||||||
|
})
|
||||||
|
})
|
||||||
|
})
|
||||||
|
},
|
||||||
|
|
||||||
camera: function(can, msg, cb) {
|
camera: function(can, msg, cb) {
|
||||||
navigator.getUserMedia({video: true}, cb, function(error) {
|
navigator.getUserMedia({video: true}, cb, function(error) {
|
||||||
can.misc.Log(error)
|
can.misc.Log(error)
|
||||||
|
@ -50,7 +50,7 @@ Volcanos(chat.ONKEYMAP, {_init: function(can, target) { can.onkeymap._build(can)
|
|||||||
|
|
||||||
b: function(event, can) { can.search(event, ["Header.onaction.black"]) },
|
b: function(event, can) { can.search(event, ["Header.onaction.black"]) },
|
||||||
w: function(event, can) { can.search(event, ["Header.onaction.white"]) },
|
w: function(event, can) { can.search(event, ["Header.onaction.white"]) },
|
||||||
c: function(event, can) { can.onmotion.toimage(event, can, can.user.title(), can._target.parentNode, true) },
|
c: function(event, can) { can.user.toimage(event, can, can.user.title(), can._target.parentNode, true) },
|
||||||
|
|
||||||
":": function(event, can) { can.onengine.signal(can, chat.ONCOMMAND_FOCUS), can.onkeymap.prevent(event) },
|
":": function(event, can) { can.onengine.signal(can, chat.ONCOMMAND_FOCUS), can.onkeymap.prevent(event) },
|
||||||
" ": function(event, can) { can.onengine.signal(can, chat.ONSEARCH_FOCUS), can.onkeymap.prevent(event) },
|
" ": function(event, can) { can.onengine.signal(can, chat.ONSEARCH_FOCUS), can.onkeymap.prevent(event) },
|
||||||
|
@ -53,9 +53,7 @@ Volcanos(chat.ONIMPORT, {help: "导入数据", _init: function(can, msg, cb, tar
|
|||||||
|
|
||||||
_time: function(can, target) {
|
_time: function(can, target) {
|
||||||
can.core.Timer({interval: 500}, function() { can.onimport.time(can, target) })
|
can.core.Timer({interval: 500}, function() { can.onimport.time(can, target) })
|
||||||
can.onappend.figure(can, {action: "date", style: {"min-width": 306}, _init: function(sub) {
|
can.onappend.figure(can, {action: "date", style: {"min-width": 306}}, target), target.onmouseenter = target.click
|
||||||
can.getActionSize(function(msg, top) { can.page.style(can, sub._target, {top: top, right: 0, left: ""}) })
|
|
||||||
}}, target), target.onmouseenter = target.click
|
|
||||||
},
|
},
|
||||||
time: function(can, target) {
|
time: function(can, target) {
|
||||||
can.onimport.topic(can), target.innerHTML = can.user.time(can, null, "%w %H:%M:%S")
|
can.onimport.topic(can), target.innerHTML = can.user.time(can, null, "%w %H:%M:%S")
|
||||||
@ -148,6 +146,7 @@ Volcanos(chat.ONACTION, {help: "交互数据",
|
|||||||
can.onimport.topic(can)
|
can.onimport.topic(can)
|
||||||
},
|
},
|
||||||
onmain: function(can, msg) {
|
onmain: function(can, msg) {
|
||||||
|
can.setHeader(chat.TOPIC)
|
||||||
can.run({}, [], function(msg) {
|
can.run({}, [], function(msg) {
|
||||||
if (!can.Conf(aaa.USERNICK, msg.Option(aaa.USERNICK)||msg.Option(ice.MSG_USERNICK)||msg.Option(ice.MSG_USERNAME))) {
|
if (!can.Conf(aaa.USERNICK, msg.Option(aaa.USERNICK)||msg.Option(ice.MSG_USERNICK)||msg.Option(ice.MSG_USERNAME))) {
|
||||||
msg.Option(chat.SSO)? can.user.jumps(msg.Option(chat.SSO)): can.user.login(can, function() {
|
msg.Option(chat.SSO)? can.user.jumps(msg.Option(chat.SSO)): can.user.login(can, function() {
|
||||||
@ -182,6 +181,9 @@ Volcanos(chat.ONACTION, {help: "交互数据",
|
|||||||
})
|
})
|
||||||
})
|
})
|
||||||
},
|
},
|
||||||
|
onshare: function(can, msg, args) {
|
||||||
|
can.user.share(can, can.request(event), [ctx.ACTION, chat.SHARE].concat(args||[]))
|
||||||
|
},
|
||||||
|
|
||||||
title: function(event, can) {
|
title: function(event, can) {
|
||||||
var args = {}; can.core.List([chat.TITLE, chat.TOPIC], function(key) { var value = can.misc.Search(can, key); value && (args[key] = value) })
|
var args = {}; can.core.List([chat.TITLE, chat.TOPIC], function(key) { var value = can.misc.Search(can, key); value && (args[key] = value) })
|
||||||
@ -192,7 +194,7 @@ Volcanos(chat.ONACTION, {help: "交互数据",
|
|||||||
white: function(event, can, button) { can.onimport.topic(can, button), can.onlayout._init(can) },
|
white: function(event, can, button) { can.onimport.topic(can, button), can.onlayout._init(can) },
|
||||||
print: function(event, can, button) { can.onimport.topic(can, [chat.WHITE, button]), can.onengine.signal(can, chat.ONPRINT) },
|
print: function(event, can, button) { can.onimport.topic(can, [chat.WHITE, button]), can.onengine.signal(can, chat.ONPRINT) },
|
||||||
webpack: function(event, can) { can.onengine.signal(can, "onwebpack", can.request(event)) },
|
webpack: function(event, can) { can.onengine.signal(can, "onwebpack", can.request(event)) },
|
||||||
toimage: function(event, can) { can.onmotion.toimage(event, can, can.user.title(), can._target.parentNode) },
|
toimage: function(event, can) { can.user.toimage(event, can, can.user.title(), can._target.parentNode) },
|
||||||
|
|
||||||
carte: function(event, can, list, cb) { can.user.carte(event, can, can.onaction, list, cb) },
|
carte: function(event, can, list, cb) { can.user.carte(event, can, can.onaction, list, cb) },
|
||||||
share: function(event, can, args) { can.user.share(can, can.request(event), [ctx.ACTION, chat.SHARE].concat(args||[])) },
|
share: function(event, can, args) { can.user.share(can, can.request(event), [ctx.ACTION, chat.SHARE].concat(args||[])) },
|
||||||
|
@ -1,27 +1,16 @@
|
|||||||
Volcanos(chat.ONACTION, {help: "控件交互", _init: function(can, meta, cb, target) {
|
Volcanos(chat.ONACTION, {
|
||||||
can.base.isFunc(cb) && cb(); switch (meta.type) {
|
_init: function(can, meta, target) { meta.type == html.BUTTON && meta.action == ice.AUTO && !can.sup._delay_init && target.click() },
|
||||||
case html.SELECT: meta.value && (target.value = meta.value); break
|
run: function(event, can) { can.run(can.request(event, {_toast: ice.PROCESS})) },
|
||||||
case html.BUTTON: !can.sup._delay_init && meta.action == ice.AUTO && target.click(); break
|
|
||||||
}
|
|
||||||
},
|
|
||||||
run: function(event, can) { can.run(can.request(event, {_toast: "执行中..."})) },
|
|
||||||
list: function(event, can) { can.sup.Conf("mode") != "simple" && can.run(event) },
|
list: function(event, can) { can.sup.Conf("mode") != "simple" && can.run(event) },
|
||||||
back: function(event, can) { can.sup.onimport._back(can.sup) },
|
back: function(event, can) { can.sup.onimport._back(can.sup) },
|
||||||
refresh: function(event, can) { can.run(event) },
|
refresh: function(event, can) { can.run(event) },
|
||||||
|
|
||||||
onclick: function(event, can) { can.sup.request(event, {_toast: "执行中..."})
|
onclick: function(event, can) { can.Conf(mdb.TYPE) == html.BUTTON && can.run(can.request(event, {_toast: ice.PROCESS}), [ctx.ACTION, can.Conf(mdb.NAME)].concat(can.sup.Input())) },
|
||||||
can.Conf(mdb.TYPE) == html.BUTTON && can.run(event, [ctx.ACTION, can.Conf(mdb.NAME)].concat(can.sup.Input()))
|
onchange: function(event, can) { can.Conf(mdb.TYPE) == html.SELECT && can.run(can.request(event, {_toast: ice.PROCESS})) },
|
||||||
},
|
|
||||||
onchange: function(event, can) { can.sup.request(event, {_toast: "执行中..."})
|
|
||||||
if (can.Conf(mdb.TYPE) == html.SELECT) { can.run(event) }
|
|
||||||
},
|
|
||||||
onkeydown: function(event, can) { can.onkeymap.input(event, can, event.target)
|
onkeydown: function(event, can) { can.onkeymap.input(event, can, event.target)
|
||||||
if (can.Conf(mdb.TYPE) == html.TEXTAREA) { if (!event.ctrlKey) { return } }
|
if (can.Conf(mdb.TYPE) == html.TEXTAREA) { if (!event.ctrlKey) { return } }
|
||||||
if (event.key == lang.ENTER) {
|
if (event.key == lang.ENTER) { return can.run(event), can.onmotion.focus(can, event.target), can.onkeymap.prevent(event) }
|
||||||
can.run(event), can.onmotion.focus(can, event.target)
|
if (!event.ctrlKey) { return }
|
||||||
can.onkeymap.prevent(event)
|
|
||||||
} if (!event.ctrlKey) { return }
|
|
||||||
|
|
||||||
switch (event.key) {
|
switch (event.key) {
|
||||||
case "b": can.CloneInput(); break
|
case "b": can.CloneInput(); break
|
||||||
case "m": can.CloneField(); break
|
case "m": can.CloneField(); break
|
||||||
|
@ -66,6 +66,6 @@ Volcanos(chat.ONFIGURE, {key: {
|
|||||||
switch (event.key) {
|
switch (event.key) {
|
||||||
case ice.PS: can.onfigure.key._load(event, sub, sub._cbs, target, meta.name, event.target.value); break
|
case ice.PS: can.onfigure.key._load(event, sub, sub._cbs, target, meta.name, event.target.value); break
|
||||||
}
|
}
|
||||||
can.onmotion.selectInputTable(event, sub, function() { can.onfigure.key._load(event, sub, sub._cbs, target, meta.name) }, target)
|
can.onkeymap.selectInputs(event, sub, function() { can.onfigure.key._load(event, sub, sub._cbs, target, meta.name) }, target)
|
||||||
},
|
},
|
||||||
}})
|
}})
|
||||||
|
@ -407,7 +407,7 @@ Volcanos(chat.ONDETAIL, {help: "组件详情", list: [cli.START, ice.RUN, ice.CO
|
|||||||
can.onmotion.hidden(can, sub._legend), can.onmotion.toggle(can, can.ui.display, true)
|
can.onmotion.hidden(can, sub._legend), can.onmotion.toggle(can, can.ui.display, true)
|
||||||
}, can.ui.display)
|
}, can.ui.display)
|
||||||
},
|
},
|
||||||
toimage: function(event, can) { can.onmotion.toimage(event, can, can.Option(nfs.PATH).split(ice.PS).pop().split(ice.PT)[0], can.svg) },
|
toimage: function(event, can) { can.user.toimage(event, can, can.Option(nfs.PATH).split(ice.PS).pop().split(ice.PT)[0], can.svg) },
|
||||||
copy: function(event, can) { can.onfigure._copy(event, can, event.target) },
|
copy: function(event, can) { can.onfigure._copy(event, can, event.target) },
|
||||||
label: function(event, can) { var target = event.target
|
label: function(event, can) { var target = event.target
|
||||||
var def = target.Value(mdb.TEXT); def && can.page.Select(can, can.svg, ice.PT+def, function(item) { def = item.Value(html.INNER) })
|
var def = target.Value(mdb.TEXT); def && can.page.Select(can, can.svg, ice.PT+def, function(item) { def = item.Value(html.INNER) })
|
||||||
|
@ -95,7 +95,7 @@ Volcanos(chat.ONIMPORT, {help: "导入数据", _init: function(can, msg, cb, tar
|
|||||||
|
|
||||||
if (data[mdb.NAME] == html.INNER) { return can.onmotion.copy(can, target) }
|
if (data[mdb.NAME] == html.INNER) { return can.onmotion.copy(can, target) }
|
||||||
can.page.Select(can, target, html.SPAN, function(item) {
|
can.page.Select(can, target, html.SPAN, function(item) {
|
||||||
can.onmotion.copy(can, item, "", function(event) {
|
can.onmotion.copy(can, item, function(event) {
|
||||||
can.runAction(event, mdb.CREATE, [mdb.TYPE, "spark", mdb.NAME, "shell", mdb.TEXT, item.innerText], function() {})
|
can.runAction(event, mdb.CREATE, [mdb.TYPE, "spark", mdb.NAME, "shell", mdb.TEXT, item.innerText], function() {})
|
||||||
})
|
})
|
||||||
})
|
})
|
||||||
@ -109,7 +109,7 @@ Volcanos(chat.ONIMPORT, {help: "导入数据", _init: function(can, msg, cb, tar
|
|||||||
}
|
}
|
||||||
target.oncontextmenu = function(event) {
|
target.oncontextmenu = function(event) {
|
||||||
can.user.carteClient(event, can, kit.Dict(mdb.EXPORT, function(event, can, button) {
|
can.user.carteClient(event, can, kit.Dict(mdb.EXPORT, function(event, can, button) {
|
||||||
can.onmotion.toimage(event, can, "hi", target)
|
can.user.toimage(event, can, "hi", target)
|
||||||
}), [mdb.EXPORT])
|
}), [mdb.EXPORT])
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
@ -141,7 +141,7 @@ Volcanos(chat.ONACTION, {list: [
|
|||||||
]
|
]
|
||||||
can.user.copy(event, can, list[0])
|
can.user.copy(event, can, list[0])
|
||||||
},
|
},
|
||||||
"生成图片": function(event, can) { can.onmotion.toimage(event, can, can._name) },
|
"生成图片": function(event, can) { can.user.toimage(event, can, can._name) },
|
||||||
"打包页面": function(event, can) { can.onengine.signal(can, "onwebpack", can.request(event)) },
|
"打包页面": function(event, can) { can.onengine.signal(can, "onwebpack", can.request(event)) },
|
||||||
|
|
||||||
"保存参数": function(event, can) { can.search(event, ["River.ondetail.保存参数"]) },
|
"保存参数": function(event, can) { can.search(event, ["River.ondetail.保存参数"]) },
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
Volcanos(chat.ONIMPORT, {help: "导入数据", _init: function(can, msg, cb, target) { can.onmotion.clear(can, target)
|
Volcanos(chat.ONIMPORT, {_init: function(can, msg, cb, target) { can.onmotion.clear(can, target)
|
||||||
var cbs = can.onimport[can.Conf(ctx.STYLE)||msg.Option(ctx.STYLE)]; if (can.base.isFunc(cbs)) {
|
var cbs = can.onimport[can.Conf(ctx.STYLE)||msg.Option(ctx.STYLE)]; if (can.base.isFunc(cbs)) {
|
||||||
can.core.CallFunc(cbs, {can: can, msg: msg, target: target})
|
can.core.CallFunc(cbs, {can: can, msg: msg, target: target})
|
||||||
can.page.ClassList.add(can, target, can._args[ctx.STYLE])
|
can.page.ClassList.add(can, target, can._args[ctx.STYLE])
|
||||||
@ -97,10 +97,10 @@ Volcanos(chat.ONIMPORT, {help: "导入数据", _init: function(can, msg, cb, tar
|
|||||||
zone._menu? can.user.carteRight(event, can, zone._menu.meta, zone._menu.list||can.core.Item(zone._menu.meta), function(event, button, meta) {
|
zone._menu? can.user.carteRight(event, can, zone._menu.meta, zone._menu.list||can.core.Item(zone._menu.meta), function(event, button, meta) {
|
||||||
(meta[button]||can.onaction[button])(event, can, button)
|
(meta[button]||can.onaction[button])(event, can, button)
|
||||||
}): can.user.carteRight(event, can, {
|
}): can.user.carteRight(event, can, {
|
||||||
"刷新": function() { zone.refresh() },
|
"refresh": function() { zone.refresh() },
|
||||||
"折叠": function() { can.page.Select(can, zone._target, html.DIV_LIST, function(item) { can.onmotion.toggle(can, item, false) }) },
|
"fold": function() { can.page.Select(can, zone._target, html.DIV_LIST, function(item) { can.onmotion.toggle(can, item, false) }) },
|
||||||
"展开": function() { can.page.Select(can, zone._target, html.DIV_LIST, function(item) { can.onmotion.toggle(can, item, true) }) },
|
"expand": function() { can.page.Select(can, zone._target, html.DIV_LIST, function(item) { can.onmotion.toggle(can, item, true) }) },
|
||||||
}, ["刷新", "折叠", "展开"])
|
}, ["refresh", "fold", "expand"])
|
||||||
}},
|
}},
|
||||||
{view: html.ACTION, _init: function(target) { zone._action = target
|
{view: html.ACTION, _init: function(target) { zone._action = target
|
||||||
can.onappend._action(can, [{input: html.TEXT, placeholder: "search", onkeyup: function(event) {
|
can.onappend._action(can, [{input: html.TEXT, placeholder: "search", onkeyup: function(event) {
|
||||||
@ -177,13 +177,13 @@ Volcanos(chat.ONIMPORT, {help: "导入数据", _init: function(can, msg, cb, tar
|
|||||||
})
|
})
|
||||||
},
|
},
|
||||||
})
|
})
|
||||||
Volcanos(chat.ONLAYOUT, {help: "界面布局",
|
Volcanos(chat.ONLAYOUT, {
|
||||||
_init: function(can) { can.core.CallFunc([can.onimport, html.LAYOUT], {can: can}) },
|
_init: function(can) { can.core.CallFunc([can.onimport, html.LAYOUT], {can: can}) },
|
||||||
float: function(can) { can.onlayout._init(can) },
|
float: function(can) { can.onlayout._init(can) },
|
||||||
full: function(can) { can.onlayout._init(can) },
|
full: function(can) { can.onlayout._init(can) },
|
||||||
cmd: function(can) { can.onlayout._init(can) },
|
cmd: function(can) { can.onlayout._init(can) },
|
||||||
})
|
})
|
||||||
Volcanos(chat.ONEXPORT, {help: "导出数据",
|
Volcanos(chat.ONEXPORT, {
|
||||||
table: function(can) { var msg = can._msg; if (msg.Length() == 0) { return }
|
table: function(can) { var msg = can._msg; if (msg.Length() == 0) { return }
|
||||||
var res = [msg.append && msg.append.join(ice.FS)]; msg.Table(function(line, index, array) {
|
var res = [msg.append && msg.append.join(ice.FS)]; msg.Table(function(line, index, array) {
|
||||||
res.push(can.core.Item(line, function(key, value) { return value }).join(ice.FS))
|
res.push(can.core.Item(line, function(key, value) { return value }).join(ice.FS))
|
||||||
|
1
proto.js
1
proto.js
@ -210,6 +210,7 @@ var chat = {
|
|||||||
|
|
||||||
ONMAIN: "onmain", ONLOGIN: "onlogin", ONSEARCH: "onsearch",
|
ONMAIN: "onmain", ONLOGIN: "onlogin", ONSEARCH: "onsearch",
|
||||||
ONSIZE: "onsize", ONTOAST: "ontoast", ONREMOTE: "onremote",
|
ONSIZE: "onsize", ONTOAST: "ontoast", ONREMOTE: "onremote",
|
||||||
|
ONSHARE: "onshare",
|
||||||
ONKEYUP: "onkeyup",
|
ONKEYUP: "onkeyup",
|
||||||
ONRESIZE: "onresize",
|
ONRESIZE: "onresize",
|
||||||
ONKEYDOWN: "onkeydown", ONMOUSEENTER: "onmouseenter", ORIENTATIONCHANGE: "orientationchange",
|
ONKEYDOWN: "onkeydown", ONMOUSEENTER: "onmouseenter", ORIENTATIONCHANGE: "orientationchange",
|
||||||
|
Loading…
x
Reference in New Issue
Block a user