-
Amanda Ghassaei authoredAmanda Ghassaei authored
MaterialEditorMenuView.js 3.26 KiB
/**
* Created by aghassaei on 6/24/15.
*/
define(['jquery', 'underscore', 'menuParent', 'plist', 'materials', 'text!materialEditorMenuTemplate', 'fileSaver'],
function($, _, MenuParentView, plist, materials, template, fileSaver){
var materialNameIndex = 1;
return MenuParentView.extend({
events: {
"click #cancelMaterial": "_cancelMaterial",
"click #deleteMaterial": "_deleteMaterial",
"click #finishMaterial": "_save",
"click #newRandomColor": "_changeRandomColor",
"click #saveMaterial": "_saveMaterialToFile"
},
_initialize: function(){
//bind events
if (!materials.getEditingMaterial()) console.warn("no editing material id set");
this.material = _.clone(materials.list[materials.getEditingMaterial()]);
if (!this.material) this.material = {
name: "Material " + materialNameIndex++,
color: '#000000',
altColor: '#000000',
noDelete: false,
properties: {}
};
},
getPropertyOwner: function($target){
if ($target.hasClass("materialEditor")) return this.material;
else if ($target.hasClass("materialProperties")) return this.material.properties;
return null;
},
updateHex: function(hex, $target){
//update hex without rendering
$target.css("border-color", hex);
},
_changeRandomColor: function(e){
e.preventDefault();
var color = '#' + Math.floor(Math.random()*16777215).toString(16);
this.material.altColor = color;
this.render();
},
_save: function(e){
e.preventDefault();
if (this.material.name == "") this.material.name = "Material " + materialNameIndex++;
materials.setMaterial(materials.getEditingMaterial(), _.clone(this.material));
this._exit();
},
_saveMaterialToFile: function(e){
e.preventDefault();
fileSaver.saveMaterial(materials.getEditingMaterial(), this.material);
},
_deleteMaterial: function(e){
e.preventDefault();
if (!materials.list[materials.getEditingMaterial()]) {
this._exit();
return;
}
var deleted = materials.setMaterial(materials.getEditingMaterial(), null);
if (deleted) this._exit();
},
_cancelMaterial: function(e){
e.preventDefault();
this._exit();
},
_exit: function(){
this.material = null;
materials.setEditingMaterial(null);
this.model.set("currentNav", "navDesign");
},
_makeTemplateJSON: function(){
return _.extend(this.material);
},
_destroy: function(){
var self = this;
_.each(_.keys(this.material), function(key){
delete self.material[key];
});
this.material = null;
},
template: _.template(template)
});
});