diff --git a/src/index.html b/src/index.html index 74c524ba..93971f3c 100755 --- a/src/index.html +++ b/src/index.html @@ -525,6 +525,10 @@

Settings

+
+ + +
@@ -597,6 +601,11 @@

Settings

+
+ + +
+ diff --git a/src/js/classes/app.js b/src/js/classes/app.js index 58908057..0d0a5e96 100644 --- a/src/js/classes/app.js +++ b/src/js/classes/app.js @@ -47,10 +47,16 @@ export var App = function(name, version) { window.parent.dispatchEvent(event); }; + this.log = function(message){ + if(self.settings.developmentModeEnabled()){ + console.log(message) + } + }; + this.setDocumentType = function(documentType, e) { const documentTypeId = e ? e.target.value : documentType; self.settings.documentType(documentTypeId); - console.log('Set doc type', documentType, app.data.inkCompiler); + self.log('Set doc type', documentType, app.data.inkCompiler); if (documentTypeId === 'ink') { if (app.data.inkCompiler === null) app.data.inkCompiler = new app.data.InkCompiler(); @@ -86,7 +92,7 @@ export var App = function(name, version) { }; this.setGistCredentials = function(gist, e) { - console.log("SET CREDENTIALS") + self.log("SET CREDENTIALS") const { token, file } = gist; data.storage.setCredentials(token, file); }; @@ -206,7 +212,7 @@ export var App = function(name, version) { let deferredPrompt; const addBtn = $('#addPwa')[0]; addBtn.style.display = 'none'; - // addBtn.addEventListener('click', (e) => {console.log(e)}); + // addBtn.addEventListener('click', (e) => {self.log(e)}); window.addEventListener('beforeinstallprompt', e => { // Prevent Chrome 67 and earlier from automatically showing the prompt e.preventDefault(); @@ -221,10 +227,10 @@ export var App = function(name, version) { // Wait for the user to respond to the prompt deferredPrompt.userChoice.then(choiceResult => { if (choiceResult.outcome === 'accepted') { - console.log('User accepted the A2HS prompt'); + self.log('User accepted the A2HS prompt'); addBtn.style.display = 'none'; } else { - console.log('User dismissed the A2HS prompt'); + self.log('User dismissed the A2HS prompt'); } deferredPrompt = null; }); @@ -847,7 +853,7 @@ export var App = function(name, version) { }), 'Node Link' ); - // console.log(langTools); + // self.log(langTools); langTools.setCompleters([ nodeLinksCompleter, langTools.keyWordCompleter, diff --git a/src/js/classes/data.js b/src/js/classes/data.js index 1a00bbdc..849bad9d 100644 --- a/src/js/classes/data.js +++ b/src/js/classes/data.js @@ -9,7 +9,6 @@ export const data = { db: DBStorage('yarn-DB', 'Yarn-persistence'), storage: StorageJs("gist"), appInstanceStates: ko.observable([]), - restoreFromLocalStorage: ko.observable(true), // All the bellow go into appInstanceStates, which controls r/w of app states to local storage (for file tabs feature) isDocumentDirty: ko.observable(false), editingPath: ko.observable(null), @@ -87,7 +86,7 @@ export const data = { }); }, loadDocumentStateTabFromIndex: function(index) { - console.log('ATTEMPT TO LOAD STATE', index); + app.log('ATTEMPT TO LOAD STATE', index); app.settings.selectedFileTab(index); data.loadAppStateFromLocalStorage(); }, @@ -125,7 +124,7 @@ export const data = { reverseButtons: true, }).then(result => { if (result.value) { - console.log('DELETE TAB', data.appInstanceStates(), index); + app.log('DELETE TAB', data.appInstanceStates(), index); const mutatedState = data .appInstanceStates() .filter((_, i) => i !== index) @@ -140,7 +139,7 @@ export const data = { : index; data.loadDocumentStateTabFromIndex(nextIndex); }, 500); - console.log( + app.log( data.appInstanceStates(), 'resulting mutation', mutatedState @@ -154,7 +153,7 @@ export const data = { ...data.appInstanceStates(), { ...data.getCurrentAppState() }, //this is pretty slow ]); - console.log('DOCUMENT TAB ADDED', data.appInstanceStates()); + app.log('DOCUMENT TAB ADDED', data.appInstanceStates()); data.saveAppStateToLocalStorage(); data.loadDocumentStateTabFromIndex(data.appInstanceStates().length - 1); if (checked) { @@ -164,7 +163,7 @@ export const data = { data.startNewFile(editingName, editingType); } - console.log({ editingName, yarnData, editingType, checked }); + app.log({ editingName, yarnData, editingType, checked }); }, addDocumentStateTab: function() { data.promptFileNameAndFormat( @@ -175,13 +174,13 @@ export const data = { ); }, saveAppStateToLocalStorage: Utils.debounce(function(writeCurrent = true) { - if (!data.restoreFromLocalStorage()) return; + if (!app.settings.restoreSessionEnabled()) return; const storage = app.settings.storage; data.isDocumentDirty(true); data.lastEditedUnix(new Date()); app.refreshWindowTitle(); - // console.log('Update storage', data.appInstanceStates(), writeCurrent); + // app.log('Update storage', data.appInstanceStates(), writeCurrent); const updatedStates = [...data.appInstanceStates()]; if (writeCurrent) updatedStates[app.settings.selectedFileTab()] = data.getCurrentAppState(); @@ -191,12 +190,10 @@ export const data = { app.ui.dispatchEvent('yarnSavedStateToLocalStorage'); }, 700), loadAppStateFromLocalStorage: async function() { - if (!data.restoreFromLocalStorage()) return; // to ignore sometimes? - const storage = app.settings.storage; // Just in case clear old state's cache if (storage.getItem('appState')) { - console.log('--- storage.clear() ---'); + app.log('--- storage.clear() ---'); storage.clear(); //TODO remove later } @@ -206,7 +203,7 @@ export const data = { const currentDocState = appStates[app.settings.selectedFileTab()]; data.appInstanceStates(appStates); - console.log('APP state', appStates, currentDocState); + app.log('APP state', appStates, currentDocState); if (currentDocState) { const { editingPath, @@ -226,6 +223,10 @@ export const data = { lastEditedUnix, lastSavedUnix, } = currentDocState; + app.pluginStorage = pluginStorage; + + if (!app.settings.restoreSessionEnabled()) return; // to ignore sometimes? + app.tags(tags); data.editingPath(editingPath); data.editingName(editingName); @@ -239,21 +240,19 @@ export const data = { data.isDocumentDirty(true); app.refreshWindowTitle(); app.ui.dispatchEvent('yarnLoadedStateFromLocalStorage'); - console.log('--- app.plugins.pluginStorage ---'); - app.plugins.pluginStorage = pluginStorage; - + app.log('--- app.plugins.pluginStorage ---'); data.getNodesFromObjectsAsync(nodes).then(newNodes => { if (editingTitle) { app.editNode(newNodes.find(node => node.title() === editingTitle)); if (editorSelection) app.editor.selection.setRange(editorSelection); } - console.log('--- app.nodes(newNodes) ---', newNodes.length); + app.log('--- app.nodes(newNodes) ---', newNodes.length); app.nodes(newNodes); - console.log('--- app.updateNodeLinks ---'); + app.log('--- app.updateNodeLinks ---'); app.updateNodeLinks(); - console.log('--- app.workspace.setTranslation ---'); + app.log('--- app.workspace.setTranslation ---'); app.workspace.setTranslation(transform.x, transform.y); - console.log('--- app.workspace.setZoom ---'); + app.log('--- app.workspace.setZoom ---'); app.workspace.setZoom(scale * 4); }); } @@ -267,7 +266,7 @@ export const data = { }, setNewFileStats: function(fileName, filePath, lastStorageHost = 'LOCAL') { - console.log('Updated save data', fileName, filePath); + app.log('Updated save data', fileName, filePath); data.editingName(fileName.replace(/^.*[\\\/]/, '')); data.isDocumentDirty(false); data.editingPath(filePath); @@ -362,7 +361,7 @@ export const data = { restoreSettingsFromDocumentHeader: function() { if (data.documentHeader() !== null) { const documentHeader = data.documentHeader(); - console.log('Apply settings from file header:', documentHeader); + app.log('Apply settings from file header:', documentHeader); if ('markupLanguage' in documentHeader) app.settings.markupLanguage(documentHeader.markupLanguage); if ('language' in documentHeader) @@ -380,7 +379,7 @@ export const data = { } }; - console.log('OPENING::', { content }); + app.log('OPENING::', { content }); // different depending on file if (type === FILETYPE.JSON) { content = JSON.parse(content); // todo this can fail, show error @@ -410,7 +409,7 @@ export const data = { ); obj.position = { x: parseInt(x), y: parseInt(y) }; obj.colorID = colorID; - // console.log('OBJECT', obj); + // app.log('OBJECT', obj); } catch (e) { console.warn('node metadata failed parse: ', e); } @@ -657,7 +656,7 @@ export const data = { if (type === FILETYPE.JSON) { // store useful values for later use if the file type supports it if (app.settings.filetypeVersion() === '2') { - console.log('Saving as Yarn json v2 type'); + app.log('Saving as Yarn json v2 type'); const date = new Date(); data.documentHeader({ ...data.documentHeader(), @@ -777,7 +776,7 @@ export const data = { ); reject(); } else { - console.log('Warnings', response.warnings); + app.log('Warnings', response.warnings); app.ui.toastMixin.fire({ animation: true, @@ -788,7 +787,7 @@ export const data = { icon: response.warnings.length > 0 ? 'warning' : 'success', text: response.warnings.join('\n'), }); - console.log({ responseStory: response.story }); + app.log({ responseStory: response.story }); resolve(JSON.stringify(response.story, null, '\t')); } }) @@ -888,7 +887,7 @@ export const data = { isIfElse = false; } else if (trimmedLine.startsWith('<\$]|set /g, '').split('='); - console.log({ set }); + app.log({ set }); parsedBodyContent += set.length > 1 ? `${tabs}$ ${set[0].trim()} = ${set[1].trim()}\n` @@ -1050,8 +1049,8 @@ export const data = { text: yarnData, file: [file], }) - .then(() => console.log('Successful share')) - .catch(error => console.log('Error sharing', error)); + .then(() => app.log('Successful share')) + .catch(error => app.log('Error sharing', error)); } else { Swal.fire({ title: @@ -1066,7 +1065,7 @@ export const data = { if (data.storage.hasGistSettings()) { data.storage.getGistFile().then(gist => { const gistFiles = Object.keys(gist.body.files); - console.log(gistFiles); + app.log(gistFiles); data.promptFileNameAndFormat(({ editingName, yarnData }) => { data.editingName(editingName); data.storage.editGist(gists.file, editingName, yarnData); @@ -1202,7 +1201,7 @@ export const data = { }) .catch(err => { app.clipboard = app.editor.getSelectedText(); - console.log('No clipboard access', err, 'using local instead'); + app.log('No clipboard access', err, 'using local instead'); }); } // execCommand("paste") will not work on web browsers, due to security diff --git a/src/js/classes/richTextFormatter.js b/src/js/classes/richTextFormatter.js index cf6682cf..3cf1395b 100644 --- a/src/js/classes/richTextFormatter.js +++ b/src/js/classes/richTextFormatter.js @@ -62,7 +62,7 @@ export const RichTextFormatter = function(app) { /((?:https?:\/\/)?(?:www.)?instagram.com\/p\/([^\s\<]+)\/)/i ); if (extractedId.length > 2) { - console.log('EXTRACTED', extractedId); + app.log('EXTRACTED', extractedId); return ` `; diff --git a/src/js/classes/settings.js b/src/js/classes/settings.js index 61c770fe..eab46c65 100644 --- a/src/js/classes/settings.js +++ b/src/js/classes/settings.js @@ -63,7 +63,7 @@ export const Settings = function(app) { .readText() .then( (clipText) => { - console.log("clipboard", clipText) + app.log("clipboard", clipText) if(clipText && clipText.length > 5) koItem(clipText) }, ); @@ -173,6 +173,22 @@ export const Settings = function(app) { ) .extend({ persist: 'snapGridEnabled' }); + this.restoreSessionEnabled = ko + .observable( + storage.getItem('restoreSessionEnabled') !== null + ? storage.getItem('restoreSessionEnabled') === 'true' + : false + ) + .extend({ persist: 'restoreSessionEnabled' }); + + this.developmentModeEnabled = ko + .observable( + storage.getItem('developmentModeEnabled') !== null + ? storage.getItem('developmentModeEnabled') === 'true' + : false + ) + .extend({ persist: 'developmentModeEnabled' }); + // Grid size this.gridSize = ko .observable(parseInt(storage.getItem('gridSize') || '40')) diff --git a/src/js/classes/ui.js b/src/js/classes/ui.js index c0ea5c54..b027e3a5 100644 --- a/src/js/classes/ui.js +++ b/src/js/classes/ui.js @@ -14,7 +14,7 @@ export const UI = function(app) { event.options = options; window.dispatchEvent(event); window.parent.dispatchEvent(event); - // console.log('Dispatched event', eventName, event); + // app.log('Dispatched event', eventName, event); }; this.settingsDialogVisible = ko.observable(false); @@ -420,7 +420,7 @@ export const UI = function(app) { if (typeof param.default === 'boolean') { $(`#swal-input${i}`)[0].checked = param.default; } else $(`#swal-input${i}`)[0].value = param.default; - console.log($(`#swal-input${i}`)); + app.log($(`#swal-input${i}`)); }); }, }).then(function(result) { diff --git a/src/public/mode-ink.js b/src/public/mode-ink.js index c52341dc..259b59ba 100644 --- a/src/public/mode-ink.js +++ b/src/public/mode-ink.js @@ -820,7 +820,7 @@ define('ace/mode/ink', [ /// set context menu $.contextMenu(app.utils.getEditorContextMenu(/->/g)); - console.log('ink', InkMode); + app.log('ink', InkMode); app.editor.setOptions({ enableBasicAutocompletion: app.settings.autocompleteSuggestionsEnabled(), enableLiveAutocompletion: app.settings.autocompleteSuggestionsEnabled(), diff --git a/src/public/plugins/index.js b/src/public/plugins/index.js index 8c76cf26..d74383d3 100644 --- a/src/public/plugins/index.js +++ b/src/public/plugins/index.js @@ -25,7 +25,7 @@ export var Plugins = function(app) { const self = this; const registerPlugin = plugin => { app.plugins[plugin.name] = plugin; - // console.log('attaching plugin', plugin, app.plugins); + // app.log('attaching plugin', plugin, app.plugins); }; const getPluginStore = pluginName => { @@ -267,10 +267,10 @@ export var Plugins = function(app) { // register plugins stored on a gist - todo cache all this if (app.settings.gistPluginsFile() !== null) { app.data.storage.getGist(app.settings.gistPluginsFile()).then(({fileList}) => { - console.log({ fileList }); + app.log({ fileList }); fileList.forEach(gistFile => { if (gistFile.language === 'JavaScript') { - console.log({ gistFile }); + app.log({ gistFile }); try { app.storage .getContentOrRaw(gistFile.content, gistFile.raw_url) @@ -279,7 +279,7 @@ export var Plugins = function(app) { importedPlugin => { const newPlugin = importedPlugin(pluginApiMethods); newPlugin.name = newPlugin.name || gistFile.filename; - console.log( + app.log( { newPlugin }, 'loaded from ', gistFile.raw_url @@ -290,11 +290,11 @@ export var Plugins = function(app) { scriptEle.setAttribute('src', dependency); document.body.appendChild(scriptEle); scriptEle.addEventListener('load', () => { - console.log('File loaded', dependency); + app.log('File loaded', dependency); }); scriptEle.addEventListener('error', ev => { - console.log('Error on loading file', ev); + app.log('Error on loading file', ev); }); }); } diff --git a/src/public/plugins/runner.js b/src/public/plugins/runner.js index a0ce923c..e9a286d3 100644 --- a/src/public/plugins/runner.js +++ b/src/public/plugins/runner.js @@ -32,7 +32,7 @@ export var Runner = function({ require('./jsoneditor/size-overrides.css'); editor = new JSONEditor({ id: 'jsoneditor' }); const localVariables = getPluginStore(self.name); - console.log({ editor }); + app.log({ editor }); // set json editor.setValue( typeof localVariables.variables !== 'object' @@ -131,7 +131,7 @@ export var Runner = function({ } }); const localVariables = getPluginStore(self.name); - console.log('variables', localVariables); + app.log('variables', localVariables); app.data.getSaveData('json').then(saveData => { self.previewStory.initYarn( JSON.parse(saveData), @@ -246,7 +246,7 @@ export var Runner = function({ } }); const localVariables = getPluginStore(self.name); - console.log('VARIABLES::::', localVariables); + app.log('VARIABLES::::', localVariables); app.data.getSaveData('ink', null, true).then(saveData => { const onRecompile = () => {