facePrint.js 2.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687
  1. // Just for temporarily mobile debug.
  2. (function () {
  3. var infoDom;
  4. var msgs = [];
  5. var count = 0;
  6. /**
  7. * @param {string|Object|Array} msg
  8. */
  9. window.facePrint = function (msg) {
  10. if (!infoDom) {
  11. infoDom = createInfoDom();
  12. }
  13. if (isObject(msg)) {
  14. msg = window.facePrint.objToStr(msg);
  15. }
  16. msgs.push(encodeHTML(msg));
  17. count++;
  18. if (msgs.length > 30) {
  19. msgs.shift();
  20. }
  21. var str = '';
  22. // Make some change in view, otherwise user may
  23. // be not aware that log is still printing.
  24. for (var i = 0; i < msgs.length; i++) {
  25. str += '<span style="background:#555;margin: 0 3px;padding: 0 2px;color:yellow;">'
  26. + (count - msgs.length + i) + '</span>' + msgs[i];
  27. }
  28. infoDom.innerHTML = str;
  29. };
  30. window.facePrint.objToStr = function (obj) {
  31. var msgArr = [];
  32. for (var key in obj) {
  33. msgArr.push(key + '=' + obj[key]);
  34. }
  35. return msgArr.join(', ');
  36. };
  37. function createInfoDom() {
  38. var dom = document.createElement('div');
  39. dom.style.cssText = [
  40. 'position: fixed',
  41. 'top: 0',
  42. 'width: 100%',
  43. 'min-height: 14px',
  44. 'line-height: 14px',
  45. 'z-index: 2147483647',
  46. 'color: #fff',
  47. 'font-size: 9px',
  48. 'background: #000',
  49. 'word-break:break-all',
  50. 'word-wrap:break-word'
  51. ].join(';') + ';';
  52. document.body.appendChild(dom);
  53. return dom;
  54. }
  55. function encodeHTML(source) {
  56. return source == null
  57. ? ''
  58. : String(source)
  59. .replace(/&/g, '&amp;')
  60. .replace(/</g, '&lt;')
  61. .replace(/>/g, '&gt;')
  62. .replace(/"/g, '&quot;')
  63. .replace(/'/g, '&#39;');
  64. }
  65. function isObject(value) {
  66. // Avoid a V8 JIT bug in Chrome 19-20.
  67. // See https://code.google.com/p/v8/issues/detail?id=2291 for more details.
  68. var type = typeof value;
  69. return type === 'function' || (!!value && type == 'object');
  70. }
  71. })();