This repository has been archived by the owner on Jun 1, 2021. It is now read-only.
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
Showing
4 changed files
with
125 additions
and
160 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,210 +1,175 @@ | ||
/*! | ||
* bespoke-logbook v0.1.0 | ||
* bespoke-logbook v1.0.0 | ||
* https://github.com/joelpurra/bespoke-logbook | ||
* | ||
* Copyright 2013, Joel Purra | ||
* This content is released under the MIT license | ||
*/ | ||
|
||
(function(global, window, bespoke, convenient, pluginName, undefined) { | ||
(function(bespoke, convenient, ns, pluginName, undefined) { | ||
"use strict"; | ||
|
||
var tag = "bespoke." + pluginName, | ||
var cv = convenient.builder(pluginName), | ||
|
||
cv = convenient.builder(pluginName); | ||
defaultEvents = ["activate", "deactivate", "next", "prev", "slide"], | ||
|
||
// Set up a global, overridable logger object | ||
global.logbookLogger = global.logbookLogger || { | ||
log: function() { | ||
// Workaround for phantom-polyfill.js problems binding window.console.log | ||
window.console.log.apply(window.console, arguments); | ||
} | ||
}; | ||
plugin = function self(deck, options) { | ||
var createPrefixedLogger = Function.prototype.bind.bind(cv.log, cv.log.bind), | ||
|
||
(function(bespoke, ns, logger) { | ||
var defaultEvents = ["activate", "deactivate", "next", "prev", "slide"], | ||
|
||
copyArray = function(arr) { | ||
return [].slice.call(arr, 0); | ||
}, | ||
|
||
// Curry, partial, bind - not sure what | ||
bind = function(fn, context) { | ||
var args = copyArray(arguments).slice(1); | ||
args[0] = context || null; | ||
|
||
var prepared = function() { | ||
var baseAndPrefixedArguments = args.concat(copyArray(arguments)), | ||
bound = Function.prototype.bind.apply(fn, baseAndPrefixedArguments); | ||
|
||
return bound; | ||
}; | ||
|
||
return prepared; | ||
}, | ||
|
||
plugin = function self(deck, options) { | ||
var createBaseLogger = bind(logger.log), | ||
|
||
log = createBaseLogger(tag), | ||
|
||
createPrefixedLogger = bind(log), | ||
|
||
stringLoggingOverride = function(str) { | ||
var fn = function() { | ||
log(str); | ||
}; | ||
stringLoggingOverride = function(str) { | ||
var fn = function() { | ||
cv.log(str); | ||
}; | ||
|
||
return fn; | ||
}, | ||
return fn; | ||
}, | ||
|
||
overrides = {}, | ||
overrides = {}, | ||
|
||
override = function(eventName, eventLoggingOverride) { | ||
if (eventLoggingOverride === false) { | ||
delete overrides[eventName]; | ||
override = function(eventName, eventLoggingOverride) { | ||
if (eventLoggingOverride === false) { | ||
delete overrides[eventName]; | ||
|
||
return; | ||
} | ||
return; | ||
} | ||
|
||
if (!(eventLoggingOverride instanceof Function || eventLoggingOverride instanceof String || eventLoggingOverride === ("" + eventLoggingOverride))) { | ||
throw cv.generateErrorObject("The override must be `false`, a function or a string."); | ||
} | ||
if (!(eventLoggingOverride instanceof Function || eventLoggingOverride instanceof String || eventLoggingOverride === ("" + eventLoggingOverride))) { | ||
throw cv.generateErrorObject("The override must be `false`, a function or a string."); | ||
} | ||
|
||
if (eventLoggingOverride instanceof String || eventLoggingOverride === ("" + eventLoggingOverride)) { | ||
eventLoggingOverride = stringLoggingOverride(eventLoggingOverride); | ||
} | ||
if (eventLoggingOverride instanceof String || eventLoggingOverride === ("" + eventLoggingOverride)) { | ||
eventLoggingOverride = stringLoggingOverride(eventLoggingOverride); | ||
} | ||
|
||
overrides[eventName] = eventLoggingOverride; | ||
}, | ||
overrides[eventName] = eventLoggingOverride; | ||
}, | ||
|
||
getEventLogger = function(eventName) { | ||
return overrides[eventName] || log; | ||
}, | ||
getEventLogger = function(eventName) { | ||
return overrides[eventName] || cv.log; | ||
}, | ||
|
||
getDynamicLogger = function(eventName) { | ||
var dynamicLogger = function() { | ||
var eventLogger = getEventLogger(eventName); | ||
getDynamicLogger = function(eventName) { | ||
var dynamicLogger = function() { | ||
var eventLogger = getEventLogger(eventName); | ||
|
||
eventLogger.apply(null, copyArray(arguments)); | ||
}; | ||
eventLogger.apply(null, cv.copyArray(arguments)); | ||
}; | ||
|
||
return dynamicLogger; | ||
}, | ||
return dynamicLogger; | ||
}, | ||
|
||
proxy = { | ||
fire: function(eventName) { | ||
var eventLogger = getEventLogger(eventName), | ||
result, | ||
args = copyArray(arguments); | ||
proxy = { | ||
fire: function(eventName) { | ||
var eventLogger = getEventLogger(eventName), | ||
result, | ||
args = cv.copyArray(arguments); | ||
|
||
eventLogger.apply(null, ["fire"].concat(args)); | ||
eventLogger.apply(null, ["fire"].concat(args)); | ||
|
||
result = deck.original.fire.apply(null, args); | ||
result = deck.original.fire.apply(null, args); | ||
|
||
eventLogger.apply(null, ["fired", result].concat(args)); | ||
eventLogger.apply(null, ["fired", result].concat(args)); | ||
|
||
return result; | ||
} | ||
}, | ||
return result; | ||
} | ||
}, | ||
|
||
injectProxy = function(name) { | ||
if (deck[name] === proxy[name]) { | ||
throw cv.generateErrorObject("The deck's `" + name + "` has already been overridden."); | ||
} | ||
injectProxy = function(name) { | ||
if (deck[name] === proxy[name]) { | ||
throw cv.generateErrorObject("The deck's `" + name + "` has already been overridden."); | ||
} | ||
|
||
deck.original[name] = deck[name]; | ||
deck[name] = proxy[name]; | ||
}, | ||
deck.original[name] = deck[name]; | ||
deck[name] = proxy[name]; | ||
}, | ||
|
||
deProxy = function(name) { | ||
if (deck[name] !== proxy[name]) { | ||
throw cv.generateErrorObject("The deck's overridden `" + name + "` function has changed - de-proxying will break the proxy chain."); | ||
} | ||
deProxy = function(name) { | ||
if (deck[name] !== proxy[name]) { | ||
throw cv.generateErrorObject("The deck's overridden `" + name + "` function has changed - de-proxying will break the proxy chain."); | ||
} | ||
|
||
deck[name] = deck.original[name]; | ||
}, | ||
deck[name] = deck.original[name]; | ||
}, | ||
|
||
installedDefaultEventListeners = {}, | ||
installedDefaultEventListeners = {}, | ||
|
||
installDefaultEventListeners = function() { | ||
defaultEvents.forEach(function(eventName) { | ||
var dynamicLogger = getDynamicLogger(eventName), | ||
off = deck.on(eventName, dynamicLogger); | ||
installDefaultEventListeners = function() { | ||
defaultEvents.forEach(function(eventName) { | ||
var dynamicLogger = getDynamicLogger(eventName), | ||
off = deck.on(eventName, dynamicLogger); | ||
|
||
installedDefaultEventListeners[eventName] = off; | ||
}); | ||
}, | ||
installedDefaultEventListeners[eventName] = off; | ||
}); | ||
}, | ||
|
||
uninstallDefaultEventListeners = function() { | ||
Object.keys(installedDefaultEventListeners).forEach(function(key) { | ||
var off = installedDefaultEventListeners[key]; | ||
off(); | ||
}); | ||
}, | ||
uninstallDefaultEventListeners = function() { | ||
Object.keys(installedDefaultEventListeners).forEach(function(key) { | ||
var off = installedDefaultEventListeners[key]; | ||
off(); | ||
}); | ||
}, | ||
|
||
installDefaultEventOverrides = function() { | ||
defaultEvents.forEach(function(eventName) { | ||
// TODO: when the default events are triggered with .fire("someeventname"), | ||
// the event name will show up twice in the arguments log, because the | ||
// proxied logbook fire(...) also prependes it. | ||
override(eventName, createPrefixedLogger(eventName)); | ||
}); | ||
}, | ||
installDefaultEventOverrides = function() { | ||
defaultEvents.forEach(function(eventName) { | ||
// TODO: when the default events are triggered with .fire("someeventname"), | ||
// the event name will show up twice in the arguments log, because the | ||
// proxied logbook fire(...) also prependes it. | ||
override(eventName, createPrefixedLogger(eventName)); | ||
}); | ||
}, | ||
|
||
installEventOverridesFromOptions = function() { | ||
Object.keys(options.overrides).forEach(function(key) { | ||
override(key, options.overrides[key]); | ||
}); | ||
}, | ||
installEventOverridesFromOptions = function() { | ||
Object.keys(options.overrides).forEach(function(key) { | ||
override(key, options.overrides[key]); | ||
}); | ||
}, | ||
|
||
prepareOptions = function() { | ||
// TODO: merge function? | ||
options = options !== true ? options : {}; | ||
options.overrides = options.overrides || {}; | ||
}, | ||
prepareOptions = function() { | ||
// TODO: merge function? | ||
options = options !== true ? options : {}; | ||
options.overrides = options.overrides || {}; | ||
}, | ||
|
||
exportApi = function() { | ||
self.enable = enable.bind(this); | ||
self.disable = disable.bind(this); | ||
self.override = override.bind(this); | ||
}, | ||
exportApi = function() { | ||
self.enable = enable.bind(this); | ||
self.disable = disable.bind(this); | ||
self.override = override.bind(this); | ||
}, | ||
|
||
enable = function() { | ||
deck.original = deck.original || {}; | ||
enable = function() { | ||
deck.original = deck.original || {}; | ||
|
||
installDefaultEventListeners(); | ||
installDefaultEventListeners(); | ||
|
||
injectProxy("fire"); | ||
}, | ||
injectProxy("fire"); | ||
}, | ||
|
||
disable = function() { | ||
deProxy("fire"); | ||
disable = function() { | ||
deProxy("fire"); | ||
|
||
uninstallDefaultEventListeners(); | ||
uninstallDefaultEventListeners(); | ||
|
||
delete deck.original; | ||
}, | ||
delete deck.original; | ||
}, | ||
|
||
init = function() { | ||
prepareOptions(); | ||
init = function() { | ||
prepareOptions(); | ||
|
||
installDefaultEventOverrides(); | ||
installDefaultEventOverrides(); | ||
|
||
installEventOverridesFromOptions(); | ||
installEventOverridesFromOptions(); | ||
|
||
exportApi(); | ||
exportApi(); | ||
|
||
enable(); | ||
}; | ||
enable(); | ||
}; | ||
|
||
init(); | ||
}; | ||
init(); | ||
}; | ||
|
||
if (ns[pluginName] !== undefined) { | ||
throw cv.generateErrorObject("The " + pluginName + " plugin has already been loaded."); | ||
} | ||
if (ns[pluginName] !== undefined) { | ||
throw cv.generateErrorObject("The " + pluginName + " plugin has already been loaded."); | ||
} | ||
|
||
ns[pluginName] = plugin; | ||
}(bespoke, bespoke.plugins, global.logbookLogger)); | ||
}(this, window, bespoke, bespoke.plugins.convenient, "logbook")); | ||
ns[pluginName] = plugin; | ||
}(bespoke, bespoke.plugins.convenient, bespoke.plugins, "logbook")); |
Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.
Oops, something went wrong.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters