How about implementing XHTML → JSON as a filter? Either with existing modules
or with something dedicated to autoindex.
TimOn 05/08/2013 7:26 Sven Dowideit wrote:
Hello Everyone,
I'm scratching an itch to make mod_autoindex output what I want, and
would love to know what, if anything would make the changes merge-able.
In its simplest form, I'd like apache to be able to give me an index in
JSON format - previously, I've parsed the html in javascript, but
somehow I think I can do better.
While I was reading the code (today) it occurred to me that there are a
lot of if statements throughout, which could be eliminated by moving
(obscuring) the output strings to a switchable container (right now I'm
using arrays of strings for my simplicity - I don't know this codebase
any better than you know me :)
so here is the kind of thing I started to do (partial diff, its all
really kind of dull - I've extracted the HTML/XHTML strings into another
similarly replaceable array):
#define STRING_INDEX_START 0
#define STRING_INDEX_END 1
const char *table_index_string[] = {
" <table>\n <tr>",
"</table>\n"
};
const char *table_index_string_stylesheet[] = {
" <table id=\"indexlist\">\n <tr class=\"indexhead\">",
"</table>\n"
};
const char *fancy_index_string[] = {
"<pre>",
"</pre>\n"
};
const char *default_index_string[] = {
"<ul>",
"</ul>\n"
};
/* set the default string set (choose alternatives based on user conf
options) */
const char **index_string = default_index_string;
@@ -1873,23 +1872,14 @@ static void output_directories(struct ent **ar,
int n,
}
}
if (autoindex_opts & TABLE_INDEXING) {
- ap_rvputs(r, breakrow, "</table>\n", NULL);
+ ap_rputs(breakrow, r);
}
else if (autoindex_opts & FANCY_INDEXING) {
if (!(autoindex_opts & SUPPRESS_RULES)) {
- ap_rputs("<hr", r);
- if (autoindex_opts & EMIT_XHTML) {
- ap_rputs(" /", r);
- }
- ap_rputs("></pre>\n", r);
- }
- else {
- ap_rputs("</pre>\n", r);
+ ap_rputs(output_string[STRING_HR], r);
}
}
- else {
- ap_rputs("</ul>\n", r);
- }
+ ap_rputs(index_string[STRING_INDEX_END], r);
}
Cheers
Sven