blob: 10b0bccfc55d7dfe57a7e953fc421a2cc2ab184e [file] [log] [blame]
/*
* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements. See the NOTICE file distributed with
* this work for additional information regarding copyright ownership.
* The ASF licenses this file to You under the Apache License, Version 2.0
* (the "License"); you may not use this file except in compliance with
* the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
/*
* Wicket BrowserInfo Support
*
* Populates a special form with the client/browser info
* and submits it to the server
*/
;(function (undefined) {
'use strict';
if (typeof(Wicket) === 'undefined') {
window.Wicket = {};
}
if (typeof(Wicket.BrowserInfo) === 'undefined') {
window.Wicket.BrowserInfo = {
/**
* Collects the client information
*
* @returns {Object}
*/
collect: function() {
var info = {};
info.navigatorAppName = window.navigator.appName;
info.navigatorAppVersion = window.navigator.appVersion;
info.navigatorAppCodeName = window.navigator.appCodeName;
var cookieEnabled = (window.navigator.cookieEnabled);
if (typeof(window.navigator.cookieEnabled) === "undefined" && !cookieEnabled) {
document.cookie = "wickettestcookie";
cookieEnabled = (document.cookie.indexOf("wickettestcookie") !== -1);
}
info.navigatorCookieEnabled = cookieEnabled;
info.navigatorJavaEnabled = window.navigator.javaEnabled() || false;
info.navigatorLanguage = window.navigator.language ? window.navigator.language : window.navigator.userLanguage;
info.navigatorPlatform = window.navigator.platform;
info.navigatorUserAgent = window.navigator.userAgent;
if (window.screen) {
info.screenWidth = window.screen.width;
info.screenHeight = window.screen.height;
info.screenColorDepth = window.screen.colorDepth;
}
if (Intl && typeof(Intl.DateTimeFormat) === 'function' &&
typeof(Intl.DateTimeFormat().resolvedOptions) === 'function') {
var jsTimeZone = Intl.DateTimeFormat().resolvedOptions().timeZone;
info.jsTimeZone = jsTimeZone ? jsTimeZone : null;
}
info.utcOffset = (new Date(new Date().getFullYear(), 0, 1, 0, 0, 0, 0).getTimezoneOffset() / -60);
info.utcDSTOffset = (new Date(new Date().getFullYear(), 6, 1, 0, 0, 0, 0).getTimezoneOffset() / -60);
info.browserWidth = window.innerWidth || document.body.offsetWidth;
info.browserHeight = window.innerHeight || document.body.offsetHeight;
info.hostname = window.location.hostname;
if (Wicket.BrowserInfo.collectExtraInfo) {
Wicket.BrowserInfo.collectExtraInfo(info);
}
return info;
},
/**
* Populates the form elements with the client info
*
* @param formMarkupId The markup id of the special form
* @returns {HTMLFormElement} The special form
*/
populateFields: function(formMarkupId) {
var postbackForm = document.getElementById(formMarkupId);
var info = Wicket.BrowserInfo.collect();
var i;
for (i in info) {
var input = document.createElement('input');
input.type = 'text';
input.name = i;
input.value = info[i];
postbackForm.appendChild(input);
}
return postbackForm;
},
/**
* Populates and submits the special form.
*
* @param formMarkupId The markup id of the special form
*/
submitForm: function(formMarkupId) {
var postbackForm = Wicket.BrowserInfo.populateFields(formMarkupId);
postbackForm.submit();
}
};
}
})();