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

Commit

Permalink
Release 0.6.0.
Browse files Browse the repository at this point in the history
  • Loading branch information
paulmillr committed Nov 28, 2013
1 parent 60961e6 commit 42350d0
Show file tree
Hide file tree
Showing 6 changed files with 76 additions and 70 deletions.
8 changes: 8 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -1,3 +1,11 @@
# Exoskeleton 0.6.0 (28 November 2013)
* **Breaking:** removed `View#delegate` and `View#undelegate`.
These methods now reside in `utils` and can be excluded
in custom builds.
* Collection model ids can now be arbitrary js props.
E.g. `collection.get('toString')`.
* `Collection#find` now works in no-underscore environment.

# Exoskeleton 0.5.1 (3 November 2013)
* Added support for `contentType` option in `utils.ajax`

Expand Down
2 changes: 1 addition & 1 deletion bower.json
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
{
"name": "exoskeleton",
"main": "exoskeleton.js",
"version": "0.5.1",
"version": "0.6.0",
"homepage": "https://github.com/paulmillr/exoskeleton",
"author": "Paul Miller (http://paulmillr.com)",
"description": "Faster and leaner Backbone for your HTML5 apps.",
Expand Down
2 changes: 1 addition & 1 deletion component.json
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@
"name": "exoskeleton",
"repo": "paulmillr/exoskeleton",
"description": "Faster and leaner Backbone for your HTML5 apps.",
"version": "0.5.1",
"version": "0.6.0",
"keywords": [
"Backbone",
"Exoskeleton",
Expand Down
130 changes: 64 additions & 66 deletions exoskeleton.js
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
/*!
* Exoskeleton.js 0.5.1
* Exoskeleton.js 0.6.0
* (c) 2013 Paul Miller <http://paulmillr.com>
* Based on Backbone.js
* (c) 2010-2013 Jeremy Ashkenas, DocumentCloud
Expand Down Expand Up @@ -304,6 +304,66 @@ utils.matchesSelector = (function() {
};
})();

utils.delegate = function(view, eventName, selector, callback) {
if (typeof selector === 'function') {
callback = selector;
selector = null;
}

if (typeof callback !== 'function') {
throw new TypeError('View#delegate expects callback function');
}

var root = view.el;
var bound = callback.bind(view);
var handler = selector ? function(event) {
for (var el = event.target; el && el !== root; el = el.parentNode) {
if (utils.matchesSelector(el, selector)) {
// event.currentTarget or event.target are read-only.
event.delegateTarget = el;
return bound(event);
}
}
} : bound;

root.addEventListener(eventName, handler, false);
view._handlers.push({
eventName: eventName, selector: selector,
callback: callback, handler: handler
});
return handler;
};

utils.undelegate = function(view, eventName, selector, callback) {
if (typeof selector === 'function') {
callback = selector;
selector = null;
}

var handlers = view._handlers;
var removeListener = function(item) {
view.el.removeEventListener(item.eventName, item.handler, false);
};

// Remove all handlers.
if (!eventName && !selector && !callback) {
handlers.forEach(removeListener);
view._handlers = [];
} else {
// Remove some handlers.
handlers
.filter(function(item) {
return item.eventName === eventName &&
(callback ? item.callback === callback : true) &&
(selector ? item.selector === selector : true);
})
.forEach(function(item) {
removeListener(item);
handlers.splice(handlers.indexOf(item), 1);
});
}
};

// Make AJAX request to the server.
// Usage:
// var callback = function(error, data) {console.log('Done.', error, data);};
Expand Down Expand Up @@ -1411,75 +1471,13 @@ _.extend(View.prototype, Events, {
this.el = this.$el[0];
} else {
if (this.el) this.undelegateEvents();
var el = (typeof element === 'string') ?
this.el = (typeof element === 'string') ?
document.querySelector(element) : element;
this.el = el;
}
if (delegate !== false) this.delegateEvents();
return this;
},

delegate: function(eventName, selector, callback) {
if (typeof selector === 'function') {
callback = selector;
selector = null;
}

if (typeof callback !== 'function') {
throw new TypeError('View#delegate expects callback function');
}

var root = this.el;
var bound = callback.bind(this);
var handler = selector ? function(event) {
for (var el = event.target; el && el !== root; el = el.parentNode) {
if (utils.matchesSelector(el, selector)) {
// event.currentTarget or event.target are read-only.
event.delegateTarget = el;
return bound(event);
}
}
} : bound;

root.addEventListener(eventName, handler, false);
this._handlers.push({
eventName: eventName, selector: selector,
callback: callback, handler: handler
});
return handler;
},

undelegate: function(eventName, selector, callback) {
if (typeof selector === 'function') {
callback = selector;
selector = null;
}

var root = this.el;
var handlers = this._handlers;
var removeListener = function(item) {
root.removeEventListener(item.eventName, item.handler, false);
};

// Remove all handlers.
if (!eventName && !selector && !callback) {
handlers.forEach(removeListener);
this._handlers = [];
} else {
// Remove some handlers.
handlers
.filter(function(item) {
return item.eventName === eventName &&
(callback ? item.callback === callback : true) &&
(selector ? item.selector === selector : true);
})
.forEach(function(item) {
removeListener(item);
handlers.splice(handlers.indexOf(item), 1);
});
}
},

// Set callbacks, where `this.events` is a hash of
//
// *{"event selector": "callback"}*
Expand Down Expand Up @@ -1511,7 +1509,7 @@ _.extend(View.prototype, Events, {
method = method.bind(this);
this.$el.on(eventName, (selector ? selector : null), method);
} else {
this.delegate(eventName, selector, method);
utils.delegate(this, eventName, selector, method);
}
}
return this;
Expand All @@ -1524,7 +1522,7 @@ _.extend(View.prototype, Events, {
if (Backbone.$) {
this.$el.off('.delegateEvents' + this.cid);
} else {
this.undelegate();
utils.undelegate(this);
}
return this;
},
Expand Down
2 changes: 1 addition & 1 deletion lib/header.js
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
/*!
* Exoskeleton.js 0.5.1
* Exoskeleton.js 0.6.0
* (c) 2013 Paul Miller <http://paulmillr.com>
* Based on Backbone.js
* (c) 2010-2013 Jeremy Ashkenas, DocumentCloud
Expand Down
2 changes: 1 addition & 1 deletion package.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "exoskeleton",
"version": "0.5.1",
"version": "0.6.0",
"description": "Faster and leaner Backbone for your HTML5 apps.",
"main": "exoskeleton.js",
"directories": {
Expand Down

0 comments on commit 42350d0

Please sign in to comment.