25'ten fazla konu seçemezsiniz Konular bir harf veya rakamla başlamalı, kısa çizgiler ('-') içerebilir ve en fazla 35 karakter uzunluğunda olabilir.

dom.js 7.4 KiB

14 yıl önce
13 yıl önce
13 yıl önce
13 yıl önce
13 yıl önce
14 yıl önce
13 yıl önce
13 yıl önce
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);