source: trunk/gsdl/src/recpt/hlistbrowserclass.cpp@ 11153

Last change on this file since 11153 was 10947, checked in by jrm21, 18 years ago

If we aren't using tables (ie format string doesn't start with <td>)
then wrap the h/v list with <div> ... </div>.
Also add class=v_list | h_list respectively to opening <table>/<div> tags.

  • Property svn:executable set to *
  • Property svn:keywords set to Author Date Id Revision
File size: 5.7 KB
Line 
1/**********************************************************************
2 *
3 * hlistbrowserclass.cpp --
4 * Copyright (C) 1999 The New Zealand Digital Library Project
5 *
6 * A component of the Greenstone digital library software
7 * from the New Zealand Digital Library Project at the
8 * University of Waikato, New Zealand.
9 *
10 * This program is free software; you can redistribute it and/or modify
11 * it under the terms of the GNU General Public License as published by
12 * the Free Software Foundation; either version 2 of the License, or
13 * (at your option) any later version.
14 *
15 * This program is distributed in the hope that it will be useful,
16 * but WITHOUT ANY WARRANTY; without even the implied warranty of
17 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
18 * GNU General Public License for more details.
19 *
20 * You should have received a copy of the GNU General Public License
21 * along with this program; if not, write to the Free Software
22 * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
23 *
24 *********************************************************************/
25
26#include "hlistbrowserclass.h"
27#include <assert.h>
28#include "OIDtools.h"
29
30hlistbrowserclass::hlistbrowserclass () {
31}
32
33hlistbrowserclass::~hlistbrowserclass () {
34}
35
36// returns the name that specifies the browserclass type
37text_t hlistbrowserclass::get_browser_name () {
38 return "HList";
39}
40
41browserclass* hlistbrowserclass::clone()
42{
43 return new hlistbrowserclass();
44}
45
46void hlistbrowserclass::load_metadata_defaults (text_tset &metadata) {
47 metadata.insert ("doctype");
48}
49
50text_t hlistbrowserclass::get_default_formatstring () {
51 return "[link][highlight][Title][/highlight][/link]";
52}
53
54// need to change OID to it's child
55void hlistbrowserclass::processOID (cgiargsclass &args, recptproto *collectproto,
56 ostream &logout) {
57
58 text_t OID = args["d"];
59 bool is_classify = false;
60 if (OID.empty()) {
61 is_classify = true;
62 OID = args["cl"];
63 }
64
65 FilterResponse_t response;
66 text_tset metadata;
67 metadata.insert ("childtype");
68 text_t classifytype = "Invisible";
69 text_tarray OIDs;
70
71 while (classifytype == "Invisible" || classifytype == "HList") {
72 OIDs.erase (OIDs.begin(), OIDs.end());
73
74 OIDs.push_back (OID);
75 OIDs.push_back (OID + ".fc");
76
77 get_info (OIDs, args["c"], args["l"], metadata, false, collectproto, response, logout);
78
79 OID = response.docInfo[1].OID;
80 classifytype = response.docInfo[1].metadata["childtype"].values[0];
81 }
82 if (is_classify) args["cl"] = OID;
83 else args["d"] = OID;
84}
85
86int hlistbrowserclass::output_section_group (ResultDocInfo_t &section, cgiargsclass &args,
87 const text_t& collection, int colnumber,
88 format_t *formatlistptr, bool use_table,
89 text_tset &metadata, bool &getParents,
90 recptproto *collectproto, displayclass &disp,
91 outconvertclass &outconvert, ostream &textout,
92 ostream &logout) {
93
94 // expanded contents are going to cause some nasty recursions
95 // so we'll only continue if being passed the current section
96 if ((args["gc"] == 1) && (section.OID != args["d"])) return 0;
97
98 // get all siblings
99 FilterResponse_t response;
100 text_t &arg_cl = args["cl"];
101 get_children (section.OID + ".pr", args["c"], args["l"], metadata, getParents,
102 collectproto, response, logout);
103
104 /* use_table is set to true if the format string starts with <td> */
105 if (use_table || colnumber > 0) {
106 textout << outconvert << "<table><tr><td>";
107 // get tab size
108 text_t tab; int itab;
109 disp.expandstring (displayclass::defaultpackage, "_tabwidth_", tab);
110 itab = tab.getint();
111 if (colnumber > 0) textout << outconvert << disp
112 << "<img src=\"_httpimg_/space.gif\" width="
113 << (itab*colnumber) << ">";
114 textout << outconvert << "</td>\n";
115 }
116
117 if (use_table)
118 textout << outconvert << "<table class=\"h_list\"><tr>\n";
119 else
120 textout << outconvert << "<div class=\"h_list\">\n";
121
122 ResultDocInfo_tarray::iterator tsibling = response.docInfo.begin();
123 ResultDocInfo_tarray::iterator esibling = response.docInfo.end();
124
125 text_t icon, link;
126
127 while (tsibling != esibling) {
128
129 bool highlight = false;
130 text_t &doctype = (*tsibling).metadata["doctype"].values[0];
131
132 if ((*tsibling).OID == section.OID) {
133 link.clear();
134 highlight = true;
135 } else {
136 link = "<a href=\"_httpdocument_";
137 if (doctype == "classify")
138 link += "&amp;cl=" + (*tsibling).OID + "\">";
139 else {
140 link += "&amp;cl=" + arg_cl + "&amp;d=" + (*tsibling).OID;// + "\">";
141 // [modification to allow default document detach settings -- kjdon]
142 if (args["xx"]=="1") {
143 // documents should be detached
144 link += "&amp;x=1\" target=\"_blank\">";
145 } else {
146 link += "\">";
147 }
148 }
149 }
150
151 text_tmap options;
152 options["link"] = link;
153 options["icon"] = icon;
154 if (highlight) options["highlight"] = "1";
155 else options["highlight"] = "0";
156
157 text_t fmt_str=get_formatted_string (collection, collectproto,
158 *tsibling, disp, formatlistptr,
159 options, logout);
160
161 textout << outconvert << "<span class=\"h_item\">" << disp << fmt_str << "</span>\n";
162 ++tsibling;
163 }
164
165 if (use_table)
166 textout << outconvert << "</tr></table>\n";
167 else
168 textout << outconvert << "</div>\n";
169
170 if (use_table || colnumber > 0) textout << outconvert << "</tr></table>\n";
171
172 return 0;
173}
174
175int hlistbrowserclass::output_section_group (FilterResponse_t &/*sections*/, cgiargsclass &/*args*/,
176 const text_t &/*collection*/, int /*colnumber*/,
177 format_t * /*formatlistptr*/, bool /*use_table*/,
178 text_tset &/*metadata*/, bool &/*getParents*/,
179 recptproto * /*collectproto*/, displayclass &/*disp*/,
180 outconvertclass &/*outconvert*/, ostream &/*textout*/,
181 ostream &/*logout*/) {
182 return 0;
183}
Note: See TracBrowser for help on using the repository browser.