Advertisement
Synthetics

Untitled

Aug 21st, 2011
83
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 7.93 KB | None | 0 0
  1. (function(){
  2. var Basic;
  3. Basic = this.Basic = {};
  4. Basic.VERSION = '0.1.0';
  5. Basic.AUTHOR = 'mrchess';
  6. var $ = this.jQuery;
  7.  
  8. //helpers
  9. var h = {}
  10.  
  11. h.format = function() {
  12. for(var i=1;i<arguments.length;i++) {
  13. var exp = new RegExp('\\{' + (i-1) + '\\}','gm');
  14. arguments[0] = arguments[0].replace(exp,arguments[i]);
  15. }
  16. return arguments[0];
  17. }
  18. //Watcher for menu removal, not sure where to put this
  19. $(document).click(function() {
  20. Basic.clearMenus();
  21. });
  22.  
  23. // begin Basic componentry
  24.  
  25. /**
  26. Basic constructor
  27. returns a Basic button element
  28. * properties:
  29. cls - custom css class
  30. iconCls - icon class
  31. text - also accepts html
  32. click - the click action
  33. primary - bolds button
  34. pointer - shows pointer or not on hover
  35. */
  36. Basic._renderButton = function(config) {
  37. var el = $('<div>');
  38. // apply defaults
  39. el.addClass('basic-btn');
  40. if(config.pointer) {
  41. el.addClass('basic-btn-pointer');
  42. }
  43. // add hover
  44. el.hover(function() {
  45. $(this).addClass('basic-btn-hover');
  46. }, function() {
  47. $(this).removeClass('basic-btn-hover');
  48. });
  49. // add mousedown
  50. el.mousedown(function() {
  51. $(this).addClass('basic-btn-down');
  52. });
  53. el.mouseup(function() {
  54. $(this).removeClass('basic-btn-down');
  55. });
  56. el.mouseout(function() {
  57. $(this).removeClass('basic-btn-down');
  58. });
  59. // apply config
  60. el.addClass(config.cls);
  61. el.addClass(config.iconCls);
  62.  
  63. if(config.id) {
  64. el.attr('id',config.id);
  65. }
  66. if(config.title) {
  67. el.attr('title',config.title);
  68. }
  69. if(config.click) {
  70. el.click(config.click);
  71. }
  72. if(config.primary) {
  73. el.html('<b>'+config.text+'</b>');
  74. } else {
  75. el.html(config.text);
  76. }
  77. return el;
  78. }
  79.  
  80.  
  81. Basic.Button = function(config) {
  82. config = config || {};
  83. var el = new Basic._renderButton(config);
  84.  
  85. // attach custom click action
  86. return el;
  87. };
  88.  
  89. Basic._doButtonMenuLayout = function(menu, config) {
  90. menu.hide();
  91. Basic.clearMenus();
  92. $(this).addClass('basic-btn-menu-down');
  93. //adjust pointer configure. remove it fromt he button class and recursilvy apply to all items
  94. if(config.pointer) {
  95. menu.find('.basic-btn-menu-item').addClass('basic-btn-pointer');
  96. }
  97.  
  98. // hide menu before display so I can adjust position
  99.  
  100. $(this).append(menu);
  101.  
  102. // calculate position
  103. var css = {};
  104. var position = config.position || 'bl';
  105. if(position.indexOf('t') >= 0) {
  106. css['top'] = (menu.height() * -1) - 11;
  107. }
  108. if(position.indexOf('b') >= 0) {
  109. css['bottom'] = (menu.height() * -1) - 11;
  110. }
  111. if(position.indexOf('l') >= 0) {
  112. css['left'] = -1;
  113. }
  114. if(position.indexOf('r') >= 0) {
  115. css['right'] = -1;
  116. }
  117. if(position.indexOf('m') >= 0) {
  118. css['top'] = -2;
  119. if(position.indexOf('l') >= 0) {
  120. css['left'] = menu.width() * -1 - 10;
  121. }
  122. if(position.indexOf('r') >= 0) {
  123. css['right'] = menu.width() * -1 - 10;
  124. }
  125. }
  126. menu.css(css);
  127. menu.show();
  128. }
  129. Basic._renderButtonMenuItems = function(store) {
  130. // build menu
  131. var menu = $('<div>').addClass('basic-btn-menu');
  132.  
  133. // make from menu items
  134. var items = store;
  135. for(var i in items) {
  136. //check for splitter
  137. if(items[i] == "|") {
  138. var item = $('<div>').addClass('basic-btn-menu-split');
  139. } else if(items[i].text == '|') {
  140. var item = $('<div>').addClass('basic-btn-menu-split');
  141. } else {
  142. var item = $('<div>').addClass('basic-btn-menu-item');
  143. item.html(items[i].text);
  144. item.hover(function() {
  145. $(this).addClass('basic-btn-menu-item-hover');
  146. }, function() {
  147. $(this).removeClass('basic-btn-menu-item-hover');
  148. });
  149. item.click(Basic.clearMenus);
  150. item.click(items[i].click);
  151. }
  152.  
  153. if(!items[i].skip) {
  154. if(items[i].cls) {
  155. item.addClass(items[i].cls);
  156. }
  157. if(items[i].pointer) {
  158. item.addClass('basic-btn-pointer');
  159. }
  160. if(items[i].id) {
  161. item.attr('id',items[i].id);
  162. }
  163. menu.append(item);
  164. }
  165. }
  166. return menu;
  167. }
  168. Basic.ButtonMenu = function(config) {
  169. config = config || {};
  170.  
  171. var el = new Basic._renderButton(config);
  172. var arrowTpl = '<div class="basic-btn-menu-arrow"></div>';
  173. el.append(arrowTpl);
  174.  
  175. // clear stuff from constructor
  176. if(config.pointer) {
  177. el.removeClass('basic-btn-pointer');
  178. }
  179.  
  180. // if no custom click handler load default store
  181. if(!config.click) {
  182. el.click(function(e) {
  183. var menu = Basic._renderButtonMenuItems(config.store);
  184. Basic._doButtonMenuLayout.call(this,menu,config);
  185. e.stopPropagation(); // prevent the document watcher from destroying the menu
  186. return false;
  187. });
  188. } else {
  189. el.unbind('click');
  190. el.click(function(e) {
  191. config.click.call(this, e, config);
  192. });
  193. }
  194. return el;
  195. };
  196.  
  197. // Takes a group of Basic buttons and makes a controlbar
  198. Basic.ButtonBar = function(buttons) {
  199. var el = $('<div>').addClass('basic-btn-btnbar');
  200. for(i in buttons) {
  201. // add bar round corner edge
  202. if(i == 0) {
  203. buttons[i].addClass('basic-btn-btnbar-left');
  204. }
  205. if(i == buttons.length-1) {
  206. buttons[i].addClass('basic-btn-btnbar-right');
  207. }
  208.  
  209. el.append(buttons[i]);
  210. }
  211. return el;
  212. };
  213.  
  214. Basic.Box = function(config) {
  215. config = config || {};
  216.  
  217. var node = $('<div>');
  218. node.addClass(config.cls);
  219. node.html(config.html);
  220. return node;
  221. };
  222.  
  223. // basic widget with view/edit modes
  224. Basic.Widget = function(config) {};
  225.  
  226. // ui functions
  227. // destroys any existing menu stuff
  228. Basic.clearMenus = function() {
  229. $('.basic-btn-hover').removeClass('basic-btn-hover');
  230. if($('.basic-btn-menu').length > 0) {
  231. $('.basic-btn-menu').remove();
  232. $('.basic-btn-menu-down').removeClass('basic-btn-menu-down');
  233. }
  234. }
  235. Basic.destroy = function(el) {
  236. el.remove();
  237. };
  238. })();
  239.  
  240.  
  241.  
  242.  
  243. _____ _____ _____
  244. /\ \ |\ \ /\ \
  245. /::\ \ |:\____\ /::\____\
  246. /::::\ \ |::| | /::::| |
  247. /::::::\ \ |::| | /:::::| |
  248. /:::/\:::\ \ |::| | /::::::| |
  249. /:::/__\:::\ \ |::| | /:::/|::| |
  250. \:::\ \:::\ \ |::| | /:::/ |::| |
  251. ___\:::\ \:::\ \ |::|___|______ /:::/ |::| | _____
  252. /\ \:::\ \:::\ \ /::::::::\ \ /:::/ |::| |/\ \
  253. /::\ \:::\ \:::\____\/::::::::::\____/:: / |::| /::\____\
  254. \:::\ \:::\ \::/ /:::/~~~~/~~ \::/ /|::| /:::/ /
  255. \:::\ \:::\ \/____/:::/ / \/____/ |::| /:::/ /
  256. \:::\ \:::\ \ /:::/ / |::|/:::/ /
  257. \:::\ \:::\____\/:::/ / |::::::/ /
  258. \:::\ /:::/ /\::/ / |:::::/ /
  259. \:::\/:::/ / \/____/ |::::/ /
  260. \::::::/ / /:::/ /
  261. \::::/ / /:::/ /
  262. \::/ / \::/ /
  263. \/____/ \/____/
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement