Advertisement
Guest User

JS

a guest
Jun 1st, 2016
127
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. var Menu = (function() {
  2.     function Menu(container, menu_container, menu_class, menu_icon, menu_items, menu_callback) {
  3.         this.container = container;
  4.         this.menu_container = menu_container;
  5.         this.menu_class = menu_class;
  6.         this.menu_icon_src = menu_icon;
  7.         this.menu_items = menu_items;
  8.         this.menu_callback = menu_callback;
  9.  
  10.         this.createMenuOuter();
  11.     }
  12.  
  13.     Menu.prototype.createMenuOuter = function() {
  14.         this.outer_container = document.createElement('DIV');
  15.         this.outer_container.style.width = "0px";
  16.         this.outer_container.className = "DoorSelector--MenuOuterContainer MenuContainer_" + this.menu_class;
  17.         this.container.appendChild(this.outer_container);
  18.  
  19.         this.menu_button = document.createElement('DIV');
  20.         this.menu_button.className = "DoorSelector--MenuItem MenuItem_" + this.menu_class;
  21.         this.menu_button.addEventListener('click', this.openMenu.bind(this, this.outer_container));
  22.         this.menu_container.appendChild(this.menu_button);
  23.  
  24.         this.menu_icon = document.createElement('IMG');
  25.         this.menu_icon.className = "DoorSelector--MenuItemThumb";
  26.         this.menu_icon.src = "modules/DoorSelector/images/menu_icons/" + this.menu_icon_src + ".jpg";
  27.         this.menu_button.appendChild(this.menu_icon);
  28.  
  29.         this.menu_title = document.createElement('P');
  30.         this.menu_title.className = "DoorSelector--MenuTitle";
  31.         this.outer_container.appendChild(this.menu_title);
  32.  
  33.         this.menu_options_container = document.createElement('DIV');
  34.         this.outer_container.appendChild(this.menu_options_container);
  35.  
  36.         // create options
  37.         this.createMenuOptions(this.menu_items, null);
  38.     };
  39.  
  40.     Menu.prototype.createMenuOptions = function(group, parent) {
  41.         this.menu_options_container.innerHTML = "";
  42.         this.menu_title.innerHTML = group.title;
  43.         this.createBackOption(parent, this.outer_container);
  44.  
  45.         // add new options
  46.         var _this = this;
  47.         Array.prototype.forEach.call(group.options, function(option) {
  48.             _this.createMenuOption.call(_this, option, group);
  49.         });
  50.     };
  51.  
  52.     Menu.prototype.createMenuOption = function(option, parent) {
  53.         var option_container = document.createElement('DIV');
  54.         option_container.className = "DoorSelector--FamilyOption";
  55.         this.menu_options_container.appendChild(option_container);
  56.        
  57.         if(typeof option.options != "undefined")
  58.         {
  59.             option_container.addEventListener('click', this.createMenuOptions.bind(this, option.options, parent) );
  60.         } else {
  61.             var _this = this;
  62.             option_container.addEventListener('click', function() {
  63.                 _this.menu_callback(option)
  64.             });
  65.         }
  66.  
  67.         if(typeof option.thumbnail != "undefined")
  68.         {
  69.             var option_thumb = document.createElement("IMG");
  70.             option_thumb.className = "DoorSelector--FamilyThumbnail";
  71.             option_thumb.src = option.thumbnail;
  72.             option_container.appendChild(option_thumb);
  73.         }
  74.  
  75.         if(typeof option.rgb_thumb != "undefined")
  76.         {
  77.             var option_thumb = document.createElement('IMG');
  78.             option_thumb.className = "DoorSelector--FamilyColour";
  79.             option_thumb.src = option.rgb_thumb;
  80.             option_container.appendChild(option_thumb);
  81.         }
  82.  
  83.         if(typeof option.RGB != "undefined")
  84.         {
  85.             var option_colour = document.createElement('DIV');
  86.             option_colour.className = "DoorSelector--FamilyColour";
  87.             option_colour.style.backgroundColor = "rgb(" + option.RGB + ")";
  88.             option_container.appendChild(option_colour);
  89.         }
  90.  
  91.         var option_title = document.createElement('P');
  92.         option_title.className = "DoorSelector--FamilyTitle";
  93.         option_title.innerHTML = option.name;
  94.         option_container.appendChild(option_title);
  95.  
  96.         var new_width = parseInt(this.outer_container.style.width.replace('px','')) + 254;
  97.         if(new_width > (window.outerWidth - 400)) new_width = (window.outerWidth - 400);
  98.  
  99.         this.outer_container.style.width =  new_width + "px";
  100.     };
  101.  
  102.     Menu.prototype.createBackOption = function(parent, close_container) {
  103.         var button = document.createElement('DIV');
  104.         button.className = "DoorSelector--FamilyOption";
  105.         var event_func = (parent == null) ? this.closeMenu.bind(this, close_container) : this.createMenuOptions.bind(this, parent, null);
  106.         button.addEventListener('click', event_func);
  107.  
  108.         this.menu_options_container.appendChild(button);
  109.  
  110.         var image = document.createElement('IMG');
  111.         image.className = "DoorSelector--FamilyThumbnail back";
  112.         image.src = "/modules/DoorSelector/images/arrow_back.jpg";
  113.         button.appendChild(image);
  114.  
  115.         this.outer_container.style.width = "240px";
  116.     };
  117.  
  118.     Menu.prototype.closeMenu = function(container, event) {
  119.         event.preventDefault();
  120.         event.stopPropagation();
  121.  
  122.         container.classList.remove('show');
  123.     };
  124.  
  125.     Menu.prototype.openMenu = function(container, event) {
  126.         event.preventDefault();
  127.         event.stopPropagation();
  128.         var openedMenu = document.querySelector('.show');
  129.         if(openedMenu != undefined) {
  130.             openedMenu.classList.remove('show');
  131.         }
  132.  
  133.         container.classList.add('show');
  134.     };
  135.  
  136.     return Menu;
  137. })();
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement