Skip to content
This repository has been archived by the owner on Jun 1, 2021. It is now read-only.

Commit

Permalink
v1.0.0
Browse files Browse the repository at this point in the history
  • Loading branch information
joelpurra committed Nov 9, 2013
1 parent 2fb5e29 commit b5e2999
Show file tree
Hide file tree
Showing 4 changed files with 125 additions and 160 deletions.
2 changes: 1 addition & 1 deletion bower.json
@@ -1,6 +1,6 @@
{
"name": "bespoke-logbook",
"version": "0.1.0",
"version": "1.0.0",
"dependencies": {
"bespoke.js": ">=0.3.0",
"bespoke-convenient": "~0.2.1"
Expand Down
277 changes: 121 additions & 156 deletions dist/bespoke-logbook.js
@@ -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"));
4 changes: 2 additions & 2 deletions dist/bespoke-logbook.min.js

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

2 changes: 1 addition & 1 deletion package.json
@@ -1,6 +1,6 @@
{
"name": "bespoke-logbook",
"version": "0.1.0",
"version": "1.0.0",
"description": "Log bespoke.js events and state to the console",
"homepage": "https://github.com/joelpurra/bespoke-logbook",
"bugs": "https://github.com/joelpurra/bespoke-logbook/issues",
Expand Down

0 comments on commit b5e2999

Please sign in to comment.