util.js 3.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157
  1. /*
  2. Copyright (c) 2004-2012, The Dojo Foundation All Rights Reserved.
  3. Available via Academic Free License >= 2.1 OR the modified BSD license.
  4. see: http://dojotoolkit.org/license for details
  5. */
  6. if(!dojo._hasResource["dojox.xmpp.util"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
  7. dojo._hasResource["dojox.xmpp.util"] = true;
  8. dojo.provide("dojox.xmpp.util");
  9. dojo.require("dojox.string.Builder");
  10. dojo.require("dojox.encoding.base64");
  11. dojox.xmpp.util.xmlEncode = function(str) {
  12. if(str) {
  13. str = str.replace("&", "&amp;").replace(">", "&gt;").replace("<", "&lt;").replace("'", "&apos;").replace('"', "&quot;");
  14. }
  15. return str;
  16. }
  17. dojox.xmpp.util.encodeJid = function(jid) {
  18. var buffer = new dojox.string.Builder();
  19. for(var i =0; i < jid.length; i++) {
  20. var ch = jid.charAt(i);
  21. var rep = ch;
  22. switch(ch){
  23. case ' ' :
  24. rep = "\\20";
  25. break;
  26. case '"' :
  27. rep = "\\22";
  28. break;
  29. case '#' :
  30. rep = "\\23";
  31. break;
  32. case '&' :
  33. rep = "\\26";
  34. break;
  35. case "'" :
  36. rep = "\\27";
  37. break;
  38. case '/' :
  39. rep = "\\2f";
  40. break;
  41. case ':' :
  42. rep = "\\3a";
  43. break;
  44. case '<' :
  45. rep = "\\3c";
  46. break;
  47. case '>' :
  48. rep = "\\3e";
  49. break;
  50. }
  51. buffer.append(rep);
  52. }
  53. return buffer.toString();
  54. }
  55. dojox.xmpp.util.decodeJid = function(jid) {
  56. jid = jid.replace(/\\([23][02367acef])/g, function(match) {
  57. switch(match){
  58. case "\\20" :
  59. return ' ';
  60. case "\\22" :
  61. return '"';
  62. case "\\23" :
  63. return '#' ;
  64. case "\\26" :
  65. return '&';
  66. case "\\27" :
  67. return "'";
  68. case "\\2f" :
  69. return '/';
  70. case "\\3a" :
  71. return ':' ;
  72. case "\\3c" :
  73. return '<';
  74. case "\\3e" :
  75. return '>';
  76. }
  77. return "ARG";
  78. });
  79. return jid;
  80. }
  81. dojox.xmpp.util.createElement = function(tag, attributes, terminal){
  82. var elem = new dojox.string.Builder("<");
  83. elem.append(tag + " ");
  84. for (var attr in attributes){
  85. elem.append(attr + '="');
  86. elem.append(attributes[attr]);
  87. elem.append('" ');
  88. }
  89. if (terminal){
  90. elem.append("/>");
  91. }else{
  92. elem.append(">");
  93. }
  94. return elem.toString();
  95. }
  96. dojox.xmpp.util.stripHtml = function(str){
  97. // summary
  98. // Strips all HTML, including attributes and brackets
  99. // | <div onmouse="doBadThing()">Click <b>Me</b></div>
  100. // | becomes: Click Me
  101. var re=/<[^>]*?>/gi;
  102. for (var i=0; i<arguments.length; i++) {}
  103. return str.replace(re, "");
  104. }
  105. dojox.xmpp.util.decodeHtmlEntities = function(str){
  106. // Summary: decodes HTML entities to js characters so the string can be
  107. // fed to a textarea.value
  108. var ta = dojo.doc.createElement("textarea");
  109. ta.innerHTML = str.replace(/</g,"&lt;").replace(/>/g,"&gt;");
  110. return ta.value;
  111. }
  112. dojox.xmpp.util.htmlToPlain = function(str){
  113. str = dojox.xmpp.util.decodeHtmlEntities(str);
  114. str = str.replace(/<br\s*[i\/]{0,1}>/gi,"\n");
  115. str = dojox.xmpp.util.stripHtml(str);
  116. return str;
  117. }
  118. dojox.xmpp.util.Base64 = {};
  119. dojox.xmpp.util.Base64.encode = function(input){
  120. var s2b = function(s){
  121. var b = [];
  122. for(var i = 0; i < s.length; ++i){
  123. b.push(s.charCodeAt(i));
  124. }
  125. return b;
  126. };
  127. return dojox.encoding.base64.encode(s2b(input));
  128. }
  129. dojox.xmpp.util.Base64.decode = function(input){
  130. var b2s = function(b){
  131. var s = [];
  132. dojo.forEach(b, function(c){ s.push(String.fromCharCode(c)); });
  133. return s.join("");
  134. };
  135. return b2s(dojox.encoding.base64.decode(input));
  136. }
  137. }