267 lines
8.2 KiB
JavaScript
267 lines
8.2 KiB
JavaScript
$(function() {
|
|
|
|
function LaserCutterProfilesViewModel(params) {
|
|
var self = this;
|
|
|
|
self.workingarea = params[0];
|
|
self.control = params[1];
|
|
self.conversion = params[2];
|
|
|
|
self._cleanProfile = function() {
|
|
return {
|
|
id: "",
|
|
name: "",
|
|
model: "",
|
|
volume: {
|
|
formFactor: "rectangular",
|
|
width: 216,
|
|
depth: 297,
|
|
height: 0,
|
|
origin_offset_x: 1,
|
|
origin_offset_y: 1
|
|
},
|
|
zAxis: false,
|
|
axes: {
|
|
x: {speed: 6000, inverted: false},
|
|
y: {speed: 6000, inverted: false},
|
|
z: {speed: 200, inverted: false}
|
|
}
|
|
};
|
|
};
|
|
|
|
self.profiles = new ItemListHelper(
|
|
"laserCutterProfiles",
|
|
{
|
|
"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;
|
|
}
|
|
},
|
|
{},
|
|
"name",
|
|
[],
|
|
[],
|
|
10
|
|
);
|
|
self.defaultProfile = ko.observable();
|
|
self.currentProfile = ko.observable();
|
|
|
|
self.currentProfileData = ko.observable(ko.mapping.fromJS(self._cleanProfile()));
|
|
|
|
self.editorNew = ko.observable(false);
|
|
|
|
self.editorName = ko.observable();
|
|
self.editorIdentifier = ko.observable();
|
|
self.editorModel = ko.observable();
|
|
|
|
self.editorVolumeWidth = ko.observable();
|
|
self.editorVolumeDepth = ko.observable();
|
|
self.editorVolumeHeight = ko.observable();
|
|
|
|
self.editorZAxis = ko.observable();
|
|
|
|
self.editorAxisXSpeed = ko.observable();
|
|
self.editorAxisYSpeed = ko.observable();
|
|
self.editorAxisZSpeed = ko.observable();
|
|
|
|
self.editorAxisXInverted = ko.observable(false);
|
|
self.editorAxisYInverted = ko.observable(false);
|
|
self.editorAxisZInverted = ko.observable(false);
|
|
|
|
self.makeDefault = function(data) {
|
|
var profile = {
|
|
id: data.id,
|
|
default: true
|
|
};
|
|
|
|
self.updateProfile(profile);
|
|
};
|
|
|
|
self.requestData = function() {
|
|
$.ajax({
|
|
url: BASEURL + "plugin/lasercutterprofiles/profiles",
|
|
type: "GET",
|
|
dataType: "json",
|
|
success: self.fromResponse
|
|
})
|
|
};
|
|
|
|
self.fromResponse = function(data) {
|
|
var items = [];
|
|
var defaultProfile = undefined;
|
|
var currentProfile = undefined;
|
|
var currentProfileData = undefined;
|
|
_.each(data.profiles, function(entry) {
|
|
if (entry.default) {
|
|
defaultProfile = entry.id;
|
|
}
|
|
if (entry.current) {
|
|
currentProfile = entry.id;
|
|
currentProfileData = ko.mapping.fromJS(entry, self.currentProfileData);
|
|
}
|
|
entry["isdefault"] = ko.observable(entry.default);
|
|
entry["iscurrent"] = ko.observable(entry.current);
|
|
items.push(entry);
|
|
});
|
|
self.profiles.updateItems(items);
|
|
self.defaultProfile(defaultProfile);
|
|
self.currentProfile(currentProfile);
|
|
self.currentProfileData(currentProfileData);
|
|
|
|
self.workingarea.workingAreaWidthMM(self.currentProfileData().volume.width() - self.currentProfileData().volume.origin_offset_x());
|
|
self.workingarea.workingAreaHeightMM(self.currentProfileData().volume.depth() - self.currentProfileData().volume.origin_offset_y());
|
|
var maxSpeed = Math.min(self.currentProfileData().axes.x.speed(), self.currentProfileData().axes.y.speed());
|
|
self.conversion.maxSpeed(maxSpeed);
|
|
};
|
|
|
|
self.addProfile = function(callback) {
|
|
var profile = self._editorData();
|
|
$.ajax({
|
|
url: BASEURL + "plugin/lasercutterprofiles/profiles",
|
|
type: "POST",
|
|
dataType: "json",
|
|
contentType: "application/json; charset=UTF-8",
|
|
data: JSON.stringify({profile: profile}),
|
|
success: function() {
|
|
if (callback !== undefined) {
|
|
callback();
|
|
}
|
|
self.requestData();
|
|
}
|
|
});
|
|
};
|
|
|
|
self.removeProfile = function(data) {
|
|
$.ajax({
|
|
url: data.resource,
|
|
type: "DELETE",
|
|
dataType: "json",
|
|
success: self.requestData
|
|
})
|
|
};
|
|
|
|
self.updateProfile = function(profile, callback) {
|
|
if (profile == undefined) {
|
|
profile = self._editorData();
|
|
}
|
|
|
|
$.ajax({
|
|
url: BASEURL + "plugin/lasercutterprofiles/profiles/" + profile.id,
|
|
type: "PATCH",
|
|
dataType: "json",
|
|
contentType: "application/json; charset=UTF-8",
|
|
data: JSON.stringify({profile: profile}),
|
|
success: function() {
|
|
if (callback !== undefined) {
|
|
callback();
|
|
}
|
|
self.requestData();
|
|
}
|
|
});
|
|
};
|
|
|
|
self.showEditProfileDialog = function(data) {
|
|
var add = false;
|
|
if (data == undefined) {
|
|
data = self._cleanProfile();
|
|
add = true;
|
|
}
|
|
|
|
self.editorNew(add);
|
|
|
|
self.editorIdentifier(data.id);
|
|
self.editorName(data.name);
|
|
self.editorModel(data.model);
|
|
|
|
self.editorVolumeWidth(data.volume.width);
|
|
self.editorVolumeDepth(data.volume.depth);
|
|
self.editorVolumeHeight(data.volume.height);
|
|
|
|
self.editorZAxis(data.zAxis);
|
|
|
|
self.editorAxisXSpeed(data.axes.x.speed);
|
|
self.editorAxisXInverted(data.axes.x.inverted);
|
|
self.editorAxisYSpeed(data.axes.y.speed);
|
|
self.editorAxisYInverted(data.axes.y.inverted);
|
|
self.editorAxisZSpeed(data.axes.z.speed);
|
|
self.editorAxisZInverted(data.axes.z.inverted);
|
|
|
|
var editDialog = $("#settings_laserCutterProfiles_editDialog");
|
|
var confirmButton = $("button.btn-confirm", editDialog);
|
|
var dialogTitle = $("h3.modal-title", editDialog);
|
|
|
|
dialogTitle.text(add ? gettext("Add Profile") : _.sprintf(gettext("Edit Profile \"%(name)s\""), {name: data.name}));
|
|
confirmButton.unbind("click");
|
|
confirmButton.bind("click", function() {
|
|
self.confirmEditProfile(add);
|
|
});
|
|
editDialog.modal("show");
|
|
};
|
|
|
|
self.confirmEditProfile = function(add) {
|
|
var callback = function() {
|
|
$("#settings_laserCutterProfiles_editDialog").modal("hide");
|
|
};
|
|
|
|
if (add) {
|
|
self.addProfile(callback);
|
|
} else {
|
|
self.updateProfile(undefined, callback);
|
|
}
|
|
};
|
|
|
|
self.isReadOnly = function (data){
|
|
return (data.id === "_mrbeam_senior" || data.id === "_mrbeam_junior");
|
|
};
|
|
|
|
self._editorData = function() {
|
|
var profile = {
|
|
id: self.editorIdentifier(),
|
|
name: self.editorName(),
|
|
model: self.editorModel(),
|
|
volume: {
|
|
width: parseFloat(self.editorVolumeWidth()),
|
|
depth: parseFloat(self.editorVolumeDepth()),
|
|
height: parseFloat(self.editorVolumeHeight()),
|
|
},
|
|
zAxis: self.editorZAxis(),
|
|
axes: {
|
|
x: {
|
|
speed: parseInt(self.editorAxisXSpeed()),
|
|
inverted: self.editorAxisXInverted()
|
|
},
|
|
y: {
|
|
speed: parseInt(self.editorAxisYSpeed()),
|
|
inverted: self.editorAxisYInverted()
|
|
},
|
|
z: {
|
|
speed: parseInt(self.editorAxisZSpeed()),
|
|
inverted: self.editorAxisZInverted()
|
|
}
|
|
}
|
|
};
|
|
|
|
|
|
return profile;
|
|
};
|
|
|
|
self.onSettingsShown = self.requestData;
|
|
self.onStartup = function(){
|
|
self.requestData();
|
|
self.control.showZAxis = ko.computed(function(){
|
|
var has = self.currentProfileData()['zAxis']();
|
|
return has;
|
|
}); // dependency injection
|
|
};
|
|
|
|
}
|
|
|
|
|
|
// view model class, identifier, parameters for constructor, container to bind to
|
|
ADDITIONAL_VIEWMODELS.push([LaserCutterProfilesViewModel,
|
|
["workingAreaViewModel", "controlViewModel", "vectorConversionViewModel"],
|
|
document.getElementById("laserCutterProfiles")]);
|
|
|
|
});
|