]> git.evergreen-ils.org Git - working/Evergreen.git/blob - Open-ILS/web/js/dojo/openils/widget/GridColumnPicker.js
use an arg hash instead of params
[working/Evergreen.git] / Open-ILS / web / js / dojo / openils / widget / GridColumnPicker.js
1 /* ---------------------------------------------------------------------------
2  * Copyright (C) 2008  Georgia Public Library Service
3  * Bill Erickson <erickson@esilibrary.com>
4  *
5  * This program is free software; you can redistribute it and/or
6  * modify it under the terms of the GNU General Public License
7  * as published by the Free Software Foundation; either version 2
8  * of the License, or (at your option) any later version.
9  *
10  * This program is distributed in the hope that it will be useful,
11  * but WITHOUT ANY WARRANTY; without even the implied warranty of
12  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
13  * GNU General Public License for more details.
14  * ---------------------------------------------------------------------------
15  */
16
17
18 /**
19  * Create a new menu that can be used as a grid column picker.  This version
20  * takes advantage of Dojo's 1.2 headerMenu attribute for selecting which
21  * columns to display.  As columns are chosen, they are updated on the server
22  * with user settings.
23  */
24
25 if(!dojo._hasResource['openils.widget.GridColumnPicker']) {
26     dojo.provide('openils.widget.GridColumnPicker');
27     dojo.require('dijit.Menu');
28     dojo.require('fieldmapper.Fieldmapper');
29     dojo.require('openils.Util');
30
31     dojo.declare(
32         'openils.widget.GridColumnPicker',
33         [dijit.Menu],
34         {
35
36             USER_PERSIST_SETTING : 'ui.grid_columns',
37
38             /**
39              * Load the fields from the grid and map them to the MenuItem's.  
40              * Load settings from server
41              */
42             init : function(args) {
43
44                 this.grid = args.grid;
45                 this.persistPrefix = args.prefix;
46                 this.authtoken = args.authtoken;
47                 this.cells = this.grid.structure[0].cells[0];
48                 var self = this;
49
50                 dojo.forEach(this.getChildren(),
51                     function(child) {
52                         for(var i in self.cells) {
53                             var name = self.cells[i].name;
54                             if(name == child.attr('label')) {
55                                 child.field = {label:name, ident:self.cells[i].field};
56                                 break;
57                             }   
58                         }
59                     }
60                 );
61                 this.load();
62             },
63
64             onClose : function() {
65                 this.inherited('onClose',arguments);
66                 this.persist();
67             },
68
69             /**
70              * Save new settings on the server
71              */
72             persist : function() {
73                 var selected = [];
74                 var autoFields = [];
75                 dojo.forEach(this.getChildren(),
76                     function(child) {
77                         if(child.checked) {
78                             selected.push(child.field.ident)
79                         }
80                     }
81                 );
82                 var setting = {};
83                 setting[this.USER_PERSIST_SETTING+'.'+this.persistPrefix] = {'columns':selected, 'auto':autoFields};
84                 fieldmapper.standardRequest(
85                     ['open-ils.actor', 'open-ils.actor.patron.settings.update'],
86                     {   async: true,
87                         params: [this.authtoken, null, setting],
88                         oncomplete: function(r) {
89                             openils.Util.readResponse(r);
90                         }
91                     }
92                 );
93             },
94
95             /**
96              * Load existing settings from the server
97              */
98             load : function() {
99                 var self = this;
100                 fieldmapper.standardRequest(
101                     ['open-ils.actor', 'open-ils.actor.patron.settings.retrieve'],
102                     {   async: true,
103                         params: [this.authtoken, null, this.USER_PERSIST_SETTING+'.'+this.persistPrefix],
104                         oncomplete: function(r) { self._loadCallback(r); }
105                     }
106                 );
107             },
108
109             _loadCallback : function(r) {
110                 if(settings = openils.Util.readResponse(r)) {
111                     dojo.forEach(this.getChildren(),
112                         function(child) {
113                             if(child.field) {
114                                 if(!openils.Util.arrayContains(settings.columns, child.field.ident)) {
115                                     child.attr("checked", false);
116                                     child.onChange(child.checked);
117                                 }
118                             }
119                         }
120                     );
121                 }
122             },
123
124         } // class def
125     );
126 }