public.js 10 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494
  1. // Get "query string"
  2. String.prototype.getQueryString = function(name,split)
  3. {
  4. if (split==undefined) split="&";
  5. var reg = new RegExp("(^|"+split+"|\\?)"+ name +"=([^"+split+"]*)("+split+"|$)"), r;
  6. if (r=this.match(reg)) return unescape(r[2]); return null;
  7. };
  8. String.prototype.right = function(len)
  9. {
  10. return (this.substr(-len));
  11. }
  12. String.prototype.getHostName = function() {
  13. var url = this;
  14. var result = url;
  15. var regex = /^\w+\:\/\/([^\/]*).*/;
  16. var match = url.match(regex);
  17. if (typeof match != "undefined" && null != match) {
  18. result = match[1];
  19. if (result.indexOf(":") != -1) {
  20. result = result.split(":")[0];
  21. }
  22. }
  23. return result;
  24. }
  25. //公用函数定义
  26. //格式化数字
  27. Number.prototype.formatNumber = function(f)
  28. {
  29. this.fStr = function(n, f, p)
  30. {
  31. if (n==""||n==undefined)
  32. {
  33. if (f==""||f==undefined)
  34. {
  35. return "";
  36. }
  37. else
  38. {
  39. return f;
  40. }
  41. }
  42. var fc = s = r = "", pos;
  43. if (!p)
  44. {
  45. n = n.split("").reverse().join("");
  46. f = f.split("").reverse().join("");
  47. }
  48. for (var i = j = 0; i < f.length; i++, j++)
  49. {
  50. s = n.charAt(j);
  51. if (s == undefined) continue;
  52. fc = f.charAt(i);
  53. switch (fc)
  54. {
  55. case "#":
  56. r += s;
  57. pos = i;
  58. break;
  59. case "0":
  60. r = s || s == fc ? (r + s) : r + 0;
  61. pos = i;
  62. break;//原方法,这里对小数点后的处理有点问题.
  63. case ".":
  64. r += s == fc ? s : (j--, fc);
  65. break;
  66. case ",":
  67. r += s == fc ? s : (j--, fc);
  68. break;
  69. default:
  70. r += fc;
  71. j--;
  72. }
  73. }
  74. if (j != n.length && f.charAt(f.length - 1) != "0" && pos != f.length && f.charAt(pos) != "0")
  75. r = r.substr(0, pos + 1) + n.substr(j) + r.substr(pos + 1);
  76. r = (p ? r : r.split("").reverse().join("")).replace(/(^,)|(,$)|(,,+)/g, "");
  77. if (r.substr(0,1)==",")
  78. {
  79. r = r.substr(1);
  80. }
  81. if (r.substr(0,2)=="-,")
  82. {
  83. r = "-"+r.substr(2);
  84. }
  85. return r;
  86. }
  87. var n = this.toString();
  88. if (n.length == 0)
  89. return "";
  90. if (f == undefined)
  91. return this;
  92. f = f.split("."), n = n.split(".");
  93. return f.length > 1 ? this.fStr(n[0], f[0]) + "." + this.fStr(n[1], f[1], 1) : this.fStr(n[0], f[0]);
  94. };
  95. /**
  96. * 根据指定的十六进制颜色值,返回RGB颜色数值
  97. */
  98. String.prototype.getRGB = function(){
  99. var reg = /^#([0-9a-f]{3}|[0-9a-f]{6})$/;
  100. var color = this.toLowerCase();
  101. if (color && reg.test(color)) {
  102. if (color.length === 4) {
  103. var sColorNew = "#";
  104. for (var i = 1; i < 4; i += 1) {
  105. sColorNew += color.slice(i, i + 1).concat(color.slice(i, i + 1));
  106. }
  107. color = sColorNew;
  108. }
  109. //处理六位的颜色值
  110. var result = [];
  111. for (var i = 1; i < 7; i += 2) {
  112. result.push(parseInt("0x" + color.slice(i, i + 2)));
  113. }
  114. return {
  115. R: result[0],
  116. G: result[1],
  117. B: result[2]
  118. }
  119. } else {
  120. return this;
  121. }
  122. }
  123. /**
  124. * 获取一个颜色的人眼感知亮度,并以 0~1 之间的小数表示。
  125. * @param {*} color
  126. */
  127. function getGrayLevel(color)
  128. {
  129. if (!color) {
  130. color = {
  131. R:0,G:0,B:0
  132. };
  133. }
  134. if (typeof(color)==="string") {
  135. color=color.getRGB()
  136. }
  137. return (0.299 * color.R + 0.587 * color.G + 0.114 * color.B) / 255;
  138. }
  139. function getLocalTime(time)
  140. {
  141. return new Date(parseInt(time) * 1000).toLocaleString().replace(/年|月/g, "-").replace(/日/g, " ");
  142. }
  143. function formatLongTime(time,formatString){
  144. var now = new Date(parseInt(time)*1000);
  145. return formatDate(now);
  146. }
  147. function formatDate(formatDate, formatString) {
  148. if (!formatString)
  149. {
  150. formatString = "yyyy-mm-dd hh:nn:ss";
  151. }
  152. if(formatDate instanceof Date) {
  153. var months = new Array("Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec");
  154. var yyyy = formatDate.getFullYear();
  155. var yy = yyyy.toString().substring(2);
  156. var m = formatDate.getMonth()+1;
  157. var mm = m < 10 ? "0" + m : m;
  158. var mmm = months[m];
  159. var d = formatDate.getDate();
  160. var dd = d < 10 ? "0" + d : d;
  161. var h = formatDate.getHours();
  162. var hh = h < 10 ? "0" + h : h;
  163. var n = formatDate.getMinutes();
  164. var nn = n < 10 ? "0" + n : n;
  165. var s = formatDate.getSeconds();
  166. var ss = s < 10 ? "0" + s : s;
  167. formatString = formatString.replace(/yyyy/i, yyyy);
  168. formatString = formatString.replace(/yy/i, yy);
  169. formatString = formatString.replace(/mmm/i, mmm);
  170. formatString = formatString.replace(/mm/i, mm);
  171. formatString = formatString.replace(/m/i, m);
  172. formatString = formatString.replace(/dd/i, dd);
  173. formatString = formatString.replace(/d/i, d);
  174. formatString = formatString.replace(/hh/i, hh);
  175. formatString = formatString.replace(/h/i, h);
  176. formatString = formatString.replace(/nn/i, nn);
  177. formatString = formatString.replace(/n/i, n);
  178. formatString = formatString.replace(/ss/i, ss);
  179. formatString = formatString.replace(/s/i, s);
  180. return formatString;
  181. } else {
  182. return "";
  183. }
  184. }
  185. function formatSize(bytes,zeroToEmpty,type)
  186. {
  187. if (bytes==0)
  188. {
  189. if (zeroToEmpty==true)
  190. {
  191. return "";
  192. }
  193. else
  194. {
  195. if (type=="speed")
  196. {
  197. return "0.00 KB/s";
  198. }
  199. else
  200. return "0.00";
  201. }
  202. }
  203. var r = "";
  204. var u = "KB";
  205. if (bytes < 1000 * 1024)
  206. {
  207. r = (bytes / 1024);
  208. u = "KB";
  209. }
  210. else if (bytes < 1000 * 1048576)
  211. {
  212. r = (bytes / 1048576);
  213. u = "MB";
  214. }
  215. else if (bytes < 1000 * 1073741824)
  216. {
  217. r = (bytes / 1073741824);
  218. u = "GB";
  219. }
  220. else if (bytes < 1000 * 1099511627776)
  221. {
  222. r = (bytes / 1099511627776);
  223. u = "TB";
  224. }
  225. else
  226. {
  227. r = (bytes / 1125899906842624);
  228. u = "PB";
  229. }
  230. if (type=="speed")
  231. {
  232. u+="/s";
  233. }
  234. return (r.formatNumber("###,###,###,###.00 ")+u);
  235. }
  236. // 根据分钟获取小时
  237. function getHoursFromMinutes(minutes)
  238. {
  239. return (("00"+parseInt(minutes/60,10)).right(2)+":"+("00"+(minutes % 60)).right(2));
  240. }
  241. // 根据小时获取分钟
  242. function getMinutesFromHours(hours)
  243. {
  244. return (parseInt(hours.split(":")[0],10)*60+parseInt(hours.split(":")[1],10));
  245. }
  246. // Get the cumulative time
  247. function getTotalTime(time,format)
  248. {
  249. //time [ms]
  250. if (!format)
  251. {
  252. format = "%dd %hh %mm %ss ";
  253. }
  254. //Calculate the difference between the number of days
  255. var days=Math.floor(time/(24*3600*1000));
  256. //Calculate the number of hours
  257. var leave1=time%(24*3600*1000);
  258. //The number of milliseconds remaining after calculating the number of days
  259. var hours=Math.floor(leave1/(3600*1000));
  260. //Calculate the number of minutes
  261. var leave2=leave1%(3600*1000);
  262. //The number of milliseconds remaining after the number of hours is counted
  263. var minutes=Math.floor(leave2/(60*1000));
  264. //Calculate the number of seconds
  265. var leave3=leave2%(60*1000);
  266. //The number of milliseconds remaining after calculating the number of minutes
  267. var seconds=Math.round(leave3/1000);
  268. var result = format;
  269. if (days==0)
  270. {
  271. result = result.replace(/(%d+\s)/,"");
  272. }
  273. else
  274. result = result.replace("%d",days);
  275. if (hours==0)
  276. {
  277. result = result.replace(/(%h+\s)/,"");
  278. }
  279. else
  280. result = result.replace("%h",hours);
  281. if (minutes==0)
  282. {
  283. result = result.replace(/(%m+\s)/,"");
  284. }
  285. else
  286. result = result.replace("%m",minutes);
  287. if (seconds==0)
  288. {
  289. result = result.replace(/(%s+\s)/,"");
  290. }
  291. else
  292. result = result.replace("%s",seconds);
  293. return result;
  294. }
  295. // Array object sort extension
  296. function arrayObjectSort(field,sortOrder)
  297. {
  298. return function(object1, object2)
  299. {
  300. var value1 = object1[field];
  301. var value2 = object2[field];
  302. if (value1 < value2)
  303. {
  304. if (sortOrder=="desc")
  305. {
  306. return 1;
  307. }
  308. else
  309. return -1;
  310. }
  311. else if (value1 > value2)
  312. {
  313. if (sortOrder=="desc")
  314. {
  315. return -1;
  316. }
  317. else
  318. return 1;
  319. }
  320. else
  321. {
  322. return 0;
  323. }
  324. }
  325. }
  326. // Generic time - sharing processing functions
  327. function timedChunk(items, process, context, delay,callback)
  328. {
  329. var todo = items.concat();
  330. if (delay==undefined) delay = 25;
  331. setTimeout(function()
  332. {
  333. var start = +new Date();
  334. do {
  335. process.call(context, todo.shift());
  336. } while(todo.length > 0 && (+new Date() - start < 100));
  337. if(todo.length > 0) {
  338. setTimeout(arguments.callee, delay);
  339. } else if(callback) {
  340. callback(items);
  341. }
  342. }, delay);
  343. }
  344. // jQuery Extended
  345. (function($){
  346. // Fade in and out
  347. $.fn.fadeInAndOut = function(speed,easing,fn){
  348. var options = {
  349. speed:speed
  350. ,easing:easing
  351. ,fn:fn
  352. };
  353. $.extend(options, $.fn.fadeInAndOut.defaults);
  354. this.fadeIn(options.speed).delay(options.speed).fadeOut(options.speed,options.easing,options.fn);
  355. };
  356. // Plugin defaults
  357. $.fn.fadeInAndOut.defaults = {
  358. speed:1000
  359. ,easing:"swing"
  360. ,fn:null
  361. };
  362. })(jQuery);
  363. // returns only unique values
  364. function uniq(a) {
  365. var seen = {};
  366. return a.filter(function(item) {
  367. return seen.hasOwnProperty(item) ? false : (seen[item] = true);
  368. });
  369. }
  370. /**
  371. * 加载指定的文件内容
  372. */
  373. function loadFileContent(fileType, callback) {
  374. $("<input id='file-loadContent' type='file' style='display:none;' multiple='true'/>").on("change", function () {
  375. var fileSelector = this;
  376. if (fileSelector.files.length > 0 && fileSelector.files[0].name.length > 0) {
  377. var files = fileSelector.files;
  378. var count = files.length;
  379. var index = 0;
  380. var r = new FileReader();
  381. r.onload = function (e) {
  382. callback && callback.call(system, e.target.result);
  383. readFile();
  384. };
  385. r.onerror = function () {
  386. alert("文件加载失败");
  387. console.log("文件加载失败");
  388. readFile();
  389. };
  390. function readFile(file) {
  391. if (index == count) {
  392. $(fileSelector).remove();
  393. fileSelector.value = "";
  394. return;
  395. }
  396. var file = files[index];
  397. var lastIndex = file.name.lastIndexOf(".");
  398. var fix = file.name.substr(lastIndex + 1);
  399. index++;
  400. if (fileType) {
  401. if (fix != fileType) {
  402. alert("文件类型错误");
  403. return;
  404. }
  405. }
  406. r.readAsText(file);
  407. }
  408. readFile();
  409. }
  410. }).click();
  411. }
  412. /**
  413. * 将指定的内容保存为文件
  414. * @param fileName 文件名
  415. * @param fileData 文件内容
  416. */
  417. function saveFileAs(fileName, fileData) {
  418. try {
  419. var Blob = window.Blob || window.WebKitBlob;
  420. // Detect availability of the Blob constructor.
  421. var constructor_supported = false;
  422. if (Blob) {
  423. try {
  424. new Blob([], {
  425. "type": "text/plain"
  426. });
  427. constructor_supported = true;
  428. } catch (_) {}
  429. }
  430. var b = null;
  431. if (constructor_supported) {
  432. b = new Blob([fileData], {
  433. "type": "text/plain"
  434. });
  435. } else {
  436. // Deprecated BlobBuilder API
  437. var BlobBuilder = window.BlobBuilder || window.WebKitBlobBuilder;
  438. var bb = new BlobBuilder();
  439. bb.append(fileData);
  440. b = bb.getBlob("text/plain");
  441. }
  442. saveAs(b, fileName);
  443. } catch (e) {
  444. console.log(e.toString());
  445. }
  446. }