wishthis/semantic/dist/components/site.js
2023-12-19 15:45:49 +01:00

453 lines
16 KiB
JavaScript

/*!
* # Fomantic-UI 2.9.3 - Site
* https://github.com/fomantic/Fomantic-UI/
*
*
* Released under the MIT license
* https://opensource.org/licenses/MIT
*
*/
(function ($, window, document) {
'use strict';
function isFunction(obj) {
return typeof obj === 'function' && typeof obj.nodeType !== 'number';
}
window = window !== undefined && window.Math === Math
? window
: globalThis;
$.fn.site = function (parameters) {
var
time = Date.now(),
performance = [],
query = arguments[0],
methodInvoked = typeof query === 'string',
queryArguments = [].slice.call(arguments, 1),
settings = $.isPlainObject(parameters)
? $.extend(true, {}, $.site.settings, parameters)
: $.extend({}, $.site.settings),
namespace = settings.namespace,
error = settings.error,
moduleNamespace = 'module-' + namespace,
$document = $(document),
$module = $document,
element = this,
instance = $module.data(moduleNamespace),
module,
returnedValue
;
module = {
initialize: function () {
module.instantiate();
},
instantiate: function () {
module.verbose('Storing instance of site', module);
instance = module;
$module
.data(moduleNamespace, module)
;
},
normalize: function () {
// keep the function for backward compatibility
// eslint-disable-next-line no-useless-return
return;
},
fix: {
consoleClear: function () {
module.debug('Disabling programmatic console clearing');
window.console.clear = function () {};
},
},
moduleExists: function (name) {
return $.fn[name] !== undefined && $.fn[name].settings !== undefined;
},
enabled: {
modules: function (modules) {
var
enabledModules = []
;
modules = modules || settings.modules;
$.each(modules, function (index, name) {
if (module.moduleExists(name)) {
enabledModules.push(name);
}
});
return enabledModules;
},
},
disabled: {
modules: function (modules) {
var
disabledModules = []
;
modules = modules || settings.modules;
$.each(modules, function (index, name) {
if (!module.moduleExists(name)) {
disabledModules.push(name);
}
});
return disabledModules;
},
},
change: {
setting: function (setting, value, modules, modifyExisting) {
modules = typeof modules === 'string'
? (modules === 'all'
? settings.modules
: [modules])
: modules || settings.modules;
modifyExisting = modifyExisting !== undefined
? modifyExisting
: true;
$.each(modules, function (index, name) {
var
namespace = module.moduleExists(name)
? $.fn[name].settings.namespace || false
: true,
$existingModules
;
if (module.moduleExists(name)) {
module.verbose('Changing default setting', setting, value, name);
$.fn[name].settings[setting] = value;
if (modifyExisting && namespace) {
$existingModules = $(':data(module-' + namespace + ')');
if ($existingModules.length > 0) {
module.verbose('Modifying existing settings', $existingModules);
$existingModules[name]('setting', setting, value);
}
}
}
});
},
settings: function (newSettings, modules, modifyExisting) {
modules = typeof modules === 'string'
? [modules]
: modules || settings.modules;
modifyExisting = modifyExisting !== undefined
? modifyExisting
: true;
$.each(modules, function (index, name) {
var
$existingModules
;
if (module.moduleExists(name)) {
module.verbose('Changing default setting', newSettings, name);
$.extend(true, $.fn[name].settings, newSettings);
if (modifyExisting && namespace) {
$existingModules = $(':data(module-' + namespace + ')');
if ($existingModules.length > 0) {
module.verbose('Modifying existing settings', $existingModules);
$existingModules[name]('setting', newSettings);
}
}
}
});
},
},
enable: {
console: function () {
module.console(true);
},
debug: function (modules, modifyExisting) {
modules = modules || settings.modules;
module.debug('Enabling debug for modules', modules);
module.change.setting('debug', true, modules, modifyExisting);
},
verbose: function (modules, modifyExisting) {
modules = modules || settings.modules;
module.debug('Enabling verbose debug for modules', modules);
module.change.setting('verbose', true, modules, modifyExisting);
},
},
disable: {
console: function () {
module.console(false);
},
debug: function (modules, modifyExisting) {
modules = modules || settings.modules;
module.debug('Disabling debug for modules', modules);
module.change.setting('debug', false, modules, modifyExisting);
},
verbose: function (modules, modifyExisting) {
modules = modules || settings.modules;
module.debug('Disabling verbose debug for modules', modules);
module.change.setting('verbose', false, modules, modifyExisting);
},
},
console: function (enable) {
if (enable) {
if (instance.cache.console === undefined) {
module.error(error.console);
return;
}
module.debug('Restoring console function');
window.console = instance.cache.console;
} else {
module.debug('Disabling console function');
instance.cache.console = window.console;
window.console = {
clear: function () {},
error: function () {},
group: function () {},
groupCollapsed: function () {},
groupEnd: function () {},
info: function () {},
log: function () {},
table: function () {},
warn: function () {},
};
}
},
destroy: function () {
module.verbose('Destroying previous site for', $module);
$module
.removeData(moduleNamespace)
;
},
cache: {},
setting: function (name, value) {
if ($.isPlainObject(name)) {
$.extend(true, settings, name);
} else if (value !== undefined) {
settings[name] = value;
} else {
return settings[name];
}
},
internal: function (name, value) {
if ($.isPlainObject(name)) {
$.extend(true, module, name);
} else if (value !== undefined) {
module[name] = value;
} else {
return module[name];
}
},
debug: function () {
if (settings.debug) {
if (settings.performance) {
module.performance.log(arguments);
} else {
module.debug = Function.prototype.bind.call(console.info, console, settings.name + ':');
module.debug.apply(console, arguments);
}
}
},
verbose: function () {
if (settings.verbose && settings.debug) {
if (settings.performance) {
module.performance.log(arguments);
} else {
module.verbose = Function.prototype.bind.call(console.info, console, settings.name + ':');
module.verbose.apply(console, arguments);
}
}
},
error: function () {
module.error = Function.prototype.bind.call(console.error, console, settings.name + ':');
module.error.apply(console, arguments);
},
performance: {
log: function (message) {
var
currentTime,
executionTime,
previousTime
;
if (settings.performance) {
currentTime = Date.now();
previousTime = time || currentTime;
executionTime = currentTime - previousTime;
time = currentTime;
performance.push({
Element: element,
Name: message[0],
Arguments: [].slice.call(message, 1) || '',
'Execution Time': executionTime,
});
}
clearTimeout(module.performance.timer);
module.performance.timer = setTimeout(module.performance.display, 500);
},
display: function () {
var
title = settings.name + ':',
totalTime = 0
;
time = false;
clearTimeout(module.performance.timer);
$.each(performance, function (index, data) {
totalTime += data['Execution Time'];
});
title += ' ' + totalTime + 'ms';
if (performance.length > 0) {
console.groupCollapsed(title);
if (console.table) {
console.table(performance);
} else {
$.each(performance, function (index, data) {
console.log(data.Name + ': ' + data['Execution Time'] + 'ms');
});
}
console.groupEnd();
}
performance = [];
},
},
invoke: function (query, passedArguments, context) {
var
object = instance,
maxDepth,
found,
response
;
passedArguments = passedArguments || queryArguments;
context = context || element;
if (typeof query === 'string' && object !== undefined) {
query = query.split(/[ .]/);
maxDepth = query.length - 1;
$.each(query, function (depth, value) {
var camelCaseValue = depth !== maxDepth
? value + query[depth + 1].charAt(0).toUpperCase() + query[depth + 1].slice(1)
: query
;
if ($.isPlainObject(object[camelCaseValue]) && (depth !== maxDepth)) {
object = object[camelCaseValue];
} else if (object[camelCaseValue] !== undefined) {
found = object[camelCaseValue];
return false;
} else if ($.isPlainObject(object[value]) && (depth !== maxDepth)) {
object = object[value];
} else if (object[value] !== undefined) {
found = object[value];
return false;
} else {
module.error(error.method, query);
return false;
}
});
}
if (isFunction(found)) {
response = found.apply(context, passedArguments);
} else if (found !== undefined) {
response = found;
}
if (Array.isArray(returnedValue)) {
returnedValue.push(response);
} else if (returnedValue !== undefined) {
returnedValue = [returnedValue, response];
} else if (response !== undefined) {
returnedValue = response;
}
return found;
},
};
if (methodInvoked) {
if (instance === undefined) {
module.initialize();
}
module.invoke(query);
} else {
if (instance !== undefined) {
module.destroy();
}
module.initialize();
}
return returnedValue !== undefined
? returnedValue
: this;
};
$.site = $.fn.site;
$.site.settings = {
name: 'Site',
namespace: 'site',
error: {
console: 'Console cannot be restored, most likely it was overwritten outside of module',
method: 'The method you called is not defined.',
},
debug: false,
verbose: false,
performance: true,
modules: [
'accordion',
'api',
'calendar',
'checkbox',
'dimmer',
'dropdown',
'embed',
'flyout',
'form',
'modal',
'nag',
'popup',
'progress',
'rating',
'search',
'shape',
'sidebar',
'slider',
'state',
'sticky',
'tab',
'toast',
'transition',
'visibility',
],
siteNamespace: 'site',
namespaceStub: {
cache: {},
config: {},
sections: {},
section: {},
utilities: {},
},
};
// allows for selection of elements with data attributes
$.extend($.expr.pseudos, {
data: $.expr.createPseudo(function (dataName) {
return function (elem) {
return !!$.data(elem, dataName);
};
}),
});
})(jQuery, window, document);