Browse Source

CTRLIO, reordered location of project loader handlers. Added a few more checks to validate project id and version properties on project load.

dev
Bryan Miller 5 years ago
parent
commit
4afd417e53
1 changed files with 50 additions and 37 deletions
  1. +50
    -37
      app/js/ctrls/CTRLIO.js

+ 50
- 37
app/js/ctrls/CTRLIO.js View File

@@ -13,6 +13,8 @@ const SUPPORTED_PROJECT_VERSIONS=[
"0.1"
];

const PROJECT_ID="NESPProj"

const SCHEMA_ID = "http://nespaint/Project.json";
JSONSchema.add({
"$schema": "http://json-schema.org/draft-07/schema#",
@@ -40,7 +42,7 @@ var SURF = null;

function JSONFromProject(){
var proj = {
id:"NESPProj",
id:PROJECT_ID,
version:SUPPORTED_PROJECT_VERSIONS[SUPPORTED_PROJECT_VERSIONS.length - 1],
paletteStore:CTRLPalettesStore.obj,
bankStore:CTRLBanksStore.obj
@@ -104,6 +106,53 @@ function HANDLE_SaveProject(e){
}


function HANDLE_LoadProjectRequest(){
var input = document.querySelectorAll("input.project-loader");
if (input.length > 0){
input[0].click();
}
}

function HANDLE_LoadProject(e){
if (this.files && this.files.length > 0){
var reader = new FileReader();
reader.onload = (function(e) {
var o = null;
var validator = JSONSchema.getValidator(SCHEMA_ID);
try {
o = JSON.parse(e.target.result);
} catch (e) {
console.log("Failed to parse JSON string. " + e.toString());
}
if (validator !== null && validator(o)){
if (o.id !== PROJECT_ID){
console.log("ERROR: Project ID is invalid. Canceling project load.");
return;
}
if (SUPPORTED_PROJECT_VERSIONS.indexOf(o.version) < 0){
console.log("ERROR: Project file version does not match any supported version numbers. Canceling project load.");
return;
}
// NOTE: For future... branch out to specific version loaders as needed.
// Since only one version is currently supported, however, just continue on, my friends!
CTRLPalettesStore.obj = o.paletteStore;
CTRLBanksStore.obj = o.bankStore;
if ("nametableStore" in o)
CTRLNameTablesStore.obj = o.nametableStore;
}
if (this.parentNode.nodeName.toLowerCase() === "form"){
this.parentNode.reset();
} else {
console.log("WARNING: Parent node is NOT a <form> element.");
}
}).bind(this);
reader.readAsText(this.files[0]);
} else {
console.log("Project file not found or no file selected.");
}
}


function HANDLE_ExportCHR(e){
e.preventDefault();
var bank = CTRLBanksStore.currentBank;
@@ -163,42 +212,6 @@ function HANDLE_ExportNameTableASM(e){
}
}

function HANDLE_LoadProjectRequest(){
var input = document.querySelectorAll("input.project-loader");
if (input.length > 0){
input[0].click();
}
}

function HANDLE_LoadProject(e){
if (this.files && this.files.length > 0){
var reader = new FileReader();
reader.onload = (function(e) {
var o = null;
var validator = JSONSchema.getValidator(SCHEMA_ID);
try {
o = JSON.parse(e.target.result);
} catch (e) {
console.log("Failed to parse JSON string. " + e.toString());
}
if (validator !== null && validator(o)){
// TODO: Validate 'id' and 'version' properties.
CTRLPalettesStore.obj = o.paletteStore;
CTRLBanksStore.obj = o.bankStore;
if ("nametableStore" in o)
CTRLNameTablesStore.obj = o.nametableStore;
}
if (this.parentNode.nodeName.toLowerCase() === "form"){
this.parentNode.reset();
} else {
console.log("WARNING: Parent node is NOT a <form> element.");
}
}).bind(this);
reader.readAsText(this.files[0]);
} else {
console.log("Project file not found or no file selected.");
}
}

function HANDLE_SurfChange(surf){
var enableclass = "";

Loading…
Cancel
Save