blob: b10a48e53b894b9143bac2204ada57cc3bfc3df9 [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.
*/
$(document).ready(function () {
var locationDomain = window.location.origin + '/' + window.location.pathname.split('/')[1];
var initAssetsManager = function () {
var AssetsManager = {};
var createLink = function (id, url) {
if (!$('link#' + id).length && !$('link[href="' + url + '"').length) {
var link = document.createElement('link');
link.rel = 'stylesheet';
link.href = url;
link.type = "text/css";
$('head').append(link);
}
};
var createScript = function (id, url) {
if (!$('script#' + id).length && !$('script[src="' + url + '"').length) {
var script = document.createElement('script');
script.src = url;
$('body').append(script);
}
};
AssetsManager.checkAlreadyLoaded = function (url, type) {
var elems = (type === 'css') ? document.styleSheets : ((type === 'js') ? document.scripts : '');
var attr = (type === 'js') ? 'src' : ((type === 'css') ? 'href' : 'none');
for (var i in elems) {
var attrUrl = elems[i][attr] || "";
var assetName = attrUrl.split("/").slice(-1).join();
if (attrUrl !== ""
&& (assetName === url.split("/").slice(-1).join() || assetName === url)) {
return true;
}
}
return false;
};
var removeLoaded = function (url, type) {
var tag = (type === 'js') ? 'script' : ((type === 'css') ? 'link' : '');
if (AssetsManager.checkAlreadyLoaded(url, type)) {
$(tag + '[href~="' + url + '"]').remove();
}
};
AssetsManager.inject = function (id, url, type) {
switch (type) {
case 'js':
createScript(id, url);
break;
case 'css':
createLink(id, url);
break;
default:
break;
}
};
AssetsManager.remove = function (url, type) {
removeLoaded(url, type);
};
return AssetsManager;
};
var initAccessibilityController = function () {
AccessibilityController = {};
var AssetsManager = initAssetsManager();
var fontSizeFiles = [
locationDomain + '/css/accessibility/accessibilityFont.css'
];
var darkThemeFiles = [
locationDomain + '/css/AdminLTE_skins/skin-blue.css',
locationDomain + '/css/accessibility/accessibilityHC.css'
];
var darkThemeMainClass = 'skin-blue';
var defaultThemeMainClass = 'skin-green-light';
var doSwitch = function (check, files) {
if (!check) {
for (var i = 0; i < files.length; i++) {
AssetsManager.remove(files[i], 'css');
}
} else {
for (var i = 0; i < files.length; i++) {
AssetsManager.inject('theme_css_' + i, files[i], 'css');
}
}
};
var doSwitchTheme = function (check, files) {
doSwitch(check, files);
if ($('body').hasClass(defaultThemeMainClass) && check) {
$('body').removeClass(defaultThemeMainClass).addClass(darkThemeMainClass);
} else {
$('body').removeClass(darkThemeMainClass).addClass(defaultThemeMainClass);
}
};
var savePreference = function (key, value) {
window.localStorage.setItem(key, value);
};
var getPreference = function (key) {
var storageValue = window.localStorage.getItem(key);
if (storageValue === null) {
savePreference(key, 'false');
}
return storageValue === 'true';
};
AccessibilityController.FONT_SIZE_PREF = 'font_size_pref';
AccessibilityController.HC_THEME_PREF = 'hc_theme_pref';
var isIncreasedFont = getPreference(AccessibilityController.FONT_SIZE_PREF);
var isHighContrast = getPreference(AccessibilityController.HC_THEME_PREF);
AccessibilityController.checkPref = function (pref) {
switch (pref) {
case AccessibilityController.FONT_SIZE_PREF:
doSwitch(isIncreasedFont, fontSizeFiles);
break;
case AccessibilityController.HC_THEME_PREF:
doSwitchTheme(isHighContrast, darkThemeFiles);
break;
default:
break;
}
};
AccessibilityController.switchIncreasedFont = function () {
isIncreasedFont = !isIncreasedFont;
doSwitch(isIncreasedFont, fontSizeFiles);
savePreference(AccessibilityController.FONT_SIZE_PREF, isIncreasedFont);
};
AccessibilityController.switchTheme = function () {
isHighContrast = !isHighContrast;
doSwitchTheme(isHighContrast, darkThemeFiles);
savePreference(AccessibilityController.HC_THEME_PREF, isHighContrast);
};
return AccessibilityController;
};
var AccessibilityController = initAccessibilityController();
AccessibilityController.checkPref(AccessibilityController.FONT_SIZE_PREF);
AccessibilityController.checkPref(AccessibilityController.HC_THEME_PREF);
$('#change_contrast').off('click.acc_hc');
$('#change_contrast').on('click.acc_hc', function () {
AccessibilityController.switchTheme();
return false;
});
$('#change_contrast').off('keydown.key_acc_hc keypress.key_acc_hc');
$('#change_contrast').on('keydown.key_acc_hc keypress.key_acc_hc', function (event) {
// check "enter" key pressed
if (event.which === 13) {
AccessibilityController.switchTheme();
event.preventDefault();
return false;
}
});
$('#change_fontSize').off('click.acc_f');
$('#change_fontSize').on('click.acc_f', function () {
AccessibilityController.switchIncreasedFont();
return false;
});
$('#change_fontSize').off('keydown.key_acc_f keypress.key_acc_f');
$('#change_fontSize').on('keydown.key_acc_f keypress.key_acc_f', function (event) {
// check "enter" key pressed
if (event.which === 13) {
AccessibilityController.switchIncreasedFont();
event.preventDefault();
return false;
}
});
$('body').off('keydown.acc_binding keypress.acc_binding');
$('body').on('keydown.acc_binding keypress.acc_binding', function (event) {
// alt - shift - F
// alt - shift - H
if (event.altKey && event.shiftKey) {
if (event.keyCode === 72) {
AccessibilityController.switchTheme();
} else if (event.keyCode === 70) {
AccessibilityController.switchIncreasedFont();
}
event.preventDefault();
}
});
});