From 0b0953166c85b8517aec9a085997ff6a409bdf7c Mon Sep 17 00:00:00 2001 From: Andrey Tarantsov Date: Fri, 18 Nov 2011 08:52:30 +0700 Subject: [PATCH] Move LESS.js support into a plugin, start working on plugin API --- src/less.coffee | 13 +++++++++++++ src/livereload.coffee | 16 ++++++++++++++++ src/reloader.coffee | 15 ++++++++++++--- src/startup.coffee | 2 ++ 4 files changed, 43 insertions(+), 3 deletions(-) create mode 100644 src/less.coffee diff --git a/src/less.coffee b/src/less.coffee new file mode 100644 index 0000000..a4a7eab --- /dev/null +++ b/src/less.coffee @@ -0,0 +1,13 @@ + +module.exports = class LessPlugin + @identifier = 'less' + + constructor: (@window, @host) -> + + reload: (path, options) -> + if path.match(/\.less$/i) and @window.less and @window.less.refresh + @window.less.refresh(true) + return + + analyze: -> + { disable: !!(@window.less and @window.less.refresh) } diff --git a/src/livereload.coffee b/src/livereload.coffee index 5b4d3fc..be66c96 100644 --- a/src/livereload.coffee +++ b/src/livereload.coffee @@ -7,6 +7,7 @@ exports.LiveReload = class LiveReload constructor: (@window) -> @listeners = {} + @plugins = [] # i can haz console? @console = if @window.console && @window.console.log && @window.console.error @@ -84,3 +85,18 @@ exports.LiveReload = class LiveReload @connector.disconnect() @log "LiveReload disconnected." @listeners.shutdown?() + + addPlugin: (pluginClass) -> + plugin = new pluginClass @window, + + # expose internal objects for those who know what they're doing + # (note that these are private APIs and subject to change!) + _livereload: this + _reloader: @reloader + _connector: @connector + + # official API + generateCacheBustUrl: (url) -> @reloader.generateCacheBustUrl(url) + + @plugins.push plugin + return diff --git a/src/reloader.coffee b/src/reloader.coffee index 1e62a5d..b75c1a2 100644 --- a/src/reloader.coffee +++ b/src/reloader.coffee @@ -65,15 +65,24 @@ exports.Reloader = class Reloader @document = @window.document @stylesheetGracePeriod = 200 @importCacheWaitPeriod = 200 + @plugins = [] + + + addPlugin: (plugin) -> + @plugins.push plugin + + + analyze: (callback) -> + results reload: (path, options) -> + for plugin in @plugins + if plugin.reload && plugin.reload(path, options) + return if options.liveCSS if path.match(/\.css$/i) return if @reloadStylesheet(path) - if path.match(/\.less$/i) and @window.less and @window.less.refresh - @window.less.refresh(true) - return if options.liveImg if path.match(/\.(jpe?g|png|gif)$/i) @reloadImages(path) diff --git a/src/startup.coffee b/src/startup.coffee index 47d7028..602410a 100644 --- a/src/startup.coffee +++ b/src/startup.coffee @@ -1,6 +1,8 @@ CustomEvents = require('customevents') LiveReload = window.LiveReload = new (require('livereload').LiveReload)(window) +LiveReload.addPlugin require('less') + LiveReload.on 'shutdown', -> delete window.LiveReload LiveReload.on 'connect', -> CustomEvents.fire document, 'LiveReloadConnect'