main.js 4.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124
  1. window._coliberatorURL = 'http://localhost/coliberator/';
  2. window.Coliberator = {
  3. data: {},
  4. templates: {
  5. speaker: function (data){
  6. return '<li data-id="'+data.id+'" class="participant-item"><a href="#" class="participant" title="Click for more details"><img src="'+data.imageURL+'" alt="'+data.name+'"/><span class="participant-details">'+data.name+'</span></a></li>';
  7. },
  8. speakerDescription: function (data){
  9. var presentations = '<div class="presentations"><span class="category">Vorbește despre:</span><ul>',
  10. i, l, v;
  11. for (i = 0, l = data.presentations.length; i < l; i ++) {
  12. v = data.presentations[i];
  13. presentations += '<li>' + v.title + '</li>';
  14. }
  15. presentations += '</ul></div>';
  16. return '<div class="pop-up"><div class="details"><img src="'+data.imageURL+'" alt="'+data.name+'"/><h2>'+data.name+'</h2><span class="description">'+data.description+'</span>'+presentations+'<button class="close-btn" title="Close the description panel"></button></div></div>';
  17. },
  18. presentation: function (data){
  19. var separator = '';
  20. var desc = '';
  21. if (data.name.length != 0) {
  22. separator = ' de ';
  23. }
  24. if (data.description.length != 0) {
  25. desc = '<p>' + data.description + '</p>';
  26. }
  27. if (data.description == 'separator') {
  28. return '<li style="border-bottom: 1px solid gray; margin-top: 20px;"><span class="title">'+data.when+'</span> (<span style="">'+data.title+'</span>)<span class="details">'+separator+data.name+'</span>'+desc+'</li>';
  29. }
  30. return '<li><span class="when">'+data.when+'</span><span class="title">'+data.title+'</span><span class="details">'+separator+data.name+'</span>'+desc+'</li>';
  31. }
  32. },
  33. build: {
  34. presentations: function (data) {
  35. var el = $('#presentations'),
  36. i, l, v = '';
  37. for (i = 0, l = data.length; i < l; i ++) {
  38. v += Coliberator.templates.presentation(data[i]);
  39. }
  40. el.append(v);
  41. el.on('click','li', Coliberator.build.showPresentationDescription);
  42. },
  43. speakers: function (data) {
  44. var el = $('#speakers'),
  45. i, l, v = '';
  46. for (i = 0, l = data.length; i < l; i ++) {
  47. v += Coliberator.templates.speaker(data[i]);
  48. }
  49. el.append(v);
  50. el.on('click','li', Coliberator.build.speakerDescription);
  51. },
  52. speakerDescription: function (ev) {
  53. var $this = $(this),
  54. data,
  55. $descrEl,
  56. closeFunction = function () {
  57. var $el = $(this);
  58. $el.animate({
  59. top: '100%'
  60. },'fast', function() {
  61. $el.parent().remove();
  62. $el.remove();
  63. $el.blur();
  64. $this.focus();
  65. $('body').off();
  66. });
  67. };
  68. $this.blur();
  69. ev.preventDefault();
  70. data = Coliberator.data.speakers[$this.data('id')];
  71. $descrEl = $(Coliberator.templates.speakerDescription(data));
  72. // ... event participants .append
  73. $('body').prepend($descrEl);
  74. var $details = $descrEl.find('.details').animate({
  75. top: '25%'
  76. },'fast').on('click','.close-btn', function(){
  77. $el = $(this.parentElement);
  78. closeFunction.call($details);
  79. });
  80. $('body').keypress(function(e){
  81. // bind escape to the close modal functionality
  82. if (e.keyCode == 27) {
  83. closeFunction.call($details);
  84. }
  85. });
  86. // set focus on the close button: fixes a bug where you could press
  87. // enter multiple times on participant and helps ux
  88. $details.find('.close-btn').focus();
  89. },
  90. showPresentationDescription: function (ev) {
  91. var $this = $(this),
  92. data,
  93. $descrEl;
  94. ev.preventDefault();
  95. $this.find('p').stop().slideToggle();
  96. }
  97. }
  98. }
  99. $(document).ready(function() {
  100. Coliberator.build.speakers(Coliberator.data.speakers);
  101. Coliberator.build.presentations(Coliberator.data.presentations);
  102. $('.header-container').on('click','a',function (){
  103. //scrollTop: $(this).offset().top + 'px'
  104. var el = $($(this).attr('href')), top;
  105. if (el.length) {
  106. top = el.offset().top - $('.header-container').outerHeight();
  107. } else {
  108. top = 0;
  109. }
  110. $('body').animate({
  111. scrollTop: top + 'px'
  112. }, 'fast');
  113. });
  114. });