From dbc628cebdf5349d32e4983cebb109477d47abec Mon Sep 17 00:00:00 2001 From: Thibaut Date: Sun, 18 Oct 2015 16:56:11 -0400 Subject: [PATCH] Speed up re-rendering pages from cache --- assets/javascripts/views/content/entry_page.coffee | 8 ++++---- assets/javascripts/views/pages/angular.coffee | 2 +- assets/javascripts/views/pages/base.coffee | 3 ++- assets/javascripts/views/pages/bower.coffee | 2 +- assets/javascripts/views/pages/c.coffee | 2 +- assets/javascripts/views/pages/coffeescript.coffee | 2 +- assets/javascripts/views/pages/d3.coffee | 2 +- assets/javascripts/views/pages/drupal.coffee | 2 +- assets/javascripts/views/pages/ember.coffee | 2 +- assets/javascripts/views/pages/go.coffee | 2 +- assets/javascripts/views/pages/javascript.coffee | 4 ++-- assets/javascripts/views/pages/jquery.coffee | 11 ++++++----- assets/javascripts/views/pages/knockout.coffee | 2 +- assets/javascripts/views/pages/laravel.coffee | 2 +- assets/javascripts/views/pages/mdn.coffee | 2 +- assets/javascripts/views/pages/meteor.coffee | 2 +- assets/javascripts/views/pages/phalcon.coffee | 2 +- assets/javascripts/views/pages/php.coffee | 2 +- assets/javascripts/views/pages/phpunit.coffee | 2 +- assets/javascripts/views/pages/rdoc.coffee | 2 +- assets/javascripts/views/pages/react.coffee | 2 +- assets/javascripts/views/pages/rust.coffee | 2 +- assets/javascripts/views/pages/sphinx.coffee | 2 +- 23 files changed, 33 insertions(+), 31 deletions(-) diff --git a/assets/javascripts/views/content/entry_page.coffee b/assets/javascripts/views/content/entry_page.coffee index 957dddd5..8900d68e 100644 --- a/assets/javascripts/views/content/entry_page.coffee +++ b/assets/javascripts/views/content/entry_page.coffee @@ -24,18 +24,18 @@ class app.views.EntryPage extends app.View @trigger 'loading' return - render: (content = '') -> + render: (content = '', fromCache = false) -> return unless @activated @empty() @subview = new (@subViewClass()) @el, @entry - @subview.render(content) + @subview.render(content, fromCache) if app.disabledDocs.findBy 'slug', @entry.doc.slug @hiddenView = new app.views.HiddenPage @el, @entry @trigger 'loaded' - @delay @addClipboardLinks + @delay @addClipboardLinks unless fromCache return CLIPBOARD_LINK = '' @@ -122,7 +122,7 @@ class app.views.EntryPage extends app.View restore: -> if @cacheMap[path = @entry.filePath()] - @render @cacheMap[path] + @render @cacheMap[path], true true onClick: (event) => diff --git a/assets/javascripts/views/pages/angular.coffee b/assets/javascripts/views/pages/angular.coffee index fed689d6..9247041b 100644 --- a/assets/javascripts/views/pages/angular.coffee +++ b/assets/javascripts/views/pages/angular.coffee @@ -1,7 +1,7 @@ #= require views/pages/base class app.views.AngularPage extends app.views.BasePage - afterRender: -> + prepare: -> for el in @findAllByTag('pre') lang = if el.classList.contains('lang-html') or el.textContent[0] is '<' 'markup' diff --git a/assets/javascripts/views/pages/base.coffee b/assets/javascripts/views/pages/base.coffee index 3b455edd..7e5234bd 100644 --- a/assets/javascripts/views/pages/base.coffee +++ b/assets/javascripts/views/pages/base.coffee @@ -1,9 +1,10 @@ class app.views.BasePage extends app.View constructor: (@el, @entry) -> super - render: (content) -> + render: (content, fromCache = false) -> @addClass "_#{@entry.doc.type}" unless @constructor.className @html content + @prepare?() unless fromCache @activate() @delay @afterRender if @afterRender return diff --git a/assets/javascripts/views/pages/bower.coffee b/assets/javascripts/views/pages/bower.coffee index 27dd69b8..57a1e757 100644 --- a/assets/javascripts/views/pages/bower.coffee +++ b/assets/javascripts/views/pages/bower.coffee @@ -1,6 +1,6 @@ #= require views/pages/base class app.views.BowerPage extends app.views.BasePage - afterRender: -> + prepare: -> @highlightCode @findAll('pre[data-lang="js"], pre[data-lang="javascript"], pre[data-lang="json"]'), 'javascript' return diff --git a/assets/javascripts/views/pages/c.coffee b/assets/javascripts/views/pages/c.coffee index e079fe6d..154dd90f 100644 --- a/assets/javascripts/views/pages/c.coffee +++ b/assets/javascripts/views/pages/c.coffee @@ -1,7 +1,7 @@ #= require views/pages/base class app.views.CPage extends app.views.BasePage - afterRender: -> + prepare: -> @highlightCode @findAll('pre.source-c, .source-c > pre'), 'c' @highlightCode @findAll('pre.source-cpp, .source-cpp > pre'), 'cpp' return diff --git a/assets/javascripts/views/pages/coffeescript.coffee b/assets/javascripts/views/pages/coffeescript.coffee index f470e7b3..b2e7dae6 100644 --- a/assets/javascripts/views/pages/coffeescript.coffee +++ b/assets/javascripts/views/pages/coffeescript.coffee @@ -1,7 +1,7 @@ #= require views/pages/base class app.views.CoffeescriptPage extends app.views.BasePage - afterRender: -> + prepare: -> @highlightCode @findAll('.code > pre:first-child'), 'coffeescript' @highlightCode @findAll('.code > pre:last-child'), 'javascript' return diff --git a/assets/javascripts/views/pages/d3.coffee b/assets/javascripts/views/pages/d3.coffee index f66891e2..2247a6cb 100644 --- a/assets/javascripts/views/pages/d3.coffee +++ b/assets/javascripts/views/pages/d3.coffee @@ -1,6 +1,6 @@ #= require views/pages/base class app.views.D3Page extends app.views.BasePage - afterRender: -> + prepare: -> @highlightCode @findAll('.highlight > pre'), 'javascript' return diff --git a/assets/javascripts/views/pages/drupal.coffee b/assets/javascripts/views/pages/drupal.coffee index 8d82b0aa..502b2200 100644 --- a/assets/javascripts/views/pages/drupal.coffee +++ b/assets/javascripts/views/pages/drupal.coffee @@ -1,6 +1,6 @@ #= require views/pages/base class app.views.DrupalPage extends app.views.BasePage - afterRender: -> + prepare: -> @highlightCode @findAll('pre.php'), 'php' return diff --git a/assets/javascripts/views/pages/ember.coffee b/assets/javascripts/views/pages/ember.coffee index bccbe9f6..6942499e 100644 --- a/assets/javascripts/views/pages/ember.coffee +++ b/assets/javascripts/views/pages/ember.coffee @@ -1,7 +1,7 @@ #= require views/pages/base class app.views.EmberPage extends app.views.BasePage - afterRender: -> + prepare: -> for el in @findAllByTag 'pre' language = if el.classList.contains 'javascript' 'javascript' diff --git a/assets/javascripts/views/pages/go.coffee b/assets/javascripts/views/pages/go.coffee index 50443179..916e0620 100644 --- a/assets/javascripts/views/pages/go.coffee +++ b/assets/javascripts/views/pages/go.coffee @@ -1,6 +1,6 @@ #= require views/pages/base class app.views.GoPage extends app.views.BasePage - afterRender: -> + prepare: -> @highlightCode @findAll('pre'), 'go' return diff --git a/assets/javascripts/views/pages/javascript.coffee b/assets/javascripts/views/pages/javascript.coffee index 5cdd2e98..cf8550f7 100644 --- a/assets/javascripts/views/pages/javascript.coffee +++ b/assets/javascripts/views/pages/javascript.coffee @@ -1,12 +1,12 @@ #= require views/pages/base class app.views.JavascriptPage extends app.views.BasePage - afterRender: -> + prepare: -> @highlightCode @findAllByTag('pre'), 'javascript' return class app.views.JavascriptWithMarkupCheckPage extends app.views.BasePage - afterRender: -> + prepare: -> for el in @findAllByTag('pre') language = if el.textContent.match(/^\s* + for el in @findAllByClass 'syntaxhighlighter' + language = if el.classList.contains('javascript') then 'javascript' else 'markup' + @highlightCode el, language + return + afterRender: -> # Prevent jQuery Mobile's demo iframes from scrolling the page for iframe in @findAllByTag 'iframe' @@ -11,11 +17,6 @@ class app.views.JqueryPage extends app.views.BasePage @runExamples() - for el in @findAllByClass 'syntaxhighlighter' - language = if el.classList.contains('javascript') then 'javascript' else 'markup' - @highlightCode el, language - return - onIframeLoaded: (event) => event.target.style.display = '' $.off event.target, 'load', @onIframeLoaded diff --git a/assets/javascripts/views/pages/knockout.coffee b/assets/javascripts/views/pages/knockout.coffee index cb23d779..96a914ec 100644 --- a/assets/javascripts/views/pages/knockout.coffee +++ b/assets/javascripts/views/pages/knockout.coffee @@ -1,7 +1,7 @@ #= require views/pages/base class app.views.KnockoutPage extends app.views.BasePage - afterRender: -> + prepare: -> for el in @findAll('pre') language = if el.innerHTML.indexOf('data-bind="') > 0 then 'markup' else 'javascript' @highlightCode el, language diff --git a/assets/javascripts/views/pages/laravel.coffee b/assets/javascripts/views/pages/laravel.coffee index 5c45eec0..b9992d12 100644 --- a/assets/javascripts/views/pages/laravel.coffee +++ b/assets/javascripts/views/pages/laravel.coffee @@ -1,6 +1,6 @@ #= require views/pages/base class app.views.LaravelPage extends app.views.BasePage - afterRender: -> + prepare: -> @highlightCode @findAllByTag('pre'), 'php' return diff --git a/assets/javascripts/views/pages/mdn.coffee b/assets/javascripts/views/pages/mdn.coffee index 9cd4e2c1..bc77dfc0 100644 --- a/assets/javascripts/views/pages/mdn.coffee +++ b/assets/javascripts/views/pages/mdn.coffee @@ -5,7 +5,7 @@ class app.views.MdnPage extends app.views.BasePage LANGUAGE_REGEXP = /brush: ?(\w+)/ - afterRender: -> + prepare: -> for el in @findAll 'pre[class^="brush"]' language = el.className.match(LANGUAGE_REGEXP)[1] .replace('html', 'markup') diff --git a/assets/javascripts/views/pages/meteor.coffee b/assets/javascripts/views/pages/meteor.coffee index bd8c96ca..bb41f6a1 100644 --- a/assets/javascripts/views/pages/meteor.coffee +++ b/assets/javascripts/views/pages/meteor.coffee @@ -1,7 +1,7 @@ #= require views/pages/base class app.views.MeteorPage extends app.views.BasePage - afterRender: -> + prepare: -> @highlightCode @findAll('pre.js, pre.javascript'), 'javascript' @highlightCode @findAll('pre.html'), 'markup' return diff --git a/assets/javascripts/views/pages/phalcon.coffee b/assets/javascripts/views/pages/phalcon.coffee index fb17d54d..49d7ca35 100644 --- a/assets/javascripts/views/pages/phalcon.coffee +++ b/assets/javascripts/views/pages/phalcon.coffee @@ -1,7 +1,7 @@ #= require views/pages/base class app.views.PhalconPage extends app.views.BasePage - afterRender: -> + prepare: -> @highlightCode @findAll('pre[class*="php"]'), 'php' @highlightCode @findAll('pre.highlight-html'), 'markup' return diff --git a/assets/javascripts/views/pages/php.coffee b/assets/javascripts/views/pages/php.coffee index 8129bedc..99202e6b 100644 --- a/assets/javascripts/views/pages/php.coffee +++ b/assets/javascripts/views/pages/php.coffee @@ -1,6 +1,6 @@ #= require views/pages/base class app.views.PhpPage extends app.views.BasePage - afterRender: -> + prepare: -> @highlightCode @findAllByClass('phpcode'), 'php' return diff --git a/assets/javascripts/views/pages/phpunit.coffee b/assets/javascripts/views/pages/phpunit.coffee index f7f270ac..c9f915bb 100644 --- a/assets/javascripts/views/pages/phpunit.coffee +++ b/assets/javascripts/views/pages/phpunit.coffee @@ -1,6 +1,6 @@ #= require views/pages/base class app.views.PhpunitPage extends app.views.BasePage - afterRender: -> + prepare: -> @highlightCode @findAll('pre.programlisting'), 'php' return diff --git a/assets/javascripts/views/pages/rdoc.coffee b/assets/javascripts/views/pages/rdoc.coffee index 55059d9e..0affac07 100644 --- a/assets/javascripts/views/pages/rdoc.coffee +++ b/assets/javascripts/views/pages/rdoc.coffee @@ -4,7 +4,7 @@ class app.views.RdocPage extends app.views.BasePage @events: click: 'onClick' - afterRender: -> + prepare: -> @highlightCode @findAll('pre.ruby'), 'ruby' @highlightCode @findAll('pre.c'), 'clike' return diff --git a/assets/javascripts/views/pages/react.coffee b/assets/javascripts/views/pages/react.coffee index 45464006..c9504e53 100644 --- a/assets/javascripts/views/pages/react.coffee +++ b/assets/javascripts/views/pages/react.coffee @@ -1,7 +1,7 @@ #= require views/pages/base class app.views.ReactPage extends app.views.BasePage - afterRender: -> + prepare: -> for el in @findAllByTag 'pre' switch el.getAttribute('data-lang') when 'html' then @highlightCode el, 'markup' diff --git a/assets/javascripts/views/pages/rust.coffee b/assets/javascripts/views/pages/rust.coffee index 979d3990..cc4f4601 100644 --- a/assets/javascripts/views/pages/rust.coffee +++ b/assets/javascripts/views/pages/rust.coffee @@ -1,6 +1,6 @@ #= require views/pages/base class app.views.RustPage extends app.views.BasePage - afterRender: -> + prepare: -> @highlightCode @findAll('pre.rust'), 'rust' return diff --git a/assets/javascripts/views/pages/sphinx.coffee b/assets/javascripts/views/pages/sphinx.coffee index 1427c418..94aa51d7 100644 --- a/assets/javascripts/views/pages/sphinx.coffee +++ b/assets/javascripts/views/pages/sphinx.coffee @@ -1,7 +1,7 @@ #= require views/pages/base class app.views.SphinxPage extends app.views.BasePage - afterRender: -> + prepare: -> @highlightCode @findAll('pre.python'), 'python' @highlightCode @findAll('pre.markup'), 'markup' return