From 7433f0bfbc3a7ea44320550ed2c1d90dc5e6f170 Mon Sep 17 00:00:00 2001 From: John Mayhew Date: Tue, 3 Apr 2012 16:27:01 -0700 Subject: Removed the dependence on an "assets" directory for the RDGE runtime. Now Ninja does not need to create duplicate files when it sets up the users Ninja Projects directory for RDGE support. --- js/mediators/io-mediator.js | 1094 +++++++++++++++++++++---------------------- 1 file changed, 543 insertions(+), 551 deletions(-) (limited to 'js/mediators/io-mediator.js') diff --git a/js/mediators/io-mediator.js b/js/mediators/io-mediator.js index 82bb31c4..057a849d 100644 --- a/js/mediators/io-mediator.js +++ b/js/mediators/io-mediator.js @@ -14,427 +14,419 @@ var Montage = require("montage/core/core").Montage, //////////////////////////////////////////////////////////////////////// // exports.IoMediator = Montage.create(Component, { - //////////////////////////////////////////////////////////////////// - // - hasTemplate: { - enumerable: false, + //////////////////////////////////////////////////////////////////// + // + hasTemplate: { + enumerable: false, value: false }, - //////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////// // - deserializedFromTemplate: { - enumerable: false, - value: function () { - // - } - }, - //////////////////////////////////////////////////////////////////// + deserializedFromTemplate: { + enumerable: false, + value: function () { + // + } + }, + //////////////////////////////////////////////////////////////////// // fio: { - enumerable: false, - value: FileIo + enumerable: false, + value: FileIo }, //////////////////////////////////////////////////////////////////// // pio: { - enumerable: false, - value: ProjectIo + enumerable: false, + value: ProjectIo }, //////////////////////////////////////////////////////////////////// // getAppTemplatesUrlRegEx: { - enumerable: false, - value: function () { - var regex = new RegExp(chrome.extension.getURL('js/document/templates/montage-html').replace(/\//gi, '\\\/'), 'gi'); - return regex; - } + enumerable: false, + value: function () { + var regex = new RegExp(chrome.extension.getURL('js/document/templates/montage-html').replace(/\//gi, '\\\/'), 'gi'); + return regex; + } }, - //////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////// // fileNew: { - enumerable: false, - value: function (file, template, callback) { - //Loading template from template URL - var xhr = new XMLHttpRequest(), result; - xhr.open("GET", template, false); + enumerable: false, + value: function (file, template, callback) { + //Loading template from template URL + var xhr = new XMLHttpRequest(), result; + xhr.open("GET", template, false); xhr.send(); - if (xhr.readyState === 4) { - //Making call to create file, checking for return code - switch (this.fio.newFile({uri: file, contents: xhr.response})) { - case 201: - result = {status: 201, success: true, uri: file}; - break; - case 204: - result = {status: 204, success: false, uri: file}; - break; - case 400: - result = {status: 400, success: false, uri: file}; - break; - default: - result = {status: 500, success: false, uri: file}; - break; - } - } else { - result = {status: 500, success: false, uri: file}; - } - //Sending result to callback if requested for handling - if (callback) callback(result); - //Codes - // 204: File exists | 400: File exists - // 201: File succesfully created | 500: Unknown (Probably cloud API not running) - } + if (xhr.readyState === 4) { + //Making call to create file, checking for return code + switch (this.fio.newFile({ uri: file, contents: xhr.response })) { + case 201: + result = { status: 201, success: true, uri: file }; + break; + case 204: + result = { status: 204, success: false, uri: file }; + break; + case 400: + result = { status: 400, success: false, uri: file }; + break; + default: + result = { status: 500, success: false, uri: file }; + break; + } + } else { + result = { status: 500, success: false, uri: file }; + } + //Sending result to callback if requested for handling + if (callback) callback(result); + //Codes + // 204: File exists | 400: File exists + // 201: File succesfully created | 500: Unknown (Probably cloud API not running) + } }, //////////////////////////////////////////////////////////////////// // fileOpen: { - enumerable: false, - value: function (file, callback) { - //Reading file (Ninja doesn't really open a file, all in browser memory) - var read = this.fio.readFile({uri: file}), result; - //Checking for status - switch(read.status) { - case 204: - //Creating and formatting result object for callbak - result = read.file.details; - result.root = read.file.details.uri.replace(read.file.details.name, ""); - //Checking for type of content to returns - if (result.extension !== 'html' && result.extension !== 'htm') { - //Simple string - result.content = read.file.content; - } else { - //Object to be used by Ninja Template - result.content = this.parseHtmlToNinjaTemplate(read.file.content); - } - //Status of call - result.status = read.status; - //Calling back with result - if (callback) callback(result); - break; - case 404: - //File does not exists - if (callback) callback({status: read.status}); - break; - default: - //Unknown - if (callback) callback({status: 500}); - break; - } - /* - //////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////// - //Return Object Description - Object.status (Always presents for handling) - 204: File exists (Success) - 404: File does not exists (Failure) - 500: Unknown (Probably cloud API not running) + enumerable: false, + value: function (file, callback) { + //Reading file (Ninja doesn't really open a file, all in browser memory) + var read = this.fio.readFile({ uri: file }), result; + //Checking for status + switch (read.status) { + case 204: + //Creating and formatting result object for callbak + result = read.file.details; + result.root = read.file.details.uri.replace(read.file.details.name, ""); + //Checking for type of content to returns + if (result.extension !== 'html' && result.extension !== 'htm') { + //Simple string + result.content = read.file.content; + } else { + //Object to be used by Ninja Template + result.content = this.parseHtmlToNinjaTemplate(read.file.content); + } + //Status of call + result.status = read.status; + //Calling back with result + if (callback) callback(result); + break; + case 404: + //File does not exists + if (callback) callback({ status: read.status }); + break; + default: + //Unknown + if (callback) callback({ status: 500 }); + break; + } + /* + //////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////// + //Return Object Description + Object.status (Always presents for handling) + 204: File exists (Success) + 404: File does not exists (Failure) + 500: Unknown (Probably cloud API not running) - (Below only present if succesfull 204) + (Below only present if succesfull 204) - Object.content - Object.extension - Object.name - Object.uri - Object.creationDate - Object.modifiedDate - Object.readOnly - Object.size - //////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////// - */ - } + Object.content + Object.extension + Object.name + Object.uri + Object.creationDate + Object.modifiedDate + Object.readOnly + Object.size + //////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////// + */ + } }, //////////////////////////////////////////////////////////////////// // fileSave: { - enumerable: false, - value: function (file, callback) { - // - var contents, save; - // - switch (file.mode) { - case 'html': - - - //TODO: Add check for Monatage library to copy - - //Getting content from function to properly handle saving assets (as in external if flagged) - contents = this.parseNinjaTemplateToHtml(file); - break; - default: - contents = file.content; - break; - } - //Making call to save file - save = this.fio.saveFile({uri: file.document.uri, contents: contents}); + enumerable: false, + value: function (file, callback) { + // + var contents, save; + // + switch (file.mode) { + case 'html': + + + //TODO: Add check for Monatage library to copy + + //Getting content from function to properly handle saving assets (as in external if flagged) + contents = this.parseNinjaTemplateToHtml(file); + break; + default: + contents = file.content; + break; + } + //Making call to save file + save = this.fio.saveFile({ uri: file.document.uri, contents: contents }); //Checking for callback if (callback) callback(save); - } + } }, //////////////////////////////////////////////////////////////////// // fileSaveAs: { - enumerable: false, - value: function (copyTo, copyFrom, callback) { - //TODO: Implement Save As functionality - } + enumerable: false, + value: function (copyTo, copyFrom, callback) { + //TODO: Implement Save As functionality + } }, //////////////////////////////////////////////////////////////////// // fileDelete: { - enumerable: false, - value: function (file, callback) { - //TODO: Implement Delete functionality - } + enumerable: false, + value: function (file, callback) { + //TODO: Implement Delete functionality + } }, //////////////////////////////////////////////////////////////////// // parseHtmlToNinjaTemplate: { - enumerable: false, - value: function (html) { - //Creating temp object to mimic HTML - var doc = window.document.implementation.createHTMLDocument(), template; - //Setting content to temp - doc.getElementsByTagName('html')[0].innerHTML = html; - //Creating return object - return {head: doc.head.innerHTML, body: doc.body.innerHTML, document: doc}; - } + enumerable: false, + value: function (html) { + //Creating temp object to mimic HTML + var doc = window.document.implementation.createHTMLDocument(), template; + //Setting content to temp + doc.getElementsByTagName('html')[0].innerHTML = html; + //Creating return object + return { head: doc.head.innerHTML, body: doc.body.innerHTML, document: doc }; + } }, //////////////////////////////////////////////////////////////////// //TODO: Expand to allow more templates, clean up variables parseNinjaTemplateToHtml: { - enumerable: false, - value: function (template) { - var regexRootUrl, rootUrl = this.application.ninja.coreIoApi.rootUrl+escape((this.application.ninja.documentController.documentHackReference.root.split(this.application.ninja.coreIoApi.cloudData.root)[1])); - regexRootUrl = new RegExp(rootUrl.replace(/\//gi, '\\\/'), 'gi'); - //Injecting head and body into old document - template.document.content.document.head.innerHTML = template.head.replace(regexRootUrl, ''); - template.document.content.document.body.innerHTML = template.body.replace(regexRootUrl, ''); - //Getting all CSS (style or link) tags - var styletags = template.document.content.document.getElementsByTagName('style'), + enumerable: false, + value: function (template) { + var regexRootUrl, rootUrl = this.application.ninja.coreIoApi.rootUrl + escape((this.application.ninja.documentController.documentHackReference.root.split(this.application.ninja.coreIoApi.cloudData.root)[1])); + regexRootUrl = new RegExp(rootUrl.replace(/\//gi, '\\\/'), 'gi'); + //Injecting head and body into old document + template.document.content.document.head.innerHTML = template.head.replace(regexRootUrl, ''); + template.document.content.document.body.innerHTML = template.body.replace(regexRootUrl, ''); + //Getting all CSS (style or link) tags + var styletags = template.document.content.document.getElementsByTagName('style'), linktags = template.document.content.document.getElementsByTagName('link'), toremovetags = []; - //Getting styles tags to be removed from document - if (styletags.length) { - for (var j=0; j only | css =