autoTemp.js 17 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412
  1. /*
  2. * autoTemp 扩展
  3. * Date : 2020-01-09
  4. * Version: 2.0
  5. * author : Lith
  6. * email : LithWang@outlook.com
  7. */
  8. ; (function (scope) {
  9. scope.createDataPrivider = function () {
  10. var dataProviderClass = document.url_GetCurArg('dataProvider') || 'ApiProvider';
  11. try {
  12. with (autoTemp.dataProvider) {
  13. var clazz = eval(dataProviderClass);
  14. }
  15. var dataProvider = new clazz();
  16. } catch (e) {
  17. }
  18. //var dataProvider = new autoTemp.dataProvider.ApiProvider();
  19. return dataProvider;
  20. };
  21. })(autoTemp = {});
  22. /** 扩展 document(动态加载 js 和 css,打开新窗口,获取url参数等)
  23. * Date : 2018-08-02
  24. * author:Lith
  25. */
  26. ; (function (obj) {
  27. var toXmlStr = function toXmlStr(str) {
  28. /// <summary> 向xml转换。
  29. /// <para>例如 转换 &lt;a title=&quot;&quot;&gt;ok&lt;/a&gt; 中a标签的内容体(innerHTML)或 转换 &lt;a title=&quot;&quot;&gt;ok&lt;/a&gt; 中title的值。</para>
  30. /// <para>转换 &amp; 双引号 &lt; &gt; 为 &amp;amp; &amp;quot; &amp;lt; &amp;gt;(注: 单引号 对应 &amp;apos; (&amp;#39;) ,但有些浏览器不支持,故此函数不转换。)</para>
  31. /// </summary>
  32. /// <returns type="string">转换后的字符串</returns>
  33. return str.replace(/\&/g, "&amp;").replace(/\"/g, "&quot;").replace(/\</g, "&lt;").replace(/\>/g, "&gt;");
  34. };
  35. // var id=document.url_GetCurArg('id');
  36. obj.url_GetCurArg = function (key) {
  37. return obj.url_GetArg(location.search, key);
  38. }
  39. obj.url_GetArg = function (src, key) {
  40. /// <summary>获取当前src中的参数
  41. /// <para>demo: var jsName=document.url_GetArg("aaa.html?a=1&amp;b=2",'name');</para>
  42. /// </summary>
  43. /// <param name="src" type="string">例如:"?a=1&amp;b=2"</param>
  44. /// <param name="key" type="string">若不为字符串,则返回把所有参数做为键值对的对象。若为字符串,且获取不到,则返回 null</param>
  45. /// <returns type="string or object"></returns>
  46. if (arguments.length == 1) {
  47. key = src;
  48. src = location.search;
  49. }
  50. if ('string' == typeof key) {
  51. var v = (src.match(new RegExp("(?:\\?|&)" + key + "=(.*?)(?=&|$)")) || ['', null])[1];
  52. return v && decodeURIComponent(v);
  53. } else {
  54. var reg = /(?:\?|&)(.*?)=(.*?)(?=&|$)/g, temp, res = {};
  55. while ((temp = reg.exec(src)) != null)
  56. res[temp[1]] = decodeURIComponent(temp[2]);
  57. return res;
  58. }
  59. //var src = location.search;
  60. //if (src.length < 2 || src.charAt(0) != '?') {
  61. // return null;
  62. //}
  63. //var params = src.substring(1).split('&');
  64. //var ps = null;
  65. //for (var i in params) {
  66. // ps = params[i].split('=');
  67. // if (decodeURIComponent(ps[0]) == name) {
  68. // return decodeURIComponent(ps[1]);
  69. // }
  70. //}
  71. //return null;
  72. };
  73. obj.script_getArg = function (key) {
  74. /// <summary>返回所在脚本src参数。
  75. /// <para>demo: var jsName=lith.document.script_getArg('name');</para>
  76. /// <para>不要在方法中调用此方法,否则可能始终获取的是最后一个js的文件的参数</para>
  77. /// </summary>
  78. /// <param name="key" type="string">若不为字符串,则返回把所有参数做为键值对的对象。若为字符串,且获取不到,则返回 null</param>
  79. ////假如上面的js是在这个js1.js的脚本中<script type="text/javascript" src="js1.js?a=abc&b=汉字&c=123"></script>
  80. var scripts = document.getElementsByTagName("script"),
  81. //因为当前dom加载时后面的script标签还未加载,所以最后一个就是当前的script
  82. script = scripts[scripts.length - 1],
  83. src = script.src;
  84. return obj.url_GetArg(src, key);
  85. };
  86. obj.openWin = function (html) {
  87. /// <summary>在新页面中显示html</summary>
  88. /// <param name="html" type="String">html 代码</param>
  89. /// <returns type="Window"></returns>
  90. var oWin = window.open('');
  91. oWin.document.write(html);
  92. return oWin;
  93. };
  94. obj.openForm = function (param) {
  95. /// <summary>在新页面中新建Form,发送请求。
  96. /// <para> demo:lith.document.openForm({url:'http://www.a.com',reqParam:{a:3},type:'post'}); </para>
  97. /// </summary>
  98. /// <param name="param" type="object">
  99. /// <para> demo:{url:'http://www.a.com',reqParam:{a:3},type:'post'} </para>
  100. /// <para> url[string]:要打开的链接地址。</para>
  101. /// <para> reqParam[object]:请求参数。</para>
  102. /// <para> type[string]:请求方式。可为'get'、'post'、'put'等,不指定则为get。</para>
  103. /// </param>
  104. /// <param name="url" type="string"></param>
  105. /// <param name="postParam" type="object">。</param>
  106. /// <param name="type" type="string"></param>
  107. /// <returns type="window"></returns>
  108. var html = '<!DOC' + 'TYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head ><meta http-equiv="Content-Type" content="text/html;charset=UTF-8" /><tit';
  109. html += 'le>请稍等</title> </head><body>';
  110. html += '<h3>请稍等 ...</h3>';
  111. html += '<form accept-charset="UTF-8" name="tempForm" action="' + toXmlStr(param.url) + '" method="' + (param.type || "get") + '" style="display:none">';
  112. for (var name in param.reqParam) {
  113. html += '<input type="hidden" name="' + toXmlStr(name) + '" value="' + toXmlStr(param.reqParam[name]) + '"/>';
  114. }
  115. html += '</form>';
  116. html += '<script type="text/javascript">document.tempForm.submit();</sc' + 'ript>';
  117. html += '</body></html>';
  118. return obj.openWin(html);
  119. };
  120. obj.loadCss = function (cssSrc) {
  121. /// <summary>载入css文件。在文档加载过程中或已经加载完成后载入css文件。</summary>
  122. /// <param name="cssSrc" type="string">例如:"/Scripts/jquery-easyui/themes/icon.css"</param>
  123. if (document.readyState == "loading") {
  124. loadCss_BeforeDocumentLoaded(cssSrc);
  125. } else {
  126. loadCss_AfterDocumentLoaded(cssSrc);
  127. }
  128. function loadCss_BeforeDocumentLoaded(cssSrc) {
  129. /// <summary>载入css文件。在文档加载过程中载入css文件。</summary>
  130. /// <param name="cssSrc" type="string">例如:"/Scripts/jquery-easyui/themes/icon.css"</param>
  131. // <link rel="stylesheet" type="text/css" href="/Scripts/jquery-easyui/themes/icon.css" />
  132. document.write('<link rel="stylesheet" type="text/css" href="' + toXmlStr('' + cssSrc) + '" />');
  133. }
  134. function loadCss_BeforeDocumentLoaded(cssSrc) {
  135. /// <summary>载入css文件。在文档已经加载完成后载入css文件。</summary>
  136. /// <param name="cssSrc" type="string">例如:"/Scripts/jquery-easyui/themes/icon.css"</param>
  137. var eCss = document.createElement('link');
  138. eCss.rel = 'Stylesheet';
  139. eCss.type = 'text/css';
  140. eCss.href = cssSrc;
  141. document.getElementsByTagName("head")[0].appendChild(eCss);
  142. }
  143. };
  144. obj.addCss = function (cssText) {
  145. /// <summary>添加新的CSS样式节点。demo: lith.document.addCss('.header{ background-color:#8f8;}');</summary>
  146. /// <param name="cssText" type="String"></param>
  147. var style = document.createElement('style'); //创建一个style元素
  148. style.type = 'text/css'; //这里必须显示设置style元素的type属性为text/css,否则在ie中不起作用
  149. var head = document.head || document.getElementsByTagName('head')[0]; //获取head元素
  150. head.appendChild(style); //把创建的style元素插入到head中
  151. if (style.styleSheet) { //IE
  152. var func = function () {
  153. try {
  154. //防止IE中stylesheet数量超过限制而发生错误
  155. style.styleSheet.cssText = cssText;
  156. } catch (e) { }
  157. }
  158. //如果当前styleSheet还不能用,则放到异步中则行
  159. if (style.styleSheet.disabled) {
  160. setTimeout(func, 10);
  161. } else {
  162. func();
  163. }
  164. } else { //w3c
  165. //w3c浏览器中只要创建文本节点插入到style元素中就行了
  166. var textNode = document.createTextNode(cssText);
  167. style.appendChild(textNode);
  168. }
  169. };
  170. })(document);
  171. /** 扩展 localStorage 客户端存储
  172. * Date : 2019-04-17
  173. * author:Lith
  174. */
  175. ; (function (scope) {
  176. scope.__proto__.setValue = function (key, value, expireSeconds) {
  177. /// <summary>存储值到对应的key中</summary>
  178. /// <param name="name" type="string">索引码或者名称,需要唯一.</param>
  179. /// <param name="value" type="string">具体的内容值</param>
  180. /// <param name="expireSeconds" type="int">过期秒数,不传则永不失效</param>
  181. var data = { value: value };
  182. if (expireSeconds && expireSeconds > 0) {
  183. data.expireTime = new Date().addSecond(expireSeconds).getTime();
  184. }
  185. try {
  186. localStorage.setItem(key, JSON.stringify(data));
  187. } catch (e) {
  188. }
  189. }
  190. scope.__proto__.getValue = function (key) {
  191. /// <summary>根据对应的key返回对应值,找不到返回null</summary>
  192. /// <param name="key" type="string">索引码或者名称,需要唯一.</param>
  193. try {
  194. var data = localStorage.getItem(key);
  195. if (!data) return null;
  196. data = JSON.parse(data);
  197. if (data.expireTime) {
  198. if (data.expireTime < new Date().getTime()) {
  199. localStorage.removeItem(key);
  200. return null;
  201. }
  202. }
  203. return data.value;
  204. } catch (e) {
  205. return null;
  206. }
  207. }
  208. scope.__proto__.deleteValue = function (key) {
  209. /// <summary>根据对应的key删除值</summary>
  210. /// <param name="name" type="string">索引码或者名称,需要唯一.</param>
  211. localStorage.removeItem(key);
  212. }
  213. })(localStorage);
  214. /** 扩展 String
  215. * 说明 : 对String类的prototype和类扩充函数: toJsonStr、toJsStr、toXmlStr、decodeXmlStr、html2Text、isNotStr、trim、lTrim、rTrim
  216. * Date : 2017-09-22
  217. * author: Lith
  218. */
  219. ; (function (String) {
  220. //String的去除空格函数
  221. String.prototype.trim = function () { return this.replace(/(^\s*)|(\s*$)/g, ""); };
  222. String.prototype.lTrim = function () { return this.replace(/(^\s*)/g, ""); };
  223. String.prototype.rTrim = function () { return this.replace(/(\s*$)/g, ""); };
  224. String.prototype.toJsonStr = function () {
  225. /// <summary> 向json键值对数据的字符串型值 转换。
  226. /// <para>例如 转换为javascript 代码 var oJson={"name":"ff"}; 中json对象的name属性所对应的值(以双引号包围)。</para>
  227. /// <para>转换 \b \t \n \f \r \" \\ 为 \\b \\t \\n \\f \\r \\" \\\\</para>
  228. /// </summary>
  229. /// <returns type="string">转换后的字符串</returns>
  230. return this.replace(/\\/g, "\\\\").replace(/\x08/g, "\\b").replace(/\t/g, "\\t").replace(/\n/g, "\\n").replace(/\f/g, "\\f").replace(/\r/g, "\\r").replace(/\"/g, "\\\"");
  231. };
  232. String.prototype.toJsStr = function () {
  233. /// <summary> 向javascript的字符串转换。
  234. /// <para>例如转换为javascript 代码 var str=""; 中str对象所赋的值(以引号包围)。 </para>
  235. /// <para>转换 \b \t \n \f \r \" \' \\ 为 \\b \\t \\n \\f \\r \\" \\' \\\\ </para>
  236. /// </summary>
  237. /// <returns type="string">转换后的字符串</returns>
  238. return this.replace(/\\/g, "\\\\").replace(/\x08/g, "\\b").replace(/\t/g, "\\t").replace(/\n/g, "\\n").replace(/\f/g, "\\f").replace(/\r/g, "\\r").replace(/\"/g, "\\\"").replace(/\'/g, "\\\'");
  239. };
  240. String.prototype.toXmlStr = function () {
  241. /// <summary> 向xml转换。
  242. /// <para>例如 转换 &lt;a title=&quot;&quot;&gt;ok&lt;/a&gt; 中a标签的内容体(innerHTML)或 转换 &lt;a title=&quot;&quot;&gt;ok&lt;/a&gt; 中title的值。</para>
  243. /// <para>转换 &amp; 双引号 &lt; &gt; 为 &amp;amp; &amp;quot; &amp;lt; &amp;gt;(注: 单引号 对应 &amp;apos; (&amp;#39;) ,但有些浏览器不支持,故此函数不转换。)</para>
  244. /// </summary>
  245. /// <returns type="string">转换后的字符串</returns>
  246. return this.replace(/\&/g, "&amp;").replace(/\"/g, "&quot;").replace(/\</g, "&lt;").replace(/\>/g, "&gt;");
  247. };
  248. String.prototype.decodeXmlStr = function () {
  249. /// <summary> xml属性字符串反向转换(与toXmlStr对应)。
  250. /// <para>例如 反向转换 &lt;a title=&quot;&quot;&gt;ok&lt;/a&gt; 中a标签的内容体(innerHTML)或 转换 &lt;a title=&quot;&quot;&gt;ok&lt;/a&gt; 中title的值。</para>
  251. /// <para>转换 &amp;amp; &amp;quot; &amp;lt; &amp;gt; 为 &quot; &amp; &lt; &gt; (注: 单引号 对应 &amp;apos; (&amp;#39;) ,但有些浏览器不支持,故此函数不转换。)</para>
  252. /// </summary>
  253. /// <returns type="string">转换后的字符串</returns>
  254. return this.replace(/\&amp\;/g, "&").replace(/\&quot\;/g, "\"").replace(/\&lt\;/g, "<").replace(/\&gt\;/g, ">");
  255. };
  256. String.prototype.html2Text = function () {
  257. /// <summary> 清除Html格式。例如 : 转换 "&lt;br/&gt;aa&lt;p&gt;ssfa&lt;/p&gt;" 为 "aassfa" <summary>
  258. /// <returns type="string">转换后的字符串</returns>
  259. return this.replace(/<[^>].*?>/g, "");
  260. };
  261. function isNotStr(str) {
  262. return null == str || undefined == str;
  263. }
  264. String.isNotStr = isNotStr;
  265. String.trim = function (str) { return isNotStr(str) ? '' : ('' + str).trim(); };
  266. String.lTrim = function (str) { return isNotStr(str) ? '' : ('' + str).lTrim(); };
  267. String.rTrim = function (str) { return isNotStr(str) ? '' : ('' + str).rTrim(); };
  268. String.toJsonStr = function (str) {
  269. /// <summary> 向json键值对数据的字符串型值 转换。
  270. /// <para>例如 转换为javascript 代码 var oJson={"name":"ff"}; 中json对象的name属性所对应的值(以双引号包围)。</para>
  271. /// <para>转换 \b \t \n \f \r \" \\ 为 \\b \\t \\n \\f \\r \\" \\\\</para>
  272. /// </summary>
  273. /// <returns type="string">转换后的字符串</returns>
  274. return isNotStr(str) ? '' : ('' + str).toJsonStr();
  275. };
  276. String.toJsStr = function (str) {
  277. /// <summary> 向javascript的字符串转换。
  278. /// <para>例如转换为javascript 代码 var str=""; 中str对象所赋的值(以引号包围)。 </para>
  279. /// <para>转换 \b \t \n \f \r \" \' \\ 为 \\b \\t \\n \\f \\r \\" \\' \\\\ </para>
  280. /// </summary>
  281. /// <returns type="string">转换后的字符串</returns>
  282. return isNotStr(str) ? '' : ('' + str).toJsStr();
  283. };
  284. String.toXmlStr = function (str) {
  285. /// <summary> 向xml转换。
  286. /// <para>例如 转换 &lt;a title=&quot;&quot;&gt;ok&lt;/a&gt; 中a标签的内容体(innerHTML)或 转换 &lt;a title=&quot;&quot;&gt;ok&lt;/a&gt; 中title的值。</para>
  287. /// <para>转换 &amp; 双引号 &lt; &gt; 为 &amp;amp; &amp;quot; &amp;lt; &amp;gt;(注: 单引号 对应 &amp;apos; (&amp;#39;) ,但有些浏览器不支持,故此函数不转换。)</para>
  288. /// </summary>
  289. /// <returns type="string">转换后的字符串</returns>
  290. return isNotStr(str) ? '' : ('' + str).toXmlStr();
  291. };
  292. String.decodeXmlStr = function (str) {
  293. /// <summary> xml属性字符串反向转换(与toXmlStr对应)。
  294. /// <para>例如 反向转换 &lt;a title=&quot;&quot;&gt;ok&lt;/a&gt; 中a标签的内容体(innerHTML)或 转换 &lt;a title=&quot;&quot;&gt;ok&lt;/a&gt; 中title的值。</para>
  295. /// <para>转换 &amp;amp; &amp;quot; &amp;lt; &amp;gt; 为 &quot; &amp; &lt; &gt; (注: 单引号 对应 &amp;apos; (&amp;#39;) ,但有些浏览器不支持,故此函数不转换。)</para>
  296. /// </summary>
  297. /// <returns type="string">转换后的字符串</returns>
  298. return isNotStr(str) ? '' : ('' + str).decodeXmlStr();
  299. };
  300. String.html2Text = function (str) {
  301. /// <summary> 清除Html格式。例如 : 转换 "&lt;br/&gt;aa&lt;p&gt;ssfa&lt;/p&gt;" 为 "aassfa" <summary>
  302. /// <returns type="string">转换后的字符串</returns>
  303. return isNotStr(str) ? '' : ('' + str).html2Text();
  304. };
  305. })(String);