1 if (!dojo._hasResource["openils.widget.XULTermLoader"]) {
2 dojo._hasResource["openils.widget.XULTermLoader"] = true;
4 dojo.provide("openils.widget.XULTermLoader");
5 dojo.require("openils.XUL");
6 dojo.requireLocalization("openils.widget", "XULTermLoader");
9 "openils.widget.XULTermLoader", [dijit.layout.ContentPane], {
10 "constructor": function(args) {
13 this._ = openils.widget.XULTermLoader.localeStrings;
15 /* XXX Totally arbitrary defaults. Keeping them low for now
16 * since all search terms have to be turned into a URL.
17 * There will need to be a better long term solution.
19 if (!this.args.fileSizeLimit)
20 this.args.fileSizeLimit = 2048;
21 if (!this.args.termLimit)
22 this.args.termLimit = 100;
24 "build": function(callback) {
27 this.domNode = dojo.create("span");
28 this.labelNode = dojo.create(
30 "innerHTML": this._.LABEL_TEXT,
31 "style": "padding-right: 8px;"
32 }, this.domNode, "last"
34 this.countNode = dojo.create(
35 "span", {"innerHTML": this.terms.length},
36 this.labelNode, "first"
38 if (window.parent.IEMBEDXUL) {
39 this.buttonNode = dojo.create(
42 "innerHTML": this._.BUTTON_TEXT,
43 "onchange": function(evt) { self.loadTerms(evt); }
48 this.buttonNode = dojo.create(
50 "innerHTML": this._.BUTTON_TEXT,
51 "onclick": function() { self.loadTerms(); }
57 if (this.args.parentNode)
58 dojo.place(this.domNode, this.args.parentNode, "last");
62 "updateCount": function() {
63 var value = this.attr("value");
64 if (dojo.isArray(value))
65 this.terms = this.attr("value");
66 this.countNode.innerHTML = this.terms.length;
69 this.buttonNode.focus();
71 "loadTerms": function(evt) {
73 if (this.terms.length >= this.args.termLimit) {
74 alert(this._.TERM_LIMIT);
80 function updateTermList() {
81 if (data.length + self.terms.length >=
82 self.args.termLimit) {
83 alert(self._.TERM_LIMIT_SOME);
84 var can = self.args.termLimit - self.terms.length;
86 self.terms = self.terms.concat(data.slice(0, can));
88 self.terms = self.terms.concat(data);
90 self.attr("value", self.terms);
94 if (evt && window.IAMBROWSER) {
95 var reader = new FileReader();
96 reader.onloadend = function(evt) {
98 this.parseCSV ? "parseAsCSV" : "parseUnimaginatively"
102 reader.readAsText(evt.target.files[0]);
105 this.parseCSV ? "parseAsCSV" : "parseUnimaginatively"
107 openils.XUL.contentFromFileOpenDialog(
108 this._.CHOOSE_FILE, this.args.fileSizeLimit
118 "parseAsCSV": function(data) {
119 return this.parseUnimaginatively(data).
122 return o.match(/^".+"$/) ? o.slice(1,-1) : o;
126 function(o) { return Boolean(o.match(/^\d+$/)); }
129 "parseUnimaginatively": function(data) {
130 if (!data) return [];
131 else return data.split("\n").
132 filter(function(o) { return o.length > 0; }).
133 map(function(o) {return o.replace("\r","").split(",")[0];}).
134 filter(function(o) { return o.length > 0; });
139 openils.widget.XULTermLoader.localeStrings =
140 dojo.i18n.getLocalization("openils.widget", "XULTermLoader");