jquery.linkbutton.js 6.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243
  1. /**
  2. * EasyUI for jQuery 1.5.5.6
  3. *
  4. * Copyright (c) 2009-2018 www.jeasyui.com. All rights reserved.
  5. *
  6. * Licensed under the freeware license: http://www.jeasyui.com/license_freeware.php
  7. * To use it on other terms please contact us: info@jeasyui.com
  8. *
  9. */
  10. /**
  11. * linkbutton - EasyUI for jQuery
  12. *
  13. */
  14. (function($){
  15. function setSize(target, param){
  16. var opts = $.data(target, 'linkbutton').options;
  17. if (param){
  18. $.extend(opts, param);
  19. }
  20. if (opts.width || opts.height || opts.fit){
  21. var btn = $(target);
  22. var parent = btn.parent();
  23. var isVisible = btn.is(':visible');
  24. if (!isVisible){
  25. var spacer = $('<div style="display:none"></div>').insertBefore(target);
  26. var style = {
  27. position: btn.css('position'),
  28. display: btn.css('display'),
  29. left: btn.css('left')
  30. };
  31. btn.appendTo('body');
  32. btn.css({
  33. position: 'absolute',
  34. display: 'inline-block',
  35. left: -20000
  36. });
  37. }
  38. btn._size(opts, parent);
  39. var left = btn.find('.l-btn-left');
  40. left.css('margin-top', 0);
  41. left.css('margin-top', parseInt((btn.height()-left.height())/2)+'px');
  42. if (!isVisible){
  43. btn.insertAfter(spacer);
  44. btn.css(style);
  45. spacer.remove();
  46. }
  47. }
  48. }
  49. function createButton(target) {
  50. var opts = $.data(target, 'linkbutton').options;
  51. var t = $(target).empty();
  52. t.addClass('l-btn').removeClass('l-btn-plain l-btn-selected l-btn-plain-selected l-btn-outline');
  53. t.removeClass('l-btn-small l-btn-medium l-btn-large').addClass('l-btn-'+opts.size);
  54. if (opts.plain){t.addClass('l-btn-plain')}
  55. if (opts.outline){t.addClass('l-btn-outline')}
  56. if (opts.selected){
  57. t.addClass(opts.plain ? 'l-btn-selected l-btn-plain-selected' : 'l-btn-selected');
  58. }
  59. t.attr('group', opts.group || '');
  60. t.attr('id', opts.id || '');
  61. var inner = $('<span class="l-btn-left"></span>').appendTo(t);
  62. if (opts.text){
  63. $('<span class="l-btn-text"></span>').html(opts.text).appendTo(inner);
  64. } else {
  65. $('<span class="l-btn-text l-btn-empty">&nbsp;</span>').appendTo(inner);
  66. }
  67. if (opts.iconCls){
  68. $('<span class="l-btn-icon">&nbsp;</span>').addClass(opts.iconCls).appendTo(inner);
  69. inner.addClass('l-btn-icon-'+opts.iconAlign);
  70. }
  71. t.unbind('.linkbutton').bind('focus.linkbutton',function(){
  72. if (!opts.disabled){
  73. $(this).addClass('l-btn-focus');
  74. }
  75. }).bind('blur.linkbutton',function(){
  76. $(this).removeClass('l-btn-focus');
  77. }).bind('click.linkbutton',function(){
  78. if (!opts.disabled){
  79. if (opts.toggle){
  80. if (opts.selected){
  81. $(this).linkbutton('unselect');
  82. } else {
  83. $(this).linkbutton('select');
  84. }
  85. }
  86. opts.onClick.call(this);
  87. }
  88. // return false;
  89. });
  90. // if (opts.toggle && !opts.disabled){
  91. // t.bind('click.linkbutton', function(){
  92. // if (opts.selected){
  93. // $(this).linkbutton('unselect');
  94. // } else {
  95. // $(this).linkbutton('select');
  96. // }
  97. // });
  98. // }
  99. setSelected(target, opts.selected)
  100. setDisabled(target, opts.disabled);
  101. }
  102. function setSelected(target, selected){
  103. var opts = $.data(target, 'linkbutton').options;
  104. if (selected){
  105. if (opts.group){
  106. $('a.l-btn[group="'+opts.group+'"]').each(function(){
  107. var o = $(this).linkbutton('options');
  108. if (o.toggle){
  109. $(this).removeClass('l-btn-selected l-btn-plain-selected');
  110. o.selected = false;
  111. }
  112. });
  113. }
  114. $(target).addClass(opts.plain ? 'l-btn-selected l-btn-plain-selected' : 'l-btn-selected');
  115. opts.selected = true;
  116. } else {
  117. if (!opts.group){
  118. $(target).removeClass('l-btn-selected l-btn-plain-selected');
  119. opts.selected = false;
  120. }
  121. }
  122. }
  123. function setDisabled(target, disabled){
  124. var state = $.data(target, 'linkbutton');
  125. var opts = state.options;
  126. $(target).removeClass('l-btn-disabled l-btn-plain-disabled');
  127. if (disabled){
  128. opts.disabled = true;
  129. var href = $(target).attr('href');
  130. if (href){
  131. state.href = href;
  132. $(target).attr('href', 'javascript:;');
  133. }
  134. if (target.onclick){
  135. state.onclick = target.onclick;
  136. target.onclick = null;
  137. }
  138. opts.plain ? $(target).addClass('l-btn-disabled l-btn-plain-disabled') : $(target).addClass('l-btn-disabled');
  139. } else {
  140. opts.disabled = false;
  141. if (state.href) {
  142. $(target).attr('href', state.href);
  143. }
  144. if (state.onclick) {
  145. target.onclick = state.onclick;
  146. }
  147. }
  148. }
  149. $.fn.linkbutton = function(options, param){
  150. if (typeof options == 'string'){
  151. return $.fn.linkbutton.methods[options](this, param);
  152. }
  153. options = options || {};
  154. return this.each(function(){
  155. var state = $.data(this, 'linkbutton');
  156. if (state){
  157. $.extend(state.options, options);
  158. } else {
  159. $.data(this, 'linkbutton', {
  160. options: $.extend({}, $.fn.linkbutton.defaults, $.fn.linkbutton.parseOptions(this), options)
  161. });
  162. // $(this).removeAttr('disabled');
  163. $(this)._propAttr('disabled', false);
  164. $(this).bind('_resize', function(e, force){
  165. if ($(this).hasClass('easyui-fluid') || force){
  166. setSize(this);
  167. }
  168. return false;
  169. });
  170. }
  171. createButton(this);
  172. setSize(this);
  173. });
  174. };
  175. $.fn.linkbutton.methods = {
  176. options: function(jq){
  177. return $.data(jq[0], 'linkbutton').options;
  178. },
  179. resize: function(jq, param){
  180. return jq.each(function(){
  181. setSize(this, param);
  182. });
  183. },
  184. enable: function(jq){
  185. return jq.each(function(){
  186. setDisabled(this, false);
  187. });
  188. },
  189. disable: function(jq){
  190. return jq.each(function(){
  191. setDisabled(this, true);
  192. });
  193. },
  194. select: function(jq){
  195. return jq.each(function(){
  196. setSelected(this, true);
  197. });
  198. },
  199. unselect: function(jq){
  200. return jq.each(function(){
  201. setSelected(this, false);
  202. });
  203. }
  204. };
  205. $.fn.linkbutton.parseOptions = function(target){
  206. var t = $(target);
  207. return $.extend({}, $.parser.parseOptions(target,
  208. ['id','iconCls','iconAlign','group','size','text',{plain:'boolean',toggle:'boolean',selected:'boolean',outline:'boolean'}]
  209. ), {
  210. disabled: (t.attr('disabled') ? true : undefined),
  211. text: ($.trim(t.html()) || undefined),
  212. iconCls: (t.attr('icon') || t.attr('iconCls'))
  213. });
  214. };
  215. $.fn.linkbutton.defaults = {
  216. id: null,
  217. disabled: false,
  218. toggle: false,
  219. selected: false,
  220. outline: false,
  221. group: null,
  222. plain: false,
  223. text: '',
  224. iconCls: null,
  225. iconAlign: 'left',
  226. size: 'small', // small,large
  227. onClick: function(){}
  228. };
  229. })(jQuery);