????
Current Path : C:/Windows/SystemApps/Microsoft.Windows.CloudExperienceHost_cw5n1h2txyewy/js/ |
Current File : C:/Windows/SystemApps/Microsoft.Windows.CloudExperienceHost_cw5n1h2txyewy/js/OEMRegistrationPage.js |
"use strict"; var CloudExperienceHost; (function (CloudExperienceHost) { var OEMRegistrationInfo; (function (OEMRegistrationInfo) { var FIELDTYPE = { checkbox: 'checkbox', text: 'text', email: 'email', select: 'select', paragraph: 'paragraph' }; var FIELDCLASS = { text: 'inputType_text', email: 'inputType_email', select: 'inputType_select' }; var UICreator = (function () { function UICreator(pageContainerDiv, flyoutIframeElement, flyoutDiv) { this.selectedOptionValue = ''; this.createdInputs = new Array(); this.isPrePopulated = false; this._pageContainerDiv = pageContainerDiv; this._flyoutIframe = flyoutIframeElement; this._flyoutDiv = flyoutDiv; } UICreator.prototype._addDefaultAttribute = function (element, value) { element.setAttribute('defaultValue', value); }; UICreator.prototype._createCheckboxInputElement = function (id, checked) { var checkboxInputElement = document.createElement('input'); checkboxInputElement.type = FIELDTYPE.checkbox; this._addDefaultAttribute(checkboxInputElement, checked.toString()); checkboxInputElement.id = id; checkboxInputElement.checked = checked; checkboxInputElement.classList.add('win-checkbox'); return checkboxInputElement; }; UICreator.prototype._createCheckboxLabelElement = function (id, textContent) { var labelElement = document.createElement('label'); labelElement.htmlFor = id; labelElement.id = id + 'Label'; labelElement.textContent = textContent; labelElement.setAttribute('aria-hidden', 'true'); return labelElement; }; UICreator.prototype._createTextInputElement = function (id, placeHolder, value) { var textInputElement = document.createElement('input'); this._addDefaultAttribute(textInputElement, value); textInputElement.type = FIELDTYPE.text; textInputElement.id = id; textInputElement.value = value; textInputElement.placeholder = placeHolder; textInputElement.classList.add('win-textbox'); return textInputElement; }; UICreator.prototype._createEmailInputElement = function (id, placeHolder, value) { var emailInputElement = document.createElement('input'); this._addDefaultAttribute(emailInputElement, value); emailInputElement.type = FIELDTYPE.email; emailInputElement.id = id; emailInputElement.placeholder = placeHolder; emailInputElement.value = value; emailInputElement.classList.add('win-textbox'); emailInputElement.addEventListener("blur", function () { var eAddress = emailInputElement.value; if (eAddress.length > 0) { var atPos = eAddress.lastIndexOf('@'); var periodPos = eAddress.lastIndexOf("."); if ((((eAddress.split('@').length - 1) > 1) || ((eAddress.split('.').length - 1) < 1)) || !((atPos > 0) && (periodPos < eAddress.length - 1) && (periodPos > atPos + 2) && (eAddress.length - atPos > 5))) { this._emailError(emailInputElement, true, oemMetadata.emailInvalidError); } else { this._emailError(emailInputElement, false, ''); } } else { this._emailError(emailInputElement, false, ''); } }.bind(this)); return emailInputElement; }; UICreator.prototype._createEmailErrorElement = function (errorDivParent) { var errorDiv = document.createElement('div'); errorDiv.classList.add('template-tooltip'); errorDiv.classList.add('tooltipType_error'); errorDiv.id = 'email_errorDialog'; errorDiv.setAttribute("role", "alert"); errorDiv.setAttribute("aria-live", "assertive"); errorDiv.style.display = 'none'; errorDivParent.appendChild(errorDiv); }; UICreator.prototype._createSelectElement = function (id, placeholderOptionValue, placeholderOptionText, option) { var selectElement = document.createElement('select'); selectElement.id = id; selectElement.setAttribute('type', FIELDTYPE.select); selectElement.classList.add('win-dropdown'); this.selectedOptionValue = option; this._addDefaultAttribute(selectElement, option); var optionTag = document.createElement('option'); optionTag.value = placeholderOptionValue; optionTag.innerText = placeholderOptionText; selectElement.appendChild(optionTag); return selectElement; }; UICreator.prototype._createAnchorElement = function (id, href, textContent, fileName) { var anchorElement = document.createElement('a'); anchorElement.id = id; anchorElement.href = href; anchorElement.innerText = textContent; anchorElement.onclick = function () { var iframeDocument = this._flyoutIframe.contentWindow.document; pageHelper.getLinkFileContent(fileName).done(function (fileContent) { iframeDocument.open('text/html', 'replace'); iframeDocument.dir = _htmlRoot.dir; iframeDocument.write(fileContent); iframeDocument.close(); this._flyoutDiv.style.marginTop = this._getPageTop(this._pageContainerDiv) + 'px'; this._flyoutDiv.winControl.show(anchorElement, 'top', _htmlRoot.dir === "rtl" ? 'right' : 'left'); }.bind(this)); }.bind(this); return anchorElement; }; UICreator.prototype._createInputElementWrapperDiv = function (inputElement) { var wrappperDiv = document.createElement('div'); wrappperDiv.classList.add('template-input'); wrappperDiv.classList.add(this._getFieldClass(inputElement.getAttribute('type'))); wrappperDiv.appendChild(inputElement); return wrappperDiv; }; UICreator.prototype._getFieldClass = function (fieldTypeName) { switch (fieldTypeName) { case FIELDTYPE.text: return FIELDCLASS.text; case FIELDTYPE.email: return FIELDCLASS.email; case FIELDTYPE.select: return FIELDCLASS.select; default: throw "Invalid Type Name"; break; } }; UICreator.prototype._getPageTop = function (el) { var rect = el.getBoundingClientRect(); var docEl = document.documentElement; return rect.top + (window.pageYOffset || docEl.scrollTop || 0); }; UICreator.prototype._emailError = function (emailObject, shouldShow, errorMessage) { var errorDiv = emailObject.nextSibling; if (shouldShow) { if (errorDiv.childNodes.length < 1) { var pTag = document.createElement('p'); pTag.setAttribute("aria-hidden", "true"); errorDiv.appendChild(pTag); } errorDiv.setAttribute("aria-label", errorMessage); errorDiv.firstChild.textContent = errorMessage; errorDiv.style.display = 'inline'; } else { errorDiv.style.display = 'none'; if (errorDiv.firstChild) { errorDiv.removeChild(errorDiv.firstChild); } errorDiv.setAttribute("aria-label", null); } }; UICreator.prototype._createParagraphElement = function (id, typeAttributeValue, textContent, visibility) { var paragraphElement = document.createElement('p'); paragraphElement.id = id; paragraphElement.textContent = textContent; paragraphElement.setAttribute("type", typeAttributeValue); paragraphElement.setAttribute("tabindex", "-1"); paragraphElement.setAttribute("aria-label", textContent); paragraphElement.style.visibility = visibility ? 'visible' : 'hidden'; this.isPrePopulated = visibility; paragraphElement.style.display = visibility ? 'inline' : 'none'; return paragraphElement; }; UICreator.prototype._createOptionElement = function (codeTwoLetter, displayName) { var optionElement = document.createElement('option'); optionElement.value = codeTwoLetter; optionElement.innerText = displayName; if (codeTwoLetter === this.selectedOptionValue) { optionElement.selected = true; } return optionElement; }; UICreator.prototype._addChildElement = function (parentElement, fields) { for (var i = 0; fields[i]; i++) { var field = fields[i]; if (typeof field.type !== 'undefined') { switch (field.type) { case OEMRegistrationInfo.ElementType.Checkbox: var checkboxInputElement = this._createCheckboxInputElement(field.id, field.checked); parentElement.appendChild(checkboxInputElement); this.createdInputs.push(checkboxInputElement); var labelElement = this._createCheckboxLabelElement(field.id, field.text); parentElement.appendChild(labelElement); parentElement.classList.add('inputType_checkbox'); break; case OEMRegistrationInfo.ElementType.Text: var textInputElement = this._createTextInputElement(field.id, field.placeHolder, field.value); var wrapperDiv = this._createInputElementWrapperDiv(textInputElement); parentElement.appendChild(wrapperDiv); this.createdInputs.push(textInputElement); break; case OEMRegistrationInfo.ElementType.EMail: var emailInputElement = this._createEmailInputElement(field.id, field.placeHolder, field.value); var wrapperDiv = this._createInputElementWrapperDiv(emailInputElement); parentElement.appendChild(wrapperDiv); this.createdInputs.push(emailInputElement); this._createEmailErrorElement(wrapperDiv); break; case OEMRegistrationInfo.ElementType.Select: var selectElement = this._createSelectElement(field.id, "", field.placeHolder, field.option); var wrapperDiv = this._createInputElementWrapperDiv(selectElement); this._addChildElement(selectElement, field.options); parentElement.appendChild(wrapperDiv); this.createdInputs.push(selectElement); break; case OEMRegistrationInfo.ElementType.Link: var anchorElement = this._createAnchorElement(field.id, '#', field.text, field.fileName); parentElement.appendChild(anchorElement); break; case OEMRegistrationInfo.ElementType.Paragraph: var paragraphElement = this._createParagraphElement(field.id, FIELDTYPE.paragraph, field.text, field.visibility); paragraphElement.classList.add('secondaryText'); parentElement.appendChild(paragraphElement); parentElement.classList.add('secondaryText_parent'); break; default: throw "Invalid Field Type"; break; } } else if ((typeof field.codeTwoLetter !== 'undefined') && (typeof field.displayName !== 'undefined')) { var optionElement = this._createOptionElement(field.codeTwoLetter, field.displayName); parentElement.appendChild(optionElement); } } }; UICreator.prototype.createUI = function (oemMetadata, oemInfo, linkInfo) { for (var i = 0; oemMetadata.fields[i]; i++) { var parentElement = document.createElement('div'); parentElement.classList.add('template-input'); var field = oemMetadata.fields[i]; if (field.length > 1) { parentElement = document.createElement('fieldset'); parentElement.classList.add('haveMultipleChildren'); parentElement.setAttribute("role", "presentation"); } this._addChildElement(parentElement, oemMetadata.fields[i]); (field[0].type === OEMRegistrationInfo.ElementType.Link) ? linkInfo.appendChild(parentElement) : oemInfo.appendChild(parentElement); } }; return UICreator; })(); OEMRegistrationInfo.UICreator = UICreator; var bridge = new CloudExperienceHost.Bridge(); var pageHelper = new OEMRegistrationInfo.OEMRegistrationHelper(bridge); var oemMetadata = null; var uiCreatorObject = null; var shouldShowOEM = false; WinJS.UI.Pages.define("/views/OEMRegistration.html", { init: function (element, options) { uiCreatorObject = new UICreator(pageContainer, flyoutIframe, flyout); var pagePromise = new WinJS.Promise(function (completeDispatch, errorDispatch ) { bridge.invoke("CloudExperienceHost.OEMRegistrationInfo.getShouldShowOEMRegisration").then(function (showOEM) { shouldShowOEM = showOEM; if (shouldShowOEM) { bridge.invoke("CloudExperienceHost.Globalization.Language.getPreferredLang").then(function (preferredLang) { _htmlRoot.setAttribute("lang", preferredLang); bridge.invoke("CloudExperienceHost.Globalization.Language.getReadingDirection").then(function (dirVal) { _htmlRoot.setAttribute("dir", dirVal); pageHelper.initialize().then(function () { pageHelper.getPageDescriptor().then(function (result) { _processResultHelper(result, completeDispatch, errorDispatch); }, function (e) { errorDispatch(e); }); }, function (e) { errorDispatch(e); }); }, function (e) { errorDispatch(e); }); }, function (e) { errorDispatch(e); }); } else { completeDispatch(); } }, function (e) { errorDispatch(e); }); }); var cssPromise = uiHelpers.LoadCssPromise(document.head, "..", bridge); return WinJS.Promise.join({ pagePromise: pagePromise, cssPromise: cssPromise }); function _processResultHelper(result, completeDispatch, errorDispatch) { bridge.invoke("CloudExperienceHost.Telemetry.logEvent", "OEMRegHelperMetaDataReceivedSuccessfully"); oemMetadata = result; uiCreatorObject.createUI(oemMetadata, oemInfo, linkInfo); WinJS.Binding.processAll(null, oemMetadata).done(function () { try { uiHelpers.SetElementVisibility(skipButton, !oemMetadata.hideSkip); var checkAmpersandFor = document.getElementsByTagName('button'); for (var i = 0; i < checkAmpersandFor.length; i++) { var result = CloudExperienceHost.ResourceManager.GetContentAndAccesskey(checkAmpersandFor[i].textContent); checkAmpersandFor[i].textContent = result.content; checkAmpersandFor[i].accessKey = result.accessKey; } if (uiCreatorObject.createdInputs.length != 0) { uiCreatorObject.createdInputs[0].focus(); } else { nextButton.focus(); } completeDispatch(); } catch (e) { errorDispatch(e); } }); } }, error: function (e) { shouldShowOEM = false; bridge.invoke("CloudExperienceHost.Telemetry.logEvent", "OEMRegistrationPageError", JSON.stringify({ number: e && e.number, stack: e && e.asyncOpSource && e.asyncOpSource.stack })); bridge.fireEvent(CloudExperienceHost.Events.done, CloudExperienceHost.AppResult.abort); }, ready: function (element, options) { nextButton.addEventListener("click", function (event) { event.preventDefault(); onNext(); }); function onNext() { _setProgressState(true); var resultPageInfo = new Array(); var telemetryInfo = new Array(); uiCreatorObject.createdInputs.forEach(function (element) { var resultElement; switch (element.getAttribute("type")) { case FIELDTYPE.checkbox: resultElement = new OEMRegistrationInfo.CheckboxElement(element.id, document.getElementById(element.id + 'Label').textContent, element.checked); telemetryInfo.push(getTelemetryInfo(element, element.value)); break; case FIELDTYPE.email: resultElement = new OEMRegistrationInfo.EMailElement(element.id, element.placeholder, element.value); telemetryInfo.push(getTelemetryInfo(element, element.value)); break; case FIELDTYPE.select: resultElement = new OEMRegistrationInfo.TextElement(element.id, element.options[0].text, element.options[element.selectedIndex].value); telemetryInfo.push(getTelemetryInfo(element, element.options[element.selectedIndex].value)); break; case FIELDTYPE.text: resultElement = new OEMRegistrationInfo.TextElement(element.id, element.placeholder, element.value); telemetryInfo.push(getTelemetryInfo(element, element.value)); break; default: throw "Invalid Field Type"; break; } resultPageInfo.push(resultElement); }, this); pageHelper.saveOEMRegistrationInfo(resultPageInfo).then(function () { bridge.invoke("CloudExperienceHost.Telemetry.logEvent", "saveOEMRegistrationInfoSuccess", JSON.stringify(telemetryInfo)); bridge.fireEvent(CloudExperienceHost.Events.done, CloudExperienceHost.AppResult.success); }, function (e) { _setProgressState(false); bridge.invoke("CloudExperienceHost.Telemetry.logEvent", "saveOEMRegistrationInfoFailure", JSON.stringify({ errorNumber: e && e.number.toString(16), errorStack: e && e.asyncOpSource && e.asyncOpSource.stack })); bridge.fireEvent(CloudExperienceHost.Events.done, CloudExperienceHost.AppResult.cancel); }); } skipButton.addEventListener("click", function (event) { bridge.invoke("CloudExperienceHost.Telemetry.logEvent", "SkipUserOobeOEMRegistrationPage"); bridge.fireEvent(CloudExperienceHost.Events.done, CloudExperienceHost.AppResult.cancel); }); function getTelemetryInfo(element, value) { var defaultValue = element.getAttribute('defaultValue'); if (element.getAttribute("type") === FIELDTYPE.checkbox) { var fieldTelemetry = { id: element.id, isPrePopulated: defaultValue === 'true', isEmpty: false, wasEmpty: false, changed: defaultValue !== value }; return fieldTelemetry; } else { var fieldTelemetry = { id: element.id, isPrePopulated: defaultValue.length > 0, isEmpty: value.length < 1, wasEmpty: defaultValue.length < 1, changed: defaultValue !== value }; return fieldTelemetry; } } flyout.addEventListener("afterhide", function () { var iframeDocument = flyoutIframe.contentWindow.document; iframeDocument.open('text/html', 'replace'); iframeDocument.write(''); iframeDocument.close(); }); function _setProgressState(waiting) { nextButton.disabled = waiting; uiHelpers.SetElementVisibility(progressRing, waiting); } uiHelpers.RegisterEaseOfAccess(easeOfAccess, bridge); uiHelpers.RegisterInputSwitcher(inputSwitcher, bridge); if (shouldShowOEM) { bridge.invoke("CloudExperienceHost.Telemetry.logEvent", "ShowUserOobeOEMRegistrationPage"); bridge.fireEvent(CloudExperienceHost.Events.visible, true); } else { bridge.invoke("CloudExperienceHost.Telemetry.logEvent", "DoNotShowUserOobeOEMRegistrationPage"); bridge.fireEvent(CloudExperienceHost.Events.done, CloudExperienceHost.AppResult.abort); } } }); })(OEMRegistrationInfo = CloudExperienceHost.OEMRegistrationInfo || (CloudExperienceHost.OEMRegistrationInfo = {})); })(CloudExperienceHost || (CloudExperienceHost = {}));