From abbab59ce581740ae4d2e7619a2503e5c55f49a9 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?=E9=99=B3=E4=BF=A1=E5=B1=B9?= hZu}RIOZu`GAo41zH_6Acw?$RvgoTb9IcX={d~lv1x|05MWQ|M)(9>Xv7aJoH
zjRxuI9Za-NJywR5b^8-Gm6RXI|LwX)Utdz}dIHcd92u#suH#7Ihgd}mNgVSz
z5Ao4fQPY)2#}{aw-I?VgkZ~so4)L;#PP5t+{${@4|>Xo-)TeZ#*t|@S|J!
z)m&3$Zw2MXypw0AWot1Tc_pzd4ylxyZz{EU!v5Rk&;1Uk`g@A>ehNEEDNZhdf%
ziBh`k#Y^ws2^REwF6Y`}c3|q8%P&){8$&KUdgC`ie@2Y3vV=9?_IRGMmeLLP7@oRl
zoyu!nbM)-NAAOdLFBqy@WjQxY7qDQ~2{cM-6xUf7>#w^vq5b#wif0B36J{{Q@N_
t&&(n.push(e[r]),i=r);return iAKzn;9E(O
zHU-}Cg%w4y9Ke@Gqw#Ps7_=4_7gud(m(6BpB9X|WY&JU%;8RJG=C`xk_0J%RVjCgk
zE1S)hsjI7NVHm~;0F+WS9*+-BPfwdErJa%_g
Add row
',
-
- initialize: function(options){
- var self = this;
- _.bindAll(this, 'render');
- this.state = new recline.Model.ObjectState();
- this.render();
- },
-
- render: function() {
- var self = this;
- this.$el.html(this.template)
- },
-
- events : {
- "click .recline-row-add" : "addNewRow"
- },
-
- addNewRow : function(e){
- e.preventDefault()
- this.state.trigger("change")
- }
- }
- );
// ## SlickGrid Dataset View
//
// Provides a tabular view on a Dataset, based on SlickGrid.
@@ -56,7 +26,11 @@ this.recline.View = this.recline.View || {};
// state: {
// gridOptions: {
// editable: true,
-// enableAddRows: true
+// enableAddRow: true
+// // Enable support for row delete
+// enabledDelRow: true,
+// // Enable support for row Reorder
+// enableReOrderRow:true,
// ...
// },
// columnsEditor: [
@@ -70,10 +44,10 @@ my.SlickGrid = Backbone.View.extend({
initialize: function(modelEtc) {
var self = this;
this.$el.addClass('recline-slickgrid');
-
+
// Template for row delete menu , change it if you don't love
this.templates = {
- "deleterow" : 'X'
+ "deleterow" : 'X'
};
_.bindAll(this, 'render', 'onRecordChanged');
@@ -95,15 +69,16 @@ my.SlickGrid = Backbone.View.extend({
//add menu for new row , check if enableAddRow is set to true or not set
if(this.state.get("gridOptions")
- && this.state.get("gridOptions").enabledAddRow != undefined
+ && this.state.get("gridOptions").enabledAddRow != undefined
&& this.state.get("gridOptions").enabledAddRow == true ){
this.editor = new my.GridControl()
this.elSidebar = this.editor.$el
- this.listenTo(this.editor.state, 'change', function(){
- this.model.records.add(new recline.Model.Record())
+ this.listenTo(this.editor.state, 'change', function(){
+ this.model.records.add(new recline.Model.Record())
});
}
},
+
onRecordChanged: function(record) {
// Ignore if the grid is not yet drawn
if (!this.grid) {
@@ -115,7 +90,8 @@ my.SlickGrid = Backbone.View.extend({
this.grid.getData().updateItem(record, row_index);
this.grid.render();
},
- render: function() {
+
+ render: function() {
var self = this;
var options = _.extend({
enableCellNavigation: true,
@@ -127,43 +103,40 @@ my.SlickGrid = Backbone.View.extend({
// We need all columns, even the hidden ones, to show on the column picker
var columns = [];
+
// custom formatter as default one escapes html
// plus this way we distinguish between rendering/formatting and computed value (so e.g. sort still works ...)
// row = row index, cell = cell index, value = value, columnDef = column definition, dataContext = full row values
var formatter = function(row, cell, value, columnDef, dataContext) {
if(columnDef.id == "del"){
return self.templates.deleterow
- }
- var field = self.model.fields.get(columnDef.id);
+ }
+ var field = self.model.fields.get(columnDef.id);
if (field.renderer) {
return field.renderer(value, field, dataContext);
- }else {
+ } else {
return value
}
};
+
// we need to be sure that user is entering a valid input , for exemple if
// field is date type and field.format ='YY-MM-DD', we should be sure that
// user enter a correct value
- var validator = function(field){
- return function(value){
- if(field.type == "date" && isNaN(Date.parse(value))){
- return {
- valid: false,
- msg: "A date is required, check field field-date-format"};
- }else {
- return {valid: true, msg :null }
- }
- }
+ var validator = function(field) {
+ return function(value){
+ if (field.type == "date" && isNaN(Date.parse(value))){
+ return {
+ valid: false,
+ msg: "A date is required, check field field-date-format"
+ };
+ } else {
+ return {valid: true, msg :null }
+ }
+ }
};
- //Add row delete support, check if enableReOrderRow is set to true , by
- //default it is set to false
- // state: {
- // gridOptions: {
- // enableReOrderRow: true,
- // },
- if(this.state.get("gridOptions")
- && this.state.get("gridOptions").enableReOrderRow != undefined
- && this.state.get("gridOptions").enableReOrderRow == true ){
+
+ // Add column for row reorder support
+ if (this.state.get("gridOptions") && this.state.get("gridOptions").enableReOrderRow == true) {
columns.push({
id: "#",
name: "",
@@ -174,15 +147,8 @@ my.SlickGrid = Backbone.View.extend({
cssClass: "recline-cell-reorder"
})
}
- //Add row delete support, check if enabledDelRow is set to true , by
- //default it is set to false
- // state: {
- // gridOptions: {
- // enabledDelRow: true,
- // },
- if(this.state.get("gridOptions")
- && this.state.get("gridOptions").enabledDelRow != undefined
- && this.state.get("gridOptions").enabledDelRow == true ){
+ // Add column for row delete support
+ if (this.state.get("gridOptions") && this.state.get("gridOptions").enabledDelRow == true) {
columns.push({
id: 'del',
name: '',
@@ -193,6 +159,7 @@ my.SlickGrid = Backbone.View.extend({
validator:validator
})
}
+
_.each(this.model.fields.toJSON(),function(field){
var column = {
id: field.id,
@@ -254,16 +221,17 @@ my.SlickGrid = Backbone.View.extend({
}
}
columns = columns.concat(tempHiddenColumns);
+
// Transform a model object into a row
function toRow(m) {
var row = {};
- self.model.fields.each(function(field){
- var render = "";
+ self.model.fields.each(function(field) {
+ var render = "";
//when adding row from slickgrid the field value is undefined
- if(!_.isUndefined(m.getFieldValueUnrendered(field))){
- render =m.getFieldValueUnrendered(field)
- }
- row[field.id] = render
+ if(!_.isUndefined(m.getFieldValueUnrendered(field))){
+ render =m.getFieldValueUnrendered(field)
+ }
+ row[field.id] = render
});
return row;
}
@@ -304,7 +272,6 @@ my.SlickGrid = Backbone.View.extend({
this.grid.setSortColumn(column, sortAsc);
}
-
/* Row reordering support based on
https://github.com/mleibman/SlickGrid/blob/gh-pages/examples/example9-row-reordering.html
@@ -362,10 +329,8 @@ my.SlickGrid = Backbone.View.extend({
});
//register The plugin to handle row Reorder
- if(this.state.get("gridOptions")
- && this.state.get("gridOptions").enableReOrderRow != undefined
- && this.state.get("gridOptions").enableReOrderRow == true ){
- self.grid.registerPlugin(moveRowsPlugin);
+ if(this.state.get("gridOptions") && this.state.get("gridOptions").enableReOrderRow) {
+ self.grid.registerPlugin(moveRowsPlugin);
}
/* end row reordering support*/
@@ -414,7 +379,7 @@ my.SlickGrid = Backbone.View.extend({
// that handle row Reoder.
var cell =0
if(self.state.get("gridOptions")
- && self.state.get("gridOptions").enableReOrderRow != undefined
+ && self.state.get("gridOptions").enableReOrderRow != undefined
&& self.state.get("gridOptions").enableReOrderRow == true ){
cell =1
}
@@ -434,7 +399,6 @@ my.SlickGrid = Backbone.View.extend({
self.rendered = false;
}
return this;
-
},
remove: function () {
@@ -460,6 +424,36 @@ my.SlickGrid = Backbone.View.extend({
}
});
+// Add new grid Control to display a new row add menu bouton
+// It display a simple side-bar menu ,for user to add new
+// row to grid
+my.GridControl= Backbone.View.extend({
+ className: "recline-row-add",
+ // Template for row edit menu , change it if you don't love
+ template: 'Add row
',
+
+ initialize: function(options){
+ var self = this;
+ _.bindAll(this, 'render');
+ this.state = new recline.Model.ObjectState();
+ this.render();
+ },
+
+ render: function() {
+ var self = this;
+ this.$el.html(this.template)
+ },
+
+ events : {
+ "click .recline-row-add" : "addNewRow"
+ },
+
+ addNewRow : function(e){
+ e.preventDefault()
+ this.state.trigger("change")
+ }
+});
+
})(jQuery, recline.View);
/*
@@ -578,6 +572,13 @@ my.SlickGrid = Backbone.View.extend({
}
// Slick.Controls.ColumnPicker
- $.extend(true, window, { Slick:{ Controls:{ ColumnPicker:SlickColumnPicker }}});
+ $.extend(true, window, {
+ Slick: {
+ Controls: {
+ ColumnPicker: SlickColumnPicker
+ }
+ }
+ });
+
})(jQuery);
From 80bb0dd937771a72c9bb829a9a7726a6f142d28e Mon Sep 17 00:00:00 2001
From: Rufus Pollock Add row
',
-
- initialize: function(options){
- var self = this;
- _.bindAll(this, 'render');
- this.state = new recline.Model.ObjectState();
- this.render();
- },
-
- render: function() {
- var self = this;
- this.$el.html(this.template)
- },
-
- events : {
- "click .recline-row-add" : "addNewRow"
- },
-
- addNewRow : function(e){
- e.preventDefault()
- this.state.trigger("change")
- }
- }
- );
// ## SlickGrid Dataset View
//
// Provides a tabular view on a Dataset, based on SlickGrid.
@@ -3117,7 +3087,11 @@ this.recline.View = this.recline.View || {};
// state: {
// gridOptions: {
// editable: true,
-// enableAddRows: true
+// enableAddRow: true
+// // Enable support for row delete
+// enabledDelRow: true,
+// // Enable support for row Reorder
+// enableReOrderRow:true,
// ...
// },
// columnsEditor: [
@@ -3131,10 +3105,10 @@ my.SlickGrid = Backbone.View.extend({
initialize: function(modelEtc) {
var self = this;
this.$el.addClass('recline-slickgrid');
-
+
// Template for row delete menu , change it if you don't love
this.templates = {
- "deleterow" : 'X'
+ "deleterow" : 'X'
};
_.bindAll(this, 'render', 'onRecordChanged');
@@ -3156,15 +3130,16 @@ my.SlickGrid = Backbone.View.extend({
//add menu for new row , check if enableAddRow is set to true or not set
if(this.state.get("gridOptions")
- && this.state.get("gridOptions").enabledAddRow != undefined
+ && this.state.get("gridOptions").enabledAddRow != undefined
&& this.state.get("gridOptions").enabledAddRow == true ){
this.editor = new my.GridControl()
this.elSidebar = this.editor.$el
- this.listenTo(this.editor.state, 'change', function(){
- this.model.records.add(new recline.Model.Record())
+ this.listenTo(this.editor.state, 'change', function(){
+ this.model.records.add(new recline.Model.Record())
});
}
},
+
onRecordChanged: function(record) {
// Ignore if the grid is not yet drawn
if (!this.grid) {
@@ -3176,7 +3151,8 @@ my.SlickGrid = Backbone.View.extend({
this.grid.getData().updateItem(record, row_index);
this.grid.render();
},
- render: function() {
+
+ render: function() {
var self = this;
var options = _.extend({
enableCellNavigation: true,
@@ -3188,43 +3164,40 @@ my.SlickGrid = Backbone.View.extend({
// We need all columns, even the hidden ones, to show on the column picker
var columns = [];
+
// custom formatter as default one escapes html
// plus this way we distinguish between rendering/formatting and computed value (so e.g. sort still works ...)
// row = row index, cell = cell index, value = value, columnDef = column definition, dataContext = full row values
var formatter = function(row, cell, value, columnDef, dataContext) {
if(columnDef.id == "del"){
return self.templates.deleterow
- }
- var field = self.model.fields.get(columnDef.id);
+ }
+ var field = self.model.fields.get(columnDef.id);
if (field.renderer) {
return field.renderer(value, field, dataContext);
- }else {
+ } else {
return value
}
};
+
// we need to be sure that user is entering a valid input , for exemple if
// field is date type and field.format ='YY-MM-DD', we should be sure that
// user enter a correct value
- var validator = function(field){
- return function(value){
- if(field.type == "date" && isNaN(Date.parse(value))){
- return {
- valid: false,
- msg: "A date is required, check field field-date-format"};
- }else {
- return {valid: true, msg :null }
- }
- }
+ var validator = function(field) {
+ return function(value){
+ if (field.type == "date" && isNaN(Date.parse(value))){
+ return {
+ valid: false,
+ msg: "A date is required, check field field-date-format"
+ };
+ } else {
+ return {valid: true, msg :null }
+ }
+ }
};
- //Add row delete support, check if enableReOrderRow is set to true , by
- //default it is set to false
- // state: {
- // gridOptions: {
- // enableReOrderRow: true,
- // },
- if(this.state.get("gridOptions")
- && this.state.get("gridOptions").enableReOrderRow != undefined
- && this.state.get("gridOptions").enableReOrderRow == true ){
+
+ // Add column for row reorder support
+ if (this.state.get("gridOptions") && this.state.get("gridOptions").enableReOrderRow == true) {
columns.push({
id: "#",
name: "",
@@ -3235,15 +3208,8 @@ my.SlickGrid = Backbone.View.extend({
cssClass: "recline-cell-reorder"
})
}
- //Add row delete support, check if enabledDelRow is set to true , by
- //default it is set to false
- // state: {
- // gridOptions: {
- // enabledDelRow: true,
- // },
- if(this.state.get("gridOptions")
- && this.state.get("gridOptions").enabledDelRow != undefined
- && this.state.get("gridOptions").enabledDelRow == true ){
+ // Add column for row delete support
+ if (this.state.get("gridOptions") && this.state.get("gridOptions").enabledDelRow == true) {
columns.push({
id: 'del',
name: '',
@@ -3254,6 +3220,7 @@ my.SlickGrid = Backbone.View.extend({
validator:validator
})
}
+
_.each(this.model.fields.toJSON(),function(field){
var column = {
id: field.id,
@@ -3315,16 +3282,17 @@ my.SlickGrid = Backbone.View.extend({
}
}
columns = columns.concat(tempHiddenColumns);
+
// Transform a model object into a row
function toRow(m) {
var row = {};
- self.model.fields.each(function(field){
- var render = "";
+ self.model.fields.each(function(field) {
+ var render = "";
//when adding row from slickgrid the field value is undefined
- if(!_.isUndefined(m.getFieldValueUnrendered(field))){
- render =m.getFieldValueUnrendered(field)
- }
- row[field.id] = render
+ if(!_.isUndefined(m.getFieldValueUnrendered(field))){
+ render =m.getFieldValueUnrendered(field)
+ }
+ row[field.id] = render
});
return row;
}
@@ -3347,7 +3315,6 @@ my.SlickGrid = Backbone.View.extend({
rows[i] = toRow(m);
models[i] = m;
};
-
}
var data = new RowSet();
@@ -3365,70 +3332,9 @@ my.SlickGrid = Backbone.View.extend({
this.grid.setSortColumn(column, sortAsc);
}
-
- /* Row reordering support based on
- https://github.com/mleibman/SlickGrid/blob/gh-pages/examples/example9-row-reordering.html
-
- */
- self.grid.setSelectionModel(new Slick.RowSelectionModel());
-
- var moveRowsPlugin = new Slick.RowMoveManager({
- cancelEditOnDrag: true
- });
-
- moveRowsPlugin.onBeforeMoveRows.subscribe(function (e, data) {
- for (var i = 0; i < data.rows.length; i++) {
- // no point in moving before or after itself
- if (data.rows[i] == data.insertBefore || data.rows[i] == data.insertBefore - 1) {
- e.stopPropagation();
- return false;
- }
- }
- return true;
- });
-
- moveRowsPlugin.onMoveRows.subscribe(function (e, args) {
-
- var extractedRows = [], left, right;
- var rows = args.rows;
- var insertBefore = args.insertBefore;
-
- var data = self.model.records.toJSON()
- left = data.slice(0, insertBefore);
- right= data.slice(insertBefore, data.length);
-
- rows.sort(function(a,b) { return a-b; });
-
- for (var i = 0; i < rows.length; i++) {
- extractedRows.push(data[rows[i]]);
- }
-
- rows.reverse();
-
- for (var i = 0; i < rows.length; i++) {
- var row = rows[i];
- if (row < insertBefore) {
- left.splice(row, 1);
- } else {
- right.splice(row - insertBefore, 1);
- }
- }
-
- data = left.concat(extractedRows.concat(right));
- var selectedRows = [];
- for (var i = 0; i < rows.length; i++)
- selectedRows.push(left.length + i);
-
- self.model.records.reset(data)
-
- });
- //register The plugin to handle row Reorder
- if(this.state.get("gridOptions")
- && this.state.get("gridOptions").enableReOrderRow != undefined
- && this.state.get("gridOptions").enableReOrderRow == true ){
- self.grid.registerPlugin(moveRowsPlugin);
+ if (this.state.get("gridOptions") && this.state.get("gridOptions").enableReOrderRow) {
+ this._setupRowReordering();
}
- /* end row reordering support*/
this._slickHandler.subscribe(this.grid.onSort, function(e, args){
var order = (args.sortAsc) ? 'asc':'desc';
@@ -3475,7 +3381,7 @@ my.SlickGrid = Backbone.View.extend({
// that handle row Reoder.
var cell =0
if(self.state.get("gridOptions")
- && self.state.get("gridOptions").enableReOrderRow != undefined
+ && self.state.get("gridOptions").enableReOrderRow != undefined
&& self.state.get("gridOptions").enableReOrderRow == true ){
cell =1
}
@@ -3495,7 +3401,67 @@ my.SlickGrid = Backbone.View.extend({
self.rendered = false;
}
return this;
+ },
+ // Row reordering support based on
+ // https://github.com/mleibman/SlickGrid/blob/gh-pages/examples/example9-row-reordering.html
+ _setupRowReordering: function() {
+ var self = this;
+ self.grid.setSelectionModel(new Slick.RowSelectionModel());
+
+ var moveRowsPlugin = new Slick.RowMoveManager({
+ cancelEditOnDrag: true
+ });
+
+ moveRowsPlugin.onBeforeMoveRows.subscribe(function (e, data) {
+ for (var i = 0; i < data.rows.length; i++) {
+ // no point in moving before or after itself
+ if (data.rows[i] == data.insertBefore || data.rows[i] == data.insertBefore - 1) {
+ e.stopPropagation();
+ return false;
+ }
+ }
+ return true;
+ });
+
+ moveRowsPlugin.onMoveRows.subscribe(function (e, args) {
+ var extractedRows = [], left, right;
+ var rows = args.rows;
+ var insertBefore = args.insertBefore;
+
+ var data = self.model.records.toJSON()
+ left = data.slice(0, insertBefore);
+ right= data.slice(insertBefore, data.length);
+
+ rows.sort(function(a,b) { return a-b; });
+
+ for (var i = 0; i < rows.length; i++) {
+ extractedRows.push(data[rows[i]]);
+ }
+
+ rows.reverse();
+
+ for (var i = 0; i < rows.length; i++) {
+ var row = rows[i];
+ if (row < insertBefore) {
+ left.splice(row, 1);
+ } else {
+ right.splice(row - insertBefore, 1);
+ }
+ }
+
+ data = left.concat(extractedRows.concat(right));
+ var selectedRows = [];
+ for (var i = 0; i < rows.length; i++)
+ selectedRows.push(left.length + i);
+
+ self.model.records.reset(data)
+
+ });
+ //register The plugin to handle row Reorder
+ if(this.state.get("gridOptions") && this.state.get("gridOptions").enableReOrderRow) {
+ self.grid.registerPlugin(moveRowsPlugin);
+ }
},
remove: function () {
@@ -3521,6 +3487,36 @@ my.SlickGrid = Backbone.View.extend({
}
});
+// Add new grid Control to display a new row add menu bouton
+// It display a simple side-bar menu ,for user to add new
+// row to grid
+my.GridControl= Backbone.View.extend({
+ className: "recline-row-add",
+ // Template for row edit menu , change it if you don't love
+ template: 'Add row
',
+
+ initialize: function(options){
+ var self = this;
+ _.bindAll(this, 'render');
+ this.state = new recline.Model.ObjectState();
+ this.render();
+ },
+
+ render: function() {
+ var self = this;
+ this.$el.html(this.template)
+ },
+
+ events : {
+ "click .recline-row-add" : "addNewRow"
+ },
+
+ addNewRow : function(e){
+ e.preventDefault()
+ this.state.trigger("change")
+ }
+});
+
})(jQuery, recline.View);
/*
@@ -3639,7 +3635,14 @@ my.SlickGrid = Backbone.View.extend({
}
// Slick.Controls.ColumnPicker
- $.extend(true, window, { Slick:{ Controls:{ ColumnPicker:SlickColumnPicker }}});
+ $.extend(true, window, {
+ Slick: {
+ Controls: {
+ ColumnPicker: SlickColumnPicker
+ }
+ }
+ });
+
})(jQuery);
/*jshint multistr:true */
From 2d709cbc393195c0ef7cef517766e237504b8fab Mon Sep 17 00:00:00 2001
From: aliounedia
';
+ var mapUrl = "http://otile{s}-s.mqcdn.com/tiles/1.0.0/osm/{z}/{x}/{y}.png";
+ var osmAttribution = 'Map data © 2011 OpenStreetMap contributors, Tiles Courtesy of MapQuest
';
var bg = new L.TileLayer(mapUrl, {maxZoom: 18, attribution: osmAttribution ,subdomains: '1234'});
this.map.addLayer(bg);
From 346ecb6d5f59f2ef05c62c17f51137d0e89a5341 Mon Sep 17 00:00:00 2001
From: Matt Fullerton
- Documentation » - Tutorials » - Demos » + Documentation » + Tutorials » + Demos »