]> git.evergreen-ils.org Git - working/Evergreen.git/blob - Open-ILS/web/js/dojo/openils/widget/GridColumnPicker.js
go ahead and ipmort the placeholder menu since it's used by grid column pickers
[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('dojox.widget.PlaceholderMenuItem');
29     dojo.require('fieldmapper.Fieldmapper');
30     dojo.require('openils.Util');
31
32     dojo.declare(
33         'openils.widget.GridColumnPicker',
34         [dijit.Menu],
35         {
36
37             USER_PERSIST_SETTING : 'ui.grid_columns',
38
39             /**
40              * Load the fields from the grid and map them to the MenuItem's.  
41              * Load settings from server
42              */
43             init : function(args) {
44
45                 this.grid = args.grid;
46                 this.persistPrefix = args.prefix;
47                 this.authtoken = args.authtoken;
48                 this.cells = this.grid.structure[0].cells[0];
49                 var self = this;
50
51                 dojo.style(this.grid.domNode.id, 'visibility', 'hidden');
52
53                 dojo.forEach(this.getChildren(),
54                     function(child) {
55                         for(var i in self.cells) {
56                             var name = self.cells[i].name;
57                             if(name == child.attr('label')) {
58                                 child.field = {label:name, ident:self.cells[i].field};
59                                 break;
60                             }   
61                         }
62                     }
63                 );
64                 this.load();
65             },
66
67             onClose : function() {
68                 this.inherited('onClose',arguments);
69                 this.persist();
70             },
71
72             /**
73              * Save new settings on the server
74              */
75             persist : function() {
76                 var selected = [];
77                 var autoFields = [];
78                 dojo.forEach(this.getChildren(),
79                     function(child) {
80                         if(child.checked) {
81                             selected.push(child.field.ident)
82                         }
83                     }
84                 );
85                 var setting = {};
86                 setting[this.USER_PERSIST_SETTING+'.'+this.persistPrefix] = {'columns':selected, 'auto':autoFields};
87                 fieldmapper.standardRequest(
88                     ['open-ils.actor', 'open-ils.actor.patron.settings.update'],
89                     {   async: true,
90                         params: [this.authtoken, null, setting],
91                         oncomplete: function(r) {
92                             openils.Util.readResponse(r);
93                         }
94                     }
95                 );
96             },
97
98             /**
99              * Load existing settings from the server
100              */
101             load : function() {
102                 var self = this;
103                 fieldmapper.standardRequest(
104                     ['open-ils.actor', 'open-ils.actor.patron.settings.retrieve'],
105                     {   async: true,
106                         params: [this.authtoken, null, this.USER_PERSIST_SETTING+'.'+this.persistPrefix],
107                         oncomplete: function(r) { self._loadCallback(r); }
108                     }
109                 );
110             },
111
112             _loadCallback : function(r) {
113                 dojo.style(this.grid.domNode.id, 'visibility', 'visible');
114                 if(settings = openils.Util.readResponse(r)) {
115                     dojo.forEach(this.getChildren(),
116                         function(child) {
117                             if(child.field) {
118                                 if(!openils.Util.arrayContains(settings.columns, child.field.ident)) {
119                                     child.attr("checked", false);
120                                     child.onChange(child.checked);
121                                 }
122                             }
123                         }
124                     );
125                 }
126             },
127
128         } // class def
129     );
130 }