summaryrefslogtreecommitdiff
path: root/UI
diff options
context:
space:
mode:
Diffstat (limited to 'UI')
-rw-r--r--UI/elements.html200
-rw-r--r--UI/gl-report.csv4
-rw-r--r--UI/gl-report.html36
3 files changed, 220 insertions, 20 deletions
diff --git a/UI/elements.html b/UI/elements.html
new file mode 100644
index 00000000..19570e62
--- /dev/null
+++ b/UI/elements.html
@@ -0,0 +1,200 @@
+<?lsmb
+ default_keys = ['id', 'class', 'title'] # Defaults for all attributes
+ input_keys = ['type', 'name', 'disabled', 'size', 'value'] # Defaults for input attributes
+
+ # ELEMENT DEFAULTS
+
+ #checkbox
+ checkbox_defaults = {
+ value = '1'
+ }
+
+ #file
+ file_defaults = {
+ size => '60'
+ }
+
+ #password
+ password_defaults = {
+ size = '60'
+ }
+
+ # text
+ text_defaults = {
+ size = '60',
+ maxlength = '255'
+ }
+
+ # textarea
+ textarea_defaults = {
+ rows = '5',
+ cols = '60'
+ }
+
+ #button
+ button_defaults = {
+ type = 'submit'
+ }
+
+?>
+
+<?lsmb # INPUT ELEMENT ?>
+<?lsmb BLOCK input ?>
+ <?lsmb input_defaults = {} # Some inputs have no defaults, so make sure everything is empty to start with. ?>
+ <?lsmb SWITCH element_data.type; # Merge in type-specific attributes.
+ CASE 'file';
+ input_type_keys = input_keys.merge(['accept']);
+ input_defaults = file_defaults;
+ CASE 'image';
+ input_type_keys = input_keys.merge(['alt', 'src']);
+ CASE ['checkbox'];
+ input_type_keys = input_keys.merge(['checked']);
+ input_defaults = checkbox_defaults;
+ CASE ['radio'];
+ input_type_keys = input_keys.merge(['checked']);
+ CASE ['password'];
+ input_defaults = password_defaults;
+ CASE 'text';
+ input_type_keys = input_keys.merge(['maxlength', 'readonly']);
+ input_defaults = text_defaults;
+ CASE;
+ input_type_keys = input_keys;
+ END;
+ ?>
+ <?lsmb PROCESS attributes # Process regular attributes.
+ attribute_data = element_data
+ attribute_defaults = input_defaults
+ element_keys = input_type_keys
+ element_type = 'input'
+ ?>
+ <?lsmb PROCESS custom_attributes # Process custom attributes.
+ custom_attribute_data=element_data.attributes
+ ?>
+ <input<?lsmb all_attributes ?><?lsmb all_custom_attributes ?> />
+<?lsmb END ?>
+
+<?lsmb # TEXTAREA ELEMENT ?>
+<?lsmb BLOCK textarea ?>
+ <?lsmb PROCESS attributes # Process regular attributes.
+ attribute_data=element_data
+ attribute_defaults = textarea_defaults
+ element_keys = ['name', 'cols', 'rows', 'disabled', 'readonly', 'tabindex', 'accesskey', 'value'] # Attributes that apply to textareas.
+ element_type = 'textarea'
+ ?>
+ <?lsmb PROCESS custom_attributes # Process custom attributes.
+ custom_attribute_data=element_data.attributes
+ ?>
+ <textarea<?lsmb all_attributes ?><?lsmb all_custom_attributes ?>><?lsmb element_data.text ?></textarea>
+<?lsmb END ?>
+
+<?lsmb # SELECT ELEMENT ?>
+<?lsmb BLOCK select ?>
+ <?lsmb PROCESS attributes # Process regular attributes.
+ attribute_data=element_data
+ attribute_defaults = {} # Make sure old defaults are cleared out.
+ element_keys=['name', 'size', 'multiple', 'disabled', 'accesskey', 'tabindex'] # Attributes that apply to selects.
+ element_type = 'select'
+ ?>
+ <?lsmb PROCESS custom_attributes # Process custom attributes.
+ custom_attribute_data=element_data.attributes
+ ?>
+ <select<?lsmb all_attributes ?><?lsmb all_custom_attributes ?>>
+ <?lsmb # Build options.
+ FOREACH option_data IN element_data.options;
+ PROCESS option;
+ END;
+ ?>
+ </select>
+<?lsmb END ?>
+
+<?lsmb # OPTION ELEMENT ?>
+<?lsmb BLOCK option ?>
+ <?lsmb # Selected is a special case -- no attribute key, so it's handled here.
+ IF option_data.defined('selected');
+ option_data.selected = " selected";
+ ELSE;
+ option_data.selected = "";
+ END;
+ ?>
+ <?lsmb PROCESS attributes # Process regular attributes.
+ attribute_data=option_data
+ element_keys=['tabindex', 'disabled', 'value'] # Attributes that apply to options.
+ element_type = 'option'
+ ?>
+ <?lsmb PROCESS custom_attributes # Process custom attributes.
+ custom_attribute_data=option_data.attributes
+ ?>
+ <option<?lsmb all_attributes ?><?lsmb all_custom_attributes ?><?lsmb option_data.selected ?>><?lsmb option_data.text ?></option>
+<?lsmb END ?>
+
+<?lsmb # BUTTON ELEMENT ?>
+<?lsmb BLOCK button ?>
+ <?lsmb PROCESS attributes # Process regular attributes.
+ attribute_data=element_data
+ attribute_defaults = button_defaults
+ element_keys=['name', 'value', 'accesskey', 'type', 'disabled', 'tabindex'] # Attributes that apply to buttons.
+ element_type = 'button'
+ ?>
+ <?lsmb PROCESS custom_attributes # Process custom attributes.
+ custom_attribute_data=element_data.attributes
+ ?>
+ <button<?lsmb all_attributes ?><?lsmb all_custom_attributes ?>><?lsmb element_data.text ?></button>
+<?lsmb END ?>
+
+<?lsmb # LABEL ELEMENT ?>
+<?lsmb BLOCK label ?>
+ <?lsmb PROCESS attributes
+ attribute_data=element_data
+ attribute_defaults = {} # Make sure old defaults are cleared out.
+ element_keys=['for'] # Attributes that apply to labels.
+ element_type = 'label'
+ ?>
+ <?lsmb PROCESS custom_attributes
+ custom_attribute_data=element_data.attributes
+ ?>
+ <label<?lsmb all_attributes ?><?lsmb all_custom_attributes ?>><?lsmb element_data.text ?></label>
+<?lsmb END ?>
+
+<?lsmb # REGULAR ATTRIBUTE PROCESSING -- all explicitly allowed attributes are processed here. ?>
+<?lsmb BLOCK attributes ?>
+ <?lsmb
+ all_attributes = ""
+ all_keys = default_keys.merge(element_keys) # Merge in attributes that apply to this element.
+ ?>
+ <?lsmb FOREACH element_attribute IN all_keys # Loop through each allowed attribute. ?>
+ <?lsmb
+ IF attribute_data.defined(element_attribute); # Add the attribute to the element if it's been set.
+ all_attributes = all_attributes _ " " _ element_attribute _ '="' _ attribute_data.${element_attribute} _ '"';
+ ELSIF attribute_defaults.defined(element_attribute); # Fall back to default value if one is supplied.
+ all_attributes = all_attributes _ " " _ element_attribute _ '="' _ attribute_defaults.${element_attribute} _ '"';
+ END;
+ ?>
+ <?lsmb END ?>
+ <?lsmb UNLESS attribute_data.defined('id') # id attribute should always be set, so auto-set it if it's not defined. ?>
+ <?lsmb element_id = "" ?>
+ <?lsmb # Labal id's default to [for]-label.
+ IF element_type == 'label' AND attribute_data.defined('for');
+ element_id = attribute_data.for _ "-label";
+ ELSIF ((element_type == 'input' AND attribute_data.type == 'radio') OR element_type == 'button') AND attribute_data.defined('name') AND attribute_data.defined('value');
+ element_id = attribute_data.name _ "-" _ attribute_data.value; # radios and buttons get name-value for uniqueness.
+ ELSIF (element_type == 'input' OR element_type == 'textarea' OR element_type == 'select') AND attribute_data.defined('name');
+ element_id = attribute_data.name;
+ END;
+ ?>
+ <?lsmb # Add the id if it's been generated. Replace underscores with dashes -- nicer CSS.
+ IF element_id;
+ all_attributes = ' id="' _ element_id.replace('[_]', '-') _ '"' _ all_attributes;
+ END;
+ ?>
+ <?lsmb END ?>
+<?lsmb END ?>
+
+<?lsmb # CUSTOM ATTRIBUTE PROCESSING -- any other attributes passed in the 'attributes' key are processed here. ?>
+<?lsmb BLOCK custom_attributes ?>
+ <?lsmb all_custom_attributes = "" ?>
+ <?lsmb # Loop through each attribute and add it to the custom attribute string.
+ FOREACH element_attribute IN custom_attribute_data;
+ all_custom_attributes = all_custom_attributes _ " " _ element_attribute.key _ '="' _ element_attribute.value _ '"';
+ END;
+ ?>
+<?lsmb END ?> \ No newline at end of file
diff --git a/UI/gl-report.csv b/UI/gl-report.csv
index 83dc27ce..fc2e4b16 100644
--- a/UI/gl-report.csv
+++ b/UI/gl-report.csv
@@ -1,3 +1,3 @@
-<?lsmb FOREACH column IN columns ?><?lsmb heading.$column ?><?lsmb IF NOT loop.last ?>~<?lsmb END ?><?lsmb END ?>
-<?lsmb FOREACH row IN rows ?><?lsmb FOREACH column IN columns ?><?lsmb row.$column ?><?lsmb IF NOT loop.last ?>~<?lsmb END ?><?lsmb END ?>
+<?lsmb FOREACH column IN columns ?><?lsmb IF heading.$column.text; heading.$column.text; ELSE; heading.$column; END ?><?lsmb IF NOT loop.last ?>~<?lsmb END ?><?lsmb END ?>
+<?lsmb FOREACH row IN rows ?><?lsmb FOREACH column IN columns ?><?lsmb IF row.$column.text; row.$column.text; ELSE; row.$column; END ?><?lsmb IF NOT loop.last ?>~<?lsmb END ?><?lsmb END ?>
<?lsmb END ?><?lsmb FOREACH column IN columns ?><?lsmb totals.$column ?><?lsmb IF NOT loop.last ?>~<?lsmb END ?><?lsmb END ?>
diff --git a/UI/gl-report.html b/UI/gl-report.html
index 69e2d866..031ef009 100644
--- a/UI/gl-report.html
+++ b/UI/gl-report.html
@@ -11,9 +11,7 @@
<meta name="robots" content="noindex,nofollow" />
</head>
-
-
-
+<?lsmb PROCESS elements.html ?>
<body>
<table width=100%>
@@ -28,8 +26,11 @@
<td>
<table width=100%>
<tr class="listheading">
-<?lsmb FOREACH column IN columns ?>
-<?lsmb heading.$column ?>
+<?lsmb FOREACH column IN columns ?><?lsmb IF heading.$column.href ?>
+<th class="listheading"><a class="listheading" href="<?lsmb heading.$column.href ?>"><?lsmb heading.$column.text ?></a></th>
+<?lsmb ELSE ?>
+<th class="listheading"><?lsmb heading.$column ?></th>
+<?lsmb END ?>
<?lsmb END ?>
</tr>
@@ -52,7 +53,12 @@
<?lsmb ELSE ?>
<td>
<?lsmb END ?>
- <?lsmb row.$column ?></td>
+<?lsmb IF row.$column.href ?>
+ <a href="<?lsmb row.$column.href?>"><?lsmb row.$column.text ?></a>
+<?lsmb ELSE ?>
+ <?lsmb row.$column ?>
+<?lsmb END ?>
+ </td>
<?lsmb END ?>
</tr>
<?lsmb END ?>
@@ -73,19 +79,13 @@
<br />
<form method=post action=gl.pl>
-<?lsmb FOREACH pair IN form.callback.split('&') ?>
-<?lsmb hidden = pair.split('=') ?>
+<?lsmb FOREACH pair IN form.callback.split('&') ?><?lsmb hidden = pair.split('=') ?>
<?lsmb IF NOT loop.first ?>
-<input type="hidden" name="<?lsmb hidden.0 ?>" value="<?lsmb hidden.1 ?>" />
-<?lsmb END ?>
-<?lsmb END ?>
-<input type="hidden" name="callback" value="<?lsmb form.callback ?>" />
-<?lsmb FOREACH button IN buttons ?>
-<?lsmb button ?>
-<?lsmb END ?>
-<button type="submit" class="submit" name="action" value="csv_gl_report">
-<?lsmb text('CSV Report') ?>
-</button>
+<?lsmb PROCESS input element_data={type => 'hidden', name => hidden.0, value => hidden.1} ?>
+<?lsmb END ?><?lsmb END ?>
+<?lsmb PROCESS input element_data={type => 'hidden', name => 'callback', value => form.callback} ?>
+
+<?lsmb FOREACH button IN buttons ?><?lsmb PROCESS button element_data=button ?><?lsmb END ?>
</form>
</body>