mirror of
https://github.com/Ernous/TorrServerJellyfin.git
synced 2025-12-19 13:36:09 +05:00
Merge remote-tracking branch 'origin/master'
This commit is contained in:
@@ -1,3 +1,3 @@
|
||||
package version
|
||||
|
||||
const Version = "MatriX.120"
|
||||
const Version = "MatriX.120.1"
|
||||
|
||||
BIN
server/web/msx/assets/html5x.html.gz
Normal file
BIN
server/web/msx/assets/html5x.html.gz
Normal file
Binary file not shown.
BIN
server/web/msx/assets/russian.json.gz
Normal file
BIN
server/web/msx/assets/russian.json.gz
Normal file
Binary file not shown.
BIN
server/web/msx/assets/tizen.html.gz
Normal file
BIN
server/web/msx/assets/tizen.html.gz
Normal file
Binary file not shown.
234
server/web/msx/assets/torrents.html
Normal file
234
server/web/msx/assets/torrents.html
Normal file
@@ -0,0 +1,234 @@
|
||||
|
||||
<!DOCTYPE html>
|
||||
<html>
|
||||
<head>
|
||||
<title>TorrServer Interaction Plugin</title>
|
||||
<meta charset="UTF-8" />
|
||||
<meta name="author" content="damiva" />
|
||||
<script type="text/javascript" src="tvx.js"></script>
|
||||
<script type="text/javascript">
|
||||
/*******************************************/
|
||||
/* TorrServer Interaction Plugin by damiva */
|
||||
/*******************************************/
|
||||
var ADR = window.location.origin, VRS = "", TZN = false;
|
||||
function TAU(n){
|
||||
var x = [
|
||||
["3g2","3gp","aaf","asf","avchd","avi","drc","flv","m2ts","ts","m2v","m4p","m4v","mkv","mng","mov","mp2","mp4","mpe","mpeg","mpg","mpv","mxf","nsv","ogg","ogv","qt","rm","rmvb","roq","svi",".vob","webm","wmv","yuv"],
|
||||
["aac","aiff","ape","au","flac","gsm","it","m3u","m4a","mid","mod","mp3","mpa","pls","ra","s3m","sid","wav","wma","xm"]
|
||||
];
|
||||
var i = n.lastIndexOf(".");
|
||||
if(i >= 0){
|
||||
n = n.substr(i + 1);
|
||||
for(var e = 0; e < x.length; e++) if(x[e].indexOf(n) >= 0) return e;
|
||||
}
|
||||
return -1
|
||||
}
|
||||
function LNG(s){
|
||||
var i = s == 0 ? 0 : Math.floor(Math.log(s) / Math.log(1024));
|
||||
return (s / Math.pow(1024, i)).toFixed(2) * 1 + ' ' + ['B', 'kB', 'MB', 'GB', 'TB'][i];
|
||||
}
|
||||
function PRS(t){
|
||||
return "{ico:msx-white:north} " + (t.active_peers || 0) + " ⋅ " + (t.pending_peers || 0) + " / " + (t.total_peers || 0);
|
||||
}
|
||||
function STR(i, c){
|
||||
var v = TVXServices.storage.getBool(i, false);
|
||||
if(c) TVXServices.storage.set(i, v = !v);
|
||||
return v;
|
||||
}
|
||||
function AJX(u, d, o, e){
|
||||
console.log(u);
|
||||
if(typeof d != "object") TVXServices.ajax.get(ADR + u, {success: o, error: e}, {dataType: d ? "json" : "text"});
|
||||
else TVXServices.ajax.post(ADR + u, JSON.stringify(d), {success: o, error: e || TVXInteractionPlugin.error}, {dataType: e ? "json" : "text"});
|
||||
}
|
||||
function OPS(){
|
||||
var k = ["red", "green", "yellow"],
|
||||
r = {caption: "{dic:caption:options|Options}:", template: {enumerate: false, type: "control", layout: "0,0,8,1"}, items: []};
|
||||
r.headline = r.caption;
|
||||
for(var i = 0; i < 3; i++){
|
||||
var a = arguments[i];
|
||||
if(a){
|
||||
a.key = k[i];
|
||||
a.icon = "msx-" + a.key + ":stop";
|
||||
r.items.push(a);
|
||||
r.caption += "{tb}{ico:" + a.icon + "} " + a.label;
|
||||
}
|
||||
}
|
||||
r.items.push(
|
||||
{icon: "msx-blue:menu", label: "{dic:caption:menu|Menu}", action: "[cleanup|menu]"},
|
||||
{icon: "format-size", label: arguments[3] ? "{dic:lfont|Larger font size}" : "{dic:sfont|Smaller font size}", action: "[cleanup|interaction:commit:message:compress|reload:content]"}
|
||||
)
|
||||
if(arguments[4] !== undefined) r.items.push({icon: "translate", label: arguments[4] ? "Switch to English" : "Перевести на русский", action: "[interaction:commit:message:russian|reload]"});
|
||||
return r;
|
||||
}
|
||||
function TDB(d, c, r){return {
|
||||
type: "list", reuse: false, cache: false, restore: false, compress: c, headline: "TorrServer", extension: VRS,
|
||||
template: {
|
||||
imageWidth: 1.3, imageFiller: "height", icon: "msx-glass:bolt", layout: c ? "0,0,8,2" : "0,0,6,2", options: OPS(
|
||||
{label: "{dic:rem|Remove}", action: "[cleanup|interaction:commit:message:rem]", data: "{context:id}"},
|
||||
{label: "{dic:drop|Drop}", action: "[cleanup|interaction:commit:message:drop]", data: "{context:id}"},
|
||||
{label: "{dic:refresh|Refresh}", action: "[cleanup|reload:content]"},
|
||||
c, r
|
||||
)
|
||||
},
|
||||
items: d.map(function(t){return {
|
||||
id: t.hash,
|
||||
headline: t.title,
|
||||
image: t.poster || null,
|
||||
titleFooter: "{ico:msx-white:attach-file} " + LNG(t.torrent_size),
|
||||
stamp: t.stat < 5 ? PRS(t) : null,
|
||||
stampColor: t.stat == 4 ? "msx-red" : t.stat == 3 ? "msx-green" : "msx-yellow",
|
||||
action: "content:request:interaction:" + t.hash + "@" + window.location.href
|
||||
}})
|
||||
}}
|
||||
function TFS(d, c){
|
||||
var fs = [], is = [], sf = TVXServices.storage.getBool("folders", false);
|
||||
d.file_stats.forEach(function(f){
|
||||
var a = TAU(f.path);
|
||||
if(a >= 0){
|
||||
var b = f.path.indexOf("/"),
|
||||
e = f.path.lastIndexOf("/"),
|
||||
p = b < e && e > 0 ? f.path.substr(b + 1, e - b - 1) : ""
|
||||
i = d.hash + "-" + f.id,
|
||||
u = ADR + "/play/" + d.hash + "/" + f.id;
|
||||
if(p && (fs.length == 0 || fs[fs.length - 1].label != p)){
|
||||
fs.push({label: p, action: "[cleanup|focus:" + i + "]"});
|
||||
if(sf) is.push({type: "space", label: "{col:msx-yellow}{ico:folder} " + p});
|
||||
}
|
||||
is.push({
|
||||
id: i,
|
||||
label: f.path.substr(e + 1),
|
||||
extensionLabel: LNG(f.length),
|
||||
folder: p ? ("{ico:msx-yellow:folder} " + p + "{br}") : "",
|
||||
icon: "msx-white-soft:" + (a ? "audiotrack" : "movie"),
|
||||
group: a ? "{dic:label:audio|Audio}" : "{dic:label:video|Video}",
|
||||
action: (a ? "audio:" : "video:") + (a || TZN ? u : ("plugin:" + window.location.origin + "/msx/html5x?url=" + encodeURIComponent(u)))
|
||||
});
|
||||
}
|
||||
});
|
||||
return {
|
||||
type: "list", compress: c, items: is,
|
||||
extension: "{ico:msx-white:attach-file} " + LNG(d.torrent_size), headline: d.title,
|
||||
options: OPS(
|
||||
{label: "{dic:continue|Continue}", action: "[cleanup|interaction:commit:message:continue]", data: d.hash},
|
||||
fs.length > 1 ? {label: "{dic:folder|Select folder}", action: "panel:data", data: {
|
||||
type: "list", compress: true, headline: "{dic:folder|Go to folder}:", items: fs,
|
||||
template: {type: "control", icon: "msx-yellow:folder", layout: "0,0,10,1"},
|
||||
}} : null,
|
||||
fs.length > 0 ? {label: STR("folders") ? "{dic:hfolders|Hide folders}" : "{dic:sfolders|Show folders}", action: "[cleanup|interaction:commit:message:folders|reload:content]"} : null,
|
||||
c
|
||||
),
|
||||
template: {type: "control", layout: c ? "0,0,16,1" : "0,0,12,1", progress: -1, playerLabel: d.title,
|
||||
live: {type: "playback", action: "player:show"}, properties: {
|
||||
"info:text": "{context:folder}{ico:msx-green:play-arrow} {context:label}",
|
||||
"info:image": d.poster || "default",
|
||||
"control:type": "extended",
|
||||
"resume:key": "id",
|
||||
"trigger:complete": "[player:auto:next|resume:cancel]",
|
||||
"trigger:player": "interaction:commit:message:" + d.hash
|
||||
}
|
||||
}
|
||||
};
|
||||
}
|
||||
function PLG(){
|
||||
var W = new TVXBusyService(), S = "";
|
||||
this.ready = function(){
|
||||
ADR = TVXServices.urlParams.getFullStr("addr", ADR);
|
||||
if(TVXServices.urlParams.has("link")){
|
||||
TVXServices.urlParams.remove("addr");
|
||||
S = TVXServices.urlParams.build(true, "&");
|
||||
}
|
||||
W.start();
|
||||
TVXInteractionPlugin.onValidatedSettings(function(){
|
||||
console.log(TVXSettings);
|
||||
TZN = TVXSettings.PLATFORM == "tizen";
|
||||
AJX("/echo", false, function(v){VRS = v; W.stop()}, function(){W.stop()});
|
||||
});
|
||||
};
|
||||
this.handleEvent = function(d){
|
||||
if(d.event == "video:load"){
|
||||
switch(d.info.type){
|
||||
case "video":
|
||||
TVXInteractionPlugin.executeAction("player:button:content:setup", {
|
||||
icon: "build",
|
||||
action: TZN ? ("content:request:interaction:init@" + window.location.origin + "/msx/tizen") : "panel:request:player:options"
|
||||
});
|
||||
break;
|
||||
case "audio":
|
||||
TVXInteractionPlugin.executeAction("interaction:commit:message:background", true);
|
||||
}
|
||||
TVXInteractionPlugin.executeAction("interaction:commit:message:" + d.info.id.split("-")[0]);
|
||||
}
|
||||
};
|
||||
this.handleRequest = function(i, _, f){W.onReady(function(){
|
||||
var e = function(m){TVXInteractionPlugin.error(m); f();},
|
||||
c = STR("compress"),
|
||||
r = STR("russian");
|
||||
switch(i){
|
||||
case "init":
|
||||
f({
|
||||
name: "TorrServer Plugin",
|
||||
version: "0.0.1",
|
||||
reference: "request:interaction:db@" + window.location.href,
|
||||
dictionary: r ? (window.location.origin + "/msx/russian.json") : null
|
||||
});
|
||||
break;
|
||||
case "sdb": r = undefined;
|
||||
case "db":
|
||||
AJX("/torrents", {action: "list"}, function(d){f(TDB(d, c, r))}, e);
|
||||
break;
|
||||
default:
|
||||
AJX("/stream/?stat&" + (S || ("link=" + i)), true, function(d){f(TFS(d, c, S && S.indexOf("&save_to_db") < 0))}, e);
|
||||
}
|
||||
})};
|
||||
this.handleData = function(d){
|
||||
var r = function(){TVXInteractionPlugin.executeAction("reload:content")}
|
||||
switch(d.message){
|
||||
case "rem":
|
||||
case "drop":
|
||||
AJX("/torrents", {action: d.message, hash: d.data}, r);
|
||||
break;
|
||||
case "compress":
|
||||
case "folders":
|
||||
case "russian":
|
||||
STR(d.message, true);
|
||||
break;
|
||||
case "background":
|
||||
var b = STR(d.message, !d.data);
|
||||
TVXInteractionPlugin.executeAction("player:button:content:setup", {
|
||||
icon: (b ? "hide-" : "") + "image",
|
||||
action: "interaction:commit:message:" + d.message
|
||||
});
|
||||
TVXInteractionPlugin.executeAction("player:background:" + (b
|
||||
? ("https://source.unsplash.com/random/" + TVXSettings.WIDTH + "x" + TVXSettings.HEIGHT + "/?ts=" + TVXDateTools.getTimestamp())
|
||||
: "none"
|
||||
));
|
||||
break;
|
||||
case "continue":
|
||||
AJX(
|
||||
"/viewed",
|
||||
{action: "list", hash: d.data},
|
||||
function(v){
|
||||
var l = 1;
|
||||
v.forEach(function(i){if(i.file_index > l) l = i.file_index});
|
||||
TVXInteractionPlugin.executeAction("focus:" + d.data + "-" + l);
|
||||
},
|
||||
function(){TVXInteractionPlugin.executeAction("focus:" + d.data + "-" + l)}
|
||||
);
|
||||
break;
|
||||
default:
|
||||
if(d.message) AJX("/cache", {action: "get", hash: d.message}, function(v){
|
||||
TVXInteractionPlugin.executeAction("player:label:position:{VALUE}{tb}{tb}" + PRS(v.Torrent));
|
||||
}, function(){});
|
||||
}
|
||||
};
|
||||
}
|
||||
TVXPluginTools.onReady(function() {
|
||||
TVXInteractionPlugin.setupHandler(new PLG());
|
||||
TVXInteractionPlugin.init();
|
||||
});
|
||||
/*******************************************/
|
||||
</script>
|
||||
</head>
|
||||
<body>
|
||||
</body>
|
||||
</html>
|
||||
BIN
server/web/msx/assets/torrents.min.html.gz
Normal file
BIN
server/web/msx/assets/torrents.min.html.gz
Normal file
Binary file not shown.
BIN
server/web/msx/assets/tvx.js.gz
Normal file
BIN
server/web/msx/assets/tvx.js.gz
Normal file
Binary file not shown.
@@ -1,12 +0,0 @@
|
||||
package msx
|
||||
|
||||
import _ "embed"
|
||||
|
||||
//go:embed pages/html5x.html
|
||||
var Msxhtml5xhtml []byte
|
||||
|
||||
//go:embed pages/tizen.html
|
||||
var Msxtizenhtml []byte
|
||||
|
||||
//go:embed pages/tvx-plugin.min.js
|
||||
var Msxtvxpluginminjs []byte
|
||||
@@ -1,262 +1,44 @@
|
||||
package msx
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"net/url"
|
||||
"path/filepath"
|
||||
"strings"
|
||||
|
||||
sets "server/settings"
|
||||
"server/torr"
|
||||
"server/torr/state"
|
||||
"server/utils"
|
||||
_ "embed"
|
||||
|
||||
"server/version"
|
||||
|
||||
"github.com/gin-gonic/gin"
|
||||
)
|
||||
|
||||
type msxMenu struct {
|
||||
Logo string `json:"logo,omitempty"`
|
||||
Reuse bool `json:"reuse"`
|
||||
Cache bool `json:"cache"`
|
||||
Restore bool `json:"restore"`
|
||||
Reference string `json:"reference,omitempty"`
|
||||
Menu []msxMenuItem `json:"menu"`
|
||||
var (
|
||||
//go:embed assets/tvx.js.gz
|
||||
tvx []byte
|
||||
//go:embed assets/tizen.html.gz
|
||||
tzn []byte
|
||||
//go:embed assets/torrents.min.html.gz
|
||||
trn []byte
|
||||
//go:embed assets/html5x.html.gz
|
||||
h5x []byte
|
||||
//go:embed assets/russian.json.gz
|
||||
rus []byte
|
||||
)
|
||||
|
||||
func ass(b []byte, t string) func(*gin.Context) {
|
||||
return func(c *gin.Context) {
|
||||
c.Header("Content-Encoding", "gzip")
|
||||
c.Data(200, t+"; charset=UTF-8", b)
|
||||
}
|
||||
}
|
||||
|
||||
type msxMenuItem struct {
|
||||
Icon string `json:"icon,omitempty"`
|
||||
Label string `json:"label,omitempty"`
|
||||
Data msxData `json:"data,omitempty"`
|
||||
}
|
||||
|
||||
type msxTemplate struct {
|
||||
Type string `json:"type,omitempty"`
|
||||
Layout string `json:"layout,omitempty"`
|
||||
Color string `json:"color,omitempty"`
|
||||
Icon string `json:"icon,omitempty"`
|
||||
IconSize string `json:"iconSize,omitempty"`
|
||||
BadgeColor string `json:"badgeColor,omitempty"`
|
||||
TagColor string `json:"tagColor,omitempty"`
|
||||
Properties gin.H `json:"properties,omitempty"`
|
||||
}
|
||||
|
||||
type msxData struct {
|
||||
Type string `json:"type,omitempty"`
|
||||
Headline string `json:"headline,omitempty"`
|
||||
Action string `json:"action,omitempty"`
|
||||
Template msxTemplate `json:"template,omitempty"`
|
||||
Items []msxItem `json:"items,omitempty"`
|
||||
Pages []msxPage `json:"pages,omitempty"`
|
||||
}
|
||||
|
||||
type msxItem struct {
|
||||
Title string `json:"title,omitempty"`
|
||||
Label string `json:"label,omitempty"`
|
||||
PlayerLabel string `json:"playerLabel,omitempty"`
|
||||
Action string `json:"action,omitempty"`
|
||||
Image string `json:"image,omitempty"`
|
||||
Icon string `json:"icon,omitempty"`
|
||||
Badge string `json:"badge,omitempty"`
|
||||
Tag string `json:"tag,omitempty"`
|
||||
Data gin.H `json:"data,omitempty"`
|
||||
}
|
||||
|
||||
type msxPage struct {
|
||||
Items []gin.H `json:"items,omitempty"`
|
||||
}
|
||||
|
||||
const ICON_OPTIONS = "tune"
|
||||
|
||||
func msxStart(c *gin.Context) {
|
||||
c.JSON(200, gin.H{
|
||||
"name": "TorrServer",
|
||||
"version": version.Version,
|
||||
"parameter": "menu:{PREFIX}{SERVER}/msx/torrents",
|
||||
func SetupRoute(r *gin.RouterGroup) {
|
||||
r.GET("/msx/start.json", func(c *gin.Context) {
|
||||
c.JSON(200, gin.H{
|
||||
"name": "TorrServer",
|
||||
"version": version.Version,
|
||||
"parameter": "content:request:interaction:init@{PREFIX}{SERVER}/msx/torrents",
|
||||
})
|
||||
})
|
||||
}
|
||||
|
||||
// /msx/torrents
|
||||
func msxTorrents(c *gin.Context) {
|
||||
torrs := torr.ListTorrent()
|
||||
|
||||
host := utils.GetScheme(c) + "://" + c.Request.Host
|
||||
logo := host + "/apple-touch-icon.png"
|
||||
list := make([]msxItem, len(torrs))
|
||||
|
||||
for i, tor := range torrs {
|
||||
item := msxItem{
|
||||
Title: tor.Title,
|
||||
Image: tor.Poster,
|
||||
Action: "content:" + host + "/msx/playlist/" + url.PathEscape(tor.Title) +
|
||||
"?hash=" + tor.TorrentSpec.InfoHash.HexString() + "&platform={PLATFORM}",
|
||||
}
|
||||
list[i] = item
|
||||
}
|
||||
|
||||
c.JSON(200, msxMenu{
|
||||
Logo: logo,
|
||||
Cache: false,
|
||||
Reuse: false,
|
||||
Restore: false,
|
||||
Reference: host + "/msx/torrents",
|
||||
Menu: []msxMenuItem{
|
||||
// Main page
|
||||
{
|
||||
Icon: "list",
|
||||
Label: "Torrents",
|
||||
Data: msxData{
|
||||
Type: "pages",
|
||||
Template: msxTemplate{
|
||||
Type: "separate",
|
||||
Layout: "0,0,2,4",
|
||||
Icon: "msx-white-soft:movie",
|
||||
Color: "msx-glass",
|
||||
},
|
||||
Items: list,
|
||||
},
|
||||
// About
|
||||
}, {
|
||||
Icon: "info",
|
||||
Label: "About",
|
||||
Data: msxData{
|
||||
Pages: []msxPage{
|
||||
{
|
||||
Items: []gin.H{
|
||||
{
|
||||
"type": "default",
|
||||
"headline": "TorrServer " + version.Version,
|
||||
"text": "https://github.com/YouROK/TorrServer",
|
||||
"image": logo,
|
||||
"imageFiller": "height-left",
|
||||
"imageWidth": 2,
|
||||
"layout": "0,0,8,2",
|
||||
"color": "msx-gray-soft",
|
||||
},
|
||||
},
|
||||
},
|
||||
},
|
||||
},
|
||||
},
|
||||
},
|
||||
})
|
||||
}
|
||||
|
||||
// /msx/playlist?hash=...
|
||||
func msxPlaylist(c *gin.Context) {
|
||||
hash, _ := c.GetQuery("hash")
|
||||
if hash == "" {
|
||||
c.JSON(200, msxData{
|
||||
Action: "error:Item not found",
|
||||
})
|
||||
return
|
||||
}
|
||||
platform, _ := c.GetQuery("platform")
|
||||
|
||||
tor := torr.GetTorrent(hash)
|
||||
if tor == nil {
|
||||
c.JSON(200, msxData{
|
||||
Action: "error:Item not found",
|
||||
})
|
||||
return
|
||||
}
|
||||
|
||||
if tor.Stat == state.TorrentInDB {
|
||||
tor = torr.LoadTorrent(tor)
|
||||
if tor == nil {
|
||||
c.JSON(200, msxData{
|
||||
Action: "error:Error while getting torrent info",
|
||||
})
|
||||
return
|
||||
}
|
||||
}
|
||||
|
||||
host := utils.GetScheme(c) + "://" + c.Request.Host
|
||||
status := tor.Status()
|
||||
viewed := sets.ListViewed(hash)
|
||||
var list []msxItem
|
||||
contentAction := ""
|
||||
|
||||
for _, f := range status.FileStats {
|
||||
mime := utils.GetMimeType(f.Path)
|
||||
action := mime[0 : len(mime)-2]
|
||||
|
||||
if action == "*" {
|
||||
continue
|
||||
}
|
||||
name := filepath.Base(f.Path)
|
||||
uri := host + "/stream/" + url.PathEscape(name) + "?link=" + hash + "&index=" + fmt.Sprint(f.Id) + "&play"
|
||||
item := msxItem{
|
||||
Label: name,
|
||||
PlayerLabel: strings.TrimSuffix(name, filepath.Ext(name)),
|
||||
Action: action + ":" + uri,
|
||||
}
|
||||
|
||||
if platform == "android" || platform == "firetv" {
|
||||
item.Action = "system:tvx:launch"
|
||||
item.Data = gin.H{
|
||||
"id": hash + "-" + fmt.Sprint(f.Id),
|
||||
"uri": uri,
|
||||
"type": mime,
|
||||
}
|
||||
} else if platform == "tizen" {
|
||||
contentAction = "content:request:interaction:init@" + host + "/msx/tizen.html"
|
||||
} else if platform == "netcast" {
|
||||
contentAction = "system:netcast:menu"
|
||||
} else if platform == "ios" || platform == "mac" {
|
||||
// TODO - for iOS and Mac the application must be defined in scheme but we don't know what user has installed
|
||||
item.Action = "system:tvx:launch:vlc://" + uri
|
||||
} else {
|
||||
item.Action = "video:plugin:" + host + "/msx/html5x.html?url= " + url.QueryEscape(uri)
|
||||
contentAction = "panel:request:player:options"
|
||||
}
|
||||
|
||||
if isViewed(viewed, f.Id) {
|
||||
item.Tag = " "
|
||||
}
|
||||
if action == "audio" {
|
||||
item.Icon = "msx-white-soft:music-note"
|
||||
}
|
||||
list = append(list, item)
|
||||
}
|
||||
|
||||
if len(list) == 0 {
|
||||
c.JSON(200, msxData{
|
||||
Action: "error:No supported content found",
|
||||
})
|
||||
return
|
||||
}
|
||||
|
||||
res := msxData{
|
||||
Headline: tor.Title,
|
||||
Type: "list",
|
||||
Template: msxTemplate{
|
||||
Type: "control",
|
||||
Layout: "0,2,12,1",
|
||||
Color: "msx-glass",
|
||||
Icon: "msx-white-soft:movie",
|
||||
IconSize: "medium",
|
||||
BadgeColor: "msx-yellow",
|
||||
TagColor: "msx-yellow",
|
||||
},
|
||||
Items: list,
|
||||
}
|
||||
|
||||
if contentAction != "" {
|
||||
res.Template.Properties = gin.H{
|
||||
"button:content:icon": ICON_OPTIONS,
|
||||
"button:content:action": contentAction,
|
||||
}
|
||||
}
|
||||
|
||||
c.JSON(200, res)
|
||||
}
|
||||
|
||||
func isViewed(viewed []*sets.Viewed, id int) bool {
|
||||
for _, v := range viewed {
|
||||
if v.FileIndex == id {
|
||||
return true
|
||||
}
|
||||
}
|
||||
return false
|
||||
r.GET("/msx/russian.json", ass(rus, "application/json"))
|
||||
r.GET("/msx/tvx.js", ass(tvx, "text/javascript"))
|
||||
r.GET("/msx/torrents", ass(trn, "text/html"))
|
||||
r.GET("/msx/tizen", ass(tzn, "text/html"))
|
||||
r.GET("/msx/html5x", ass(h5x, "text/html"))
|
||||
}
|
||||
|
||||
@@ -1,763 +0,0 @@
|
||||
<!DOCTYPE html>
|
||||
<html>
|
||||
<head>
|
||||
<title>HTML5 Extended Video Plugin</title>
|
||||
<meta charset="UTF-8" />
|
||||
<meta name="author" content="Benjamin Zachey" />
|
||||
<meta name="contact" content="admin@benzac.de" />
|
||||
<meta name="copyright" content="Benjamin Zachey" />
|
||||
<style>
|
||||
body
|
||||
{
|
||||
margin: 0px;
|
||||
padding: 0px;
|
||||
background: black;
|
||||
font-family: sans-serif;
|
||||
color: white;
|
||||
}
|
||||
div,label,img,input,span,i,b,p,video,audio,object,h1,h2,h3,pre,canvas,iframe
|
||||
{
|
||||
position: absolute;
|
||||
margin: 0px;
|
||||
padding: 0px;
|
||||
border: 0px;
|
||||
}
|
||||
video,.video,.filler
|
||||
{
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
}
|
||||
.fullscreen
|
||||
{
|
||||
left: 0px;
|
||||
top: 0px;
|
||||
right: 0px;
|
||||
bottom: 0px;
|
||||
}
|
||||
.content-screen
|
||||
{
|
||||
left: 64px;
|
||||
right: 64px;
|
||||
top: 36px;
|
||||
bottom: 36px;
|
||||
}
|
||||
.plugin-object
|
||||
{
|
||||
visibility: hidden;
|
||||
width: 0px;
|
||||
height: 0px;
|
||||
}
|
||||
</style>
|
||||
<script type="text/javascript" src="tvx-plugin.min.js"></script>
|
||||
<script type="text/javascript">
|
||||
|
||||
/******************************************************************************/
|
||||
//HTML5 Extended Video Plugin v0.0.5
|
||||
//(c) 2021 Benjamin Zachey
|
||||
//related API: https://www.w3.org/TR/2011/WD-html5-20110113/video.html
|
||||
/******************************************************************************/
|
||||
function Html5XPlayer() {
|
||||
var player = null;
|
||||
var ready = false;
|
||||
var ended = false;
|
||||
|
||||
//--------------------------------------------------------------------------
|
||||
//Audio & Subtitle Tracks
|
||||
//--------------------------------------------------------------------------
|
||||
var PROPERTY_PREFIX = "html5x:";
|
||||
var SUBTITLE_KIND = "subtitles";
|
||||
var PROXY_URL = TVXTools.getHostUrl("services/proxy.php?url={URL}");
|
||||
var useProxy = false;
|
||||
var showRelatedContent = false;
|
||||
var hasRelatedContent = false;
|
||||
var defaultAudioTrackLanguage = null;
|
||||
var defaultSubtitleTrackIndex = -1;
|
||||
var audioTrackIndicator = null;
|
||||
var subtitleTrackIndicator = null;
|
||||
var setupCrossOrigin = function(info) {
|
||||
if (player != null) {
|
||||
if (TVXPropertyTools.getBool(info, PROPERTY_PREFIX + "cors", true)) {
|
||||
player.crossOrigin = "anonymous";
|
||||
} else {
|
||||
useProxy = true;
|
||||
}
|
||||
}
|
||||
};
|
||||
var setupRelatedContent = function(info) {
|
||||
showRelatedContent = TVXPropertyTools.getBool(info, PROPERTY_PREFIX + "content", false);
|
||||
hasRelatedContent = info != null && info.index >= 0;
|
||||
};
|
||||
var hasAudioTracks = function() {
|
||||
return player != null && player.audioTracks != null && player.audioTracks.length > 0;
|
||||
};
|
||||
var hasTextTracks = function() {
|
||||
return player != null && player.textTracks != null && player.textTracks.length > 0;
|
||||
};
|
||||
var foreachAudioTrack = function(callback) {
|
||||
if (hasAudioTracks() && typeof callback == "function") {
|
||||
var tracks = player.audioTracks;
|
||||
var length = player.audioTracks.length;
|
||||
for (var i = 0; i < length; i++) {
|
||||
if (callback(i, tracks[i]) === true) {
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
};
|
||||
var foreachSubtitleTrack = function(callback) {
|
||||
if (hasTextTracks() && typeof callback == "function") {
|
||||
var tracks = player.textTracks;
|
||||
var length = player.textTracks.length;
|
||||
for (var i = 0; i < length; i++) {
|
||||
var track = tracks[i];
|
||||
if (track.kind === SUBTITLE_KIND && callback(i, tracks[i]) === true) {
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
};
|
||||
var isAudioTrackSelected = function(track) {
|
||||
return track != null && track.enabled === true;
|
||||
};
|
||||
var isSubtitleTrackSelected = function(track) {
|
||||
return track != null && track.mode === "showing";
|
||||
};
|
||||
var createIndexTrack = function(index, track) {
|
||||
if (index >= 0 && track != null) {
|
||||
return {
|
||||
index: index,
|
||||
track: track
|
||||
};
|
||||
}
|
||||
return null;
|
||||
};
|
||||
var getAudioTrackLabel = function(indexTrack) {
|
||||
var index = indexTrack != null ? indexTrack.index : -1;
|
||||
var track = indexTrack != null ? indexTrack.track : null;
|
||||
if (index >= 0 && track != null) {
|
||||
return (TVXTools.isFullStr(track.label) ? track.label : "Audio Track " + (index + 1)) +
|
||||
(TVXTools.isFullStr(track.language) ? " (" + track.language.toUpperCase() + ")" : "");
|
||||
}
|
||||
return hasAudioTracks() ? "None" : "Original";
|
||||
};
|
||||
var getSubtitleTrackLabel = function(indexTrack) {
|
||||
var index = indexTrack != null ? indexTrack.index : -1;
|
||||
var track = indexTrack != null ? indexTrack.track : null;
|
||||
if (index >= 0 && track != null) {
|
||||
return (TVXTools.isFullStr(track.label) ? track.label : "Subtitles " + (index + 1)) +
|
||||
(TVXTools.isFullStr(track.language) ? " (" + track.language.toUpperCase() + ")" : "");
|
||||
}
|
||||
return "Off";
|
||||
};
|
||||
var storeAudioTrack = function(track) {
|
||||
if (track != null && TVXTools.isFullStr(track.language)) {
|
||||
TVXServices.storage.set(PROPERTY_PREFIX + "audiotrack", track.language);
|
||||
} else {
|
||||
TVXServices.storage.remove(PROPERTY_PREFIX + "audiotrack");
|
||||
}
|
||||
};
|
||||
var storeSubtitleTrack = function(track) {
|
||||
if (track != null && TVXTools.isFullStr(track.language)) {
|
||||
TVXServices.storage.set(PROPERTY_PREFIX + "subtitle", track.language);
|
||||
} else {
|
||||
TVXServices.storage.remove(PROPERTY_PREFIX + "subtitle");
|
||||
}
|
||||
};
|
||||
var setupAudioTrackIndicator = function(track) {
|
||||
if (track != null && TVXTools.isFullStr(track.language)) {
|
||||
audioTrackIndicator = "{ico:msx-white:audiotrack} " + track.language.toUpperCase();
|
||||
} else {
|
||||
audioTrackIndicator = null;
|
||||
}
|
||||
};
|
||||
var setupSubtitleTrackIndicator = function(track) {
|
||||
if (track != null && TVXTools.isFullStr(track.language)) {
|
||||
subtitleTrackIndicator = "{ico:msx-white:subtitles} " + track.language.toUpperCase();
|
||||
} else {
|
||||
subtitleTrackIndicator = null;
|
||||
}
|
||||
};
|
||||
var applyIndicators = function() {
|
||||
if (audioTrackIndicator != null && subtitleTrackIndicator != null) {
|
||||
TVXVideoPlugin.setupExtensionLabel(audioTrackIndicator + " " + subtitleTrackIndicator);
|
||||
} else if (audioTrackIndicator) {
|
||||
TVXVideoPlugin.setupExtensionLabel(audioTrackIndicator);
|
||||
} else if (subtitleTrackIndicator) {
|
||||
TVXVideoPlugin.setupExtensionLabel(subtitleTrackIndicator);
|
||||
} else {
|
||||
TVXVideoPlugin.setupExtensionLabel(null);
|
||||
}
|
||||
};
|
||||
var selectAudioTrack = function(trackIndex, store, apply) {
|
||||
var selectedTrack = null;
|
||||
foreachAudioTrack(function(index, track) {
|
||||
if (index == trackIndex) {
|
||||
selectedTrack = track;
|
||||
track.enabled = true;
|
||||
} else {
|
||||
track.enabled = false;
|
||||
}
|
||||
});
|
||||
setupAudioTrackIndicator(selectedTrack);
|
||||
if (store === true) {
|
||||
storeAudioTrack(selectedTrack);
|
||||
}
|
||||
if (apply === true) {
|
||||
applyIndicators();
|
||||
}
|
||||
};
|
||||
var selectSubtitleTrack = function(trackIndex, store, apply) {
|
||||
var selectedTrack = null;
|
||||
foreachSubtitleTrack(function(index, track) {
|
||||
if (index == trackIndex) {
|
||||
selectedTrack = track;
|
||||
track.mode = "showing";
|
||||
} else {
|
||||
track.mode = "disabled";
|
||||
}
|
||||
});
|
||||
setupSubtitleTrackIndicator(selectedTrack);
|
||||
if (store === true) {
|
||||
storeSubtitleTrack(selectedTrack);
|
||||
}
|
||||
if (apply === true) {
|
||||
applyIndicators();
|
||||
}
|
||||
};
|
||||
var getDefaultAudioTrackIndex = function() {
|
||||
var trackIndex = -1;
|
||||
var fallbackTrackIndex = -1;
|
||||
foreachAudioTrack(function(index, track) {
|
||||
if (fallbackTrackIndex == -1) {
|
||||
//Fallback to first audio track
|
||||
fallbackTrackIndex = index;
|
||||
}
|
||||
if (defaultAudioTrackLanguage != null && defaultAudioTrackLanguage === track.language) {
|
||||
trackIndex = index;
|
||||
return true;//break
|
||||
}
|
||||
});
|
||||
return trackIndex >= 0 ? trackIndex : fallbackTrackIndex;
|
||||
};
|
||||
var getSelectedAudioIndexTrack = function() {
|
||||
var indexTrack = null;
|
||||
foreachAudioTrack(function(index, track) {
|
||||
if (isAudioTrackSelected(track)) {
|
||||
indexTrack = createIndexTrack(index, track);
|
||||
return true;//break
|
||||
}
|
||||
});
|
||||
return indexTrack;
|
||||
};
|
||||
var getSelectedSubtitleIndexTrack = function() {
|
||||
var indexTrack = null;
|
||||
foreachSubtitleTrack(function(index, track) {
|
||||
if (isSubtitleTrackSelected(track)) {
|
||||
indexTrack = createIndexTrack(index, track);
|
||||
return true;//break
|
||||
}
|
||||
});
|
||||
return indexTrack;
|
||||
};
|
||||
var hasSelectedSubtitleTrack = function() {
|
||||
return getSelectedSubtitleIndexTrack() != null;
|
||||
};
|
||||
var setupAudioTracks = function(info) {
|
||||
defaultAudioTrackLanguage = TVXPropertyTools.getFullStr(info, PROPERTY_PREFIX + "audiotrack", TVXServices.storage.get(PROPERTY_PREFIX + "audiotrack"));
|
||||
if (defaultAudioTrackLanguage == "default") {
|
||||
defaultAudioTrackLanguage = null;//Select first audio track
|
||||
}
|
||||
};
|
||||
var processSubtitleTrackCues = function(cues) {
|
||||
if (cues != null && cues.length > 0) {
|
||||
var length = cues.length;
|
||||
//Note: On some platforms (e.g. chrome browsers and android devices), this will have no effect
|
||||
for (var i = 0; i < length; i++) {
|
||||
var cue = cues[i];
|
||||
cue.snapToLines = true;//Use integer number of lines (default is true)
|
||||
cue.line = -3;//Move the cue up to get some space at the bottom (default is -1)
|
||||
}
|
||||
}
|
||||
};
|
||||
var applySubtitleTrackCues = function() {
|
||||
foreachSubtitleTrack(function(index, track) {
|
||||
track.oncuechange = function() {
|
||||
processSubtitleTrackCues(this.activeCues);
|
||||
};
|
||||
});
|
||||
};
|
||||
var secureSubtitleSource = function(src) {
|
||||
return TVXTools.isSecureContext() ? TVXTools.secureUrl(src) : src;
|
||||
};
|
||||
var createSubtitleSource = function(src) {
|
||||
return useProxy && TVXTools.isHttpUrl(src) ? TVXTools.strReplace(PROXY_URL, "{URL}", TVXTools.strToUrlStr(src)) : src;
|
||||
};
|
||||
var createSubtitleTrack = function(subtitle, src) {
|
||||
if (TVXTools.isFullStr(subtitle) && TVXTools.isFullStr(src)) {
|
||||
var separator = subtitle.indexOf(":");
|
||||
if (separator > 0) {
|
||||
return {
|
||||
label: subtitle.substr(separator + 1),
|
||||
language: subtitle.substr(0, separator),
|
||||
src: secureSubtitleSource(createSubtitleSource(src))
|
||||
};
|
||||
}
|
||||
}
|
||||
return null;
|
||||
};
|
||||
var completeSubtitleTracks = function(completeState, tracks, callback) {
|
||||
if (completeState != null) {
|
||||
completeState.size--;
|
||||
if (completeState.size == 0 && typeof callback == "function") {
|
||||
callback(tracks);
|
||||
}
|
||||
}
|
||||
};
|
||||
var resolveSubtitleTrack = function(completeState, track, tracks, callback) {
|
||||
if (track != null && !TVXTools.isHttpUrl(track.src)) {
|
||||
TVXVideoPlugin.requestInteractionResponse(track.src, function(data) {
|
||||
if (TVXTools.isFullStr(data.error)) {
|
||||
TVXVideoPlugin.error(data.error);
|
||||
} else if (data.response != null && TVXTools.isHttpUrl(data.response.url)) {
|
||||
track.src = createSubtitleSource(data.response.url);
|
||||
} else {
|
||||
TVXVideoPlugin.warn("Track URL is missing or invalid");
|
||||
}
|
||||
completeSubtitleTracks(completeState, tracks, callback);
|
||||
});
|
||||
} else {
|
||||
completeSubtitleTracks(completeState, tracks, callback);
|
||||
}
|
||||
};
|
||||
var createSubtitleTracks = function(info, callback) {
|
||||
var tracks = [];
|
||||
var prefix = PROPERTY_PREFIX + "subtitle:";
|
||||
var prefixLength = prefix.length;
|
||||
var order = TVXPropertyTools.getFullStr(info, prefix + "order", null);
|
||||
TVXPropertyTools.foreach(info, function(key, value) {
|
||||
if (TVXTools.isFullStr(key) && key.indexOf(prefix) == 0) {
|
||||
var track = createSubtitleTrack(key.substr(prefixLength), value);
|
||||
if (track != null) {
|
||||
tracks.push(track);
|
||||
}
|
||||
}
|
||||
});
|
||||
if (tracks.length > 1 && order != null) {
|
||||
tracks.sort(function(track1, track2) {
|
||||
if (order == "label") {
|
||||
return track1.label.localeCompare(track2.label);
|
||||
} else if (order == "language") {
|
||||
return track1.language.localeCompare(track2.language);
|
||||
}
|
||||
return 0;
|
||||
});
|
||||
}
|
||||
if (tracks.length > 0) {
|
||||
var completeState = {
|
||||
size: tracks.length
|
||||
};
|
||||
for (var i = 0; i < tracks.length; i++) {
|
||||
resolveSubtitleTrack(completeState, tracks[i], tracks, callback);
|
||||
}
|
||||
} else if (typeof callback == "function") {
|
||||
callback(tracks);
|
||||
}
|
||||
};
|
||||
var setupSubtitleTracks = function(info, callback) {
|
||||
if (player != null) {
|
||||
createSubtitleTracks(info, function(tracks) {
|
||||
defaultSubtitleTrackIndex = -1;
|
||||
var html = "";
|
||||
var defaultLanguage = TVXPropertyTools.getFullStr(info, PROPERTY_PREFIX + "subtitle", TVXServices.storage.get(PROPERTY_PREFIX + "subtitle"));
|
||||
if (defaultLanguage == "default") {
|
||||
defaultLanguage = null;//Switch off subtitles
|
||||
}
|
||||
for (var i = 0; i < tracks.length; i++) {
|
||||
var track = tracks[i];
|
||||
var selected = false;
|
||||
if (defaultLanguage != null && defaultLanguage == track.language) {
|
||||
selected = true;
|
||||
defaultSubtitleTrackIndex = i;
|
||||
}
|
||||
html += "<track" +
|
||||
" kind='" + TVXTools.htmlAttrEscape(SUBTITLE_KIND) + "'" +
|
||||
" label='" + TVXTools.htmlAttrEscape(track.label) + "'" +
|
||||
" srclang='" + TVXTools.htmlAttrEscape(track.language) + "'" +
|
||||
" src='" + TVXTools.htmlAttrEscape(track.src) + "'" +
|
||||
(selected ? " default" : "") + "/>";
|
||||
}
|
||||
player.innerHTML = html;
|
||||
applySubtitleTrackCues();
|
||||
if (typeof callback == "function") {
|
||||
callback();
|
||||
}
|
||||
});
|
||||
} else {
|
||||
if (typeof callback == "function") {
|
||||
callback();
|
||||
}
|
||||
}
|
||||
};
|
||||
var setupVideoInfo = function(data, callback) {
|
||||
var info = data != null && data.video != null ? data.video.info : null;
|
||||
setupCrossOrigin(info);
|
||||
setupRelatedContent(info);
|
||||
setupAudioTracks(info);
|
||||
setupSubtitleTracks(info, callback);
|
||||
};
|
||||
//--------------------------------------------------------------------------
|
||||
|
||||
//--------------------------------------------------------------------------
|
||||
//Player Options
|
||||
//--------------------------------------------------------------------------
|
||||
var currentOptionsFocus = null;
|
||||
var createTrackItem = function(type, index, label, selected) {
|
||||
return {
|
||||
focus: selected,
|
||||
label: label,
|
||||
extensionIcon: selected ? "check" : "blank",
|
||||
action: selected ? "back" : "player:commit:message:" + type + ":" + index
|
||||
};
|
||||
};
|
||||
var createAudioTracksPanel = function() {
|
||||
var items = [];
|
||||
if (hasAudioTracks()) {
|
||||
foreachAudioTrack(function(index, track) {
|
||||
items.push(createTrackItem("audiotrack", index, getAudioTrackLabel(createIndexTrack(index, track)), isAudioTrackSelected(track)));
|
||||
});
|
||||
} else {
|
||||
items.push(createTrackItem("audiotrack", -1, getAudioTrackLabel(null), true));
|
||||
}
|
||||
return {
|
||||
cache: false,
|
||||
reuse: false,
|
||||
headline: "Audio",
|
||||
template: {
|
||||
enumerate: false,
|
||||
type: "control",
|
||||
layout: "0,0,8,1"
|
||||
},
|
||||
items: items
|
||||
};
|
||||
};
|
||||
var createSubtitleTracksPanel = function() {
|
||||
var items = [createTrackItem("subtitle", -1, getSubtitleTrackLabel(null), !hasSelectedSubtitleTrack())];
|
||||
foreachSubtitleTrack(function(index, track) {
|
||||
items.push(createTrackItem("subtitle", index, getSubtitleTrackLabel(createIndexTrack(index, track)), isSubtitleTrackSelected(track)));
|
||||
});
|
||||
return {
|
||||
cache: false,
|
||||
reuse: false,
|
||||
headline: "Subtitles",
|
||||
template: {
|
||||
enumerate: false,
|
||||
type: "control",
|
||||
layout: "0,0,8,1"
|
||||
},
|
||||
items: items
|
||||
};
|
||||
};
|
||||
var createOptionsPanel = function() {
|
||||
var selectedAudioIndexTrack = getSelectedAudioIndexTrack();
|
||||
var selectedSubtitleIndexTrack = getSelectedSubtitleIndexTrack();
|
||||
return {
|
||||
cache: false,
|
||||
reuse: false,
|
||||
headline: "Options",
|
||||
template: {
|
||||
enumerate: false,
|
||||
type: "control",
|
||||
layout: "0,0,8,1"
|
||||
},
|
||||
items: [{
|
||||
focus: currentOptionsFocus == "audiotrack",
|
||||
id: "audiotrack",
|
||||
icon: "audiotrack",
|
||||
label: "Audio",
|
||||
extensionLabel: getAudioTrackLabel(selectedAudioIndexTrack),
|
||||
action: "[player:commit:message:focus:audiotrack|panel:request:player:audiotrack]"
|
||||
}, {
|
||||
focus: currentOptionsFocus == "subtitle",
|
||||
id: "subtitle",
|
||||
icon: "subtitles",
|
||||
label: "Subtitles",
|
||||
extensionLabel: getSubtitleTrackLabel(selectedSubtitleIndexTrack),
|
||||
action: "[player:commit:message:focus:subtitle|panel:request:player:subtitle]"
|
||||
}, {
|
||||
display: showRelatedContent,
|
||||
enable: hasRelatedContent,
|
||||
focus: currentOptionsFocus == "content",
|
||||
id: "content",
|
||||
icon: "pageview",
|
||||
label: "Show related content",
|
||||
action: "[player:commit:message:focus:content|player:content]"
|
||||
}]
|
||||
};
|
||||
};
|
||||
var handleMessage = function(message) {
|
||||
if (TVXTools.isFullStr(message)) {
|
||||
if (message.indexOf("focus:") == 0) {
|
||||
currentOptionsFocus = message.substr(6);
|
||||
} else if (message.indexOf("audiotrack:") == 0) {
|
||||
selectAudioTrack(TVXTools.strToNum(message.substr(11), -1), true, true);
|
||||
TVXVideoPlugin.executeAction("back");
|
||||
} else if (message.indexOf("subtitle:") == 0) {
|
||||
selectSubtitleTrack(TVXTools.strToNum(message.substr(9), -1), true, true);
|
||||
TVXVideoPlugin.executeAction("back");
|
||||
} else {
|
||||
TVXVideoPlugin.warn("Unknown plugin message: '" + message + "'");
|
||||
}
|
||||
}
|
||||
};
|
||||
var createResponseData = function(dataId) {
|
||||
if (TVXTools.isFullStr(dataId)) {
|
||||
if (dataId == "options") {
|
||||
return createOptionsPanel();
|
||||
} else if (dataId == "audiotrack") {
|
||||
return createAudioTracksPanel();
|
||||
} else if (dataId == "subtitle") {
|
||||
return createSubtitleTracksPanel();
|
||||
}
|
||||
}
|
||||
return null;
|
||||
};
|
||||
//--------------------------------------------------------------------------
|
||||
|
||||
//--------------------------------------------------------------------------
|
||||
//Event Callbacks
|
||||
//--------------------------------------------------------------------------
|
||||
var onWaiting = function() {
|
||||
TVXVideoPlugin.startLoading();
|
||||
};
|
||||
var onPlaying = function() {
|
||||
TVXVideoPlugin.stopLoading();
|
||||
TVXVideoPlugin.setState(TVXVideoState.PLAYING);
|
||||
};
|
||||
var onPaused = function() {
|
||||
TVXVideoPlugin.stopLoading();
|
||||
TVXVideoPlugin.setState(TVXVideoState.PAUSED);
|
||||
};
|
||||
var onContinue = function() {
|
||||
TVXVideoPlugin.stopLoading();
|
||||
};
|
||||
var onReady = function() {
|
||||
if (player != null && !ready) {
|
||||
ready = true;
|
||||
TVXVideoPlugin.debug("Video ready");
|
||||
selectAudioTrack(getDefaultAudioTrackIndex(), false, false);
|
||||
selectSubtitleTrack(defaultSubtitleTrackIndex, false, true);
|
||||
TVXVideoPlugin.applyVolume();
|
||||
TVXVideoPlugin.stopLoading();
|
||||
TVXVideoPlugin.startPlayback(true);//Accelerated start
|
||||
}
|
||||
};
|
||||
var getErrorText = function(code) {
|
||||
if (code == 1) {
|
||||
//The fetching of the associated resource was aborted by the user's request.
|
||||
return "Playback Aborted";
|
||||
} else if (code == 2) {
|
||||
//Some kind of network error occurred which prevented the media from being successfully fetched, despite having previously been available.
|
||||
return "Network Error";
|
||||
} else if (code == 3) {
|
||||
//Despite having previously been determined to be usable, an error occurred while trying to decode the media resource, resulting in an error.
|
||||
return "Media Decode Error";
|
||||
} else if (code == 4) {
|
||||
//The associated resource or media provider object (such as a MediaStream) has been found to be unsuitable.
|
||||
return "Source Not Supported";
|
||||
}
|
||||
return "Unknown Error";
|
||||
};
|
||||
var getErrorMessage = function(code, message) {
|
||||
var msg = code + ": " + getErrorText(code);
|
||||
if (TVXTools.isFullStr(message)) {
|
||||
msg += ": " + message;
|
||||
}
|
||||
return msg;
|
||||
};
|
||||
var onError = function() {
|
||||
if (player != null && player.error != null) {
|
||||
TVXVideoPlugin.error("Video error: " + getErrorMessage(player.error.code, player.error.message));
|
||||
TVXVideoPlugin.stopLoading();
|
||||
}
|
||||
};
|
||||
var onEnded = function() {
|
||||
if (!ended) {
|
||||
ended = true;
|
||||
TVXVideoPlugin.debug("Video ended");
|
||||
TVXVideoPlugin.stopPlayback();
|
||||
}
|
||||
};
|
||||
//--------------------------------------------------------------------------
|
||||
|
||||
//--------------------------------------------------------------------------
|
||||
//Helper Functions
|
||||
//--------------------------------------------------------------------------
|
||||
var setupVideoWithId = function(id) {
|
||||
if (TVXTools.isFullStr(id)) {
|
||||
TVXVideoPlugin.requestInteractionResponse(id, function(data) {
|
||||
if (TVXTools.isFullStr(data.error)) {
|
||||
TVXVideoPlugin.error(data.error);
|
||||
TVXVideoPlugin.stopLoading();
|
||||
} else if (!setupVideoWithUrl(data.response != null ? data.response.url : null)) {
|
||||
TVXVideoPlugin.warn("Video URL is missing");
|
||||
TVXVideoPlugin.stopLoading();
|
||||
}
|
||||
});
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
};
|
||||
var setupVideoWithUrl = function(url) {
|
||||
//Note: URL does not need to be an HTTP/HTTPS URL (it can be any URL)
|
||||
if (TVXTools.isFullStr(url)) {
|
||||
TVXVideoPlugin.requestData("video:info", function(data) {
|
||||
setupVideoInfo(data, function() {
|
||||
player.src = url;
|
||||
player.load();
|
||||
});
|
||||
});
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
};
|
||||
//--------------------------------------------------------------------------
|
||||
|
||||
//--------------------------------------------------------------------------
|
||||
//Player Interface
|
||||
//--------------------------------------------------------------------------
|
||||
this.init = function() {
|
||||
player = document.getElementById("player");
|
||||
player.addEventListener("canplay", onReady);
|
||||
player.addEventListener("error", onError);
|
||||
player.addEventListener("ended", onEnded);
|
||||
player.addEventListener("waiting", onWaiting);
|
||||
player.addEventListener("play", onContinue);
|
||||
player.addEventListener("playing", onPlaying);
|
||||
player.addEventListener("pause", onPaused);
|
||||
player.addEventListener("seeked", onContinue);
|
||||
player.addEventListener("abort", onContinue);
|
||||
};
|
||||
this.ready = function() {
|
||||
if (player != null) {
|
||||
TVXVideoPlugin.debug("Video plugin ready");
|
||||
TVXVideoPlugin.startLoading();
|
||||
if (!setupVideoWithId(TVXServices.urlParams.get("id")) &&
|
||||
!setupVideoWithUrl(TVXServices.urlParams.get("url"))) {
|
||||
TVXVideoPlugin.warn("Video ID or URL is missing");
|
||||
TVXVideoPlugin.stopLoading();
|
||||
}
|
||||
} else {
|
||||
TVXVideoPlugin.error("Video player is not initialized");
|
||||
}
|
||||
};
|
||||
this.dispose = function() {
|
||||
if (player != null) {
|
||||
player.removeEventListener("canplay", onReady);
|
||||
player.removeEventListener("error", onError);
|
||||
player.removeEventListener("ended", onEnded);
|
||||
player.removeEventListener("waiting", onWaiting);
|
||||
player.removeEventListener("play", onContinue);
|
||||
player.removeEventListener("playing", onPlaying);
|
||||
player.removeEventListener("pause", onPaused);
|
||||
player.removeEventListener("seeked", onContinue);
|
||||
player.removeEventListener("abort", onContinue);
|
||||
player = null;
|
||||
}
|
||||
};
|
||||
this.play = function() {
|
||||
if (player != null) {
|
||||
player.play();
|
||||
}
|
||||
};
|
||||
this.pause = function() {
|
||||
if (player != null) {
|
||||
player.pause();
|
||||
}
|
||||
};
|
||||
this.stop = function() {
|
||||
if (player != null) {
|
||||
//Note: Html5 player does not support stop -> use pause
|
||||
player.pause();
|
||||
}
|
||||
};
|
||||
this.getDuration = function() {
|
||||
if (player != null) {
|
||||
return player.duration;
|
||||
}
|
||||
return 0;
|
||||
};
|
||||
this.getPosition = function() {
|
||||
if (player != null) {
|
||||
return player.currentTime;
|
||||
}
|
||||
return 0;
|
||||
};
|
||||
this.setPosition = function(position) {
|
||||
if (player != null) {
|
||||
player.currentTime = position;
|
||||
}
|
||||
};
|
||||
this.setVolume = function(volume) {
|
||||
if (player != null) {
|
||||
player.volume = volume / 100;
|
||||
}
|
||||
};
|
||||
this.getVolume = function() {
|
||||
if (player != null) {
|
||||
return player.volume * 100;
|
||||
}
|
||||
return 100;
|
||||
};
|
||||
this.setMuted = function(muted) {
|
||||
if (player != null) {
|
||||
player.muted = muted;
|
||||
}
|
||||
};
|
||||
this.isMuted = function() {
|
||||
if (player != null) {
|
||||
return player.muted;
|
||||
}
|
||||
return false;
|
||||
};
|
||||
this.getSpeed = function() {
|
||||
if (player != null) {
|
||||
return player.playbackRate;
|
||||
}
|
||||
return 1;
|
||||
};
|
||||
this.setSpeed = function(speed) {
|
||||
if (player != null) {
|
||||
player.playbackRate = speed;
|
||||
}
|
||||
};
|
||||
this.getUpdateData = function() {
|
||||
return {
|
||||
position: this.getPosition(),
|
||||
duration: this.getDuration(),
|
||||
speed: this.getSpeed()
|
||||
};
|
||||
};
|
||||
this.handleData = function(data) {
|
||||
handleMessage(data.message);
|
||||
};
|
||||
this.handleRequest = function(dataId, data, callback) {
|
||||
callback(createResponseData(dataId));
|
||||
};
|
||||
//--------------------------------------------------------------------------
|
||||
}
|
||||
/******************************************************************************/
|
||||
|
||||
/******************************************************************************/
|
||||
//Setup
|
||||
/******************************************************************************/
|
||||
window.onload = function() {
|
||||
TVXVideoPlugin.setupPlayer(new Html5XPlayer());
|
||||
TVXVideoPlugin.init();
|
||||
};
|
||||
/******************************************************************************/
|
||||
</script>
|
||||
</head>
|
||||
<body>
|
||||
<video id="player" playsinline></video>
|
||||
</body>
|
||||
</html>
|
||||
@@ -1,380 +0,0 @@
|
||||
<!DOCTYPE html>
|
||||
<html>
|
||||
<head>
|
||||
<title>Tizen Interaction Plugin</title>
|
||||
<meta charset="UTF-8" />
|
||||
<meta name="author" content="Benjamin Zachey" />
|
||||
<meta name="contact" content="admin@benzac.de" />
|
||||
<meta name="copyright" content="Benjamin Zachey" />
|
||||
<script type="text/javascript" src="tvx-plugin.min.js"></script>
|
||||
<script type="text/javascript">
|
||||
/******************************************************************************/
|
||||
//Tizen Interaction Plugin v0.0.1
|
||||
//(c) 2021 Benjamin Zachey
|
||||
//Action syntax example:
|
||||
//- "content:request:interaction:init@http://msx.benzac.de/interaction/tizen.html"
|
||||
/******************************************************************************/
|
||||
|
||||
/******************************************************************************/
|
||||
//TizenPlayer
|
||||
/******************************************************************************/
|
||||
function TizenPlayer() {
|
||||
var pushToArray = function(array, items) {
|
||||
if (array != null && items != null) {
|
||||
if (Array.isArray(items)) {
|
||||
for (var i = 0; i < items.length; i++) {
|
||||
array.push(items[i]);
|
||||
}
|
||||
} else {
|
||||
array.push(items);
|
||||
}
|
||||
}
|
||||
};
|
||||
var getValueLabel = function(value) {
|
||||
if (typeof value == "string") {
|
||||
return TVXTools.strFullCheck(value, "-");
|
||||
}
|
||||
return value != null ? TVXTools.strValue(value) : "-";
|
||||
};
|
||||
var getPropertyLabel = function(value, unit) {
|
||||
if (TVXTools.isFullStr(value) && value.indexOf("|") >= 0) {
|
||||
return value.split("|")[0];
|
||||
}
|
||||
if (value != null) {
|
||||
if (unit != null) {
|
||||
return value + " " + unit;
|
||||
}
|
||||
return TVXTools.strValue(value);
|
||||
}
|
||||
return "Unknown";
|
||||
};
|
||||
var getPropertyValue = function(value) {
|
||||
if (TVXTools.isFullStr(value) && value.indexOf("|") >= 0) {
|
||||
value = value.split("|")[1];
|
||||
}
|
||||
if (TVXTools.isFullStr(value) && value.indexOf("num:") == 0) {
|
||||
return TVXTools.strToNum(value.substr(4));
|
||||
}
|
||||
return value;
|
||||
};
|
||||
var getTrackLabel = function(track) {
|
||||
if (track != null) {
|
||||
var prefix = "Track " + track.index;
|
||||
var suffix = track.info != null ? track.info.language : null;//Audio track
|
||||
if (suffix == null) {
|
||||
suffix = track.info != null ? track.info.track_lang : null;//Text track
|
||||
}
|
||||
return TVXTools.isFullStr(suffix) ? prefix + " (" + suffix + ")" : prefix;
|
||||
}
|
||||
return "None";
|
||||
};
|
||||
var createPropertyControls = function(y, propertyIcon, propertyLabel, propertyKey, propertyValue, propertyUnit, availableValues, nextButton) {
|
||||
var panelItems = [];
|
||||
var selectedPropertyLabel = getPropertyLabel(propertyValue, propertyUnit);
|
||||
var firstPropertyValue = null;
|
||||
var nextPropertyValue = null;
|
||||
var selectNext = false;
|
||||
if (availableValues != null) {
|
||||
for (var i = 0; i < availableValues.length; i++) {
|
||||
var value = getPropertyValue(availableValues[i]);
|
||||
var label = getPropertyLabel(availableValues[i], propertyUnit);
|
||||
var selected = value === propertyValue;
|
||||
if (firstPropertyValue == null) {
|
||||
firstPropertyValue = value;
|
||||
}
|
||||
if (selected) {
|
||||
selectNext = true;
|
||||
selectedPropertyLabel = label;
|
||||
} else if (selectNext) {
|
||||
selectNext = false;
|
||||
nextPropertyValue = value;
|
||||
}
|
||||
panelItems.push({
|
||||
focus: selected,
|
||||
extensionIcon: selected ? "check" : "blank",
|
||||
label: label,
|
||||
action: selected ? "back" : "[invalidate:content|back|player:commit]",
|
||||
data: {
|
||||
key: propertyKey,
|
||||
value: value,
|
||||
action: "reload:content"
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
||||
if (nextPropertyValue == null) {
|
||||
nextPropertyValue = firstPropertyValue;
|
||||
}
|
||||
return [{
|
||||
enable: panelItems.length > 0,
|
||||
type: "control",
|
||||
layout: "0," + y + "," + (nextButton ? "7,1" : "8,1"),
|
||||
icon: propertyIcon,
|
||||
label: propertyLabel,
|
||||
extensionLabel: selectedPropertyLabel,
|
||||
action: "panel:data",
|
||||
data: {
|
||||
headline: propertyLabel,
|
||||
compress: panelItems.length > 6,
|
||||
template: {
|
||||
type: "control",
|
||||
enumerate: false,
|
||||
layout: panelItems.length > 8 ? "0,0,5,1" : panelItems.length > 6 ? "0,0,10,1" : "0,0,8,1"
|
||||
},
|
||||
items: panelItems
|
||||
}
|
||||
}, {
|
||||
display: nextButton,
|
||||
enable: nextPropertyValue != null,
|
||||
type: "button",
|
||||
icon: "navigate-next",
|
||||
iconSize: "small",
|
||||
layout: "7," + y + ",1,1",
|
||||
action: "[invalidate:content|player:commit]",
|
||||
data: {
|
||||
key: propertyKey,
|
||||
value: nextPropertyValue,
|
||||
action: "reload:content"
|
||||
}
|
||||
}];
|
||||
};
|
||||
var createTrackControl = function(y, propertyIcon, propertyLabel, propertyKey, currentTrack, availableTracks) {
|
||||
var panelItems = [];
|
||||
if (availableTracks != null) {
|
||||
for (var i = 0; i < availableTracks.length; i++) {
|
||||
var track = availableTracks[i];
|
||||
var selected = track.index === (currentTrack != null ? currentTrack.index : -1);
|
||||
panelItems.push({
|
||||
focus: selected,
|
||||
extensionIcon: selected ? "check" : "blank",
|
||||
label: getTrackLabel(track),
|
||||
action: selected ? "back" : "[invalidate:content|back|player:commit]",
|
||||
data: {
|
||||
key: propertyKey,
|
||||
value: track.index,
|
||||
action: "reload:content"
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
||||
return {
|
||||
enable: panelItems.length > 0,
|
||||
type: "control",
|
||||
layout: "0," + y + ",8,1",
|
||||
icon: propertyIcon,
|
||||
label: propertyLabel,
|
||||
extensionLabel: getTrackLabel(currentTrack),
|
||||
action: "panel:data",
|
||||
data: {
|
||||
headline: propertyLabel,
|
||||
compress: panelItems.length > 6,
|
||||
template: {
|
||||
type: "control",
|
||||
enumerate: false,
|
||||
layout: panelItems.length > 8 ? "0,0,5,1" : panelItems.length > 6 ? "0,0,10,1" : "0,0,8,1"
|
||||
},
|
||||
items: panelItems
|
||||
}
|
||||
};
|
||||
};
|
||||
var createControlItems = function(infoData) {
|
||||
var items = [];
|
||||
pushToArray(items, createPropertyControls(0, "featured-video", "Display Area", "tizen:display:area",
|
||||
infoData && infoData.display != null ? infoData.display.area : null, null, [
|
||||
"21x9|0,0.119,1,0.762",
|
||||
"16x9 (Default)|0,0,1,1",
|
||||
"4x3|0.125,0,0.75,1"
|
||||
], true));
|
||||
pushToArray(items, createPropertyControls(1, "aspect-ratio", "Display Mode", "tizen:display:mode",
|
||||
infoData != null && infoData.display != null ? infoData.display.mode : null, null, [
|
||||
"Fit Screen (Default)|PLAYER_DISPLAY_MODE_LETTER_BOX",
|
||||
"Fill Screen|PLAYER_DISPLAY_MODE_FULL_SCREEN",
|
||||
"Auto Aspect Ratio|PLAYER_DISPLAY_MODE_AUTO_ASPECT_RATIO"
|
||||
], true));
|
||||
pushToArray(items, createPropertyControls(2, "av-timer", "Buffer Timeout", "tizen:buffer:timeout",
|
||||
infoData != null && infoData.buffer != null ? infoData.buffer.timeout : null, "sec", [
|
||||
0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 15, "20 sec (Default)|num:20", 25, 30, 40
|
||||
], false));
|
||||
pushToArray(items, createPropertyControls(3, "timelapse", "Buffer Size (Init)", "tizen:buffer:size:init",
|
||||
infoData != null && infoData.buffer != null && infoData.buffer.size != null ? infoData.buffer.size.init : null, "sec", null, false));
|
||||
pushToArray(items, createPropertyControls(4, "timelapse", "Buffer Size (Resume)", "tizen:buffer:size:resume",
|
||||
infoData != null && infoData.buffer != null && infoData.buffer.size != null ? infoData.buffer.size.resume : null, "sec", null, false));
|
||||
pushToArray(items, createTrackControl(5, "audiotrack", "Audio Track", "tizen:track:audio",
|
||||
infoData != null && infoData.stream != null ? infoData.stream.audio : null,
|
||||
infoData != null && infoData.tracks != null ? infoData.tracks.audio : null));
|
||||
pushToArray(items, createTrackControl(6, "subtitles", "Text Track", "tizen:track:text",
|
||||
infoData != null && infoData.stream != null ? infoData.stream.text : null,
|
||||
infoData != null && infoData.tracks != null ? infoData.tracks.text : null));
|
||||
return items;
|
||||
};
|
||||
var createInfoItems = function(infoData) {
|
||||
var infoKeys = "-";
|
||||
var infoValues = "-";
|
||||
if (infoData != null) {
|
||||
infoKeys = "Version:{br}State:{br}{br}";
|
||||
infoValues = getValueLabel(infoData.version) + "{br}" +
|
||||
getValueLabel(infoData.state) + "{br}{br}";
|
||||
if (infoData.stream != null) {
|
||||
if (infoData.stream.video != null && infoData.stream.video.info != null) {
|
||||
for (var key in infoData.stream.video.info) {
|
||||
infoKeys += "Video [" + key + "]:{br}";
|
||||
infoValues += getValueLabel(infoData.stream.video.info[key]) + "{br}";
|
||||
}
|
||||
infoKeys += "{br}";
|
||||
infoValues += "{br}";
|
||||
}
|
||||
if (infoData.stream.audio != null && infoData.stream.audio.info != null) {
|
||||
for (var key in infoData.stream.audio.info) {
|
||||
infoKeys += "Audio [" + key + "]:{br}";
|
||||
infoValues += getValueLabel(infoData.stream.audio.info[key]) + "{br}";
|
||||
}
|
||||
infoKeys += "{br}";
|
||||
infoValues += "{br}";
|
||||
}
|
||||
if (infoData.stream.text != null && infoData.stream.text.info != null) {
|
||||
for (var key in infoData.stream.text.info) {
|
||||
infoKeys += "Text [" + key + "]:{br}";
|
||||
infoValues += getValueLabel(infoData.stream.text.info[key]) + "{br}";
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
return [{
|
||||
type: "space",
|
||||
layout: "8,0,3,8",
|
||||
offset: "0.25,0,0,0",
|
||||
truncation: "text",
|
||||
text: infoKeys
|
||||
}, {
|
||||
type: "space",
|
||||
layout: "11,0,5,8",
|
||||
offset: "0.25,0,-0.25,0",
|
||||
truncation: "text",
|
||||
text: "{col:msx-white}" + infoValues,
|
||||
live: {
|
||||
type: "airtime",
|
||||
duration: 2000,
|
||||
over: {
|
||||
action: "reload:content"
|
||||
}
|
||||
}
|
||||
}];
|
||||
};
|
||||
var createContentItems = function(infoData) {
|
||||
var items = [];
|
||||
pushToArray(items, createControlItems(infoData));
|
||||
pushToArray(items, createInfoItems(infoData));
|
||||
return items;
|
||||
};
|
||||
var createContent = function(infoData) {
|
||||
return {
|
||||
cache: false,
|
||||
compress: true,
|
||||
type: "pages",
|
||||
headline: "Tizen Player",
|
||||
extension: "{ico:msx-white:timer} " + TVXDateTools.getTimestamp(),
|
||||
pages: [{
|
||||
items: createContentItems(infoData)
|
||||
}]
|
||||
};
|
||||
};
|
||||
var createWarningContent = function(playerInfo) {
|
||||
return {
|
||||
type: "pages",
|
||||
headline: "Tizen Player",
|
||||
pages: [{
|
||||
items: [{
|
||||
type: "default",
|
||||
layout: "0,0,12,6",
|
||||
color: "msx-glass",
|
||||
headline: "{ico:msx-yellow:warning} Player Not Available",
|
||||
text: "Tizen player is required for this plugin. Current player is: {txt:msx-white:" + playerInfo + "}."
|
||||
}]
|
||||
}]
|
||||
};
|
||||
};
|
||||
var createDummyData = function() {
|
||||
return {
|
||||
version: "1.0",
|
||||
state: "PLAYING",
|
||||
display: {
|
||||
area: "0,0,1,1",
|
||||
mode: "PLAYER_DISPLAY_MODE_LETTER_BOX"
|
||||
},
|
||||
buffer: {
|
||||
timeout: 20,
|
||||
size: {
|
||||
init: 10,
|
||||
resume: 10
|
||||
}
|
||||
},
|
||||
stream: {
|
||||
video: {
|
||||
index: 0,
|
||||
info: {
|
||||
fourCC: "h264",
|
||||
Width: 1280,
|
||||
Height: 720,
|
||||
Bit_rate: 128000
|
||||
}
|
||||
}
|
||||
}
|
||||
};
|
||||
};
|
||||
this.handleRequest = function(playerInfo, dataId, callback) {
|
||||
if (dataId == "init") {
|
||||
if (TVXTools.isFullStr(playerInfo) && (playerInfo == "tizen" || playerInfo.indexOf("tizen/") == 0)) {
|
||||
TVXInteractionPlugin.requestPlayerResponse("tizen:info", function(data) {
|
||||
callback(createContent(data.response != null && data.response.tizen != null ? data.response.tizen.info : null));
|
||||
});
|
||||
} else {
|
||||
callback(createWarningContent(playerInfo));
|
||||
}
|
||||
return true;
|
||||
} else if (dataId == "dummy") {
|
||||
callback(createContent(createDummyData()));
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
};
|
||||
}
|
||||
/******************************************************************************/
|
||||
|
||||
/******************************************************************************/
|
||||
//TizenHandler
|
||||
/******************************************************************************/
|
||||
function TizenHandler() {
|
||||
var playerInfo = null;
|
||||
var readyService = new TVXBusyService();
|
||||
var player = new TizenPlayer();
|
||||
|
||||
this.ready = function() {
|
||||
readyService.start();
|
||||
TVXInteractionPlugin.requestData("info:base", function(data) {
|
||||
playerInfo = TVXTools.strFullCheck(data.info != null ? data.info.player : null, "unknown");
|
||||
readyService.stop();
|
||||
});
|
||||
};
|
||||
this.handleRequest = function(dataId, data, callback) {
|
||||
readyService.onReady(function() {
|
||||
if (!player.handleRequest(playerInfo, dataId, callback)) {
|
||||
callback();
|
||||
}
|
||||
});
|
||||
};
|
||||
}
|
||||
/******************************************************************************/
|
||||
|
||||
/******************************************************************************/
|
||||
//Setup
|
||||
/******************************************************************************/
|
||||
window.onload = function() {
|
||||
TVXInteractionPlugin.setupHandler(new TizenHandler());
|
||||
TVXInteractionPlugin.init();
|
||||
};
|
||||
/******************************************************************************/
|
||||
</script>
|
||||
</head>
|
||||
<body>
|
||||
</body>
|
||||
</html>
|
||||
88
server/web/msx/pages/tvx-plugin.min.js
vendored
88
server/web/msx/pages/tvx-plugin.min.js
vendored
@@ -1,88 +0,0 @@
|
||||
/*
|
||||
* TVX Plugin v0.0.54
|
||||
* (c) 2021 Benjamin Zachey
|
||||
*/
|
||||
(function(e,m){var k={NAME:"TVX Framework",SHORTCUT:"TVX",VERSION:"0.1.26",SUFFIX:null,DUMMY_DATE:null,TIME_OFFSET:0,TIME_ZONE_OFFSET:0,ANIMATION_DURATION:300,ANIMATION_EASE:"easeOutQuad",AFK_DELAY:8000,SCREEN_WIDTH:1280,SCREEN_HEIGHT:720,SCREEN_FACTOR:1,ZOOM_FACTOR:1,PLATFORM:null,ANIMATE:0,TRANSFORM:0,INPUT:0,REMOTE:0,LAYOUT:null,SCALE:null,ZOOM:null,CENTER:0,BACKGROUND:0,LEAVE:0,EXIT:0,BACK:0,VOLUME:0,BUSY:0,SPEED:0,PLAYBACK:0,FULLSCREEN:0,SUSPEND:0,SECURE:0,APP:null};var l={COMMON:{IMAGE:{DEFAULT:"img/default.png"},ICON:{DEFAULT:"blank"},TEXT:{DEFAULT:""},COLOR:{WHITE:"rgb(255,255,255)",WHITE_SOFT:"rgba(255,255,255,0.5)",BLACK:"rgb(0,0,0)",BLACK_SOFT:"rgba(0,0,0,0.5)",GRAY:"rgb(51,51,51)",GRAY_SOFT:"rgba(51,51,51,0.5)",RED:"rgb(201,48,44)",GREEN:"rgb(68,157,68)",YELLOW:"rgb(236,151,31)",BLUE:"rgb(49,176,213)",GLASS:"rgba(255,255,255,0.1)"},CSS:{CLASS_SELECTED:"selected",CLASS_TRIGGER:"trigger",CLASS_FOCUSED:"focused",CLASS_DISABLED:"disabled",CLASS_INVALIDATED:"invalidated",CLASS_HOVER:"hover",CLASS_ROOT:"tvx-root",CLASS_TOP_LAYER:"tvx-top-layer",CLASS_BOTTOM_LAYER:"tvx-bottom-layer",CLASS_FULLSCREEN:"tvx-fullscreen",CLASS_VIDEO:"tvx-video",CLASS_VIDEO_ON:"tvx-video-on",CLASS_CENTER_OFF:"tvx-center-off",CLASS_BACKGROUND_OFF:"tvx-background-off",CLASS_CLICK_THROUGH:"tvx-click-through",CLASS_CURSOR_OFF:"tvx-cursor-off",CLASS_FILLER:"tvx-filler",CLASS_FILLER_WIDTH_TOP:"tvx-filler-width-top",CLASS_FILLER_WIDTH_BOTTOM:"tvx-filler-width-bottom",CLASS_FILLER_WIDTH_CENTER:"tvx-filler-width-center",CLASS_FILLER_HEIGHT_LEFT:"tvx-filler-height-left",CLASS_FILLER_HEIGHT_RIGHT:"tvx-filler-height-right",CLASS_FILLER_HEIGHT_CENTER:"tvx-filler-height-center",CLASS_FILLER_FIT:"tvx-filler-fit",CLASS_FILLER_COVER:"tvx-filler-cover",CLASS_FILLER_SMART:"tvx-filler-smart",CLASS_ICON:"tvx-icon tvx-icon-{ICON}",CLASS_ICON_INLINE:"tvx-icon-inline tvx-icon-{ICON}",CLASS_TEXT:"tvx-text",CLASS_TEXT_INLINE:"tvx-text-inline"},HTML:{BREAK:"<br/>",SPACE:" ",TAB:" ",CANVAS:"<canvas class='{CLASS}' width='{WIDTH}' height='{HEIGHT}'></canvas>",IFRAME:"<iframe class='{CLASS}' frameBorder='0' scrolling='no' allow='autoplay *;encrypted-media *' src='{SRC}'></iframe>",ICON:"<i class='{CLASS}'></i>",ICON_STYLED:"<i class='{CLASS}' style='{STYLE}'></i>",TEXT:"<span class='{CLASS}'>{TEXT}</span>",TEXT_STYLED:"<span class='{CLASS}' style='{STYLE}'>{TEXT}</span>",TEXT_START:"<span class='{CLASS}'>",TEXT_START_STYLED:"<span class='{CLASS}' style='{STYLE}'>",TEXT_END:"</span>"}},LOGGER:{CSS:{CLASS_DEBUG:"tvx-debug",CLASS_INFO:"tvx-info",CLASS_WARN:"tvx-warn",CLASS_ERROR:"tvx-error"},HTML:{LINE:"<span class='{LEVEL}'>{MESSAGE}</span>"}},RENDERER:{CSS:{CLASS_TRANSFORM:"tvx-transform",CLASS_TRANSFORM_ZERO:"tvx-transform-zero",CLASS_TRANSFORM_3D:"tvx-transform-3d",CLASS_TRANSFORM_3D_ZERO:"tvx-transform-3d-zero"},STATE:{SHOW:{visible:true},HIDE:{visible:false},FADE_IN_FROM:{opacity:0},FADE_IN_TO:{opacity:1,visible:true},FADE_OUT_FROM:{opacity:1},FADE_OUT_TO:{opacity:0,visible:false}}},REMOTE:{CSS:{CLASS_BUTTON:"tvx-button",CLASS_SUBCONTROL_LEFT:"tvx-subcontrol-left",CLASS_SUBCONTROL_RIGHT:"tvx-subcontrol-right"}},APP:null};
|
||||
var a=new function(){var Q=/\\/g;var ad=/"/g;var S=/'/g;var ax=/\n/g;var av=/\r/g;var O=/\r\n/g;var at=/\t/g;var X=/\s/g;var aa=/-/g;var ab=/^[A-Za-z0-9._-]+$/;var al=/[^,:{}\[\]0-9.\-+Eaeflnr-u \n\r\t]/;var ar=/"(\\.|[^"\\])*"/g;var au=/^\s+|\s+$/g;var ae=/\s{0,}>\s{0,}/g;var ag=/\s{0,}\/>/g;var af=/\s{0,}<\s{0,}/g;var ai=ax;var ah=av;var ak=/\s{2,}/g;var K=/&/g;var W=ad;var P=S;var ac=/</g;var U=/>/g;var ao=/"/g;var an=/'/g;var am=/</g;var aq=/>/g;var ap=/&/g;var L=/\+/g;var N=/\//g;var M=/=/g;var R=/[^A-Za-z0-9\+\/\=]/g;var T=aa;var aj=/_/g;var ay=/,/g;var Y=/\./g;var V="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=";var Z=e.location.protocol==="https:";var aw=function(az,aB){if(az&&aB){var aA=e.location.pathname;aA=aA.substring(0,aA.lastIndexOf("/"));return e.location.protocol+"//"+e.location.host+aA}else{if(az){return e.location.protocol+"//"+e.location.host}}return e.location.protocol+"//"};this.createVersion=function(aB){if(this.isFullStr(aB)){var aD=aB.split(".");
|
||||
if(aD.length==3){var aA=this.strToNum(aD[0],-1);var az=this.strToNum(aD[1],-1);var aC=this.strToNum(aD[2],-1);if(aA>=0&&az>=0&&aC>=0){return{major:aA,minor:az,patch:aC}}}}return null};this.checkVersion=function(aC,aB){var aA=this.createVersion(aB);if(aA!=null){var az=this.createVersion(aC);if(az!=null){if(az.major==aA.major){if(az.minor==aA.minor){return az.patch>=aA.patch}return az.minor>aA.minor}return az.major>aA.major}return false}return true};this.createKey=function(aD,aB){if(aD==null){aD=4}if(aB==null){aB=10}var aA="";for(var aC=0;aC<aD;aC++){var az=0;if(aB==0){az=Math.round(Math.random()*9)}else{if(aB==1){az=10+Math.round(Math.random()*51)}else{if(aB==2){az=10+Math.round(Math.random()*25)}else{if(aB==3){az=36+Math.round(Math.random()*25)}else{az=Math.round(Math.random()*61)}}}}if(az>=0&&az<=9){aA+=""+az}if(az>=10&&az<=35){aA+=String.fromCharCode(az+55)}if(az>=36&&az<=61){aA+=String.fromCharCode(az+61)}}return aA};this.isFullStr=function(az){return az!=null&&typeof az=="string"&&az.length>0
|
||||
};this.isBool=function(az){if(az!=null&&typeof az=="boolean"){return true}return this.isFullStr(az)};this.isNum=function(az){if(az!=null&&typeof az=="number"){return true}return this.isFullStr(az)&&isFinite(az)};this.isArray=function(az){if(az!=null){return Array.isArray(az)}return false};this.isEmpty=function(aA){if(aA!=null){if(typeof aA=="string"){return aA.length==0}var az;for(az in aA){return false}}return true};this.isValid=function(aA,az){if(aA!=null){if(az===true){if(typeof aA=="string"){return aA.length>0}}return true}return false};this.isId=function(az){return this.isFullStr(az)&&ab.test(az)};this.isJson=function(az){return this.isFullStr(az)&&!al.test(az.replace(ar,""))};this.isHttpUrl=function(az){return this.isFullStr(az)&&(az.indexOf("http://")==0||az.indexOf("https://")==0)};this.strValue=function(az){if(az!=null){if(typeof az=="string"){return az}else{return""+az}}return null};this.strFullCheck=function(aA,az){return this.isFullStr(aA)?aA:az};this.strTrim=function(az){return this.isFullStr(az)?az.replace(au,""):""
|
||||
};this.strClear=function(az){return this.isFullStr(az)?az.replace(X,""):""};this.strTruncate=function(az,aA){return this.isFullStr(az)&&aA>0&&az.length>aA?az.substr(0,aA)+"...":az};this.strShuffle=function(az){return this.isFullStr(az)?az.split("").sort(function(){return 0.5-Math.random()}).join(""):""};this.strReplace=function(aA,aB,az){if(this.isFullStr(aA)&&this.isFullStr(aB)){return aA.replace(aB,function(){return az!=null?az:""})}return aA};this.strReplaceMap=function(aA,aB){if(this.isFullStr(aA)&&aB!=null){for(var az in aB){aA=this.strReplace(aA,az,aB[az])}}return aA};this.strToBool=function(aA,az){if(aA!=null&&typeof aA=="boolean"){return aA}return this.isFullStr(aA)?aA=="true":az};this.strToNum=function(aA,az){if(aA!=null&&typeof aA=="number"){return aA}return this.isFullStr(aA)&&isFinite(aA)?aA*1:az};this.strToAction=function(az){return this.isFullStr(az)?az.toUpperCase().replace(aa,"_"):""};this.strToJsonStr=function(az){return this.isFullStr(az)?az.replace(ad,'\\"'):""};this.strToUrlStr=function(az){return this.isFullStr(az)?encodeURIComponent(az):""
|
||||
};this.strContainsToken=function(aB,aC,az,aD){if(this.isFullStr(aB)&&this.isFullStr(aC)){var aA=aB.indexOf(aC);if(az==null){az=0}if(aD==null){aD=aB.length}return aA>=az&&aA<aD}return false};this.strCountToken=function(aC,aD,aA,aE){var az=0;if(this.isFullStr(aC)&&this.isFullStr(aD)){var aB=0;if(aA!=null&&aA>=0){aB=aA}while(aB>=0&&aB<aC.length){aB=aC.indexOf(aD,aB);if(aB>=0){aB+=aD.length;if(aE==null||aB<aE){az++}}}}return az};this.htmlTrim=function(az){return this.isFullStr(az)?this.strTrim(az.replace(ae,">").replace(ag,"/>").replace(af,"<").replace(ai," ").replace(ah," ").replace(ak," ")):""};this.htmlEscape=function(az){return this.isFullStr(az)?az.replace(K,"&").replace(W,""").replace(P,"'").replace(ac,"<").replace(U,">"):""};this.htmlUnescape=function(az){return this.isFullStr(az)?az.replace(ao,'"').replace(an,"'").replace(am,"<").replace(aq,">").replace(ap,"&"):""};this.htmlAttrEscape=function(az){return this.isFullStr(az)?az.replace(W,""").replace(P,"'"):""
|
||||
};this.htmlAttrUnescape=function(az){return this.isFullStr(az)?az.replace(ao,'"').replace(an,"'"):""};this.htmlTextEscape=function(az){return this.isFullStr(az)?this.htmlEscape(az).replace(ax,l.COMMON.HTML.BREAK).replace(at,l.COMMON.HTML.TAB):""};this.base64Encode=function(aH){var aC="";if(this.isFullStr(aH)){var aI,aD,aF;var aB,aG,aA,aE;var az=0;aH=this.utf8Encode(aH);while(az<aH.length){aI=aH.charCodeAt(az++);aD=aH.charCodeAt(az++);aF=aH.charCodeAt(az++);aB=aI>>2;aG=((aI&3)<<4)|(aD>>4);aA=((aD&15)<<2)|(aF>>6);aE=aF&63;if(isNaN(aD)){aA=aE=64}else{if(isNaN(aF)){aE=64}}aC+=V.charAt(aB)+V.charAt(aG)+V.charAt(aA)+V.charAt(aE)}}return aC};this.base64EncodeUrl=function(az){return this.isFullStr(az)?this.base64Encode(az).replace(L,"-").replace(N,"_").replace(M,","):""};this.base64EncodeId=function(az){return this.isFullStr(az)?this.base64Encode(az).replace(L,"-").replace(N,"_").replace(M,"."):""};this.base64Decode=function(aH){var aC="";if(this.isFullStr(aH)){var aI,aD,aF;var aB,aG,aA,aE;var az=0;
|
||||
aH=aH.replace(R,"");while(az<aH.length){aB=V.indexOf(aH.charAt(az++));aG=V.indexOf(aH.charAt(az++));aA=V.indexOf(aH.charAt(az++));aE=V.indexOf(aH.charAt(az++));aI=(aB<<2)|(aG>>4);aD=((aG&15)<<4)|(aA>>2);aF=((aA&3)<<6)|aE;aC+=String.fromCharCode(aI);if(aA!=64){aC+=String.fromCharCode(aD)}if(aE!=64){aC+=String.fromCharCode(aF)}}}return this.utf8Decode(aC)};this.base64DecodeUrl=function(az){return this.isFullStr(az)?this.base64Decode(az.replace(T,"+").replace(aj,"/").replace(ay,"=")):""};this.base64DecodeId=function(az){return this.isFullStr(az)?this.base64Decode(az.replace(T,"+").replace(aj,"/").replace(Y,"=")):""};this.utf8Encode=function(aC){var aA="";if(this.isFullStr(aC)){aC=aC.replace(O,"\n");for(var az=0;az<aC.length;az++){var aB=aC.charCodeAt(az);if(aB<128){aA+=String.fromCharCode(aB)}else{if((aB>127)&&(aB<2048)){aA+=String.fromCharCode((aB>>6)|192);aA+=String.fromCharCode((aB&63)|128)}else{aA+=String.fromCharCode((aB>>12)|224);aA+=String.fromCharCode(((aB>>6)&63)|128);aA+=String.fromCharCode((aB&63)|128)
|
||||
}}}}return aA};this.utf8Decode=function(aD){var aA="";if(this.isFullStr(aD)){var aE=0;var aB,aC,aF,az;aB=aC=aF=az=0;while(aE<aD.length){aB=aD.charCodeAt(aE);if(aB<128){aA+=String.fromCharCode(aB);aE++}else{if((aB>191)&&(aB<224)){aF=aD.charCodeAt(aE+1);aA+=String.fromCharCode(((aB&31)<<6)|(aF&63));aE+=2}else{aF=aD.charCodeAt(aE+1);az=aD.charCodeAt(aE+2);aA+=String.fromCharCode(((aB&15)<<12)|((aF&63)<<6)|(az&63));aE+=3}}}}return aA};this.createHash=function(aB,aA){var az=0;if(this.isFullStr(aB)){if(aA===true){for(var aC=aB.length;aC>=0;aC--){az=((az<<5)-az)+aB.charCodeAt(aC);az&=az}}else{for(var aC=0;aC<aB.length;aC++){az=((az<<5)-az)+aB.charCodeAt(aC);az&=az}}}return az};this.serialize=function(az,aD){if(az===undefined){return null}if(az===null){if(aD!=null){return'"'+aD+'":null'}else{return"null"}}var aE=null;var aB=typeof az;if(Array.isArray(az)){aE="[";var aC=0;for(var aG=0;aG<az.length;aG++){var aA=this.serialize(az[aG]);if(aA!=null){if(aC>0){aE+=","}aE+=aA;aC++}}aE+="]"}else{if(aB=="object"){aE="{";
|
||||
var aC=0;for(var aF in az){var aA=this.serialize(az[aF],aF);if(aA!=null){if(aC>0){aE+=","}aE+=aA;aC++}}aE+="}"}else{if(aB=="string"){aE='"'+az.replace(Q,"\\\\").replace(ad,'\\"').replace(ax,"\\n")+'"'}else{if(aB=="number"||aB=="boolean"){aE=""+az}}}}if(aE!=null){if(aD!=null){return'"'+aD+'":'+aE}else{return aE}}return null};this.deserialize=function(az){try{if(e.JSON!=null&&typeof JSON.parse=="function"){return this.isFullStr(az)?JSON.parse(az):null}else{return this.isJson(az)?new Function("return "+az)():null}}catch(aA){return null}};this.isSecureContext=function(){return Z};this.secureUrl=function(az){return this.isFullStr(az)?az.replace("http://","https://"):az};this.getPrefixUrl=function(az){return aw(false,false)+this.strFullCheck(az,"")};this.getHostUrl=function(az){return aw(true,false)+"/"+this.strFullCheck(az,"")};this.getPathUrl=function(az){return aw(true,true)+"/"+this.strFullCheck(az,"")};this.getAbsoluteUrl=function(az){if(this.isFullStr(az)&&!this.isHttpUrl(az)){if(az.indexOf("/")==0){return aw(true,false)+az
|
||||
}else{return aw(true,true)+"/"+az}}return az};this.getRootPath=function(az,aD){if(this.isFullStr(az)){var aC=e.location.pathname;var aB=aC.indexOf(az);if(aB>0){var aA=aC.substr(0,aB);if(aD===true){if(aA.indexOf("/")==0){aA=aA.substr(1)}if(aA.lastIndexOf("/")==aA.length-1){aA=aA.substr(0,aA.length-1)}}else{if(aA.indexOf("/")!=0){aA="/"+aA}if(aA.lastIndexOf("/")!=aA.length-1){aA+="/"}}return aA}}return aD===true?"":"/"};this.exprEscape=function(aG,aF,aL,aM,aH,aK,aC){if(this.isFullStr(aG)&&typeof aM=="function"){if(this.isFullStr(aF)&&this.isFullStr(aL)&&typeof aH=="function"){if(aG.indexOf(aF)>=0&&aG.indexOf(aL)>=0){var az="";var aA=aF.length;var aE=aL.length;var aI=aG.length;var aJ=0;var aD=0;var aB=0;while(aD>=0){aD=aG.indexOf(aF,aJ);if(aD>=0){aB=aG.indexOf(aL,aD);if(aB>0){if(aJ<aD){az+=aM(aG.substring(aJ,aD),aC)}if(aD+aA<aB){az+=aH(aG.substring(aD+aA,aB),aC)}aJ=aB+aE}else{aJ=aD;break}}}if(aJ<aI){az+=aM(aG.substring(aJ,aI),aC)}if(typeof aK=="function"){az+=aK(aC)}return az}}return aM(aG,aC)
|
||||
}return""}};var g=new function(){var P="h:mm/ampm";var U="h:mm:ss/ampm";var K="mm/dd/yy";var N="MM d, yyyy";var V="D mm/dd";var L="D mm/dd/yyyy";var R="DD, MM d, yyyy";var M=", ";var ac=["Son","Mon","Tue","Wed","Thu","Fri","Sat"];var T=["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"];var ab=["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"];var W=["January","February","March","April","May","June","July","August","September","October","November","December"];var X=" AM";var ad=" PM";var Z=" day";var Y=" days";var S=" hr";var Q=" min";var O=" sec";var aa=function(af){var ah=af%10;var ag=af%100;if(ah==1&&ag!=11){return"st"}if(ah==2&&ag!=12){return"nd"}if(ah==3&&ag!=13){return"rd"}return"th"};var ae=function(ah,ai,af){if(ai.length==af){for(var ag=0;ag<af;ag++){ah[ag]=a.strTrim(ai[ag])}}};this.applyDictionary=function(aj){if(aj!=null){P=aj.getValueForKey("format:time",P);U=aj.getValueForKey("format:long_time",U);K=aj.getValueForKey("format:date",K);
|
||||
N=aj.getValueForKey("format:long_date",N);V=aj.getValueForKey("format:day",V);L=aj.getValueForKey("format:long_day",L);R=aj.getValueForKey("format:full_day",R);M=aj.getValueForKey("format:separator",M);X=aj.getValueForKey("unit:am",X);ad=aj.getValueForKey("unit:pm",ad);Z=aj.getValueForKey("unit:day",Z);Y=aj.getValueForKey("unit:days",Y);S=aj.getValueForKey("unit:hours",S);Q=aj.getValueForKey("unit:minutes",Q);O=aj.getValueForKey("unit:seconds",O);var ai=aj.getValueForKey("list:day_names","").split(",");var ag=aj.getValueForKey("list:day_long_names","").split(",");var af=aj.getValueForKey("list:month_names","").split(",");var ah=aj.getValueForKey("list:month_long_names","").split(",");ae(ac,ai,ac.length);ae(T,ag,T.length);ae(ab,af,ab.length);ae(W,ah,W.length)}};this.getTimestamp=function(){return new Date().getTime()};this.getNow=function(){var af=new Date();if(k.DUMMY_DATE!=null){af=new Date(k.DUMMY_DATE.getFullYear(),k.DUMMY_DATE.getMonth(),k.DUMMY_DATE.getDate(),af.getHours(),af.getMinutes(),af.getSeconds())
|
||||
}if(k.TIME_OFFSET!=null&&k.TIME_OFFSET!=0){if(k.TIME_ZONE_OFFSET!=null&&k.TIME_ZONE_OFFSET!=0){return new Date(af.getTime()+k.TIME_OFFSET+k.TIME_ZONE_OFFSET)}else{return new Date(af.getTime()+k.TIME_OFFSET)}}else{if(k.TIME_ZONE_OFFSET!=null&&k.TIME_ZONE_OFFSET!=0){return new Date(af.getTime()+k.TIME_ZONE_OFFSET)}}return af};this.getFormatSeparator=function(){return M};this.getFormattedDateStr=function(aw,au,af,aq,at){var ai=0;var aj=0;var ar=0;var ak=0;var am=0;if(aw==null){aw=new Date(af,aq,at)}if(typeof aw=="number"){aw=new Date(aw)}ai=aw.getDate();aj=aw.getDay();ar=aw.getMonth()+1;ak=aw.getMonth();am=aw.getYear()+1900;var ax=au.replace("ddd",ai+aa(ai)).replace("dd",(ai<10?"0":"")+ai).replace("mm",((ar<10)?"0":"")+ar).replace("yyyy",am).replace("d",ai).replace("m",ar).replace("yy",(""+am).substring(2,4));var ah=ax.indexOf("D");var ap=ax.indexOf("DD");var ao=ax.indexOf("M");var ag=ax.indexOf("MM");if(ap>=0&&ao<0){return ax.replace("DD",T[aj])}else{if(ah>=0&&ao<0){return ax.replace("D",ac[aj])
|
||||
}else{if(ag>=0&&ah<0){return ax.replace("MM",W[ak])}else{if(ao>=0&&ah<0){return ax.replace("M",ab[ak])}else{if(ah>=0&&ao>=0){var al=null;var av=null;var an=null;if(ap>=0){al=ax.substring(0,ap);av=T[aj];an=ax.substring(ap+2,ax.length)}else{if(ah>=0){al=ax.substring(0,ah);av=ac[aj];an=ax.substring(ah+1,ax.length)}}if(ah>ao){if(al.indexOf("MM")>=0){al=al.replace("MM",W[ak])}else{if(al.indexOf("M")>=0){al=al.replace("M",ab[ak])}}}else{if(an.indexOf("MM")>=0){an=an.replace("MM",W[ak])}else{if(an.indexOf("M")>=0){an=an.replace("M",ab[ak])}}}return al+av+an}}}}}return ax};this.getDayStr=function(ah,ag,af,ai){return this.getFormattedDateStr(ah,V,ag,af,ai)};this.getDayLongStr=function(ah,ag,af,ai){return this.getFormattedDateStr(ah,L,ag,af,ai)};this.getDayFullStr=function(ah,ag,af,ai){return this.getFormattedDateStr(ah,R,ag,af,ai)};this.getDateStr=function(ah,ag,af,ai){return this.getFormattedDateStr(ah,K,ag,af,ai)};this.getDateLongStr=function(ah,ag,af,ai){return this.getFormattedDateStr(ah,N,ag,af,ai)
|
||||
};this.getFormattedTimeStr=function(ah,an,ao,ai,aj){var am=0;var ak=0;var af=0;if(ah==null){am=ao!=null?ao*1:0;ak=ai!=null?ai*1:0;af=aj!=null?aj*1:0}else{if(typeof ah=="number"){ah=new Date(ah)}am=ah.getHours();ak=ah.getMinutes();af=ah.getSeconds()}var al=null;var ag=an.indexOf("/ampm");if(ag>0){an=an.substr(0,ag);al=X;if(am>12){al=ad;am-=12}}return an.replace("hh",(am<10?"0":"")+am).replace("mm",(ak<10?"0":"")+ak).replace("ss",(af<10?"0":"")+af).replace("h",am).replace("m",ak).replace("s",af)+(al!=null?al:"")};this.getTimeStr=function(ah,ai,af,ag){return this.getFormattedTimeStr(ah,P,ai,af,ag)};this.getTimeLongStr=function(ah,ai,af,ag){return this.getFormattedTimeStr(ah,U,ai,af,ag)};this.getRecordingStr=function(af){if(typeof af=="number"){af=new Date(af)}return this.getDayLongStr(af)+M+this.getTimeStr(af)};this.getFormattedDurationStr=function(ag,aj){var af=Math.floor(ag/3600000);var ai=Math.floor((ag%3600000)/60000);var ah=Math.floor((ag%60000)/1000);aj=a.exprEscape(aj,"[","]",function(ak){return ak
|
||||
},function(ak){if(ak.indexOf("h")==0||ak.indexOf("H")==0){return af>0?ak:""}else{if(ak.indexOf("m")==0||ak.indexOf("M")==0){return af>0||ai>0?ak:""}else{if(ak.indexOf("s")==0||ak.indexOf("S")==0){return af>0||ai>0||ah>0?ak:""}}}});return aj.replace("H","h").replace("M",(af>0?"mm":"m")).replace("S",(af>0||ai>0?"ss":"s")).replace("hh",(af<10?"0":"")+af).replace("mm",((ai<10)?"0":"")+ai).replace("ss",((ah<10)?"0":"")+ah).replace("h",af).replace("m",ai).replace("s",ah)};this.getDurationStr=function(ak,aw){if(aw==null){aw="dhms"}var av=aw.indexOf("D")!=-1;var an=aw.indexOf("H")!=-1;var ar=aw.indexOf("M")!=-1;var au=aw.indexOf("S")!=-1;aw=aw.toLowerCase();var aq=aw.indexOf("d")!=-1;var ai=aw.indexOf("h")!=-1;var af=aw.indexOf("m")!=-1;var ah=aw.indexOf("s")!=-1;if(aw.indexOf("~")==0){if(ak<60000){if(ah){aw="s"}}else{if(ak<3600000){if(af){aw="m"}else{if(ah){aw="s"}}}else{if(ak<86400000){if(ai){aw="h"}else{if(af){aw="m"}else{if(ah){aw="s"}}}}else{if(aq){aw="d"}else{if(ai){aw="h"}else{if(af){aw="m"
|
||||
}else{if(ah){aw="s"}}}}}}}}if(aw=="d"){var ao=Math.round(ak/86400000);return ao==1?ao+Z:ao+Y}if(aw=="h"){return Math.round(ak/3600000)+S}if(aw=="m"){return Math.round(ak/60000)+Q}if(aw=="s"){return Math.round(ak/1000)+O}var aj=ak;var at=ai||af||ah;var ao=aq?(at?Math.floor(aj/86400000):Math.ceil(aj/86400000)):0;if(aq){aj=ak%86400000}at=af||ah;var ap=ai?(at?Math.floor(aj/3600000):Math.ceil(aj/3600000)):0;if(ai){aj=ak%3600000}at=ah;var al=af?(at?Math.floor(aj/60000):Math.ceil(aj/60000)):0;if(af){aj=ak%60000}var ag=ah?Math.floor(aj/1000):0;var am="";if(aq&&(ao>0||av)){am+=ao+(ao==1?Z:Y)}if(ai&&(ap>0||an)){if(am.length>0){am+=" "}am+=ap+S}if(af&&(al>0||ar)){if(am.length>0){am+=" "}am+=al+Q}if(ah&&(ag>0||au)){if(am.length>0){am+=" "}am+=ag+O}if(ah&&am.length==0){return ag+O}if(af&&am.length==0){return al+Q}if(ai&&am.length==0){return ap+S}return am};this.getVideoStr=function(ah,ai){if(ai==null){ai=3}var ag=ai>2?Math.floor(ah/3600000):0;var aj=ai>1?Math.floor((ah%3600000)/60000):0;var af=ai>0?Math.floor(ah%60000/1000):0;
|
||||
if(ai>2){return(ag<10?"0":"")+ag+":"+(aj<10?"0":"")+aj+":"+(af<10?"0":"")+af}else{if(ai>1){return(aj<10?"0":"")+aj+":"+(af<10?"0":"")+af}else{if(ai>0){return(af<10?"0":"")+af}}}return""}};var H=new function(){this.toTimeStr=function(K){return g.getTimeStr(K)};this.toTimeLongStr=function(K){return g.getTimeLongStr(K)};this.toTimeDayStr=function(K){return g.getFormattedDateStr(K,"D")+g.getFormatSeparator()+g.getTimeStr(K)};this.toTimeDayLongStr=function(K){return g.getFormattedDateStr(K,"D")+g.getFormatSeparator()+g.getTimeLongStr(K)};this.toDayStr=function(K){return g.getDayStr(K)};this.toDayLongStr=function(K){return g.getDayLongStr(K)};this.toDayFullStr=function(K){return g.getDayFullStr(K)};this.toDateStr=function(K){return g.getDateStr(K)};this.toDateLongStr=function(K){return g.getDateLongStr(K)};this.toRecordingStr=function(K){return g.getRecordingStr(K)};this.toDayTimeStr=function(K){return g.getDayStr(K)+g.getFormatSeparator()+g.getTimeStr(K)};this.toDayTimeLongStr=function(K){return g.getDayLongStr(K)+g.getFormatSeparator()+g.getTimeStr(K)
|
||||
};this.toDayTimeFullStr=function(K){return g.getDayFullStr(K)+g.getFormatSeparator()+g.getTimeStr(K)};this.toDateTimeStr=function(K){return g.getDateStr(K)+g.getFormatSeparator()+g.getTimeStr(K)};this.toDateTimeLongStr=function(K){return g.getDateLongStr(K)+g.getFormatSeparator()+g.getTimeStr(K)}};var F=new function(){this.foreach=function(P,L){if(P!=null&&P.properties!=null&&typeof L=="function"){var N=P.properties;if(Array.isArray(N)){for(var O=0;O<N.length;O++){var M=N[O];if(M!=null&&M.key!=null&&M.value!=null){if(L(M.key,M.value)===true){break}}}}else{for(var K in N){var M=N[K];if(M!=null){if(L(K,M)===true){break}}}}}};this.getValue=function(P,L,K){if(P!=null&&P.properties!=null&&a.isFullStr(L)){var N=P.properties;if(Array.isArray(N)){for(var O=0;O<N.length;O++){var M=N[O];if(M!=null&&M.key==L&&M.value!=null){return M.value}}}else{if(N[L]!=null){return N[L]}}}return K!=null?K:null};this.get=function(M,L,K){return a.strValue(this.getValue(M,L,K))};this.getFullStr=function(M,L,K){return a.strFullCheck(this.getValue(M,L),K)
|
||||
};this.getNum=function(M,L,K){return a.strToNum(this.getValue(M,L),K)};this.getBool=function(M,L,K){return a.strToBool(this.getValue(M,L),K)};this.has=function(M,L,K){return a.isValid(this.getValue(M,L),K)};this.put=function(Q,M,L){if(Q!=null&&Q.properties!=null&&a.isFullStr(M)&&L!=null){var O=Q.properties;if(Array.isArray(O)){var K=false;for(var P=0;P<O.length;P++){var N=O[P];if(N!=null&&N.key==M){K=true;N.value=L;break}}if(!K){O.push({key:M,value:L})}}else{O[M]=L}}};this.remove=function(O,K){if(O!=null&&O.properties!=null&&a.isFullStr(K)){var M=O.properties;if(Array.isArray(M)){for(var N=0;N<M.length;N++){var L=M[N];if(L!=null&&L.key==K){L.value=null;break}}}else{M[K]=null}}};this.clear=function(K){if(K!=null&&K.properties!=null){K.properties={}}};this.count=function(L){var K=0;this.foreach(L,function(){K++});return K}};var z={STOPPED:1,PLAYING:2,PAUSED:3};var f={LEFT:1,RIGHT:2,UP:3,DOWN:4,EXECUTE:5,EXIT:6,BACK:7,MENU:10,GUIDE:11,OPTIONS:12,INFO:13,CLEAR:14,CHANNEL_LIST:15,SETTINGS:16,SEARCH:17,PLAY:30,PAUSE:31,STOP:32,NEXT_TRACK:33,PREVIOUS_TRACK:34,TOGGLE_PLAY_PAUSE:35,FORWARD:36,REWIND:37,RECORD:38,RESTART:39,MUTE:40,UNMUTE:41,TOGGLE_MUTE:42,CHANNEL_UP:70,CHANNEL_DOWN:71,VOLUME_UP:72,VOLUME_DOWN:73,RED:74,GREEN:75,YELLOW:76,BLUE:77,KEY_0:80,KEY_1:81,KEY_2:82,KEY_3:83,KEY_4:84,KEY_5:85,KEY_6:86,KEY_7:87,KEY_8:88,KEY_9:89,POWER:99,SYSTEM:100,CURSOR_ON:200,CURSOR_OFF:201,SCROLL_UP:300,SCROLL_DOWN:301,SWIPE_LEFT:400,SWIPE_RIGHT:401,SWIPE_UP:402,SWIPE_DOWN:403,SLEEP:500,WAKE_UP:501,DEBUG:999,UNKNOWN:-1,actionToStr:function(K){switch(K){case this.LEFT:return"Left";
|
||||
case this.RIGHT:return"Right";case this.UP:return"Up";case this.DOWN:return"Down";case this.EXECUTE:return"Execute";case this.EXIT:return"Exit";case this.BACK:return"Back";case this.MENU:return"Menu";case this.GUIDE:return"Guide";case this.OPTIONS:return"Options";case this.INFO:return"Info";case this.CLEAR:return"Clear";case this.CHANNEL_LIST:return"Channel-List";case this.SETTINGS:return"Settings";case this.SEARCH:return"Search";case this.PLAY:return"Play";case this.PAUSE:return"Pause";case this.STOP:return"Stop";case this.NEXT_TRACK:return"Next-Track";case this.PREVIOUS_TRACK:return"Previous-Track";case this.FORWARD:return"Forward";case this.REWIND:return"Rewind";case this.RECORD:return"Record";case this.RESTART:return"Restart";case this.TOGGLE_PLAY_PAUSE:return"Toggle-Play-Pause";case this.MUTE:return"Mute";case this.UNMUTE:return"Unmute";case this.TOGGLE_MUTE:return"Toggle-Mute";case this.CHANNEL_UP:return"Channel-Up";case this.CHANNEL_DOWN:return"Channel-Down";case this.VOLUME_UP:return"Volume-Up";
|
||||
case this.VOLUME_DOWN:return"Volume-Down";case this.RED:return"Red";case this.GREEN:return"Green";case this.YELLOW:return"Yellow";case this.BLUE:return"Blue";case this.KEY_0:return"Key-0";case this.KEY_1:return"Key-1";case this.KEY_2:return"Key-2";case this.KEY_3:return"Key-3";case this.KEY_4:return"Key-4";case this.KEY_5:return"Key-5";case this.KEY_6:return"Key-6";case this.KEY_7:return"Key-7";case this.KEY_8:return"Key-8";case this.KEY_9:return"Key-9";case this.POWER:return"Power";case this.SYSTEM:return"System";case this.CURSOR_ON:return"Cursor-On";case this.CURSOR_OFF:return"Cursor-Off";case this.SCROLL_UP:return"Scroll-Up";case this.SCROLL_DOWN:return"Scroll-Down";case this.SWIPE_LEFT:return"Swipe-Left";case this.SWIPE_RIGHT:return"Swipe-Right";case this.SWIPE_UP:return"Swipe-Up";case this.SWIPE_DOWN:return"Swipe-Down";case this.SLEEP:return"Sleep";case this.WAKE_UP:return"Wake-Up";case this.DEBUG:return"Debug"}return"Unknown"},strToAction:function(L){var K=this[a.strToAction(L)];return K!=null?K:this.UNKNOWN
|
||||
},isNavigationAction:function(K){return K==this.LEFT||K==this.RIGHT||K==this.UP||K==this.DOWN||K==this.SCROLL_UP||K==this.SCROLL_DOWN||K==this.SWIPE_LEFT||K==this.SWIPE_RIGHT||K==this.SWIPE_UP||K==this.SWIPE_DOWN},isBaseAction:function(K){return K==this.EXECUTE||K==this.BACK||this.isNavigationAction(K)},isVideoAction:function(K){return K==this.PLAY||K==this.PAUSE||K==this.STOP||K==this.TOGGLE_PLAY_PAUSE||K==this.FORWARD||K==this.REWIND||K==this.RESTART},isChannelAction:function(K){return K==this.CHANNEL_UP||K==this.CHANNEL_DOWN},isVolumeAction:function(K){return K==this.VOLUME_UP||K==this.VOLUME_DOWN||K==this.MUTE||K==this.UNMUTE||K==this.TOGGLE_MUTE},isNumberAction:function(K){return K==this.KEY_0||K==this.KEY_1||K==this.KEY_2||K==this.KEY_3||K==this.KEY_4||K==this.KEY_5||K==this.KEY_6||K==this.KEY_7||K==this.KEY_8||K==this.KEY_9},isColorAction:function(K){return K==this.RED||K==this.GREEN||K==this.YELLOW||K==this.BLUE},isSystemAction:function(K){return K==this.SYSTEM||K==this.CURSOR_ON||K==this.CURSOR_OFF||K==this.SLEEP||K==this.WAKE_UP
|
||||
}};function J(){var K="Thu, 01 Jan 1970 00:00:01 GMT";this.set=function(M,P,O){if(a.isFullStr(M)&&P!=null){var N=encodeURIComponent(P);if(O!=null){var L=O;if(typeof O=="number"){L=new Date();L.setTime(L.getTime()+O)}if(typeof L.toGMTString=="function"){L=L.toGMTString()}N+=";expires="+L+";"}m.cookie=encodeURIComponent(M)+"="+N}};this.get=function(L,Q){if(a.isFullStr(L)){var N=m.cookie.split(";");for(var P=0;P<N.length;P++){var M=N[P];var O=M.indexOf("=");if(O>0){if(L==decodeURIComponent(a.strTrim(M.substr(0,O)))){return decodeURIComponent(M.substr(O+1))}}}}return Q!=null?Q:null};this.getFullStr=function(L,M){return a.strFullCheck(this.get(L),M)};this.getNum=function(L,M){return a.strToNum(this.get(L),M)};this.getBool=function(L,M){return a.strToBool(this.get(L),M)};this.has=function(L,M){return a.isValid(this.get(L),M)};this.foreach=function(R){if(typeof R=="function"){var N=m.cookie.split(";");for(var P=0;P<N.length;P++){var M=N[P];var L=M.indexOf("=");if(L>0){var Q=decodeURIComponent(a.strTrim(M.substr(0,L)));
|
||||
var O=decodeURIComponent(M.substr(L+1));if(R(Q,O)===true){break}}}}};this.remove=function(L){if(a.isFullStr(L)){this.set(L,"",K)}};this.clear=function(){var L=this;this.foreach(function(M){L.set(M,"",K)})}}function d(){var M="exp:";var L=new J();var K=function(O,P){if(P!=null){P*=1;return P>=0&&P<O}return false};var N=function(){if(e.localStorage!=null){var Q=[];var R=g.getTimestamp();for(var P=0;P<localStorage.length;P++){var O=localStorage.key(P);if(O!=null&&O.indexOf(M)==0){if(K(R,localStorage.getItem(O))){Q.push(O.substr(M.length))}}}for(var P=0;P<Q.length;P++){localStorage.removeItem(Q[P]);localStorage.removeItem(M+Q[P])}}};this.set=function(O,R,Q){if(a.isFullStr(O)&&R!=null){if(e.localStorage!=null){var P=-1;if(Q!=null){if(typeof Q=="number"){P=new Date().getTime()+Q}else{if(typeof Q=="string"){P=new Date(Q).getTime()}else{if(typeof Q.getTime=="function"){P=Q.getTime()}}}}localStorage.setItem(O,R);if(P>=0){localStorage.setItem(M+O,P)}else{localStorage.removeItem(M+O)}}else{L.set(O,R,Q)
|
||||
}}};this.get=function(O,R){if(a.isFullStr(O)){if(e.localStorage!=null){var Q=false;var P=localStorage.getItem(M+O);if(P!=null){if(K(g.getTimestamp(),P)){Q=true;localStorage.removeItem(O);localStorage.removeItem(M+O)}}if(!Q){var S=localStorage.getItem(O);if(S!=null){return S}}}else{return L.get(O,R)}}return R!=null?R:null};this.getFullStr=function(O,P){return a.strFullCheck(this.get(O),P)};this.getNum=function(O,P){return a.strToNum(this.get(O),P)};this.getBool=function(O,P){return a.strToBool(this.get(O),P)};this.has=function(O,P){return a.isValid(this.get(O),P)};this.foreach=function(Q){if(typeof Q=="function"){if(e.localStorage!=null){N();for(var P=0;P<localStorage.length;P++){var O=localStorage.key(P);if(O!=null&&O.indexOf(M)!=0){if(Q(O,localStorage.getItem(O))===true){break}}}}else{L.foreach(Q)}}};this.remove=function(O){if(a.isFullStr(O)){if(e.localStorage!=null){localStorage.removeItem(O);localStorage.removeItem(M+O)}else{L.remove(O)}}};this.clear=function(){if(e.localStorage!=null){localStorage.clear()
|
||||
}else{L.clear()}}}function B(L){var K=null;this.set=function(M,N){if(a.isFullStr(M)&&N!=null){if(K==null){K={}}K[M]=N}};this.get=function(M,N){if(K!=null&&a.isFullStr(M)&&K[M]!=null){return K[M]}return N!=null?N:null};this.getFullStr=function(M,N){return a.strFullCheck(this.get(M),N)};this.getNum=function(M,N){return a.strToNum(this.get(M),N)};this.getBool=function(M,N){return a.strToBool(this.get(M),N)};this.has=function(M,N){return a.isValid(this.get(M),N)};this.foreach=function(N){if(typeof N=="function"){if(K!=null){for(var M in K){if(N(M,K[M])===true){break}}}}};this.remove=function(M){if(K!=null&&a.isFullStr(M)){delete K[M]}};this.clear=function(){K={}};this.create=function(Q){var P={};if(a.isFullStr(Q)){var T=Q.indexOf("?");if(T>=0){var O=Q.substr(T+1).split("&");for(var M=0;M<O.length;M++){var R=O[M];if(a.isFullStr(R)){var N=R.indexOf("=");if(N>0){var S=R.substr(0,N);var U=R.substr(N+1);P[decodeURIComponent(S)]=decodeURIComponent(U)}else{P[decodeURIComponent(R)]=""}}}}}return P};
|
||||
this.build=function(P,O){var Q=0;var M="";if(K!=null){for(var N in K){var R=a.strValue(K[N]);if(Q>0){M+=(O!=null?O:"&")}if(a.isFullStr(R)){M+=(P===false?N:encodeURIComponent(N))+"="+(P===false?R:encodeURIComponent(R))}else{M+=(P===false?N:encodeURIComponent(N))}Q++}}return M};if(L!=null){K=this.create(L)}else{K=this.create(m.URL)}}function C(K,L){this.getValue=function(M){if(a.isFullStr(M)){if(K!=null&&K[M]!=null){return K[M]}if(L!=null&&L[M]!=null){return L[M]}}return null};this.get=function(M){return a.strValue(this.getValue(M))};this.getFullStr=function(M){return a.strFullCheck(this.get(M),null)};this.getNum=function(M){return a.strToNum(this.getValue(M),0)};this.getBool=function(M){return a.strToBool(this.getValue(M),false)};this.has=function(M,N){return a.isValid(this.get(M),N)}}function h(){var K={};this.hasObserver=function(L){return a.isFullStr(L)&&K[L]!=null};this.hasObservers=function(){var L;for(L in K){return true}return false};this.addObserver=function(L,M){if(a.isFullStr(L)&&typeof M=="function"){K[L]=M
|
||||
}};this.removeObserver=function(L){if(a.isFullStr(L)){delete K[L]}};this.onEvent=function(L,M){if(a.isFullStr(L)){if(typeof M=="function"){this.addObserver(L,M)}else{this.removeObserver(L)}}};this.notifyObserver=function(L,M){if(a.isFullStr(L)&&K[L]!=null){K[L](M)}};this.notifyObservers=function(M){for(var L in K){K[L](M)}};this.clear=function(){K={}}}function I(){var K={};this.hasObserver=function(M,L){return a.isFullStr(M)&&a.isFullStr(L)&&K[M]!=null&&K[M][L]!=null};this.hasObservers=function(M){if(a.isFullStr(M)&&K[M]!=null){var L;for(L in K[M]){return true}}return false};this.addObserver=function(M,L,N){if(a.isFullStr(M)&&a.isFullStr(L)&&typeof N=="function"){if(K[M]==null){K[M]={}}K[M][L]=N}};this.removeObserver=function(M,L){if(a.isFullStr(M)&&a.isFullStr(L)&&K[M]!=null){delete K[M][L];if(!this.hasObservers(M)){delete K[M]}}};this.onEvent=function(M,L,N){if(a.isFullStr(M)&&a.isFullStr(L)){if(typeof N=="function"){this.addObserver(M,L,N)}else{this.removeObserver(M,L)}}};this.notifyObserver=function(M,L,N){if(a.isFullStr(M)&&a.isFullStr(L)&&K[M]!=null&&K[M][L]!=null){K[M][L](N)
|
||||
}};this.notifyObservers=function(M,N){if(a.isFullStr(M)&&K[M]!=null){for(var L in K[M]){K[M][L](N)}}};this.clear=function(L){if(a.isFullStr(L)){if(K[L]!=null){K[L]={}}}else{K={}}}}function x(){var L=null;var M=[];var K=null;var N=false;this.delegate=null;this.execute=function(){if(L!=null){clearTimeout(L);L=null}if(K!=null){if(typeof K.action=="function"){K.action()}else{if(this.delegate!=null&&typeof this.delegate.executeQueueAction=="function"){this.delegate.executeQueueAction(K.action)}}K=null;this.process()}};this.process=function(){if(K==null&&M.length>0){K=M.shift();if(K.action==="stop"&&K.delay==null){N=true;K=null}else{if(K.delay!=null&&K.delay>0){var O=this;L=setTimeout(function(){L=null;O.execute()},K.delay)}else{this.execute()}}}};this.reset=function(){M=[];K=null;N=false;if(L!=null){clearTimeout(L);L=null}};this.push=function(O,P){if(O!=null){if(O==="reset"&&P==null){this.reset()}else{if(O==="execute"&&P==null){this.execute()}else{if(O==="clear"&&P==null){M=[]}else{if(O==="continue"&&P==null){N=false
|
||||
}else{M.push({action:O,delay:P})}}}}if(!N){this.process()}}};this.isBusy=function(){return L!=null}}function c(K,O){var M=null;var N=[];var L=0;this.size=K!=null?K:0;this.delay=O!=null?O:0;this.work=function(){if(M==null&&this.delay>0){var P=this;M=setTimeout(function(){M=null;L=0;P.process()},this.delay)}};this.process=function(){if(M==null&&N.length>0){if(L<this.size||this.size<=0||this.delay<=0){L++;var P=N.shift();P();this.process()}else{this.work()}}};this.reset=function(){N=[];L=0;if(M!=null){clearTimeout(M);M=null}};this.execute=function(P){if(typeof P=="function"){N.push(P);this.process()}};this.isBusy=function(){return M!=null}}function o(N){var M=null;var L=null;var K=false;this.delay=N!=null?N:0;this.start=function(O){var P=this;K=false;this.stop();L=O;if(this.delay>0){M=setTimeout(function(){P.finish()},this.delay)}else{P.finish()}};this.restart=function(){this.start(L)};this.stop=function(){if(M!=null){clearTimeout(M);M=null}};this.finish=function(){this.stop();if(!K){K=true;
|
||||
if(typeof L=="function"){L()}}};this.isBusy=function(){return M!=null}}function E(){var M=300;var N=0;var K=0;var L=null;this.click=function(O){var P=g.getTimestamp();if(L===O&&N>0&&P-N<=M){K++}else{K=1}L=O;N=P;return K}}function j(){var K="application/json";var P="application/xml";var M="text/plain";var S="text/html";var R="application/x-www-form-urlencoded";var N=function(V){var U=null;try{U=new XMLHttpRequest()}catch(T){if(V!=null&&typeof V.error=="function"){V.error("Create XML HTTP request failed: "+T)}}return U};var Q=function(T){if(T!=null&&typeof T.destroy=="function"){T.destroy()}};var O=function(X,Y,V){var T=X.responseText;var W=true;if(T!=null){if(V==K){try{if(e.JSON!=null&&typeof JSON.parse=="function"){if(a.isFullStr(T)){T=JSON.parse(T)}else{W=false;if(Y!=null&&typeof Y.error=="function"){Y.error("Validate JSON failed")}}}else{if(a.isJson(T)){T=new Function("return "+T)()}else{W=false;if(Y!=null&&typeof Y.error=="function"){Y.error("Validate JSON failed")}}}}catch(U){W=false;
|
||||
if(Y!=null&&typeof Y.error=="function"){Y.error("Create JSON failed: "+U)}}}else{if(V==P){T=X.responseXML}}}if(W&&Y!=null&&typeof Y.success=="function"){Y.success(T)}};var L=function(Z,W,Y,ag,T){if(e.TVXAjaxService!=null&&typeof TVXAjaxService.executeRequest=="function"&&TVXAjaxService.executeRequest(Z,W,Y,ag,T)===true){return}var ac=N(ag);if(ac!=null){var ad=K;var X=false;var ae=false;var U=true;var af=null;if(T!=null){X=T.isForm===true;ae=T.withCredentials===true;U=T.accurateHeaders!==false;af=T.headers;if(T.dataType!=null){if(T.dataType=="json"){ad=K}else{if(T.dataType=="xml"){ad=P}else{if(T.dataType=="text"){ad=M}else{if(T.dataType=="html"){ad=S}else{ad=null}}}}}}try{if(ae){ac.withCredentials=true}ac.open(Z,W,true)}catch(ab){Q(ac);ac=null;if(ag!=null&&typeof ag.error=="function"){ag.error("Open connection failed: "+ab)}}if(ac!=null){ac.onreadystatechange=function(){if(ac!=null){if(ac.readyState==4){if((ac.status>=200&&ac.status<300)||(ac.status==0&&a.isFullStr(ac.responseText))){O(ac,ag,ad)
|
||||
}else{if(ag!=null&&typeof ag.error=="function"){var ah=a.strValue(ac.status);if(a.isFullStr(ac.statusText)){ah+=" "+ac.statusText}ag.error("Server responded with status: "+ah)}}Q(ac);ac=null}}};if(ad!=null){if(Y!=null){ac.setRequestHeader("Content-Type",!X&&U?ad:R)}if(U){ac.setRequestHeader("Accept",ad)}}if(af!=null){for(var aa in af){var V=af[aa];if(V!=null){ac.setRequestHeader(a.strValue(aa),a.strValue(V))}}}try{ac.send(Y)}catch(ab){Q(ac);ac=null;if(ag!=null&&typeof ag.error=="function"){ag.error("Send data failed: "+ab)}}}}};this.get=function(T,V,U){L("GET",T,null,V,U)};this.post=function(U,W,T,V){L("POST",U,W,T,V)};this.put=function(U,W,T,V){L("PUT",U,W,T,V)};this.del=function(T,V,U){L("DELETE",T,null,V,U)}}var s={OFF:0,ERROR:1,WARN:2,INFO:3,DEBUG:4};function v(){var Q=[];var M=null;this.level=s.DEBUG;this.maxLines=30;this.maxDebugLength=116;this.maxInfoLength=-1;this.maxWarnLength=-1;this.maxErrorLength=-1;var O=function(){var R=new Date();var Y=R.getHours();var X=R.getMinutes();var V=R.getSeconds();
|
||||
var U=R.getMilliseconds();var T=R.getDate();var W=R.getMonth()+1;var S=R.getFullYear();return S+"-"+((W<10)?"0":"")+W+"-"+((T<10)?"0":"")+T+" "+((Y<10)?"0":"")+Y+":"+((X<10)?"0":"")+X+":"+((V<10)?"0":"")+V+"."+((U<10)?"00":((U<100)?"0":""))+U};var N=function(S,R){var T="";switch(S){case s.DEBUG:T=l.LOGGER.CSS.CLASS_DEBUG;break;case s.INFO:T=l.LOGGER.CSS.CLASS_INFO;break;case s.WARN:T=l.LOGGER.CSS.CLASS_WARN;break;case s.ERROR:T=l.LOGGER.CSS.CLASS_ERROR;break}return a.strReplace(l.LOGGER.HTML.LINE.replace("{LEVEL}",T),"{MESSAGE}",a.htmlEscape(R))};var L=function(S,R){var T="";switch(S){case s.DEBUG:T="DEBUG";break;case s.INFO:T="INFO";break;case s.WARN:T="WARNING";break;case s.ERROR:T="ERROR";break}return O()+" "+T+": "+R};var K=function(T,S,U,R){if(U>0&&S.length>U){S=S.substr(0,U)+"..."}Q.push(N(T,S));if(R>0){while(Q.length>R){Q.shift()}}};var P=function(S,R){if(e.console!=null){switch(S){case s.DEBUG:console.log(R);break;case s.INFO:console.info(R);break;case s.WARN:console.warn(R);break;
|
||||
case s.ERROR:console.error(R);break}}};this.registerControl=function(R,S){M=R;if(S!==false){this.print()}};this.unregisterControl=function(R){if(M==R){M=null}};this.print=function(){if(M!=null&&Q.length>0){var S="";for(var R=0;R<Q.length;R++){S+=Q[R]+l.COMMON.HTML.BREAK}M.html(S)}};this.clear=function(){Q=[];this.print()};this.log=function(S,R){if(S<=this.level){var T=-1;switch(S){case s.DEBUG:T=this.maxDebugLength;break;case s.INFO:T=this.maxInfoLength;break;case s.WARN:T=this.maxWarnLength;break;case s.ERROR:T=this.maxErrorLength;break}P(S,R);K(S,L(S,R),T,this.maxLines);this.print()}};this.debug=function(R){this.log(s.DEBUG,R)};this.info=function(R){this.log(s.INFO,R)};this.warn=function(R){this.log(s.WARN,R)};this.error=function(R){this.log(s.ERROR,R)}}function q(){var N=null;var Q=null;var P=0;var S=null;var O=false;var M={};var R=function(T,U){M[T]=U;if(O){U()}};var K=function(T){delete M[T]};var L=function(){for(var T in M){M[T]()}};this.onReady=function(T,U){if(a.isFullStr(T)){if(typeof U=="function"){R(T,U)
|
||||
}else{K(T)}}};this.init=function(T){O=true;N=a.strFullCheck(T!=null?T.name:null,null);Q=a.strFullCheck(T!=null?T.version:null,null);P=0;S={};F.foreach(T,function(V,U){if(a.isFullStr(V)&&a.isFullStr(U)){S[V]=U;P++}});L()};this.getName=function(){return N};this.getVersion=function(){return Q};this.getSize=function(){return P};this.isInitialized=function(){return O};this.getValueForKey=function(U,T){if(S!=null&&a.isFullStr(U)&&S[U]!=null){return S[U]}return T};this.getValueForExpr=function(U){if(a.isFullStr(U)){var T=U.indexOf("|");if(T>0){return this.getValueForKey(U.substr(0,T),U.substr(T+1))}else{return this.getValueForKey(U,"")}}return""};this.getData=function(){return{name:N,version:Q,size:P,properties:S}}}function i(){var M=null;var N={};var L=null;var K=null;this.delay=0;this.now=g.getNow();this.format="time";this.isRunning=function(){return M!=null};this.hasHook=function(O){return a.isFullStr(O)&&N[O]!=null};this.hasHooks=function(){var O;for(O in N){return true}return false};this.hasControl=function(){return L!=null
|
||||
};this.clearHooks=function(){N={}};this.addHook=function(O,P){if(a.isFullStr(O)&&typeof P=="function"){N[O]=P}};this.removeHook=function(O){if(a.isFullStr(O)){delete N[O]}};this.onTick=function(O,P){if(a.isFullStr(O)){if(typeof P=="function"){this.addHook(O,P)}else{this.removeHook(O)}}};this.registerControl=function(O){L=O};this.unregisterControl=function(O){if(L==O){L=null}};this.update=function(){if(L!=null){var O=null;switch(this.format){case"full":O=H.toDayTimeFullStr(this.now);break;case"date":O=H.toDayTimeLongStr(this.now);break;case"day":O=H.toTimeDayStr(this.now);break;case"time":O=H.toTimeStr(this.now);break;default:O="";break}if(L.clockText!=O){L.clockText=O;L.html(O)}}};this.validate=function(){this.now=g.getNow()};this.process=function(){if(M!=null){this.validate();this.delay=K!=null?this.now.getTime()-K.getTime():0;K=this.now;this.update();for(var O in N){N[O](this)}}};this.start=function(){if(M==null){var O=this;K=null;M=setInterval(function(){O.process()},1000)}};this.stop=function(){if(M!=null){clearInterval(M);
|
||||
M=null;K=null}}}var A={logger:new v(),cookies:new J(),storage:new d(),urlParams:new B(),ajax:new j()};var u=new function(){var K={};this.load=function(M,L,O,N){if(a.isFullStr(M)){if(L!=null&&K[L]!=null&&K[L].url==M&&K[L].data!=null){if(O!=null&&typeof O.success=="function"){O.success(K[L].data,true)}}else{A.ajax.get(M,{success:function(P){if(L!=null){K[L]={url:M,data:P}}if(O!=null&&typeof O.success=="function"){O.success(P,false)}},error:function(P){if(L!=null){K[L]={url:M,data:null}}if(O!=null&&typeof O.error=="function"){O.error(P)}}},N)}}};this.clearCache=function(L){if(L!=null){K[L]=null}};this.clear=function(){K={}}};function D(){var W={};var P={};var T={};var Q={};var S=function(Y){if(Y!=null&&Y.response!=null){return a.strToNum(Y.response.status,0)}return 0};var X=function(Y){if(Y!=null&&Y.response!=null){return Y.response.data}return null};var N=function(Z){var Y="";if(Z!=null&&Z.response!=null){if(a.isNum(Z.response.status)){Y+=""+Z.response.status}if(a.isFullStr(Z.response.text)){if(Y.length>0){Y+=" "
|
||||
}Y+=Z.response.text}if(a.isFullStr(Z.response.message)){if(Y.length>0){Y+=": "}Y+=Z.response.message}}return Y.length>0?Y:"Unknown error"};var V=function(Y,Z){T[Y]=Z;for(var aa in W){if(W[aa]!=null){Z(W[aa])}}};var K=function(Y){delete T[Y]};var M=function(Y){for(var Z in T){T[Z](Y)}};var O=function(Y,Z){if(Y!=null&&typeof Z=="function"){Q[Y]=Z;for(var aa in P){if(P[aa]!=null){Z(P[aa])}}}};var U=function(Y){if(Y!=null){delete Q[Y]}};var L=function(Y){for(var Z in Q){Q[Z](Y)}};var R=function(Y){return Y!=null&&Y.indexOf("temp:")!=0};this.onReady=function(Y,Z){if(a.isFullStr(Y)){if(typeof Z=="function"){V(Y,Z)}else{K(Y)}}};this.onError=function(Y,Z){if(a.isFullStr(Y)){if(typeof Z=="function"){O(Y,Z)}else{U(Y)}}};this.onCompleted=function(Y,Z){this.onReady(Y,Z);this.onError(Y,Z)};this.foreachEntry=function(Z){if(typeof Z=="function"){for(var Y in W){if(W[Y]!=null){if(Z(W[Y])===true){break}}}}};this.foreachError=function(Z){if(typeof Z=="function"){for(var Y in P){if(P[Y]!=null){if(Z(P[Y])===true){break
|
||||
}}}}};this.getData=function(Y){return Y!=null&&W[Y]!=null?W[Y].data:null};this.getEntry=function(Y){return Y!=null?W[Y]:null};this.setEntry=function(Z,Y){if(Z!=null&&Y!=null){W[Z]=Y;P[Z]=null;M(Y)}};this.getError=function(Y){return Y!=null?P[Y]:null};this.setError=function(Y,Z){if(Y!=null&&Z!=null){W[Y]=null;P[Y]=Z;L(Z)}};this.shouldStoreData=function(Y){return R(Y)};this.createData=function(Y,Z){return Z};this.putData=function(Z,ab,Y,aa){if(Z!=null&&ab!=null){A.ajax.put(Z,ab,{success:function(ac){if(ac.response!=null&&ac.response.status==200){if(Y!=null&&typeof Y.success=="function"){Y.success(ac.response.data)}}else{if(Y!=null&&typeof Y.error=="function"){Y.error(N(ac),S(ac),X(ac))}}},error:function(ac){if(Y!=null&&typeof Y.error=="function"){Y.error(ac,0,null)}}},aa)}};this.postData=function(Z,ab,Y,aa){if(Z!=null&&ab!=null){A.ajax.post(Z,ab,{success:function(ac){if(ac.response!=null&&ac.response.status==200){if(Y!=null&&typeof Y.success=="function"){Y.success(ac.response.data)}}else{if(Y!=null&&typeof Y.error=="function"){Y.error(N(ac),S(ac),X(ac))
|
||||
}}},error:function(ac){if(Y!=null&&typeof Y.error=="function"){Y.error(ac,0,null)}}},aa)}};this.deleteData=function(Y,aa,Z){if(Y!=null){A.ajax.del(Y,{success:function(ab){if(ab.response!=null&&ab.response.status==200){if(aa!=null&&typeof aa.success=="function"){aa.success(ab.response.data)}}else{if(aa!=null&&typeof aa.error=="function"){aa.error(N(ab),S(ab),X(ab))}}},error:function(ab){if(aa!=null&&typeof aa.error=="function"){aa.error(ab,0,null)}}},Z)}};this.loadData=function(ab,Z,ac,aa){if(ab!=null){var Y=this;if(R(ab)){this.clearData(ab)}if(Z!=null){A.ajax.get(Z,{success:function(ag){var af=false;if(ag.response!=null&&ag.response.status==200&&ag.response.data!=null){af=true;ag=ag.response.data}if(!af&&ag.response!=null){var ad={id:ab,error:N(ag),status:S(ag),reason:X(ag)};var ae=true;if(ac!=null&&typeof ac.error=="function"){ae=ac.error(ad)}if(ae!==false&&R(ab)){Y.setError(ab,ad)}if(ac!=null&&typeof ac.completed=="function"){ac.completed(ad)}}else{var ad={id:ab,data:Y.createData(ab,ag)};
|
||||
var ae=true;if(ac!=null&&typeof ac.success=="function"){ae=ac.success(ad)}if(ae!==false&&R(ab)){Y.setEntry(ab,ad)}if(ac!=null&&typeof ac.completed=="function"){ac.completed(ad)}}},error:function(af){var ad={id:ab,error:af,status:0,reason:null};var ae=true;if(ac!=null&&typeof ac.error=="function"){ae=ac.error(ad)}if(ae!==false&&R(ab)){Y.setError(ab,ad)}if(ac!=null&&typeof ac.completed=="function"){ac.completed(ad)}}},aa)}}};this.clearData=function(Y){if(Y!=null){W[Y]=null;P[Y]=null}};this.clear=function(){W={};P={}}}function r(){var P={};var S={};var Z={};var L={};var K=function(ac){if(ac!=null){try{if(e.URL!=null&&typeof URL.createObjectURL=="function"){return URL.createObjectURL(ac)}else{if(e.webkitURL!=null&&typeof webkitURL.createObjectURL=="function"){return webkitURL.createObjectURL(ac)}}}catch(ab){A.logger.error("Create blob URL failed: "+ab)}}return null};var V=function(ab){if(ab!=null){try{if(e.URL!=null&&typeof URL.revokeObjectURL=="function"){URL.revokeObjectURL(ab)}else{if(e.webkitURL!=null&&typeof webkitURL.revokeObjectURL=="function"){webkitURL.revokeObjectURL(ab)
|
||||
}}}catch(ac){A.logger.error("Dispose blob URL failed: "+ac)}}};var aa=function(ad){var ac=null;try{ac=new XMLHttpRequest()}catch(ab){if(ad!=null&&typeof ad.error=="function"){ad.error("Create XML HTTP request failed: "+ab)}}return ac};var R=function(ab){if(ab!=null&&typeof ab.destroy=="function"){ab.destroy()}};var U=function(ab,ac){if(ab.response!=null){if(ac!=null&&typeof ac.success=="function"){ac.success(ab.response)}}else{if(ac!=null&&typeof ac.error=="function"){ac.error("Load blob failed: Response is missing")}}};var M=function(af,ad,ae,al,ab){var ai=aa(al);if(ai!=null){var aj=false;var ak=null;if(ab!=null){aj=ab.withCredentials===true;ak=ab.headers}try{if(aj){ai.withCredentials=true}ai.responseType="blob";ai.open(af,ad,true)}catch(ah){R(ai);ai=null;if(al!=null&&typeof al.error=="function"){al.error("Open connection failed: "+ah)}}if(ai!=null){ai.onreadystatechange=function(){if(ai!=null){if(ai.readyState==4){if(ai.status>=200&&ai.status<300){U(ai,al)}else{if(al!=null&&typeof al.error=="function"){var am=a.strValue(ai.status);
|
||||
if(a.isFullStr(ai.statusText)){am+=" "+ai.statusText}al.error("Server responded with status: "+am)}}R(ai);ai=null}}};if(ak!=null){for(var ag in ak){var ac=ak[ag];if(ac!=null){ai.setRequestHeader(a.strValue(ag),a.strValue(ac))}}}try{ai.send(ae)}catch(ah){R(ai);ai=null;if(al!=null&&typeof al.error=="function"){al.error("Send data failed: "+ah)}}}}};var O=function(ab,ac,ag,ae,ah,ad,af){if(ag!=null){ab.clearBlob(ag);if(ae!=null){M(ac,ae,ah,{success:function(aj){var ai={id:ag,blob:aj,url:K(aj)};if(ad!=null&&typeof ad.success=="function"){ad.success(ai)}ab.setEntry(ag,ai);if(ad!=null&&typeof ad.completed=="function"){ad.completed(ai)}},error:function(aj){var ai={id:ag,error:aj,status:0,reason:null};if(ad!=null&&typeof ad.error=="function"){ad.error(ai)}ab.setError(ag,ai);if(ad!=null&&typeof ad.completed=="function"){ad.completed(ai)}}},af)}}};var N=function(ab,ac){Z[ab]=ac;for(var ad in P){if(P[ad]!=null){ac(P[ad])}}};var Q=function(ab){delete Z[ab]};var T=function(ab){for(var ac in Z){Z[ac](ab)
|
||||
}};var X=function(ab,ac){if(ab!=null&&typeof ac=="function"){L[ab]=ac;for(var ad in S){if(S[ad]!=null){ac(S[ad])}}}};var W=function(ab){if(ab!=null){delete L[ab]}};var Y=function(ab){for(var ac in L){L[ac](ab)}};this.onReady=function(ab,ac){if(a.isFullStr(ab)){if(typeof ac=="function"){N(ab,ac)}else{Q(ab)}}};this.onError=function(ab,ac){if(a.isFullStr(ab)){if(typeof ac=="function"){X(ab,ac)}else{W(ab)}}};this.onCompleted=function(ab,ac){this.onReady(ab,ac);this.onError(ab,ac)};this.foreachEntry=function(ac){if(typeof ac=="function"){for(var ab in P){if(P[ab]!=null){if(ac(P[ab])===true){break}}}}};this.foreachError=function(ac){if(typeof ac=="function"){for(var ab in S){if(S[ab]!=null){if(ac(S[ab])===true){break}}}}};this.getBlob=function(ab){return ab!=null&&P[ab]!=null?P[ab].blob:null};this.getUrl=function(ab){return ab!=null&&P[ab]!=null?P[ab].url:null};this.getEntry=function(ab){return ab!=null?P[ab]:null};this.setEntry=function(ac,ab){if(ac!=null&&ab!=null){V(P[ac]!=null?P[ac].url:null);
|
||||
P[ac]=ab;S[ac]=null;T(ab)}};this.getError=function(ab){return ab!=null?S[ab]:null};this.setError=function(ab,ac){if(ab!=null&&ac!=null){V(P[ab]!=null?P[ab].url:null);P[ab]=null;S[ab]=ac;Y(ac)}};this.executeBlob=function(ae,ac,af,ab,ad){O(this,"POST",ae,ac,af,ab,ad)};this.loadBlob=function(ad,ab,ae,ac){O(this,"GET",ad,ab,null,ae,ac)};this.clearBlob=function(ab){if(ab!=null){V(P[ab]!=null?P[ab].url:null);P[ab]=null;S[ab]=null}};this.clear=function(){for(var ab in P){V(P[ab]!=null?P[ab].url:null)}P={};S={}}}function w(P){var M="srq";var L=0;var K={};var Q=0;this.timeout=P!=null?P:30000;var N=function(R,U){L++;Q++;var T=M+L+"_"+g.getTimestamp();var S={timeout:new o(R),callback:U};K[T]=S;S.timeout.start(function(){O(T,null,"Request timed out","timeout")});return T};var O=function(U,V,R,S){if(U!=null){var T=K[U];if(T!=null){Q--;T.timeout.stop();delete K[U];if(R!=null){if(T.callback!=null&&typeof T.callback.error=="function"){T.callback.error(R,S)}}else{if(T.callback!=null&&typeof T.callback.success=="function"){T.callback.success(V)
|
||||
}}}}};this.startRequest=function(R){return N(this.timeout,R)};this.getRequestsCount=function(){return Q};this.isRequestPending=function(R){return R!=null&&K[R]!=null};this.handleData=function(R,S){O(R,S!=null?S:null,null)};this.handleError=function(S,T,R){O(S,null,T!=null?T:"Unknown error",R!=null?R:null)}}function b(){var N=0;var M=null;var L=function(){if(M!=null){var P=M;M=null;if(P.length>0){for(var O=0;O<P.length;O++){P[O]()}}}};var K=function(O){if(M==null){M=[]}M.push(O)};this.isBusy=function(){return N>0};this.start=function(O){if(O===true){N=1}else{N++}};this.stop=function(O){if(N>0){if(O===true){N=0}else{if(N>0){N--}}if(N==0){L()}}};this.onReady=function(O){if(typeof O=="function"){if(N>0){K(O)}else{O()}}}}function p(U){var V=4;var S=256;var W=null;var T=null;var ad=function(an){return a.isFullStr(an)&&an.length>=V&&an.length<S&&an.length%2==0};var ai=function(an){return an&an};var L=function(an,ao){return ai(((an<<5)-an)+ao)};var Y=function(an){return an.length==1?"0"+an:an};
|
||||
var af=function(ao,an){if(an>0){while(ao<0){ao+=an}while(ao>=an){ao-=an}}return ao};var ab=function(ap,ao,an){ap+=3;return ap+ao>=an?0:ap};var O=function(an,ao){an++;return an>=ao?0:an};var ac=function(an,ao){return ao?-an:an};var aj=function(aq,ar,ap,an,ao){return af(ar+ac(an,ao)*ae(aq,ap),S)};var Q=function(au,an,at,av,ao,ar,ap){var aq=au!=null&&at!=null?au.indexOf(at):-1;return aq>=0?al(au,af(aq+ac(ar,ap)*(av+ae(an,ao)),au.length)):at};var P=function(ao,an){return an!=null?(ao!=null?ao+an:an):ao};var al=function(an,ao){return an!=null&&ao>=0&&ao<an.length?an.charAt(ao):null};var ae=function(an,ao){return an!=null&&ao>=0&&ao<an.length?an.charCodeAt(ao):0};var R=function(at,av,an,ar,ao,aq){var au=al(at,ar);if(au!=null){var ap=Math.random()>0.5?av.indexOf(au):av.lastIndexOf(au);return ap>=0?Y(aj(an,ap,ao,1,aq).toString(16)):null}return null};var M=function(at,an,ar,ao,aq){var av=al(at,ar);var au=al(at,ar+1);var ap=av!=null&&au!=null?parseInt(av+au,16):-1;return ap>=0?aj(an,ap,ao,-1,aq):-1
|
||||
};var ak=function(au,ay,ao){var ax=null;if(a.isFullStr(au)&&au.length%2==0&&ad(ay)&&ad(ao)){var at=au.length;var av=ao.length;var ap=0;var ar=0;var aq=false;for(var an=0;an<at;an+=2){var aw=al(ay,M(au,ao,an,ap+ar,aq));if(aw!=null){ax=P(ax,aw)}else{return null}ap=ab(ap,ar,av);if(ap==0){ar=O(ar,av)}aq=!aq}}return ax};var N=function(av,aq,ao){var ay=null;if(a.isFullStr(av)&&ad(aq)&&ad(ao)){var ax=av.length;var aw=ao.length;var ap=0;var au=0;var at=false;for(var an=0;an<ax;an++){var ar=R(av,aq,ao,an,ap+au,at);if(ar!=null){ay=P(ay,ar)}else{return null}ap=ab(ap,au,aw);if(ap==0){au=O(au,aw)}at=!at}}return ay};var am=function(ao){var an=ao<0?-1:1;return an*((ao*an)%S)};var ag=function(ar){var ao=null;if(ad(ar)){var aq=ar.length;var ap=aq/2;for(var at=0;at<ap;at++){var au=al(ar,at);var an=al(ar,aq-1-at);if(ao==null||ao.indexOf(au)<0){ao=P(ao,au)}if(ao.indexOf(an)<0){ao=P(ao,an)}}}return ao};var K=function(aq,at,ar){var ap=0;if(aq!=null&&at!=null&&ar!=null){var au=aq.length;var an=ar.length;ap=au;
|
||||
for(var ao=0;ao<an;ao++){ap=L(ap,ae(ar,ao))}for(var ao=0;ao<au;ao++){if(at.indexOf(al(aq,ao))<0){ap=L(ap,ae(aq,ao))}}}return am(ap)};var X=function(av,ay,ao,aw){var aq=null;if(a.isFullStr(av)&&ad(ay)&&ad(ao)){var az=K(av,ay,ao);var ax=av.length;var au=ao.length;var ap=0;var at=0;var ar=false;for(var an=0;an<ax;an++){aq=P(aq,Q(ay,ao,al(av,an),az,ap+at,aw,ar));ap=ab(ap,at,au);if(ap==0){at=O(at,au)}ar=!ar}}return aq};var ah=function(){return N(a.strShuffle(U),U,U)};var Z=function(an,ao){return ak(an,ak(ao,U,U),U)};var aa=function(){if(T==null){T=ag(U)}return T};this.createSteam=function(){W=ah();return W};this.resolveToken=function(an){return Z(an,W)};this.transformString=function(an){return X(an,aa(),U,1)};this.normalizeString=function(an){return X(an,aa(),U,-1)}}var n=new function(){var X=16;var Y=32;var K="tvx:device_id";var M=/^[a-z-]+_[A-Za-z0-9]+_[0-9]+([0-9#])*$/;var U=new p("k%hy.nLI1&4rN[D9YAPVCu(*&5F)'aC$=frs,wocT48qpRpXt[Gx$BQZU@B,9N;oL%j*J~hXbW)-#q#z7+0uMgHm3fEHcdK@iIG!?nP!/Y.3vFb~2eUz(sk-O/W?AtJ_VT_8]=+K;DmS6Q1iSx60]jaevER'l7y5ZlOdM2wg");
|
||||
var aa=new p("ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789");var V=new p(a.strShuffle("ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789"));var Z=new p("tuNiBAmqXwPd-aUIRFHn2YpVQ9gkD7zWC4jMGycJ8v65SrZ0.hO1eLfKboxEl3sT");var Q=function(ae,ad){return ae!=null&&ad>=0&&ad<ae.length?ae.charAt(ad):"0"};var S=function(ad){return ad.indexOf("-")==0?"0"+ad.substr(1):ad};var ab=function(ae,ah,ad){var af=0;for(var ag=ae.length;ag<ad;ag++){ae+=Q(ah,af++)}return ae};var R=function(ad){return ab(S(""+a.createHash(ad)),S(""+a.createHash(ad,true)),X)};var ac=function(ad){return a.isFullStr(ad)&&M.test(ad)};var T=function(ad){if(a.isFullStr(ad)&&ad.length<Y){return ab(ad+"#",S(""+a.createHash(ad))+S(""+a.createHash(ad,true)),Y)}return ad};var P=function(ad){return a.isFullStr(ad)?a.base64DecodeId(Z.normalizeString(ad)):null};var N=function(ad){return a.isFullStr(ad)?Z.transformString(a.base64EncodeId(T(ad))):null};var O=function(ad){A.storage.remove(K)};var L=function(ae){var ad=A.storage.getFullStr(K,null);
|
||||
if(!ac(P(ad))){ad=null}if(ad==null&&ae!=null&&ae.info!=null&&ae.info.platform!=null){ad=N(ae.info.platform+"_"+a.createKey(16)+"_"+g.getTimestamp());A.storage.set(K,ad)}return ad};var W=function(ad){if(ad!=null&&ad.info!=null&&ad.info.platform!=null&&ad.info.system!=null){if(ad.info.system.macAddress!=null){return N(ad.info.platform+"_"+ad.info.system.macAddress)}else{if(ad.info.system.deviceId!=null){return N(ad.info.platform+"_"+ad.info.system.deviceId)}}}return L(ad)};this.checkOrigin=function(ad){if(a.isFullStr(ad)){return ad=="null"||ad=="http://msx.benzac.de"||ad=="https://msx.benzac.de"||ad=="ms-appx://52357benzac.de.mediastationx"||ad=="http://localhost"||ad.indexOf("http://localhost:")==0||ad.indexOf("file://")==0}return false};this.transformString=function(ad){return U.transformString(ad)};this.normalizeString=function(ad){return U.normalizeString(ad)};this.createHashKey=function(ad,ae){if(ae=="local"){return V.transformString(R(ad))}return aa.transformString(R(ad))};this.clearDeviceId=function(){O()
|
||||
};this.getDeviceId=function(ad){return W(ad)}};var t=new function(){var U=null;var S=false;var R=function(X){if(U!=null){var V=U;U=null;if(V.length>0){for(var W=0;W<V.length;W++){V[W](X)}}}};var L=function(V){if(U==null){U=[]}U.push(V)};var P=function(W,V){if(a.isFullStr(V)){if(a.isFullStr(W)){return V==W}return false}return true};var M=function(V){return V!=null&&V.info!=null&&V.info.framework!=null?a.strFullCheck(V.info.framework.name,null):null};var O=function(V){return V!=null&&V.info!=null&&V.info.framework!=null?a.strFullCheck(V.info.framework.version,null):null};var K=function(V){return V!=null&&V.info!=null&&V.info.application!=null?a.strFullCheck(V.info.application.name,null):null};var Q=function(V){return V!=null&&V.info!=null&&V.info.application!=null?a.strFullCheck(V.info.application.version,null):null};var N=function(V){return V!=null&&V.info!=null&&V.info.content!=null?a.strFullCheck(V.info.content.name,null):null};var T=function(V){return V!=null&&V.info!=null&&V.info.content!=null?a.strFullCheck(V.info.content.version,null):null
|
||||
};this.createCanvas=function(X,W,V){return a.strReplace(l.COMMON.HTML.CANVAS.replace("{WIDTH}",a.strToNum(W,k.SCREEN_WIDTH)).replace("{HEIGHT}",a.strToNum(V,k.SCREEN_HEIGHT)),"{CLASS}",a.htmlAttrEscape(X))};this.createIFrame=function(V,W){return a.strReplace(a.strReplace(l.COMMON.HTML.IFRAME,"{CLASS}",a.htmlAttrEscape(V)),"{SRC}",a.htmlAttrEscape(a.strFullCheck(W,"about:blank")))};this.areSettingsValidated=function(){return S};this.invalidateSettings=function(){S=false};this.validateSettings=function(ac){S=true;var an=null;var X=null;var ae=null;var ao=null;var af=null;var aw=null;var av=null;var aq=null;var Y=null;var V=null;var aa=null;var ar=null;var ag=null;var ad=null;var al=null;var ap=null;var at=null;var ai=null;var am=null;var W=null;var aj=null;var ah=null;var ak=null;var ab=null;var Z=null;var au=null;if(ac!=null&&ac.info!=null){av=ac.info.platform;if(ac.info.time!=null){an=ac.info.time.offset;X=ac.info.time.zoneOffset}if(ac.info.screen!=null){ae=ac.info.screen.width;ao=ac.info.screen.height;
|
||||
af=ac.info.screen.factor;aw=ac.info.screen.zoomFactor}if(ac.info.framework!=null&&ac.info.framework.settings!=null){aq=ac.info.framework.settings.animate;Y=ac.info.framework.settings.transform;V=ac.info.framework.settings.input;aa=ac.info.framework.settings.remote;ar=ac.info.framework.settings.layout;ag=ac.info.framework.settings.scale;ad=ac.info.framework.settings.zoom;al=ac.info.framework.settings.center;ap=ac.info.framework.settings.background;at=ac.info.framework.settings.leave;ai=ac.info.framework.settings.exit;am=ac.info.framework.settings.back;W=ac.info.framework.settings.volume;aj=ac.info.framework.settings.busy;ah=ac.info.framework.settings.speed;ak=ac.info.framework.settings.playback;ab=ac.info.framework.settings.fullscreen;Z=ac.info.framework.settings.suspend;au=ac.info.framework.settings.secure}}k.TIME_OFFSET=a.strToNum(an,k.TIME_OFFSET);k.TIME_ZONE_OFFSET=a.strToNum(X,k.TIME_ZONE_OFFSET);k.SCREEN_WIDTH=a.strToNum(ae,k.SCREEN_WIDTH);k.SCREEN_HEIGHT=a.strToNum(ao,k.SCREEN_HEIGHT);
|
||||
k.SCREEN_FACTOR=a.strToNum(af,k.SCREEN_FACTOR);k.ZOOM_FACTOR=a.strToNum(aw,k.ZOOM_FACTOR);k.PLATFORM=a.strFullCheck(av,k.PLATFORM);k.ANIMATE=a.strToNum(aq,k.ANIMATE);k.TRANSFORM=a.strToNum(Y,k.TRANSFORM);k.INPUT=a.strToNum(V,k.INPUT);k.REMOTE=a.strToNum(aa,k.REMOTE);k.LAYOUT=a.strFullCheck(ar,k.LAYOUT);k.SCALE=a.strFullCheck(ag,k.SCALE);k.ZOOM=a.strFullCheck(ad,k.ZOOM);k.CENTER=a.strToNum(al,k.CENTER);k.BACKGROUND=a.strToNum(ap,k.BACKGROUND);k.LEAVE=a.strToNum(at,k.LEAVE);k.EXIT=a.strToNum(ai,k.EXIT);k.BACK=a.strToNum(am,k.BACK);k.VOLUME=a.strToNum(W,k.VOLUME);k.BUSY=a.strToNum(aj,k.BUSY);k.SPEED=a.strToNum(ah,k.SPEED);k.PLAYBACK=a.strToNum(ak,k.PLAYBACK);k.FULLSCREEN=a.strToNum(ab,k.FULLSCREEN);k.SUSPEND=a.strToNum(Z,k.SUSPEND);k.SECURE=a.strToNum(au,k.SECURE);R(ac)};this.onValidatedSettings=function(V){if(typeof V=="function"){if(S){V()}else{L(V)}}};this.handleSettingsEvent=function(W){if(W!=null&&a.isFullStr(W.event)&&W.event.indexOf("settings:")==0){var V=W.event.substr(9);if(V=="animate"){k.ANIMATE=a.strToNum(W.value,k.ANIMATE)
|
||||
}else{if(V=="transform"){k.TRANSFORM=a.strToNum(W.value,k.TRANSFORM)}else{if(V=="input"){k.INPUT=a.strToNum(W.value,k.INPUT)}else{if(V=="remote"){k.REMOTE=a.strToNum(W.value,k.REMOTE)}else{if(V=="layout"){k.LAYOUT=a.strToNum(W.value,k.LAYOUT)}else{if(V=="scale"){k.SCALE=a.strFullCheck(W.value,k.SCALE)}else{if(V=="zoom"){k.ZOOM=a.strFullCheck(W.value,k.ZOOM)}}}}}}}}};this.getFrameworkInfo=function(V){return a.strFullCheck(M(V),"-")+" "+a.strFullCheck(O(V),"-")};this.getApplicationInfo=function(V){return a.strFullCheck(K(V),"-")+" "+a.strFullCheck(Q(V),"-")};this.getContentInfo=function(V){return a.strFullCheck(N(V),"-")+" "+a.strFullCheck(T(V),"-")};this.checkFramework=function(X,W,V){return a.checkVersion(O(X),W)&&P(M(X),V)};this.checkApplication=function(X,W,V){return a.checkVersion(Q(X),W)&&P(K(X),V)};this.checkContent=function(X,W,V){return a.checkVersion(T(X),W)&&P(N(X),V)};this.isSameContentState=function(W,V){return W!=null&&V!=null&&W.start===V.start&&W.restored===V.restored&&W.menuId===V.menuId&&W.menuFlag===V.menuFlag&&W.menuFocus===V.menuFocus&&W.menuIndex===V.menuIndex&&W.menuSize===V.menuSize&&W.contentId===V.contentId&&W.contentFlag===V.contentFlag&&W.contentFocus===V.contentFocus&&W.contentIndex===V.contentIndex&&W.contentSize===V.contentSize&&W.contentVisible===V.contentVisible&&W.panelId===V.panelId&&W.panelFlag===V.panelFlag&&W.panelFocus===V.panelFocus&&W.panelIndex===V.panelIndex&&W.panelSize===V.panelSize&&W.panelVisible===V.panelVisible&&W.videoVisible===V.videoVisible&&W.videoActive===V.videoActive&&W.playerVisible===V.playerVisible&&W.slideshowVisible===V.slideshowVisible&&W.volumeVisible===V.volumeVisible&&W.logVisible===V.logVisible
|
||||
};this.createChangedContentState=function(W,V){return V!=null?{init:V.init,initChanged:W==null||W.init!==V.init,start:V.start,startChanged:W==null||W.start!==V.start,restored:V.restored,restoredChanged:W==null||W.restored!==V.restored,menuId:V.menuId,menuIdChanged:W==null||W.menuId!==V.menuId,menuFlag:V.menuFlag,menuFlagChanged:W==null||W.menuFlag!==V.menuFlag,menuFocus:V.menuFocus,menuFocusChanged:W==null||W.menuFocus!==V.menuFocus,menuIndex:V.menuIndex,menuIndexChanged:W==null||W.menuIndex!==V.menuIndex,menuSize:V.menuSize,menuSizeChanged:W==null||W.menuSize!==V.menuSize,contentId:V.contentId,contentIdChanged:W==null||W.contentId!==V.contentId,contentFlag:V.contentFlag,contentFlagChanged:W==null||W.contentFlag!==V.contentFlag,contentFocus:V.contentFocus,contentFocusChanged:W==null||W.contentFocus!==V.contentFocus,contentIndex:V.contentIndex,contentIndexChanged:W==null||W.contentIndex!==V.contentIndex,contentSize:V.contentSize,contentSizeChanged:W==null||W.contentSize!==V.contentSize,contentVisible:V.contentVisible,contentVisibleChanged:W==null||W.contentVisible!==V.contentVisible,panelId:V.panelId,panelIdChanged:W==null||W.panelId!==V.panelId,panelFlag:V.panelFlag,panelFlagChanged:W==null||W.panelFlag!==V.panelFlag,panelFocus:V.panelFocus,panelFocusChanged:W==null||W.panelFocus!==V.panelFocus,panelIndex:V.panelIndex,panelIndexChanged:W==null||W.panelIndex!==V.panelIndex,panelSize:V.panelSize,panelSizeChanged:W==null||W.panelSize!==V.panelSize,panelVisible:V.panelVisible,panelVisibleChanged:W==null||W.panelVisible!==V.panelVisible,videoVisible:V.videoVisible,videoVisibleChanged:W==null||W.videoVisible!==V.videoVisible,videoActive:V.videoActive,videoActiveChanged:W==null||W.videoActive!==V.videoActive,playerVisible:V.playerVisible,playerVisibleChanged:W==null||W.playerVisible!==V.playerVisible,slideshowVisible:V.slideshowVisible,slideshowVisibleChanged:W==null||W.slideshowVisible!==V.slideshowVisible,volumeVisible:V.volumeVisible,volumeVisibleChanged:W==null||W.volumeVisible!==V.volumeVisible,logVisible:V.logVisible,logVisibleChanged:W==null||W.logVisible!==V.logVisible}:W
|
||||
}};var G=new function(){var N="videoPlugin";var aD="vrq";var aj=100;var P=30000;var ae=new p("VnckdhvbF'sOhm)XlK1t]ETl]+K8q-tDgevE3N;7Zm[u#V1/W)U-_@_@,A4(B#zGF~8JHfJr?=D2*n9WC7&0i/a+2S,Qky5&..Nx!p(wUoLRIdos?HBLZ;T'CRb=eqGi3yc5$*Q%~P6MYjrj6P40aISO$!AXYwMzu%[x9gpf");var T=null;var ab=false;var aB=null;var aP=false;var R=false;var ao=false;var aX=false;var a5=null;var a7=new i();var aa=new o(1000);var aF=new o(1000);var aO=false;var a2={state:0,position:0,duration:0,speed:1,ended:false,volume:100,muted:false,width:k.SCREEN_WIDTH,height:k.SCREEN_HEIGHT};var af=function(a8){T=new p(a8)};var aq=function(a8){if(aP){if(a8=="local"){return T!=null?T.createSteam():null}return ae.createSteam()}return null};var M=function(a8,a9){if(aP){if(a9=="local"){return T!=null?T.resolveToken(a8):null}return ae.resolveToken(a8)}return null};var aG=function(a8,a9){if(aP){if(a9=="local"){return T!=null?T.transformString(a8):null}else{if(a9=="global"){return ae.transformString(a8)}else{if(a9=="shared"){return n.transformString(T!=null?T.transformString(a8):a8)
|
||||
}}}return ae.transformString(T!=null?T.transformString(a8):a8)}return null};var ad=function(a8,a9){if(aP){if(a9=="local"){return T!=null?T.normalizeString(a8):null}else{if(a9=="global"){return ae.normalizeString(a8)}else{if(a9=="shared"){return T!=null?T.normalizeString(n.normalizeString(a8)):n.normalizeString(a8)}}}return T!=null?T.normalizeString(ae.normalizeString(a8)):ae.normalizeString(a8)}return null};var aY=function(a8){if(a.isNum(a8)){a8=a.strToNum(a8,0);if(isFinite(a8)){return a8}}return 0};var O=function(){if(a2.position==0||a2.duration==0){try{var a8=false;if(a2.position==0){a2.position=aY(a5.getPosition());a8=a2.position>0}if(a2.duration==0){a2.duration=aY(a5.getDuration());a8=a2.duration>0}if(a2.position>0&&a2.duration>0){aV()}if(a8){U()}}catch(a9){ak("Start failed",a9);aV()}}else{aV()}};var aV=function(){ab=true;ac()};var a4=function(){ac();if(aP&&!ab&&a5!=null&&typeof a5.getPosition=="function"&&typeof a5.getDuration=="function"){aB=setInterval(O,aj)}};var ac=function(){if(aB!=null){clearInterval(aB);
|
||||
aB=null}};var aZ=0;var aS={};var av=function(ba){aZ++;var a8=aD+aZ+"_"+g.getTimestamp();var a9={timeout:new o(P),callback:ba};aS[a8]=a9;a9.timeout.start(function(){ax(a8,{error:"Request timed out"})});return a8};var ax=function(a8,ba){if(a8!=null){var a9=aS[a8];if(a9!=null){a9.timeout.stop();delete aS[a8];Y(a9.callback,ba)}}};var Y=function(ba,a8){if(typeof ba=="function"){try{ba(a8)}catch(a9){ak("Callback error",a9)}}};var aW=new h();var X=new o(500);var ay=null;var aI=null;var ag=function(a8){if(a8!=null){if(t.isSameContentState(ay,a8)){if(!t.isSameContentState(aI,a8)){if(aI==null){a8.init=true}aI=t.createChangedContentState(aI,a8);aW.notifyObservers(aI)}}else{ay=a8}}ah()};var aN=function(){if(aP){ar("info:content",function(a8){ag(a8.info!=null&&a8.info.content!=null?a8.info.content.state:null)})}else{ah()}};var ah=function(a8){if(aW.hasObservers()){if(a.isFullStr(a8)&&aI!=null){aW.notifyObserver(a8,aI)}X.start(aN)}else{ay=null;aI=null;X.stop()}};var U=function(){Z(a2)};var aH=function(){a7.addHook(N,aC)
|
||||
};var a0=function(){if(a2.state==z.STOPPED){a7.stop()}else{a7.start()}};var V=function(a8,a9){if(a.isFullStr(a8)){Z({action:a8,data:a9!=null?a9:null})}};var az=function(a9,a8){if(a.isFullStr(a9)){if(a8!==false){V("logger:debug:"+a9)}}};var aE=function(a9,a8,ba){if(a.isFullStr(a9)){if(a8!==false){V("logger:success:"+a9,{show:ba!==false})}else{if(ba!==false){V("success:"+a9)}}}};var a6=function(a9,a8,ba){if(a.isFullStr(a9)){if(a8!==false){V("logger:info:"+a9,{show:ba!==false})}else{if(ba!==false){V("info:"+a9)}}}};var al=function(a9,a8,ba){if(a.isFullStr(a9)){if(a8!==false){V("logger:warn:"+a9,{show:ba!==false})}else{if(ba!==false){V("warn:"+a9)}}}};var aw=function(a9,a8,ba){if(a.isFullStr(a9)){if(a8!==false){V("logger:error:"+a9,{show:ba!==false})}else{if(ba!==false){V("error:"+a9)}}}};var Q=function(a8,a9){if(a.isFullStr(a8)&&a9!=null){if(typeof a9=="object"){V(a8+":data",a9)}else{V(a8+":"+a9)}}};var aR=function(a8){Q("menu",a8)};var au=function(a8){Q("content",a8)};var at=function(a8){Q("panel",a8)
|
||||
};var ar=function(a8,ba,a9){if(a.isFullStr(a8)){if(a9==null){a9={}}a9.requestId=av(ba);a9.dataId=a8;V("player:commit:"+a8,a9)}else{Y(ba,{error:"Data ID is invalid: '"+a8+"'"})}};var ak=function(a8,a9){if(a8!=null&&a9!=null){if(a9.name!=null&&a9.message!=null){aw("Plugin: "+a8+": "+a9.name+": "+a9.message)}else{aw("Plugin: "+a8+": "+a9)}}};var K=function(a8){if(a2.state!=z.PLAYING||a8===true){a2.state=z.PLAYING;if(aP&&a5!=null&&typeof a5.play=="function"){try{a5.play()}catch(a9){ak("Play failed",a9)}}}};var aQ=function(a8){if(a2.state!=z.PAUSED||a8===true){a2.state=z.PAUSED;if(aP&&a5!=null&&typeof a5.pause=="function"){try{a5.pause()}catch(a9){ak("Pause failed",a9)}}}};var a3=function(a8){if(a2.state!=z.STOPPED||a8===true){a2.state=z.STOPPED;if(aP&&a5!=null&&typeof a5.stop=="function"){try{a5.stop()}catch(a9){ak("Stop failed",a9)}}}};var aT=function(a8,a9){if(a8==z.PLAYING){K(a9)}else{if(a8==z.PAUSED){aQ(a9)}else{if(a8==z.STOPPED){a3(a9)}}}};var aC=function(){if(aP&&a5!=null&&!aa.isBusy()&&typeof a5.getUpdateData=="function"){try{var a9=a5.getUpdateData();
|
||||
if(a9!=null){var ba=false;if(a.isNum(a9.state)){ba=true;a2.state=a.strToNum(a9.state,a2.state)}if(a.isNum(a9.position)){ba=true;a2.position=a.strToNum(a9.position,a2.position);if(!isFinite(a2.position)){a2.position=0}}if(a.isNum(a9.duration)){ba=true;a2.duration=a.strToNum(a9.duration,a2.duration);if(!isFinite(a2.duration)){a2.duration=0}}if(a.isNum(a9.speed)){ba=true;a2.speed=a.strToNum(a9.speed,a2.speed)}if(a.isBool(a9.ended)){ba=true;a2.ended=a.strToBool(a9.ended,a2.ended)}if(a.isNum(a9.volume)){ba=true;a2.volume=a.strToNum(a9.volume,a2.volume)}if(a.isBool(a9.muted)){ba=true;a2.muted=a.strToBool(a9.muted,a2.muted)}if(ba){U();a0()}}}catch(a8){ak("Update failed",a8)}}};var aK=function(ba,a8){aX=false;if(a2.position!=ba||ba==0||a8===true){a2.position=ba;if(aP&&a5!=null&&typeof a5.setPosition=="function"){try{a5.setPosition(ba);if(!aX){aa.start()}}catch(a9){ak("Set position failed",a9)}}}};var aL=function(a8,ba){if(a2.volume!=a8||ba===true){a2.volume=a8;if(aP&&a5!=null&&typeof a5.setVolume=="function"){try{a5.setVolume(a8)
|
||||
}catch(a9){ak("Set volume failed",a9)}}}};var S=function(a8,a9){if(a2.muted!=a8||a9===true){a2.muted=a8;if(aP&&a5!=null&&typeof a5.setMuted=="function"){try{a5.setMuted(a8)}catch(ba){ak("Set muted failed",ba)}}}};var a1=function(a8,a9){if(a2.speed!=a8||a9===true){a2.speed=a8;if(aP&&a5!=null&&typeof a5.setSpeed=="function"){try{a5.setSpeed(a8)}catch(ba){ak("Set speed failed",ba)}}}};var ap=function(a9,a8,ba){if(a2.width!=a9||a2.height!=a8||ba===true){a2.width=a9;a2.height=a8;if(aP&&a5!=null&&typeof a5.setSize=="function"){try{a5.setSize(a9,a8)}catch(bb){ak("Set size failed",bb)}}}};var aM=function(a8,a9){V("response:"+a8,a9)};var an=function(a8,a9){ax(a8,a9)};var L=function(a9,a8,bb){if(typeof a5.handleRequest=="function"){try{a5.handleRequest(a8,bb,function(bc){aM(a9,bc)})}catch(ba){ak("Handle request failed",ba);aM(a9)}}else{aM(a9)}};var W=function(a9){if(aP&&a9!=null&&a5!=null){if(typeof a5.handleEvent=="function"){try{a5.handleEvent(a9)}catch(a8){ak("Handle event failed",a8)}}}};var aA=function(bc){if(aP&&bc!=null&&a5!=null){if(a.isFullStr(bc.requestId)&&a.isFullStr(bc.dataId)){L(bc.requestId,bc.dataId,bc.data)
|
||||
}else{if(bc.data!=null&&a.isFullStr(bc.data.requestId)&&a.isFullStr(bc.data.dataId)){var a9={};var bb=bc.data.dataId;var a8=bb.indexOf(":");if(a8>0){bb=bb.substr(0,a8)}a9[bb]=bc[bb]!=null?bc[bb]:null;a9.error=a.strFullCheck(bc.error,null);an(bc.data.requestId,a9)}else{if(typeof a5.handleData=="function"){try{a5.handleData(bc)}catch(ba){ak("Handle data failed",ba)}}}}}};var ai=function(a8){if(!ao||a8===true){ao=true;if(a5!=null&&typeof a5.init=="function"){try{a5.init()}catch(a9){ak("Call init failed",a9)}}}};var aU=function(a8){if(!aP||a8===true){aP=true;if(a5!=null&&typeof a5.ready=="function"){try{a5.ready()}catch(a9){ak("Call ready failed",a9)}}}};var aJ=function(){aP=false;e.addEventListener("message",function(a8){if(n.checkOrigin(a8.origin)){am(a8.data)}},false);V("plugin:init")};var am=function(a8){if(ao&&a8!=null&&a8.type===N){if(a8.init===1&&aP){return}if(a.isNum(a8.state)){aT(a.strToNum(a8.state,a2.state))}if(a.isNum(a8.position)){aK(a.strToNum(a8.position,a2.position))}if(a.isNum(a8.speed)){a1(a.strToNum(a8.speed,a2.speed))
|
||||
}if(a.isNum(a8.volume)){S(false);aL(a.strToNum(a8.volume,a2.volume))}if(a.isBool(a8.muted)){S(a.strToBool(a8.muted,a2.muted))}if(a.isNum(a8.width)&&a.isNum(a8.height)){ap(a.strToNum(a8.width,a2.width),a.strToNum(a8.height,a2.height))}if(a8.init===1){aU()}else{if(a8.data!=null){if(a.isFullStr(a8.data.event)){W(a8.data)}else{aA(a8.data)}}}}};var Z=function(a9){if(e.parent!=null&&a9!=null){a9.type=N;a9.sender="plugin";a9.target="app";try{e.parent.postMessage(a9,"*")}catch(a8){if(e.console!=null){console.error("Post message failed",a8)}}}};this.setupPlayer=function(a8){a5=a8;if(ao){ai(true)}if(aP){aU(true)}};this.setSeekDelay=function(a8){aa.delay=a.strToNum(a8,aa.delay)};this.getSeekDelay=function(){return aa.delay};this.setLoadingDelay=function(a8){aF.delay=a.strToNum(a8,aF.delay)};this.getLoadingDelay=function(){return aF.delay};this.setState=function(a8,a9){if(aP){a2.state=a.strToNum(a8,a2.state);if(a9===true){U()}a0()}};this.getState=function(){return a2.state};this.applyState=function(){if(aP){aT(a2.state,true)
|
||||
}};this.setPosition=function(a9,a8){if(aP){aX=true;a2.position=a.strToNum(a9,a2.position);if(!isFinite(a2.position)){a2.position=0}aa.stop();if(a8===true){U();a0()}}};this.getPosition=function(){return a2.position};this.applyPosition=function(){if(aP){aK(a2.position,true)}};this.setDuration=function(a8,a9){if(aP){a2.duration=a.strToNum(a8,a2.duration);if(!isFinite(a2.duration)){a2.duration=0}if(a9===true){U();a0()}}};this.getDuration=function(){return a2.duration};this.setSpeed=function(a8,a9){if(aP){a2.speed=a.strToNum(a8,a2.speed);if(a9===true){U();a0()}}};this.getSpeed=function(){return a2.speed};this.applySpeed=function(){if(aP){a1(a2.speed,true)}};this.setEnded=function(a8,a9){if(aP){a2.ended=a.strToBool(a8,a2.ended);if(a9===true){U();a0()}}};this.hasEnded=function(){return a2.ended};this.setVolume=function(a9,a8){if(aP){a2.volume=a.strToNum(a9,a2.volume);if(a8===true){U();a0()}}};this.getVolume=function(){return a2.volume};this.setMuted=function(a8,a9){if(aP){a2.muted=a.strToBool(a8,a2.muted);
|
||||
if(a9===true){U();a0()}}};this.isMuted=function(){return a2.muted};this.applyVolume=function(){if(aP){aL(a2.volume,true);S(a2.muted,true)}};this.getWidth=function(){return a2.width};this.getHeight=function(){return a2.height};this.applySize=function(){if(aP){ap(a2.width,a2.height,true)}};this.executeAction=function(a8,a9){if(aP){V(a8,a9)}};this.debug=function(a9,a8){if(aP){az(a9,a8)}};this.success=function(a9,a8,ba){if(aP){aE(a9,a8,ba)}};this.info=function(a9,a8,ba){if(aP){a6(a9,a8,ba)}};this.warn=function(a9,a8,ba){if(aP){al(a9,a8,ba)}};this.error=function(a9,a8,ba){if(aP){aw(a9,a8,ba)}};this.showMenu=function(a8){if(aP){aR(a8)}};this.showContent=function(a8){if(aP){au(a8)}};this.showPanel=function(a8){if(aP){at(a8)}};this.showPlayer=function(a8){if(aP){if(a.isFullStr(a8)){V("player:show:"+a8)}else{V("player:show")}}};this.showAction=function(){if(aP){V("player:action")}};this.hidePlayer=function(){if(aP){V("player:hide")}};this.setupContentLabel=function(a8){if(aP){V("player:label:content:"+a.strFullCheck(a8,"default"))
|
||||
}};this.setupExtensionLabel=function(a8){if(aP){V("player:label:extension:"+a.strFullCheck(a8,"default"))}};this.setupPositionLabel=function(a8){if(aP){V("player:label:position:"+a.strFullCheck(a8,"default"))}};this.setupDurationLabel=function(a8){if(aP){V("player:label:duration:"+a.strFullCheck(a8,"default"))}};this.setupSpeedLabel=function(a8){if(aP){V("player:label:speed:"+a.strFullCheck(a8,"default"))}};this.setupInfoText=function(a8){if(aP){V("player:info:text:"+a.strFullCheck(a8,"default"))}};this.setupInfoImage=function(a8){if(aP){V("player:info:image:"+a.strFullCheck(a8,"default"))}};this.setupButton=function(a8,a9){if(aP&&a.isId(a8)){V("player:button:"+a8+":setup",a9)}};this.enableButton=function(a8){if(aP&&a.isId(a8)){V("player:button:"+a8+":enable")}};this.disableButton=function(a8){if(aP&&a.isId(a8)){V("player:button:"+a8+":disable")}};this.focusButton=function(a8){if(aP&&a.isId(a8)){V("player:button:"+a8+":focus")}};this.setupProgressColor=function(a8){if(aP){V("player:progress:color:"+a.strFullCheck(a8,"default"))
|
||||
}};this.setupProgressType=function(a8){if(aP){V("player:progress:type:"+a.strFullCheck(a8,"default"))}};this.enableProgressMarker=function(){if(aP){V("player:progress:marker:enable")}};this.disableProgressMarker=function(){if(aP){V("player:progress:marker:disable")}};this.invalidateProgressMarker=function(){if(aP){V("player:progress:marker:invalidate")}};this.setupBackground=function(a8){if(aP){V("player:background:"+a.strFullCheck(a8,"default"))}};this.setupTrigger=function(a8,a9,ba){if(aP&&a.isFullStr(a8)&&a.isFullStr(a9)){if(ba===true){V("trigger:"+a8+":shot:"+a9)}else{V("trigger:"+a8+":"+a9)}}};this.clearTrigger=function(a8){if(aP&&a.isFullStr(a8)){V("trigger:"+a8+":none")}};this.refreshPlayer=function(){if(aP){V("player:refresh")}};this.resetPlayer=function(){if(aP){V("player:reset")}};this.cancelResume=function(){if(aP){V("resume:cancel")}};this.requestData=function(a8,ba,a9){if(aP){ar(a8,ba,a9)}else{Y(ba,{error:"Plugin not ready"})}};this.requestInteractionResponse=function(a8,ba,a9){if(a.isFullStr(a8)){this.requestData("response:request:interaction:"+a8,ba,a9!=null?{requestData:a9}:null)
|
||||
}else{Y(ba,{error:"Data ID is invalid: '"+a8+"'"})}};this.validateSettings=function(a8){t.invalidateSettings();this.requestData("info",function(a9){t.validateSettings(a9);Y(a8,a9)})};this.onValidatedSettings=function(a8){if(!t.areSettingsValidated()&&!aO){aO=true;this.validateSettings(function(){aO=false})}t.onValidatedSettings(a8)};this.triggerEvent=function(a8,a9){if(aP&&a.isFullStr(a8)){V("event:"+a8,a9)}};this.setupSteam=function(a8){af(a8)};this.createSteam=function(a8){return aq(a8)};this.resolveToken=function(a8,a9){return M(a8,a9)};this.transformString=function(a8,a9){return aG(a8,a9)};this.normalizeString=function(a8,a9){return ad(a8,a9)};this.transformStringAsync=function(ba,bb,a9){var a8=aG(ba,bb);if(a.isFullStr(a8)){this.requestData("string:transform:"+a8,function(bc){Y(a9,{string:a.strFullCheck(bc.string,null)})})}else{Y(a9,{string:null})}};this.normalizeStringAsync=function(a9,ba,a8){if(a.isFullStr(a9)){this.requestData("string:normalize:"+a9,function(bb){Y(a8,{string:ad(bb.string,ba)})
|
||||
})}else{Y(a8,{string:null})}};this.createHashKey=function(a8,a9){return n.createHashKey(a8,a9)};this.clearDeviceId=function(){n.clearDeviceId()};this.getDeviceId=function(a8){return n.getDeviceId(a8)};this.requestDeviceId=function(a8){this.requestData("info:extended",function(a9){if(a9.error!=null){Y(a8,{error:a9.error})}else{Y(a8,{deviceId:n.getDeviceId(a9)})}})};this.hasContentObservers=function(){return aW.hasObservers()};this.addContentObserver=function(a8,a9){aW.addObserver(a8,a9);ah(a8)};this.removeContentObserver=function(a8){aW.removeObserver(a8);ah()};this.clearContentObservers=function(){aW.clear();ah()};this.init=function(){if(!ao){aJ();aH();ai()}};this.commit=function(){if(aP){U();a0()}};this.isInitialized=function(){return ao};this.isReady=function(){return aP};this.startPlayback=function(a8){if(aP){aT(z.PLAYING,true);U();a0();if(a8===true){a4()}}};this.stopPlayback=function(){if(aP){this.setEnded(true);U();ac()}};this.cancelPlayback=function(){if(aP){V("player:eject")}};this.startLoading=function(){if(aP){aF.start(function(){R=true;
|
||||
V("player:busy:start:loading")})}};this.stopLoading=function(){if(aP){aF.stop();if(R){R=false;V("player:busy:stop:loading")}}}};var y=new function(){var N="interactionPlugin";var ar="irq";var ah=10;var aK=30000;var Z=new p("j3RZ!=Y$M5TZ#JPem'P1i(Tf?X3WcGlyCqNeXRbp02HL]I~r!IfO(pvxQ7At%9yq.5=)wm@0o?Js[sUbUH416uhd;_S/Qr,w7vW]jBgND;GazhCL+D%z~8ni+n-B_E-KK42tl[OAV@*E.Ya6$V,&kF)o&Mg98#'ucx/dk*SF");var S=null;var R=false;var au=new o(1000);var aC=false;var aj=false;var ad=null;var aB=false;var aG=null;var aa=function(aO){S=new p(aO)};var ak=function(aO){if(aC){if(aO=="local"){return S!=null?S.createSteam():null}return Z.createSteam()}return null};var L=function(aO,aP){if(aC){if(aP=="local"){return S!=null?S.resolveToken(aO):null}return Z.resolveToken(aO)}return null};var av=function(aO,aP){if(aC){if(aP=="local"){return S!=null?S.transformString(aO):null}else{if(aP=="global"){return Z.transformString(aO)}else{if(aP=="shared"){return n.transformString(S!=null?S.transformString(aO):aO)}}}return Z.transformString(S!=null?S.transformString(aO):aO)
|
||||
}return null};var Y=function(aO,aP){if(aC){if(aP=="local"){return S!=null?S.normalizeString(aO):null}else{if(aP=="global"){return Z.normalizeString(aO)}else{if(aP=="shared"){return S!=null?S.normalizeString(n.normalizeString(aO)):n.normalizeString(aO)}}}return S!=null?S.normalizeString(Z.normalizeString(aO)):Z.normalizeString(aO)}return null};var aL=0;var aF={};var am=function(aQ){aL++;var aO=ar+aL+"_"+g.getTimestamp();var aP={timeout:new o(aK),callback:aQ};aF[aO]=aP;aP.timeout.start(function(){ao(aO,{error:"Request timed out"})});return aO};var ao=function(aO,aQ){if(aO!=null){var aP=aF[aO];if(aP!=null){aP.timeout.stop();delete aF[aO];V(aP.callback,aQ)}}};var V=function(aQ,aO){if(typeof aQ=="function"){try{aQ(aO)}catch(aP){af("Callback error",aP)}}};var aJ=new h();var ae=new o(500);var ap=null;var ax=null;var ab=function(aO){if(aO!=null){if(t.isSameContentState(ap,aO)){if(!t.isSameContentState(ax,aO)){if(ax==null){aO.init=true}ax=t.createChangedContentState(ax,aO);aJ.notifyObservers(ax)
|
||||
}}else{ap=aO}}ac()};var aA=function(){if(aC){al("info:content",function(aO){ab(aO.info!=null&&aO.info.content!=null?aO.info.content.state:null)})}else{ac()}};var ac=function(aO){if(aJ.hasObservers()){if(a.isFullStr(aO)&&ax!=null){aJ.notifyObserver(aO,ax)}ae.start(aA)}else{ap=null;ax=null;ae.stop()}};var T=function(aO,aP){if(a.isFullStr(aO)){W({action:aO,data:aP!=null?aP:null})}};var aw=function(aP,aO){if(a.isFullStr(aP)){if(aO!==false){T("logger:debug:"+aP)}}};var at=function(aP,aO,aQ){if(a.isFullStr(aP)){if(aO!==false){T("logger:success:"+aP,{show:aQ!==false})}else{if(aQ!==false){T("success:"+aP)}}}};var aN=function(aP,aO,aQ){if(a.isFullStr(aP)){if(aO!==false){T("logger:info:"+aP,{show:aQ!==false})}else{if(aQ!==false){T("info:"+aP)}}}};var ag=function(aP,aO,aQ){if(a.isFullStr(aP)){if(aO!==false){T("logger:warn:"+aP,{show:aQ!==false})}else{if(aQ!==false){T("warn:"+aP)}}}};var an=function(aP,aO,aQ){if(a.isFullStr(aP)){if(aO!==false){T("logger:error:"+aP,{show:aQ!==false})}else{if(aQ!==false){T("error:"+aP)
|
||||
}}}};var P=function(aO,aP){if(a.isFullStr(aO)&&aP!=null){if(typeof aP=="object"){T(aO+":data",aP)}else{T(aO+":"+aP)}}};var aE=function(aO){P("menu",aO)};var X=function(aO){P("content",aO)};var U=function(aO){P("panel",aO)};var al=function(aO,aQ,aP){if(a.isFullStr(aO)){if(aP==null){aP={}}aP.requestId=am(aQ);aP.dataId=aO;T("interaction:commit:"+aO,aP)}else{V(aQ,{error:"Data ID is invalid: '"+aO+"'"})}};var af=function(aO,aP){if(aO!=null&&aP!=null){if(aP.name!=null&&aP.message!=null){an("Interaction: "+aO+": "+aP.name+": "+aP.message)}else{an("Interaction: "+aO+": "+aP)}}};var az=function(aO,aP){T("response:"+aO,aP)};var ai=function(aO,aP){ao(aO,aP)};var K=function(aP,aO,aR){if(typeof ad.handleRequest=="function"){try{ad.handleRequest(aO,aR,function(aS){az(aP,aS)})}catch(aQ){af("Handle request failed",aQ);az(aP)}}else{az(aP)}};var aM=function(aP){if(aC&&aP!=null&&ad!=null){if(typeof ad.handleEvent=="function"){try{ad.handleEvent(aP)}catch(aO){af("Handle event failed",aO)}}}};var aq=function(aS){if(aC&&aS!=null&&ad!=null){if(a.isFullStr(aS.requestId)&&a.isFullStr(aS.dataId)){K(aS.requestId,aS.dataId,aS.data)
|
||||
}else{if(aS.data!=null&&a.isFullStr(aS.data.requestId)&&a.isFullStr(aS.data.dataId)){var aP={};var aR=aS.data.dataId;var aO=aR.indexOf(":");if(aO>0){aR=aR.substr(0,aO)}aP[aR]=aS[aR]!=null?aS[aR]:null;aP.error=a.strFullCheck(aS.error,null);ai(aS.data.requestId,aP)}else{if(typeof ad.handleData=="function"){try{ad.handleData(aS)}catch(aQ){af("Handle data failed",aQ)}}}}}};var aH=function(aO){aG=aO!=null&&aO.length>0?aO:null};var Q=function(){if(aG!=null&&aG.length>0){for(var aO=0;aO<aG.length;aO++){aq(aG[aO])}}aG=null};var aI=function(aO){if(aC&&aO!=null){if(aG==null){aG=[]}if(aG.length>=ah){aG.shift()}aG.push(aO)}};var O=function(aO){if(!aj||aO===true){aj=true;if(ad!=null&&typeof ad.init=="function"){try{ad.init()}catch(aP){af("Call init failed",aP)}}}};var aD=function(aO){if(!aC||aO===true){aC=true;if(ad!=null&&typeof ad.ready=="function"){try{ad.ready()}catch(aP){af("Call ready failed",aP)}}if(ad!=null){Q()}}};var ay=function(){aC=false;e.addEventListener("message",function(aO){if(n.checkOrigin(aO.origin)){M(aO.data)
|
||||
}},false);T("interaction:init")};var M=function(aO){if(aj&&aO!=null&&aO.type===N){if(aO.init===1&&aC){return}if(aO.init===1){aH(aO.data);aD()}else{if(aO.data!=null){if(a.isFullStr(aO.data.event)){aM(aO.data)}else{if(ad!=null){aq(aO.data)}else{aI(aO.data)}}}}}};var W=function(aP){if(e.parent!=null&&aP!=null){aP.type=N;aP.sender="plugin";aP.target="app";try{e.parent.postMessage(aP,"*")}catch(aO){if(e.console!=null){console.error("Post message failed",aO)}}}};this.setupHandler=function(aO){ad=aO;if(aj){O(true)}if(aC){aD(true)}};this.setLoadingDelay=function(aO){au.delay=a.strToNum(aO,au.delay)};this.getLoadingDelay=function(){return au.delay};this.executeAction=function(aO,aP){if(aC){T(aO,aP)}};this.debug=function(aP,aO){if(aC){aw(aP,aO)}};this.success=function(aP,aO,aQ){if(aC){at(aP,aO,aQ)}};this.info=function(aP,aO,aQ){if(aC){aN(aP,aO,aQ)}};this.warn=function(aP,aO,aQ){if(aC){ag(aP,aO,aQ)}};this.error=function(aP,aO,aQ){if(aC){an(aP,aO,aQ)}};this.showMenu=function(aO){if(aC){aE(aO)}};this.showContent=function(aO){if(aC){X(aO)
|
||||
}};this.showPanel=function(aO){if(aC){U(aO)}};this.requestData=function(aO,aQ,aP){if(aC){al(aO,aQ,aP)}else{V(aQ,{error:"Plugin not ready"})}};this.requestPlayerResponse=function(aO,aQ,aP){if(a.isFullStr(aO)){this.requestData("response:request:player:"+aO,aQ,aP!=null?{requestData:aP}:null)}else{V(aQ,{error:"Data ID is invalid: '"+aO+"'"})}};this.validateSettings=function(aO){t.invalidateSettings();this.requestData("info",function(aP){t.validateSettings(aP);V(aO,aP)})};this.onValidatedSettings=function(aO){if(!t.areSettingsValidated()&&!aB){aB=true;this.validateSettings(function(){aB=false})}t.onValidatedSettings(aO)};this.triggerEvent=function(aO,aP){if(aC&&a.isFullStr(aO)){T("event:"+aO,aP)}};this.setupSteam=function(aO){aa(aO)};this.createSteam=function(aO){return ak(aO)};this.resolveToken=function(aO,aP){return L(aO,aP)};this.transformString=function(aO,aP){return av(aO,aP)};this.normalizeString=function(aO,aP){return Y(aO,aP)};this.transformStringAsync=function(aQ,aR,aP){var aO=av(aQ,aR);
|
||||
if(a.isFullStr(aO)){this.requestData("string:transform:"+aO,function(aS){V(aP,{string:a.strFullCheck(aS.string,null)})})}else{V(aP,{string:null})}};this.normalizeStringAsync=function(aP,aQ,aO){if(a.isFullStr(aP)){this.requestData("string:normalize:"+aP,function(aR){V(aO,{string:Y(aR.string,aQ)})})}else{V(aO,{string:null})}};this.createHashKey=function(aO,aP){return n.createHashKey(aO,aP)};this.clearDeviceId=function(){n.clearDeviceId()};this.getDeviceId=function(aO){return n.getDeviceId(aO)};this.requestDeviceId=function(aO){this.requestData("info:extended",function(aP){if(aP.error!=null){V(aO,{error:aP.error})}else{V(aO,{deviceId:n.getDeviceId(aP)})}})};this.hasContentObservers=function(){return aJ.hasObservers()};this.addContentObserver=function(aO,aP){aJ.addObserver(aO,aP);ac(aO)};this.removeContentObserver=function(aO){aJ.removeObserver(aO);ac()};this.clearContentObservers=function(){aJ.clear();ac()};this.init=function(){if(!aj){ay();O()}};this.isInitialized=function(){return aj};this.isReady=function(){return aC
|
||||
};this.startLoading=function(){if(aC){au.start(function(){R=true;T("interaction:busy:start:loading")})}};this.stopLoading=function(){if(aC){au.stop();if(R){R=false;T("interaction:busy:stop:loading")}}}};e.TVXSettings=k;e.TVXStyles=l;e.TVXTools=a;e.TVXDateTools=g;e.TVXDateFormatter=H;e.TVXPropertyTools=F;e.TVXVideoState=z;e.TVXAction=f;e.TVXCookies=J;e.TVXStorage=d;e.TVXUrlParams=B;e.TVXOptions=C;e.TVXObservers=h;e.TVXEventObservers=I;e.TVXQueue=x;e.TVXWorker=c;e.TVXDelay=o;e.TVXClick=E;e.TVXAjax=j;e.TVXLogLevel=s;e.TVXLogger=v;e.TVXDictionary=q;e.TVXClock=i;e.TVXServices=A;e.TVXDataLoader=u;e.TVXDataService=D;e.TVXBlobService=r;e.TVXRequestService=w;e.TVXBusyService=b;e.TVXPluginTools=t;e.TVXVideoPlugin=G;e.TVXInteractionPlugin=y})(window,document);
|
||||
@@ -1,22 +0,0 @@
|
||||
package msx
|
||||
|
||||
import "github.com/gin-gonic/gin"
|
||||
|
||||
func SetupRoute(route *gin.RouterGroup) {
|
||||
route.GET("/msx/start.json", msxStart)
|
||||
route.GET("/msx/torrents", msxTorrents)
|
||||
route.GET("/msx/playlist", msxPlaylist)
|
||||
route.GET("/msx/playlist/*fname", msxPlaylist)
|
||||
|
||||
route.GET("/msx/html5x.html", func(c *gin.Context) {
|
||||
c.Data(200, "text/html; charset=utf-8", Msxhtml5xhtml)
|
||||
})
|
||||
|
||||
route.GET("/msx/tizen.html", func(c *gin.Context) {
|
||||
c.Data(200, "text/html; charset=utf-8", Msxtizenhtml)
|
||||
})
|
||||
|
||||
route.GET("/msx/tvx-plugin.min.js", func(c *gin.Context) {
|
||||
c.Data(200, "text/javascript; charset=utf-8", Msxtvxpluginminjs)
|
||||
})
|
||||
}
|
||||
Reference in New Issue
Block a user