Advertisement
Guest User

1

a guest
Jan 23rd, 2020
411
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 8.34 KB | None | 0 0
  1.  
  2. /**
  3. * EVO ST map drawing method
  4. * @version 1.0
  5. */
  6. (function($){
  7. var evostTM;
  8. // Seat Map Settings
  9. $.fn.evostMapSettings = function(opt){
  10. j = opt.json;
  11. c = this;
  12. end = opt.end;
  13. styles = '';
  14. // background color
  15. if(j.bg_color !== undefined) c.css('background-color', '#'+j.bg_color);
  16. // map area
  17. if(j.map_area !== undefined){
  18. c.removeClass(function (index, className) {
  19. return (className.match (/(^|s)map_areaS+/g) || []).join(' ');
  20. });
  21. c.addClass('map_area'+j.map_area);
  22. lb = c.closest('.evost_seating_map');
  23. if(lb.length>0){
  24. lb.removeClass(function (index, className) {
  25. return (className.match (/(^|s)map_areaS+/g) || []).join(' ');
  26. });
  27. lb.addClass('map_area'+j.map_area);
  28. }
  29. }
  30. // seat size
  31. if(j.seat_size !== undefined){
  32. c.removeClass(function (index, className) {
  33. return (className.match (/(^|s)seat_sizeS+/g) || []).join(' ');
  34. });
  35. c.addClass('seat_size'+j.seat_size);
  36. }
  37. // seat color
  38. if(j.seat_color !== undefined){
  39. styles += ".evost_section .evost_row .evost_seat.av{background-color:#"+j.seat_color+';}';
  40. }
  41. c.parent().parent().find('.evost_seat_map_styles').html( styles );
  42. // background image
  43. if( j.bg_url !== undefined && j.bg_url){
  44. c.css('background-image', 'url('+j.bg_url+')');
  45. }
  46. // tooltip design
  47. if(j && 'tooltip' in j && j.tooltip !== undefined && j.tooltip=='yes'){
  48. c.closest('.evost_seat_selection').addClass('fixed_tt');
  49. c.parent().siblings('.evost_tooltip').addClass('fixed');
  50. }
  51. }
  52. // tooltip
  53. $.fn.evostToolTip = function(opt){
  54. temp_part = opt.temp_part;
  55. data = opt.data;
  56. c = $(this);
  57. HTML = $(this).evo_HB_process_template({TD: data ,part: temp_part});
  58. c.html( HTML );
  59. }
  60. // seats in cart
  61. $.fn.evostCartSeats = function(opt){
  62. temp_part = opt.temp_part;
  63. data = opt.j_cart;
  64. c = $(this);
  65. HTML = '';
  66. HTML = $(this).evo_HB_process_template({TD: data ,part: temp_part});
  67. c.html( HTML );
  68. // expiration time
  69. E = c.find('.evost_cart_expirations span');
  70. es = E.data('s');
  71. if(es){
  72. //console.log('tt');
  73. clearInterval(evostTM);
  74. E.evostTimer();
  75. }
  76. }
  77. // count down timer
  78. $.fn.evostTimer = function(opt){
  79. var c = $(this);
  80. if(!c) return;
  81. evostTM = setInterval(function(){
  82. new_s = parseInt(c.data('s')) -1;
  83. // timer ran out
  84. if(new_s <= 0){
  85. clearInterval(evostTM);
  86. $('body').trigger('evost_seat_time_expired', [ c.closest('.evotx_ticket_purchase_section')]);
  87. $('body').trigger('evost_refresh_map', [ c.closest('.evotx_ticket_purchase_section')] );
  88. }else{
  89. hours = Math.floor(new_s/3600);
  90. new_s %= 3600;
  91. minutes = Math.floor((new_s / 60));
  92. minutes = minutes<10? '0'+minutes:minutes;
  93. seconds = new_s %60;
  94. seconds = seconds<10? '0'+seconds:seconds;
  95. c.data('s', new_s);
  96. c.find('b').html( minutes +':'+seconds);
  97. }
  98. },1000);
  99. }
  100. // Map interaction
  101. $.fn.evostMapInteraction = function(opt){
  102. // default values
  103. defaults = {
  104. increment: 0.1,
  105. minScale:1
  106. }
  107. var opt = $.extend({}, defaults, opt);
  108. l = opt.l = $(this);
  109. control = l.parent().siblings('.evost_map_information').find('.evost_view_control');
  110. zI = control.find('.zoomin');
  111. zO = control.find('.zoomout');
  112. // window resized
  113. $(window).resize(function(){
  114. OUT = l.parent();
  115. l.css('transform','matrix(1,0,0,1,'+MtranslateX+','+MtranslateY+')');
  116. //console.log( OUT.width()+' '+ l.width());
  117. MscaleXY = (OUT.width() >l.width()) ? 1: ( OUT.width()/ l.width() ) ;
  118. l.css('transform','matrix('+MscaleXY+',0,0,'+MscaleXY+','+MtranslateX+','+MtranslateY+')');
  119. });
  120. // panning
  121. clicking = false;
  122. clickedX = 0;
  123. clickedY = 0;
  124. MscaleXY = 1;
  125. MtranslateX = MtranslateY = 0;
  126. l.mousedown(function(e){
  127. clicking = true;
  128. clickedX = e.clientX;
  129. clickedY = e.clientY;
  130. _cal_matrix();
  131. });
  132. $('body').mouseup(function(e){
  133. clicking = false;
  134. _cal_matrix();// save new map locations
  135. });
  136. l.mousemove(function(e){
  137. if(clicking){
  138. e.preventDefault();
  139. var O = $(this);
  140. offset = O.offset();
  141. IntTranslateX = offset.left;
  142. translateX = MtranslateX + (e.clientX - clickedX);
  143. IntTranslateY = offset.top;
  144. translateY = MtranslateY+ e.clientY - clickedY;
  145. O.css('transform','matrix('+MscaleXY+',0,0,'+MscaleXY+','+translateX+','+translateY+')');
  146. }
  147. });
  148. // mobile
  149. l.bind('touchstart',function(e){
  150. clicking = true;
  151. clickedX = (e.originalEvent.touches[0].pageX);
  152. clickedY = (e.originalEvent.touches[0].pageY);
  153. _cal_matrix();
  154. });
  155. $('body').bind('touchend',function(e){
  156. clicking = false;
  157. _cal_matrix();// save new map locations
  158. });
  159. l.bind('touchmove',function(e){
  160. if(clicking){
  161. e.preventDefault();
  162. mouseX = (e.originalEvent.touches[0].pageX);
  163. mouseY = (e.originalEvent.touches[0].pageY);
  164. IntTranslateX = l.offset().left;
  165. translateX = MtranslateX + (mouseX - clickedX);
  166. IntTranslateY = l.offset().top;
  167. translateY = MtranslateY+ mouseY - clickedY;
  168. l.css('transform','matrix('+MscaleXY+',0,0,'+MscaleXY+','+translateX+','+translateY+')');
  169. }
  170. });
  171. // zooming
  172. zI.on('click',function(){
  173. MscaleXY = MscaleXY + opt.increment;
  174. opt.l.css('transform','matrix('+MscaleXY+',0,0,'+MscaleXY+','+MtranslateX+','+MtranslateY+')');
  175. });
  176. control.find('.zoomout').on('click',function(){
  177. MscaleXY = MscaleXY - opt.increment;
  178. // min max
  179. if(MscaleXY < opt.minScale) MscaleXY = opt.minScale;
  180. opt.l.css('transform','matrix('+MscaleXY+',0,0,'+MscaleXY+','+MtranslateX+','+MtranslateY+')');
  181. });
  182. //console.log(opt.increment);
  183. // supportive
  184. function _cal_matrix(){
  185. if( opt.l.css === undefined ) return false;
  186. if( opt.l.css('transform') === undefined ) return false;
  187. transform = opt.l.css('transform');
  188. if( transform === undefined ) return false;
  189. matrix = transform.split(',');
  190. if( matrix[0] == 'none'){}else{
  191. MscaleX = matrix[0].split('(');
  192. MscaleX = parseFloat(MscaleX[1]);
  193. MscaleY = parseFloat(matrix[3]);
  194. MtranslateX = parseInt(matrix[4]);
  195. if( matrix[5] !== undefined) MtranslateY = matrix[5].split(')');
  196. MtranslateY = parseInt(MtranslateY[0]);
  197. }
  198. }
  199. }
  200. // Seats Map
  201. $.fn.evostMapDrawer = function(opt){
  202. defaults = {}
  203. var opt = $.extend({}, defaults, opt);
  204. c = $(this);
  205. j = opt.json;
  206. //incart = opt.incart;// array of seats in cart for this event
  207. section_id = opt.section_id;
  208. classes = opt.classes;
  209. temp_part = opt.temp_part;
  210. temp = opt.temp;
  211. end = opt.end; // backend or frontend
  212. if( j === undefined || j == ''){
  213. if(end == 'admin'){
  214. c.html("<span class='evost_none'>Your seat map is empty, add a new section to get started!</span>");
  215. }else{
  216. c.html("<span class='evost_none'></span>");
  217. }
  218. return false;
  219. }
  220. d = {};
  221. d['sections'] = j;
  222. HTML = '';
  223. // HANDLEBAR ADDITIONS
  224. Handlebars.registerHelper('ifE',function(v1, options){
  225. return (v1 !== undefined && v1 != '' && v1)
  226. ? options.fn(this)
  227. : options.inverse(this);
  228. });
  229. // get seat unique id with row and section
  230. Handlebars.registerHelper('Par',function(v1, v2, v3){
  231. return v1.section_id+'-'+ v2.row_id +'-'+ v3;
  232. });
  233. // pass avaiability class to sections
  234. Handlebars.registerHelper('avail',function(v1, v2){
  235. if(v1 != 'una') return false;
  236. if(parseInt(v2)<1) return false;
  237. return 'av';
  238. });
  239. Handlebars.registerHelper('ifCOND',function(v1, operator, v2, options){
  240. return checkCondition(v1, operator, v2)
  241. ? options.fn(this)
  242. : options.inverse(this);
  243. });
  244. if( temp_part === undefined){
  245. template = Handlebars.compile( temp );
  246. HTML = template( d );
  247. }else{
  248. HTML = $(this).evo_HB_process_template({TD: d ,part: temp_part});
  249. }
  250. c.html( HTML );
  251. // add classes for section
  252. if( section_id != '' && classes !== undefined)
  253. c.find('#evost_section_'+section_id).addClass(classes);
  254. // only for frontend mark seats in cart
  255. if(end == 'front' && opt.j_cart !== undefined){
  256. $.each(opt.j_cart.seat, function(key, dd){
  257. c.find('.evost_seat[data-sid="'+ dd.seat_slug +'"]').addClass('mine');
  258. });
  259. }
  260. // only for admin
  261. if(end == 'admin'){
  262. $('body').trigger('evost_calculate_stats');
  263. $('body').trigger('evost_draggables');
  264. $('body').trigger('evost_after_map_drawn');
  265. }
  266. }
  267. function checkCondition(v1, operator, v2) {
  268. switch(operator) {
  269. case '==':
  270. return (v1 == v2);
  271. case '===':
  272. return (v1 === v2);
  273. case '!==':
  274. return (v1 !== v2);
  275. case '<':
  276. return (v1 < v2);
  277. case '<=':
  278. return (v1 <= v2);
  279. case '>':
  280. return (v1 > v2);
  281. case '>=':
  282. return (v1 >= v2);
  283. case '&&':
  284. return (v1 && v2);
  285. case '||':
  286. return (v1 || v2);
  287. default:
  288. return false;
  289. }
  290. }
  291. }(jQuery));
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement