Você não pode selecionar mais de 25 tópicos Os tópicos devem começar com uma letra ou um número, podem incluir traços ('-') e podem ter até 35 caracteres.

13 anos atrás
14 anos atrás
13 anos atrás
13 anos atrás
13 anos atrás
13 anos atrás
14 anos atrás
13 anos atrás
13 anos atrás
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268
  1. // Copyright (c) 2013, Web Notes Technologies Pvt. Ltd. and Contributors
  2. // MIT License. See license.txt
  3. // add a new dom element
  4. wn.provide('wn.dom');
  5. wn.dom = {
  6. id_count: 0,
  7. freeze_count: 0,
  8. by_id: function(id) {
  9. return document.getElementById(id);
  10. },
  11. set_unique_id: function(ele) {
  12. var id = 'unique-' + wn.dom.id_count;
  13. if(ele)
  14. ele.setAttribute('id', id);
  15. wn.dom.id_count++;
  16. return id;
  17. },
  18. eval: function(txt) {
  19. if(!txt) return;
  20. var el = document.createElement('script');
  21. el.appendChild(document.createTextNode(txt));
  22. // execute the script globally
  23. document.getElementsByTagName('head')[0].appendChild(el);
  24. },
  25. set_style: function(txt) {
  26. if(!txt) return;
  27. var se = document.createElement('style');
  28. se.type = "text/css";
  29. if (se.styleSheet) {
  30. se.styleSheet.cssText = txt;
  31. } else {
  32. se.appendChild(document.createTextNode(txt));
  33. }
  34. document.getElementsByTagName('head')[0].appendChild(se);
  35. },
  36. add: function(parent, newtag, className, cs, innerHTML, onclick) {
  37. if(parent && parent.substr)parent = wn.dom.by_id(parent);
  38. var c = document.createElement(newtag);
  39. if(parent)
  40. parent.appendChild(c);
  41. // if image, 3rd parameter is source
  42. if(className) {
  43. if(newtag.toLowerCase()=='img')
  44. c.src = className
  45. else
  46. c.className = className;
  47. }
  48. if(cs) wn.dom.css(c,cs);
  49. if(innerHTML) c.innerHTML = innerHTML;
  50. if(onclick) c.onclick = onclick;
  51. return c;
  52. },
  53. css: function(ele, s) {
  54. if(ele && s) {
  55. for(var i in s) ele.style[i]=s[i];
  56. };
  57. return ele;
  58. },
  59. freeze: function() {
  60. // blur
  61. if(!$('#freeze').length) {
  62. $("<div id='freeze'>").appendTo("#body_div").css('opacity', 0.6);
  63. }
  64. $('#freeze').toggle(true);
  65. wn.dom.freeze_count++;
  66. },
  67. unfreeze: function() {
  68. if(!wn.dom.freeze_count)return; // anything open?
  69. wn.dom.freeze_count--;
  70. if(!wn.dom.freeze_count) {
  71. $('#freeze').toggle(false);
  72. }
  73. },
  74. save_selection: function() {
  75. // via http://stackoverflow.com/questions/5605401/insert-link-in-contenteditable-element
  76. if (window.getSelection) {
  77. sel = window.getSelection();
  78. if (sel.getRangeAt && sel.rangeCount) {
  79. var ranges = [];
  80. for (var i = 0, len = sel.rangeCount; i < len; ++i) {
  81. ranges.push(sel.getRangeAt(i));
  82. }
  83. return ranges;
  84. }
  85. } else if (document.selection && document.selection.createRange) {
  86. return document.selection.createRange();
  87. }
  88. return null;
  89. },
  90. restore_selection: function(savedSel) {
  91. if (savedSel) {
  92. if (window.getSelection) {
  93. sel = window.getSelection();
  94. sel.removeAllRanges();
  95. for (var i = 0, len = savedSel.length; i < len; ++i) {
  96. sel.addRange(savedSel[i]);
  97. }
  98. } else if (document.selection && savedSel.select) {
  99. savedSel.select();
  100. }
  101. }
  102. }
  103. }
  104. wn.get_modal = function(title, body_html) {
  105. var modal = $('<div class="modal" style="overflow: auto;" tabindex="-1">\
  106. <div class="modal-dialog">\
  107. <div class="modal-content">\
  108. <div class="modal-header">\
  109. <a type="button" class="close"\
  110. data-dismiss="modal" aria-hidden="true">&times;</a>\
  111. <h4 class="modal-title">'+title+'</h4>\
  112. </div>\
  113. <div class="modal-body ui-front">'+body_html+'\
  114. </div>\
  115. </div>\
  116. </div>\
  117. </div>').appendTo(document.body);
  118. return modal;
  119. };
  120. var pending_req = 0
  121. wn.set_loading = function() {
  122. pending_req++;
  123. //$('#spinner').css('visibility', 'visible');
  124. $('body').css('cursor', 'progress');
  125. NProgress.start();
  126. }
  127. wn.done_loading = function() {
  128. pending_req--;
  129. if(!pending_req){
  130. $('body').css('cursor', 'default');
  131. //$('#spinner').css('visibility', 'hidden');
  132. NProgress.done();
  133. } else {
  134. NProgress.inc();
  135. }
  136. }
  137. var get_hex = function(i) {
  138. i = Math.round(i);
  139. if(i>255) return 'ff';
  140. if(i<0) return '00';
  141. i =i .toString(16);
  142. if(i.length==1) i = '0'+i;
  143. return i;
  144. }
  145. wn.get_shade = function(color, factor) {
  146. if(color.substr(0,3)=="rgb") {
  147. var rgb = function(r,g,b) {
  148. return get_hex(r) + get_hex(g) + get_hex(b);
  149. }
  150. color = eval(color);
  151. }
  152. if(color.substr(0,1)=="#") {
  153. var color = color.substr(1);
  154. }
  155. var get_int = function(hex) {
  156. return parseInt(hex,16);
  157. }
  158. return get_hex(get_int(color.substr(0,2)) + factor)
  159. + get_hex(get_int(color.substr(2,2)) + factor)
  160. + get_hex(get_int(color.substr(4,2)) + factor)
  161. }
  162. wn.get_gradient_css = function(col, diff) {
  163. if(!diff) diff = 10
  164. var col1 = wn.get_shade(col, diff);
  165. var col2 = wn.get_shade(col, -diff);
  166. return "\nbackground-color: " + col + " !important;"
  167. +"\nbackground: -moz-linear-gradient(top, #"+col1+" 0%, #"+col2+" 99%) !important;"
  168. +"\nbackground:-webkit-gradient(linear, left top, left bottom, color-stop(0%,#"+col1+"), color-stop(99%,#"+col2+")) !important;"
  169. +"\nbackground:-webkit-linear-gradient(top, #"+col1+" 0%,#"+col2+" 99%) !important;"
  170. +"\nbackground:-o-linear-gradient(top, #"+col1+" 0%,#"+col2+" 99%) !important;"
  171. +"\nbackground:-ms-linear-gradient(top, #"+col1+" 0%,#"+col2+" 99%) !important;"
  172. +"\nbackground:-o-linear-gradient(top, #"+col1+" 0%,#"+col2+" 99%) !important;"
  173. +"\nbackground:linear-gradient(top, #"+col1+" 0%,#%"+col2+" 99%) !important;"
  174. +"\nfilter:progid:DXImageTransform.Microsoft.gradient( startColorstr='#"+col1+"', endColorstr='#"+col1+"',GradientType=0 ) !important;"
  175. }
  176. $.fn.gradientify = function(col) {
  177. if(!col) col = this.css("background-color");
  178. var col1 = wn.get_shade(col, 1.05);
  179. var col2 = wn.get_shade(col, 0.95);
  180. this.css({
  181. "background": "-moz-linear-gradient(top, #"+col1+" 0%, #"+col2+" 99%)"
  182. });
  183. this.css({
  184. "background": "-webkit-gradient(linear, left top, left bottom, color-stop(0%,#"+col1+"), color-stop(99%,#"+col2+"))"
  185. });
  186. this.css({
  187. "background": "-webkit-linear-gradient(top, #"+col1+" 0%,#"+col2+" 99%)"
  188. });
  189. this.css({
  190. "background": "-o-linear-gradient(top, #"+col1+" 0%,#"+col2+" 99%);"
  191. });
  192. this.css({
  193. "background": "-ms-linear-gradient(top, #"+col1+" 0%,#"+col2+" 99%);"
  194. });
  195. this.css({
  196. "background": "-o-linear-gradient(top, #"+col1+" 0%,#"+col2+" 99%);"
  197. });
  198. this.css({
  199. "background": "linear-gradient(top, #"+col1+" 0%,#%"+col2+" 99%);"
  200. });
  201. this.css({
  202. "filter": "progid:DXImageTransform.Microsoft.gradient( startColorstr='#"+col1+"', endColorstr='#"+col1+"',GradientType=0 )"
  203. });
  204. }
  205. wn.get_cookie = function(c) {
  206. var clist = (document.cookie+'').split(';');
  207. var cookies = {};
  208. for(var i=0;i<clist.length;i++) {
  209. var tmp = clist[i].split('=');
  210. cookies[strip(tmp[0])] = strip(tmp[1]);
  211. }
  212. return cookies[c];
  213. }
  214. wn.dom.set_box_shadow = function(ele, spread) {
  215. $(ele).css('-moz-box-shadow', '0px 0px '+ spread +'px rgba(0,0,0,0.3);')
  216. $(ele).css('-webkit-box-shadow', '0px 0px '+ spread +'px rgba(0,0,0,0.3);')
  217. $(ele).css('-box-shadow', '0px 0px '+ spread +'px rgba(0,0,0,0.3);')
  218. };
  219. // add <option> list to <select>
  220. (function($) {
  221. $.fn.add_options = function(options_list) {
  222. // create options
  223. for(var i=0; i<options_list.length; i++) {
  224. var v = options_list[i];
  225. value = v.value || v;
  226. label = wn._(v.label || v);
  227. $('<option>').html(label).attr('value', value).appendTo(this);
  228. }
  229. // select the first option
  230. this.selectedIndex = 0;
  231. return $(this);
  232. }
  233. $.fn.set_working = function() {
  234. var ele = this.get(0);
  235. $(ele).prop('disabled', true);
  236. if(ele.loading_img) {
  237. $(ele.loading_img).toggle(true);
  238. } else {
  239. ele.loading_img = $('<img src="assets/webnotes/images/ui/button-load.gif" \
  240. style="margin-left: 4px; margin-bottom: -2px; display: inline;" />')
  241. .insertAfter(ele);
  242. }
  243. }
  244. $.fn.done_working = function() {
  245. var ele = this.get(0);
  246. $(ele).prop('disabled', false);
  247. if(ele.loading_img) {
  248. $(ele.loading_img).toggle(false);
  249. };
  250. }
  251. })(jQuery);