]> git.evergreen-ils.org Git - working/Evergreen.git/blob - Open-ILS/xul/staff_client/server/serial/notes.xul
Merge remote branch 'working/user/dbwells/serial_items_and_note_fixes'
[working/Evergreen.git] / Open-ILS / xul / staff_client / server / serial / notes.xul
1 <?xml version="1.0"?>
2 <!-- Application: Evergreen Staff Client -->
3 <!-- Screen: Serial Notes -->
4 <!--
5  vim:noet:sw=4:ts=4
6 -->
7
8 <!-- ///////////////////////////////////////////////////////////////////////////////////////////////////////////// -->
9 <!-- STYLESHEETS -->
10 <?xml-stylesheet href="chrome://global/skin/" type="text/css"?>
11 <?xml-stylesheet href="chrome://open_ils_staff_client/skin/global.css" type="text/css"?>
12 <?xml-stylesheet href="/xul/server/skin/global.css" type="text/css"?>
13 <?xml-stylesheet href="/xul/server/skin/patron_display.css" type="text/css"?>
14
15 <!-- ///////////////////////////////////////////////////////////////////////////////////////////////////////////// -->
16 <!-- LOCALIZATION -->
17 <!DOCTYPE window PUBLIC "" ""[
18         <!--#include virtual="/opac/locale/${locale}/lang.dtd"-->
19 ]>
20
21 <!-- ///////////////////////////////////////////////////////////////////////////////////////////////////////////// -->
22 <!-- OVERLAYS -->
23 <?xul-overlay href="/xul/server/OpenILS/util_overlay.xul"?>
24
25 <window id="notes_win" width="700" height="550" oils_persist="height width sizemode"
26         onload="try{ my_init(); font_helper(); persist_helper(); } catch(E) { alert(E); }"
27         xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul">
28
29         <!-- ///////////////////////////////////////////////////////////////////////////////////////////////////////////// -->
30         <!-- BEHAVIOR -->
31         <script type="text/javascript">var myPackageDir = 'open_ils_staff_client'; var IAMXUL = true; var g = {};</script>
32         <scripts id="openils_util_scripts"/>
33
34         <script type="text/javascript" src="/xul/server/main/JSAN.js"/>
35         <script>
36         <![CDATA[
37
38                 function $(id) { return document.getElementById(id); }
39
40                 function my_init() {
41                         try {
42                                 netscape.security.PrivilegeManager.enablePrivilege("UniversalXPConnect");
43                                 if (typeof JSAN == 'undefined') { 
44                                         throw( $("commonStrings").getString('common.jsan.missing') );
45                                 }
46                                 JSAN.errorLevel = "die"; // none, warn, or die
47                                 JSAN.addRepository('/xul/server/');
48
49                                 JSAN.use('util.error'); g.error = new util.error();
50                                 JSAN.use('util.network'); g.network = new util.network();
51                                 JSAN.use('util.date'); JSAN.use('util.money'); 
52                                 JSAN.use('OpenILS.data'); g.data = new OpenILS.data(); g.data.init({'via':'stash'});
53
54                                 g.error.sdump('D_TRACE','my_init() for notes.xul');
55
56                                 g.object_type = xul_param('object_type',{'modal_xulG':true});
57                                 g.object_id = xul_param('object_id',{'modal_xulG':true});
58                                 g.function_type = xul_param('function_type',{'modal_xulG':true});
59                                 g.constructor = xul_param('constructor',{'modal_xulG':true});
60
61                                 var window_title = xul_param('title',{'modal_xulG':true});
62                                 if (window_title) {
63                                         try { document.title = window_title; } catch(E) {}
64                                 }
65
66                                 refresh();
67
68                         } catch(E) {
69                                 var err_msg = $("commonStrings").getFormattedString('common.exception', ['serial/notes.xul', js2JSON(E)]);
70                                 try { g.error.sdump('D_ERROR',err_msg); } catch(E) { dump(err_msg); }
71                                 alert(err_msg);
72                         }
73                 }
74
75                 function refresh() {
76                         retrieve_notes(); render_notes();
77                 }
78
79                 function retrieve_notes() {
80                         g.notes = g.network.simple_request('FM_'+g.function_type+'_RETRIEVE_ALL',[ { 'authtoken' : ses(), 'object_id' : g.object_id } ]).reverse();
81                 }
82
83                 function apply(node,field,value) {
84                         util.widgets.apply(
85                                 node,'name',field,
86                                 function(n) {
87                                         switch(n.nodeName) {
88                                                 case 'description' : n.appendChild( document.createTextNode( value ) ); break;
89                                                 case 'label' : n.value = value; break;
90                                                 default : n.value = value; break;
91                                         }
92                                 }
93                         );
94                 }
95
96                 function render_notes() {
97                         JSAN.use('util.widgets'); util.widgets.remove_children('notes_panel');
98                         var np = $('notes_panel');
99                                 var hbox = document.createElement('hbox'); np.appendChild(hbox);
100                                         var btn = document.createElement('button'); hbox.appendChild(btn);
101                                                 btn.setAttribute('label', $('catStrings').getString('staff.cat.copy_notes.render_notes.label'));
102                                                 btn.setAttribute('accesskey', $('catStrings').getString('staff.cat.copy_notes.render_notes.accesskey'));
103                                                 btn.setAttribute('oncommand','new_note()');
104
105                         var hb; // keep button bar reference for adding close button
106                         for (var i = 0; i < g.notes.length; i++) {
107
108                                 /* template */
109                                 var node = $('note_template').cloneNode(true); np.appendChild(node); node.hidden = false;
110                                 apply(node,'create_date',g.notes[i].create_date().toString().substr(0,10));
111                                 util.widgets.apply(node,'name','create_date',
112                                         function(n) {
113                                                 n.setAttribute(
114                                                         "tooltiptext",
115                                                         $('catStrings').getString('staff.cat.copy_notes.widgets_apply.note_id') + " "
116                                                         + g.notes[i].id() + " " 
117                                                         + $('catStrings').getString('staff.cat.copy_notes.widgets_apply.creator_id') + " "
118                                                         + g.notes[i].creator()
119                                                 );
120                                         }
121                                 );
122                                 apply(node,'title',g.notes[i].title());
123                                 apply(node,'pub',get_bool( g.notes[i].pub() ) ? $('catStrings').getString('staff.cat.copy_notes.widgets.public') : $('catStrings').getString('staff.cat.copy_notes.widgets.private'));
124                                 apply(node,'value',g.notes[i].value());
125                                 apply(node,'id',g.notes[i].id());
126                                 apply(node,'creator',g.notes[i].creator());
127
128                                 /* button bar */
129                                 hb = document.createElement('hbox'); np.appendChild(hb);
130                                         var btn0 = document.createElement('button'); hb.appendChild(btn0);
131                                                 btn0.setAttribute('label', $('serialStrings').getString('staff.serial.notes.do_edit_note.label'));
132                                                 btn0.setAttribute('image',"/xul/server/skin/media/images/up_arrow.gif");
133
134                                                 btn0.addEventListener(
135                                                         'command',
136                                                         function(index){ return function() { new_note(index) } }(i),
137                                                         false
138                                                 );
139                                         var btn1 = document.createElement('button'); hb.appendChild(btn1);
140                                                 btn1.setAttribute('label', $('catStrings').getString('staff.cat.copy_notes.delete_note.label'));
141                                                 btn1.setAttribute('image',"/xul/server/skin/media/images/up_arrow.gif");
142
143                                                 btn1.addEventListener(
144                                                         'command',
145                                                         function(index){ return function() { 
146                                                                 var r = g.error.yns_alert(
147                                                                         $('catStrings').getFormattedString('staff.cat.copy_notes.delete_note.prompt.msg', [g.notes[index].title(), g.notes[index].create_date().toString().substr(0,10)]),
148                                                                         $('catStrings').getString('staff.cat.copy_notes.delete_note.prompt.title'),
149                                                                         $('catStrings').getString('staff.cat.copy_notes.delete_note.prompt.yes'),
150                                                                         $('catStrings').getString('staff.cat.copy_notes.delete_note.prompt.no'),
151                                                                         null,
152                                                                         $('commonStrings').getString('common.confirm')
153                                                                 ); 
154                                                                 if (r == 0) {
155                                                                         g.network.simple_request('FM_'+g.function_type+'_DELETE',[ses(),g.notes[index].id()]);
156                                                                         setTimeout(function() { 
157                                                                                 alert($('catStrings').getString('staff.cat.copy_notes.delete_note.success'));
158                                                                                 refresh(); },0
159                                                                         );
160                                                                 }
161                                                         } }(i),
162                                                         false
163                                                 );
164                         }
165
166                         // add close button
167                         if (!hb) { // no notes yet, fill the space and add a bar
168                                 var spacer = document.createElement('spacer'); np.appendChild(spacer); spacer.flex = 1;
169                                 hb = document.createElement('hbox'); np.appendChild(hb);
170                         }
171                         var spacer = document.createElement('spacer');
172                         hb.appendChild(spacer); spacer.flex = 1;
173                         var btn2 = document.createElement('button'); hb.appendChild(btn2);
174                         btn2.setAttribute('label', $('catStrings').getString('staff.cat.copy_notes.delete_note.close_window'));
175                         btn2.setAttribute('oncommand','window.close();');
176
177                 }
178                 
179                 function xml_encode(str) {
180                         return str.replace(/&/g, '&amp;').replace(/</g, '&lt;').replace(/>/g, '&gt;').replace(/"/g, '&quot;').replace(/'/g, '&apos;');
181                 }
182
183                 function new_note(index) {
184                         var public = false;
185                         var title = '';
186                         var value = '';
187                         var edit_mode; // for clarity
188                         var label_text;
189                         var button_accesskey;
190
191                         if (typeof index != 'undefined') {
192                                 edit_mode = true;
193                                 public = get_bool(g.notes[index].pub());
194                                 title = xml_encode(g.notes[index].title());
195                                 value = xml_encode(g.notes[index].value());
196                                 label_text = $('serialStrings').getString('staff.serial.notes.edit_note.label');
197                                 button_accesskey = $('serialStrings').getString('staff.serial.notes.edit_note.accesskey');
198                         } else {
199                                 label_text = $('catStrings').getString('staff.cat.copy_notes.new_note.add_note.label');
200                                 button_accesskey = $('catStrings').getString('staff.cat.copy_notes.new_note.add_note.accesskey');
201                         }
202
203                         try {
204                                 netscape.security.PrivilegeManager.enablePrivilege("UniversalXPConnect UniversalBrowserWrite");
205                                 value = value.replace(/\n/g, "&#10;"); // preserve newlines
206                                 var xml = '<groupbox xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul" flex="1"> \
207                                         <caption label="' + label_text + '"/> \
208                                         <grid flex="1"><columns><column/><column flex="1"/></columns> \
209                                                 <rows> \
210                                                         <row><label value="' + $('catStrings').getString('staff.cat.copy_notes.new_note.public') + '"/><checkbox id="pub" name="fancy_data" checked="' + public + '"/></row> \
211                                                         <row><label value="' + $('catStrings').getString('staff.cat.copy_notes.new_note.title') + '"/><textbox id="title" name="fancy_data" context="clipboard" value="' + title + '"/></row> \
212                                                         <row><label value="' + $('catStrings').getString('staff.cat.copy_notes.new_note.note') + '"/><textbox multiline="true" id="note" name="fancy_data" context="clipboard" value="' + value + '"/></row> \
213                                                         <row><spacer/><hbox> \
214                                                                 <button label="' + $('catStrings').getString('staff.cat.copy_notes.new_note.cancel.label') + '" name="fancy_cancel" accesskey="' + $('catStrings').getString('staff.cat.copy_notes.new_note.cancel.accesskey') + '"/> \
215                                                                 <button label="' + label_text + '" accesskey="' + button_accesskey + '" name="fancy_submit"/></hbox></row> \
216                                                 </rows></grid></groupbox>';
217                                 //g.data.init({'via':'stash'});
218                                 //g.data.temp_note_xml = xml; g.data.stash('temp_note_xml');
219                                 JSAN.use('util.window'); var win = new util.window();
220                                 var fancy_prompt_data = win.open(
221                                         urls.XUL_FANCY_PROMPT,
222                                         //+ '?xml_in_stash=temp_note_xml'
223                                         //+ '&focus=' + window.escape('title')
224                                         //+ '&title=' + window.escape('Add Note'),
225                                         'fancy_prompt', 'chrome,resizable,modal,width=700,height=500',
226                                         { 'xml' : xml, 'focus' : 'title', 'title' : label_text }
227                                 );
228                                 //g.data.init({'via':'stash'});
229                                 if (fancy_prompt_data.fancy_status == 'complete') {
230                                         //alert(js2JSON(g.data.fancy_prompt_data));
231                                         var note;
232                                         if (edit_mode) {
233                                                 note = g.notes[index];
234                                         } else {
235                                                 note = new g.constructor();
236                                                 note.isnew(1);
237                                         }
238                                         note.title( fancy_prompt_data.title );
239                                         note.value( fancy_prompt_data.note );
240                                         note.pub( get_bool( fancy_prompt_data.pub ) ? get_db_true() : get_db_false() );
241                                         note[g.object_type]( g.object_id );
242                                         var r = g.network.simple_request('FM_'+g.function_type+'_UPDATE',[ ses(), note ]);
243                                         if (typeof r.ilsevent != 'undefined') throw(r);
244                                         setTimeout(function() {
245                                                 refresh();},0
246                                         );
247                                 }
248                         } catch(E) {
249                                 g.error.standard_unexpected_error_alert($('catStrings').getString('staff.cat.copy_notes.new_note.error'),E);
250                         }
251                 }
252
253         ]]>
254         </script>
255
256         <messagecatalog id="catStrings" src="/xul/server/locale/<!--#echo var='locale'-->/cat.properties" />
257         <messagecatalog id="serialStrings" src="/xul/server/locale/<!--#echo var='locale'-->/serial.properties" />
258
259         <stack hidden="true" id="note_template" flex="1">
260                 <vbox flex="1" style="background-color: black; margin:3px"/>
261                 <vbox flex="1" style="background-color: #FFDE00; -moz-border-radius-topright: 35px; border: 2px groove ThreeDFace; margin:3px;" >
262                         <hbox>
263                                 <description name="title" style="font-weight: bold"/>
264                                 <spacer flex="1"/>
265                                 <description name="create_date" style="font-weight: bold"/>
266                                 <description name="pub" style="font-weight: bold"/>
267                         </hbox>
268                         <description style="white-space: pre-wrap;" name="value"/>
269                 </vbox>
270         </stack>
271
272         <vbox flex="1" class="my_overflow" id="notes_panel">
273         </vbox>
274
275
276 </window>
277