podflow 20250417.2__py3-none-any.whl → 20250427__py3-none-any.whl

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.
@@ -0,0 +1,481 @@
1
+ (function() {
2
+ // 缓存常用节点
3
+ const menu = document.getElementById('menu');
4
+ const toggleMenuBtn = document.getElementById('toggleMenu');
5
+ const pages = {
6
+ pageChannel: document.getElementById('pageChannel'),
7
+ pageMessage: document.getElementById('pageMessage')
8
+ };
9
+ const inputForm = document.getElementById('inputForm');
10
+ const inputOutput = document.getElementById('inputOutput');
11
+ const pasteBtn = document.getElementById('pasteBtn');
12
+ const copyBtn = document.getElementById('copyBtn');
13
+ const clearBtn = document.getElementById('clearBtn');
14
+ // 缓存进度条和文本元素
15
+ const mainProgress = document.getElementById('mainProgress');
16
+ const progressStatus = document.getElementById('progressStatus');
17
+ const progressPercentage = document.getElementById('progressPercentage');
18
+ const messageArea = document.getElementById('messageArea');
19
+ const messageHttp = document.getElementById('messageHttp');
20
+ const messageDownload = document.getElementById('messageDownload');
21
+
22
+ let lastMessage = { schedule: [], podflow: [], http: [], download: [] };
23
+ let pollingTimer = null;
24
+ let userScrolled = false;
25
+ let eventSource = null; // 用于存储 EventSource 实例
26
+
27
+ // 生成单个二维码的函数
28
+ function generateQRCodeForNode(container) {
29
+ const rootStyles = getComputedStyle(document.documentElement);
30
+ const textColor = rootStyles.getPropertyValue('--text-color').trim();
31
+ const inputBg = rootStyles.getPropertyValue('--input-bg').trim();
32
+ const url = container.dataset.url;
33
+ container.innerHTML = '';
34
+ if (url) {
35
+ new QRCode(container, {
36
+ text: url,
37
+ width: 220,
38
+ height: 220,
39
+ colorDark: textColor,
40
+ colorLight: inputBg,
41
+ correctLevel: QRCode.CorrectLevel.L
42
+ });
43
+ } else {
44
+ container.textContent = 'URL 未提供';
45
+ }
46
+ }
47
+
48
+ // 菜单切换函数
49
+ function toggleMenu() {
50
+ menu.classList.toggle('hidden');
51
+ if (menu.classList.contains('hidden')) {
52
+ toggleMenuBtn.style.left = '0px';
53
+ toggleMenuBtn.textContent = '❯';
54
+ } else {
55
+ toggleMenuBtn.style.left = 'var(--menu-width)';
56
+ toggleMenuBtn.textContent = '❮';
57
+ }
58
+ }
59
+
60
+ // 根据页面标识显示对应面板
61
+ function showPage(pageId) {
62
+ Object.values(pages).forEach(page => page.style.display = 'none');
63
+ if (pages[pageId]) {
64
+ pages[pageId].style.display = 'block';
65
+ // 手机模式下自动隐藏菜单
66
+ if (window.innerWidth <= 600 && typeof menu !== 'undefined' && !menu.classList.contains('hidden')) {
67
+ if (typeof toggleMenu === 'function') {
68
+ toggleMenu();
69
+ }
70
+ }
71
+ // --- SSE 连接管理 ---
72
+ if (pageId === 'pageMessage') {
73
+ startMessageStream(); // <--- 启动 SSE 连接
74
+ } else {
75
+ stopMessageStream(); // <--- 关闭 SSE 连接
76
+ }
77
+ }
78
+ }
79
+
80
+ // 监听滚动事件,检测用户是否手动滚动
81
+ function onUserScroll(event) {
82
+ const element = event.target;
83
+ // 判断是否接近底部,增加一定的容差值
84
+ const nearBottom = element.scrollHeight - element.scrollTop <= element.clientHeight + 10;
85
+ userScrolled = !nearBottom;
86
+ }
87
+
88
+ // 轮询消息更新,更新 messageArea 与 messageHttp
89
+ function getMessages() {
90
+ fetch('message')
91
+ .then(response => response.json()) // 解析 JSON 数据
92
+ .then(data => {
93
+ // 更新进度条
94
+ if (JSON.stringify(data.schedule) !== JSON.stringify(lastMessage.schedule)) {
95
+ updateProgress(data.schedule);
96
+ lastMessage.schedule = data.schedule;
97
+ }
98
+ // 追加新消息
99
+ if (JSON.stringify(data.podflow) !== JSON.stringify(lastMessage.podflow)) {
100
+ appendMessages(messageArea, data.podflow, lastMessage.podflow);
101
+ lastMessage.podflow = data.podflow;
102
+ }
103
+ if (JSON.stringify(data.http) !== JSON.stringify(lastMessage.http)) {
104
+ appendMessages(messageHttp, data.http, lastMessage.http);
105
+ lastMessage.http = data.http;
106
+ }
107
+ if (JSON.stringify(data.download) !== JSON.stringify(lastMessage.download)) {
108
+ appendBar(messageDownload, data.download, lastMessage.download);
109
+ lastMessage.download = data.download
110
+ }
111
+ })
112
+ .catch(error => console.error('获取消息失败:', error));
113
+ }
114
+
115
+ // 更新进度条并显示状态和百分比
116
+ function updateProgress(scheduleData) {
117
+ // 检查 schedule 数据是否存在且长度为 2
118
+ if (scheduleData && scheduleData.length === 2) {
119
+ const [status, progress] = scheduleData; // 直接解构数组
120
+ if (status === "准备中" || status === "构建中") {
121
+ mainProgress.style.width = `${progress * 100}%`;
122
+ progressStatus.textContent = status; // 显示状态
123
+ progressPercentage.textContent = `${(progress * 100).toFixed(2)}%`; // 显示百分比,保留两位小数
124
+ } else if (status === "已完成") {
125
+ mainProgress.style.width = '100%';
126
+ progressStatus.textContent = '已完成'; // 显示完成状态
127
+ progressPercentage.textContent = '100.0%'; // 显示百分比
128
+ }
129
+ }
130
+ }
131
+
132
+ function createMessageElement(message) {
133
+ const div = document.createElement('div');
134
+ div.innerHTML = message;
135
+ div.className = 'message';
136
+ return div;
137
+ }
138
+
139
+ function processQRCodeContainers(div) {
140
+ const qrContainers = div.querySelectorAll('.qrcode-container');
141
+ qrContainers.forEach(container => {
142
+ // 判断当前容器是否有 data-url 属性,并且值不为空
143
+ if (container.dataset.url) {
144
+ generateQRCodeForNode(container);
145
+ } else {
146
+ // 如果没有 data-url 或值为空,可以执行其他操作,例如输出提示信息
147
+ console.log('容器中未提供 URL,跳过二维码生成:', container);
148
+ container.textContent = '未提供二维码 URL'; // 可选:在容器中显示提示
149
+ }
150
+ });
151
+ }
152
+
153
+ // 修改后的 appendMessages 函数:先生成消息节点内的二维码,再将节点追加或替换到消息容器中
154
+ function appendMessages(container, newMessages, oldMessages) {
155
+ // 判断当前是否在底部
156
+ const wasAtBottom = container.scrollHeight - container.scrollTop <= container.clientHeight + 10;
157
+ // 较为简单的情况:两数组长度相同且有内容,只比较最后四项
158
+ if (newMessages.length === oldMessages.length && newMessages.length > 0) {
159
+ let replaceCount;
160
+ if (newMessages[newMessages.length - 1].includes("未扫描") ||
161
+ newMessages[newMessages.length - 1].includes("二维码超时, 请重试")) {
162
+ replaceCount = Math.min(4, newMessages.length);
163
+ } else {
164
+ replaceCount = 1;
165
+ }
166
+ for (let i = 0; i < replaceCount; i++) {
167
+ // 计算从后向前的索引位置
168
+ const index = newMessages.length - 1 - i;
169
+ const newMessage = newMessages[index];
170
+ const oldMessage = oldMessages[index];
171
+ if (newMessage !== oldMessage) {
172
+ // 先创建消息节点
173
+ const div = createMessageElement(newMessage);
174
+ // 在插入前先处理二维码生成
175
+ processQRCodeContainers(div);
176
+ // 替换到容器中 - 注意这里要找到对应位置的子元素
177
+ const childToReplace = container.children[index];
178
+ if (childToReplace) {
179
+ container.replaceChild(div, childToReplace);
180
+ }
181
+ }
182
+ }
183
+ } else {
184
+ // 当 newMessages 与 oldMessages 数量不一致时
185
+ // 如果 oldMessages 存在数据,先替换容器中最后一项对应的消息
186
+ if (oldMessages.length > 0) {
187
+ const replaceIndex = oldMessages.length - 1;
188
+ const div = createMessageElement(newMessages[replaceIndex]);
189
+ // 先生成二维码
190
+ processQRCodeContainers(div);
191
+ const lastChild = container.lastElementChild;
192
+ if (lastChild) {
193
+ container.replaceChild(div, lastChild);
194
+ } else {
195
+ container.appendChild(div);
196
+ }
197
+ }
198
+ // 再追加从 oldMessages.length 开始的后续消息
199
+ newMessages.slice(oldMessages.length).forEach(msg => {
200
+ const div = createMessageElement(msg);
201
+ // 先生成二维码
202
+ processQRCodeContainers(div);
203
+ // 插入容器中
204
+ container.appendChild(div);
205
+ });
206
+ }
207
+ // 如果之前在底部且用户没有主动滚动,则自动滚动到底部
208
+ if (wasAtBottom && !userScrolled) {
209
+ container.scrollTop = container.scrollHeight;
210
+ }
211
+ }
212
+
213
+ function appendBar(container, newMessages, oldMessages) {
214
+ // 遍历新的消息并渲染进度条
215
+ if (newMessages.length > 0) {
216
+ downloadLabel.textContent = '下载进度:';
217
+ const newlength = newMessages.length;
218
+ const oldlength = oldMessages.length;
219
+ if (oldlength!== 0){
220
+ const childToReplace = container.children[0];
221
+ const newMessage = newMessages[oldlength - 1];
222
+ const oldMessage = oldMessages[oldlength - 1];
223
+ if (newMessage !== oldMessage){
224
+ const [percentageText, time, speed, status, idname, nameText, file] = newMessage;
225
+ childToReplace.querySelector('#pbProgress' + oldlength).style.width = `${percentageText * 100}%`;
226
+ childToReplace.querySelector('#pbStatusText' + oldlength).innerHTML = status;
227
+ childToReplace.querySelector('#pbPercentageText' + oldlength).innerHTML = `${(percentageText * 100).toFixed(2)}%`;
228
+ childToReplace.querySelector('#speedText' + oldlength).innerHTML = speed;
229
+ childToReplace.querySelector('#timeText' + oldlength).innerHTML = time;
230
+ }
231
+ }
232
+ if (newlength !== oldlength) {
233
+ for (let i = oldlength; i < newlength; i++) {
234
+ const messageContent = newMessages[i];
235
+ const [percentageText, time, speed, status, idname, nameText, file] = messageContent;
236
+ const download = document.createElement('div');
237
+ download.className = 'download-container';
238
+ // 创建 idname 文本节点(只创建一次)
239
+ const idnameText = document.createElement('div');
240
+ idnameText.className = 'scroll-text';
241
+ idnameText.innerHTML = ' ' + idname;
242
+ // 创建文件信息部分
243
+ const fileInfo = document.createElement('div');
244
+ fileInfo.className = 'scroll';
245
+ const filesuffix = document.createElement('div');
246
+ filesuffix.className = 'scroll-suffix';
247
+ filesuffix.innerHTML = file;
248
+ // 创建滚动文本区域
249
+ const scroll = document.createElement('div');
250
+ scroll.className = 'scroll-container';
251
+ const namebar = document.createElement('div');
252
+ namebar.className = 'scroll-content';
253
+ const filename = document.createElement('div');
254
+ filename.className = 'scroll-text';
255
+ filename.innerHTML = nameText;
256
+ // 组合元素
257
+ namebar.appendChild(filename);
258
+ scroll.appendChild(namebar);
259
+ fileInfo.appendChild(scroll);
260
+ fileInfo.appendChild(filesuffix);
261
+ download.appendChild(idnameText);
262
+ download.appendChild(fileInfo);
263
+ // 延迟测量文本宽度,决定是否滚动
264
+ setTimeout(() => {
265
+ const contentWidth = filename.scrollWidth; // 单份文本宽度
266
+ const containerWidth = scroll.clientWidth;
267
+ if (contentWidth > containerWidth) {
268
+ // 需要滚动,添加第二份文本实现无缝滚动
269
+ const filename1 = document.createElement('div');
270
+ filename1.className = 'scroll-text';
271
+ filename1.innerHTML = nameText;
272
+ namebar.appendChild(filename1);
273
+ // 重新计算宽度,这次是双倍宽度中的单份宽度用于计算时间
274
+ const singleContentWidth = namebar.scrollWidth / 2;
275
+ const speed = 30;
276
+ const duration = singleContentWidth / speed;
277
+ namebar.style.animationDuration = duration + 's';
278
+ // 延迟添加滚动类
279
+ setTimeout(() => {
280
+ namebar.classList.add('scrolling');
281
+ }, 1500);
282
+ } else {
283
+ // 不需要滚动,确保移除动画类和样式
284
+ namebar.classList.remove('scrolling');
285
+ namebar.style.animationDuration = '';
286
+ }
287
+ }, 0);
288
+ // 进度条部分
289
+ const pbBar = document.createElement('div');
290
+ pbBar.className = 'pb-bar';
291
+ const pbProgress = document.createElement('div');
292
+ pbProgress.className = 'pb-progress pb-animated';
293
+ pbProgress.style.width = `${percentageText * 100}%`;
294
+ pbProgress.id = 'pbProgress' + (i+1);
295
+ const pbStatusText = document.createElement('div');
296
+ pbStatusText.className = 'pb-status-text';
297
+ pbStatusText.innerHTML = status;
298
+ pbStatusText.id = 'pbStatusText' + (i+1);
299
+ const pbPercentageText = document.createElement('div');
300
+ pbPercentageText.className = 'pb-percentage-text';
301
+ pbPercentageText.innerHTML = `${(percentageText * 100).toFixed(2)}%`;
302
+ pbPercentageText.id = 'pbPercentageText' + (i+1);
303
+ pbBar.appendChild(pbProgress);
304
+ pbBar.appendChild(pbStatusText);
305
+ pbBar.appendChild(pbPercentageText);
306
+ download.appendChild(pbBar);
307
+ // 速度部分
308
+ const speedContainer = document.createElement('div');
309
+ speedContainer.className = 'scroll';
310
+ const speedText = document.createElement('div');
311
+ speedText.className = 'speed-text';
312
+ speedText.innerHTML = speed;
313
+ speedText.id = 'speedText' + (i+1);
314
+ const timeText = document.createElement('div');
315
+ timeText.className = 'time-text';
316
+ timeText.innerHTML = time;
317
+ timeText.id = 'timeText' + (i+1);
318
+ speedContainer.appendChild(speedText);
319
+ speedContainer.appendChild(timeText);
320
+ download.appendChild(speedContainer);
321
+ container.insertBefore(download, container.firstChild);
322
+ }
323
+ }
324
+ }
325
+ }
326
+
327
+ // 启动 SSE 连接
328
+ function startMessageStream() {
329
+ // 如果已存在连接,先关闭
330
+ if (eventSource) {
331
+ eventSource.close();
332
+ }
333
+ // 创建新的 EventSource 连接到 /stream 端点
334
+ eventSource = new EventSource('/stream'); // <--- 连接到新的 SSE 端点
335
+ // 监听 'message' 事件 (默认事件)
336
+ eventSource.onmessage = function(event) {
337
+ try {
338
+ // event.data 是服务器发送的 JSON 字符串
339
+ const data = JSON.parse(event.data);
340
+ // --- 更新 UI (逻辑与原 getMessages 类似) ---
341
+ // 确保 lastMessage 和 data 结构完整
342
+ lastMessage = lastMessage || { schedule: {}, podflow: [], http: [], download: [] };
343
+ data.schedule = data.schedule || {};
344
+ data.podflow = data.podflow || [];
345
+ data.http = data.http || [];
346
+ data.download = data.download || [];
347
+ // 更新进度条 (如果 updateProgress 存在)
348
+ if (typeof updateProgress === 'function' && JSON.stringify(data.schedule) !== JSON.stringify(lastMessage.schedule)) {
349
+ updateProgress(data.schedule);
350
+ lastMessage.schedule = data.schedule;
351
+ }
352
+ // 追加新消息 (如果 appendMessages 存在)
353
+ if (typeof appendMessages === 'function') {
354
+ if (JSON.stringify(data.podflow) !== JSON.stringify(lastMessage.podflow)) {
355
+ appendMessages(messageArea, data.podflow, lastMessage.podflow || []); // 传入旧消息用于比较
356
+ lastMessage.podflow = [...data.podflow]; // 创建副本以避免引用问题
357
+ }
358
+ if (JSON.stringify(data.http) !== JSON.stringify(lastMessage.http)) {
359
+ appendMessages(messageHttp, data.http, lastMessage.http || []); // 传入旧消息
360
+ lastMessage.http = [...data.http]; // 创建副本
361
+ }
362
+ }
363
+ // 更新下载栏 (如果 appendBar 存在)
364
+ if (typeof appendBar === 'function' && JSON.stringify(data.download) !== JSON.stringify(lastMessage.download)) {
365
+ appendBar(messageDownload, data.download, lastMessage.download || []); // 传入旧消息
366
+ lastMessage.download = [...data.download]; // 创建副本
367
+ }
368
+ } catch (error) {
369
+ console.error('处理 SSE 消息失败:', error, '原始数据:', event.data);
370
+ }
371
+ };
372
+ // 监听错误事件
373
+ eventSource.onerror = function(error) {
374
+ console.error('EventSource 失败:', error);
375
+ // 可以选择在这里关闭连接或尝试重连,但 EventSource 通常会自动重连
376
+ // eventSource.close(); // 如果需要手动停止
377
+ };
378
+ console.log("SSE 连接已启动");
379
+ }
380
+
381
+ // 停止 SSE 连接
382
+ function stopMessageStream() {
383
+ if (eventSource) {
384
+ eventSource.close(); // 关闭连接
385
+ eventSource = null; // 清除引用
386
+ console.log("SSE 连接已关闭");
387
+ }
388
+ }
389
+
390
+ // 滚动事件监听器
391
+ messageArea.addEventListener('scroll', onUserScroll);
392
+ messageHttp.addEventListener('scroll', onUserScroll);
393
+ messageDownload.addEventListener('scroll', onUserScroll);
394
+
395
+ // 初始化默认页面
396
+ showPage('pageMessage');
397
+
398
+ // 表单异步提交(获取 Channel-ID)
399
+ inputForm && inputForm.addEventListener('submit', function(event) {
400
+ event.preventDefault();
401
+ const content = inputOutput.value;
402
+ fetch('getid', {
403
+ method: 'POST',
404
+ headers: { 'Content-Type': 'application/json' },
405
+ body: JSON.stringify({ content })
406
+ })
407
+ .then(response => {
408
+ if (!response.ok) {
409
+ throw new Error('网络响应异常');
410
+ }
411
+ return response.json();
412
+ })
413
+ .then(data => inputOutput.value = data.response)
414
+ .catch(error => {
415
+ console.error('请求失败:', error);
416
+ alert('请求失败,请稍后重试!');
417
+ });
418
+ });
419
+
420
+ // 粘贴功能
421
+ pasteBtn.addEventListener('click', function() {
422
+ if (navigator.clipboard && navigator.clipboard.readText) {
423
+ navigator.clipboard.readText().then(text => {
424
+ inputOutput.value = text;
425
+ inputOutput.focus();
426
+ }).catch(err => {
427
+ console.warn("剪贴板读取失败:", err);
428
+ alert("无法读取剪贴板,请手动粘贴!");
429
+ });
430
+ } else {
431
+ try {
432
+ inputOutput.focus();
433
+ document.execCommand('paste');
434
+ } catch (err) {
435
+ console.warn("execCommand 粘贴失败:", err);
436
+ alert("您的浏览器不支持自动粘贴,请手动操作!");
437
+ }
438
+ }
439
+ });
440
+
441
+ // 复制功能
442
+ copyBtn.addEventListener('click', function() {
443
+ if (navigator.clipboard && navigator.clipboard.writeText) {
444
+ navigator.clipboard.writeText(inputOutput.value).catch(err => {
445
+ console.warn("复制失败:", err);
446
+ alert("无法复制,请手动选择文本后按 Ctrl+C 复制!");
447
+ });
448
+ } else {
449
+ try {
450
+ inputOutput.select();
451
+ document.execCommand('copy');
452
+ } catch (err) {
453
+ console.warn("execCommand 复制失败:", err);
454
+ alert("您的浏览器不支持复制,请手动操作!");
455
+ }
456
+ }
457
+ });
458
+
459
+ // 清空输入框
460
+ clearBtn.addEventListener('click', function() {
461
+ inputOutput.value = '';
462
+ });
463
+
464
+ // 菜单项点击事件委托
465
+ menu.addEventListener('click', function(event) {
466
+ const target = event.target;
467
+ if (target.tagName.toLowerCase() === 'li' && target.dataset.page) {
468
+ showPage(target.dataset.page);
469
+ }
470
+ });
471
+
472
+ // 菜单切换按钮事件绑定
473
+ toggleMenuBtn.addEventListener('click', toggleMenu);
474
+
475
+ // 针对手机端,初始化时隐藏菜单
476
+ if (window.innerWidth <= 600) {
477
+ menu.classList.add('hidden');
478
+ toggleMenuBtn.style.left = '0px';
479
+ toggleMenuBtn.textContent = '❯';
480
+ }
481
+ })();
@@ -0,0 +1 @@
1
+ var QRCode;!function(){function a(a){this.mode=c.MODE_8BIT_BYTE,this.data=a,this.parsedData=[];for(var b=[],d=0,e=this.data.length;e>d;d++){var f=this.data.charCodeAt(d);f>65536?(b[0]=240|(1835008&f)>>>18,b[1]=128|(258048&f)>>>12,b[2]=128|(4032&f)>>>6,b[3]=128|63&f):f>2048?(b[0]=224|(61440&f)>>>12,b[1]=128|(4032&f)>>>6,b[2]=128|63&f):f>128?(b[0]=192|(1984&f)>>>6,b[1]=128|63&f):b[0]=f,this.parsedData=this.parsedData.concat(b)}this.parsedData.length!=this.data.length&&(this.parsedData.unshift(191),this.parsedData.unshift(187),this.parsedData.unshift(239))}function b(a,b){this.typeNumber=a,this.errorCorrectLevel=b,this.modules=null,this.moduleCount=0,this.dataCache=null,this.dataList=[]}function i(a,b){if(void 0==a.length)throw new Error(a.length+"/"+b);for(var c=0;c<a.length&&0==a[c];)c++;this.num=new Array(a.length-c+b);for(var d=0;d<a.length-c;d++)this.num[d]=a[d+c]}function j(a,b){this.totalCount=a,this.dataCount=b}function k(){this.buffer=[],this.length=0}function m(){return"undefined"!=typeof CanvasRenderingContext2D}function n(){var a=!1,b=navigator.userAgent;return/android/i.test(b)&&(a=!0,aMat=b.toString().match(/android ([0-9]\.[0-9])/i),aMat&&aMat[1]&&(a=parseFloat(aMat[1]))),a}function r(a,b){for(var c=1,e=s(a),f=0,g=l.length;g>=f;f++){var h=0;switch(b){case d.L:h=l[f][0];break;case d.M:h=l[f][1];break;case d.Q:h=l[f][2];break;case d.H:h=l[f][3]}if(h>=e)break;c++}if(c>l.length)throw new Error("Too long data");return c}function s(a){var b=encodeURI(a).toString().replace(/\%[0-9a-fA-F]{2}/g,"a");return b.length+(b.length!=a?3:0)}a.prototype={getLength:function(){return this.parsedData.length},write:function(a){for(var b=0,c=this.parsedData.length;c>b;b++)a.put(this.parsedData[b],8)}},b.prototype={addData:function(b){var c=new a(b);this.dataList.push(c),this.dataCache=null},isDark:function(a,b){if(0>a||this.moduleCount<=a||0>b||this.moduleCount<=b)throw new Error(a+","+b);return this.modules[a][b]},getModuleCount:function(){return this.moduleCount},make:function(){this.makeImpl(!1,this.getBestMaskPattern())},makeImpl:function(a,c){this.moduleCount=4*this.typeNumber+17,this.modules=new Array(this.moduleCount);for(var d=0;d<this.moduleCount;d++){this.modules[d]=new Array(this.moduleCount);for(var e=0;e<this.moduleCount;e++)this.modules[d][e]=null}this.setupPositionProbePattern(0,0),this.setupPositionProbePattern(this.moduleCount-7,0),this.setupPositionProbePattern(0,this.moduleCount-7),this.setupPositionAdjustPattern(),this.setupTimingPattern(),this.setupTypeInfo(a,c),this.typeNumber>=7&&this.setupTypeNumber(a),null==this.dataCache&&(this.dataCache=b.createData(this.typeNumber,this.errorCorrectLevel,this.dataList)),this.mapData(this.dataCache,c)},setupPositionProbePattern:function(a,b){for(var c=-1;7>=c;c++)if(!(-1>=a+c||this.moduleCount<=a+c))for(var d=-1;7>=d;d++)-1>=b+d||this.moduleCount<=b+d||(this.modules[a+c][b+d]=c>=0&&6>=c&&(0==d||6==d)||d>=0&&6>=d&&(0==c||6==c)||c>=2&&4>=c&&d>=2&&4>=d?!0:!1)},getBestMaskPattern:function(){for(var a=0,b=0,c=0;8>c;c++){this.makeImpl(!0,c);var d=f.getLostPoint(this);(0==c||a>d)&&(a=d,b=c)}return b},createMovieClip:function(a,b,c){var d=a.createEmptyMovieClip(b,c),e=1;this.make();for(var f=0;f<this.modules.length;f++)for(var g=f*e,h=0;h<this.modules[f].length;h++){var i=h*e,j=this.modules[f][h];j&&(d.beginFill(0,100),d.moveTo(i,g),d.lineTo(i+e,g),d.lineTo(i+e,g+e),d.lineTo(i,g+e),d.endFill())}return d},setupTimingPattern:function(){for(var a=8;a<this.moduleCount-8;a++)null==this.modules[a][6]&&(this.modules[a][6]=0==a%2);for(var b=8;b<this.moduleCount-8;b++)null==this.modules[6][b]&&(this.modules[6][b]=0==b%2)},setupPositionAdjustPattern:function(){for(var a=f.getPatternPosition(this.typeNumber),b=0;b<a.length;b++)for(var c=0;c<a.length;c++){var d=a[b],e=a[c];if(null==this.modules[d][e])for(var g=-2;2>=g;g++)for(var h=-2;2>=h;h++)this.modules[d+g][e+h]=-2==g||2==g||-2==h||2==h||0==g&&0==h?!0:!1}},setupTypeNumber:function(a){for(var b=f.getBCHTypeNumber(this.typeNumber),c=0;18>c;c++){var d=!a&&1==(1&b>>c);this.modules[Math.floor(c/3)][c%3+this.moduleCount-8-3]=d}for(var c=0;18>c;c++){var d=!a&&1==(1&b>>c);this.modules[c%3+this.moduleCount-8-3][Math.floor(c/3)]=d}},setupTypeInfo:function(a,b){for(var c=this.errorCorrectLevel<<3|b,d=f.getBCHTypeInfo(c),e=0;15>e;e++){var g=!a&&1==(1&d>>e);6>e?this.modules[e][8]=g:8>e?this.modules[e+1][8]=g:this.modules[this.moduleCount-15+e][8]=g}for(var e=0;15>e;e++){var g=!a&&1==(1&d>>e);8>e?this.modules[8][this.moduleCount-e-1]=g:9>e?this.modules[8][15-e-1+1]=g:this.modules[8][15-e-1]=g}this.modules[this.moduleCount-8][8]=!a},mapData:function(a,b){for(var c=-1,d=this.moduleCount-1,e=7,g=0,h=this.moduleCount-1;h>0;h-=2)for(6==h&&h--;;){for(var i=0;2>i;i++)if(null==this.modules[d][h-i]){var j=!1;g<a.length&&(j=1==(1&a[g]>>>e));var k=f.getMask(b,d,h-i);k&&(j=!j),this.modules[d][h-i]=j,e--,-1==e&&(g++,e=7)}if(d+=c,0>d||this.moduleCount<=d){d-=c,c=-c;break}}}},b.PAD0=236,b.PAD1=17,b.createData=function(a,c,d){for(var e=j.getRSBlocks(a,c),g=new k,h=0;h<d.length;h++){var i=d[h];g.put(i.mode,4),g.put(i.getLength(),f.getLengthInBits(i.mode,a)),i.write(g)}for(var l=0,h=0;h<e.length;h++)l+=e[h].dataCount;if(g.getLengthInBits()>8*l)throw new Error("code length overflow. ("+g.getLengthInBits()+">"+8*l+")");for(g.getLengthInBits()+4<=8*l&&g.put(0,4);0!=g.getLengthInBits()%8;)g.putBit(!1);for(;;){if(g.getLengthInBits()>=8*l)break;if(g.put(b.PAD0,8),g.getLengthInBits()>=8*l)break;g.put(b.PAD1,8)}return b.createBytes(g,e)},b.createBytes=function(a,b){for(var c=0,d=0,e=0,g=new Array(b.length),h=new Array(b.length),j=0;j<b.length;j++){var k=b[j].dataCount,l=b[j].totalCount-k;d=Math.max(d,k),e=Math.max(e,l),g[j]=new Array(k);for(var m=0;m<g[j].length;m++)g[j][m]=255&a.buffer[m+c];c+=k;var n=f.getErrorCorrectPolynomial(l),o=new i(g[j],n.getLength()-1),p=o.mod(n);h[j]=new Array(n.getLength()-1);for(var m=0;m<h[j].length;m++){var q=m+p.getLength()-h[j].length;h[j][m]=q>=0?p.get(q):0}}for(var r=0,m=0;m<b.length;m++)r+=b[m].totalCount;for(var s=new Array(r),t=0,m=0;d>m;m++)for(var j=0;j<b.length;j++)m<g[j].length&&(s[t++]=g[j][m]);for(var m=0;e>m;m++)for(var j=0;j<b.length;j++)m<h[j].length&&(s[t++]=h[j][m]);return s};for(var c={MODE_NUMBER:1,MODE_ALPHA_NUM:2,MODE_8BIT_BYTE:4,MODE_KANJI:8},d={L:1,M:0,Q:3,H:2},e={PATTERN000:0,PATTERN001:1,PATTERN010:2,PATTERN011:3,PATTERN100:4,PATTERN101:5,PATTERN110:6,PATTERN111:7},f={PATTERN_POSITION_TABLE:[[],[6,18],[6,22],[6,26],[6,30],[6,34],[6,22,38],[6,24,42],[6,26,46],[6,28,50],[6,30,54],[6,32,58],[6,34,62],[6,26,46,66],[6,26,48,70],[6,26,50,74],[6,30,54,78],[6,30,56,82],[6,30,58,86],[6,34,62,90],[6,28,50,72,94],[6,26,50,74,98],[6,30,54,78,102],[6,28,54,80,106],[6,32,58,84,110],[6,30,58,86,114],[6,34,62,90,118],[6,26,50,74,98,122],[6,30,54,78,102,126],[6,26,52,78,104,130],[6,30,56,82,108,134],[6,34,60,86,112,138],[6,30,58,86,114,142],[6,34,62,90,118,146],[6,30,54,78,102,126,150],[6,24,50,76,102,128,154],[6,28,54,80,106,132,158],[6,32,58,84,110,136,162],[6,26,54,82,110,138,166],[6,30,58,86,114,142,170]],G15:1335,G18:7973,G15_MASK:21522,getBCHTypeInfo:function(a){for(var b=a<<10;f.getBCHDigit(b)-f.getBCHDigit(f.G15)>=0;)b^=f.G15<<f.getBCHDigit(b)-f.getBCHDigit(f.G15);return(a<<10|b)^f.G15_MASK},getBCHTypeNumber:function(a){for(var b=a<<12;f.getBCHDigit(b)-f.getBCHDigit(f.G18)>=0;)b^=f.G18<<f.getBCHDigit(b)-f.getBCHDigit(f.G18);return a<<12|b},getBCHDigit:function(a){for(var b=0;0!=a;)b++,a>>>=1;return b},getPatternPosition:function(a){return f.PATTERN_POSITION_TABLE[a-1]},getMask:function(a,b,c){switch(a){case e.PATTERN000:return 0==(b+c)%2;case e.PATTERN001:return 0==b%2;case e.PATTERN010:return 0==c%3;case e.PATTERN011:return 0==(b+c)%3;case e.PATTERN100:return 0==(Math.floor(b/2)+Math.floor(c/3))%2;case e.PATTERN101:return 0==b*c%2+b*c%3;case e.PATTERN110:return 0==(b*c%2+b*c%3)%2;case e.PATTERN111:return 0==(b*c%3+(b+c)%2)%2;default:throw new Error("bad maskPattern:"+a)}},getErrorCorrectPolynomial:function(a){for(var b=new i([1],0),c=0;a>c;c++)b=b.multiply(new i([1,g.gexp(c)],0));return b},getLengthInBits:function(a,b){if(b>=1&&10>b)switch(a){case c.MODE_NUMBER:return 10;case c.MODE_ALPHA_NUM:return 9;case c.MODE_8BIT_BYTE:return 8;case c.MODE_KANJI:return 8;default:throw new Error("mode:"+a)}else if(27>b)switch(a){case c.MODE_NUMBER:return 12;case c.MODE_ALPHA_NUM:return 11;case c.MODE_8BIT_BYTE:return 16;case c.MODE_KANJI:return 10;default:throw new Error("mode:"+a)}else{if(!(41>b))throw new Error("type:"+b);switch(a){case c.MODE_NUMBER:return 14;case c.MODE_ALPHA_NUM:return 13;case c.MODE_8BIT_BYTE:return 16;case c.MODE_KANJI:return 12;default:throw new Error("mode:"+a)}}},getLostPoint:function(a){for(var b=a.getModuleCount(),c=0,d=0;b>d;d++)for(var e=0;b>e;e++){for(var f=0,g=a.isDark(d,e),h=-1;1>=h;h++)if(!(0>d+h||d+h>=b))for(var i=-1;1>=i;i++)0>e+i||e+i>=b||(0!=h||0!=i)&&g==a.isDark(d+h,e+i)&&f++;f>5&&(c+=3+f-5)}for(var d=0;b-1>d;d++)for(var e=0;b-1>e;e++){var j=0;a.isDark(d,e)&&j++,a.isDark(d+1,e)&&j++,a.isDark(d,e+1)&&j++,a.isDark(d+1,e+1)&&j++,(0==j||4==j)&&(c+=3)}for(var d=0;b>d;d++)for(var e=0;b-6>e;e++)a.isDark(d,e)&&!a.isDark(d,e+1)&&a.isDark(d,e+2)&&a.isDark(d,e+3)&&a.isDark(d,e+4)&&!a.isDark(d,e+5)&&a.isDark(d,e+6)&&(c+=40);for(var e=0;b>e;e++)for(var d=0;b-6>d;d++)a.isDark(d,e)&&!a.isDark(d+1,e)&&a.isDark(d+2,e)&&a.isDark(d+3,e)&&a.isDark(d+4,e)&&!a.isDark(d+5,e)&&a.isDark(d+6,e)&&(c+=40);for(var k=0,e=0;b>e;e++)for(var d=0;b>d;d++)a.isDark(d,e)&&k++;var l=Math.abs(100*k/b/b-50)/5;return c+=10*l}},g={glog:function(a){if(1>a)throw new Error("glog("+a+")");return g.LOG_TABLE[a]},gexp:function(a){for(;0>a;)a+=255;for(;a>=256;)a-=255;return g.EXP_TABLE[a]},EXP_TABLE:new Array(256),LOG_TABLE:new Array(256)},h=0;8>h;h++)g.EXP_TABLE[h]=1<<h;for(var h=8;256>h;h++)g.EXP_TABLE[h]=g.EXP_TABLE[h-4]^g.EXP_TABLE[h-5]^g.EXP_TABLE[h-6]^g.EXP_TABLE[h-8];for(var h=0;255>h;h++)g.LOG_TABLE[g.EXP_TABLE[h]]=h;i.prototype={get:function(a){return this.num[a]},getLength:function(){return this.num.length},multiply:function(a){for(var b=new Array(this.getLength()+a.getLength()-1),c=0;c<this.getLength();c++)for(var d=0;d<a.getLength();d++)b[c+d]^=g.gexp(g.glog(this.get(c))+g.glog(a.get(d)));return new i(b,0)},mod:function(a){if(this.getLength()-a.getLength()<0)return this;for(var b=g.glog(this.get(0))-g.glog(a.get(0)),c=new Array(this.getLength()),d=0;d<this.getLength();d++)c[d]=this.get(d);for(var d=0;d<a.getLength();d++)c[d]^=g.gexp(g.glog(a.get(d))+b);return new i(c,0).mod(a)}},j.RS_BLOCK_TABLE=[[1,26,19],[1,26,16],[1,26,13],[1,26,9],[1,44,34],[1,44,28],[1,44,22],[1,44,16],[1,70,55],[1,70,44],[2,35,17],[2,35,13],[1,100,80],[2,50,32],[2,50,24],[4,25,9],[1,134,108],[2,67,43],[2,33,15,2,34,16],[2,33,11,2,34,12],[2,86,68],[4,43,27],[4,43,19],[4,43,15],[2,98,78],[4,49,31],[2,32,14,4,33,15],[4,39,13,1,40,14],[2,121,97],[2,60,38,2,61,39],[4,40,18,2,41,19],[4,40,14,2,41,15],[2,146,116],[3,58,36,2,59,37],[4,36,16,4,37,17],[4,36,12,4,37,13],[2,86,68,2,87,69],[4,69,43,1,70,44],[6,43,19,2,44,20],[6,43,15,2,44,16],[4,101,81],[1,80,50,4,81,51],[4,50,22,4,51,23],[3,36,12,8,37,13],[2,116,92,2,117,93],[6,58,36,2,59,37],[4,46,20,6,47,21],[7,42,14,4,43,15],[4,133,107],[8,59,37,1,60,38],[8,44,20,4,45,21],[12,33,11,4,34,12],[3,145,115,1,146,116],[4,64,40,5,65,41],[11,36,16,5,37,17],[11,36,12,5,37,13],[5,109,87,1,110,88],[5,65,41,5,66,42],[5,54,24,7,55,25],[11,36,12],[5,122,98,1,123,99],[7,73,45,3,74,46],[15,43,19,2,44,20],[3,45,15,13,46,16],[1,135,107,5,136,108],[10,74,46,1,75,47],[1,50,22,15,51,23],[2,42,14,17,43,15],[5,150,120,1,151,121],[9,69,43,4,70,44],[17,50,22,1,51,23],[2,42,14,19,43,15],[3,141,113,4,142,114],[3,70,44,11,71,45],[17,47,21,4,48,22],[9,39,13,16,40,14],[3,135,107,5,136,108],[3,67,41,13,68,42],[15,54,24,5,55,25],[15,43,15,10,44,16],[4,144,116,4,145,117],[17,68,42],[17,50,22,6,51,23],[19,46,16,6,47,17],[2,139,111,7,140,112],[17,74,46],[7,54,24,16,55,25],[34,37,13],[4,151,121,5,152,122],[4,75,47,14,76,48],[11,54,24,14,55,25],[16,45,15,14,46,16],[6,147,117,4,148,118],[6,73,45,14,74,46],[11,54,24,16,55,25],[30,46,16,2,47,17],[8,132,106,4,133,107],[8,75,47,13,76,48],[7,54,24,22,55,25],[22,45,15,13,46,16],[10,142,114,2,143,115],[19,74,46,4,75,47],[28,50,22,6,51,23],[33,46,16,4,47,17],[8,152,122,4,153,123],[22,73,45,3,74,46],[8,53,23,26,54,24],[12,45,15,28,46,16],[3,147,117,10,148,118],[3,73,45,23,74,46],[4,54,24,31,55,25],[11,45,15,31,46,16],[7,146,116,7,147,117],[21,73,45,7,74,46],[1,53,23,37,54,24],[19,45,15,26,46,16],[5,145,115,10,146,116],[19,75,47,10,76,48],[15,54,24,25,55,25],[23,45,15,25,46,16],[13,145,115,3,146,116],[2,74,46,29,75,47],[42,54,24,1,55,25],[23,45,15,28,46,16],[17,145,115],[10,74,46,23,75,47],[10,54,24,35,55,25],[19,45,15,35,46,16],[17,145,115,1,146,116],[14,74,46,21,75,47],[29,54,24,19,55,25],[11,45,15,46,46,16],[13,145,115,6,146,116],[14,74,46,23,75,47],[44,54,24,7,55,25],[59,46,16,1,47,17],[12,151,121,7,152,122],[12,75,47,26,76,48],[39,54,24,14,55,25],[22,45,15,41,46,16],[6,151,121,14,152,122],[6,75,47,34,76,48],[46,54,24,10,55,25],[2,45,15,64,46,16],[17,152,122,4,153,123],[29,74,46,14,75,47],[49,54,24,10,55,25],[24,45,15,46,46,16],[4,152,122,18,153,123],[13,74,46,32,75,47],[48,54,24,14,55,25],[42,45,15,32,46,16],[20,147,117,4,148,118],[40,75,47,7,76,48],[43,54,24,22,55,25],[10,45,15,67,46,16],[19,148,118,6,149,119],[18,75,47,31,76,48],[34,54,24,34,55,25],[20,45,15,61,46,16]],j.getRSBlocks=function(a,b){var c=j.getRsBlockTable(a,b);if(void 0==c)throw new Error("bad rs block @ typeNumber:"+a+"/errorCorrectLevel:"+b);for(var d=c.length/3,e=[],f=0;d>f;f++)for(var g=c[3*f+0],h=c[3*f+1],i=c[3*f+2],k=0;g>k;k++)e.push(new j(h,i));return e},j.getRsBlockTable=function(a,b){switch(b){case d.L:return j.RS_BLOCK_TABLE[4*(a-1)+0];case d.M:return j.RS_BLOCK_TABLE[4*(a-1)+1];case d.Q:return j.RS_BLOCK_TABLE[4*(a-1)+2];case d.H:return j.RS_BLOCK_TABLE[4*(a-1)+3];default:return void 0}},k.prototype={get:function(a){var b=Math.floor(a/8);return 1==(1&this.buffer[b]>>>7-a%8)},put:function(a,b){for(var c=0;b>c;c++)this.putBit(1==(1&a>>>b-c-1))},getLengthInBits:function(){return this.length},putBit:function(a){var b=Math.floor(this.length/8);this.buffer.length<=b&&this.buffer.push(0),a&&(this.buffer[b]|=128>>>this.length%8),this.length++}};var l=[[17,14,11,7],[32,26,20,14],[53,42,32,24],[78,62,46,34],[106,84,60,44],[134,106,74,58],[154,122,86,64],[192,152,108,84],[230,180,130,98],[271,213,151,119],[321,251,177,137],[367,287,203,155],[425,331,241,177],[458,362,258,194],[520,412,292,220],[586,450,322,250],[644,504,364,280],[718,560,394,310],[792,624,442,338],[858,666,482,382],[929,711,509,403],[1003,779,565,439],[1091,857,611,461],[1171,911,661,511],[1273,997,715,535],[1367,1059,751,593],[1465,1125,805,625],[1528,1190,868,658],[1628,1264,908,698],[1732,1370,982,742],[1840,1452,1030,790],[1952,1538,1112,842],[2068,1628,1168,898],[2188,1722,1228,958],[2303,1809,1283,983],[2431,1911,1351,1051],[2563,1989,1423,1093],[2699,2099,1499,1139],[2809,2213,1579,1219],[2953,2331,1663,1273]],o=function(){var a=function(a,b){this._el=a,this._htOption=b};return a.prototype.draw=function(a){function g(a,b){var c=document.createElementNS("http://www.w3.org/2000/svg",a);for(var d in b)b.hasOwnProperty(d)&&c.setAttribute(d,b[d]);return c}var b=this._htOption,c=this._el,d=a.getModuleCount();Math.floor(b.width/d),Math.floor(b.height/d),this.clear();var h=g("svg",{viewBox:"0 0 "+String(d)+" "+String(d),width:"100%",height:"100%",fill:b.colorLight});h.setAttributeNS("http://www.w3.org/2000/xmlns/","xmlns:xlink","http://www.w3.org/1999/xlink"),c.appendChild(h),h.appendChild(g("rect",{fill:b.colorDark,width:"1",height:"1",id:"template"}));for(var i=0;d>i;i++)for(var j=0;d>j;j++)if(a.isDark(i,j)){var k=g("use",{x:String(i),y:String(j)});k.setAttributeNS("http://www.w3.org/1999/xlink","href","#template"),h.appendChild(k)}},a.prototype.clear=function(){for(;this._el.hasChildNodes();)this._el.removeChild(this._el.lastChild)},a}(),p="svg"===document.documentElement.tagName.toLowerCase(),q=p?o:m()?function(){function a(){this._elImage.src=this._elCanvas.toDataURL("image/png"),this._elImage.style.display="block",this._elCanvas.style.display="none"}function d(a,b){var c=this;if(c._fFail=b,c._fSuccess=a,null===c._bSupportDataURI){var d=document.createElement("img"),e=function(){c._bSupportDataURI=!1,c._fFail&&_fFail.call(c)},f=function(){c._bSupportDataURI=!0,c._fSuccess&&c._fSuccess.call(c)};return d.onabort=e,d.onerror=e,d.onload=f,d.src="data:image/gif;base64,iVBORw0KGgoAAAANSUhEUgAAAAUAAAAFCAYAAACNbyblAAAAHElEQVQI12P4//8/w38GIAXDIBKE0DHxgljNBAAO9TXL0Y4OHwAAAABJRU5ErkJggg==",void 0}c._bSupportDataURI===!0&&c._fSuccess?c._fSuccess.call(c):c._bSupportDataURI===!1&&c._fFail&&c._fFail.call(c)}if(this._android&&this._android<=2.1){var b=1/window.devicePixelRatio,c=CanvasRenderingContext2D.prototype.drawImage;CanvasRenderingContext2D.prototype.drawImage=function(a,d,e,f,g,h,i,j){if("nodeName"in a&&/img/i.test(a.nodeName))for(var l=arguments.length-1;l>=1;l--)arguments[l]=arguments[l]*b;else"undefined"==typeof j&&(arguments[1]*=b,arguments[2]*=b,arguments[3]*=b,arguments[4]*=b);c.apply(this,arguments)}}var e=function(a,b){this._bIsPainted=!1,this._android=n(),this._htOption=b,this._elCanvas=document.createElement("canvas"),this._elCanvas.width=b.width,this._elCanvas.height=b.height,a.appendChild(this._elCanvas),this._el=a,this._oContext=this._elCanvas.getContext("2d"),this._bIsPainted=!1,this._elImage=document.createElement("img"),this._elImage.style.display="none",this._el.appendChild(this._elImage),this._bSupportDataURI=null};return e.prototype.draw=function(a){var b=this._elImage,c=this._oContext,d=this._htOption,e=a.getModuleCount(),f=d.width/e,g=d.height/e,h=Math.round(f),i=Math.round(g);b.style.display="none",this.clear();for(var j=0;e>j;j++)for(var k=0;e>k;k++){var l=a.isDark(j,k),m=k*f,n=j*g;c.strokeStyle=l?d.colorDark:d.colorLight,c.lineWidth=1,c.fillStyle=l?d.colorDark:d.colorLight,c.fillRect(m,n,f,g),c.strokeRect(Math.floor(m)+.5,Math.floor(n)+.5,h,i),c.strokeRect(Math.ceil(m)-.5,Math.ceil(n)-.5,h,i)}this._bIsPainted=!0},e.prototype.makeImage=function(){this._bIsPainted&&d.call(this,a)},e.prototype.isPainted=function(){return this._bIsPainted},e.prototype.clear=function(){this._oContext.clearRect(0,0,this._elCanvas.width,this._elCanvas.height),this._bIsPainted=!1},e.prototype.round=function(a){return a?Math.floor(1e3*a)/1e3:a},e}():function(){var a=function(a,b){this._el=a,this._htOption=b};return a.prototype.draw=function(a){for(var b=this._htOption,c=this._el,d=a.getModuleCount(),e=Math.floor(b.width/d),f=Math.floor(b.height/d),g=['<table style="border:0;border-collapse:collapse;">'],h=0;d>h;h++){g.push("<tr>");for(var i=0;d>i;i++)g.push('<td style="border:0;border-collapse:collapse;padding:0;margin:0;width:'+e+"px;height:"+f+"px;background-color:"+(a.isDark(h,i)?b.colorDark:b.colorLight)+';"></td>');g.push("</tr>")}g.push("</table>"),c.innerHTML=g.join("");var j=c.childNodes[0],k=(b.width-j.offsetWidth)/2,l=(b.height-j.offsetHeight)/2;k>0&&l>0&&(j.style.margin=l+"px "+k+"px")},a.prototype.clear=function(){this._el.innerHTML=""},a}();QRCode=function(a,b){if(this._htOption={width:256,height:256,typeNumber:4,colorDark:"#000000",colorLight:"#ffffff",correctLevel:d.H},"string"==typeof b&&(b={text:b}),b)for(var c in b)this._htOption[c]=b[c];"string"==typeof a&&(a=document.getElementById(a)),this._android=n(),this._el=a,this._oQRCode=null,this._oDrawing=new q(this._el,this._htOption),this._htOption.text&&this.makeCode(this._htOption.text)},QRCode.prototype.makeCode=function(a){this._oQRCode=new b(r(a,this._htOption.correctLevel),this._htOption.correctLevel),this._oQRCode.addData(a),this._oQRCode.make(),this._el.title=a,this._oDrawing.draw(this._oQRCode),this.makeImage()},QRCode.prototype.makeImage=function(){"function"==typeof this._oDrawing.makeImage&&(!this._android||this._android>=3)&&this._oDrawing.makeImage()},QRCode.prototype.clear=function(){this._oDrawing.clear()},QRCode.CorrectLevel=d}();
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: podflow
3
- Version: 20250417.2
3
+ Version: 20250427
4
4
  Summary: A podcast server that includes YouTube and BiliBili
5
5
  Home-page: https://github.com/gruel-zxz/podflow
6
6
  Author: gruel_zxz
@@ -1,8 +1,8 @@
1
- podflow/__init__.py,sha256=RVR-Iyvaawd8g0gc1-lVSCwSW209XVb0gMC-qkoD4us,7332
1
+ podflow/__init__.py,sha256=aXqsJ8qN7VHvMdcgtRwR1p95my8mj9QsjOHklypRBiU,7381
2
2
  podflow/download_and_build.py,sha256=GKQ1uX8Nuwdhr4wgnGr3jP1Mu0llRUPFcboQ3S05WkU,671
3
3
  podflow/ffmpeg_judge.py,sha256=wM49pPXOFwFAA_8TKHal5fV6ka9sAA87yGQMDOssvXo,1340
4
4
  podflow/main.py,sha256=Cz2E33-Kcc_1_oxNs4Z1OoqJYhonmClsrtoCW1oQmZA,739
5
- podflow/main_podcast.py,sha256=KyKNn76XpDEUXAa6rj1WzOW9YtbuvSPLvAPGLD4QQIM,11992
5
+ podflow/main_podcast.py,sha256=P7aSJSpLLTO2AHtqZLNKMLEdzYcwDM9PSFfuY2KdjQs,12374
6
6
  podflow/main_upload.py,sha256=H_T5KQMYzToqzQbjGQ6DWDGziy8iMnpmf7A1qOStJuo,2296
7
7
  podflow/parse_arguments.py,sha256=h3a7EaRZS04kNMFYbxTW9Ch29KgZ7dyS-yqEEt_etQI,2592
8
8
  podflow/basic/__init__.py,sha256=CAfI6mVQtz7KKbAiTIZ9_IbvaTXeAqxR1U7ov9GDoDo,44
@@ -35,13 +35,14 @@ podflow/config/get_config.py,sha256=TpLbh5GoPO7csWUJ-di65XXnkN3LSnMXkFw85h5ndHs,
35
35
  podflow/download/__init__.py,sha256=1lATXiOAEx5oDUDR99mQRiTrQlQ9CQkJNAKpsLrnPCo,47
36
36
  podflow/download/convert_bytes.py,sha256=6Q3TcPGzCO2FlhOKWbp9RB_GPmfuyKY5suIyE9EJf6k,543
37
37
  podflow/download/delete_part.py,sha256=wjY6WulpUMjLx38on0kTLXj0gA04rIuKAdwFidZtWGU,679
38
- podflow/download/dl_aideo_video.py,sha256=lh-r_SKcR54oxsgS5f0wpgTUS50uOL4cNZQQwaWfxJw,10380
39
- podflow/download/show_progress.py,sha256=w_nzq6LbewXpFwXENQwbA5-L-j3XDqzfQSMU7E_CWxs,1716
38
+ podflow/download/dl_aideo_video.py,sha256=HoiAYf1QpHG17U9y--ixKOT2aupeGA2vAleVvC1JoV8,10765
39
+ podflow/download/show_progress.py,sha256=Mg_HM5HZPM4MVZ8Nu0zJ28Io-dyTBDc-9P89nkY2DI8,2208
40
40
  podflow/download/wait_animation.py,sha256=AUTvszXF89QA7XYjocFIauPKV7Qj8cFqry44teClaLQ,1314
41
- podflow/download/youtube_and_bilibili_download.py,sha256=dlUh9cPHrYgZAhtXlBUOdFIpZOhv9xOtgdcTaqUvLuY,1294
41
+ podflow/download/youtube_and_bilibili_download.py,sha256=VCEhz6pGXFWXusdbGWqkCzi4f4VsKQVn6sZz1pfGsns,1335
42
42
  podflow/httpfs/__init__.py,sha256=BxEXkufjcx-a0F7sDVXo65hmyANqCCbZUd6EH9i8T2c,45
43
- podflow/httpfs/app_bottle.py,sha256=l2myMkoRoC5O7OWCyYjCmk7wOEIlgTWfFfImlhXMYwY,17614
43
+ podflow/httpfs/app_bottle.py,sha256=cN5cxz1uFJnNH890NvXM4eHkbFMLxv78yhiPc4IO5RU,20676
44
44
  podflow/httpfs/browser.py,sha256=BJ4Xkfiki_tDr0Sc9RqAcEfIVpkAZ3RFOwo0aMHlY3U,197
45
+ podflow/httpfs/download_bar.py,sha256=BS-8FvQr5xIS5jNIMOvqtQ3NxgpbM52cvTO1XvAfXeM,877
45
46
  podflow/httpfs/get_channelid.py,sha256=gcwy4IVHBWNQz7qPCpjwiAklGFLRGzvM33-UZz7oFvo,2296
46
47
  podflow/httpfs/port_judge.py,sha256=l_nLpsSiIhAzfJGCOWyYC-KkCCWPUW2ybe_5hdMOEzE,764
47
48
  podflow/httpfs/progress_bar.py,sha256=mMkP92SrZZ-IBFz9ombWxzRJfMq20h5IbSc_eFcbZZA,682
@@ -82,7 +83,10 @@ podflow/remove/remove_dir.py,sha256=xQIhrnqnYjMzXjoSWaTvm7JwPYOFTN1muuTPdaLDXpQ,
82
83
  podflow/remove/remove_file.py,sha256=8wAJQehs-XBqvu0vPlEme2_tt0FZxc5ELwGMxXA_558,982
83
84
  podflow/repair/__init__.py,sha256=Gpc1i6xiSLodKjjmzH66c_Y1z0HQ9E9CS3p95FRnVFM,45
84
85
  podflow/repair/reverse_log.py,sha256=Wc_vAH0WB-z1fNdWx7FYaVH4caRPtot7tDwDwFhmpz4,1106
85
- podflow/templates/index.html,sha256=OoYsRsDPVWvIweVCiXGJ12j-OEvt6og5lJZhc2BIpAo,24239
86
+ podflow/templates/index.html,sha256=e7BVTWTNWrYWAUxqV9NO4BOdaKpvQSgbi4uss3QXqAg,2243
87
+ podflow/templates/css/index.css,sha256=PwWvEfpHsT0-5bxauNNToo0_ppDF-3drYOs3Zl_bMJc,9529
88
+ podflow/templates/js/index.js,sha256=awngRPOcOcEY0bUYMN7xA7b_sxrkaD9oOHZz9NWKUUM,19900
89
+ podflow/templates/js/qrcode.min.js,sha256=xUHvBjJ4hahBW8qN9gceFBibSFUzbe9PNttUvehITzY,19927
86
90
  podflow/upload/__init__.py,sha256=AtOSXDrE5EjUe3z-iBd1NTDaH8n_X9qA5WXdBLkONjA,45
87
91
  podflow/upload/add_upload.py,sha256=_2-V0z75Lwu-PUCfMD9HOSxZTB102yZlZW5hSdlHcsc,1432
88
92
  podflow/upload/build_hash.py,sha256=9opa3xLd7nJbGGX5xa3uuKPS6dxlbkAb87ZdEiUxmxI,473
@@ -97,8 +101,8 @@ podflow/youtube/__init__.py,sha256=pgXod8gq0IijZxIkPSwgAOcb9JI5rd1mqMomoR7bcJ4,4
97
101
  podflow/youtube/build.py,sha256=67m74rQOrvqU6ZZybP85ORpg3pOCkpoikttBbtO_PxY,12315
98
102
  podflow/youtube/get.py,sha256=oO32GjTFvUgP5AfFX5AlIuXU2UT6QtOUOXWLFzi8XtI,17157
99
103
  podflow/youtube/login.py,sha256=KYl--ya6Z1u0uIcOp9l8i3DIIj9hsYUDH4dtJjI0MLM,1295
100
- podflow-20250417.2.dist-info/METADATA,sha256=nyTmZVBKpKGWRcHZ4wahd9bXCeu3WWom6Jlxo1xIteo,14197
101
- podflow-20250417.2.dist-info/WHEEL,sha256=tZoeGjtWxWRfdplE7E3d45VPlLNQnvbKiYnx7gwAy8A,92
102
- podflow-20250417.2.dist-info/entry_points.txt,sha256=mn7hD_c_dmpKe3XU0KNekheBvD01LhlJ9htY-Df0j2A,131
103
- podflow-20250417.2.dist-info/top_level.txt,sha256=fUujhhz-RrMI8aGvi-3Ey5y7FQnpOOgoFw9OWM3yLCU,8
104
- podflow-20250417.2.dist-info/RECORD,,
104
+ podflow-20250427.dist-info/METADATA,sha256=grRFyZf4oiugxaC81-DTGPujyq4OwJM0PdqmQVuR1VE,14195
105
+ podflow-20250427.dist-info/WHEEL,sha256=tZoeGjtWxWRfdplE7E3d45VPlLNQnvbKiYnx7gwAy8A,92
106
+ podflow-20250427.dist-info/entry_points.txt,sha256=mn7hD_c_dmpKe3XU0KNekheBvD01LhlJ9htY-Df0j2A,131
107
+ podflow-20250427.dist-info/top_level.txt,sha256=fUujhhz-RrMI8aGvi-3Ey5y7FQnpOOgoFw9OWM3yLCU,8
108
+ podflow-20250427.dist-info/RECORD,,