Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- (function()
- {
- function CCustomEventHandler ()
- {
- this.events = {};
- }
- CCustomEventHandler.prototype = {
- constructor:CCustomEventHandler,
- addEventListener:function(e, func)
- {
- if(typeof e !== "string")
- {
- return -1;
- }
- else if(typeof func !== "function")
- {
- return -2;
- }
- if(!this.events.hasOwnProperty(e))
- {
- this.events[e] = [];
- }
- this.events[e].push(func);
- },
- emit:function(e, data)
- {
- var arr = this.events[e] || [];
- for(var i = 0; i < arr.length; ++i)
- {
- arr[i] && typeof arr[i] === "function" && arr[i](data);
- }
- this[e] && typeof this[e] === "function" && this[e](data);
- }
- }
- var inventory_div = document.getElementById("userInventory");
- if(!document.getElementById("toggle_filter_button"))
- {
- console.log("creating show/hide button");
- var button_span = document.createElement("span");
- button_span.className = "input-group-btn";
- button_span.innerHTML = '<button id="toggle_filter_button" class="btn-u" type="button">Show Filter</button>';
- inventory_div.insertBefore(button_span, inventory_div.children[0]);
- var toggle_filter_button = document.getElementById("toggle_filter_button");
- if(toggle_filter_button)
- {
- toggle_filter_button.onclick = function()
- {
- var ctrl_div = document.getElementById("filter_control_div");
- if(ctrl_div)
- {
- if(ctrl_div.style.display === "none")
- {
- ctrl_div.style.display = "block";
- this.innerText = "Hide Filter";
- }
- else
- {
- ctrl_div.style.display = "none";
- this.innerText = "Show Filter";
- }
- }
- }
- }
- }
- var main_container = document.getElementById("filter_control_div");
- if(!main_container)
- {
- console.log("creating div...");
- main_container = document.createElement("div");
- main_container.setAttribute("id", "filter_control_div");
- if(inventory_div)
- {
- inventory_div.insertBefore(main_container, inventory_div.children[0]);
- }
- }
- main_container.innerHTML = "";
- main_container.style.display = "none";
- var tab_container_ul = document.createElement("ul");
- tab_container_ul.setAttribute("id", "tab_list");
- var filter_content_div = document.createElement("div");
- filter_content_div.setAttribute("id", "filter_container");
- main_container.appendChild(tab_container_ul);
- main_container.appendChild(filter_content_div);
- //globals
- var item_data = {
- items:[],
- skins:{},
- classes:{},
- wears:{},
- bots:{}
- };
- //filter display
- var filterContainer = function(filter)
- {
- var items = item_data.items;
- if(typeof items === "object")
- {
- if(typeof filter === "object")
- {
- var filtered_items = {
- _item_count:0,
- item_data:{
- skins:{},
- classes:{},
- wears:{},
- bots:{}
- },
- item_class_data:{
- classes:{}
- }
- };
- var min_price = filter.hasOwnProperty("min_price") && typeof filter.min_price === "number" ? filter.min_price : null;
- var max_price = filter.hasOwnProperty("max_price") && typeof filter.max_price === "number" ? filter.max_price : null;
- //var class_filter = filter.hasOwnProperty("class") && typeof filter.class === "string" ? filter.class : null;
- for(var i = 0; i < items.length; ++i)
- {
- var item = items[i];
- if((!filter.guns._filter_count || (filter.guns.hasOwnProperty(items[i].item_class))) &&
- (!filter.skins._filter_count || filter.skins.hasOwnProperty(items[i].item_skin)) &&
- (!filter.wears._filter_count || filter.wears.hasOwnProperty(items[i].item_wear)) &&
- (!filter.bots._filter_count || filter.bots.hasOwnProperty(items[i].item_bot.toString())) &&
- (!min_price || (items[i].item_price >= min_price)) &&
- (!max_price || (items[i].item_price <= max_price)))
- {
- filtered_items._item_count++;
- if(!filtered_items.hasOwnProperty(items[i].item_name))
- {
- filtered_items[items[i].item_name] = [];
- }
- filtered_items[items[i].item_name].push(items[i]);
- if(!filtered_items.item_data.skins.hasOwnProperty(item.item_skin))
- {
- filtered_items.item_data.skins[item.item_skin] = {item_count:0};
- }
- filtered_items.item_data.skins[item.item_skin].item_count++;
- if(!filtered_items.item_data.wears.hasOwnProperty(item.item_wear))
- {
- filtered_items.item_data.wears[item.item_wear] = {item_count:0};
- }
- filtered_items.item_data.wears[item.item_wear].item_count++;
- if(!filtered_items.item_data.bots.hasOwnProperty(item.item_bot))
- {
- filtered_items.item_data.bots[item.item_bot] = {item_count:0};
- }
- filtered_items.item_data.bots[item.item_bot].item_count++;
- }
- if((!filter.skins._filter_count || filter.skins.hasOwnProperty(items[i].item_skin)) &&
- (!filter.wears._filter_count || filter.wears.hasOwnProperty(items[i].item_wear)) &&
- (!filter.bots._filter_count || filter.bots.hasOwnProperty(items[i].item_bot.toString())) &&
- (!min_price || (items[i].item_price >= min_price)) &&
- (!max_price || (items[i].item_price <= max_price)))
- {
- if(!filtered_items.item_class_data.classes.hasOwnProperty(item.item_class))
- {
- filtered_items.item_class_data.classes[item.item_class] = {item_count:0};
- }
- filtered_items.item_class_data.classes[item.item_class].item_count++;
- }
- }
- return filtered_items;
- }
- return null;
- }
- return null;
- };
- filterInfo = {
- current_filter:null,
- current_offset:0,
- current_limit:100,
- event_handler_:new CCustomEventHandler,
- setCurrentOffset:function(offset)
- {
- this.displayCurrentItems(offset, this.current_limit);
- },
- setCurrentLimit:function(limit)
- {
- this.displayCurrentItems(this.current_offset, limit);
- },
- setCurrentFilter:function(filter)
- {
- this.current_filter = filter;
- this.emit("filterchange", {});
- },
- addEventListener:function(e, func)
- {
- return this.event_handler_.addEventListener(e, func);
- },
- emit:function(e, data)
- {
- this.event_handler_.emit(e, data);
- },
- displayCurrentItems:function(offset, limit)
- {
- if(!this.current_filter)
- {
- return;
- }
- var items = this.current_filter;
- if(typeof items === "object")
- {
- filterHandler.changeFilter("Weapons", items.item_class_data.classes);
- filterHandler.changeFilter("Skins", items.item_data.skins);
- filterHandler.changeFilter("Wears", items.item_data.wears);
- filterHandler.changeFilter("Bots", items.item_data.bots);
- var inventory_container = document.getElementsByClassName("inventoryContainer");
- if((typeof inventory_container === "object") && inventory_container.length && inventory_container[0].children)
- {
- current_filter = items;
- var inventory_items = inventory_container[0].children;
- var display_count = 0;
- var current_index = 0;
- for(var i = 0; i < inventory_items.length; ++i)
- {
- if(items.hasOwnProperty(inventory_items[i].getAttribute("data-name")))
- {
- if((current_index >= offset) && (display_count < limit))
- {
- display_count++;
- inventory_items[i].style.display = "inline-block";
- }
- else
- {
- inventory_items[i].style.display = "none";
- }
- current_index++;
- }
- else
- {
- inventory_items[i].style.display = "none";
- }
- //inventory_items[i].style.display = (items.hasOwnProperty(inventory_items[i].getAttribute("data-name")) ? "inline-block" : "none");
- }
- this.current_offset = offset;
- this.current_limit = limit;
- }
- }
- }
- }
- var displayItems = function(items)
- {
- if(typeof items === "object")
- {
- filterHandler.changeFilter("Weapons", items.item_class_data.classes);
- filterHandler.changeFilter("Skins", items.item_data.skins);
- filterHandler.changeFilter("Wears", items.item_data.wears);
- filterHandler.changeFilter("Bots", items.item_data.bots);
- filterInfo.setCurrentFilter(items);
- return;
- var inventory_container = document.getElementsByClassName("inventoryContainer");
- if((typeof inventory_container === "object") && inventory_container.length && inventory_container[0].children)
- {
- var inventory_items = inventory_container[0].children;
- var limit = filterInfo.current_limit;
- var offset = filterInfo.current_offset;
- var display_count = 0;
- var current_index = 0;
- for(var i = 0; i < inventory_items.length; ++i)
- {
- if(items.hasOwnProperty(inventory_items[i].getAttribute("data-name")))
- {
- if((current_index >= offset) && (display_count < limit))
- {
- display_count++;
- inventory_items[i].style.display = "inline-block";
- }
- else
- {
- inventory_items[i].style.display = "none";
- }
- current_index++;
- }
- else
- {
- inventory_items[i].style.display = "none";
- }
- //inventory_items[i].style.display = (items.hasOwnProperty(inventory_items[i].getAttribute("data-name")) ? "inline-block" : "none");
- }
- }
- }
- };
- var runFilter = function()
- {
- var min_price_input = parseFloat(document.getElementById("min_price_filter_input").value);
- var max_price_input = parseFloat(document.getElementById("max_price_filter_input").value);
- var filter = {
- guns:{_filter_count:0},
- skins:{_filter_count:0},
- wears:{_filter_count:0},
- bots:{_filter_count:0},
- min_price:isNaN(min_price_input) ? null : min_price_input,
- max_price:isNaN(max_price_input) ? null : max_price_input
- };
- var check_box_list = document.getElementsByClassName(this.classes.filter_checkbox);
- for(var i = 0; i < check_box_list.length; ++i)
- {
- var checkbox = check_box_list[i];
- if(checkbox.getAttribute("data-filter-name") === "Weapons")
- {
- if(checkbox.checked)
- {
- filter.guns._filter_count++;
- filter.guns[checkbox.value] = {};
- }
- }
- else if(checkbox.getAttribute("data-filter-name") === "Skins")
- {
- if(checkbox.checked)
- {
- filter.skins._filter_count++;
- filter.skins[checkbox.value] = {};
- }
- }
- else if(checkbox.getAttribute("data-filter-name") === "Wears")
- {
- if(checkbox.checked)
- {
- filter.wears._filter_count++;
- filter.wears[checkbox.value] = {};
- }
- }
- else if(checkbox.getAttribute("data-filter-name") === "Bots")
- {
- if(checkbox.checked)
- {
- filter.bots._filter_count++;
- filter.bots[checkbox.value] = {};
- }
- }
- }
- displayItems(filterContainer(filter));
- };
- //filter logic
- var tabHander = {
- event_handler_:new CCustomEventHandler,
- addEventListener:function(e, func)
- {
- return this.event_handler_.addEventListener(e, func);
- },
- emit:function(e, data)
- {
- this.event_handler_.emit(e, data);
- },
- ids:{
- tab_container:"tab_list"
- },
- classes:{
- tab:"tab",
- tab_link:"tab_link",
- tab_text:"tab_text",
- tab_link_close:"tab_link_close"
- },
- tabs:{},
- newTab:function(name)
- {
- var container = document.getElementById(this.ids.tab_container);
- if(container && !this.tabs.hasOwnProperty(name))
- {
- var self = this;
- var tab = document.createElement("li");
- var tab_link = document.createElement("a");
- var tab_text = document.createElement("span");
- tab.className = this.classes.tab;
- tab.setAttribute("data-tab-name", name);
- tab_link.className = this.classes.tab_link;
- tab_text.className.className = this.classes.tab_text;
- tab_text.innerText = name;
- tab_link.appendChild(tab_text);
- tab_link.onclick = function()
- {
- var tabs = document.getElementsByClassName(self.classes.tab);
- for (var i = 0; i < tabs.length; ++i)
- {
- tabs[i].className = tabs[i].className.replace(" active", "");
- }
- this.className += " active";
- var name = this.getAttribute("data-tab-name");
- if(name)
- {
- self.emit("tabClick", name);
- }
- }.bind(tab);
- tab.appendChild(tab_link);
- container.appendChild(tab);
- this.tabs[name] = {};
- return true;
- }
- return false;
- },
- removeTab:function(name)
- {
- var container = document.getElementById(this.ids.tab_container);
- if(container)
- {
- var tabs = document.getElementsByClassName(this.classes.tab);
- for (var i = 0; i < tabs.length; ++i)
- {
- var tab = tabs[i];
- if(tab.getAttribute("data-tab-name") === name)
- {
- var was_active = tab.className.indexOf("active") !== -1;
- container.removeChild(tab);
- if(was_active)
- {
- //removing active tab, set first tab to active for now
- if(tabs.length)
- {
- tabs[0].className += " active";
- self.emit("tabClick", tabs[0].getAttribute("data-tab-name"));
- }
- }
- if(name)
- {
- this.emit("tabRemove", name);
- }
- break;
- }
- }
- }
- if(this.tabs.hasOwnProperty(name))
- {
- delete this.tabs[name];
- }
- }
- };
- var filterHandler = {
- event_handler_:new CCustomEventHandler,
- addEventListener:function(e, func)
- {
- return this.event_handler_.addEventListener(e, func);
- },
- emit:function(e, data)
- {
- this.event_handler_.emit(e, data);
- },
- ids:{
- filter_container:"filter_container"
- },
- classes:{
- filter:"filter",
- filter_list:"filter_list",
- filter_list_li:"filter_list_item",
- filter_list_li_name:"filter_name",
- filter_checkbox:"filter_checkbox"
- },
- filter_hash:{},
- showFilter:function(name)
- {
- document.getElementById(this.ids.filter_container).style.display = "block";
- var filter = document.getElementsByClassName(this.classes.filter);
- for (i = 0; i < filter.length; ++i)
- {
- filter[i].style.display = ((filter[i].getAttribute("data-filter-name") === name) ? "block" : "none");
- }
- },
- createFilter:function(name, options)
- {
- var container = document.getElementById(this.ids.filter_container);
- if(container && !this.filter_hash.hasOwnProperty(name))
- {
- var self = this;
- var filter = document.createElement("div");
- filter.className = this.classes.filter;
- filter.setAttribute("data-filter-name", name);
- var filter_list = document.createElement("ul");
- filter_list.className = this.classes.filter_list;
- filter_list.setAttribute("data-filter-name", name);
- if(typeof options === "object")
- {
- var arr = [];
- for(key in options)
- {
- if(!options.hasOwnProperty(key))
- {
- continue;
- }
- arr.push(key);
- }
- if(name !== "Wears")
- {
- arr.sort();
- }
- for(var i = 0; i < arr.length; ++i)
- {
- var key = arr[i];
- var option_li = document.createElement("li");
- option_li.className = this.classes.filter_list_li;
- option_li.setAttribute("data-filter-value", key);
- var option_label = document.createElement("label");
- option_label.setAttribute("title", "Filter for " + key + " in " + name);
- var option_check = document.createElement("input");
- option_check.setAttribute("type", "checkbox");
- option_check.className = this.classes.filter_checkbox;
- option_check.setAttribute("data-filter-name", name);
- option_check.value = key;
- option_check.onclick = runFilter.bind(this);
- var option_span = document.createElement("span");
- option_span.className = this.classes.filter_list_li_name;
- option_span.innerText = key + " [" + options[key].item_count + "]";
- option_label.appendChild(option_check);
- option_label.appendChild(option_span);
- option_li.appendChild(option_label);
- filter_list.appendChild(option_li);
- }
- }
- filter.appendChild(filter_list);
- this.filter_hash[name] = {};
- container.appendChild(filter);
- return true;
- }
- return false;
- },
- changeFilter:function(name, options)
- {
- var container = document.getElementById(this.ids.filter_container);
- if(container && this.filter_hash.hasOwnProperty(name))
- {
- var filter_list = null;
- var filter_list_vec = document.getElementsByClassName(this.classes.filter_list);
- for (i = 0; i < filter_list_vec.length; ++i)
- {
- if(filter_list_vec[i].getAttribute("data-filter-name") === name)
- {
- filter_list = filter_list_vec[i];
- break;
- }
- }
- if(!filter_list)
- {
- return false;
- }
- var filter_li_list = filter_list.getElementsByClassName(this.classes.filter_list_li);
- for(var i = 0; i < filter_li_list.length; ++i)
- {
- var li_item = filter_li_list[i];
- if(options.hasOwnProperty(filter_li_list[i].getAttribute("data-filter-value")))
- {
- var span_list = li_item.getElementsByClassName(this.classes.filter_list_li_name);
- if(span_list.length)
- {
- span_list[0].innerText = filter_li_list[i].getAttribute("data-filter-value") + " [" + options[filter_li_list[i].getAttribute("data-filter-value")].item_count + "]"; ;
- }
- filter_li_list[i].style.display = "block";
- }
- else
- {
- filter_li_list[i].style.display = "none";
- }
- }
- return true;
- }
- return false;
- }
- /*
- changeFilter:function(name, options)
- {
- var container = document.getElementById(this.ids.filter_container);
- if(container && this.filter_hash.hasOwnProperty(name))
- {
- var filter = null;
- var filter_list = document.getElementsByClassName(this.classes.filter);
- for (i = 0; i < filter_list.length; ++i)
- {
- if(filter_list[i].getAttribute("data-filter-name") === name)
- {
- filter = filter_list[i];
- break;
- }
- }
- if(!filter)
- {
- return false;
- }
- while(filter.firstChild)
- {
- filter.removeChild(filter.firstChild);
- }
- var self = this;
- var filter_list = document.createElement("ul");
- filter_list.className = this.classes.filter_list;
- filter_list.setAttribute("data-filter-name", name);
- if(typeof options === "object")
- {
- for(key in options)
- {
- if(!options.hasOwnProperty(key))
- {
- continue;
- }
- var option_li = document.createElement("li");
- option_li.className = this.classes.filter_list_li;
- var option_label = document.createElement("label");
- option_label.setAttribute("title", "Filter for " + key + " in " + name);
- var option_check = document.createElement("input");
- option_check.setAttribute("type", "checkbox");
- option_check.className = this.classes.filter_checkbox;
- option_check.setAttribute("data-filter-name", name);
- option_check.value = key;
- option_check.onclick = runFilter.bind(this);
- var option_span = document.createElement("span");
- option_span.className = this.classes.filter_list_li_name;
- option_span.innerText = key + " [" + options[key].item_count + "]";
- option_label.appendChild(option_check);
- option_label.appendChild(option_span);
- option_li.appendChild(option_label);
- filter_list.appendChild(option_li);
- }
- }
- filter.appendChild(filter_list);
- return true;
- }
- return false;
- }
- */
- };
- var createFilter = function(name, options)
- {
- tabHander.newTab(name);
- filterHandler.createFilter(name, options);
- };
- tabHander.addEventListener("tabClick", function(name)
- {
- filterHandler.showFilter(name);
- });
- tabHander.addEventListener("tabRemove", function(name)
- {
- filterHandler.removeFilter(name);
- });
- //getting data
- console.log("parsing inventory...");
- var parseName = function(item_name)
- {
- var parseInfo = {
- class:null,
- skin:null,
- wear:null,
- complete:false
- };
- var temp_str = "";
- for(var j = 0; j < item_name.length; ++j)
- {
- // StatTrak™ M9 Bayonet | Fade (Factory New)
- if(item_name[j] === "|")
- {
- parseInfo.class = temp_str.slice(0, -1);
- //console.log(temp_str.slice(0, -1));
- temp_str = "";
- continue;
- }
- else if(item_name[j] === "(")
- {
- parseInfo.skin = temp_str.substring(1, temp_str.length - 1);
- //console.log(temp_str.substring(1, temp_str.length - 1));
- temp_str = "";
- continue;
- }
- temp_str += item_name[j];
- }
- if(parseInfo.class && parseInfo.skin)
- {
- parseInfo.wear = temp_str.slice(0, -1);
- parseInfo.complete = true;
- }
- return parseInfo;
- }
- var inventory_container = document.getElementsByClassName("inventoryContainer");
- if((typeof inventory_container === "object") && inventory_container.length && inventory_container[0].children)
- {
- var inventory_items = inventory_container[0].children;
- var rx = new RegExp("((?:[a-zA-Z0-9_-]+\\s?)+)\\s\\|\\s((?:[a-zA-Z0-9_-]+\\s?)+)\\s\\(((?:[a-zA-Z0-9_-]+\\s?)+)\\)");
- for(var i = 0; i < inventory_items.length; ++i)
- {
- if(i > 50)
- {
- inventory_items[i].style.display = "none";
- }
- var item_price = parseFloat(inventory_items[i].getAttribute("data-price"));
- var item_name = inventory_items[i].getAttribute("data-name");
- var parseInfo = parseName(item_name);
- if(parseInfo.complete)
- {
- var item = {
- item_name:item_name,
- item_class:parseInfo.class,
- item_skin:parseInfo.skin,
- item_wear:parseInfo.wear,
- item_price:item_price,
- item_bot:parseInt(inventory_items[i].getAttribute("data-bot"))
- };
- item_data.items.push(item);
- if(!item_data.skins.hasOwnProperty(item.item_skin))
- {
- item_data.skins[item.item_skin] = {item_count:0};
- }
- item_data.skins[item.item_skin].item_count++;
- if(!item_data.classes.hasOwnProperty(item.item_class))
- {
- item_data.classes[item.item_class] = {item_count:0};
- }
- item_data.classes[item.item_class].item_count++;
- if(!item_data.wears.hasOwnProperty(item.item_wear))
- {
- item_data.wears[item.item_wear] = {item_count:0};
- }
- item_data.wears[item.item_wear].item_count++;
- if(!item_data.bots.hasOwnProperty(item.item_bot))
- {
- item_data.bots[item.item_bot] = {item_count:0};
- }
- item_data.bots[item.item_bot].item_count++;
- }
- continue;
- var matches = rx.exec(item_name);
- if(matches)
- {
- var item = {
- item_name:item_name,
- item_class:matches[1],
- item_skin:matches[2],
- item_wear:matches[3],
- item_price:item_price,
- item_bot:parseInt(inventory_items[i].getAttribute("data-bot"))
- };
- item_data.items.push(item);
- if(!item_data.skins.hasOwnProperty(item.item_skin))
- {
- item_data.skins[item.item_skin] = {item_count:0};
- }
- item_data.skins[item.item_skin].item_count++;
- if(!item_data.classes.hasOwnProperty(item.item_class))
- {
- item_data.classes[item.item_class] = {item_count:0};
- }
- item_data.classes[item.item_class].item_count++;
- if(!item_data.wears.hasOwnProperty(item.item_wear))
- {
- item_data.wears[item.item_wear] = {item_count:0};
- }
- item_data.wears[item.item_wear].item_count++;
- if(!item_data.bots.hasOwnProperty(item.item_bot))
- {
- item_data.bots[item.item_bot] = {item_count:0};
- }
- item_data.bots[item.item_bot].item_count++;
- }
- }
- console.log("parsing done!");
- }
- createFilter("Weapons", item_data.classes);
- createFilter("Skins", item_data.skins);
- createFilter("Wears", item_data.wears);
- createFilter("Bots", item_data.bots);
- var price_div = document.createElement("div");
- price_div.setAttribute("id", "filter_price_div");
- var min_price_span = document.createElement("span");
- min_price_span.innerHTML = 'Min Price:<input type="number" step="0.01" class="form-control filter_input" id="min_price_filter_input"></input>';
- var max_price_span = document.createElement("span");
- max_price_span.innerHTML = 'Max Price:<input type="number" step="0.01" class="form-control filter_input" id="max_price_filter_input"></input>';
- price_div.appendChild(min_price_span);
- price_div.appendChild(max_price_span);
- main_container.appendChild(price_div);
- var last_input_timer = null;
- var updateFilterValue = function()
- {
- if(last_input_timer)
- {
- clearTimeout(last_input_timer);
- }
- last_input_timer = setTimeout(function()
- {
- last_input_timer = null;
- runFilter.bind(filterHandler)();
- }, 250);
- };
- document.getElementById("min_price_filter_input").onkeyup = updateFilterValue;
- document.getElementById("max_price_filter_input").onkeyup = updateFilterValue;
- })();
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement