1 dojo.require("dojo.string");
5 function n(name, ctx) { return dojo.query("[name='" + name + "']", ctx)[0]; }
7 function ListRenderer() {
10 this.render = function() {
11 for (var i = 0; i < this.streams.length; i++) {
12 var stream = this.streams[i];
14 if (!this.users_by_stream[stream.id()])
15 continue; /* no users on this stream */
17 var list = dojo.clone(this.list_template);
18 n("title", list).innerHTML = this.mvr.title();
19 n("issuance_label", list).innerHTML = this.issuance.label();
20 n("distribution_holding_lib", list).innerHTML =
21 stream.distribution().holding_lib().shortname();
22 n("distribution_label", list).innerHTML =
23 stream.distribution().label();
24 if (stream.routing_label()) {
25 n("stream_routing_label", list).innerHTML =
26 stream.routing_label();
28 n("stream_routing_label", list), "inline"
31 n("stream_id", list).innerHTML = stream.id();
32 openils.Util.show(n("stream_id_container", list), "inline");
35 this.render_users(stream, list);
40 {"style": "page-break-after: always"}, this.target, "last"
44 dojo.place(list, this.target, "last");
47 return this; /* for chaining */
50 this.render_users = function(stream, list) {
51 for (var i = 0; i < this.users_by_stream[stream.id()].length; i++) {
52 var user = this.users_by_stream[stream.id()][i];
53 var node = dojo.clone(this.user_template);
56 n("barcode", node).innerHTML = user.reader().card().barcode();
57 n("name", node).innerHTML = dojo.string.substitute(
59 user.reader().family_name(),
60 user.reader().first_given_name(),
61 user.reader().second_given_name()
62 ].map(function(n) { return n || ""; })
64 n("ou", node).innerHTML = user.reader().home_ou().shortname();
65 openils.Util.show(n("reader_container", node), "inline");
66 } else if (user.department()) {
67 n("department", node).innerHTML = user.department();
68 openils.Util.show(n("department_container", node), "inline");
72 n("note", node).innerHTML = user.note();
73 openils.Util.show(n("note_container", node), "inline");
76 dojo.place(node, n("users", list), "last");
80 this.print = function() {
81 this.print_target.print();
84 this._sort_users = function() {
85 this.users_by_stream = {};
88 var key = user.stream();
89 if (!self.users_by_stream[key])
90 self.users_by_stream[key] = [];
91 self.users_by_stream[key].push(user);
96 /* Unfortunately, when we print the main window with dijits
97 * wrapping everything, the page-break-* CSS properties don't work
98 * inside of there, so we need an iframe to print from.
100 this._prepare_iframe = function() {
101 var iframe = dojo.create(
103 "src": "", "width": "100%", "height": "500", "frameborder": 0
104 }, "iframe_in_here", "only"
107 iframe.contentWindow.document.open();
108 iframe.contentWindow.document.write(
109 "<html><head><style type='text/css'>" +
110 ".item-title { font-size: 130%; font-weight: bold; }\n" +
111 ".item-issuance-label { font-size: 120%; }\n" +
112 ".item-dist-and-stream { font-size: 110%; }\n" +
113 ".hidden { display: none; }\n" +
114 "</style></head>\n<body></body></html>"
116 iframe.contentWindow.document.close();
117 this.target = iframe.contentWindow.document.body;
118 this.print_target = iframe.contentWindow;
121 this._init = function(data) {
122 this.user_template = dojo.byId("user_template");
123 this.user_template.removeAttribute("id");
124 this.user_template.parentNode.removeChild(this.user_template);
126 this.list_template = dojo.byId("list_template");
127 this.list_template.removeAttribute("id");
128 this.list_template.parentNode.removeChild(this.list_template);
130 dojo.mixin(this, data);
133 this._prepare_iframe();
136 this._init.apply(this, arguments);
139 openils.Util.addOnLoad(
143 "This interface is not designed for use outside " +
144 "the staff client." /* XXX i18n */
147 list_renderer = new ListRenderer(xulG.routing_list_data);
148 list_renderer.render().print();