summaryrefslogtreecommitdiffstats
path: root/src/DotNetOpenAuth.InfoCard.UI/InfoCard/SupportingScript.js
diff options
context:
space:
mode:
Diffstat (limited to 'src/DotNetOpenAuth.InfoCard.UI/InfoCard/SupportingScript.js')
-rw-r--r--src/DotNetOpenAuth.InfoCard.UI/InfoCard/SupportingScript.js126
1 files changed, 126 insertions, 0 deletions
diff --git a/src/DotNetOpenAuth.InfoCard.UI/InfoCard/SupportingScript.js b/src/DotNetOpenAuth.InfoCard.UI/InfoCard/SupportingScript.js
new file mode 100644
index 0000000..a883cd7
--- /dev/null
+++ b/src/DotNetOpenAuth.InfoCard.UI/InfoCard/SupportingScript.js
@@ -0,0 +1,126 @@
+/*jslint white: true, onevar: true, browser: true, undef: true, nomen: true, plusplus: true, bitwise: true, regexp: true, strict: true, newcap: true, immed: true */
+"use strict";
+document.infoCard = {
+ isSupported: function () {
+ /// <summary>
+ /// Determines if information cards are supported by the
+ /// browser.
+ /// </summary>
+ /// <returns>
+ /// true-if the browser supports information cards.
+ ///</returns>
+ var IEVer, embed, x, event;
+
+ IEVer = -1;
+ if (navigator.appName === 'Microsoft Internet Explorer') {
+ if (new RegExp("MSIE ([0-9]{1,}[\\.0-9]{0,})").exec(navigator.userAgent) !== null) {
+ IEVer = parseFloat(RegExp.$1);
+ }
+ }
+
+ // Look for IE 7+.
+ if (IEVer >= 7) {
+ embed = document.createElement("object");
+ embed.type = "application/x-informationcard";
+ return embed.issuerPolicy !== undefined && embed.isInstalled;
+ }
+
+ // not IE (any version)
+ if (IEVer < 0 && navigator.mimeTypes && navigator.mimeTypes.length) {
+ // check to see if there is a mimeType handler.
+ x = navigator.mimeTypes['application/x-informationcard'];
+ if (x && x.enabledPlugin) {
+ return true;
+ }
+
+ // check for the IdentitySelector event handler is there.
+ if (document.addEventListener) {
+ event = document.createEvent("Events");
+ event.initEvent("IdentitySelectorAvailable", true, true);
+ top.dispatchEvent(event);
+
+ if (top.IdentitySelectorAvailable === true) {
+ return true;
+ }
+ }
+ }
+
+ return false;
+ },
+
+ activate: function (selectorId, hiddenFieldName) {
+ var selector, hiddenField;
+ selector = document.getElementById(selectorId);
+ hiddenField = document.getElementsByName(hiddenFieldName)[0];
+ try {
+ hiddenField.value = selector.value;
+ } catch (e) {
+ // Selector was canceled
+ return false;
+ }
+ if (hiddenField.value == 'undefined') { // really the string, not === undefined
+ // We're dealing with a bad FireFox selector plugin.
+ // Just add the control to the form by setting its name property and submit to activate.
+ selector.name = hiddenFieldName;
+ hiddenField.parentNode.removeChild(hiddenField);
+ return true;
+ }
+ return true;
+ },
+
+ hideStatic: function (divName) {
+ var div = document.getElementById(divName);
+ if (div) {
+ div.style.visibility = 'hidden';
+ }
+ },
+
+ showStatic: function (divName) {
+ var div = document.getElementById(divName);
+ if (div) {
+ div.style.visibility = 'visible';
+ }
+ },
+
+ hideDynamic: function (divName) {
+ var div = document.getElementById(divName);
+ if (div) {
+ div.style.display = 'none';
+ }
+ },
+
+ showDynamic: function (divName) {
+ var div = document.getElementById(divName);
+ if (div) {
+ div.style.display = '';
+ }
+ },
+
+ checkDynamic: function (controlDiv, unsupportedDiv) {
+ if (this.isSupported()) {
+ this.showDynamic(controlDiv);
+ if (unsupportedDiv) {
+ this.hideDynamic(unsupportedDiv);
+ }
+ } else {
+ this.hideDynamic(controlDiv);
+ if (unsupportedDiv) {
+ this.showDynamic(unsupportedDiv);
+ }
+ }
+ },
+
+ checkStatic: function (controlDiv, unsupportedDiv) {
+ if (this.isSupported()) {
+ this.showStatic(controlDiv);
+ if (unsupportedDiv) {
+ this.hideStatic(unsupportedDiv);
+ }
+ } else {
+ this.hideStatic(controlDiv);
+ if (unsupportedDiv) {
+ this.showDynamic(unsupportedDiv);
+ }
+ }
+ }
+};