summaryrefslogtreecommitdiffstats
path: root/tools/Sandcastle/Presentation/vs2005/Scripts/CheckboxMenu.js
diff options
context:
space:
mode:
authorAndrew Arnott <andrewarnott@gmail.com>2008-08-30 17:09:22 -0700
committerAndrew <andrewarnott@gmail.com>2008-08-30 17:09:22 -0700
commit4a94bcfb7963abcbf602dfa1e1ea9b894985668f (patch)
tree95ef3746ecf0f87abb658db36f113c3baf680be5 /tools/Sandcastle/Presentation/vs2005/Scripts/CheckboxMenu.js
downloadDotNetOpenAuth-4a94bcfb7963abcbf602dfa1e1ea9b894985668f.zip
DotNetOpenAuth-4a94bcfb7963abcbf602dfa1e1ea9b894985668f.tar.gz
DotNetOpenAuth-4a94bcfb7963abcbf602dfa1e1ea9b894985668f.tar.bz2
Initial build system version.
Diffstat (limited to 'tools/Sandcastle/Presentation/vs2005/Scripts/CheckboxMenu.js')
-rw-r--r--tools/Sandcastle/Presentation/vs2005/Scripts/CheckboxMenu.js157
1 files changed, 157 insertions, 0 deletions
diff --git a/tools/Sandcastle/Presentation/vs2005/Scripts/CheckboxMenu.js b/tools/Sandcastle/Presentation/vs2005/Scripts/CheckboxMenu.js
new file mode 100644
index 0000000..de8348f
--- /dev/null
+++ b/tools/Sandcastle/Presentation/vs2005/Scripts/CheckboxMenu.js
@@ -0,0 +1,157 @@
+
+function CheckboxMenu(id, data, persistkeys, globals)
+{
+ this.id = id;
+ this.menuCheckboxIds = new Array();
+ this.data = data;
+ this.count = 0;
+
+ var element = document.getElementById(id);
+ var checkboxNodes = element.getElementsByTagName("input");
+
+ for(var checkboxCount=0; checkboxCount < checkboxNodes.length; checkboxCount++)
+ {
+ var checkboxId = checkboxNodes[checkboxCount].getAttribute('id');
+ var checkboxData = checkboxNodes[checkboxCount].getAttribute('data');
+ var dataSplits = checkboxData.split(',');
+ var defaultValue = checkboxNodes[checkboxCount].getAttribute('value');
+ if (checkboxData != null && checkboxData.indexOf("persist") != -1)
+ persistkeys.push(checkboxId);
+
+ this.menuCheckboxIds[dataSplits[0]] = checkboxId;
+
+ // try to get the value for this checkbox id from globals
+ var persistedValue = (globals == null) ? null : globals.VariableExists(checkboxId) ? globals.VariableValue(checkboxId) : null;
+ var currentValue = (persistedValue != null) ? persistedValue : (defaultValue == null) ? "on" : defaultValue;
+
+ // set the checkbox's check state
+ this.SetCheckState(checkboxId, currentValue);
+
+ this.count++;
+ }
+}
+
+CheckboxMenu.prototype.SetCheckState=function(id, value)
+{
+ var checkbox = document.getElementById(id);
+ if(checkbox != null)
+ {
+ checkbox.checked = (value == "on") ? true : false;
+ }
+
+ // set the value for the checkbox id in the data array
+ this.data[id] = value;
+}
+
+CheckboxMenu.prototype.GetCheckState=function(id)
+{
+ var checkbox = document.getElementById(id);
+ if(checkbox != null)
+ return checkbox.checked;
+ return false;
+}
+
+CheckboxMenu.prototype.ToggleCheckState=function(id)
+{
+ // at least one checkbox must always be checked
+ var checkedCount = this.GetCheckedCount();
+
+ if(this.data[id] == "on" && checkedCount > 1)
+ this.SetCheckState(id, "off");
+ else
+ this.SetCheckState(id, "on");
+}
+
+// returns the checkbox id associated with a key
+CheckboxMenu.prototype.GetCheckboxId=function(key)
+{
+ return this.menuCheckboxIds[key];
+}
+
+// returns the array of checkbox ids
+CheckboxMenu.prototype.GetCheckboxIds=function()
+{
+ return this.menuCheckboxIds;
+}
+
+// returns the @data attribute of the checkbox element
+CheckboxMenu.prototype.GetCheckboxData=function(checkboxId)
+{
+ var checkbox = document.getElementById(checkboxId);
+ if (checkbox == null) return "";
+ return checkbox.getAttribute('data');
+}
+
+CheckboxMenu.prototype.GetDropdownLabelId=function()
+{
+ var checkboxCount = this.count;
+ var checkedCount = this.GetCheckedCount();
+ var idPrefix = this.id;
+
+ // if all boxes checked, use showall label
+ if (checkedCount == checkboxCount)
+ return idPrefix.concat("AllLabel");
+
+ // if only one is checked, use label appropriate for that one checkbox
+ if (checkedCount == 1)
+ {
+ for(var key in this.menuCheckboxIds)
+ {
+ if (this.data[this.menuCheckboxIds[key]] == "on")
+ {
+ return idPrefix.concat(key,'Label');
+ }
+ }
+ }
+
+ // if multiple or zero checked, use multiple label
+ return idPrefix.concat("MultipleLabel");
+}
+
+CheckboxMenu.prototype.GetCheckedCount=function()
+{
+ var count = 0;
+ for(var key in this.menuCheckboxIds)
+ {
+ if (this.data[this.menuCheckboxIds[key]] == "on")
+ count++;
+ }
+ return (count);
+}
+
+// returns an array containing the ids of the checkboxes that are checked
+CheckboxMenu.prototype.GetCheckedIds=function()
+{
+ var idArray = new Array();
+ for(var key in this.menuCheckboxIds)
+ {
+ if (this.data[this.menuCheckboxIds[key]] == "on")
+ idArray.push(this.menuCheckboxIds[key]);
+ }
+ return idArray;
+}
+
+CheckboxMenu.prototype.GetGroupCheckedCount=function(checkboxGroup)
+{
+ var count = 0;
+ for(var i = 0; i < checkboxGroup.length; i++)
+ {
+ if (this.data[checkboxGroup[i]] == "on")
+ count++;
+ }
+ return (count);
+}
+
+CheckboxMenu.prototype.ToggleGroupCheckState=function(id, checkboxGroup)
+{
+ // at least one checkbox must always be checked
+ var checkedCount = this.GetGroupCheckedCount(checkboxGroup);
+
+ // if the group has multiple checkboxes, one must always be checked; so toggle to "off" only if more than one currently checked
+ // if the group has only one checkbox, it's okay to toggle it on/off
+ if(this.data[id] == "on" && (checkedCount > 1 || checkboxGroup.length == 1))
+ this.SetCheckState(id, "off");
+ else
+ this.SetCheckState(id, "on");
+}
+