@wisdomgarden/mobile-assets 0.0.73 → 0.0.75
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/package.json +1 -1
- package/version_aligner.json +8 -0
- package/version_update_android.json +4 -4
- package/version_update_ios.json +3 -3
- package/youtube-video-analysis.html +163 -256
package/package.json
CHANGED
package/version_aligner.json
CHANGED
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
{
|
|
2
|
-
"version": "2.
|
|
3
|
-
"update_type":
|
|
4
|
-
"allow_lowest_version": "2.
|
|
2
|
+
"version": "2.15.0",
|
|
3
|
+
"update_type": 0,
|
|
4
|
+
"allow_lowest_version": "2.14.5",
|
|
5
5
|
"app_store_url": "https://play.google.com/store/apps/details?id=com.wisdomgarden.trpc",
|
|
6
|
-
"app_store_url_cn": "https://mobile-download.tronclass.com.cn/mobile-2.0/app/android/app-release-2.
|
|
6
|
+
"app_store_url_cn": "https://mobile-download.tronclass.com.cn/mobile-2.0/app/android/app-release-2.15.0.apk",
|
|
7
7
|
"release_note_en_us": "- Fix bugs and improve system performance.",
|
|
8
8
|
"release_note_zh_hans": "- 已知问题修复和性能优化",
|
|
9
9
|
"release_note_zh_hant": "- 已知問題修復和性能優化"
|
package/version_update_ios.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
|
-
"version": "2.
|
|
3
|
-
"update_type":
|
|
4
|
-
"allow_lowest_version": "2.
|
|
2
|
+
"version": "2.15.0",
|
|
3
|
+
"update_type": 0,
|
|
4
|
+
"allow_lowest_version": "2.14.5",
|
|
5
5
|
"app_store_url": "https://apps.apple.com/app/scratch/id973028199",
|
|
6
6
|
"release_note_en_us": "- Fix bugs and improve system performance.",
|
|
7
7
|
"release_note_zh_hans": "- 已知问题修复和性能优化",
|
|
@@ -1,285 +1,192 @@
|
|
|
1
1
|
<!DOCTYPE html>
|
|
2
2
|
<html>
|
|
3
3
|
<head>
|
|
4
|
+
<meta charset="UTF-8">
|
|
5
|
+
<meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0">
|
|
4
6
|
<style>
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
width: 100%;
|
|
8
|
-
height: 100%;
|
|
9
|
-
top: 0;
|
|
10
|
-
left: 0;
|
|
11
|
-
bottom: 0;
|
|
12
|
-
right: 0;
|
|
13
|
-
display: flex;
|
|
14
|
-
flex-direction: column;
|
|
15
|
-
justify-content: center;
|
|
16
|
-
align-items: center;
|
|
17
|
-
}
|
|
7
|
+
* { box-sizing: border-box; -webkit-tap-highlight-color: transparent; }
|
|
8
|
+
body, html { margin: 0; padding: 0; background: #000; width: 100%; height: 100%; overflow: hidden; font-family: sans-serif; }
|
|
18
9
|
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
}
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
left: 0;
|
|
27
|
-
top: -10px;
|
|
28
|
-
right: 0;
|
|
29
|
-
bottom: 0;
|
|
30
|
-
z-index: 13;
|
|
31
|
-
display: flex;
|
|
32
|
-
-webkit-box-pack: center;
|
|
33
|
-
-ms-flex-pack: center;
|
|
34
|
-
-webkit-justify-content: center;
|
|
35
|
-
-moz-justify-content: center;
|
|
36
|
-
justify-content: center;
|
|
37
|
-
-webkit-box-align: center;
|
|
38
|
-
-ms-flex-align: center;
|
|
39
|
-
-webkit-align-items: center;
|
|
40
|
-
-moz-align-items: center;
|
|
41
|
-
align-items: center;
|
|
42
|
-
-webkit-transition: 0.2s opacity linear;
|
|
43
|
-
transition: 0.2s opacity linear;
|
|
44
|
-
}
|
|
45
|
-
.loading{
|
|
46
|
-
padding: 25px;
|
|
47
|
-
min-width: 205px;
|
|
48
|
-
max-width: 80%;
|
|
49
|
-
height: 60px;
|
|
50
|
-
background-color: rgb(4, 6, 6);
|
|
51
|
-
border-radius: 15px;
|
|
52
|
-
color: #fff;
|
|
53
|
-
text-align: center;
|
|
54
|
-
text-overflow: ellipsis;
|
|
55
|
-
font-size: 15px;
|
|
56
|
-
display: flex;
|
|
57
|
-
justify-content: center;
|
|
58
|
-
align-items: center;
|
|
59
|
-
width: 400px;
|
|
60
|
-
}
|
|
61
|
-
.loading>*{
|
|
62
|
-
flex: 1;
|
|
63
|
-
}
|
|
64
|
-
.spinner svg {
|
|
65
|
-
width: 40px;
|
|
66
|
-
height: 40px;
|
|
67
|
-
}
|
|
68
|
-
.spinner {
|
|
69
|
-
stroke: #1BB6B7;
|
|
70
|
-
fill: #1BB6B7;
|
|
71
|
-
}
|
|
72
|
-
.loading-text{
|
|
73
|
-
font-size: 25px;
|
|
74
|
-
}
|
|
10
|
+
.video-container { position: relative; width: 100vw; height: 100vh; display: flex; justify-content: center; align-items: center; overflow: hidden; background: #000; }
|
|
11
|
+
#player { position: absolute; width: 100%; height: 100%; }
|
|
12
|
+
|
|
13
|
+
#loader { position: absolute; top: 0; right: 0; bottom: 0; left: 0; z-index: 100; display: flex; flex-direction: column; justify-content: center; align-items: center; background: #000; color: #fff; text-align: center; padding: 20px; }
|
|
14
|
+
.spin { width: 40px; height: 40px; border: 3px solid rgba(27,182,183,0.3); border-top: 3px solid #1BB6B7; border-radius: 50%; animation: s 0.8s linear infinite; margin-bottom: 10px; }
|
|
15
|
+
@keyframes s { to { transform: rotate(360deg); } }
|
|
16
|
+
.loading-text { font-size: 16px; letter-spacing: 0.5px; }
|
|
75
17
|
</style>
|
|
76
|
-
<
|
|
77
|
-
<script src="https://cdn.jsdelivr.net/npm/jquery@1.11.2/dist/jquery.min.js" integrity="sha256-1OxYPHYEAB+HIz0f4AdsvZCfFaX4xrTD9d2BtGLXnTI=" crossorigin="anonymous"></script>
|
|
18
|
+
<script src="https://cdn.jsdelivr.net/npm/jquery@1.11.2/dist/jquery.min.js"></script>
|
|
78
19
|
</head>
|
|
79
20
|
<body>
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
<div class="loading-close">
|
|
85
|
-
<i class="icon-svg icon-svg-cross icon-close"></i>
|
|
86
|
-
</div>
|
|
87
|
-
</div>
|
|
21
|
+
|
|
22
|
+
<div id="loader">
|
|
23
|
+
<div class="spin"></div>
|
|
24
|
+
<span class="loading-text"></span>
|
|
88
25
|
</div>
|
|
89
26
|
|
|
90
|
-
<div class="video-container">
|
|
27
|
+
<div class="video-container" id="mainContainer">
|
|
91
28
|
<div id="player"></div>
|
|
92
29
|
</div>
|
|
93
30
|
|
|
94
|
-
|
|
95
31
|
<script>
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
32
|
+
const WGP_Tracker = {
|
|
33
|
+
params: (function() {
|
|
34
|
+
const urlP = new URLSearchParams(window.location.search);
|
|
35
|
+
const p = {};
|
|
36
|
+
const keys = [
|
|
37
|
+
'videoId', 'courseId', 'moduleId', 'syllabusId', 'activityId',
|
|
38
|
+
'isMobile', 'userId', 'orgId', 'depId', 'actionType', 'endpoint',
|
|
39
|
+
'url', 'statisticSession', 'apiSession', 'apiUrl', 'currentLang',
|
|
40
|
+
'isTeacher', 'isStudent', 'ts', 'orgName', 'orgCode',
|
|
41
|
+
'userNo', 'userName', 'courseCode', 'depName', 'depCode'
|
|
42
|
+
];
|
|
43
|
+
keys.forEach(key => { p[key] = urlP.get(key) || ''; });
|
|
44
|
+
return p;
|
|
45
|
+
})(),
|
|
46
|
+
|
|
47
|
+
state: {
|
|
48
|
+
player: null,
|
|
49
|
+
ready: false,
|
|
50
|
+
intervalId: null,
|
|
51
|
+
startAt: null,
|
|
52
|
+
lastPostTime: null,
|
|
53
|
+
videoDuration: 0,
|
|
54
|
+
threshold: 60 * 1000
|
|
55
|
+
},
|
|
56
|
+
|
|
57
|
+
i18n: {
|
|
58
|
+
getDict() {
|
|
59
|
+
const lang = WGP_Tracker.params.currentLang;
|
|
60
|
+
if (lang === 'zh-Hans') return { loading: '正在加载...', loadTimeoutError: '加载超时,请稍后重试,或在web端进行观看', errorTips: '受YouTube限制,该视频只能在web端观看' };
|
|
61
|
+
if (lang === 'zh-Hant') return { loading: '正在加載...', loadTimeoutError: '加載超時,請稍後重試,或在web端進行觀看', errorTips: '受YouTube限制,該影片只能在web端觀看' };
|
|
62
|
+
return { loading: 'Loading...', loadTimeoutError: 'Loading timed out, please try again later, or watch it on web', errorTips: 'Limited by YouTube, the video can only be viewed on the web.'};
|
|
63
|
+
}
|
|
64
|
+
},
|
|
65
|
+
|
|
66
|
+
initInterval() {
|
|
67
|
+
this.state.startAt = Math.round(this.state.player.getCurrentTime());
|
|
68
|
+
this.state.lastPostTime = new Date();
|
|
69
|
+
|
|
70
|
+
if (this.state.intervalId) clearInterval(this.state.intervalId);
|
|
71
|
+
this.state.intervalId = setInterval(() => {
|
|
72
|
+
const nowTime = Math.round(this.state.player.getCurrentTime());
|
|
73
|
+
const duration = nowTime - this.state.startAt;
|
|
74
|
+
if (duration > 0) {
|
|
75
|
+
this.reportProgress(this.state.startAt, nowTime, duration);
|
|
76
|
+
this.state.startAt = nowTime;
|
|
77
|
+
}
|
|
78
|
+
this.state.lastPostTime = new Date();
|
|
79
|
+
}, this.state.threshold);
|
|
80
|
+
},
|
|
102
81
|
|
|
103
|
-
|
|
82
|
+
stopAndFlush() {
|
|
83
|
+
if (this.state.intervalId) clearInterval(this.state.intervalId);
|
|
84
|
+
if (this.state.startAt === null) return;
|
|
104
85
|
|
|
105
|
-
|
|
86
|
+
const nowTime = Math.round(this.state.player.getCurrentTime());
|
|
87
|
+
const realDuration = Math.round((new Date() - this.state.lastPostTime) / 1000);
|
|
106
88
|
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
89
|
+
if (realDuration > 0) {
|
|
90
|
+
this.reportProgress(this.state.startAt, nowTime, realDuration);
|
|
91
|
+
}
|
|
92
|
+
this.state.startAt = null;
|
|
93
|
+
},
|
|
94
|
+
|
|
95
|
+
reportProgress(startPos, endPos, duration) {
|
|
96
|
+
const p = this.params;
|
|
97
|
+
|
|
98
|
+
const videoData = {
|
|
99
|
+
is_mobile: p.isMobile === "true" || p.isMobile === true,
|
|
100
|
+
is_teacher: p.isTeacher === "true" || p.isTeacher === true,
|
|
101
|
+
user_id: Number(p.userId),
|
|
102
|
+
org_id: Number(p.orgId),
|
|
103
|
+
dep_id: Number(p.depId),
|
|
104
|
+
course_id: Number(p.courseId),
|
|
105
|
+
module_id: Number(p.moduleId),
|
|
106
|
+
syllabus_id: Number(p.syllabusId),
|
|
107
|
+
activity_id: Number(p.activityId),
|
|
108
|
+
start_at: Number(startPos),
|
|
109
|
+
end_at: Number(endPos),
|
|
110
|
+
duration: Number(duration),
|
|
111
|
+
ts: Number(p.ts),
|
|
112
|
+
user_no: p.userNo,
|
|
113
|
+
user_name: p.userName,
|
|
114
|
+
org_name: p.orgName,
|
|
115
|
+
org_code: p.orgCode,
|
|
116
|
+
dep_name: p.depName,
|
|
117
|
+
dep_code: p.depCode,
|
|
118
|
+
course_code: p.courseCode,
|
|
119
|
+
action_type: p.actionType
|
|
120
|
+
};
|
|
121
|
+
|
|
122
|
+
$.ajax({
|
|
123
|
+
type: 'POST',
|
|
124
|
+
headers: { "SESSION": p.apiSession },
|
|
125
|
+
contentType: 'application/json; charset=utf-8',
|
|
126
|
+
url: `${p.url}/${p.endpoint}`,
|
|
127
|
+
data: JSON.stringify(videoData)
|
|
128
|
+
});
|
|
129
|
+
|
|
130
|
+
$.ajax({
|
|
131
|
+
type: 'POST',
|
|
132
|
+
headers: { 'X-SESSION-ID': p.apiSession },
|
|
133
|
+
contentType: 'application/json; charset=utf-8',
|
|
134
|
+
url: `${p.apiUrl}/api/course/activities-read/${p.activityId}`,
|
|
135
|
+
data: JSON.stringify({
|
|
136
|
+
start: startPos,
|
|
137
|
+
end: endPos,
|
|
138
|
+
duration: this.state.videoDuration
|
|
139
|
+
})
|
|
140
|
+
});
|
|
113
141
|
}
|
|
114
|
-
|
|
115
|
-
}
|
|
116
|
-
|
|
117
|
-
let videoId = getVariable('videoId');
|
|
118
|
-
let courseId = getVariable('courseId');
|
|
119
|
-
let moduleId = getVariable('moduleId');
|
|
120
|
-
let syllabusId = getVariable('syllabusId');
|
|
121
|
-
let activityId = getVariable('activityId');
|
|
122
|
-
let isMobile = getVariable('isMobile');
|
|
123
|
-
let userId = getVariable('userId');
|
|
124
|
-
let orgId = getVariable('orgId');
|
|
125
|
-
let depId = getVariable('depId');
|
|
126
|
-
let actionType = getVariable('actionType');
|
|
127
|
-
let endpoint = getVariable('endpoint');
|
|
128
|
-
let url = getVariable('url');
|
|
129
|
-
let statisticSession = getVariable('statisticSession');
|
|
130
|
-
let apiSession = getVariable('apiSession');
|
|
131
|
-
let apiUrl = getVariable('apiUrl');
|
|
132
|
-
let currentLang = getVariable('currentLang');
|
|
133
|
-
let isTeacher = getVariable('isTeacher');
|
|
134
|
-
let isStudent = getVariable('isStudent');
|
|
135
|
-
let ts = getVariable('ts');
|
|
136
|
-
let masterCourseId = getVariable('masterCourseId');
|
|
137
|
-
let orgName = getVariable('orgName');
|
|
138
|
-
let orgCode = getVariable('orgCode');
|
|
139
|
-
let userNo = getVariable('userNo');
|
|
140
|
-
let userName = getVariable('userName');
|
|
141
|
-
let courseCode = getVariable('courseCode');
|
|
142
|
-
let courseName = getVariable('courseName');
|
|
143
|
-
let depName = getVariable('depName');
|
|
144
|
-
let depCode = getVariable('depCode');
|
|
145
|
-
|
|
146
|
-
let start, end, currentStartTime, currentEndTime, duration, intervalId, videoDuration, THRESHOLD=1 * 60 * 1000, unStarted = false, errorTips;
|
|
147
|
-
|
|
148
|
-
if (currentLang === 'zh-Hans') {
|
|
149
|
-
errorTips = '受YouTube限制,该视频只能在web端观看';
|
|
150
|
-
loadingErr = '加载超时,请稍后重试,或在web端进行观看';
|
|
151
|
-
$('.loading-text').text('正在加载...');
|
|
152
|
-
} else if (currentLang === 'zh-Hant') {
|
|
153
|
-
errorTips = '受YouTube限制,該影片只能在web端觀看';
|
|
154
|
-
loadingErr = '加載超時,請稍後重試,或在web端進行觀看';
|
|
155
|
-
$('.loading-text').text('正在加載...');
|
|
156
|
-
} else {
|
|
157
|
-
errorTips = 'Limited by YouTube, the video can only be viewed on the web.';
|
|
158
|
-
loadingErr = 'Loading timed out, please try again later, or watch it on web';
|
|
159
|
-
$('.loading-text').text('Loading...');
|
|
160
|
-
}
|
|
142
|
+
};
|
|
161
143
|
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
144
|
+
const dict = WGP_Tracker.i18n.getDict();
|
|
145
|
+
$('.loading-text').text(dict.loading);
|
|
146
|
+
|
|
147
|
+
window.onYouTubeIframeAPIReady = function() {
|
|
148
|
+
WGP_Tracker.state.player = new YT.Player("player", {
|
|
149
|
+
videoId: WGP_Tracker.params.videoId || undefined,
|
|
150
|
+
playerVars: {
|
|
151
|
+
'playsinline': 0,
|
|
152
|
+
'rel': 0,
|
|
153
|
+
'cc_load_policy': 1,
|
|
154
|
+
'disablekb': 1
|
|
155
|
+
},
|
|
168
156
|
events: {
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
currentStartTime = new Date();
|
|
185
|
-
intervalId = setInterval(function () {
|
|
186
|
-
end = Math.round(player.getCurrentTime());
|
|
187
|
-
if(end - start > 0) {
|
|
188
|
-
duration = end - start;
|
|
189
|
-
post();
|
|
157
|
+
onReady: (e) => {
|
|
158
|
+
WGP_Tracker.state.ready = true;
|
|
159
|
+
WGP_Tracker.state.videoDuration = e.target.getDuration();
|
|
160
|
+
e.target.playVideo();
|
|
161
|
+
$("#loader").fadeOut();
|
|
162
|
+
},
|
|
163
|
+
onStateChange: (e) => {
|
|
164
|
+
if (e.data == YT.PlayerState.PLAYING) {
|
|
165
|
+
WGP_Tracker.initInterval();
|
|
166
|
+
} else if (e.data == YT.PlayerState.PAUSED || e.data == YT.PlayerState.ENDED || e.data == YT.PlayerState.BUFFERING) {
|
|
167
|
+
WGP_Tracker.stopAndFlush();
|
|
168
|
+
}
|
|
169
|
+
},
|
|
170
|
+
onError: () => {
|
|
171
|
+
alert(dict.errorTips);
|
|
190
172
|
}
|
|
191
|
-
currentStartTime = new Date();
|
|
192
|
-
return start = end;
|
|
193
|
-
}, THRESHOLD);
|
|
194
|
-
} else if(event.data == YT.PlayerState.PAUSED || event.data == YT.PlayerState.ENDED || event.data == YT.PlayerState.BUFFERING) {
|
|
195
|
-
if(intervalId) {
|
|
196
|
-
clearInterval(intervalId);
|
|
197
|
-
}
|
|
198
|
-
end = Math.round(player.getCurrentTime());
|
|
199
|
-
currentEndTime = new Date();
|
|
200
|
-
duration = Math.round((currentEndTime - currentStartTime)/1000);
|
|
201
|
-
if(start != null && duration > 0) {
|
|
202
|
-
post();
|
|
203
|
-
start = null;
|
|
204
173
|
}
|
|
205
|
-
}
|
|
206
|
-
}
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
function post() {
|
|
210
|
-
let videoData = {
|
|
211
|
-
is_mobile: isMobile,
|
|
212
|
-
user_id: userId,
|
|
213
|
-
org_id: orgId,
|
|
214
|
-
dep_id: depId,
|
|
215
|
-
course_id: courseId,
|
|
216
|
-
module_id: moduleId,
|
|
217
|
-
syllabus_id: syllabusId,
|
|
218
|
-
activity_id: activityId,
|
|
219
|
-
action_type: actionType,
|
|
220
|
-
start_at: start,
|
|
221
|
-
end_at: end,
|
|
222
|
-
duration: duration,
|
|
223
|
-
is_teacher: isTeacher,
|
|
224
|
-
is_student: isStudent,
|
|
225
|
-
ts: ts,
|
|
226
|
-
master_course_id: masterCourseId,
|
|
227
|
-
org_name: orgName,
|
|
228
|
-
org_code: orgCode,
|
|
229
|
-
user_no: userNo,
|
|
230
|
-
user_name: userName,
|
|
231
|
-
course_code: courseCode,
|
|
232
|
-
course_name: courseName,
|
|
233
|
-
dep_name: depName,
|
|
234
|
-
dep_code: depCode,
|
|
235
|
-
};
|
|
236
|
-
|
|
237
|
-
$.ajax({
|
|
238
|
-
type: 'POST',
|
|
239
|
-
headers: {SESSION: statisticSession},
|
|
240
|
-
contentType: 'application/json; charset=utf-8',
|
|
241
|
-
url: `${url}/${endpoint}`,
|
|
242
|
-
data: JSON.stringify(videoData),
|
|
243
|
-
dataType: "json",
|
|
244
|
-
processData: true
|
|
245
|
-
});
|
|
246
|
-
|
|
247
|
-
let logPlayInfo = {
|
|
248
|
-
start: start,
|
|
249
|
-
end: end,
|
|
250
|
-
duration: videoDuration
|
|
251
|
-
};
|
|
252
|
-
|
|
253
|
-
$.ajax({
|
|
254
|
-
type: 'POST',
|
|
255
|
-
headers: {'X-SESSION-ID': apiSession},
|
|
256
|
-
contentType: 'application/json; charset=utf-8',
|
|
257
|
-
url: `${apiUrl}/api/course/activities-read/${activityId}`,
|
|
258
|
-
data: JSON.stringify(logPlayInfo),
|
|
259
|
-
dataType: "json",
|
|
260
|
-
processData: true
|
|
261
174
|
});
|
|
262
|
-
}
|
|
175
|
+
};
|
|
263
176
|
|
|
264
|
-
window.onbeforeunload =
|
|
265
|
-
if(
|
|
266
|
-
end = Math.round(player.getCurrentTime());
|
|
267
|
-
currentEndTime = new Date();
|
|
268
|
-
duration = Math.round((currentEndTime - currentStartTime)/1000);
|
|
269
|
-
if(start != null && duration > 0) {
|
|
270
|
-
post();
|
|
271
|
-
start = null;
|
|
272
|
-
}
|
|
273
|
-
}
|
|
177
|
+
window.onbeforeunload = function() {
|
|
178
|
+
if (WGP_Tracker.state.ready) WGP_Tracker.stopAndFlush();
|
|
274
179
|
};
|
|
275
180
|
|
|
276
|
-
setTimeout(
|
|
277
|
-
if(!
|
|
278
|
-
$(
|
|
279
|
-
alert(
|
|
280
|
-
window.close()
|
|
181
|
+
setTimeout(() => {
|
|
182
|
+
if (!WGP_Tracker.state.ready) {
|
|
183
|
+
$("#loader").fadeOut();
|
|
184
|
+
alert(dict.loadTimeoutError);
|
|
185
|
+
window.close();
|
|
281
186
|
}
|
|
282
|
-
},
|
|
187
|
+
}, 15000);
|
|
188
|
+
|
|
189
|
+
$.getScript("https://www.youtube.com/iframe_api");
|
|
283
190
|
</script>
|
|
284
191
|
</body>
|
|
285
|
-
</html>
|
|
192
|
+
</html>
|