files search works again. wip

This commit is contained in:
Teja 2015-07-04 18:07:23 +02:00
parent 867895ab81
commit 31f2cbb64b
2 changed files with 86 additions and 454 deletions

View file

@ -65,176 +65,16 @@ $(function() {
return this.toString().match(/^\s*function\s*(\S*)\s*\(/)[1];
}
});
//<<<<<<< HEAD
// });
//
// //~~ Initialize view models
// var loginStateViewModel = new LoginStateViewModel();
// var printerProfilesViewModel = new PrinterProfilesViewModel();
// var usersViewModel = new UsersViewModel(loginStateViewModel);
// var timelapseViewModel = new TimelapseViewModel(loginStateViewModel);
//
// var printerStateViewModel = new PrinterStateViewModel(loginStateViewModel, timelapseViewModel);
// var settingsViewModel = new SettingsViewModel(loginStateViewModel, usersViewModel, printerProfilesViewModel);
// var gcodeViewModel = new GcodeViewModel(loginStateViewModel, settingsViewModel);
// var connectionViewModel = new ConnectionViewModel(loginStateViewModel, settingsViewModel, printerProfilesViewModel);
// var appearanceViewModel = new AppearanceViewModel(settingsViewModel, printerStateViewModel);
// var temperatureViewModel = new TemperatureViewModel(loginStateViewModel, settingsViewModel);
// var terminalViewModel = new TerminalViewModel(loginStateViewModel, settingsViewModel);
//
// var slicingViewModel = new SlicingViewModel(loginStateViewModel, printerProfilesViewModel);
// var gcodeFilesViewModel = new GcodeFilesViewModel(printerStateViewModel, loginStateViewModel, slicingViewModel);
// var controlViewModel = new ControlViewModel(loginStateViewModel, settingsViewModel, printerStateViewModel);
// var navigationViewModel = new NavigationViewModel(loginStateViewModel, appearanceViewModel, settingsViewModel, usersViewModel);
// var logViewModel = new LogViewModel(loginStateViewModel);
//
//
// // the view model map is our basic look up table for dependencies that may be injected into other view models
// var viewModelMap = {
// loginStateViewModel: loginStateViewModel,
// printerProfilesViewModel: printerProfilesViewModel,
// usersViewModel: usersViewModel,
// settingsViewModel: settingsViewModel,
// connectionViewModel: connectionViewModel,
// timelapseViewModel: timelapseViewModel,
// printerStateViewModel: printerStateViewModel,
// appearanceViewModel: appearanceViewModel,
// temperatureViewModel: temperatureViewModel,
// controlViewModel: controlViewModel,
// terminalViewModel: terminalViewModel,
// gcodeFilesViewModel: gcodeFilesViewModel,
// gcodeViewModel: gcodeViewModel,
// navigationViewModel: navigationViewModel,
// logViewModel: logViewModel,
// slicingViewModel: slicingViewModel,
// };
//=======
}
//>>>>>>> upstream/maintenance
}
// helper to create a view model instance with injected constructor parameters from the view model map
var _createViewModelInstance = function(viewModel, viewModelMap){
var viewModelClass = viewModel[0];
var viewModelParameters = viewModel[1];
//<<<<<<< HEAD
//
// // now we'll try to resolve all of the view model's constructor parameters via our view model map
// var constructorParameters = _.map(viewModelParameters, function(parameter){
// return viewModelMap[parameter]
// });
//
// if (_.some(constructorParameters, function(parameter) { return parameter === undefined; })) {
// var _extractName = function(entry) { return entry[0]; };
// var _onlyUnresolved = function(entry) { return entry[1] === undefined; };
// var missingParameters = _.map(_.filter(_.zip(viewModelParameters, constructorParameters), _onlyUnresolved), _extractName);
// console.log("postponing", viewModel[0].name, "due to missing parameters:", missingParameters.join(", "));
// return;
// }
//
// // if we came this far then we could resolve all constructor parameters, so let's construct that view model
// return new viewModelClass(constructorParameters);
// };
//
// // helper for translating the name of a view model class into an identifier for the view model map
// var _getViewModelId = function(viewModel){
// var name = viewModel[0].name;
// return name.substr(0, 1).toLowerCase() + name.substr(1); // FooBarViewModel => fooBarViewModel
// };
//
// // instantiation loop, will make multiple passes over the list of unprocessed view models until all
// // view models have been successfully instantiated with all of their dependencies or no changes can be made
// // any more which means not all view models can be instantiated due to missing dependencies
// var unprocessedViewModels = ADDITIONAL_VIEWMODELS.slice();
// var additionalViewModels = [];
// var pass = 1;
// while (unprocessedViewModels.length > 0) {
// console.log("View model dependency resolution, pass #" + pass++);
// var startLength = unprocessedViewModels.length;
// var postponed = [];
//
// // now try to instantiate every one of our as of yet unprocessed view model descriptors
// while (unprocessedViewModels.length > 0){
// var viewModel = unprocessedViewModels.shift();
// var viewModelId = _getViewModelId(viewModel);
//
// // make sure that we don't have to view models going by the same name
// if (_.has(viewModelMap, viewModelId)) {
// console.error("Duplicate class name while instantiating viewModel ", viewModelId);
// continue;
// }
//
// var viewModelInstance = _createViewModelInstance(viewModel, viewModelMap);
//
// // our view model couldn't yet be instantiated, so postpone it for a bit
// if (viewModelInstance === undefined) {
// postponed.push(viewModel);
// continue;
// }
//
// // we could resolve the depdendencies and the view model is not defined yet => add it, it's now fully processed
// var viewModelBindTarget = viewModel[2];
// additionalViewModels.push([viewModelInstance, viewModelBindTarget]);
// viewModelMap[viewModelId] = viewModelInstance;
// }
//
// // anything that's now in the postponed list has to be readded to the unprocessedViewModels
// unprocessedViewModels = unprocessedViewModels.concat(postponed);
//
// // if we still have the same amount of items in our list of unprocessed view models it means that we
// // couldn't instantiate any more view models over a whole iteration, which in turn mean we can't resolve the
// // dependencies of remaining ones, so log that as an error and then quit the loop
// if (unprocessedViewModels.length == startLength) {
// console.error("Could not instantiate the following view models due to unresolvable dependencies:");
// _.each(unprocessedViewModels, function(entry) {
// console.error(entry[0].name, "(missing:", _.filter(entry[1], function(id) { return !_.has(viewModelMap, id); }).join(", "), ")");
// });
// break;
// }
// }
// console.log("View model dependency resolution done");
//
// var allViewModels = _.values(viewModelMap);
// var dataUpdater = new DataUpdater(allViewModels);
//
//
// //~~ Temperature
//
// $('#tabs a[data-toggle="tab"]').on('shown', function (e) {
// temperatureViewModel.updatePlot();
// terminalViewModel.updateOutput();
// });
//
// //~~ File list
//
// $(".gcode_files").slimScroll({
// height: "80vh",
// size: "5px",
// distance: "0",
// railVisible: true,
// alwaysVisible: true,
// scrollBy: "102px"
// });
//
// //~~ Gcode upload
//
// function gcode_upload_done(e, data) {
// var filename = undefined;
// var location = undefined;
// if (data.result.files.hasOwnProperty("sdcard")) {
// filename = data.result.files.sdcard.name;
// location = "sdcard";
// } else if (data.result.files.hasOwnProperty("local")) {
// filename = data.result.files.local.name;
// location = "local";
// }
// gcodeFilesViewModel.requestData(filename, location);
//=======
if (viewModelParameters != undefined) {
if (viewModelParameters != undefined) {
if (!_.isArray(viewModelParameters)) {
viewModelParameters = [viewModelParameters];
}
//>>>>>>> upstream/maintenance
// now we'll try to resolve all of the view model's constructor parameters via our view model map
var constructorParameters = _.map(viewModelParameters, function(parameter){
@ -251,6 +91,40 @@ $(function() {
log.debug("Postponing", viewModel[0].name, "due to missing parameters:", missingParameters);
return;
}
// if we came this far then we could resolve all constructor parameters, so let's construct that view model
log.debug("Constructing", viewModel[0].name, "with parameters:", viewModelParameters);
return new viewModelClass(constructorParameters);
};
//~~ File list
$(".gcode_files").slimScroll({
height: "80vh",
size: "5px",
distance: "0",
railVisible: true,
alwaysVisible: true,
scrollBy: "102px"
});
//
// //~~ Gcode upload
//
// function gcode_upload_done(e, data) {
// var filename = undefined;
// var location = undefined;
// if (data.result.files.hasOwnProperty("sdcard")) {
// filename = data.result.files.sdcard.name;
// location = "sdcard";
// } else if (data.result.files.hasOwnProperty("local")) {
// filename = data.result.files.local.name;
// location = "local";
// }
// gcodeFilesViewModel.requestData(filename, location);
//=======
//<<<<<<< HEAD
//
// if(data.result.files.hasOwnProperty("local")){
@ -281,12 +155,6 @@ $(function() {
// }
//=======
// if we came this far then we could resolve all constructor parameters, so let's construct that view model
log.debug("Constructing", viewModel[0].name, "with parameters:", viewModelParameters);
return new viewModelClass(constructorParameters);
};
//>>>>>>> upstream/maintenance
// map any additional view model bindings we might need to make
var additionalBindings = {};
_.each(OCTOPRINT_ADDITIONAL_BINDINGS, function(bindings) {
@ -337,21 +205,12 @@ $(function() {
var viewModelInstance = _createViewModelInstance(viewModel, viewModelMap);
//<<<<<<< HEAD
// if (printerStateViewModel.isSdReady() && loginStateViewModel.isUser()) {
// enable_sd_dropzone();
// } else {
// disable_sd_dropzone();
// }
// }
//
//=======
// our view model couldn't yet be instantiated, so postpone it for a bit
if (viewModelInstance === undefined) {
postponed.push(viewModel);
continue;
}
//>>>>>>> upstream/maintenance
// we could resolve the depdendencies and the view model is not defined yet => add it, it's now fully processed
var viewModelBindTargets = viewModel[2];
@ -367,20 +226,8 @@ $(function() {
allViewModels.push(viewModelInstance);
viewModelMap[viewModelId] = viewModelInstance;
}
//<<<<<<< HEAD
// window.dropZoneTimeout = setTimeout(function () {
// window.dropZoneTimeout = null;
// dropOverlay.removeClass("in");
// if (dropZoneLocal) dropZoneLocalBackground.removeClass("hover");
// if (dropZoneSd) dropZoneSdBackground.removeClass("hover");
// if (dropZone) dropZoneBackground.removeClass("hover");
// }, 1000);
// });
//=======
// anything that's now in the postponed list has to be readded to the unprocessedViewModels
unprocessedViewModels = unprocessedViewModels.concat(postponed);
//>>>>>>> upstream/maintenance
// if we still have the same amount of items in our list of unprocessed view models it means that we
// couldn't instantiate any more view models over a whole iteration, which in turn mean we can't resolve the
@ -398,6 +245,18 @@ $(function() {
}
log.info("... dependency resolution done");
//<<<<<<< HEAD
// window.dropZoneTimeout = setTimeout(function () {
// window.dropZoneTimeout = null;
// dropOverlay.removeClass("in");
// if (dropZoneLocal) dropZoneLocalBackground.removeClass("hover");
// if (dropZoneSd) dropZoneSdBackground.removeClass("hover");
// if (dropZone) dropZoneBackground.removeClass("hover");
// }, 1000);
// });
//=======
//>>>>>>> upstream/maintenance
var dataUpdater = new DataUpdater(allViewModels);
//~~ Custom knockout.js bindings
@ -599,33 +458,18 @@ $(function() {
e.stopPropagation();
});
//<<<<<<< HEAD
// settingsViewModel.requestData(function() {
// ko.applyBindings(settingsViewModel, document.getElementById("settings_dialog"));
//
// ko.applyBindings(connectionViewModel, document.getElementById("connection"));
// ko.applyBindings(printerStateViewModel, document.getElementById("state"));
// ko.applyBindings(gcodeFilesViewModel, document.getElementById("files_accordion"));
// ko.applyBindings(controlViewModel, document.getElementById("control"));
// ko.applyBindings(controlViewModel, document.getElementById("focus"));
// ko.applyBindings(terminalViewModel, document.getElementById("term"));
// var gcode = document.getElementById("gcode");
// if (gcode) {
// gcodeViewModel.initialize();
// ko.applyBindings(gcodeViewModel, gcode);
// if (printerStateViewModel.isSdReady() && loginStateViewModel.isUser()) {
// enable_sd_dropzone();
// } else {
// disable_sd_dropzone();
// }
// ko.applyBindings(navigationViewModel, document.getElementById("navbar"));
//// ko.applyBindings(appearanceViewModel, document.getElementsByTagName("head")[0]);
// ko.applyBindings(printerStateViewModel, document.getElementById("drop_overlay"));
// ko.applyBindings(logViewModel, document.getElementById("logs"));
//
//// var timelapseElement = document.getElementById("timelapse");
//// if (timelapseElement) {
//// ko.applyBindings(timelapseViewModel, timelapseElement);
//// }
////
//// ko.applyBindings(slicingViewModel, document.getElementById("slicing_configuration_dialog"));
// }
//
//=======
// prevent default action for drag-n-drop
$(document).bind("drop dragover", function (e) {
e.preventDefault();
@ -647,7 +491,6 @@ $(function() {
if (!Array.isArray(viewModelData) || viewModelData.length != 2) {
return;
}
//>>>>>>> upstream/maintenance
var viewModel = viewModelData[0];
var targets = viewModelData[1];

View file

@ -1,44 +1,4 @@
//<<<<<<< HEAD
//function GcodeFilesViewModel(printerStateViewModel, loginStateViewModel, slicingViewModel) {
// var self = this;
//
// self.printerState = printerStateViewModel;
// self.loginState = loginStateViewModel;
// self.slicing = slicingViewModel;
// self.conversion = undefined;
// self.workingArea = undefined;
//
// self.isErrorOrClosed = ko.observable(undefined);
// self.isOperational = ko.observable(undefined);
// self.isPrinting = ko.observable(undefined);
// self.isPaused = ko.observable(undefined);
// self.isError = ko.observable(undefined);
// self.isReady = ko.observable(undefined);
// self.isLoading = ko.observable(undefined);
// self.isSdReady = ko.observable(undefined);
//
// self.searchQuery = ko.observable(undefined);
// self.searchQuery.subscribe(function() {
// self.performSearch();
// });
//
// self.freeSpace = ko.observable(undefined);
// self.freeSpaceString = ko.computed(function() {
// if (!self.freeSpace())
// return "-";
// return formatSize(self.freeSpace());
// });
//
// // initialize list helper
// self.listHelper = new ItemListHelper(
// "gcodeFiles",
// {
// "name": function(a, b) {
// // sorts ascending
// if (a["name"].toLocaleLowerCase() < b["name"].toLocaleLowerCase()) return -1;
// if (a["name"].toLocaleLowerCase() > b["name"].toLocaleLowerCase()) return 1;
// return 0;
//=======
$(function() {
function GcodeFilesViewModel(parameters) {
var self = this;
@ -58,6 +18,7 @@ $(function() {
self.searchQuery = ko.observable(undefined);
self.searchQuery.subscribe(function() {
console.log("searhc update");
self.performSearch();
});
@ -92,7 +53,6 @@ $(function() {
if (a["bytes"] < b["bytes"]) return 1;
return 0;
}
//>>>>>>> upstream/maintenance
},
{
"printed": function(file) {
@ -117,7 +77,7 @@ $(function() {
0
);
self.isLoadActionPossible = ko.computed(function() {
self.isLoadActionPossible = ko.computed(function() {
return self.loginState.isUser() && !self.isPrinting() && !self.isPaused() && !self.isLoading();
});
@ -138,7 +98,7 @@ $(function() {
});
}
};
self.fromCurrentData = function(data) {
self._processStateData(data.state);
};
@ -176,7 +136,7 @@ $(function() {
}
});
};
self.fromResponse = function(response, filenameToFocus, locationToFocus) {
var files = response.files;
_.each(files, function(element, index, list) {
@ -200,73 +160,10 @@ $(function() {
if (response.free) {
self.freeSpace(response.free);
}
//<<<<<<< HEAD
// },
// "name",
// [],
// [["sd", "local"], ["machinecode", "model"]],
// 0
// );
//
// self.isLoadActionPossible = ko.computed(function() {
// return self.loginState.isUser() && !self.isPrinting() && !self.isPaused() && !self.isLoading();
// });
//
// self.isLoadAndPrintActionPossible = ko.computed(function() {
// return self.loginState.isUser() && self.isOperational() && self.isLoadActionPossible();
// });
//
// self.printerState.filename.subscribe(function(newValue) {
// self.highlightFilename(newValue);
// });
//
// self.highlightFilename = function(filename) {
// if (filename == undefined) {
// self.listHelper.selectNone();
// } else {
// self.listHelper.selectItem(function(item) {
// return item.name == filename;
// });
// }
// };
//
// self.fromCurrentData = function(data) {
// self._processStateData(data.state);
// };
//
// self.fromHistoryData = function(data) {
// self._processStateData(data.state);
// };
//
// self._processStateData = function(data) {
// self.isErrorOrClosed(data.flags.closedOrError);
// self.isOperational(data.flags.operational);
// self.isPaused(data.flags.paused);
// self.isPrinting(data.flags.printing);
// self.isError(data.flags.error);
// self.isReady(data.flags.ready);
// self.isLoading(data.flags.loading);
// self.isSdReady(data.flags.sdReady);
// };
//
// self._otherRequestInProgress = false;
// self.requestData = function(filenameToFocus, locationToFocus) {
// if (self._otherRequestInProgress) return;
//
// self._otherRequestInProgress = true;
// $.ajax({
// url: API_BASEURL + "files",
// method: "GET",
// dataType: "json",
// success: function(response) {
//
// self.fromResponse(response, filenameToFocus, locationToFocus);
// self._otherRequestInProgress = false;
// },
// error: function(response) {
// console.error("ajax/json error", response);
// self._otherRequestInProgress = false;
//=======
self.highlightFilename(self.printerState.filename());
};
@ -328,7 +225,6 @@ $(function() {
return data["refs"]["download"];
} else {
return false;
//>>>>>>> upstream/maintenance
}
};
@ -355,6 +251,7 @@ $(function() {
return "files_template_" + data.type;
}
};
self.getEntryId = function(data) {
return "gcode_file_" + md5(data["origin"] + ":" + data["name"]);
};
@ -381,29 +278,20 @@ $(function() {
self.enableSlicing = function(data) {
return self.loginState.isUser() && self.slicing.enableSlicingDialog();
};
// self.enableSlicing = function(data) {
// return self.loginState.isUser() && !(self.isPrinting() || self.isPaused());
// };
self.startGcodeWithSafetyWarning = function(gcodeFile){
self.loadFile(gcodeFile, false);
//<<<<<<< HEAD
// $.ajax({
// url: file.refs.resource,
// type: "POST",
// dataType: "json",
// contentType: "application/json; charset=UTF-8",
// data: JSON.stringify({command: "select", print: printAfterLoad})
// });
// };
//
// self.startGcodeWithSafetyWarning = function(gcodeFile){
// self.loadFile(gcodeFile, false);
//
// self.printerState.show_safety_glasses_warning(function(){
// self.loadFile(gcodeFile, true);
// });
// };
//=======
self.enableAdditionalData = function(data) {
self.printerState.show_safety_glasses_warning(function(){
self.loadFile(gcodeFile, true);
});
};
self.enableAdditionalData = function(data) {
return data["gcodeAnalysis"] || data["prints"] && data["prints"]["last"];
};
//>>>>>>> upstream/maintenance
self.toggleAdditionalData = function(data) {
var entryElement = self.getEntryElement(data);
@ -440,7 +328,7 @@ $(function() {
}
return output;
};
self.performSearch = function(e) {
if (e !== undefined) {
e.preventDefault();
@ -468,6 +356,10 @@ $(function() {
self.uploadButton.fileupload("disable");
};
self.enableSVGConversion = function (data) {
return self.loginState.isUser() && !(self.isPrinting() || self.isPaused());
};
self.onStartup = function() {
$(".accordion-toggle[data-target='#files']").click(function() {
var files = $("#files");
@ -503,112 +395,8 @@ $(function() {
location = "local";
}
self.requestData(filename, location);
//<<<<<<< HEAD
// self._sendSdCommand = function(command) {
// $.ajax({
// url: API_BASEURL + "printer/sd",
// type: "POST",
// dataType: "json",
// contentType: "application/json; charset=UTF-8",
// data: JSON.stringify({command: command})
// });
// };
//
// self.downloadLink = function(data) {
// if (data["refs"] && data["refs"]["download"]) {
// return data["refs"]["download"];
// } else {
// return false;
// }
// };
//
// self.lastTimePrinted = function(data) {
// if (data["prints"] && data["prints"]["last"] && data["prints"]["last"]["date"]) {
// return data["prints"]["last"]["date"];
// } else {
// return "-";
// }
// };
//
// self.getSuccessClass = function(data) {
// if (!data["prints"] || !data["prints"]["last"]) {
// return "";
// }
// return data["prints"]["last"]["success"] ? "text-success" : "text-error";
// };
//
// self.templateFor = function(data) {
// var extension = data.name.split('.').pop().toLowerCase();
// if (extension == "svg") {
// return "files_template_" + data.type + "_svg";
// } else {
// return "files_template_" + data.type;
// }
// };
//
// self.getEntryId = function(data) {
// return "gcode_file_" + md5(data["origin"] + ":" + data["name"]);
// };
//
// self.getEntryElement = function(data) {
// var entryId = self.getEntryId(data);
// var entryElements = $("#" + entryId);
// if (entryElements && entryElements[0]) {
// return entryElements[0];
// } else {
// return undefined;
// }
// };
//
// self.enableRemove = function(data) {
// return self.loginState.isUser() && !_.contains(self.printerState.busyFiles(), data.origin + ":" + data.name);
// };
//
// self.enableSelect = function(data, printAfterSelect) {
// var isLoadActionPossible = self.loginState.isUser() && self.isOperational() && !(self.isPrinting() || self.isPaused() || self.isLoading());
// return isLoadActionPossible && !self.listHelper.isSelected(data);
// };
//
// self.enableSlicing = function(data) {
// return self.loginState.isUser() && !(self.isPrinting() || self.isPaused());
// };
//
// self.enableSVGConversion = function(data) {
// return self.loginState.isUser() && !(self.isPrinting() || self.isPaused());
// };
//
// self.enableAdditionalData = function(data) {
// return data["gcodeAnalysis"] || data["prints"] && data["prints"]["last"];
// };
//
// self.toggleAdditionalData = function(data) {
// var entryElement = self.getEntryElement(data);
// if (!entryElement) return;
//
// var additionalInfo = $(".additionalInfo", entryElement);
// additionalInfo.slideToggle("fast", function() {
// $(".toggleAdditionalData i", entryElement).toggleClass("icon-chevron-down icon-chevron-up");
// });
// };
//
// self.getAdditionalData = function(data) {
// var output = "";
// if (data["gcodeAnalysis"]) {
// if (data["gcodeAnalysis"]["filament"] && typeof(data["gcodeAnalysis"]["filament"]) == "object") {
// var filament = data["gcodeAnalysis"]["filament"];
// if (_.keys(filament).length == 1) {
// output += gettext("Filament") + ": " + formatFilament(data["gcodeAnalysis"]["filament"]["tool" + 0]) + "<br>";
// } else if (_.keys(filament).length > 1) {
// for (var toolKey in filament) {
// if (!_.startsWith(toolKey, "tool") || !filament[toolKey] || !filament[toolKey].hasOwnProperty("length") || filament[toolKey]["length"] <= 0) continue;
//
// output += gettext("Filament") + " (" + gettext("Tool") + " " + toolKey.substr("tool".length) + "): " + formatFilament(filament[toolKey]) + "<br>";
// }
//=======
if (_.endsWith(filename.toLowerCase(), ".stl")) {
self.slicing.show(location, filename);
//>>>>>>> upstream/maintenance
}
if (data.result.done) {
@ -618,6 +406,7 @@ $(function() {
}
}
function gcode_upload_fail(e, data) {
var error = "<p>" + gettext("Could not upload the file. Make sure that it is a GCODE file and has the extension \".gcode\" or \".gco\" or that it is an STL file with the extension \".stl\".") + "</p>";
error += pnotifyAdditionalInfo("<pre>" + data.jqXHR.responseText + "</pre>");
@ -826,6 +615,6 @@ $(function() {
OCTOPRINT_VIEWMODELS.push([
GcodeFilesViewModel,
["printerStateViewModel", "loginStateViewModel", "slicingViewModel"],
"#files_wrapper"
["#files_wrapper", "#files_search"]
]);
});