Skip to content

Commit

Permalink
Merge pull request #171 from purplebricks/CustomPageHref
Browse files Browse the repository at this point in the history
Binding handler page-href name can now be over-ridden by the user
  • Loading branch information
finnsson committed Apr 23, 2014
2 parents f9d7ee9 + 725d10b commit 766f83f
Show file tree
Hide file tree
Showing 6 changed files with 174 additions and 7 deletions.
4 changes: 2 additions & 2 deletions dist/pager.min.js

Large diffs are not rendered by default.

36 changes: 33 additions & 3 deletions pager.js
Original file line number Diff line number Diff line change
Expand Up @@ -1306,19 +1306,47 @@
}
};

// page-href

/**
*
* @type {string}
*/
var _dataAttribute = 'page-href';

/**
*
* @type {Boolean}
*/
pager.useHTML5history = false;

/**
*
* @type {String}
*/
pager.rootURI = '/';

/**
*
* @type {String}
*/
pager.dataAttribute = ko.computed({
read: function () {
return _dataAttribute;
},
write: function (value) {
if(!value){
var err = new Error();
err.message = 'Data Attribute cannot be blank';
throw err;
}

if(ko.bindingHandlers[_dataAttribute]){
delete ko.bindingHandlers[_dataAttribute];
}
_dataAttribute = value;
ko.bindingHandlers[_dataAttribute] = koBindingHandlerMethod;
}
});

pager.Href = function (element, valueAccessor, allBindingsAccessor, viewModel, bindingContext) {
this.element = element;
this.bindingContext = bindingContext;
Expand Down Expand Up @@ -1380,7 +1408,7 @@
});
};

ko.bindingHandlers['page-href'] = {
var koBindingHandlerMethod = {
init: function (element, valueAccessor, allBindingsAccessor, viewModel, bindingContext) {
var Cls = pager.useHTML5history ? pager.Href5 : pager.Href;
var href = new Cls(element, valueAccessor, allBindingsAccessor, viewModel, bindingContext);
Expand All @@ -1393,6 +1421,8 @@
}
};

ko.bindingHandlers[pager.dataAttribute()] = koBindingHandlerMethod;

pager.fx = {};

pager.fx.cssAsync = function (css) {
Expand Down
4 changes: 2 additions & 2 deletions pagerjs.com/demo/pager.min.js

Large diffs are not rendered by default.

47 changes: 47 additions & 0 deletions test/should_throw_when_blank_custom_binding_handler_name_set.html
Original file line number Diff line number Diff line change
@@ -0,0 +1,47 @@
<!DOCTYPE html>
<html>
<head>
<title>Should access URI parameters</title>
<script type="text/javascript" src="../lib/jquery-2.0.3.min.js"></script>
<script type="text/javascript" src="../lib/underscore-min.js"></script>
<script type="text/javascript" src="../lib/knockout-3.0.0.js"></script>
<script type="text/javascript" src="../lib/jquery.ba-hashchange.min.js"></script>
<script type="text/javascript" src="../pager.js"></script>

<link rel="stylesheet" href="../lib/qunit.css"/>
</head>
<body>
<div id="qunit"></div>
<div data-bind="page: {id: 'first'}"></div>

<script type="text/javascript">

var viewModel = {
};

pager.extendWithPage(viewModel);
ko.applyBindings(viewModel);
pager.start();

</script>

<script type="text/javascript" src="../lib/qunit-until.js"></script>
<script type="text/javascript" src="../lib/qunit.js"></script>

<script type="text/javascript">

asyncTest("Should throw when setting blank data attribute", function () {
raises(function(){
pager.dataAttribute('');
},
function(err) {
return err.message === 'Data Attribute cannot be blank';
},
'Throws an error when attempting to set a blank dataAttribute');

start();
});

</script>
</body>
</html>
42 changes: 42 additions & 0 deletions test/should_use_custom_binding_handler_name.html
Original file line number Diff line number Diff line change
@@ -0,0 +1,42 @@
<!DOCTYPE html>
<html>
<head>
<title>Should access URI parameters</title>
<script type="text/javascript" src="../lib/jquery-2.0.3.min.js"></script>
<script type="text/javascript" src="../lib/underscore-min.js"></script>
<script type="text/javascript" src="../lib/knockout-3.0.0.js"></script>
<script type="text/javascript" src="../lib/jquery.ba-hashchange.min.js"></script>
<script type="text/javascript" src="../pager.js"></script>

<link rel="stylesheet" href="../lib/qunit.css"/>
</head>
<body>
<div id="qunit"></div>
<div data-bind="page: {id: 'first'}"></div>

<script type="text/javascript">

var viewModel = {
};

pager.dataAttribute('pageHref');
pager.extendWithPage(viewModel);
ko.applyBindings(viewModel);
pager.start();

</script>

<script type="text/javascript" src="../lib/qunit-until.js"></script>
<script type="text/javascript" src="../lib/qunit.js"></script>

<script type="text/javascript">

asyncTest("Should have custom data attribute", function () {
ok(ko.bindingHandlers['pageHref']);

start();
});

</script>
</body>
</html>
48 changes: 48 additions & 0 deletions test/should_use_default_binding_handler_name.html
Original file line number Diff line number Diff line change
@@ -0,0 +1,48 @@
<!DOCTYPE html>
<html>
<head>
<title>Should access URI parameters</title>
<script type="text/javascript" src="../lib/jquery-2.0.3.min.js"></script>
<script type="text/javascript" src="../lib/underscore-min.js"></script>
<script type="text/javascript" src="../lib/knockout-3.0.0.js"></script>
<script type="text/javascript" src="../lib/jquery.ba-hashchange.min.js"></script>
<script type="text/javascript" src="../pager.js"></script>

<link rel="stylesheet" href="../lib/qunit.css"/>
</head>
<body>

<div id="qunit"></div>

<div data-bind="page: {id: 'first', params: ['nam','ans']}">
<div id="answer" data-bind="text: ans"></div>
<div id="name" data-bind="text: nam"></div>
</div>

<script type="text/javascript">


var viewModel = {
};

pager.extendWithPage(viewModel);
ko.applyBindings(viewModel);

pager.start();
</script>

<script type="text/javascript" src="../lib/qunit-until.js"></script>
<script type="text/javascript" src="../lib/qunit.js"></script>

<script type="text/javascript">

asyncTest("Should have default data attribute", function () {
ok(ko.bindingHandlers['page-href']);

start();
});
</script>


</body>
</html>

0 comments on commit 766f83f

Please sign in to comment.