jquery.linkbutton.js 6.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242
  1. /**
  2. * jQuery EasyUI 1.5.2
  3. *
  4. * Copyright (c) 2009-2017 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 - jQuery EasyUI
  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).bind('_resize', function(e, force){
  164. if ($(this).hasClass('easyui-fluid') || force){
  165. setSize(this);
  166. }
  167. return false;
  168. });
  169. }
  170. createButton(this);
  171. setSize(this);
  172. });
  173. };
  174. $.fn.linkbutton.methods = {
  175. options: function(jq){
  176. return $.data(jq[0], 'linkbutton').options;
  177. },
  178. resize: function(jq, param){
  179. return jq.each(function(){
  180. setSize(this, param);
  181. });
  182. },
  183. enable: function(jq){
  184. return jq.each(function(){
  185. setDisabled(this, false);
  186. });
  187. },
  188. disable: function(jq){
  189. return jq.each(function(){
  190. setDisabled(this, true);
  191. });
  192. },
  193. select: function(jq){
  194. return jq.each(function(){
  195. setSelected(this, true);
  196. });
  197. },
  198. unselect: function(jq){
  199. return jq.each(function(){
  200. setSelected(this, false);
  201. });
  202. }
  203. };
  204. $.fn.linkbutton.parseOptions = function(target){
  205. var t = $(target);
  206. return $.extend({}, $.parser.parseOptions(target,
  207. ['id','iconCls','iconAlign','group','size','text',{plain:'boolean',toggle:'boolean',selected:'boolean',outline:'boolean'}]
  208. ), {
  209. disabled: (t.attr('disabled') ? true : undefined),
  210. text: ($.trim(t.html()) || undefined),
  211. iconCls: (t.attr('icon') || t.attr('iconCls'))
  212. });
  213. };
  214. $.fn.linkbutton.defaults = {
  215. id: null,
  216. disabled: false,
  217. toggle: false,
  218. selected: false,
  219. outline: false,
  220. group: null,
  221. plain: false,
  222. text: '',
  223. iconCls: null,
  224. iconAlign: 'left',
  225. size: 'small', // small,large
  226. onClick: function(){}
  227. };
  228. })(jQuery);