/* globals $ */ var smapi = smapi || {}; var app; smapi.logParser = function (data, sectionUrl) { // internal filter counts var stats = data.stats = { modsShown: 0, modsHidden: 0 }; function updateModFilters() { // counts stats.modsShown = 0; stats.modsHidden = 0; for (var key in data.showMods) { if (data.showMods.hasOwnProperty(key)) { if (data.showMods[key]) stats.modsShown++; else stats.modsHidden++; } } } // set local time started if(data) data.localTimeStarted = ("0" + data.logStarted.getHours()).slice(-2) + ":" + ("0" + data.logStarted.getMinutes()).slice(-2); // init app app = new Vue({ el: '#output', data: data, computed: { anyModsHidden: function () { return stats.modsHidden > 0; }, anyModsShown: function () { return stats.modsShown > 0; } }, methods: { toggleLevel: function(id) { this.showLevels[id] = !this.showLevels[id]; }, toggleMod: function (id) { var curShown = this.showMods[id]; // first filter: only show this by default if (stats.modsHidden === 0) { this.hideAllMods(); this.showMods[id] = true; } // unchecked last filter: reset else if (stats.modsShown === 1 && curShown) this.showAllMods(); // else toggle else this.showMods[id] = !this.showMods[id]; updateModFilters(); }, showAllMods: function () { for (var key in this.showMods) { if (this.showMods.hasOwnProperty(key)) { this.showMods[key] = true; } } updateModFilters(); }, hideAllMods: function () { for (var key in this.showMods) { if (this.showMods.hasOwnProperty(key)) { this.showMods[key] = false; } } updateModFilters(); }, filtersAllow: function(modId, level) { return this.showMods[modId] !== false && this.showLevels[level] !== false; } } }); /********** ** Upload form *********/ var error = $("#error"); $("#upload-button").on("click", function(e) { e.preventDefault(); $("#input").val(""); $("#popup-upload").fadeIn(); }); var closeUploadPopUp = function() { $("#popup-upload").fadeOut(400); }; $("#popup-upload").on({ 'dragover dragenter': function(e) { e.preventDefault(); e.stopPropagation(); }, 'drop': function(e) { $("#uploader").attr("data-text", "Reading..."); $("#uploader").show(); var dataTransfer = e.originalEvent.dataTransfer; if (dataTransfer && dataTransfer.files.length) { e.preventDefault(); e.stopPropagation(); var file = dataTransfer.files[0]; var reader = new FileReader(); reader.onload = $.proxy(function(file, $input, event) { $input.val(event.target.result); $("#uploader").fadeOut(); $("#submit").click(); }, this, file, $("#input")); reader.readAsText(file); } }, 'click': function(e) { if (e.target.id === "popup-upload") closeUploadPopUp(); } }); $("#submit").on("click", function() { $("#popup-upload").fadeOut(); var paste = $("#input").val(); if (paste) { //memory = ""; $("#uploader").attr("data-text", "Saving..."); $("#uploader").fadeIn(); $ .ajax({ type: "POST", url: sectionUrl + "/save", data: JSON.stringify(paste), contentType: "application/json" // sent to API }) .fail(function(xhr, textStatus) { $("#uploader").fadeOut(); error.html('

Parsing failed!

Parsing of the log failed, details follow.
 

Stage: Upload

Error: ' + textStatus + ': ' + xhr.responseText + "
" + $("#input").val() + "
"); }) .then(function(data) { $("#uploader").fadeOut(); if (!data.success) error.html('

Parsing failed!

Parsing of the log failed, details follow.
 

Stage: Upload

Error: ' + data.error + "
" + $("#input").val() + "
"); else location.href = (sectionUrl.replace(/\/$/, "") + "/" + data.id); }); } else { alert("Unable to parse log, the input is empty!"); $("#uploader").fadeOut(); } }); $(document).on("keydown", function(e) { if (e.which === 27) { if ($("#popup-upload").css("display") !== "none" && $("#popup-upload").css("opacity") === 1) { closeUploadPopUp(); } } }); $("#cancel").on("click", closeUploadPopUp); if (data.showPopup) $("#popup-upload").fadeIn(); };