mirror of
https://github.com/flying1008/OpenMico.git
synced 2023-05-22 02:45:47 +08:00
Web
Web
This commit is contained in:
2580
OpenMico-Web/js/bootstrap.js
vendored
Normal file
2580
OpenMico-Web/js/bootstrap.js
vendored
Normal file
File diff suppressed because it is too large
Load Diff
6
OpenMico-Web/js/bootstrap.min.js
vendored
Normal file
6
OpenMico-Web/js/bootstrap.min.js
vendored
Normal file
File diff suppressed because one or more lines are too long
266
OpenMico-Web/js/index.js
Normal file
266
OpenMico-Web/js/index.js
Normal file
@@ -0,0 +1,266 @@
|
||||
var username = "";
|
||||
|
||||
var HARDWARE = "";
|
||||
var DEVICEID = "";
|
||||
var SN = "";
|
||||
|
||||
var firmwares = [];
|
||||
var currFirmware = undefined;
|
||||
var currChoice = undefined;
|
||||
|
||||
var nodeSize = 0;
|
||||
var currNodeIndex = 0;
|
||||
|
||||
$(document).ready(() => {
|
||||
getFirmwares();
|
||||
|
||||
$('#pushBtn').click(function(e) {
|
||||
if(username != "" && DEVICEID != "" && SN != "" && currFirmware != undefined && currChoice != undefined) {
|
||||
push(currFirmware.name, currFirmware.hardware, currFirmware.type, currFirmware.version, currFirmware.link, currFirmware.hash, currFirmware.extra, currFirmware.batch);
|
||||
} else {
|
||||
$('#TipsModalLabel').text('推送提示');
|
||||
$('#tipsModal .modal-footer .TipsCloseBtn').css({'display': 'inline-block'});
|
||||
$('#tipsModal .modal-body').text('至少有一个选项未选择,请完成前面的步骤再推送!');
|
||||
$('#tipsModal').modal('show');
|
||||
}
|
||||
});
|
||||
|
||||
$('#tipsModal').on('hide.bs.modal', function () {
|
||||
$('#tipsModal .modal-footer .TipsCloseBtn').css({'display': 'none'});
|
||||
$('#tipsModal .modal-footer .tipsOkBtn').css({'display': 'none'});
|
||||
$('#tipsModal .modal-footer .pushNextBtn').css({'display': 'none'});
|
||||
});
|
||||
});
|
||||
|
||||
function login() {
|
||||
username = $('#username').val();
|
||||
let password = $('#password').val();
|
||||
|
||||
var passwordMd5 = $.md5(password).toUpperCase();
|
||||
|
||||
if(username == "" || password == "") {
|
||||
$('#TipsModalLabel').text('登录提示');
|
||||
$('#tipsModal .modal-footer .TipsCloseBtn').css({'display': 'inline-block'});
|
||||
$('#tipsModal .modal-body').text('信息不能为空,请检查后重试!');
|
||||
$('#tipsModal').modal('show');
|
||||
return;
|
||||
}
|
||||
|
||||
console.log('Username: ' + username);
|
||||
console.log('Password (MD5):' + passwordMd5);
|
||||
|
||||
let loginbtn = $('#loginBtn');
|
||||
loginbtn.text('正在登录');
|
||||
loginbtn.attr({"disabled":"disabled"});
|
||||
|
||||
post_url = './php/main.php?action=login&username=' + username + '&password=' + passwordMd5;
|
||||
$.ajax({
|
||||
url: post_url,
|
||||
success: function(data) {
|
||||
console.log('!!! Start loading device information !!!');
|
||||
|
||||
if(isJSON(data) != true){
|
||||
console.log('!!! Damn it! The return value is not in JSON format !!!');
|
||||
console.log('!!! Login failed! Check if the information is wrong !!!');
|
||||
|
||||
$('#TipsModalLabel').text('登录错误 (错误码: formatError)');
|
||||
$('#tipsModal .modal-footer .TipsCloseBtn').css({'display': 'inline-block'});
|
||||
$('#tipsModal .modal-body').text('登录失败,请核对密码与账号输入是否正确!');
|
||||
$('#tipsModal').modal('show');
|
||||
|
||||
loginbtn.text('登录');
|
||||
loginbtn.removeAttr("disabled");
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
console.log('DeviceList: ' + data);
|
||||
|
||||
var arr = JSON.parse(data);
|
||||
console.log(arr);
|
||||
let state = $('#state');
|
||||
if(Array.isArray(arr)){
|
||||
getDevices(arr);
|
||||
loginbtn.text('已登录');
|
||||
$('.loginLabel').css({'display': 'inline-block'});
|
||||
return;
|
||||
}
|
||||
loginbtn.text('登录');
|
||||
loginbtn.removeAttr("disabled");
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
function isJSON(str) {
|
||||
if (typeof str == 'string') {
|
||||
try {
|
||||
JSON.parse(str);
|
||||
return true;
|
||||
} catch(e) {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
function getDevices(arr) {
|
||||
var deviceTable = $('#deviceTable tbody');
|
||||
deviceTable.html('');
|
||||
|
||||
let devices = arr;
|
||||
for(let i = 0; i < devices.length; i++) {
|
||||
let deviceItem = $(`
|
||||
<tr>
|
||||
<td>` + devices[i].name + `</td>
|
||||
<td>` + devices[i].serialNumber + `</td>
|
||||
<td>` + devices[i].hardware + `</td>
|
||||
<td><button hardware="` + devices[i].hardware + `" deviceid="` + devices[i].deviceID + `" sn="` + devices[i].serialNumber + `" class="choiceBtn btn btn-default">选择</button></td>
|
||||
</tr>
|
||||
`);
|
||||
deviceTable.append(deviceItem);
|
||||
}
|
||||
|
||||
$('.choiceBtn').click((e) => {
|
||||
let choiceBtn = $(e.target);
|
||||
|
||||
if(currChoice != undefined) {
|
||||
currChoice.attr('class', 'choiceBtn btn btn-default');
|
||||
currChoice.text('选择');
|
||||
}
|
||||
choiceBtn.attr('class', 'choiceBtn btn btn-primary');
|
||||
choiceBtn.text('选中');
|
||||
currChoice = choiceBtn;
|
||||
|
||||
deviceChoice(choiceBtn.attr('deviceid'), choiceBtn.attr('sn'), choiceBtn.attr('hardware'));
|
||||
});
|
||||
}
|
||||
|
||||
function deviceChoice(deviceId, sn, hardware) {
|
||||
DEVICEID = deviceId;
|
||||
SN = sn;
|
||||
HARDWARE = hardware;
|
||||
}
|
||||
|
||||
function getFirmwares() {
|
||||
var firmwareTable = $('#firmwareTable tbody');
|
||||
firmwareTable.html('');
|
||||
|
||||
$.ajax({
|
||||
url: './data/firmwares.json',
|
||||
type: 'POST',
|
||||
dataType: 'json',
|
||||
success: function(data) {
|
||||
console.log(data);
|
||||
firmwares = data;
|
||||
console.log(firmwares);
|
||||
for(let i = 0; i < firmwares.length; i++) {
|
||||
let firmwareItem = $(`
|
||||
<tr>
|
||||
<td>` + firmwares[i].name + `</td>
|
||||
<td>` + firmwares[i].type + `</td>
|
||||
<td>` + firmwares[i].hardware + `</td>
|
||||
<td>` + firmwares[i].version + `</td>
|
||||
<td><button index="` + i + `" class="firmwareBtn btn btn-default">选择</button></td>
|
||||
</tr>
|
||||
`);
|
||||
firmwareTable.append(firmwareItem);
|
||||
}
|
||||
|
||||
var currfirmware = undefined;
|
||||
$('.firmwareBtn').click((e) => {
|
||||
let firmwareBtn = $(e.target);
|
||||
if(currfirmware != undefined) {
|
||||
currfirmware.attr('class', 'firmwareBtn btn btn-default');
|
||||
currfirmware.text('选择');
|
||||
}
|
||||
firmwareBtn.attr('class', 'firmwareBtn btn btn-primary');
|
||||
firmwareBtn.text('选中');
|
||||
currfirmware = firmwareBtn;
|
||||
|
||||
firmwareChoice(firmwareBtn.attr('index'));
|
||||
});
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
function firmwareChoice(index) {
|
||||
currFirmware = firmwares[index];
|
||||
let pushLabel = $('.pushLabel');
|
||||
if(currFirmware.batch) {
|
||||
pushLabel.css({'display': 'inline-block'});
|
||||
} else {
|
||||
pushLabel.css({'display': 'none'});
|
||||
}
|
||||
}
|
||||
|
||||
function getStr(str, start, end) {
|
||||
let res = str.match(new RegExp(`${start}(.*?)${end}`))
|
||||
return res ? res[1] : null
|
||||
}
|
||||
|
||||
function push(name, hardware, type, version, link, hash, extra, batch) {
|
||||
let pushBtn = $('#pushBtn');
|
||||
pushBtn.text('请稍等');
|
||||
pushBtn.attr({"disabled":"disabled"});
|
||||
|
||||
if(hardware != HARDWARE) {
|
||||
$('#TipsModalLabel').text('推送错误 (错误码: deviceMismatch)');
|
||||
$('#tipsModal .modal-footer .TipsCloseBtn').css({'display': 'inline-block'});
|
||||
$('#tipsModal .modal-body').text('已选择的固件只能用于设备 ' + hardware + " 而已选择的设备是 " + HARDWARE);
|
||||
$('#tipsModal').modal('show');
|
||||
pushBtn.text('开始');
|
||||
pushBtn.removeAttr("disabled");
|
||||
return;
|
||||
} //如果机型不符
|
||||
|
||||
|
||||
post_url = './php/main.php?action=push';
|
||||
|
||||
$.ajax({
|
||||
url: post_url,
|
||||
type: 'GET',
|
||||
data: {
|
||||
username,
|
||||
name,
|
||||
hardware,
|
||||
type,
|
||||
version,
|
||||
link,
|
||||
hash,
|
||||
extra,
|
||||
batch,
|
||||
deviceId: DEVICEID,
|
||||
sn: SN
|
||||
},
|
||||
success: (data) => {
|
||||
console.log('!!! Success !!!');
|
||||
|
||||
var stateCode = getStr(data, '{"code":', ',');
|
||||
console.log('State: ' + stateCode);
|
||||
|
||||
if(stateCode == '0') {
|
||||
$('#TipsModalLabel').text('推送提示');
|
||||
$('#tipsModal .modal-footer .TipsCloseBtn').css({'display': 'inline-block'});
|
||||
$('#tipsModal .modal-body').text('推送成功,请检查是否成功推送!');
|
||||
$('#tipsModal').modal('show');
|
||||
pushBtn.text('开始');
|
||||
pushBtn.removeAttr("disabled");
|
||||
} else if(stateCode == '-1') {
|
||||
$('#TipsModalLabel').text('推送错误 (错误码: deviceOffline)');
|
||||
$('#tipsModal .modal-footer .TipsCloseBtn').css({'display': 'inline-block'});
|
||||
$('#tipsModal .modal-body').text('请检查设备是否联网,或者重启设备后重试!');
|
||||
$('#tipsModal').modal('show');
|
||||
pushBtn.text('开始');
|
||||
pushBtn.removeAttr("disabled");
|
||||
} else {
|
||||
console.log(data);
|
||||
$('#TipsModalLabel').text('推送错误 (错误码: Unkown)');
|
||||
$('#tipsModal .modal-footer .TipsCloseBtn').css({'display': 'inline-block'});
|
||||
$('#tipsModal .modal-body').text('出现了预料之外的错误,已经输出详细信息在控制台内');
|
||||
$('#tipsModal').modal('show');
|
||||
pushBtn.text('开始');
|
||||
pushBtn.removeAttr("disabled");
|
||||
}
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
117
OpenMico-Web/js/jquery.cookie.js
Normal file
117
OpenMico-Web/js/jquery.cookie.js
Normal file
@@ -0,0 +1,117 @@
|
||||
/*!
|
||||
* jQuery Cookie Plugin v1.4.1
|
||||
* https://github.com/carhartl/jquery-cookie
|
||||
*
|
||||
* Copyright 2013 Klaus Hartl
|
||||
* Released under the MIT license
|
||||
*/
|
||||
(function (factory) {
|
||||
if (typeof define === 'function' && define.amd) {
|
||||
// AMD
|
||||
define(['jquery'], factory);
|
||||
} else if (typeof exports === 'object') {
|
||||
// CommonJS
|
||||
factory(require('jquery'));
|
||||
} else {
|
||||
// Browser globals
|
||||
factory(jQuery);
|
||||
}
|
||||
}(function ($) {
|
||||
|
||||
var pluses = /\+/g;
|
||||
|
||||
function encode(s) {
|
||||
return config.raw ? s : encodeURIComponent(s);
|
||||
}
|
||||
|
||||
function decode(s) {
|
||||
return config.raw ? s : decodeURIComponent(s);
|
||||
}
|
||||
|
||||
function stringifyCookieValue(value) {
|
||||
return encode(config.json ? JSON.stringify(value) : String(value));
|
||||
}
|
||||
|
||||
function parseCookieValue(s) {
|
||||
if (s.indexOf('"') === 0) {
|
||||
// This is a quoted cookie as according to RFC2068, unescape...
|
||||
s = s.slice(1, -1).replace(/\\"/g, '"').replace(/\\\\/g, '\\');
|
||||
}
|
||||
|
||||
try {
|
||||
// Replace server-side written pluses with spaces.
|
||||
// If we can't decode the cookie, ignore it, it's unusable.
|
||||
// If we can't parse the cookie, ignore it, it's unusable.
|
||||
s = decodeURIComponent(s.replace(pluses, ' '));
|
||||
return config.json ? JSON.parse(s) : s;
|
||||
} catch(e) {}
|
||||
}
|
||||
|
||||
function read(s, converter) {
|
||||
var value = config.raw ? s : parseCookieValue(s);
|
||||
return $.isFunction(converter) ? converter(value) : value;
|
||||
}
|
||||
|
||||
var config = $.cookie = function (key, value, options) {
|
||||
|
||||
// Write
|
||||
|
||||
if (value !== undefined && !$.isFunction(value)) {
|
||||
options = $.extend({}, config.defaults, options);
|
||||
|
||||
if (typeof options.expires === 'number') {
|
||||
var days = options.expires, t = options.expires = new Date();
|
||||
t.setTime(+t + days * 864e+5);
|
||||
}
|
||||
|
||||
return (document.cookie = [
|
||||
encode(key), '=', stringifyCookieValue(value),
|
||||
options.expires ? '; expires=' + options.expires.toUTCString() : '', // use expires attribute, max-age is not supported by IE
|
||||
options.path ? '; path=' + options.path : '',
|
||||
options.domain ? '; domain=' + options.domain : '',
|
||||
options.secure ? '; secure' : ''
|
||||
].join(''));
|
||||
}
|
||||
|
||||
// Read
|
||||
|
||||
var result = key ? undefined : {};
|
||||
|
||||
// To prevent the for loop in the first place assign an empty array
|
||||
// in case there are no cookies at all. Also prevents odd result when
|
||||
// calling $.cookie().
|
||||
var cookies = document.cookie ? document.cookie.split('; ') : [];
|
||||
|
||||
for (var i = 0, l = cookies.length; i < l; i++) {
|
||||
var parts = cookies[i].split('=');
|
||||
var name = decode(parts.shift());
|
||||
var cookie = parts.join('=');
|
||||
|
||||
if (key && key === name) {
|
||||
// If second argument (value) is a function it's a converter...
|
||||
result = read(cookie, value);
|
||||
break;
|
||||
}
|
||||
|
||||
// Prevent storing a cookie that we couldn't decode.
|
||||
if (!key && (cookie = read(cookie)) !== undefined) {
|
||||
result[name] = cookie;
|
||||
}
|
||||
}
|
||||
|
||||
return result;
|
||||
};
|
||||
|
||||
config.defaults = {};
|
||||
|
||||
$.removeCookie = function (key, options) {
|
||||
if ($.cookie(key) === undefined) {
|
||||
return false;
|
||||
}
|
||||
|
||||
// Must not alter options, thus extending a fresh object...
|
||||
$.cookie(key, '', $.extend({}, options, { expires: -1 }));
|
||||
return !$.cookie(key);
|
||||
};
|
||||
|
||||
}));
|
||||
269
OpenMico-Web/js/jquery.md5.js
Normal file
269
OpenMico-Web/js/jquery.md5.js
Normal file
@@ -0,0 +1,269 @@
|
||||
/*
|
||||
* jQuery MD5 Plugin 1.2.1
|
||||
* https://github.com/blueimp/jQuery-MD5
|
||||
*
|
||||
* Copyright 2010, Sebastian Tschan
|
||||
* https://blueimp.net
|
||||
*
|
||||
* Licensed under the MIT license:
|
||||
* http://creativecommons.org/licenses/MIT/
|
||||
*
|
||||
* Based on
|
||||
* A JavaScript implementation of the RSA Data Security, Inc. MD5 Message
|
||||
* Digest Algorithm, as defined in RFC 1321.
|
||||
* Version 2.2 Copyright (C) Paul Johnston 1999 - 2009
|
||||
* Other contributors: Greg Holt, Andrew Kepert, Ydnar, Lostinet
|
||||
* Distributed under the BSD License
|
||||
* See http://pajhome.org.uk/crypt/md5 for more info.
|
||||
*/
|
||||
|
||||
/*jslint bitwise: true */
|
||||
/*global unescape, jQuery */
|
||||
|
||||
(function ($) {
|
||||
'use strict';
|
||||
|
||||
/*
|
||||
* Add integers, wrapping at 2^32. This uses 16-bit operations internally
|
||||
* to work around bugs in some JS interpreters.
|
||||
*/
|
||||
function safe_add(x, y) {
|
||||
var lsw = (x & 0xFFFF) + (y & 0xFFFF),
|
||||
msw = (x >> 16) + (y >> 16) + (lsw >> 16);
|
||||
return (msw << 16) | (lsw & 0xFFFF);
|
||||
}
|
||||
|
||||
/*
|
||||
* Bitwise rotate a 32-bit number to the left.
|
||||
*/
|
||||
function bit_rol(num, cnt) {
|
||||
return (num << cnt) | (num >>> (32 - cnt));
|
||||
}
|
||||
|
||||
/*
|
||||
* These functions implement the four basic operations the algorithm uses.
|
||||
*/
|
||||
function md5_cmn(q, a, b, x, s, t) {
|
||||
return safe_add(bit_rol(safe_add(safe_add(a, q), safe_add(x, t)), s), b);
|
||||
}
|
||||
function md5_ff(a, b, c, d, x, s, t) {
|
||||
return md5_cmn((b & c) | ((~b) & d), a, b, x, s, t);
|
||||
}
|
||||
function md5_gg(a, b, c, d, x, s, t) {
|
||||
return md5_cmn((b & d) | (c & (~d)), a, b, x, s, t);
|
||||
}
|
||||
function md5_hh(a, b, c, d, x, s, t) {
|
||||
return md5_cmn(b ^ c ^ d, a, b, x, s, t);
|
||||
}
|
||||
function md5_ii(a, b, c, d, x, s, t) {
|
||||
return md5_cmn(c ^ (b | (~d)), a, b, x, s, t);
|
||||
}
|
||||
|
||||
/*
|
||||
* Calculate the MD5 of an array of little-endian words, and a bit length.
|
||||
*/
|
||||
function binl_md5(x, len) {
|
||||
/* append padding */
|
||||
x[len >> 5] |= 0x80 << ((len) % 32);
|
||||
x[(((len + 64) >>> 9) << 4) + 14] = len;
|
||||
|
||||
var i, olda, oldb, oldc, oldd,
|
||||
a = 1732584193,
|
||||
b = -271733879,
|
||||
c = -1732584194,
|
||||
d = 271733878;
|
||||
|
||||
for (i = 0; i < x.length; i += 16) {
|
||||
olda = a;
|
||||
oldb = b;
|
||||
oldc = c;
|
||||
oldd = d;
|
||||
|
||||
a = md5_ff(a, b, c, d, x[i], 7, -680876936);
|
||||
d = md5_ff(d, a, b, c, x[i + 1], 12, -389564586);
|
||||
c = md5_ff(c, d, a, b, x[i + 2], 17, 606105819);
|
||||
b = md5_ff(b, c, d, a, x[i + 3], 22, -1044525330);
|
||||
a = md5_ff(a, b, c, d, x[i + 4], 7, -176418897);
|
||||
d = md5_ff(d, a, b, c, x[i + 5], 12, 1200080426);
|
||||
c = md5_ff(c, d, a, b, x[i + 6], 17, -1473231341);
|
||||
b = md5_ff(b, c, d, a, x[i + 7], 22, -45705983);
|
||||
a = md5_ff(a, b, c, d, x[i + 8], 7, 1770035416);
|
||||
d = md5_ff(d, a, b, c, x[i + 9], 12, -1958414417);
|
||||
c = md5_ff(c, d, a, b, x[i + 10], 17, -42063);
|
||||
b = md5_ff(b, c, d, a, x[i + 11], 22, -1990404162);
|
||||
a = md5_ff(a, b, c, d, x[i + 12], 7, 1804603682);
|
||||
d = md5_ff(d, a, b, c, x[i + 13], 12, -40341101);
|
||||
c = md5_ff(c, d, a, b, x[i + 14], 17, -1502002290);
|
||||
b = md5_ff(b, c, d, a, x[i + 15], 22, 1236535329);
|
||||
|
||||
a = md5_gg(a, b, c, d, x[i + 1], 5, -165796510);
|
||||
d = md5_gg(d, a, b, c, x[i + 6], 9, -1069501632);
|
||||
c = md5_gg(c, d, a, b, x[i + 11], 14, 643717713);
|
||||
b = md5_gg(b, c, d, a, x[i], 20, -373897302);
|
||||
a = md5_gg(a, b, c, d, x[i + 5], 5, -701558691);
|
||||
d = md5_gg(d, a, b, c, x[i + 10], 9, 38016083);
|
||||
c = md5_gg(c, d, a, b, x[i + 15], 14, -660478335);
|
||||
b = md5_gg(b, c, d, a, x[i + 4], 20, -405537848);
|
||||
a = md5_gg(a, b, c, d, x[i + 9], 5, 568446438);
|
||||
d = md5_gg(d, a, b, c, x[i + 14], 9, -1019803690);
|
||||
c = md5_gg(c, d, a, b, x[i + 3], 14, -187363961);
|
||||
b = md5_gg(b, c, d, a, x[i + 8], 20, 1163531501);
|
||||
a = md5_gg(a, b, c, d, x[i + 13], 5, -1444681467);
|
||||
d = md5_gg(d, a, b, c, x[i + 2], 9, -51403784);
|
||||
c = md5_gg(c, d, a, b, x[i + 7], 14, 1735328473);
|
||||
b = md5_gg(b, c, d, a, x[i + 12], 20, -1926607734);
|
||||
|
||||
a = md5_hh(a, b, c, d, x[i + 5], 4, -378558);
|
||||
d = md5_hh(d, a, b, c, x[i + 8], 11, -2022574463);
|
||||
c = md5_hh(c, d, a, b, x[i + 11], 16, 1839030562);
|
||||
b = md5_hh(b, c, d, a, x[i + 14], 23, -35309556);
|
||||
a = md5_hh(a, b, c, d, x[i + 1], 4, -1530992060);
|
||||
d = md5_hh(d, a, b, c, x[i + 4], 11, 1272893353);
|
||||
c = md5_hh(c, d, a, b, x[i + 7], 16, -155497632);
|
||||
b = md5_hh(b, c, d, a, x[i + 10], 23, -1094730640);
|
||||
a = md5_hh(a, b, c, d, x[i + 13], 4, 681279174);
|
||||
d = md5_hh(d, a, b, c, x[i], 11, -358537222);
|
||||
c = md5_hh(c, d, a, b, x[i + 3], 16, -722521979);
|
||||
b = md5_hh(b, c, d, a, x[i + 6], 23, 76029189);
|
||||
a = md5_hh(a, b, c, d, x[i + 9], 4, -640364487);
|
||||
d = md5_hh(d, a, b, c, x[i + 12], 11, -421815835);
|
||||
c = md5_hh(c, d, a, b, x[i + 15], 16, 530742520);
|
||||
b = md5_hh(b, c, d, a, x[i + 2], 23, -995338651);
|
||||
|
||||
a = md5_ii(a, b, c, d, x[i], 6, -198630844);
|
||||
d = md5_ii(d, a, b, c, x[i + 7], 10, 1126891415);
|
||||
c = md5_ii(c, d, a, b, x[i + 14], 15, -1416354905);
|
||||
b = md5_ii(b, c, d, a, x[i + 5], 21, -57434055);
|
||||
a = md5_ii(a, b, c, d, x[i + 12], 6, 1700485571);
|
||||
d = md5_ii(d, a, b, c, x[i + 3], 10, -1894986606);
|
||||
c = md5_ii(c, d, a, b, x[i + 10], 15, -1051523);
|
||||
b = md5_ii(b, c, d, a, x[i + 1], 21, -2054922799);
|
||||
a = md5_ii(a, b, c, d, x[i + 8], 6, 1873313359);
|
||||
d = md5_ii(d, a, b, c, x[i + 15], 10, -30611744);
|
||||
c = md5_ii(c, d, a, b, x[i + 6], 15, -1560198380);
|
||||
b = md5_ii(b, c, d, a, x[i + 13], 21, 1309151649);
|
||||
a = md5_ii(a, b, c, d, x[i + 4], 6, -145523070);
|
||||
d = md5_ii(d, a, b, c, x[i + 11], 10, -1120210379);
|
||||
c = md5_ii(c, d, a, b, x[i + 2], 15, 718787259);
|
||||
b = md5_ii(b, c, d, a, x[i + 9], 21, -343485551);
|
||||
|
||||
a = safe_add(a, olda);
|
||||
b = safe_add(b, oldb);
|
||||
c = safe_add(c, oldc);
|
||||
d = safe_add(d, oldd);
|
||||
}
|
||||
return [a, b, c, d];
|
||||
}
|
||||
|
||||
/*
|
||||
* Convert an array of little-endian words to a string
|
||||
*/
|
||||
function binl2rstr(input) {
|
||||
var i,
|
||||
output = '';
|
||||
for (i = 0; i < input.length * 32; i += 8) {
|
||||
output += String.fromCharCode((input[i >> 5] >>> (i % 32)) & 0xFF);
|
||||
}
|
||||
return output;
|
||||
}
|
||||
|
||||
/*
|
||||
* Convert a raw string to an array of little-endian words
|
||||
* Characters >255 have their high-byte silently ignored.
|
||||
*/
|
||||
function rstr2binl(input) {
|
||||
var i,
|
||||
output = [];
|
||||
output[(input.length >> 2) - 1] = undefined;
|
||||
for (i = 0; i < output.length; i += 1) {
|
||||
output[i] = 0;
|
||||
}
|
||||
for (i = 0; i < input.length * 8; i += 8) {
|
||||
output[i >> 5] |= (input.charCodeAt(i / 8) & 0xFF) << (i % 32);
|
||||
}
|
||||
return output;
|
||||
}
|
||||
|
||||
/*
|
||||
* Calculate the MD5 of a raw string
|
||||
*/
|
||||
function rstr_md5(s) {
|
||||
return binl2rstr(binl_md5(rstr2binl(s), s.length * 8));
|
||||
}
|
||||
|
||||
/*
|
||||
* Calculate the HMAC-MD5, of a key and some data (raw strings)
|
||||
*/
|
||||
function rstr_hmac_md5(key, data) {
|
||||
var i,
|
||||
bkey = rstr2binl(key),
|
||||
ipad = [],
|
||||
opad = [],
|
||||
hash;
|
||||
ipad[15] = opad[15] = undefined;
|
||||
if (bkey.length > 16) {
|
||||
bkey = binl_md5(bkey, key.length * 8);
|
||||
}
|
||||
for (i = 0; i < 16; i += 1) {
|
||||
ipad[i] = bkey[i] ^ 0x36363636;
|
||||
opad[i] = bkey[i] ^ 0x5C5C5C5C;
|
||||
}
|
||||
hash = binl_md5(ipad.concat(rstr2binl(data)), 512 + data.length * 8);
|
||||
return binl2rstr(binl_md5(opad.concat(hash), 512 + 128));
|
||||
}
|
||||
|
||||
/*
|
||||
* Convert a raw string to a hex string
|
||||
*/
|
||||
function rstr2hex(input) {
|
||||
var hex_tab = '0123456789abcdef',
|
||||
output = '',
|
||||
x,
|
||||
i;
|
||||
for (i = 0; i < input.length; i += 1) {
|
||||
x = input.charCodeAt(i);
|
||||
output += hex_tab.charAt((x >>> 4) & 0x0F) +
|
||||
hex_tab.charAt(x & 0x0F);
|
||||
}
|
||||
return output;
|
||||
}
|
||||
|
||||
/*
|
||||
* Encode a string as utf-8
|
||||
*/
|
||||
function str2rstr_utf8(input) {
|
||||
return unescape(encodeURIComponent(input));
|
||||
}
|
||||
|
||||
/*
|
||||
* Take string arguments and return either raw or hex encoded strings
|
||||
*/
|
||||
function raw_md5(s) {
|
||||
return rstr_md5(str2rstr_utf8(s));
|
||||
}
|
||||
function hex_md5(s) {
|
||||
return rstr2hex(raw_md5(s));
|
||||
}
|
||||
function raw_hmac_md5(k, d) {
|
||||
return rstr_hmac_md5(str2rstr_utf8(k), str2rstr_utf8(d));
|
||||
}
|
||||
function hex_hmac_md5(k, d) {
|
||||
return rstr2hex(raw_hmac_md5(k, d));
|
||||
}
|
||||
|
||||
$.md5 = function (string, key, raw) {
|
||||
if (!key) {
|
||||
if (!raw) {
|
||||
return hex_md5(string);
|
||||
} else {
|
||||
return raw_md5(string);
|
||||
}
|
||||
}
|
||||
if (!raw) {
|
||||
return hex_hmac_md5(key, string);
|
||||
} else {
|
||||
return raw_hmac_md5(key, string);
|
||||
}
|
||||
};
|
||||
|
||||
}(typeof jQuery === 'function' ? jQuery : this));
|
||||
6
OpenMico-Web/js/jquery.min.js
vendored
Normal file
6
OpenMico-Web/js/jquery.min.js
vendored
Normal file
File diff suppressed because one or more lines are too long
13
OpenMico-Web/js/npm.js
Normal file
13
OpenMico-Web/js/npm.js
Normal file
@@ -0,0 +1,13 @@
|
||||
// This file is autogenerated via the `commonjs` Grunt task. You can require() this file in a CommonJS environment.
|
||||
require('../../js/transition.js')
|
||||
require('../../js/alert.js')
|
||||
require('../../js/button.js')
|
||||
require('../../js/carousel.js')
|
||||
require('../../js/collapse.js')
|
||||
require('../../js/dropdown.js')
|
||||
require('../../js/modal.js')
|
||||
require('../../js/tooltip.js')
|
||||
require('../../js/popover.js')
|
||||
require('../../js/scrollspy.js')
|
||||
require('../../js/tab.js')
|
||||
require('../../js/affix.js')
|
||||
Reference in New Issue
Block a user