2 Copyright (C) 2000-2004 SKYRIX Software AG
4 This file is part of OpenGroupware.org.
6 OGo is free software; you can redistribute it and/or modify it under
7 the terms of the GNU Lesser General Public License as published by the
8 Free Software Foundation; either version 2, or (at your option) any
11 OGo is distributed in the hope that it will be useful, but WITHOUT ANY
12 WARRANTY; without even the implied warranty of MERCHANTABILITY or
13 FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public
14 License for more details.
16 You should have received a copy of the GNU Lesser General Public
17 License along with OGo; see the file COPYING. If not, write to the
18 Free Software Foundation, 59 Temple Place - Suite 330, Boston, MA
23 #include <NGObjWeb/WOxElemBuilder.h>
26 This builder builds various elements from the WEExtensions library.
27 Note that there are other builders for WEExtensions elements as well !!
29 All tags are mapped into the <var:> namespace (XMLNS_OD_BIND).
32 <var:js-clipboard .../> maps to JSClipboard
33 <var:js-menu .../> maps to JSMenu
34 <var:js-menu-item .../> maps to JSMenuItem
35 <var:js-shiftclick ../> maps to JSShiftClick
37 <var:rich-string .../> maps to WERichString
38 <var:we-browser .../> maps to WEBrowser
39 <var:cal-field .../> maps to WECalendarField
40 <var:date-field .../> maps to WEDateField
41 <var:time-field .../> maps to WETimeField
43 <var:script-datefield/> maps to WEDateFieldScript
45 <var:tableview .../> maps to WETableView
46 <var:tbutton .../> maps to WETableViewButtonMode
47 <var:ttitle .../> maps to WETableViewTitleMode
48 <var:tfooter .../> maps to WETableViewFooterMode
49 <var:tgroup .../> maps to WETableViewGroupMode
50 <var:td .../> maps to WETableData
51 <var:th .../> maps to WETableHeader
53 <var:tabview .../> maps to WETabView
54 <var:tab .../> maps to WETabItem
56 <var:pageview .../> maps to WEPageView
57 <var:page .../> maps to WEPageItem
58 <var:pagelink .../> maps to WEPageLink
60 <var:we-collapsible .../> maps to WECollapsibleComponentContent
61 <var:we-collapsible-action .../> maps to WECollapsibleAction
62 <var:we-collapsible-title .../> maps to WECollapsibleTitleMode
63 <var:we-collapsible-content .../> maps to WECollapsibleContentMode
65 <var:switch .../> maps to WESwitch
66 <var:case .../> maps to WECase
67 <var:default .../> maps to WEDefaultCase
69 <var:treeview .../> maps to WETreeView
70 <var:tree-header .../> maps to WETreeHeader
71 <var:tree-data .../> maps to WETreeData
73 <var:hspan-matrix .../> maps to WEHSpanTableMatrix
74 <var:vspan-matrix .../> maps to WEVSpanTableMatrix
75 <var:matrix-cell .../> maps to WETableMatrixContent
76 <var:matrix-empty .../> maps to WETableMatrixNoContent
77 <var:matrix-label .../> maps to WETableMatrixLabel
79 <var:if-ctx-key .../> maps to WEContextConditional
80 <var:ctx-key .../> maps to WEContextKey
81 <var:if-qualifier .../> maps to WEQualifierConditional
83 <var:redirect .../> maps to WERedirect
85 WEComponentValue : WODynamicElement
88 @interface WExExtElemBuilder : WOxTagClassElemBuilder
94 #include <SaxObjC/XMLNamespaces.h>
97 @implementation WExExtElemBuilder
99 - (Class)classForElement:(id<DOMElement>)_element {
104 if (![[_element namespaceURI] isEqualToString:XMLNS_OD_BIND])
107 tagName = [_element tagName];
108 if ((tl = [tagName length]) < 2)
111 c1 = [tagName characterAtIndex:0];
114 case 'c': /* starting with 'c' */
116 if ([tagName isEqualToString:@"cal-field"])
117 return NSClassFromString(@"WECalendarField");
120 if ([tagName isEqualToString:@"case"])
121 return NSClassFromString(@"WECase");
122 if ([tagName isEqualToString:@"ctx-key"])
123 return NSClassFromString(@"WEContextKey");
129 if ([tagName isEqualToString:@"date-field"])
130 return NSClassFromString(@"WEDateField");
133 if ([tagName isEqualToString:@"default"])
134 return NSClassFromString(@"WEDefaultCase");
140 if ([tagName isEqualToString:@"hspan-matrix"])
141 return NSClassFromString(@"WEHSpanTableMatrix");
147 if ([tagName isEqualToString:@"if-ctx-key"])
148 return NSClassFromString(@"WEContextConditional");
151 if ([tagName isEqualToString:@"if-qualifier"])
152 return NSClassFromString(@"WEQualifierConditional");
156 case 'j': /* starting with 'j' */
157 if ([tagName hasPrefix:@"js-"]) {
158 if (tl < 6) return Nil;
160 if ([tagName isEqualToString:@"js-clipboard"])
161 return NSClassFromString(@"JSClipboard");
162 if ([tagName isEqualToString:@"js-menu"])
163 return NSClassFromString(@"JSMenu");
164 if ([tagName isEqualToString:@"js-menu-item"])
165 return NSClassFromString(@"JSMenuItem");
167 if ([tagName isEqualToString:@"js-shiftclick"])
168 return NSClassFromString(@"JSShiftClick");
174 if ([tagName isEqualToString:@"matrix-cell"])
175 return NSClassFromString(@"WETableMatrixContent");
178 if ([tagName isEqualToString:@"matrix-empty"])
179 return NSClassFromString(@"WETableMatrixNoContent");
180 if ([tagName isEqualToString:@"matrix-label"])
181 return NSClassFromString(@"WETableMatrixLabel");
187 if (tl == 8 && [tagName isEqualToString:@"pagelink"])
188 return NSClassFromString(@"WEPageLink");
189 if (tl == 4 && [tagName isEqualToString:@"page"])
190 return NSClassFromString(@"WEPageItem");
191 if (tl == 8 && [tagName isEqualToString:@"pageview"])
192 return NSClassFromString(@"WEPageView");
196 case 'r': /* starting with 'r' */
198 if ([tagName isEqualToString:@"rich-string"])
199 return NSClassFromString(@"WERichString");
202 if ([tagName isEqualToString:@"redirect"])
203 return NSClassFromString(@"WERedirect");
207 case 's': /* starting with 's' */
209 if ([tagName isEqualToString:@"script-datefield"])
210 return NSClassFromString(@"WEDateFieldScript");
213 if ([tagName isEqualToString:@"switch"])
214 return NSClassFromString(@"WESwitch");
218 case 't': { /* starting with 't' */
221 c2 = [tagName characterAtIndex:1];
224 if (c2 == 'd') return NSClassFromString(@"WETableData");
225 if (c2 == 'h') return NSClassFromString(@"WETableHeader");
227 if (tl == 3 && c2 == 'a') {
228 if ([tagName characterAtIndex:2] == 'b')
229 return NSClassFromString(@"WETabItem");
234 if ([tagName isEqualToString:@"tableview"])
235 return NSClassFromString(@"WETableView");
237 if ([tagName isEqualToString:@"tabview"])
238 return NSClassFromString(@"WETabView");
240 if (c2 == 'r' && tl > 7) {
241 if ([tagName isEqualToString:@"tree-data"])
242 return NSClassFromString(@"WETreeData");
243 if ([tagName isEqualToString:@"treeview"])
244 return NSClassFromString(@"WETreeView");
245 if ([tagName isEqualToString:@"tree-header"])
246 return NSClassFromString(@"WETreeHeader");
249 if ([tagName isEqualToString:@"tbutton"])
250 return NSClassFromString(@"WETableViewButtonMode");
251 if ([tagName isEqualToString:@"ttitle"])
252 return NSClassFromString(@"WETableViewTitleMode");
253 if ([tagName isEqualToString:@"tfooter"])
254 return NSClassFromString(@"WETableViewFooterMode");
255 if ([tagName isEqualToString:@"tgroup"])
256 return NSClassFromString(@"WETableViewGroupMode");
258 if ([tagName isEqualToString:@"time-field"])
259 return NSClassFromString(@"WETimeField");
266 if ([tagName isEqualToString:@"vspan-matrix"])
267 return NSClassFromString(@"WEVSpanTableMatrix");
273 if ([tagName isEqualToString:@"we-browser"])
274 return NSClassFromString(@"WEBrowser");
276 if ([tagName hasPrefix:@"we-collapsible"]) {
278 return NSClassFromString(@"WECollapsibleComponentContent");
280 if ([tagName isEqualToString:@"we-collapsible-action"])
281 return NSClassFromString(@"WECollapsibleAction");
282 if ([tagName isEqualToString:@"we-collapsible-title"])
283 return NSClassFromString(@"WECollapsibleTitleMode");
284 if ([tagName isEqualToString:@"we-collapsible-content"])
285 return NSClassFromString(@"WECollapsibleContentMode");
294 @end /* WExExtElemBuilder */