1 dojo.require("dojo.string");
2 dojo.require("dijit.form.Button");
6 function n(name, ctx) { return dojo.query("[name='" + name + "']", ctx)[0]; }
8 function ListRenderer() {
11 this.render = function() {
12 var rendered_something = false;
14 for (var i = 0; i < this.streams.length; i++) {
15 var stream = this.streams[i];
17 if (!this.users_by_stream[stream.id()])
18 continue; /* no users on this stream */
20 var list = dojo.clone(this.list_template);
21 n("title", list).innerHTML = this.mvr.title();
22 n("issuance_label", list).innerHTML = this.issuance.label();
23 n("distribution_holding_lib", list).innerHTML =
24 stream.distribution().holding_lib().shortname();
25 n("distribution_label", list).innerHTML =
26 stream.distribution().label();
27 if (stream.routing_label()) {
28 n("stream_routing_label", list).innerHTML =
29 stream.routing_label();
31 n("stream_routing_label", list), "inline"
34 n("stream_id", list).innerHTML = stream.id();
35 openils.Util.show(n("stream_id_container", list), "inline");
38 this.render_users(stream, list);
40 if (rendered_something) {
43 {"style": "page-break-after: always"}, this.target, "last"
47 dojo.place(list, this.target, "last");
48 rendered_something = true;
51 return this; /* for chaining */
54 this._render_reader_addresses = function(reader, node) {
56 ["mailing", "billing"].forEach(
58 var addr = reader[addr_type + "_address"]();
59 if (!addr || !addr.valid() || used_ids[addr.id()])
62 used_ids[addr.id()] = true;
64 var prefix = addr_type + "_address_";
65 var container = n(prefix + "container", node);
67 openils.Util.show(container);
69 ["street1", "street2", "city", "county", "state",
70 "country", "post_code"].forEach(
72 var field = prefix + f;
73 var target = n(field, node);
75 target.innerHTML = addr[f]();
82 this.render_users = function(stream, list) {
83 for (var i = 0; i < this.users_by_stream[stream.id()].length; i++) {
84 var user = this.users_by_stream[stream.id()][i];
85 var node = dojo.clone(this.user_template);
88 n("barcode", node).innerHTML = user.reader().card().barcode();
89 n("name", node).innerHTML = dojo.string.substitute(
91 user.reader().family_name(),
92 user.reader().first_given_name(),
93 user.reader().second_given_name()
94 ].map(function(n) { return n || ""; })
96 n("ou", node).innerHTML = user.reader().home_ou().shortname();
98 this._render_reader_addresses(user.reader(), node);
100 openils.Util.show(n("reader_container", node), "inline");
101 } else if (user.department()) {
102 n("department", node).innerHTML = user.department();
103 openils.Util.show(n("department_container", node), "inline");
107 n("note", node).innerHTML = user.note();
108 openils.Util.show(n("note_container", node), "inline");
111 dojo.place(node, n("users", list), "last");
115 this.print = function() {
116 this.print_target.print();
119 this._sort_users = function() {
120 this.users_by_stream = {};
123 var key = user.stream();
124 if (!self.users_by_stream[key])
125 self.users_by_stream[key] = [];
126 self.users_by_stream[key].push(user);
131 /* Unfortunately, when we print the main window with dijits
132 * wrapping everything, the page-break-* CSS properties don't work
133 * inside of there, so we need an iframe to print from.
135 this._prepare_iframe = function() {
136 var iframe = dojo.create(
138 "src": "", "width": "100%", "height": "500", "frameborder": 0
139 }, "iframe_in_here", "only"
142 iframe.contentWindow.document.open();
143 iframe.contentWindow.document.write(
144 "<html><head><link rel='stylesheet' href='" +
145 dojo.byId("serials_stylesheet_link").href +
146 "' type='text/css' />" +
147 "</style></head>\n<body></body></html>"
149 iframe.contentWindow.document.close();
150 this.target = iframe.contentWindow.document.body;
151 this.print_target = iframe.contentWindow;
154 this._init = function(data) {
155 this.user_template = dojo.byId("user_template");
156 this.user_template.removeAttribute("id");
157 this.user_template.parentNode.removeChild(this.user_template);
159 this.list_template = dojo.byId("list_template");
160 this.list_template.removeAttribute("id");
161 this.list_template.parentNode.removeChild(this.list_template);
163 dojo.mixin(this, data);
166 this._prepare_iframe();
169 this._init.apply(this, arguments);
172 openils.Util.addOnLoad(
176 "This interface is not designed for use outside " +
177 "the staff client." /* XXX i18n */
180 list_renderer = new ListRenderer(xulG.routing_list_data);
181 list_renderer.render().print();