I'm currently working my way through the admin pages, starting with
reinstating the ShowCache.aspx page. In the ShowPage.aspx.cs file, there are
some constants defined that form the root of the ID for a list of elements.
These constants are then reused to create some JavaScript that works on the
same list of elements, like this:


private const string keyPrefix = "keyRow";
private const string keyDataPrefix = "keyData";

private void ShowKeys()
{
    WriteFilterScript();
    Response.Write("<p>Search for key: <input id=\"Filter\"
onkeyup=\"javascript:FilterChanged()\" length=\"60\"/></p>");
    int id = 0;
    ArrayList keys = new ArrayList();
    keys.AddRange(FlexWikiWebApplication.Cache.Keys);
    keys.Sort();
    Response.Write("<table cellpadding=\"2\" cellspacing=\"2\"
class=\"TableClass\">");
    Response.Write("<tr>\r\n<td><b>Cache Key</b></td>");
    Response.Write("<td><b>Cache Item Type</b></td>\r\n<tr>");
    foreach (string key in keys)
    {
        Response.Write(string.Format("<tr id=\"{0}{1}\">",
        keyPrefix, id));
        Response.Write(string.Format(
            "<td class=\"{0}\"><span id=\"{1}{2}\">{3}</span></td>",
            (((id & 1) == 0) ? "SearchOddRow" : "SearchEvenRow"),
keyDataPrefix, id, key));
        Response.Write(string.Format(
            "<td class=\"{0}\"><span>{1}</span></td>",
            (((id & 1) == 0) ? "SearchOddRow" : "SearchEvenRow"),
            FlexWikiWebApplication.Cache[key].GetType().ToString()));
        Response.Write("</tr>");
        id++;
    }

    Response.Write("</table>");
}

The WriteFilterScript method looks like this:

private void WriteFilterScript()
{
    Response.Write("<script language=\"javascript\">");
    Response.Write(@"
function FilterChanged()
{
    var filter = filterControl.value;
    var id = 0;
    while (true)
    {
        var keyDataPrefix = """ + keyDataPrefix + @""" + id;
        var keyPrefix = """ + keyPrefix + @""" + id;
        var valueElement = document.getElementById(keyDataPrefix);
        if (valueElement == null)
            break;
        var show = true;
        var test = """";
        try {
            if (!valueElement.textContent)
                test = """" + valueElement.innerText.toUpperCase();
            else
                test = """" + valueElement.textContent.toUpperCase();
        } catch (e) {
            test = """" + valueElement.innerText.toUpperCase();
        }
        if (filter != """" && test.indexOf(filter.toUpperCase()) < 0)
            show = false;
        var styleString = show ? """" : ""none"";
        var keyPrefixElement = document.getElementById(keyPrefix);
        keyPrefixElement.style.display = styleString;
        id++;
    }
}
");

Personally, I'd rather see this JS in an external file that can be cached by
the server and cleans up the CS file, but that would require repeating the
constants somewhere else. Does anyone have any opinions one way or another
about the benefits of external JS and whether it outweighs having the
constants in a single place?
-------------------------------------------------------------------------
This SF.net email is sponsored by: Splunk Inc.
Still grepping through log files to find problems?  Stop.
Now Search log events and configuration files using AJAX and a browser.
Download your FREE copy of Splunk now >>  http://get.splunk.com/
_______________________________________________
Flexwiki-users mailing list
Flexwiki-users@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/flexwiki-users

Reply via email to