From f8e97cb190d4a999648e70459e6d92b539b1d32e Mon Sep 17 00:00:00 2001 From: benweet Date: Thu, 7 Nov 2013 23:10:38 +0000 Subject: [PATCH] JSHint validation. Part 2. --- Gruntfile.js | 3 + public/cache.manifest | 2 +- public/res/classes/AsyncTask.js | 1 - public/res/classes/FolderDescriptor.js | 2 +- public/res/{config.js => constants.js} | 4 +- public/res/core.js | 172 +++++++++--------- public/res/eventMgr.js | 27 +-- public/res/extensions/buttonFocusMode.js | 4 +- public/res/extensions/buttonHtmlCode.js | 11 +- public/res/extensions/buttonPublish.js | 6 +- public/res/extensions/buttonShare.js | 6 +- public/res/extensions/buttonStat.js | 8 +- public/res/extensions/buttonSync.js | 4 +- public/res/extensions/dialogAbout.js | 2 - .../res/extensions/dialogManagePublication.js | 10 +- .../extensions/dialogManageSynchronization.js | 12 +- public/res/extensions/dialogOpenHarddrive.js | 9 +- public/res/extensions/documentManager.js | 27 ++- public/res/extensions/documentPanel.js | 18 +- public/res/extensions/documentSelector.js | 18 +- public/res/extensions/documentTitle.js | 6 +- public/res/extensions/googleAnalytics.js | 16 +- public/res/extensions/markdownExtra.js | 9 +- .../res/extensions/markdownSectionParser.js | 2 +- public/res/extensions/mathJax.js | 6 +- public/res/extensions/notifications.js | 3 +- public/res/extensions/partialRendering.js | 36 ++-- public/res/extensions/scrollLink.js | 21 ++- public/res/extensions/spellCheck.js | 20 +- public/res/extensions/toc.js | 6 +- public/res/extensions/userCustom.js | 10 +- public/res/extensions/welcomeTour.js | 4 +- public/res/extensions/workingIndicator.js | 4 +- .../res/extensions/yamlFrontMatterParser.js | 6 +- public/res/helpers/dropboxHelper.js | 1 - public/res/helpers/githubHelper.js | 1 - public/res/helpers/googleHelper.js | 1 - public/res/main.js | 19 +- public/res/publisher.js | 1 - public/res/settings.js | 1 - public/res/worker.js | 3 +- 41 files changed, 272 insertions(+), 250 deletions(-) rename public/res/{config.js => constants.js} (96%) diff --git a/Gruntfile.js b/Gruntfile.js index 4e9e3aee..a4a45072 100644 --- a/Gruntfile.js +++ b/Gruntfile.js @@ -228,6 +228,9 @@ module.exports = function(grunt) { */ grunt.registerTask('build-js', function() { + // JSHint validation + grunt.task.run('jshint'); + // Run r.js optimization grunt.task.run('requirejs'); diff --git a/public/cache.manifest b/public/cache.manifest index 0ef56d89..b28f399d 100644 --- a/public/cache.manifest +++ b/public/cache.manifest @@ -1,5 +1,5 @@ CACHE MANIFEST -#Date Sun Nov 03 2013 22:25:18 +#Date Thu Nov 07 2013 23:09:02 CACHE: res/worker.js diff --git a/public/res/classes/AsyncTask.js b/public/res/classes/AsyncTask.js index 0a9d8ed8..3ed03f92 100644 --- a/public/res/classes/AsyncTask.js +++ b/public/res/classes/AsyncTask.js @@ -3,7 +3,6 @@ define([ "constants", "utils", "eventMgr", - "config" ], function(_, constants, utils, eventMgr) { var taskQueue = []; diff --git a/public/res/classes/FolderDescriptor.js b/public/res/classes/FolderDescriptor.js index b5b53075..42de9345 100644 --- a/public/res/classes/FolderDescriptor.js +++ b/public/res/classes/FolderDescriptor.js @@ -5,7 +5,7 @@ define([ "fileSystem" ], function(_, utils, storage, fileSystem) { - function FolderDescriptor(folderIndex, name, fileList) { + function FolderDescriptor(folderIndex, name) { this.folderIndex = folderIndex; this._name = name || storage[folderIndex + ".name"]; // Retrieve file list from storage diff --git a/public/res/config.js b/public/res/constants.js similarity index 96% rename from public/res/config.js rename to public/res/constants.js index 52c7f5b8..6ad98878 100644 --- a/public/res/config.js +++ b/public/res/constants.js @@ -29,11 +29,11 @@ define([], function() { // Use by Google's client.js window.delayedFunction = undefined; - function runDelayedFunction() { + window.runDelayedFunction = function() { if(window.delayedFunction !== undefined) { window.delayedFunction(); } - } + }; // Site dependent constants.BASE_URL = "http://localhost/"; diff --git a/public/res/core.js b/public/res/core.js index e30067df..4846f6bf 100644 --- a/public/res/core.js +++ b/public/res/core.js @@ -1,3 +1,4 @@ +/*globals Markdown, requirejs */ define([ "jquery", "underscore", @@ -15,7 +16,6 @@ define([ "text!html/settingsTemplateTooltip.html", "text!html/settingsUserCustomExtensionTooltip.html", "storage", - "config", "uilayout", 'pagedown-ace', 'libs/ace_mode', @@ -29,7 +29,7 @@ define([ var core = {}; // Used for periodic tasks - var intervalId = undefined; + var intervalId; // Used to detect user activity var isUserReal = false; @@ -54,7 +54,7 @@ define([ } // Used to only have 1 window of the application in the same browser - var windowId = undefined; + var windowId; function checkWindowUnique() { if(isUserReal === false || windowUnique === false) { return; @@ -106,13 +106,13 @@ define([ } // Load settings in settings dialog - var $themeInputElt = undefined; + var $themeInputElt; function loadSettings() { // Layout orientation utils.setInputRadio("radio-layout-orientation", settings.layoutOrientation); // Theme - utils.setInputValue($themeInputElt, theme); + utils.setInputValue($themeInputElt, window.theme); $themeInputElt.change(); // Lazy rendering utils.setInputChecked("#input-settings-lazy-rendering", settings.lazyRendering); @@ -190,9 +190,9 @@ define([ } // Set the panels visibility - var layout = undefined; - var $menuPanelElt = undefined; - var $documentPanelElt = undefined; + var layout; + var $menuPanelElt; + var $documentPanelElt; function setPanelVisibility(forceHide) { if(forceHide === true || layout.state.north.isClosed) { $menuPanelElt.hide(); @@ -205,7 +205,7 @@ define([ } // Set the preview button visibility - var $previewButtonsElt = undefined; + var $previewButtonsElt; function setPreviewButtonsVisibility(forceHide) { if(forceHide === true || layout.state.east.isClosed) { $previewButtonsElt.hide(); @@ -216,7 +216,7 @@ define([ } // Create ACE editor - var aceEditor = undefined; + var aceEditor; function createAceEditor() { aceEditor = ace.edit("wmd-input"); aceEditor.setOption("spellcheck", true); @@ -277,8 +277,9 @@ define([ } self.currentLine = currentLine; - if(startLine <= endLine) + if(startLine <= endLine) { self.fireUpdateEvent(startLine, endLine); + } } self.$worker = function() { self.lines.splice(0, self.lines.length); @@ -294,7 +295,7 @@ define([ } // Create the layout - var $editorButtonsElt = undefined; + var $editorButtonsElt; function createLayout() { var layoutGlobalConfig = { closable: true, @@ -384,7 +385,7 @@ define([ var $resizerDecorator = $('
'); $previewButtonsElt = $('
'); $editorButtonsElt = $('
'); - if(viewerMode || settings.layoutOrientation == "horizontal") { + if(window.viewerMode || settings.layoutOrientation == "horizontal") { $('.ui-layout-resizer-north').append($resizerDecorator).append($previewButtonsElt); $('.ui-layout-resizer-east').append($northTogglerElt).append($editorButtonsElt); } @@ -400,10 +401,10 @@ define([ } // Create the PageDown editor - var editor = undefined; - var $editorElt = undefined; - var fileDesc = undefined; - var documentContent = undefined; + var editor; + var $editorElt; + var fileDesc; + var documentContent; var UndoManager = require("ace/undomanager").UndoManager; core.initEditor = function(fileDescParam) { if(fileDesc !== undefined) { @@ -431,7 +432,7 @@ define([ var $previewContainerElt = $(".preview-container"); - if(!lightMode) { + if(!window.lightMode) { // Store editor scrollTop on scroll event var saveScroll = _.debounce(function() { if(documentContent !== undefined) { @@ -469,8 +470,9 @@ define([ } documentContent = newDocumentContent; } - - if(!lightMode) { + + var previewWrapper; + if(!window.lightMode) { editor = new Markdown.Editor(converter, undefined, { keyStrokes: shortcutMgr.getPagedownKeyStrokes() }); @@ -491,20 +493,55 @@ define([ $(".modal-insert-image").modal(); return true; }); + + if(settings.lazyRendering === true) { + previewWrapper = function(makePreview) { + var debouncedMakePreview = _.debounce(makePreview, 500); + return function() { + if(documentContent === undefined) { + makePreview(); + eventMgr.onFileOpen(fileDesc); + $previewContainerElt.scrollTop(fileDesc.previewScrollTop); + _.defer(function() { + aceEditor.renderer.scrollToY(fileDesc.editorScrollTop); + }); + } + else { + debouncedMakePreview(); + } + checkDocumentChanges(); + }; + }; + } + else { + previewWrapper = function(makePreview) { + return function() { + makePreview(); + if(documentContent === undefined) { + eventMgr.onFileOpen(fileDesc); + $previewContainerElt.scrollTop(fileDesc.previewScrollTop); + _.defer(function() { + aceEditor.renderer.scrollToY(fileDesc.editorScrollTop); + }); + } + checkDocumentChanges(); + }; + }; + } } else { // That's the light Markdown editor replacing the one from pagedown var $wmdPreviewElt = $('#wmd-preview'); var hooks = new Markdown.HookCollection(); hooks.addNoop("onPreviewRefresh"); - function makePreviewHtml() { + var makePreviewHtml = function() { var text = $editorElt.val(); text = converter.makeHtml(text); $wmdPreviewElt.html(text); hooks.onPreviewRefresh(); - } + }; var debouncedMakePreview = _.debounce(makePreviewHtml, 1000); - var previewWrapper = function() { + var lightPreviewWrapper = function() { if(documentContent === undefined) { makePreviewHtml(); eventMgr.onFileOpen(fileDesc); @@ -514,52 +551,17 @@ define([ } checkDocumentChanges(); }; - $editorElt.on("input propertychange", previewWrapper); + $editorElt.on("input propertychange", lightPreviewWrapper); editor = { hooks: hooks, getConverter: function() { return converter; }, - run: previewWrapper, - refreshPreview: previewWrapper + run: lightPreviewWrapper, + refreshPreview: lightPreviewWrapper }; } - var previewWrapper; - if(settings.lazyRendering === true) { - previewWrapper = function(makePreview) { - var debouncedMakePreview = _.debounce(makePreview, 500); - return function() { - if(documentContent === undefined) { - makePreview(); - eventMgr.onFileOpen(fileDesc); - $previewContainerElt.scrollTop(fileDesc.previewScrollTop); - _.defer(function() { - aceEditor.renderer.scrollToY(fileDesc.editorScrollTop); - }); - } - else { - debouncedMakePreview(); - } - checkDocumentChanges(); - }; - }; - } - else { - previewWrapper = function(makePreview) { - return function() { - makePreview(); - if(documentContent === undefined) { - eventMgr.onFileOpen(fileDesc); - $previewContainerElt.scrollTop(fileDesc.previewScrollTop); - _.defer(function() { - aceEditor.renderer.scrollToY(fileDesc.editorScrollTop); - }); - } - checkDocumentChanges(); - }; - }; - } eventMgr.onPagedownConfigure(editor); editor.hooks.chain("onPreviewRefresh", eventMgr.onAsyncPreview); editor.run(aceEditor, previewWrapper); @@ -573,24 +575,24 @@ define([ var $btnGroupElt = $('.wmd-button-group1'); $("#wmd-bold-button").append($('')).appendTo($btnGroupElt); $("#wmd-italic-button").append($('')).appendTo($btnGroupElt); - var $btnGroupElt = $('.wmd-button-group2'); + $btnGroupElt = $('.wmd-button-group2'); $("#wmd-link-button").append($('')).appendTo($btnGroupElt); $("#wmd-quote-button").append($('')).appendTo($btnGroupElt); $("#wmd-code-button").append($('')).appendTo($btnGroupElt); $("#wmd-image-button").append($('')).appendTo($btnGroupElt); - var $btnGroupElt = $('.wmd-button-group3'); + $btnGroupElt = $('.wmd-button-group3'); $("#wmd-olist-button").append($('')).appendTo($btnGroupElt); $("#wmd-ulist-button").append($('')).appendTo($btnGroupElt); $("#wmd-heading-button").append($('')).appendTo($btnGroupElt); $("#wmd-hr-button").append($('')).appendTo($btnGroupElt); - var $btnGroupElt = $('.wmd-button-group4'); + $btnGroupElt = $('.wmd-button-group4'); $("#wmd-undo-button").append($('')).appendTo($btnGroupElt); $("#wmd-redo-button").append($('')).appendTo($btnGroupElt); }; // Shows a dialog to force the user to click a button before opening oauth popup - var redirectCallbackConfirm = undefined; - var redirectCallbackCancel = undefined; + var redirectCallbackConfirm; + var redirectCallbackCancel; core.redirectConfirm = function(message, callbackConfirm, callbackCancel) { redirectCallbackConfirm = callbackConfirm; redirectCallbackCancel = callbackCancel; @@ -602,7 +604,7 @@ define([ var isDocumentPanelShown = false; var isMenuPanelShown = false; core.onReady = function() { - if(viewerMode === true) { + if(window.viewerMode === true) { document.body.innerHTML = bodyViewerHTML; } else { @@ -630,7 +632,7 @@ define([ $menuPanelElt = $('.menu-panel').collapse({ toggle: false }); - var menuPanelBackdropElt = undefined; + var menuPanelBackdropElt; $menuPanelElt.on('show.bs.collapse', function(e) { if(e.target === $menuPanelElt[0]) { isMenuPanelShown = true; @@ -658,7 +660,7 @@ define([ $documentPanelElt = $('.document-panel').collapse({ toggle: false }); - var documentPanelBackdropElt = undefined; + var documentPanelBackdropElt; $documentPanelElt.on('show.bs.collapse', function(e) { if(e.target === $documentPanelElt[0]) { isDocumentPanelShown = true; @@ -684,7 +686,7 @@ define([ }); // Editor - if(lightMode) { + if(window.lightMode) { // In light mode, we replace ACE with a textarea $('#wmd-input').replaceWith(function() { return $('