mirror of
https://github.com/humhub/humhub.git
synced 2025-03-03 14:49:31 +01:00
349 lines
8.4 KiB
JavaScript
349 lines
8.4 KiB
JavaScript
/**
|
|
* Holds all already loaded javascript libaries
|
|
*
|
|
* @type HashTable
|
|
*/
|
|
var currentLoadedJavaScripts = new HashTable();
|
|
|
|
|
|
/**
|
|
* Looks for script tags inside the given string and checks if the files
|
|
* are already loaded.
|
|
*
|
|
* When already loaded, the scripts will ignored.
|
|
*
|
|
* @returns {undefined}
|
|
*/
|
|
function parseHtml(htmlString) {
|
|
var re = /<script type="text\/javascript" src="([\s\S]*?)"><\/script>/gm;
|
|
|
|
var match;
|
|
while (match = re.exec(htmlString)) {
|
|
|
|
js = match[1];
|
|
|
|
if (currentLoadedJavaScripts.hasItem(js)) {
|
|
// Remove Script Tag
|
|
//console.log("Ignore load of : "+js);
|
|
htmlString = htmlString.replace(match[0], "");
|
|
|
|
} else {
|
|
// Let Script Tag
|
|
//console.log("First load of: "+js);
|
|
currentLoadedJavaScripts.setItem(js, 1);
|
|
|
|
}
|
|
|
|
}
|
|
return htmlString;
|
|
}
|
|
|
|
|
|
/**
|
|
* Hashtable
|
|
*
|
|
* Javscript Class which represents a hashtable.
|
|
*
|
|
* @param {type} obj
|
|
* @returns {HashTable}
|
|
*/
|
|
function HashTable(obj) {
|
|
this.length = 0;
|
|
this.items = {};
|
|
for (var p in obj) {
|
|
if (obj.hasOwnProperty(p)) {
|
|
this.items[p] = obj[p];
|
|
this.length++;
|
|
}
|
|
}
|
|
|
|
this.setItem = function (key, value) {
|
|
var previous = undefined;
|
|
if (this.hasItem(key)) {
|
|
previous = this.items[key];
|
|
}
|
|
else {
|
|
this.length++;
|
|
}
|
|
this.items[key] = value;
|
|
return previous;
|
|
}
|
|
|
|
this.getItem = function (key) {
|
|
return this.hasItem(key) ? this.items[key] : undefined;
|
|
}
|
|
|
|
this.hasItem = function (key) {
|
|
return this.items.hasOwnProperty(key);
|
|
}
|
|
|
|
this.removeItem = function (key) {
|
|
if (this.hasItem(key)) {
|
|
previous = this.items[key];
|
|
this.length--;
|
|
delete this.items[key];
|
|
return previous;
|
|
}
|
|
else {
|
|
return undefined;
|
|
}
|
|
}
|
|
|
|
this.keys = function () {
|
|
var keys = [];
|
|
for (var k in this.items) {
|
|
if (this.hasItem(k)) {
|
|
keys.push(k);
|
|
}
|
|
}
|
|
return keys;
|
|
}
|
|
|
|
this.values = function () {
|
|
var values = [];
|
|
for (var k in this.items) {
|
|
if (this.hasItem(k)) {
|
|
values.push(this.items[k]);
|
|
}
|
|
}
|
|
return values;
|
|
}
|
|
|
|
this.each = function (fn) {
|
|
for (var k in this.items) {
|
|
if (this.hasItem(k)) {
|
|
fn(k, this.items[k]);
|
|
}
|
|
}
|
|
}
|
|
|
|
this.clear = function () {
|
|
this.items = {}
|
|
this.length = 0;
|
|
}
|
|
}
|
|
|
|
|
|
/**
|
|
* setModalLoader
|
|
*
|
|
* Change buttons with loader
|
|
*
|
|
*/
|
|
function setModalLoader() {
|
|
$(".modal-footer .btn").hide();
|
|
$(".modal-footer .loader").removeClass("hidden");
|
|
}
|
|
|
|
|
|
$(document).ready(function () {
|
|
|
|
/* Ensures after hide modal content is removed. */
|
|
$('#globalModal').on('hidden.bs.modal', function (e) {
|
|
$(this).removeData('bs.modal');
|
|
|
|
// just close modal and reset modal content to default (shows the loader)
|
|
$(this).html('<div class="modal-dialog"><div class="modal-content"><div class="modal-body"><div class="loader"><div class="sk-spinner sk-spinner-three-bounce"><div class="sk-bounce1"></div><div class="sk-bounce2"></div><div class="sk-bounce3"></div></div></div></div></div></div>');
|
|
})
|
|
|
|
// set Modal handler to all modal links
|
|
setModalHandler();
|
|
|
|
initPlugins();
|
|
|
|
});
|
|
|
|
function setModalHandler() {
|
|
|
|
// unbind all previously-attached events
|
|
$("a[data-target='#globalModal']").unbind();
|
|
|
|
$(document).off('click.humhub');
|
|
$(document).on('click.humhub', "a[data-target='#globalModal']", function (ev) {
|
|
ev.preventDefault();
|
|
var options = {
|
|
'show' : true,
|
|
'backdrop': $(this).data('backdrop')
|
|
}
|
|
$("#globalModal").modal(options);
|
|
var target = $(this).attr("href");
|
|
|
|
// load the url and show modal on success
|
|
$("#globalModal").load(target, function () {
|
|
// animate options
|
|
});
|
|
});
|
|
}
|
|
|
|
function initPlugins() {
|
|
|
|
// show Tooltips on elements inside the views, which have the class 'tt'
|
|
$('.tt').tooltip({
|
|
html: false,
|
|
container: 'body'
|
|
});
|
|
|
|
// show Popovers on elements inside the views, which have the class 'po'
|
|
$('.po').popover({html: true});
|
|
|
|
// activate placeholder text for older browsers (specially IE)
|
|
$('input, textarea').placeholder();
|
|
|
|
// Replace the standard checkbox and radio buttons
|
|
$('body').find(':checkbox, :radio').flatelements();
|
|
|
|
$('a[data-loader="modal"], button[data-loader="modal"]').loader();
|
|
|
|
}
|
|
|
|
// call this after every ajax loading
|
|
$(document).ajaxComplete(function (event, xhr, settings) {
|
|
|
|
initPlugins();
|
|
|
|
// set Modal handler to all modal links
|
|
setModalHandler();
|
|
|
|
});
|
|
|
|
$('#globalModal').on('shown.bs.modal', function (e) {
|
|
// reduce the standard modal width
|
|
$('.modal-dialog').css('width', '300px');
|
|
})
|
|
|
|
|
|
$(document).on('show.bs.modal', '.modal', function (event) {
|
|
$(this).appendTo($('body'));
|
|
});
|
|
$(document).on('shown.bs.modal', '.modal.in', function (event) {
|
|
setModalsAndBackdropsOrder();
|
|
});
|
|
$(document).on('hidden.bs.modal', '.modal', function (event) {
|
|
setModalsAndBackdropsOrder();
|
|
});
|
|
|
|
|
|
|
|
function setModalsAndBackdropsOrder() {
|
|
var modalZIndex = 1040;
|
|
$('.modal.in').each(function (index) {
|
|
var $modal = $(this);
|
|
modalZIndex++;
|
|
$modal.css('zIndex', modalZIndex);
|
|
$modal.next('.modal-backdrop.in').addClass('hidden').css('zIndex', modalZIndex - 1);
|
|
});
|
|
$('.modal.in:visible:last').focus().next('.modal-backdrop.in').removeClass('hidden');
|
|
}
|
|
|
|
//////////////////////////////////////////////////////////////////////////
|
|
////////////////////////// TIME-FORMATTING ///////////////////////////////
|
|
//////////////////////////////////////////////////////////////////////////
|
|
|
|
|
|
// Get favourites
|
|
$.fn.format = function (options) {
|
|
|
|
// get the id from the invoking element
|
|
var _id = $(this).attr("id");
|
|
|
|
|
|
//*************** Private Functions ****************//
|
|
|
|
var setTimeFormat = function () {
|
|
|
|
// save value from textinput into a variable
|
|
var _value = $("#" + _id).val();
|
|
|
|
if (_value != "") {
|
|
|
|
// by this type, set the value to hours until the value is 23
|
|
if (options.type == "daytime") {
|
|
|
|
// set only hours
|
|
if (_value <= 23) {
|
|
|
|
// find the right value
|
|
for (var j = 1; j < 24; j++) {
|
|
if (_value == j) {
|
|
|
|
// set the right time format
|
|
_value = j + ":00";
|
|
|
|
}
|
|
}
|
|
}
|
|
|
|
// set only minutes
|
|
if (_value > 23 && _value <= 59) {
|
|
_value = "0:" + _value;
|
|
}
|
|
|
|
}
|
|
|
|
|
|
// divide in hours and minutes by a string length of 3
|
|
if (_value >= 60 && _value < 1000) {
|
|
_value = _value.substr(0, 1) + ":" + _value.substr(1, 2);
|
|
}
|
|
|
|
// divide in hours and minutes by a string length of 4
|
|
if (_value >= 1000 && _value < 10000) {
|
|
_value = _value.substr(0, 2) + ":" + _value.substr(2, 3);
|
|
}
|
|
|
|
// if the value is "0" and that isn't allowed, empty the string
|
|
if (options.zero == false && _value == "0:00") {
|
|
_value = "";
|
|
}
|
|
|
|
var str = _value;
|
|
var res = str.split(":");
|
|
|
|
if (_value.length < 5) {
|
|
if (res[0] < 10) {
|
|
_value = "0" + res[0] + ":" + res[1];
|
|
}
|
|
}
|
|
|
|
|
|
// provide the well formated value
|
|
return _value;
|
|
|
|
}
|
|
}
|
|
|
|
|
|
//*************** Event Handler ****************//
|
|
|
|
$("#" + _id).focusout(function () {
|
|
|
|
// set time format
|
|
if (options.type == "euro") {
|
|
$("#" + _id).val(setEuroFormat());
|
|
} else {
|
|
$("#" + _id).val(setTimeFormat());
|
|
}
|
|
|
|
})
|
|
|
|
}
|
|
|
|
function htmlEncode(value) {
|
|
//create a in-memory div, set it's inner text(which jQuery automatically encodes)
|
|
//then grab the encoded contents back out. The div never exists on the page.
|
|
return $('<div/>').text(value).html();
|
|
}
|
|
|
|
function htmlDecode(value) {
|
|
return $('<div/>').html(value).text();
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|