2024-10-10
This commit is contained in:
884
web/bsadmin/assets/js/lib/jsgrid/db.js
Normal file
884
web/bsadmin/assets/js/lib/jsgrid/db.js
Normal file
@@ -0,0 +1,884 @@
|
||||
(function() {
|
||||
|
||||
var db = {
|
||||
|
||||
loadData: function(filter) {
|
||||
return $.grep(this.clients, function(client) {
|
||||
return (!filter.Name || client.Name.indexOf(filter.Name) > -1)
|
||||
&& (filter.Age === undefined || client.Age === filter.Age)
|
||||
&& (!filter.Address || client.Address.indexOf(filter.Address) > -1)
|
||||
&& (!filter.Country || client.Country === filter.Country)
|
||||
&& (filter.Married === undefined || client.Married === filter.Married);
|
||||
});
|
||||
},
|
||||
|
||||
insertItem: function(insertingClient) {
|
||||
this.clients.push(insertingClient);
|
||||
},
|
||||
|
||||
updateItem: function(updatingClient) { },
|
||||
|
||||
deleteItem: function(deletingClient) {
|
||||
var clientIndex = $.inArray(deletingClient, this.clients);
|
||||
this.clients.splice(clientIndex, 1);
|
||||
}
|
||||
|
||||
};
|
||||
|
||||
window.db = db;
|
||||
|
||||
|
||||
db.countries = [
|
||||
{ Name: "", Id: 0 },
|
||||
{ Name: "United States", Id: 1 },
|
||||
{ Name: "Canada", Id: 2 },
|
||||
{ Name: "United Kingdom", Id: 3 },
|
||||
{ Name: "France", Id: 4 },
|
||||
{ Name: "Brazil", Id: 5 },
|
||||
{ Name: "China", Id: 6 },
|
||||
{ Name: "Russia", Id: 7 }
|
||||
];
|
||||
|
||||
db.clients = [
|
||||
{
|
||||
"Name": "Otto Clay",
|
||||
"Age": 61,
|
||||
"Country": 6,
|
||||
"Address": "Ap #897-1459 Quam Avenue",
|
||||
"Married": false
|
||||
},
|
||||
{
|
||||
"Name": "Connor Johnston",
|
||||
"Age": 73,
|
||||
"Country": 7,
|
||||
"Address": "Ap #370-4647 Dis Av.",
|
||||
"Married": false
|
||||
},
|
||||
{
|
||||
"Name": "Lacey Hess",
|
||||
"Age": 29,
|
||||
"Country": 7,
|
||||
"Address": "Ap #365-8835 Integer St.",
|
||||
"Married": false
|
||||
},
|
||||
{
|
||||
"Name": "Timothy Henson",
|
||||
"Age": 78,
|
||||
"Country": 1,
|
||||
"Address": "911-5143 Luctus Ave",
|
||||
"Married": false
|
||||
},
|
||||
{
|
||||
"Name": "Ramona Benton",
|
||||
"Age": 43,
|
||||
"Country": 5,
|
||||
"Address": "Ap #614-689 Vehicula Street",
|
||||
"Married": true
|
||||
},
|
||||
{
|
||||
"Name": "Ezra Tillman",
|
||||
"Age": 51,
|
||||
"Country": 1,
|
||||
"Address": "P.O. Box 738, 7583 Quisque St.",
|
||||
"Married": true
|
||||
},
|
||||
{
|
||||
"Name": "Dante Carter",
|
||||
"Age": 59,
|
||||
"Country": 1,
|
||||
"Address": "P.O. Box 976, 6316 Lorem, St.",
|
||||
"Married": false
|
||||
},
|
||||
{
|
||||
"Name": "Christopher Mcclure",
|
||||
"Age": 58,
|
||||
"Country": 1,
|
||||
"Address": "847-4303 Dictum Av.",
|
||||
"Married": true
|
||||
},
|
||||
{
|
||||
"Name": "Ruby Rocha",
|
||||
"Age": 62,
|
||||
"Country": 2,
|
||||
"Address": "5212 Sagittis Ave",
|
||||
"Married": false
|
||||
},
|
||||
{
|
||||
"Name": "Imelda Hardin",
|
||||
"Age": 39,
|
||||
"Country": 5,
|
||||
"Address": "719-7009 Auctor Av.",
|
||||
"Married": false
|
||||
},
|
||||
{
|
||||
"Name": "Jonah Johns",
|
||||
"Age": 28,
|
||||
"Country": 5,
|
||||
"Address": "P.O. Box 939, 9310 A Ave",
|
||||
"Married": false
|
||||
},
|
||||
{
|
||||
"Name": "Herman Rosa",
|
||||
"Age": 49,
|
||||
"Country": 7,
|
||||
"Address": "718-7162 Molestie Av.",
|
||||
"Married": true
|
||||
},
|
||||
{
|
||||
"Name": "Arthur Gay",
|
||||
"Age": 20,
|
||||
"Country": 7,
|
||||
"Address": "5497 Neque Street",
|
||||
"Married": false
|
||||
},
|
||||
{
|
||||
"Name": "Xena Wilkerson",
|
||||
"Age": 63,
|
||||
"Country": 1,
|
||||
"Address": "Ap #303-6974 Proin Street",
|
||||
"Married": true
|
||||
},
|
||||
{
|
||||
"Name": "Lilah Atkins",
|
||||
"Age": 33,
|
||||
"Country": 5,
|
||||
"Address": "622-8602 Gravida Ave",
|
||||
"Married": true
|
||||
},
|
||||
{
|
||||
"Name": "Malik Shepard",
|
||||
"Age": 59,
|
||||
"Country": 1,
|
||||
"Address": "967-5176 Tincidunt Av.",
|
||||
"Married": false
|
||||
},
|
||||
{
|
||||
"Name": "Keely Silva",
|
||||
"Age": 24,
|
||||
"Country": 1,
|
||||
"Address": "P.O. Box 153, 8995 Praesent Ave",
|
||||
"Married": false
|
||||
},
|
||||
{
|
||||
"Name": "Hunter Pate",
|
||||
"Age": 73,
|
||||
"Country": 7,
|
||||
"Address": "P.O. Box 771, 7599 Ante, Road",
|
||||
"Married": false
|
||||
},
|
||||
{
|
||||
"Name": "Mikayla Roach",
|
||||
"Age": 55,
|
||||
"Country": 5,
|
||||
"Address": "Ap #438-9886 Donec Rd.",
|
||||
"Married": true
|
||||
},
|
||||
{
|
||||
"Name": "Upton Joseph",
|
||||
"Age": 48,
|
||||
"Country": 4,
|
||||
"Address": "Ap #896-7592 Habitant St.",
|
||||
"Married": true
|
||||
},
|
||||
{
|
||||
"Name": "Jeanette Pate",
|
||||
"Age": 59,
|
||||
"Country": 2,
|
||||
"Address": "P.O. Box 177, 7584 Amet, St.",
|
||||
"Married": false
|
||||
},
|
||||
{
|
||||
"Name": "Kaden Hernandez",
|
||||
"Age": 79,
|
||||
"Country": 3,
|
||||
"Address": "366 Ut St.",
|
||||
"Married": true
|
||||
},
|
||||
{
|
||||
"Name": "Kenyon Stevens",
|
||||
"Age": 20,
|
||||
"Country": 3,
|
||||
"Address": "P.O. Box 704, 4580 Gravida Rd.",
|
||||
"Married": false
|
||||
},
|
||||
{
|
||||
"Name": "Jerome Harper",
|
||||
"Age": 31,
|
||||
"Country": 5,
|
||||
"Address": "2464 Porttitor Road",
|
||||
"Married": false
|
||||
},
|
||||
{
|
||||
"Name": "Jelani Patel",
|
||||
"Age": 36,
|
||||
"Country": 2,
|
||||
"Address": "P.O. Box 541, 5805 Nec Av.",
|
||||
"Married": true
|
||||
},
|
||||
{
|
||||
"Name": "Keaton Oconnor",
|
||||
"Age": 21,
|
||||
"Country": 1,
|
||||
"Address": "Ap #657-1093 Nec, Street",
|
||||
"Married": false
|
||||
},
|
||||
{
|
||||
"Name": "Bree Johnston",
|
||||
"Age": 31,
|
||||
"Country": 2,
|
||||
"Address": "372-5942 Vulputate Avenue",
|
||||
"Married": false
|
||||
},
|
||||
{
|
||||
"Name": "Maisie Hodges",
|
||||
"Age": 70,
|
||||
"Country": 7,
|
||||
"Address": "P.O. Box 445, 3880 Odio, Rd.",
|
||||
"Married": false
|
||||
},
|
||||
{
|
||||
"Name": "Kuame Calhoun",
|
||||
"Age": 39,
|
||||
"Country": 2,
|
||||
"Address": "P.O. Box 609, 4105 Rutrum St.",
|
||||
"Married": true
|
||||
},
|
||||
{
|
||||
"Name": "Carlos Cameron",
|
||||
"Age": 38,
|
||||
"Country": 5,
|
||||
"Address": "Ap #215-5386 A, Avenue",
|
||||
"Married": false
|
||||
},
|
||||
{
|
||||
"Name": "Fulton Parsons",
|
||||
"Age": 25,
|
||||
"Country": 7,
|
||||
"Address": "P.O. Box 523, 3705 Sed Rd.",
|
||||
"Married": false
|
||||
},
|
||||
{
|
||||
"Name": "Wallace Christian",
|
||||
"Age": 43,
|
||||
"Country": 3,
|
||||
"Address": "416-8816 Mauris Avenue",
|
||||
"Married": true
|
||||
},
|
||||
{
|
||||
"Name": "Caryn Maldonado",
|
||||
"Age": 40,
|
||||
"Country": 1,
|
||||
"Address": "108-282 Nonummy Ave",
|
||||
"Married": false
|
||||
},
|
||||
{
|
||||
"Name": "Whilemina Frank",
|
||||
"Age": 20,
|
||||
"Country": 7,
|
||||
"Address": "P.O. Box 681, 3938 Egestas. Av.",
|
||||
"Married": true
|
||||
},
|
||||
{
|
||||
"Name": "Emery Moon",
|
||||
"Age": 41,
|
||||
"Country": 4,
|
||||
"Address": "Ap #717-8556 Non Road",
|
||||
"Married": true
|
||||
},
|
||||
{
|
||||
"Name": "Price Watkins",
|
||||
"Age": 35,
|
||||
"Country": 4,
|
||||
"Address": "832-7810 Nunc Rd.",
|
||||
"Married": false
|
||||
},
|
||||
{
|
||||
"Name": "Lydia Castillo",
|
||||
"Age": 59,
|
||||
"Country": 7,
|
||||
"Address": "5280 Placerat, Ave",
|
||||
"Married": true
|
||||
},
|
||||
{
|
||||
"Name": "Lawrence Conway",
|
||||
"Age": 53,
|
||||
"Country": 1,
|
||||
"Address": "Ap #452-2808 Imperdiet St.",
|
||||
"Married": false
|
||||
},
|
||||
{
|
||||
"Name": "Kalia Nicholson",
|
||||
"Age": 67,
|
||||
"Country": 5,
|
||||
"Address": "P.O. Box 871, 3023 Tellus Road",
|
||||
"Married": true
|
||||
},
|
||||
{
|
||||
"Name": "Brielle Baxter",
|
||||
"Age": 45,
|
||||
"Country": 3,
|
||||
"Address": "Ap #822-9526 Ut, Road",
|
||||
"Married": true
|
||||
},
|
||||
{
|
||||
"Name": "Valentine Brady",
|
||||
"Age": 72,
|
||||
"Country": 7,
|
||||
"Address": "8014 Enim. Road",
|
||||
"Married": true
|
||||
},
|
||||
{
|
||||
"Name": "Rebecca Gardner",
|
||||
"Age": 57,
|
||||
"Country": 4,
|
||||
"Address": "8655 Arcu. Road",
|
||||
"Married": true
|
||||
},
|
||||
{
|
||||
"Name": "Vladimir Tate",
|
||||
"Age": 26,
|
||||
"Country": 1,
|
||||
"Address": "130-1291 Non, Rd.",
|
||||
"Married": true
|
||||
},
|
||||
{
|
||||
"Name": "Vernon Hays",
|
||||
"Age": 56,
|
||||
"Country": 4,
|
||||
"Address": "964-5552 In Rd.",
|
||||
"Married": true
|
||||
},
|
||||
{
|
||||
"Name": "Allegra Hull",
|
||||
"Age": 22,
|
||||
"Country": 4,
|
||||
"Address": "245-8891 Donec St.",
|
||||
"Married": true
|
||||
},
|
||||
{
|
||||
"Name": "Hu Hendrix",
|
||||
"Age": 65,
|
||||
"Country": 7,
|
||||
"Address": "428-5404 Tempus Ave",
|
||||
"Married": true
|
||||
},
|
||||
{
|
||||
"Name": "Kenyon Battle",
|
||||
"Age": 32,
|
||||
"Country": 2,
|
||||
"Address": "921-6804 Lectus St.",
|
||||
"Married": false
|
||||
},
|
||||
{
|
||||
"Name": "Gloria Nielsen",
|
||||
"Age": 24,
|
||||
"Country": 4,
|
||||
"Address": "Ap #275-4345 Lorem, Street",
|
||||
"Married": true
|
||||
},
|
||||
{
|
||||
"Name": "Illiana Kidd",
|
||||
"Age": 59,
|
||||
"Country": 2,
|
||||
"Address": "7618 Lacus. Av.",
|
||||
"Married": false
|
||||
},
|
||||
{
|
||||
"Name": "Adria Todd",
|
||||
"Age": 68,
|
||||
"Country": 6,
|
||||
"Address": "1889 Tincidunt Road",
|
||||
"Married": false
|
||||
},
|
||||
{
|
||||
"Name": "Kirsten Mayo",
|
||||
"Age": 71,
|
||||
"Country": 1,
|
||||
"Address": "100-8640 Orci, Avenue",
|
||||
"Married": false
|
||||
},
|
||||
{
|
||||
"Name": "Willa Hobbs",
|
||||
"Age": 60,
|
||||
"Country": 6,
|
||||
"Address": "P.O. Box 323, 158 Tristique St.",
|
||||
"Married": false
|
||||
},
|
||||
{
|
||||
"Name": "Alexis Clements",
|
||||
"Age": 69,
|
||||
"Country": 5,
|
||||
"Address": "P.O. Box 176, 5107 Proin Rd.",
|
||||
"Married": false
|
||||
},
|
||||
{
|
||||
"Name": "Akeem Conrad",
|
||||
"Age": 60,
|
||||
"Country": 2,
|
||||
"Address": "282-495 Sed Ave",
|
||||
"Married": true
|
||||
},
|
||||
{
|
||||
"Name": "Montana Silva",
|
||||
"Age": 79,
|
||||
"Country": 6,
|
||||
"Address": "P.O. Box 120, 9766 Consectetuer St.",
|
||||
"Married": false
|
||||
},
|
||||
{
|
||||
"Name": "Kaseem Hensley",
|
||||
"Age": 77,
|
||||
"Country": 6,
|
||||
"Address": "Ap #510-8903 Mauris. Av.",
|
||||
"Married": true
|
||||
},
|
||||
{
|
||||
"Name": "Christopher Morton",
|
||||
"Age": 35,
|
||||
"Country": 5,
|
||||
"Address": "P.O. Box 234, 3651 Sodales Avenue",
|
||||
"Married": false
|
||||
},
|
||||
{
|
||||
"Name": "Wade Fernandez",
|
||||
"Age": 49,
|
||||
"Country": 6,
|
||||
"Address": "740-5059 Dolor. Road",
|
||||
"Married": true
|
||||
},
|
||||
{
|
||||
"Name": "Illiana Kirby",
|
||||
"Age": 31,
|
||||
"Country": 2,
|
||||
"Address": "527-3553 Mi Ave",
|
||||
"Married": false
|
||||
},
|
||||
{
|
||||
"Name": "Kimberley Hurley",
|
||||
"Age": 65,
|
||||
"Country": 5,
|
||||
"Address": "P.O. Box 637, 9915 Dictum St.",
|
||||
"Married": false
|
||||
},
|
||||
{
|
||||
"Name": "Arthur Olsen",
|
||||
"Age": 74,
|
||||
"Country": 5,
|
||||
"Address": "887-5080 Eget St.",
|
||||
"Married": false
|
||||
},
|
||||
{
|
||||
"Name": "Brody Potts",
|
||||
"Age": 59,
|
||||
"Country": 2,
|
||||
"Address": "Ap #577-7690 Sem Road",
|
||||
"Married": false
|
||||
},
|
||||
{
|
||||
"Name": "Dillon Ford",
|
||||
"Age": 60,
|
||||
"Country": 1,
|
||||
"Address": "Ap #885-9289 A, Av.",
|
||||
"Married": true
|
||||
},
|
||||
{
|
||||
"Name": "Hannah Juarez",
|
||||
"Age": 61,
|
||||
"Country": 2,
|
||||
"Address": "4744 Sapien, Rd.",
|
||||
"Married": true
|
||||
},
|
||||
{
|
||||
"Name": "Vincent Shaffer",
|
||||
"Age": 25,
|
||||
"Country": 2,
|
||||
"Address": "9203 Nunc St.",
|
||||
"Married": true
|
||||
},
|
||||
{
|
||||
"Name": "George Holt",
|
||||
"Age": 27,
|
||||
"Country": 6,
|
||||
"Address": "4162 Cras Rd.",
|
||||
"Married": false
|
||||
},
|
||||
{
|
||||
"Name": "Tobias Bartlett",
|
||||
"Age": 74,
|
||||
"Country": 4,
|
||||
"Address": "792-6145 Mauris St.",
|
||||
"Married": true
|
||||
},
|
||||
{
|
||||
"Name": "Xavier Hooper",
|
||||
"Age": 35,
|
||||
"Country": 1,
|
||||
"Address": "879-5026 Interdum. Rd.",
|
||||
"Married": false
|
||||
},
|
||||
{
|
||||
"Name": "Declan Dorsey",
|
||||
"Age": 31,
|
||||
"Country": 2,
|
||||
"Address": "Ap #926-4171 Aenean Road",
|
||||
"Married": true
|
||||
},
|
||||
{
|
||||
"Name": "Clementine Tran",
|
||||
"Age": 43,
|
||||
"Country": 4,
|
||||
"Address": "P.O. Box 176, 9865 Eu Rd.",
|
||||
"Married": true
|
||||
},
|
||||
{
|
||||
"Name": "Pamela Moody",
|
||||
"Age": 55,
|
||||
"Country": 6,
|
||||
"Address": "622-6233 Luctus Rd.",
|
||||
"Married": true
|
||||
},
|
||||
{
|
||||
"Name": "Julie Leon",
|
||||
"Age": 43,
|
||||
"Country": 6,
|
||||
"Address": "Ap #915-6782 Sem Av.",
|
||||
"Married": true
|
||||
},
|
||||
{
|
||||
"Name": "Shana Nolan",
|
||||
"Age": 79,
|
||||
"Country": 5,
|
||||
"Address": "P.O. Box 603, 899 Eu St.",
|
||||
"Married": false
|
||||
},
|
||||
{
|
||||
"Name": "Vaughan Moody",
|
||||
"Age": 37,
|
||||
"Country": 5,
|
||||
"Address": "880 Erat Rd.",
|
||||
"Married": false
|
||||
},
|
||||
{
|
||||
"Name": "Randall Reeves",
|
||||
"Age": 44,
|
||||
"Country": 3,
|
||||
"Address": "1819 Non Street",
|
||||
"Married": false
|
||||
},
|
||||
{
|
||||
"Name": "Dominic Raymond",
|
||||
"Age": 68,
|
||||
"Country": 1,
|
||||
"Address": "Ap #689-4874 Nisi Rd.",
|
||||
"Married": true
|
||||
},
|
||||
{
|
||||
"Name": "Lev Pugh",
|
||||
"Age": 69,
|
||||
"Country": 5,
|
||||
"Address": "Ap #433-6844 Auctor Avenue",
|
||||
"Married": true
|
||||
},
|
||||
{
|
||||
"Name": "Desiree Hughes",
|
||||
"Age": 80,
|
||||
"Country": 4,
|
||||
"Address": "605-6645 Fermentum Avenue",
|
||||
"Married": true
|
||||
},
|
||||
{
|
||||
"Name": "Idona Oneill",
|
||||
"Age": 23,
|
||||
"Country": 7,
|
||||
"Address": "751-8148 Aliquam Avenue",
|
||||
"Married": true
|
||||
},
|
||||
{
|
||||
"Name": "Lani Mayo",
|
||||
"Age": 76,
|
||||
"Country": 1,
|
||||
"Address": "635-2704 Tristique St.",
|
||||
"Married": true
|
||||
},
|
||||
{
|
||||
"Name": "Cathleen Bonner",
|
||||
"Age": 40,
|
||||
"Country": 1,
|
||||
"Address": "916-2910 Dolor Av.",
|
||||
"Married": false
|
||||
},
|
||||
{
|
||||
"Name": "Sydney Murray",
|
||||
"Age": 44,
|
||||
"Country": 5,
|
||||
"Address": "835-2330 Fringilla St.",
|
||||
"Married": false
|
||||
},
|
||||
{
|
||||
"Name": "Brenna Rodriguez",
|
||||
"Age": 77,
|
||||
"Country": 6,
|
||||
"Address": "3687 Imperdiet Av.",
|
||||
"Married": true
|
||||
},
|
||||
{
|
||||
"Name": "Alfreda Mcdaniel",
|
||||
"Age": 38,
|
||||
"Country": 7,
|
||||
"Address": "745-8221 Aliquet Rd.",
|
||||
"Married": true
|
||||
},
|
||||
{
|
||||
"Name": "Zachery Atkins",
|
||||
"Age": 30,
|
||||
"Country": 1,
|
||||
"Address": "549-2208 Auctor. Road",
|
||||
"Married": true
|
||||
},
|
||||
{
|
||||
"Name": "Amelia Rich",
|
||||
"Age": 56,
|
||||
"Country": 4,
|
||||
"Address": "P.O. Box 734, 4717 Nunc Rd.",
|
||||
"Married": false
|
||||
},
|
||||
{
|
||||
"Name": "Kiayada Witt",
|
||||
"Age": 62,
|
||||
"Country": 3,
|
||||
"Address": "Ap #735-3421 Malesuada Avenue",
|
||||
"Married": false
|
||||
},
|
||||
{
|
||||
"Name": "Lysandra Pierce",
|
||||
"Age": 36,
|
||||
"Country": 1,
|
||||
"Address": "Ap #146-2835 Curabitur St.",
|
||||
"Married": true
|
||||
},
|
||||
{
|
||||
"Name": "Cara Rios",
|
||||
"Age": 58,
|
||||
"Country": 4,
|
||||
"Address": "Ap #562-7811 Quam. Ave",
|
||||
"Married": true
|
||||
},
|
||||
{
|
||||
"Name": "Austin Andrews",
|
||||
"Age": 55,
|
||||
"Country": 7,
|
||||
"Address": "P.O. Box 274, 5505 Sociis Rd.",
|
||||
"Married": false
|
||||
},
|
||||
{
|
||||
"Name": "Lillian Peterson",
|
||||
"Age": 39,
|
||||
"Country": 2,
|
||||
"Address": "6212 A Avenue",
|
||||
"Married": false
|
||||
},
|
||||
{
|
||||
"Name": "Adria Beach",
|
||||
"Age": 29,
|
||||
"Country": 2,
|
||||
"Address": "P.O. Box 183, 2717 Nunc Avenue",
|
||||
"Married": true
|
||||
},
|
||||
{
|
||||
"Name": "Oleg Durham",
|
||||
"Age": 80,
|
||||
"Country": 4,
|
||||
"Address": "931-3208 Nunc Rd.",
|
||||
"Married": false
|
||||
},
|
||||
{
|
||||
"Name": "Casey Reese",
|
||||
"Age": 60,
|
||||
"Country": 4,
|
||||
"Address": "383-3675 Ultrices, St.",
|
||||
"Married": false
|
||||
},
|
||||
{
|
||||
"Name": "Kane Burnett",
|
||||
"Age": 80,
|
||||
"Country": 1,
|
||||
"Address": "759-8212 Dolor. Ave",
|
||||
"Married": false
|
||||
},
|
||||
{
|
||||
"Name": "Stewart Wilson",
|
||||
"Age": 46,
|
||||
"Country": 7,
|
||||
"Address": "718-7845 Sagittis. Av.",
|
||||
"Married": false
|
||||
},
|
||||
{
|
||||
"Name": "Charity Holcomb",
|
||||
"Age": 31,
|
||||
"Country": 6,
|
||||
"Address": "641-7892 Enim. Ave",
|
||||
"Married": false
|
||||
},
|
||||
{
|
||||
"Name": "Kyra Cummings",
|
||||
"Age": 43,
|
||||
"Country": 4,
|
||||
"Address": "P.O. Box 702, 6621 Mus. Av.",
|
||||
"Married": false
|
||||
},
|
||||
{
|
||||
"Name": "Stuart Wallace",
|
||||
"Age": 25,
|
||||
"Country": 7,
|
||||
"Address": "648-4990 Sed Rd.",
|
||||
"Married": true
|
||||
},
|
||||
{
|
||||
"Name": "Carter Clarke",
|
||||
"Age": 59,
|
||||
"Country": 6,
|
||||
"Address": "Ap #547-2921 A Street",
|
||||
"Married": false
|
||||
}
|
||||
];
|
||||
|
||||
db.users = [
|
||||
{
|
||||
"ID": "x",
|
||||
"Account": "A758A693-0302-03D1-AE53-EEFE22855556",
|
||||
"Name": "Carson Kelley",
|
||||
"RegisterDate": "2002-04-20T22:55:52-07:00"
|
||||
},
|
||||
{
|
||||
"Account": "D89FF524-1233-0CE7-C9E1-56EFF017A321",
|
||||
"Name": "Prescott Griffin",
|
||||
"RegisterDate": "2011-02-22T05:59:55-08:00"
|
||||
},
|
||||
{
|
||||
"Account": "06FAAD9A-5114-08F6-D60C-961B2528B4F0",
|
||||
"Name": "Amir Saunders",
|
||||
"RegisterDate": "2014-08-13T09:17:49-07:00"
|
||||
},
|
||||
{
|
||||
"Account": "EED7653D-7DD9-A722-64A8-36A55ECDBE77",
|
||||
"Name": "Derek Thornton",
|
||||
"RegisterDate": "2012-02-27T01:31:07-08:00"
|
||||
},
|
||||
{
|
||||
"Account": "2A2E6D40-FEBD-C643-A751-9AB4CAF1E2F6",
|
||||
"Name": "Fletcher Romero",
|
||||
"RegisterDate": "2010-06-25T15:49:54-07:00"
|
||||
},
|
||||
{
|
||||
"Account": "3978F8FA-DFF0-DA0E-0A5D-EB9D281A3286",
|
||||
"Name": "Thaddeus Stein",
|
||||
"RegisterDate": "2013-11-10T07:29:41-08:00"
|
||||
},
|
||||
{
|
||||
"Account": "658DBF5A-176E-569A-9273-74FB5F69FA42",
|
||||
"Name": "Nash Knapp",
|
||||
"RegisterDate": "2005-06-24T09:11:19-07:00"
|
||||
},
|
||||
{
|
||||
"Account": "76D2EE4B-7A73-1212-F6F2-957EF8C1F907",
|
||||
"Name": "Quamar Vega",
|
||||
"RegisterDate": "2011-04-13T20:06:29-07:00"
|
||||
},
|
||||
{
|
||||
"Account": "00E46809-A595-CE82-C5B4-D1CAEB7E3E58",
|
||||
"Name": "Philip Galloway",
|
||||
"RegisterDate": "2008-08-21T18:59:38-07:00"
|
||||
},
|
||||
{
|
||||
"Account": "C196781C-DDCC-AF83-DDC2-CA3E851A47A0",
|
||||
"Name": "Mason French",
|
||||
"RegisterDate": "2000-11-15T00:38:37-08:00"
|
||||
},
|
||||
{
|
||||
"Account": "5911F201-818A-B393-5888-13157CE0D63F",
|
||||
"Name": "Ross Cortez",
|
||||
"RegisterDate": "2010-05-27T17:35:32-07:00"
|
||||
},
|
||||
{
|
||||
"Account": "B8BB78F9-E1A1-A956-086F-E12B6FE168B6",
|
||||
"Name": "Logan King",
|
||||
"RegisterDate": "2003-07-08T16:58:06-07:00"
|
||||
},
|
||||
{
|
||||
"Account": "06F636C3-9599-1A2D-5FD5-86B24ADDE626",
|
||||
"Name": "Cedric Leblanc",
|
||||
"RegisterDate": "2011-06-30T14:30:10-07:00"
|
||||
},
|
||||
{
|
||||
"Account": "FE880CDD-F6E7-75CB-743C-64C6DE192412",
|
||||
"Name": "Simon Sullivan",
|
||||
"RegisterDate": "2013-06-11T16:35:07-07:00"
|
||||
},
|
||||
{
|
||||
"Account": "BBEDD673-E2C1-4872-A5D3-C4EBD4BE0A12",
|
||||
"Name": "Jamal West",
|
||||
"RegisterDate": "2001-03-16T20:18:29-08:00"
|
||||
},
|
||||
{
|
||||
"Account": "19BC22FA-C52E-0CC6-9552-10365C755FAC",
|
||||
"Name": "Hector Morales",
|
||||
"RegisterDate": "2012-11-01T01:56:34-07:00"
|
||||
},
|
||||
{
|
||||
"Account": "A8292214-2C13-5989-3419-6B83DD637D6C",
|
||||
"Name": "Herrod Hart",
|
||||
"RegisterDate": "2008-03-13T19:21:04-07:00"
|
||||
},
|
||||
{
|
||||
"Account": "0285564B-F447-0E7F-EAA1-7FB8F9C453C8",
|
||||
"Name": "Clark Maxwell",
|
||||
"RegisterDate": "2004-08-05T08:22:24-07:00"
|
||||
},
|
||||
{
|
||||
"Account": "EA78F076-4F6E-4228-268C-1F51272498AE",
|
||||
"Name": "Reuben Walter",
|
||||
"RegisterDate": "2011-01-23T01:55:59-08:00"
|
||||
},
|
||||
{
|
||||
"Account": "6A88C194-EA21-426F-4FE2-F2AE33F51793",
|
||||
"Name": "Ira Ingram",
|
||||
"RegisterDate": "2008-08-15T05:57:46-07:00"
|
||||
},
|
||||
{
|
||||
"Account": "4275E873-439C-AD26-56B3-8715E336508E",
|
||||
"Name": "Damian Morrow",
|
||||
"RegisterDate": "2015-09-13T01:50:55-07:00"
|
||||
},
|
||||
{
|
||||
"Account": "A0D733C4-9070-B8D6-4387-D44F0BA515BE",
|
||||
"Name": "Macon Farrell",
|
||||
"RegisterDate": "2011-03-14T05:41:40-07:00"
|
||||
},
|
||||
{
|
||||
"Account": "B3683DE8-C2FA-7CA0-A8A6-8FA7E954F90A",
|
||||
"Name": "Joel Galloway",
|
||||
"RegisterDate": "2003-02-03T04:19:01-08:00"
|
||||
},
|
||||
{
|
||||
"Account": "01D95A8E-91BC-2050-F5D0-4437AAFFD11F",
|
||||
"Name": "Rigel Horton",
|
||||
"RegisterDate": "2015-06-20T11:53:11-07:00"
|
||||
},
|
||||
{
|
||||
"Account": "F0D12CC0-31AC-A82E-FD73-EEEFDBD21A36",
|
||||
"Name": "Sylvester Gaines",
|
||||
"RegisterDate": "2004-03-12T09:57:13-08:00"
|
||||
},
|
||||
{
|
||||
"Account": "874FCC49-9A61-71BC-2F4E-2CE88348AD7B",
|
||||
"Name": "Abbot Mckay",
|
||||
"RegisterDate": "2008-12-26T20:42:57-08:00"
|
||||
},
|
||||
{
|
||||
"Account": "B8DA1912-20A0-FB6E-0031-5F88FD63EF90",
|
||||
"Name": "Solomon Green",
|
||||
"RegisterDate": "2013-09-04T01:44:47-07:00"
|
||||
}
|
||||
];
|
||||
|
||||
}());
|
||||
@@ -0,0 +1,97 @@
|
||||
(function(jsGrid, $, undefined) {
|
||||
|
||||
var Field = jsGrid.Field;
|
||||
|
||||
function CheckboxField(config) {
|
||||
Field.call(this, config);
|
||||
}
|
||||
|
||||
CheckboxField.prototype = new Field({
|
||||
|
||||
sorter: "number",
|
||||
align: "center",
|
||||
autosearch: true,
|
||||
|
||||
itemTemplate: function(value) {
|
||||
return this._createCheckbox().prop({
|
||||
checked: value,
|
||||
disabled: true
|
||||
});
|
||||
},
|
||||
|
||||
filterTemplate: function() {
|
||||
if(!this.filtering)
|
||||
return "";
|
||||
|
||||
var grid = this._grid,
|
||||
$result = this.filterControl = this._createCheckbox();
|
||||
|
||||
$result.prop({
|
||||
readOnly: true,
|
||||
indeterminate: true
|
||||
});
|
||||
|
||||
$result.on("click", function() {
|
||||
var $cb = $(this);
|
||||
|
||||
if($cb.prop("readOnly")) {
|
||||
$cb.prop({
|
||||
checked: false,
|
||||
readOnly: false
|
||||
});
|
||||
}
|
||||
else if(!$cb.prop("checked")) {
|
||||
$cb.prop({
|
||||
readOnly: true,
|
||||
indeterminate: true
|
||||
});
|
||||
}
|
||||
});
|
||||
|
||||
if(this.autosearch) {
|
||||
$result.on("click", function() {
|
||||
grid.search();
|
||||
});
|
||||
}
|
||||
|
||||
return $result;
|
||||
},
|
||||
|
||||
insertTemplate: function() {
|
||||
if(!this.inserting)
|
||||
return "";
|
||||
|
||||
return this.insertControl = this._createCheckbox();
|
||||
},
|
||||
|
||||
editTemplate: function(value) {
|
||||
if(!this.editing)
|
||||
return this.itemTemplate.apply(this, arguments);
|
||||
|
||||
var $result = this.editControl = this._createCheckbox();
|
||||
$result.prop("checked", value);
|
||||
return $result;
|
||||
},
|
||||
|
||||
filterValue: function() {
|
||||
return this.filterControl.get(0).indeterminate
|
||||
? undefined
|
||||
: this.filterControl.is(":checked");
|
||||
},
|
||||
|
||||
insertValue: function() {
|
||||
return this.insertControl.is(":checked");
|
||||
},
|
||||
|
||||
editValue: function() {
|
||||
return this.editControl.is(":checked");
|
||||
},
|
||||
|
||||
_createCheckbox: function() {
|
||||
return $("<input>").attr("type", "checkbox");
|
||||
}
|
||||
});
|
||||
|
||||
jsGrid.fields.checkbox = jsGrid.CheckboxField = CheckboxField;
|
||||
|
||||
}(jsGrid, jQuery));
|
||||
223
web/bsadmin/assets/js/lib/jsgrid/fields/jsgrid.field.control.js
Normal file
223
web/bsadmin/assets/js/lib/jsgrid/fields/jsgrid.field.control.js
Normal file
@@ -0,0 +1,223 @@
|
||||
(function(jsGrid, $, undefined) {
|
||||
|
||||
var Field = jsGrid.Field;
|
||||
|
||||
function ControlField(config) {
|
||||
Field.call(this, config);
|
||||
this._configInitialized = false;
|
||||
}
|
||||
|
||||
ControlField.prototype = new Field({
|
||||
css: "jsgrid-control-field",
|
||||
align: "center",
|
||||
width: 50,
|
||||
filtering: false,
|
||||
inserting: false,
|
||||
editing: false,
|
||||
sorting: false,
|
||||
|
||||
buttonClass: "jsgrid-button",
|
||||
modeButtonClass: "jsgrid-mode-button",
|
||||
|
||||
modeOnButtonClass: "jsgrid-mode-on-button",
|
||||
searchModeButtonClass: "jsgrid-search-mode-button ti-search",
|
||||
insertModeButtonClass: "jsgrid-insert-mode-button ti-plus",
|
||||
editButtonClass: "jsgrid-edit-button ti-pencil",
|
||||
deleteButtonClass: "jsgrid-delete-button ti-trash",
|
||||
searchButtonClass: "jsgrid-search-button ti-search",
|
||||
clearFilterButtonClass: "jsgrid-clear-filter-button",
|
||||
insertButtonClass: "jsgrid-insert-button",
|
||||
updateButtonClass: "jsgrid-update-button ti-check",
|
||||
cancelEditButtonClass: "jsgrid-cancel-edit-button ti-close",
|
||||
|
||||
searchModeButtonTooltip: "Switch to searching",
|
||||
insertModeButtonTooltip: "Switch to inserting",
|
||||
editButtonTooltip: "Edit",
|
||||
deleteButtonTooltip: "Delete",
|
||||
searchButtonTooltip: "Search",
|
||||
clearFilterButtonTooltip: "Clear filter",
|
||||
insertButtonTooltip: "Insert",
|
||||
updateButtonTooltip: "Update",
|
||||
cancelEditButtonTooltip: "Cancel edit",
|
||||
|
||||
editButton: true,
|
||||
deleteButton: true,
|
||||
clearFilterButton: true,
|
||||
modeSwitchButton: true,
|
||||
|
||||
_initConfig: function() {
|
||||
this._hasFiltering = this._grid.filtering;
|
||||
this._hasInserting = this._grid.inserting;
|
||||
|
||||
if(this._hasInserting && this.modeSwitchButton) {
|
||||
this._grid.inserting = false;
|
||||
}
|
||||
|
||||
this._configInitialized = true;
|
||||
},
|
||||
|
||||
headerTemplate: function() {
|
||||
if(!this._configInitialized) {
|
||||
this._initConfig();
|
||||
}
|
||||
|
||||
var hasFiltering = this._hasFiltering;
|
||||
var hasInserting = this._hasInserting;
|
||||
|
||||
if(!this.modeSwitchButton || (!hasFiltering && !hasInserting))
|
||||
return "";
|
||||
|
||||
if(hasFiltering && !hasInserting)
|
||||
return this._createFilterSwitchButton();
|
||||
|
||||
if(hasInserting && !hasFiltering)
|
||||
return this._createInsertSwitchButton();
|
||||
|
||||
return this._createModeSwitchButton();
|
||||
},
|
||||
|
||||
itemTemplate: function(value, item) {
|
||||
var $result = $([]);
|
||||
|
||||
if(this.editButton) {
|
||||
$result = $result.add(this._createEditButton(item));
|
||||
}
|
||||
|
||||
if(this.deleteButton) {
|
||||
$result = $result.add(this._createDeleteButton(item));
|
||||
}
|
||||
|
||||
return $result;
|
||||
},
|
||||
|
||||
filterTemplate: function() {
|
||||
var $result = this._createSearchButton();
|
||||
return this.clearFilterButton ? $result.add(this._createClearFilterButton()) : $result;
|
||||
},
|
||||
|
||||
insertTemplate: function() {
|
||||
return this._createInsertButton();
|
||||
},
|
||||
|
||||
editTemplate: function() {
|
||||
return this._createUpdateButton().add(this._createCancelEditButton());
|
||||
},
|
||||
|
||||
_createFilterSwitchButton: function() {
|
||||
return this._createOnOffSwitchButton("filtering", this.searchModeButtonClass, true);
|
||||
},
|
||||
|
||||
_createInsertSwitchButton: function() {
|
||||
return this._createOnOffSwitchButton("inserting", this.insertModeButtonClass, false);
|
||||
},
|
||||
|
||||
_createOnOffSwitchButton: function(option, cssClass, isOnInitially) {
|
||||
var isOn = isOnInitially;
|
||||
|
||||
var updateButtonState = $.proxy(function() {
|
||||
$button.toggleClass(this.modeOnButtonClass, isOn);
|
||||
}, this);
|
||||
|
||||
var $button = this._createGridButton(this.modeButtonClass + " " + cssClass, "", function(grid) {
|
||||
isOn = !isOn;
|
||||
grid.option(option, isOn);
|
||||
updateButtonState();
|
||||
});
|
||||
|
||||
updateButtonState();
|
||||
|
||||
return $button;
|
||||
},
|
||||
|
||||
_createModeSwitchButton: function() {
|
||||
var isInserting = false;
|
||||
|
||||
var updateButtonState = $.proxy(function() {
|
||||
$button.attr("title", isInserting ? this.searchModeButtonTooltip : this.insertModeButtonTooltip)
|
||||
.toggleClass(this.insertModeButtonClass, !isInserting)
|
||||
.toggleClass(this.searchModeButtonClass, isInserting);
|
||||
}, this);
|
||||
|
||||
var $button = this._createGridButton(this.modeButtonClass, "", function(grid) {
|
||||
isInserting = !isInserting;
|
||||
grid.option("inserting", isInserting);
|
||||
grid.option("filtering", !isInserting);
|
||||
updateButtonState();
|
||||
});
|
||||
|
||||
updateButtonState();
|
||||
|
||||
return $button;
|
||||
},
|
||||
|
||||
_createEditButton: function(item) {
|
||||
return this._createGridButton(this.editButtonClass, this.editButtonTooltip, function(grid, e) {
|
||||
grid.editItem(item);
|
||||
e.stopPropagation();
|
||||
});
|
||||
},
|
||||
|
||||
_createDeleteButton: function(item) {
|
||||
return this._createGridButton(this.deleteButtonClass, this.deleteButtonTooltip, function(grid, e) {
|
||||
grid.deleteItem(item);
|
||||
e.stopPropagation();
|
||||
});
|
||||
},
|
||||
|
||||
_createSearchButton: function() {
|
||||
return this._createGridButton(this.searchButtonClass, this.searchButtonTooltip, function(grid) {
|
||||
grid.search();
|
||||
});
|
||||
},
|
||||
|
||||
_createClearFilterButton: function() {
|
||||
return this._createGridButton(this.clearFilterButtonClass, this.clearFilterButtonTooltip, function(grid) {
|
||||
grid.clearFilter();
|
||||
});
|
||||
},
|
||||
|
||||
_createInsertButton: function() {
|
||||
return this._createGridButton(this.insertButtonClass, this.insertButtonTooltip, function(grid) {
|
||||
grid.insertItem().done(function() {
|
||||
grid.clearInsert();
|
||||
});
|
||||
});
|
||||
},
|
||||
|
||||
_createUpdateButton: function() {
|
||||
return this._createGridButton(this.updateButtonClass, this.updateButtonTooltip, function(grid, e) {
|
||||
grid.updateItem();
|
||||
e.stopPropagation();
|
||||
});
|
||||
},
|
||||
|
||||
_createCancelEditButton: function() {
|
||||
return this._createGridButton(this.cancelEditButtonClass, this.cancelEditButtonTooltip, function(grid, e) {
|
||||
grid.cancelEdit();
|
||||
e.stopPropagation();
|
||||
});
|
||||
},
|
||||
|
||||
_createGridButton: function(cls, tooltip, clickHandler) {
|
||||
var grid = this._grid;
|
||||
|
||||
return $("<span>").addClass(this.buttonClass)
|
||||
.addClass(cls)
|
||||
.attr({
|
||||
type: "button",
|
||||
title: tooltip
|
||||
})
|
||||
.on("click", function(e) {
|
||||
clickHandler(grid, e);
|
||||
});
|
||||
},
|
||||
|
||||
editValue: function() {
|
||||
return "";
|
||||
}
|
||||
|
||||
});
|
||||
|
||||
jsGrid.fields.control = jsGrid.ControlField = ControlField;
|
||||
|
||||
}(jsGrid, jQuery));
|
||||
@@ -0,0 +1,41 @@
|
||||
(function(jsGrid, $, undefined) {
|
||||
|
||||
var TextField = jsGrid.TextField;
|
||||
|
||||
function NumberField(config) {
|
||||
TextField.call(this, config);
|
||||
}
|
||||
|
||||
NumberField.prototype = new TextField({
|
||||
|
||||
sorter: "number",
|
||||
align: "right",
|
||||
readOnly: false,
|
||||
|
||||
filterValue: function() {
|
||||
return this.filterControl.val()
|
||||
? parseInt(this.filterControl.val() || 0, 10)
|
||||
: undefined;
|
||||
},
|
||||
|
||||
insertValue: function() {
|
||||
return this.insertControl.val()
|
||||
? parseInt(this.insertControl.val() || 0, 10)
|
||||
: undefined;
|
||||
},
|
||||
|
||||
editValue: function() {
|
||||
return this.editControl.val()
|
||||
? parseInt(this.editControl.val() || 0, 10)
|
||||
: undefined;
|
||||
},
|
||||
|
||||
_createTextBox: function() {
|
||||
return $("<input>").attr("type", "number")
|
||||
.prop("readonly", !!this.readOnly);
|
||||
}
|
||||
});
|
||||
|
||||
jsGrid.fields.number = jsGrid.NumberField = NumberField;
|
||||
|
||||
}(jsGrid, jQuery));
|
||||
121
web/bsadmin/assets/js/lib/jsgrid/fields/jsgrid.field.select.js
Normal file
121
web/bsadmin/assets/js/lib/jsgrid/fields/jsgrid.field.select.js
Normal file
@@ -0,0 +1,121 @@
|
||||
(function(jsGrid, $, undefined) {
|
||||
|
||||
var NumberField = jsGrid.NumberField;
|
||||
var numberValueType = "number";
|
||||
var stringValueType = "string";
|
||||
|
||||
function SelectField(config) {
|
||||
this.items = [];
|
||||
this.selectedIndex = -1;
|
||||
this.valueField = "";
|
||||
this.textField = "";
|
||||
|
||||
if(config.valueField && config.items.length) {
|
||||
var firstItemValue = config.items[0][config.valueField];
|
||||
this.valueType = (typeof firstItemValue) === numberValueType ? numberValueType : stringValueType;
|
||||
}
|
||||
|
||||
this.sorter = this.valueType;
|
||||
|
||||
NumberField.call(this, config);
|
||||
}
|
||||
|
||||
SelectField.prototype = new NumberField({
|
||||
|
||||
align: "center",
|
||||
valueType: numberValueType,
|
||||
|
||||
itemTemplate: function(value) {
|
||||
var items = this.items,
|
||||
valueField = this.valueField,
|
||||
textField = this.textField,
|
||||
resultItem;
|
||||
|
||||
if(valueField) {
|
||||
resultItem = $.grep(items, function(item, index) {
|
||||
return item[valueField] === value;
|
||||
})[0] || {};
|
||||
}
|
||||
else {
|
||||
resultItem = items[value];
|
||||
}
|
||||
|
||||
var result = (textField ? resultItem[textField] : resultItem);
|
||||
|
||||
return (result === undefined || result === null) ? "" : result;
|
||||
},
|
||||
|
||||
filterTemplate: function() {
|
||||
if(!this.filtering)
|
||||
return "";
|
||||
|
||||
var grid = this._grid,
|
||||
$result = this.filterControl = this._createSelect();
|
||||
|
||||
if(this.autosearch) {
|
||||
$result.on("change", function(e) {
|
||||
grid.search();
|
||||
});
|
||||
}
|
||||
|
||||
return $result;
|
||||
},
|
||||
|
||||
insertTemplate: function() {
|
||||
if(!this.inserting)
|
||||
return "";
|
||||
|
||||
return this.insertControl = this._createSelect();
|
||||
},
|
||||
|
||||
editTemplate: function(value) {
|
||||
if(!this.editing)
|
||||
return this.itemTemplate.apply(this, arguments);
|
||||
|
||||
var $result = this.editControl = this._createSelect();
|
||||
(value !== undefined) && $result.val(value);
|
||||
return $result;
|
||||
},
|
||||
|
||||
filterValue: function() {
|
||||
var val = this.filterControl.val();
|
||||
return this.valueType === numberValueType ? parseInt(val || 0, 10) : val;
|
||||
},
|
||||
|
||||
insertValue: function() {
|
||||
var val = this.insertControl.val();
|
||||
return this.valueType === numberValueType ? parseInt(val || 0, 10) : val;
|
||||
},
|
||||
|
||||
editValue: function() {
|
||||
var val = this.editControl.val();
|
||||
return this.valueType === numberValueType ? parseInt(val || 0, 10) : val;
|
||||
},
|
||||
|
||||
_createSelect: function() {
|
||||
var $result = $("<select>"),
|
||||
valueField = this.valueField,
|
||||
textField = this.textField,
|
||||
selectedIndex = this.selectedIndex;
|
||||
|
||||
$.each(this.items, function(index, item) {
|
||||
var value = valueField ? item[valueField] : index,
|
||||
text = textField ? item[textField] : item;
|
||||
|
||||
var $option = $("<option>")
|
||||
.attr("value", value)
|
||||
.text(text)
|
||||
.appendTo($result);
|
||||
|
||||
$option.prop("selected", (selectedIndex === index));
|
||||
});
|
||||
|
||||
$result.prop("disabled", !!this.readOnly);
|
||||
|
||||
return $result;
|
||||
}
|
||||
});
|
||||
|
||||
jsGrid.fields.select = jsGrid.SelectField = SelectField;
|
||||
|
||||
}(jsGrid, jQuery));
|
||||
69
web/bsadmin/assets/js/lib/jsgrid/fields/jsgrid.field.text.js
Normal file
69
web/bsadmin/assets/js/lib/jsgrid/fields/jsgrid.field.text.js
Normal file
@@ -0,0 +1,69 @@
|
||||
(function(jsGrid, $, undefined) {
|
||||
|
||||
var Field = jsGrid.Field;
|
||||
|
||||
function TextField(config) {
|
||||
Field.call(this, config);
|
||||
}
|
||||
|
||||
TextField.prototype = new Field({
|
||||
|
||||
autosearch: true,
|
||||
readOnly: false,
|
||||
|
||||
filterTemplate: function() {
|
||||
if(!this.filtering)
|
||||
return "";
|
||||
|
||||
var grid = this._grid,
|
||||
$result = this.filterControl = this._createTextBox();
|
||||
|
||||
if(this.autosearch) {
|
||||
$result.on("keypress", function(e) {
|
||||
if(e.which === 13) {
|
||||
grid.search();
|
||||
e.preventDefault();
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
return $result;
|
||||
},
|
||||
|
||||
insertTemplate: function() {
|
||||
if(!this.inserting)
|
||||
return "";
|
||||
|
||||
return this.insertControl = this._createTextBox();
|
||||
},
|
||||
|
||||
editTemplate: function(value) {
|
||||
if(!this.editing)
|
||||
return this.itemTemplate.apply(this, arguments);
|
||||
|
||||
var $result = this.editControl = this._createTextBox();
|
||||
$result.val(value);
|
||||
return $result;
|
||||
},
|
||||
|
||||
filterValue: function() {
|
||||
return this.filterControl.val();
|
||||
},
|
||||
|
||||
insertValue: function() {
|
||||
return this.insertControl.val();
|
||||
},
|
||||
|
||||
editValue: function() {
|
||||
return this.editControl.val();
|
||||
},
|
||||
|
||||
_createTextBox: function() {
|
||||
return $("<input>").attr("type", "text")
|
||||
.prop("readonly", !!this.readOnly);
|
||||
}
|
||||
});
|
||||
|
||||
jsGrid.fields.text = jsGrid.TextField = TextField;
|
||||
|
||||
}(jsGrid, jQuery));
|
||||
@@ -0,0 +1,34 @@
|
||||
(function(jsGrid, $, undefined) {
|
||||
|
||||
var TextField = jsGrid.TextField;
|
||||
|
||||
function TextAreaField(config) {
|
||||
TextField.call(this, config);
|
||||
}
|
||||
|
||||
TextAreaField.prototype = new TextField({
|
||||
|
||||
insertTemplate: function() {
|
||||
if(!this.inserting)
|
||||
return "";
|
||||
|
||||
return this.insertControl = this._createTextArea();
|
||||
},
|
||||
|
||||
editTemplate: function(value) {
|
||||
if(!this.editing)
|
||||
return this.itemTemplate.apply(this, arguments);
|
||||
|
||||
var $result = this.editControl = this._createTextArea();
|
||||
$result.val(value);
|
||||
return $result;
|
||||
},
|
||||
|
||||
_createTextArea: function() {
|
||||
return $("<textarea>").prop("readonly", !!this.readOnly);
|
||||
}
|
||||
});
|
||||
|
||||
jsGrid.fields.textarea = jsGrid.TextAreaField = TextAreaField;
|
||||
|
||||
}(jsGrid, jQuery));
|
||||
26
web/bsadmin/assets/js/lib/jsgrid/jsgrid-init.js
Normal file
26
web/bsadmin/assets/js/lib/jsgrid/jsgrid-init.js
Normal file
@@ -0,0 +1,26 @@
|
||||
$(function() {
|
||||
|
||||
$("#jsGrid").jsGrid({
|
||||
height: "100%",
|
||||
width: "100%",
|
||||
filtering: false,
|
||||
editing: true,
|
||||
inserting: true,
|
||||
sorting: true,
|
||||
paging: true,
|
||||
autoload: true,
|
||||
pageSize: 15,
|
||||
pageButtonCount: 5,
|
||||
deleteConfirm: "Do you really want to delete the client?",
|
||||
controller: db,
|
||||
fields: [
|
||||
{ name: "Name", type: "text", width: 150 },
|
||||
{ name: "Age", type: "number", width: 50 },
|
||||
{ name: "Address", type: "text", width: 200 },
|
||||
{ name: "Country", type: "select", items: db.countries, valueField: "Id", textField: "Name" },
|
||||
{ name: "Married", type: "checkbox", title: "Is Married", sorting: false },
|
||||
{ type: "control" }
|
||||
]
|
||||
});
|
||||
|
||||
});
|
||||
1467
web/bsadmin/assets/js/lib/jsgrid/jsgrid.core.js
Normal file
1467
web/bsadmin/assets/js/lib/jsgrid/jsgrid.core.js
Normal file
File diff suppressed because it is too large
Load Diff
72
web/bsadmin/assets/js/lib/jsgrid/jsgrid.field.js
Normal file
72
web/bsadmin/assets/js/lib/jsgrid/jsgrid.field.js
Normal file
@@ -0,0 +1,72 @@
|
||||
(function(jsGrid, $, undefined) {
|
||||
|
||||
function Field(config) {
|
||||
$.extend(true, this, config);
|
||||
this.sortingFunc = this._getSortingFunc();
|
||||
}
|
||||
|
||||
Field.prototype = {
|
||||
name: "",
|
||||
title: null,
|
||||
css: "",
|
||||
align: "",
|
||||
width: 100,
|
||||
|
||||
visible: true,
|
||||
filtering: true,
|
||||
inserting: true,
|
||||
editing: true,
|
||||
sorting: true,
|
||||
sorter: "string", // name of SortStrategy or function to compare elements
|
||||
|
||||
headerTemplate: function() {
|
||||
return (this.title === undefined || this.title === null) ? this.name : this.title;
|
||||
},
|
||||
|
||||
itemTemplate: function(value, item) {
|
||||
return value;
|
||||
},
|
||||
|
||||
filterTemplate: function() {
|
||||
return "";
|
||||
},
|
||||
|
||||
insertTemplate: function() {
|
||||
return "";
|
||||
},
|
||||
|
||||
editTemplate: function(value, item) {
|
||||
this._value = value;
|
||||
return this.itemTemplate(value, item);
|
||||
},
|
||||
|
||||
filterValue: function() {
|
||||
return "";
|
||||
},
|
||||
|
||||
insertValue: function() {
|
||||
return "";
|
||||
},
|
||||
|
||||
editValue: function() {
|
||||
return this._value;
|
||||
},
|
||||
|
||||
_getSortingFunc: function() {
|
||||
var sorter = this.sorter;
|
||||
|
||||
if($.isFunction(sorter)) {
|
||||
return sorter;
|
||||
}
|
||||
|
||||
if(typeof sorter === "string") {
|
||||
return jsGrid.sortStrategies[sorter];
|
||||
}
|
||||
|
||||
throw Error("wrong sorter for the field \"" + this.name + "\"!");
|
||||
}
|
||||
};
|
||||
|
||||
jsGrid.Field = Field;
|
||||
|
||||
}(jsGrid, jQuery));
|
||||
82
web/bsadmin/assets/js/lib/jsgrid/jsgrid.load-indicator.js
Normal file
82
web/bsadmin/assets/js/lib/jsgrid/jsgrid.load-indicator.js
Normal file
@@ -0,0 +1,82 @@
|
||||
(function(jsGrid, $, undefined) {
|
||||
|
||||
function LoadIndicator(config) {
|
||||
this._init(config);
|
||||
}
|
||||
|
||||
LoadIndicator.prototype = {
|
||||
|
||||
container: "body",
|
||||
message: "Loading...",
|
||||
shading: true,
|
||||
|
||||
zIndex: 1000,
|
||||
shaderClass: "jsgrid-load-shader",
|
||||
loadPanelClass: "jsgrid-load-panel",
|
||||
|
||||
_init: function(config) {
|
||||
$.extend(true, this, config);
|
||||
|
||||
this._initContainer();
|
||||
this._initShader();
|
||||
this._initLoadPanel();
|
||||
},
|
||||
|
||||
_initContainer: function() {
|
||||
this._container = $(this.container);
|
||||
},
|
||||
|
||||
_initShader: function() {
|
||||
if(!this.shading)
|
||||
return;
|
||||
|
||||
this._shader = $("<div>").addClass(this.shaderClass)
|
||||
.hide()
|
||||
.css({
|
||||
position: "absolute",
|
||||
top: 0,
|
||||
right: 0,
|
||||
bottom: 0,
|
||||
left: 0,
|
||||
zIndex: this.zIndex
|
||||
})
|
||||
.appendTo(this._container);
|
||||
},
|
||||
|
||||
_initLoadPanel: function() {
|
||||
this._loadPanel = $("<div>").addClass(this.loadPanelClass)
|
||||
.text(this.message)
|
||||
.hide()
|
||||
.css({
|
||||
position: "absolute",
|
||||
top: "50%",
|
||||
left: "50%",
|
||||
zIndex: this.zIndex
|
||||
})
|
||||
.appendTo(this._container);
|
||||
},
|
||||
|
||||
show: function() {
|
||||
var $loadPanel = this._loadPanel.show();
|
||||
|
||||
var actualWidth = $loadPanel.outerWidth();
|
||||
var actualHeight = $loadPanel.outerHeight();
|
||||
|
||||
$loadPanel.css({
|
||||
marginTop: -actualHeight / 2,
|
||||
marginLeft: -actualWidth / 2
|
||||
});
|
||||
|
||||
this._shader.show();
|
||||
},
|
||||
|
||||
hide: function() {
|
||||
this._loadPanel.hide();
|
||||
this._shader.hide();
|
||||
}
|
||||
|
||||
};
|
||||
|
||||
jsGrid.LoadIndicator = LoadIndicator;
|
||||
|
||||
}(jsGrid, jQuery));
|
||||
122
web/bsadmin/assets/js/lib/jsgrid/jsgrid.load-strategies.js
Normal file
122
web/bsadmin/assets/js/lib/jsgrid/jsgrid.load-strategies.js
Normal file
@@ -0,0 +1,122 @@
|
||||
(function(jsGrid, $, undefined) {
|
||||
|
||||
function DirectLoadingStrategy(grid) {
|
||||
this._grid = grid;
|
||||
}
|
||||
|
||||
DirectLoadingStrategy.prototype = {
|
||||
|
||||
firstDisplayIndex: function() {
|
||||
var grid = this._grid;
|
||||
return grid.option("paging") ? (grid.option("pageIndex") - 1) * grid.option("pageSize") : 0;
|
||||
},
|
||||
|
||||
lastDisplayIndex: function() {
|
||||
var grid = this._grid;
|
||||
var itemsCount = grid.option("data").length;
|
||||
|
||||
return grid.option("paging")
|
||||
? Math.min(grid.option("pageIndex") * grid.option("pageSize"), itemsCount)
|
||||
: itemsCount;
|
||||
},
|
||||
|
||||
itemsCount: function() {
|
||||
return this._grid.option("data").length;
|
||||
},
|
||||
|
||||
openPage: function(index) {
|
||||
this._grid.refresh();
|
||||
},
|
||||
|
||||
loadParams: function() {
|
||||
return {};
|
||||
},
|
||||
|
||||
sort: function() {
|
||||
this._grid._sortData();
|
||||
this._grid.refresh();
|
||||
return $.Deferred().resolve().promise();
|
||||
},
|
||||
|
||||
reset: function() {
|
||||
this._grid.refresh();
|
||||
return $.Deferred().resolve().promise();
|
||||
},
|
||||
|
||||
finishLoad: function(loadedData) {
|
||||
this._grid.option("data", loadedData);
|
||||
},
|
||||
|
||||
finishInsert: function(insertedItem) {
|
||||
var grid = this._grid;
|
||||
grid.option("data").push(insertedItem);
|
||||
grid.refresh();
|
||||
},
|
||||
|
||||
finishDelete: function(deletedItem, deletedItemIndex) {
|
||||
var grid = this._grid;
|
||||
grid.option("data").splice(deletedItemIndex, 1);
|
||||
grid.reset();
|
||||
}
|
||||
};
|
||||
|
||||
|
||||
function PageLoadingStrategy(grid) {
|
||||
this._grid = grid;
|
||||
this._itemsCount = 0;
|
||||
}
|
||||
|
||||
PageLoadingStrategy.prototype = {
|
||||
|
||||
firstDisplayIndex: function() {
|
||||
return 0;
|
||||
},
|
||||
|
||||
lastDisplayIndex: function() {
|
||||
return this._grid.option("data").length;
|
||||
},
|
||||
|
||||
itemsCount: function() {
|
||||
return this._itemsCount;
|
||||
},
|
||||
|
||||
openPage: function(index) {
|
||||
this._grid.loadData();
|
||||
},
|
||||
|
||||
loadParams: function() {
|
||||
var grid = this._grid;
|
||||
return {
|
||||
pageIndex: grid.option("pageIndex"),
|
||||
pageSize: grid.option("pageSize")
|
||||
};
|
||||
},
|
||||
|
||||
reset: function() {
|
||||
return this._grid.loadData();
|
||||
},
|
||||
|
||||
sort: function() {
|
||||
return this._grid.loadData();
|
||||
},
|
||||
|
||||
finishLoad: function(loadedData) {
|
||||
this._itemsCount = loadedData.itemsCount;
|
||||
this._grid.option("data", loadedData.data);
|
||||
},
|
||||
|
||||
finishInsert: function(insertedItem) {
|
||||
this._grid.search();
|
||||
},
|
||||
|
||||
finishDelete: function(deletedItem, deletedItemIndex) {
|
||||
this._grid.search();
|
||||
}
|
||||
};
|
||||
|
||||
jsGrid.loadStrategies = {
|
||||
DirectLoadingStrategy: DirectLoadingStrategy,
|
||||
PageLoadingStrategy: PageLoadingStrategy
|
||||
};
|
||||
|
||||
}(jsGrid, jQuery));
|
||||
36
web/bsadmin/assets/js/lib/jsgrid/jsgrid.sort-strategies.js
Normal file
36
web/bsadmin/assets/js/lib/jsgrid/jsgrid.sort-strategies.js
Normal file
@@ -0,0 +1,36 @@
|
||||
(function(jsGrid, $, undefined) {
|
||||
|
||||
var isDefined = function(val) {
|
||||
return typeof(val) !== "undefined" && val !== null;
|
||||
};
|
||||
|
||||
var sortStrategies = {
|
||||
string: function(str1, str2) {
|
||||
if(!isDefined(str1) && !isDefined(str2))
|
||||
return 0;
|
||||
|
||||
if(!isDefined(str1))
|
||||
return -1;
|
||||
|
||||
if(!isDefined(str2))
|
||||
return 1;
|
||||
|
||||
return ("" + str1).localeCompare("" + str2);
|
||||
},
|
||||
|
||||
number: function(n1, n2) {
|
||||
return n1 - n2;
|
||||
},
|
||||
|
||||
date: function(dt1, dt2) {
|
||||
return dt1 - dt2;
|
||||
},
|
||||
|
||||
numberAsString: function(n1, n2) {
|
||||
return parseFloat(n1) - parseFloat(n2);
|
||||
}
|
||||
};
|
||||
|
||||
jsGrid.sortStrategies = sortStrategies;
|
||||
|
||||
}(jsGrid, jQuery));
|
||||
135
web/bsadmin/assets/js/lib/jsgrid/jsgrid.validation.js
Normal file
135
web/bsadmin/assets/js/lib/jsgrid/jsgrid.validation.js
Normal file
@@ -0,0 +1,135 @@
|
||||
(function(jsGrid, $, undefined) {
|
||||
|
||||
function Validation(config) {
|
||||
this._init(config);
|
||||
}
|
||||
|
||||
Validation.prototype = {
|
||||
|
||||
_init: function(config) {
|
||||
$.extend(true, this, config);
|
||||
},
|
||||
|
||||
validate: function(args) {
|
||||
var errors = [];
|
||||
|
||||
$.each(this._normalizeRules(args.rules), function(_, rule) {
|
||||
if(rule.validator(args.value, args.item, rule.param))
|
||||
return;
|
||||
|
||||
var errorMessage = $.isFunction(rule.message) ? rule.message(args.value, args.item) : rule.message;
|
||||
errors.push(errorMessage);
|
||||
});
|
||||
|
||||
return errors;
|
||||
},
|
||||
|
||||
_normalizeRules: function(rules) {
|
||||
if(!$.isArray(rules))
|
||||
rules = [rules];
|
||||
|
||||
return $.map(rules, $.proxy(function(rule) {
|
||||
return this._normalizeRule(rule);
|
||||
}, this));
|
||||
},
|
||||
|
||||
_normalizeRule: function(rule) {
|
||||
if(typeof rule === "string")
|
||||
rule = { validator: rule };
|
||||
|
||||
if($.isFunction(rule))
|
||||
rule = { validator: rule };
|
||||
|
||||
if($.isPlainObject(rule))
|
||||
rule = $.extend({}, rule);
|
||||
else
|
||||
throw Error("wrong validation config specified");
|
||||
|
||||
if($.isFunction(rule.validator))
|
||||
return rule;
|
||||
|
||||
return this._applyNamedValidator(rule, rule.validator);
|
||||
},
|
||||
|
||||
_applyNamedValidator: function(rule, validatorName) {
|
||||
delete rule.validator;
|
||||
|
||||
var validator = validators[validatorName];
|
||||
if(!validator)
|
||||
throw Error("unknown validator \"" + validatorName + "\"");
|
||||
|
||||
if($.isFunction(validator)) {
|
||||
validator = { validator: validator };
|
||||
}
|
||||
|
||||
return $.extend({}, validator, rule);
|
||||
}
|
||||
};
|
||||
|
||||
jsGrid.Validation = Validation;
|
||||
|
||||
|
||||
var validators = {
|
||||
required: {
|
||||
message: "Field is required",
|
||||
validator: function(value) {
|
||||
return value !== undefined && value !== null && value !== "";
|
||||
}
|
||||
},
|
||||
|
||||
rangeLength: {
|
||||
message: "Field value length is out of the defined range",
|
||||
validator: function(value, _, param) {
|
||||
return value.length >= param[0] && value.length <= param[1];
|
||||
}
|
||||
},
|
||||
|
||||
minLength: {
|
||||
message: "Field value is too short",
|
||||
validator: function(value, _, param) {
|
||||
return value.length >= param;
|
||||
}
|
||||
},
|
||||
|
||||
maxLength: {
|
||||
message: "Field value is too long",
|
||||
validator: function(value, _, param) {
|
||||
return value.length <= param;
|
||||
}
|
||||
},
|
||||
|
||||
pattern: {
|
||||
message: "Field value is not matching the defined pattern",
|
||||
validator: function(value, _, param) {
|
||||
if(typeof param === "string") {
|
||||
param = new RegExp("^(?:" + param + ")$");
|
||||
}
|
||||
return param.test(value);
|
||||
}
|
||||
},
|
||||
|
||||
range: {
|
||||
message: "Field value is out of the defined range",
|
||||
validator: function(value, _, param) {
|
||||
return value >= param[0] && value <= param[1];
|
||||
}
|
||||
},
|
||||
|
||||
min: {
|
||||
message: "Field value is too small",
|
||||
validator: function(value, _, param) {
|
||||
return value >= param;
|
||||
}
|
||||
},
|
||||
|
||||
max: {
|
||||
message: "Field value is too large",
|
||||
validator: function(value, _, param) {
|
||||
return value <= param;
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
jsGrid.validators = validators;
|
||||
|
||||
}(jsGrid, jQuery));
|
||||
Reference in New Issue
Block a user