Merge branch 'master' into gh-pages

This commit is contained in:
Rufus Pollock
2014-03-04 20:35:17 +00:00
5 changed files with 71 additions and 26 deletions

View File

@@ -46,6 +46,7 @@ Possible breaking changes
* Require new underscore.deferred vendor library for all use (jQuery no longer required if just using recline.dataset.js) * Require new underscore.deferred vendor library for all use (jQuery no longer required if just using recline.dataset.js)
* View.el is now the raw DOM element. If you want a jQuery-wrapped version, use view.$el. #350 * View.el is now the raw DOM element. If you want a jQuery-wrapped version, use view.$el. #350
* Upgraded timelinejs lib - #316 * Upgraded timelinejs lib - #316
* Pager widget now takes Dataset object rather than QueryState object #386
### v0.5 - July 5th 2012 (first public release) ### v0.5 - July 5th 2012 (first public release)

27
dist/recline.js vendored
View File

@@ -3674,14 +3674,16 @@ my.SlickGrid = Backbone.View.extend({
model.set(v); model.set(v);
}); });
this._slickHandler.subscribe(this.grid.onClick,function(e, args){ this._slickHandler.subscribe(this.grid.onClick,function(e, args){
//try catch , because this fail in qunit , but no
//error on browser.
try{e.preventDefault()}catch(e){}
if (args.cell == 0 && self.state.get("gridOptions").enabledDelRow == true){ if (args.cell == 0 && self.state.get("gridOptions").enabledDelRow == true){
// We need to delete the associated model // We need to delete the associated model
var model = data.getModel(args.row); var model = data.getModel(args.row);
model.destroy() model.destroy()
} }
}) ; }) ;
var columnpicker = new Slick.Controls.ColumnPicker(columns, this.grid,
var columnpicker = new Slick.Controls.ColumnPicker(columns, this.grid,
_.extend(options,{state:this.state})); _.extend(options,{state:this.state}));
if (self.visible){ if (self.visible){
@@ -4408,11 +4410,16 @@ my.Pager = Backbone.View.extend({
}, },
onFormSubmit: function(e) { onFormSubmit: function(e) {
e.preventDefault(); e.preventDefault();
var newFrom = parseInt(this.$el.find('input[name="from"]').val()); // filter is 0-based; form is 1-based
newFrom = Math.min(this.model.recordCount, Math.max(newFrom, 1))-1; var formFrom = parseInt(this.$el.find('input[name="from"]').val())-1;
var newSize = parseInt(this.$el.find('input[name="to"]').val()) - newFrom; var formTo = parseInt(this.$el.find('input[name="to"]').val())-1;
newSize = Math.min(Math.max(newSize, 1), this.model.recordCount); var maxRecord = this.model.recordCount-1;
this.model.queryState.set({size: newSize, from: newFrom}); if (this.model.queryState.get('from') != formFrom) { // changed from; update from
this.model.queryState.set({from: Math.min(maxRecord, Math.max(formFrom, 0))});
} else if (this.model.queryState.get('to') != formTo) { // change to; update size
var to = Math.min(maxRecord, Math.max(formTo, 0));
this.model.queryState.set({size: Math.min(maxRecord+1, Math.max(to-formFrom+1, 1))});
}
}, },
onPaginationUpdate: function(e) { onPaginationUpdate: function(e) {
e.preventDefault(); e.preventDefault();
@@ -4422,10 +4429,10 @@ my.Pager = Backbone.View.extend({
var size = this.model.queryState.get('size'); var size = this.model.queryState.get('size');
var updateQuery = false; var updateQuery = false;
if ($el.parent().hasClass('prev')) { if ($el.parent().hasClass('prev')) {
newFrom = Math.max(currFrom - Math.max(0, size), 1)-1; newFrom = Math.max(currFrom - Math.max(0, size), 0);
updateQuery = newFrom != currFrom; updateQuery = newFrom != currFrom;
} else { } else {
newFrom = Math.max(currFrom + size, 1); newFrom = Math.max(currFrom + size, 0);
updateQuery = (newFrom < this.model.recordCount); updateQuery = (newFrom < this.model.recordCount);
} }
if (updateQuery) { if (updateQuery) {

View File

@@ -313,14 +313,16 @@ my.SlickGrid = Backbone.View.extend({
model.set(v); model.set(v);
}); });
this._slickHandler.subscribe(this.grid.onClick,function(e, args){ this._slickHandler.subscribe(this.grid.onClick,function(e, args){
//try catch , because this fail in qunit , but no
//error on browser.
try{e.preventDefault()}catch(e){}
if (args.cell == 0 && self.state.get("gridOptions").enabledDelRow == true){ if (args.cell == 0 && self.state.get("gridOptions").enabledDelRow == true){
// We need to delete the associated model // We need to delete the associated model
var model = data.getModel(args.row); var model = data.getModel(args.row);
model.destroy() model.destroy()
} }
}) ; }) ;
var columnpicker = new Slick.Controls.ColumnPicker(columns, this.grid,
var columnpicker = new Slick.Controls.ColumnPicker(columns, this.grid,
_.extend(options,{state:this.state})); _.extend(options,{state:this.state}));
if (self.visible){ if (self.visible){

View File

@@ -30,11 +30,16 @@ my.Pager = Backbone.View.extend({
}, },
onFormSubmit: function(e) { onFormSubmit: function(e) {
e.preventDefault(); e.preventDefault();
var newFrom = parseInt(this.$el.find('input[name="from"]').val()); // filter is 0-based; form is 1-based
newFrom = Math.min(this.model.recordCount, Math.max(newFrom, 1))-1; var formFrom = parseInt(this.$el.find('input[name="from"]').val())-1;
var newSize = parseInt(this.$el.find('input[name="to"]').val()) - newFrom; var formTo = parseInt(this.$el.find('input[name="to"]').val())-1;
newSize = Math.min(Math.max(newSize, 1), this.model.recordCount); var maxRecord = this.model.recordCount-1;
this.model.queryState.set({size: newSize, from: newFrom}); if (this.model.queryState.get('from') != formFrom) { // changed from; update from
this.model.queryState.set({from: Math.min(maxRecord, Math.max(formFrom, 0))});
} else if (this.model.queryState.get('to') != formTo) { // change to; update size
var to = Math.min(maxRecord, Math.max(formTo, 0));
this.model.queryState.set({size: Math.min(maxRecord+1, Math.max(to-formFrom+1, 1))});
}
}, },
onPaginationUpdate: function(e) { onPaginationUpdate: function(e) {
e.preventDefault(); e.preventDefault();
@@ -44,10 +49,10 @@ my.Pager = Backbone.View.extend({
var size = this.model.queryState.get('size'); var size = this.model.queryState.get('size');
var updateQuery = false; var updateQuery = false;
if ($el.parent().hasClass('prev')) { if ($el.parent().hasClass('prev')) {
newFrom = Math.max(currFrom - Math.max(0, size), 1)-1; newFrom = Math.max(currFrom - Math.max(0, size), 0);
updateQuery = newFrom != currFrom; updateQuery = newFrom != currFrom;
} else { } else {
newFrom = Math.max(currFrom + size, 1); newFrom = Math.max(currFrom + size, 0);
updateQuery = (newFrom < this.model.recordCount); updateQuery = (newFrom < this.model.recordCount);
} }
if (updateQuery) { if (updateQuery) {

View File

@@ -42,6 +42,37 @@ test('basics', function () {
view.remove(); view.remove();
}); });
test('change inputs', function () {
var dataset = Fixture.getDataset();
var size = parseInt(dataset.recordCount/3);
dataset.queryState.set({ size : size }, { silent : true });
var view = new recline.View.Pager({
model: dataset
});
$('.fixtures').append(view.el);
var toSelector = 'input[name=to]';
var fromSelector = 'input[name=from]';
// change from: update to, keep size
var fromVal = size;
$(fromSelector).val(fromVal).change();
equal($(fromSelector).val(), fromVal);
// UI is 1-based but model is zero-based
equal(dataset.queryState.get('from'), fromVal-1);
equal($(toSelector).val(), fromVal+(size-1));
// change to: update from, change size
var toVal = dataset.recordCount;
$(toSelector).val(toVal).change();
equal($(toSelector).val(), toVal);
equal($(fromSelector).val(), fromVal);
// UI is 1-based but model is zero-based
equal(dataset.queryState.get('from'), fromVal-1);
notEqual(dataset.queryState.get('size'), size);
view.remove();
});
test('bounds checking', function () { test('bounds checking', function () {
var dataset = Fixture.getDataset(); var dataset = Fixture.getDataset();
var size = dataset.recordCount/2 + 1; var size = dataset.recordCount/2 + 1;
@@ -62,10 +93,9 @@ test('bounds checking', function () {
// enter size-1 in from: reloads size-1 - size // enter size-1 in from: reloads size-1 - size
var fromVal = size-1; var fromVal = size-1;
var toVal = parseInt($(toSelector).val());
$(fromSelector).val(fromVal).change(); $(fromSelector).val(fromVal).change();
equal($(fromSelector).val(), fromVal); equal($(fromSelector).val(), fromVal);
equal($(toSelector).val(), toVal); equal($(toSelector).val(), fromVal+(size-1));
// UI is 1-based but model is zero-based // UI is 1-based but model is zero-based
equal(dataset.queryState.get('from'), fromVal-1); equal(dataset.queryState.get('from'), fromVal-1);
@@ -80,17 +110,17 @@ test('bounds checking', function () {
// click next on end -> nothing happens // click next on end -> nothing happens
var queryCalls = querySpy.callCount; var queryCalls = querySpy.callCount;
fromVal = parseInt($(fromSelector).val()); fromVal = parseInt($(fromSelector).val());
toVal = parseInt($(toSelector).val()); var toVal = parseInt($(toSelector).val());
view.$el.find('.next a').click(); view.$el.find('.next a').click();
equal(querySpy.callCount, queryCalls); equal(querySpy.callCount, queryCalls);
equal($(fromSelector).val(), fromVal); equal($(fromSelector).val(), fromVal);
equal($(toSelector).val(), toVal); equal($(toSelector).val(), toVal);
// reset from to 1 // reset from=1
// type value past the end in to: 1-recordCount
fromVal = 1; fromVal = 1;
$(fromSelector).val(fromVal).change();
// type value past the end in to: 1-recordCount
toVal = dataset.recordCount + 10; toVal = dataset.recordCount + 10;
$(fromSelector).val(fromVal);
$(toSelector).val(toVal).change(); $(toSelector).val(toVal).change();
equal($(fromSelector).val(), 1); equal($(fromSelector).val(), 1);
equal($(toSelector).val(), dataset.recordCount); equal($(toSelector).val(), dataset.recordCount);