3
* http://github.com/jlukic/semantic-ui/
6
* Copyright 2014 Contributors
7
* Released under the MIT license
8
* http://opensource.org/licenses/MIT
12
;(function ( $, window, document, undefined ) {
14
$.fn.dimmer = function(parameters) {
16
$allModules = $(this),
18
time = new Date().getTime(),
22
methodInvoked = (typeof query == 'string'),
23
queryArguments = [].slice.call(arguments, 1),
31
settings = ( $.isPlainObject(parameters) )
32
? $.extend(true, {}, $.fn.dimmer.settings, parameters)
33
: $.extend({}, $.fn.dimmer.settings),
35
selector = settings.selector,
36
namespace = settings.namespace,
37
className = settings.className,
38
error = settings.error,
40
eventNamespace = '.' + namespace,
41
moduleNamespace = 'module-' + namespace,
42
moduleSelector = $allModules.selector || '',
44
clickEvent = ('ontouchstart' in document.documentElement)
53
instance = $module.data(moduleNamespace),
59
preinitialize: function() {
60
if( module.is.dimmer() ) {
61
$dimmable = $module.parent();
66
if( module.has.dimmer() ) {
67
$dimmer = $dimmable.children(selector.dimmer).first();
70
$dimmer = module.create();
75
initialize: function() {
76
module.debug('Initializing dimmer', settings);
77
if(settings.on == 'hover') {
79
.on('mouseenter' + eventNamespace, module.show)
80
.on('mouseleave' + eventNamespace, module.hide)
83
else if(settings.on == 'click') {
85
.on(clickEvent + eventNamespace, module.toggle)
89
if( module.is.page() ) {
90
module.debug('Setting as a page dimmer', $dimmable);
91
module.set.pageDimmer();
94
if(settings.closable) {
95
module.verbose('Adding dimmer close event', $dimmer);
97
.on(clickEvent + eventNamespace, module.event.click)
100
module.set.dimmable();
101
module.instantiate();
104
instantiate: function() {
105
module.verbose('Storing instance of module', module);
108
.data(moduleNamespace, instance)
112
destroy: function() {
113
module.verbose('Destroying previous module', $dimmer);
115
.removeData(moduleNamespace)
127
click: function(event) {
128
module.verbose('Determining if event occured on dimmer', event);
129
if( $dimmer.find(event.target).size() === 0 || $(event.target).is(selector.content) ) {
131
event.stopImmediatePropagation();
137
addContent: function(element) {
139
$content = $(element)
141
module.debug('Add content to dimmer', $content);
142
if($content.parent()[0] !== $dimmer[0]) {
143
$content.detach().appendTo($dimmer);
148
return $( settings.template.dimmer() ).appendTo($dimmable);
152
show: function(callback) {
153
callback = $.isFunction(callback)
158
if(settings.on != 'hover' && settings.useCSS && $.fn.transition !== undefined && $dimmer.transition('is supported')) {
161
animation : settings.transition + ' in',
163
duration : module.get.duration(),
164
complete : function() {
172
module.verbose('Showing dimmer animation with javascript');
180
.fadeTo(module.get.duration(), 1, function() {
181
$dimmer.removeAttr('style');
188
hide: function(callback) {
189
callback = $.isFunction(callback)
193
if(settings.on != 'hover' && settings.useCSS && $.fn.transition !== undefined && $dimmer.transition('is supported')) {
194
module.verbose('Hiding dimmer with css');
197
animation : settings.transition + ' out',
198
duration : module.get.duration(),
200
complete : function() {
201
module.remove.dimmed();
202
module.remove.active();
209
module.verbose('Hiding dimmer with javascript');
212
.fadeOut(module.get.duration(), function() {
213
$dimmer.removeAttr('style');
214
module.remove.dimmed();
215
module.remove.active();
227
duration: function() {
228
if(typeof settings.duration == 'object') {
229
if( module.is.active() ) {
230
return settings.duration.hide;
233
return settings.duration.show;
236
return settings.duration;
242
return ( $module.children(selector.dimmer).size() > 0 );
248
return $dimmer.hasClass(className.active);
250
animating: function() {
251
return ( $dimmer.is(':animated') || $dimmer.hasClass(className.transition) );
254
return $module.is(selector.dimmer);
256
dimmable: function() {
257
return $module.is(selector.dimmable);
260
return $dimmable.hasClass(className.dimmed);
262
disabled: function() {
263
return $dimmable.hasClass(className.disabled);
265
enabled: function() {
266
return !module.is.disabled();
269
return $dimmable.is('body');
271
pageDimmer: function() {
272
return $dimmer.hasClass(className.pageDimmer);
278
return !$dimmer.hasClass(className.disabled);
286
.removeClass(className.transition)
287
.addClass(className.active)
290
dimmable: function() {
291
$dimmable.addClass(className.dimmable);
294
$dimmable.addClass(className.dimmed);
296
pageDimmer: function() {
297
$dimmer.addClass(className.pageDimmer);
299
disabled: function() {
300
$dimmer.addClass(className.disabled);
307
.removeClass(className.transition)
308
.removeClass(className.active)
312
$dimmable.removeClass(className.dimmed);
314
disabled: function() {
315
$dimmer.removeClass(className.disabled);
319
show: function(callback) {
320
callback = $.isFunction(callback)
324
module.debug('Showing dimmer', $dimmer, settings);
325
if( !module.is.active() && module.is.enabled() ) {
326
module.animate.show(callback);
327
$.proxy(settings.onShow, element)();
328
$.proxy(settings.onChange, element)();
331
module.debug('Dimmer is already shown or disabled');
335
hide: function(callback) {
336
callback = $.isFunction(callback)
340
if( module.is.active() || module.is.animating() ) {
341
module.debug('Hiding dimmer', $dimmer);
342
module.animate.hide(callback);
343
$.proxy(settings.onHide, element)();
344
$.proxy(settings.onChange, element)();
347
module.debug('Dimmer is not visible');
352
module.verbose('Toggling dimmer visibility', $dimmer);
353
if( !module.is.dimmed() ) {
361
setting: function(name, value) {
362
if( $.isPlainObject(name) ) {
363
$.extend(true, settings, name);
365
else if(value !== undefined) {
366
settings[name] = value;
369
return settings[name];
372
internal: function(name, value) {
373
if( $.isPlainObject(name) ) {
374
$.extend(true, module, name);
376
else if(value !== undefined) {
377
module[name] = value;
385
if(settings.performance) {
386
module.performance.log(arguments);
389
module.debug = Function.prototype.bind.call(console.info, console, settings.name + ':');
390
module.debug.apply(console, arguments);
394
verbose: function() {
395
if(settings.verbose && settings.debug) {
396
if(settings.performance) {
397
module.performance.log(arguments);
400
module.verbose = Function.prototype.bind.call(console.info, console, settings.name + ':');
401
module.verbose.apply(console, arguments);
406
module.error = Function.prototype.bind.call(console.error, console, settings.name + ':');
407
module.error.apply(console, arguments);
410
log: function(message) {
416
if(settings.performance) {
417
currentTime = new Date().getTime();
418
previousTime = time || currentTime;
419
executionTime = currentTime - previousTime;
424
'Arguments' : [].slice.call(message, 1) || '',
425
'Execution Time' : executionTime
428
clearTimeout(module.performance.timer);
429
module.performance.timer = setTimeout(module.performance.display, 100);
431
display: function() {
433
title = settings.name + ':',
437
clearTimeout(module.performance.timer);
438
$.each(performance, function(index, data) {
439
totalTime += data['Execution Time'];
441
title += ' ' + totalTime + 'ms';
443
title += ' \'' + moduleSelector + '\'';
445
if($allModules.size() > 1) {
446
title += ' ' + '(' + $allModules.size() + ')';
448
if( (console.group !== undefined || console.table !== undefined) && performance.length > 0) {
449
console.groupCollapsed(title);
451
console.table(performance);
454
$.each(performance, function(index, data) {
455
console.log(data['Name'] + ': ' + data['Execution Time']+'ms');
463
invoke: function(query, passedArguments, context) {
470
passedArguments = passedArguments || queryArguments;
471
context = element || context;
472
if(typeof query == 'string' && object !== undefined) {
473
query = query.split(/[\. ]/);
474
maxDepth = query.length - 1;
475
$.each(query, function(depth, value) {
476
var camelCaseValue = (depth != maxDepth)
477
? value + query[depth + 1].charAt(0).toUpperCase() + query[depth + 1].slice(1)
480
if( $.isPlainObject( object[camelCaseValue] ) && (depth != maxDepth) ) {
481
object = object[camelCaseValue];
483
else if( object[camelCaseValue] !== undefined ) {
484
found = object[camelCaseValue];
487
else if( $.isPlainObject( object[value] ) && (depth != maxDepth) ) {
488
object = object[value];
490
else if( object[value] !== undefined ) {
491
found = object[value];
499
if ( $.isFunction( found ) ) {
500
response = found.apply(context, passedArguments);
502
else if(found !== undefined) {
505
if($.isArray(returnedValue)) {
506
returnedValue.push(response);
508
else if(returnedValue !== undefined) {
509
returnedValue = [returnedValue, response];
511
else if(response !== undefined) {
512
returnedValue = response;
518
module.preinitialize();
521
if(instance === undefined) {
524
module.invoke(query);
527
if(instance !== undefined) {
535
return (returnedValue !== undefined)
541
$.fn.dimmer.settings = {
544
namespace : 'dimmer',
560
onChange : function(){},
561
onShow : function(){},
562
onHide : function(){},
565
method : 'The method you called is not defined.'
569
dimmable : '.ui.dimmable',
570
dimmer : '.ui.dimmer',
571
content : '.ui.dimmer > .content, .ui.dimmer > .content > .center'
576
return $('<div />').attr('class', 'ui dimmer');
582
dimmable : 'ui dimmable',
584
disabled : 'disabled',
588
transition : 'transition'
593
})( jQuery, window , document );
b'\\ No newline at end of file'