| @@ 21-497 (lines=477) @@ | ||
| 18 | * |
|
| 19 | */ |
|
| 20 | ||
| 21 | ;(function ($, window, document, undefined) { |
|
| 22 | ||
| 23 | $.site = $.fn.site = function(parameters) { |
|
| 24 | var |
|
| 25 | time = new Date().getTime(), |
|
| 26 | performance = [], |
|
| 27 | ||
| 28 | query = arguments[0], |
|
| 29 | methodInvoked = (typeof query == 'string'), |
|
| 30 | queryArguments = [].slice.call(arguments, 1), |
|
| 31 | ||
| 32 | settings = ( $.isPlainObject(parameters) ) |
|
| 33 | ? $.extend(true, {}, $.site.settings, parameters) |
|
| 34 | : $.extend({}, $.site.settings), |
|
| 35 | ||
| 36 | namespace = settings.namespace, |
|
| 37 | error = settings.error, |
|
| 38 | ||
| 39 | eventNamespace = '.' + namespace, |
|
| 40 | moduleNamespace = 'module-' + namespace, |
|
| 41 | ||
| 42 | $document = $(document), |
|
| 43 | $module = $document, |
|
| 44 | element = this, |
|
| 45 | instance = $module.data(moduleNamespace), |
|
| 46 | ||
| 47 | module, |
|
| 48 | returnedValue |
|
| 49 | ; |
|
| 50 | module = { |
|
| 51 | ||
| 52 | initialize: function() { |
|
| 53 | module.instantiate(); |
|
| 54 | }, |
|
| 55 | ||
| 56 | instantiate: function() { |
|
| 57 | module.verbose('Storing instance of site', module); |
|
| 58 | instance = module; |
|
| 59 | $module |
|
| 60 | .data(moduleNamespace, module) |
|
| 61 | ; |
|
| 62 | }, |
|
| 63 | ||
| 64 | normalize: function() { |
|
| 65 | module.fix.console(); |
|
| 66 | module.fix.requestAnimationFrame(); |
|
| 67 | }, |
|
| 68 | ||
| 69 | fix: { |
|
| 70 | console: function() { |
|
| 71 | module.debug('Normalizing window.console'); |
|
| 72 | if (console === undefined || console.log === undefined) { |
|
| 73 | module.verbose('Console not available, normalizing events'); |
|
| 74 | module.disable.console(); |
|
| 75 | } |
|
| 76 | if (typeof console.group == 'undefined' || typeof console.groupEnd == 'undefined' || typeof console.groupCollapsed == 'undefined') { |
|
| 77 | module.verbose('Console group not available, normalizing events'); |
|
| 78 | window.console.group = function() {}; |
|
| 79 | window.console.groupEnd = function() {}; |
|
| 80 | window.console.groupCollapsed = function() {}; |
|
| 81 | } |
|
| 82 | if (typeof console.markTimeline == 'undefined') { |
|
| 83 | module.verbose('Mark timeline not available, normalizing events'); |
|
| 84 | window.console.markTimeline = function() {}; |
|
| 85 | } |
|
| 86 | }, |
|
| 87 | consoleClear: function() { |
|
| 88 | module.debug('Disabling programmatic console clearing'); |
|
| 89 | window.console.clear = function() {}; |
|
| 90 | }, |
|
| 91 | requestAnimationFrame: function() { |
|
| 92 | module.debug('Normalizing requestAnimationFrame'); |
|
| 93 | if(window.requestAnimationFrame === undefined) { |
|
| 94 | module.debug('RequestAnimationFrame not available, normalizing event'); |
|
| 95 | window.requestAnimationFrame = window.requestAnimationFrame |
|
| 96 | || window.mozRequestAnimationFrame |
|
| 97 | || window.webkitRequestAnimationFrame |
|
| 98 | || window.msRequestAnimationFrame |
|
| 99 | || function(callback) { setTimeout(callback, 0); } |
|
| 100 | ; |
|
| 101 | } |
|
| 102 | } |
|
| 103 | }, |
|
| 104 | ||
| 105 | moduleExists: function(name) { |
|
| 106 | return ($.fn[name] !== undefined && $.fn[name].settings !== undefined); |
|
| 107 | }, |
|
| 108 | ||
| 109 | enabled: { |
|
| 110 | modules: function(modules) { |
|
| 111 | var |
|
| 112 | enabledModules = [] |
|
| 113 | ; |
|
| 114 | modules = modules || settings.modules; |
|
| 115 | $.each(modules, function(index, name) { |
|
| 116 | if(module.moduleExists(name)) { |
|
| 117 | enabledModules.push(name); |
|
| 118 | } |
|
| 119 | }); |
|
| 120 | return enabledModules; |
|
| 121 | } |
|
| 122 | }, |
|
| 123 | ||
| 124 | disabled: { |
|
| 125 | modules: function(modules) { |
|
| 126 | var |
|
| 127 | disabledModules = [] |
|
| 128 | ; |
|
| 129 | modules = modules || settings.modules; |
|
| 130 | $.each(modules, function(index, name) { |
|
| 131 | if(!module.moduleExists(name)) { |
|
| 132 | disabledModules.push(name); |
|
| 133 | } |
|
| 134 | }); |
|
| 135 | return disabledModules; |
|
| 136 | } |
|
| 137 | }, |
|
| 138 | ||
| 139 | change: { |
|
| 140 | setting: function(setting, value, modules, modifyExisting) { |
|
| 141 | modules = (typeof modules === 'string') |
|
| 142 | ? (modules === 'all') |
|
| 143 | ? settings.modules |
|
| 144 | : [modules] |
|
| 145 | : modules || settings.modules |
|
| 146 | ; |
|
| 147 | modifyExisting = (modifyExisting !== undefined) |
|
| 148 | ? modifyExisting |
|
| 149 | : true |
|
| 150 | ; |
|
| 151 | $.each(modules, function(index, name) { |
|
| 152 | var |
|
| 153 | namespace = (module.moduleExists(name)) |
|
| 154 | ? $.fn[name].settings.namespace || false |
|
| 155 | : true, |
|
| 156 | $existingModules |
|
| 157 | ; |
|
| 158 | if(module.moduleExists(name)) { |
|
| 159 | module.verbose('Changing default setting', setting, value, name); |
|
| 160 | $.fn[name].settings[setting] = value; |
|
| 161 | if(modifyExisting && namespace) { |
|
| 162 | $existingModules = $(':data(module-' + namespace + ')'); |
|
| 163 | if($existingModules.length > 0) { |
|
| 164 | module.verbose('Modifying existing settings', $existingModules); |
|
| 165 | $existingModules[name]('setting', setting, value); |
|
| 166 | } |
|
| 167 | } |
|
| 168 | } |
|
| 169 | }); |
|
| 170 | }, |
|
| 171 | settings: function(newSettings, modules, modifyExisting) { |
|
| 172 | modules = (typeof modules === 'string') |
|
| 173 | ? [modules] |
|
| 174 | : modules || settings.modules |
|
| 175 | ; |
|
| 176 | modifyExisting = (modifyExisting !== undefined) |
|
| 177 | ? modifyExisting |
|
| 178 | : true |
|
| 179 | ; |
|
| 180 | $.each(modules, function(index, name) { |
|
| 181 | var |
|
| 182 | $existingModules |
|
| 183 | ; |
|
| 184 | if(module.moduleExists(name)) { |
|
| 185 | module.verbose('Changing default setting', newSettings, name); |
|
| 186 | $.extend(true, $.fn[name].settings, newSettings); |
|
| 187 | if(modifyExisting && namespace) { |
|
| 188 | $existingModules = $(':data(module-' + namespace + ')'); |
|
| 189 | if($existingModules.length > 0) { |
|
| 190 | module.verbose('Modifying existing settings', $existingModules); |
|
| 191 | $existingModules[name]('setting', newSettings); |
|
| 192 | } |
|
| 193 | } |
|
| 194 | } |
|
| 195 | }); |
|
| 196 | } |
|
| 197 | }, |
|
| 198 | ||
| 199 | enable: { |
|
| 200 | console: function() { |
|
| 201 | module.console(true); |
|
| 202 | }, |
|
| 203 | debug: function(modules, modifyExisting) { |
|
| 204 | modules = modules || settings.modules; |
|
| 205 | module.debug('Enabling debug for modules', modules); |
|
| 206 | module.change.setting('debug', true, modules, modifyExisting); |
|
| 207 | }, |
|
| 208 | verbose: function(modules, modifyExisting) { |
|
| 209 | modules = modules || settings.modules; |
|
| 210 | module.debug('Enabling verbose debug for modules', modules); |
|
| 211 | module.change.setting('verbose', true, modules, modifyExisting); |
|
| 212 | } |
|
| 213 | }, |
|
| 214 | disable: { |
|
| 215 | console: function() { |
|
| 216 | module.console(false); |
|
| 217 | }, |
|
| 218 | debug: function(modules, modifyExisting) { |
|
| 219 | modules = modules || settings.modules; |
|
| 220 | module.debug('Disabling debug for modules', modules); |
|
| 221 | module.change.setting('debug', false, modules, modifyExisting); |
|
| 222 | }, |
|
| 223 | verbose: function(modules, modifyExisting) { |
|
| 224 | modules = modules || settings.modules; |
|
| 225 | module.debug('Disabling verbose debug for modules', modules); |
|
| 226 | module.change.setting('verbose', false, modules, modifyExisting); |
|
| 227 | } |
|
| 228 | }, |
|
| 229 | ||
| 230 | console: function(enable) { |
|
| 231 | if(enable) { |
|
| 232 | if(instance.cache.console === undefined) { |
|
| 233 | module.error(error.console); |
|
| 234 | return; |
|
| 235 | } |
|
| 236 | module.debug('Restoring console function'); |
|
| 237 | window.console = instance.cache.console; |
|
| 238 | } |
|
| 239 | else { |
|
| 240 | module.debug('Disabling console function'); |
|
| 241 | instance.cache.console = window.console; |
|
| 242 | window.console = { |
|
| 243 | clear : function(){}, |
|
| 244 | error : function(){}, |
|
| 245 | group : function(){}, |
|
| 246 | groupCollapsed : function(){}, |
|
| 247 | groupEnd : function(){}, |
|
| 248 | info : function(){}, |
|
| 249 | log : function(){}, |
|
| 250 | markTimeline : function(){}, |
|
| 251 | warn : function(){} |
|
| 252 | }; |
|
| 253 | } |
|
| 254 | }, |
|
| 255 | ||
| 256 | destroy: function() { |
|
| 257 | module.verbose('Destroying previous site for', $module); |
|
| 258 | $module |
|
| 259 | .removeData(moduleNamespace) |
|
| 260 | ; |
|
| 261 | }, |
|
| 262 | ||
| 263 | cache: {}, |
|
| 264 | ||
| 265 | setting: function(name, value) { |
|
| 266 | if( $.isPlainObject(name) ) { |
|
| 267 | $.extend(true, settings, name); |
|
| 268 | } |
|
| 269 | else if(value !== undefined) { |
|
| 270 | settings[name] = value; |
|
| 271 | } |
|
| 272 | else { |
|
| 273 | return settings[name]; |
|
| 274 | } |
|
| 275 | }, |
|
| 276 | internal: function(name, value) { |
|
| 277 | if( $.isPlainObject(name) ) { |
|
| 278 | $.extend(true, module, name); |
|
| 279 | } |
|
| 280 | else if(value !== undefined) { |
|
| 281 | module[name] = value; |
|
| 282 | } |
|
| 283 | else { |
|
| 284 | return module[name]; |
|
| 285 | } |
|
| 286 | }, |
|
| 287 | debug: function() { |
|
| 288 | if(settings.debug) { |
|
| 289 | if(settings.performance) { |
|
| 290 | module.performance.log(arguments); |
|
| 291 | } |
|
| 292 | else { |
|
| 293 | module.debug = Function.prototype.bind.call(console.info, console, settings.name + ':'); |
|
| 294 | module.debug.apply(console, arguments); |
|
| 295 | } |
|
| 296 | } |
|
| 297 | }, |
|
| 298 | verbose: function() { |
|
| 299 | if(settings.verbose && settings.debug) { |
|
| 300 | if(settings.performance) { |
|
| 301 | module.performance.log(arguments); |
|
| 302 | } |
|
| 303 | else { |
|
| 304 | module.verbose = Function.prototype.bind.call(console.info, console, settings.name + ':'); |
|
| 305 | module.verbose.apply(console, arguments); |
|
| 306 | } |
|
| 307 | } |
|
| 308 | }, |
|
| 309 | error: function() { |
|
| 310 | module.error = Function.prototype.bind.call(console.error, console, settings.name + ':'); |
|
| 311 | module.error.apply(console, arguments); |
|
| 312 | }, |
|
| 313 | performance: { |
|
| 314 | log: function(message) { |
|
| 315 | var |
|
| 316 | currentTime, |
|
| 317 | executionTime, |
|
| 318 | previousTime |
|
| 319 | ; |
|
| 320 | if(settings.performance) { |
|
| 321 | currentTime = new Date().getTime(); |
|
| 322 | previousTime = time || currentTime; |
|
| 323 | executionTime = currentTime - previousTime; |
|
| 324 | time = currentTime; |
|
| 325 | performance.push({ |
|
| 326 | 'Element' : element, |
|
| 327 | 'Name' : message[0], |
|
| 328 | 'Arguments' : [].slice.call(message, 1) || '', |
|
| 329 | 'Execution Time' : executionTime |
|
| 330 | }); |
|
| 331 | } |
|
| 332 | clearTimeout(module.performance.timer); |
|
| 333 | module.performance.timer = setTimeout(module.performance.display, 500); |
|
| 334 | }, |
|
| 335 | display: function() { |
|
| 336 | var |
|
| 337 | title = settings.name + ':', |
|
| 338 | totalTime = 0 |
|
| 339 | ; |
|
| 340 | time = false; |
|
| 341 | clearTimeout(module.performance.timer); |
|
| 342 | $.each(performance, function(index, data) { |
|
| 343 | totalTime += data['Execution Time']; |
|
| 344 | }); |
|
| 345 | title += ' ' + totalTime + 'ms'; |
|
| 346 | if( (console.group !== undefined || console.table !== undefined) && performance.length > 0) { |
|
| 347 | console.groupCollapsed(title); |
|
| 348 | if(console.table) { |
|
| 349 | console.table(performance); |
|
| 350 | } |
|
| 351 | else { |
|
| 352 | $.each(performance, function(index, data) { |
|
| 353 | console.log(data['Name'] + ': ' + data['Execution Time']+'ms'); |
|
| 354 | }); |
|
| 355 | } |
|
| 356 | console.groupEnd(); |
|
| 357 | } |
|
| 358 | performance = []; |
|
| 359 | } |
|
| 360 | }, |
|
| 361 | invoke: function(query, passedArguments, context) { |
|
| 362 | var |
|
| 363 | object = instance, |
|
| 364 | maxDepth, |
|
| 365 | found, |
|
| 366 | response |
|
| 367 | ; |
|
| 368 | passedArguments = passedArguments || queryArguments; |
|
| 369 | context = element || context; |
|
| 370 | if(typeof query == 'string' && object !== undefined) { |
|
| 371 | query = query.split(/[\. ]/); |
|
| 372 | maxDepth = query.length - 1; |
|
| 373 | $.each(query, function(depth, value) { |
|
| 374 | var camelCaseValue = (depth != maxDepth) |
|
| 375 | ? value + query[depth + 1].charAt(0).toUpperCase() + query[depth + 1].slice(1) |
|
| 376 | : query |
|
| 377 | ; |
|
| 378 | if( $.isPlainObject( object[camelCaseValue] ) && (depth != maxDepth) ) { |
|
| 379 | object = object[camelCaseValue]; |
|
| 380 | } |
|
| 381 | else if( object[camelCaseValue] !== undefined ) { |
|
| 382 | found = object[camelCaseValue]; |
|
| 383 | return false; |
|
| 384 | } |
|
| 385 | else if( $.isPlainObject( object[value] ) && (depth != maxDepth) ) { |
|
| 386 | object = object[value]; |
|
| 387 | } |
|
| 388 | else if( object[value] !== undefined ) { |
|
| 389 | found = object[value]; |
|
| 390 | return false; |
|
| 391 | } |
|
| 392 | else { |
|
| 393 | module.error(error.method, query); |
|
| 394 | return false; |
|
| 395 | } |
|
| 396 | }); |
|
| 397 | } |
|
| 398 | if ( $.isFunction( found ) ) { |
|
| 399 | response = found.apply(context, passedArguments); |
|
| 400 | } |
|
| 401 | else if(found !== undefined) { |
|
| 402 | response = found; |
|
| 403 | } |
|
| 404 | if($.isArray(returnedValue)) { |
|
| 405 | returnedValue.push(response); |
|
| 406 | } |
|
| 407 | else if(returnedValue !== undefined) { |
|
| 408 | returnedValue = [returnedValue, response]; |
|
| 409 | } |
|
| 410 | else if(response !== undefined) { |
|
| 411 | returnedValue = response; |
|
| 412 | } |
|
| 413 | return found; |
|
| 414 | } |
|
| 415 | }; |
|
| 416 | ||
| 417 | if(methodInvoked) { |
|
| 418 | if(instance === undefined) { |
|
| 419 | module.initialize(); |
|
| 420 | } |
|
| 421 | module.invoke(query); |
|
| 422 | } |
|
| 423 | else { |
|
| 424 | if(instance !== undefined) { |
|
| 425 | module.destroy(); |
|
| 426 | } |
|
| 427 | module.initialize(); |
|
| 428 | } |
|
| 429 | return (returnedValue !== undefined) |
|
| 430 | ? returnedValue |
|
| 431 | : this |
|
| 432 | ; |
|
| 433 | }; |
|
| 434 | ||
| 435 | $.site.settings = { |
|
| 436 | ||
| 437 | name : 'Site', |
|
| 438 | namespace : 'site', |
|
| 439 | ||
| 440 | error : { |
|
| 441 | console : 'Console cannot be restored, most likely it was overwritten outside of module', |
|
| 442 | method : 'The method you called is not defined.' |
|
| 443 | }, |
|
| 444 | ||
| 445 | debug : false, |
|
| 446 | verbose : false, |
|
| 447 | performance : true, |
|
| 448 | ||
| 449 | modules: [ |
|
| 450 | 'accordion', |
|
| 451 | 'api', |
|
| 452 | 'checkbox', |
|
| 453 | 'dimmer', |
|
| 454 | 'dropdown', |
|
| 455 | 'embed', |
|
| 456 | 'form', |
|
| 457 | 'modal', |
|
| 458 | 'nag', |
|
| 459 | 'popup', |
|
| 460 | 'rating', |
|
| 461 | 'shape', |
|
| 462 | 'sidebar', |
|
| 463 | 'state', |
|
| 464 | 'sticky', |
|
| 465 | 'tab', |
|
| 466 | 'transition', |
|
| 467 | 'visit', |
|
| 468 | 'visibility' |
|
| 469 | ], |
|
| 470 | ||
| 471 | siteNamespace : 'site', |
|
| 472 | namespaceStub : { |
|
| 473 | cache : {}, |
|
| 474 | config : {}, |
|
| 475 | sections : {}, |
|
| 476 | section : {}, |
|
| 477 | utilities : {} |
|
| 478 | } |
|
| 479 | ||
| 480 | }; |
|
| 481 | ||
| 482 | // allows for selection of elements with data attributes |
|
| 483 | $.extend($.expr[ ":" ], { |
|
| 484 | data: ($.expr.createPseudo) |
|
| 485 | ? $.expr.createPseudo(function(dataName) { |
|
| 486 | return function(elem) { |
|
| 487 | return !!$.data(elem, dataName); |
|
| 488 | }; |
|
| 489 | }) |
|
| 490 | : function(elem, i, match) { |
|
| 491 | // support: jQuery < 1.8 |
|
| 492 | return !!$.data(elem, match[ 3 ]); |
|
| 493 | } |
|
| 494 | }); |
|
| 495 | ||
| 496 | ||
| 497 | })( jQuery, window, document ); |
|
| 498 | ||
| 499 | /*! |
|
| 500 | * # Semantic UI 2.2.11 - Form Validation |
|
| @@ 11-487 (lines=477) @@ | ||
| 8 | * |
|
| 9 | */ |
|
| 10 | ||
| 11 | ;(function ($, window, document, undefined) { |
|
| 12 | ||
| 13 | $.site = $.fn.site = function(parameters) { |
|
| 14 | var |
|
| 15 | time = new Date().getTime(), |
|
| 16 | performance = [], |
|
| 17 | ||
| 18 | query = arguments[0], |
|
| 19 | methodInvoked = (typeof query == 'string'), |
|
| 20 | queryArguments = [].slice.call(arguments, 1), |
|
| 21 | ||
| 22 | settings = ( $.isPlainObject(parameters) ) |
|
| 23 | ? $.extend(true, {}, $.site.settings, parameters) |
|
| 24 | : $.extend({}, $.site.settings), |
|
| 25 | ||
| 26 | namespace = settings.namespace, |
|
| 27 | error = settings.error, |
|
| 28 | ||
| 29 | eventNamespace = '.' + namespace, |
|
| 30 | moduleNamespace = 'module-' + namespace, |
|
| 31 | ||
| 32 | $document = $(document), |
|
| 33 | $module = $document, |
|
| 34 | element = this, |
|
| 35 | instance = $module.data(moduleNamespace), |
|
| 36 | ||
| 37 | module, |
|
| 38 | returnedValue |
|
| 39 | ; |
|
| 40 | module = { |
|
| 41 | ||
| 42 | initialize: function() { |
|
| 43 | module.instantiate(); |
|
| 44 | }, |
|
| 45 | ||
| 46 | instantiate: function() { |
|
| 47 | module.verbose('Storing instance of site', module); |
|
| 48 | instance = module; |
|
| 49 | $module |
|
| 50 | .data(moduleNamespace, module) |
|
| 51 | ; |
|
| 52 | }, |
|
| 53 | ||
| 54 | normalize: function() { |
|
| 55 | module.fix.console(); |
|
| 56 | module.fix.requestAnimationFrame(); |
|
| 57 | }, |
|
| 58 | ||
| 59 | fix: { |
|
| 60 | console: function() { |
|
| 61 | module.debug('Normalizing window.console'); |
|
| 62 | if (console === undefined || console.log === undefined) { |
|
| 63 | module.verbose('Console not available, normalizing events'); |
|
| 64 | module.disable.console(); |
|
| 65 | } |
|
| 66 | if (typeof console.group == 'undefined' || typeof console.groupEnd == 'undefined' || typeof console.groupCollapsed == 'undefined') { |
|
| 67 | module.verbose('Console group not available, normalizing events'); |
|
| 68 | window.console.group = function() {}; |
|
| 69 | window.console.groupEnd = function() {}; |
|
| 70 | window.console.groupCollapsed = function() {}; |
|
| 71 | } |
|
| 72 | if (typeof console.markTimeline == 'undefined') { |
|
| 73 | module.verbose('Mark timeline not available, normalizing events'); |
|
| 74 | window.console.markTimeline = function() {}; |
|
| 75 | } |
|
| 76 | }, |
|
| 77 | consoleClear: function() { |
|
| 78 | module.debug('Disabling programmatic console clearing'); |
|
| 79 | window.console.clear = function() {}; |
|
| 80 | }, |
|
| 81 | requestAnimationFrame: function() { |
|
| 82 | module.debug('Normalizing requestAnimationFrame'); |
|
| 83 | if(window.requestAnimationFrame === undefined) { |
|
| 84 | module.debug('RequestAnimationFrame not available, normalizing event'); |
|
| 85 | window.requestAnimationFrame = window.requestAnimationFrame |
|
| 86 | || window.mozRequestAnimationFrame |
|
| 87 | || window.webkitRequestAnimationFrame |
|
| 88 | || window.msRequestAnimationFrame |
|
| 89 | || function(callback) { setTimeout(callback, 0); } |
|
| 90 | ; |
|
| 91 | } |
|
| 92 | } |
|
| 93 | }, |
|
| 94 | ||
| 95 | moduleExists: function(name) { |
|
| 96 | return ($.fn[name] !== undefined && $.fn[name].settings !== undefined); |
|
| 97 | }, |
|
| 98 | ||
| 99 | enabled: { |
|
| 100 | modules: function(modules) { |
|
| 101 | var |
|
| 102 | enabledModules = [] |
|
| 103 | ; |
|
| 104 | modules = modules || settings.modules; |
|
| 105 | $.each(modules, function(index, name) { |
|
| 106 | if(module.moduleExists(name)) { |
|
| 107 | enabledModules.push(name); |
|
| 108 | } |
|
| 109 | }); |
|
| 110 | return enabledModules; |
|
| 111 | } |
|
| 112 | }, |
|
| 113 | ||
| 114 | disabled: { |
|
| 115 | modules: function(modules) { |
|
| 116 | var |
|
| 117 | disabledModules = [] |
|
| 118 | ; |
|
| 119 | modules = modules || settings.modules; |
|
| 120 | $.each(modules, function(index, name) { |
|
| 121 | if(!module.moduleExists(name)) { |
|
| 122 | disabledModules.push(name); |
|
| 123 | } |
|
| 124 | }); |
|
| 125 | return disabledModules; |
|
| 126 | } |
|
| 127 | }, |
|
| 128 | ||
| 129 | change: { |
|
| 130 | setting: function(setting, value, modules, modifyExisting) { |
|
| 131 | modules = (typeof modules === 'string') |
|
| 132 | ? (modules === 'all') |
|
| 133 | ? settings.modules |
|
| 134 | : [modules] |
|
| 135 | : modules || settings.modules |
|
| 136 | ; |
|
| 137 | modifyExisting = (modifyExisting !== undefined) |
|
| 138 | ? modifyExisting |
|
| 139 | : true |
|
| 140 | ; |
|
| 141 | $.each(modules, function(index, name) { |
|
| 142 | var |
|
| 143 | namespace = (module.moduleExists(name)) |
|
| 144 | ? $.fn[name].settings.namespace || false |
|
| 145 | : true, |
|
| 146 | $existingModules |
|
| 147 | ; |
|
| 148 | if(module.moduleExists(name)) { |
|
| 149 | module.verbose('Changing default setting', setting, value, name); |
|
| 150 | $.fn[name].settings[setting] = value; |
|
| 151 | if(modifyExisting && namespace) { |
|
| 152 | $existingModules = $(':data(module-' + namespace + ')'); |
|
| 153 | if($existingModules.length > 0) { |
|
| 154 | module.verbose('Modifying existing settings', $existingModules); |
|
| 155 | $existingModules[name]('setting', setting, value); |
|
| 156 | } |
|
| 157 | } |
|
| 158 | } |
|
| 159 | }); |
|
| 160 | }, |
|
| 161 | settings: function(newSettings, modules, modifyExisting) { |
|
| 162 | modules = (typeof modules === 'string') |
|
| 163 | ? [modules] |
|
| 164 | : modules || settings.modules |
|
| 165 | ; |
|
| 166 | modifyExisting = (modifyExisting !== undefined) |
|
| 167 | ? modifyExisting |
|
| 168 | : true |
|
| 169 | ; |
|
| 170 | $.each(modules, function(index, name) { |
|
| 171 | var |
|
| 172 | $existingModules |
|
| 173 | ; |
|
| 174 | if(module.moduleExists(name)) { |
|
| 175 | module.verbose('Changing default setting', newSettings, name); |
|
| 176 | $.extend(true, $.fn[name].settings, newSettings); |
|
| 177 | if(modifyExisting && namespace) { |
|
| 178 | $existingModules = $(':data(module-' + namespace + ')'); |
|
| 179 | if($existingModules.length > 0) { |
|
| 180 | module.verbose('Modifying existing settings', $existingModules); |
|
| 181 | $existingModules[name]('setting', newSettings); |
|
| 182 | } |
|
| 183 | } |
|
| 184 | } |
|
| 185 | }); |
|
| 186 | } |
|
| 187 | }, |
|
| 188 | ||
| 189 | enable: { |
|
| 190 | console: function() { |
|
| 191 | module.console(true); |
|
| 192 | }, |
|
| 193 | debug: function(modules, modifyExisting) { |
|
| 194 | modules = modules || settings.modules; |
|
| 195 | module.debug('Enabling debug for modules', modules); |
|
| 196 | module.change.setting('debug', true, modules, modifyExisting); |
|
| 197 | }, |
|
| 198 | verbose: function(modules, modifyExisting) { |
|
| 199 | modules = modules || settings.modules; |
|
| 200 | module.debug('Enabling verbose debug for modules', modules); |
|
| 201 | module.change.setting('verbose', true, modules, modifyExisting); |
|
| 202 | } |
|
| 203 | }, |
|
| 204 | disable: { |
|
| 205 | console: function() { |
|
| 206 | module.console(false); |
|
| 207 | }, |
|
| 208 | debug: function(modules, modifyExisting) { |
|
| 209 | modules = modules || settings.modules; |
|
| 210 | module.debug('Disabling debug for modules', modules); |
|
| 211 | module.change.setting('debug', false, modules, modifyExisting); |
|
| 212 | }, |
|
| 213 | verbose: function(modules, modifyExisting) { |
|
| 214 | modules = modules || settings.modules; |
|
| 215 | module.debug('Disabling verbose debug for modules', modules); |
|
| 216 | module.change.setting('verbose', false, modules, modifyExisting); |
|
| 217 | } |
|
| 218 | }, |
|
| 219 | ||
| 220 | console: function(enable) { |
|
| 221 | if(enable) { |
|
| 222 | if(instance.cache.console === undefined) { |
|
| 223 | module.error(error.console); |
|
| 224 | return; |
|
| 225 | } |
|
| 226 | module.debug('Restoring console function'); |
|
| 227 | window.console = instance.cache.console; |
|
| 228 | } |
|
| 229 | else { |
|
| 230 | module.debug('Disabling console function'); |
|
| 231 | instance.cache.console = window.console; |
|
| 232 | window.console = { |
|
| 233 | clear : function(){}, |
|
| 234 | error : function(){}, |
|
| 235 | group : function(){}, |
|
| 236 | groupCollapsed : function(){}, |
|
| 237 | groupEnd : function(){}, |
|
| 238 | info : function(){}, |
|
| 239 | log : function(){}, |
|
| 240 | markTimeline : function(){}, |
|
| 241 | warn : function(){} |
|
| 242 | }; |
|
| 243 | } |
|
| 244 | }, |
|
| 245 | ||
| 246 | destroy: function() { |
|
| 247 | module.verbose('Destroying previous site for', $module); |
|
| 248 | $module |
|
| 249 | .removeData(moduleNamespace) |
|
| 250 | ; |
|
| 251 | }, |
|
| 252 | ||
| 253 | cache: {}, |
|
| 254 | ||
| 255 | setting: function(name, value) { |
|
| 256 | if( $.isPlainObject(name) ) { |
|
| 257 | $.extend(true, settings, name); |
|
| 258 | } |
|
| 259 | else if(value !== undefined) { |
|
| 260 | settings[name] = value; |
|
| 261 | } |
|
| 262 | else { |
|
| 263 | return settings[name]; |
|
| 264 | } |
|
| 265 | }, |
|
| 266 | internal: function(name, value) { |
|
| 267 | if( $.isPlainObject(name) ) { |
|
| 268 | $.extend(true, module, name); |
|
| 269 | } |
|
| 270 | else if(value !== undefined) { |
|
| 271 | module[name] = value; |
|
| 272 | } |
|
| 273 | else { |
|
| 274 | return module[name]; |
|
| 275 | } |
|
| 276 | }, |
|
| 277 | debug: function() { |
|
| 278 | if(settings.debug) { |
|
| 279 | if(settings.performance) { |
|
| 280 | module.performance.log(arguments); |
|
| 281 | } |
|
| 282 | else { |
|
| 283 | module.debug = Function.prototype.bind.call(console.info, console, settings.name + ':'); |
|
| 284 | module.debug.apply(console, arguments); |
|
| 285 | } |
|
| 286 | } |
|
| 287 | }, |
|
| 288 | verbose: function() { |
|
| 289 | if(settings.verbose && settings.debug) { |
|
| 290 | if(settings.performance) { |
|
| 291 | module.performance.log(arguments); |
|
| 292 | } |
|
| 293 | else { |
|
| 294 | module.verbose = Function.prototype.bind.call(console.info, console, settings.name + ':'); |
|
| 295 | module.verbose.apply(console, arguments); |
|
| 296 | } |
|
| 297 | } |
|
| 298 | }, |
|
| 299 | error: function() { |
|
| 300 | module.error = Function.prototype.bind.call(console.error, console, settings.name + ':'); |
|
| 301 | module.error.apply(console, arguments); |
|
| 302 | }, |
|
| 303 | performance: { |
|
| 304 | log: function(message) { |
|
| 305 | var |
|
| 306 | currentTime, |
|
| 307 | executionTime, |
|
| 308 | previousTime |
|
| 309 | ; |
|
| 310 | if(settings.performance) { |
|
| 311 | currentTime = new Date().getTime(); |
|
| 312 | previousTime = time || currentTime; |
|
| 313 | executionTime = currentTime - previousTime; |
|
| 314 | time = currentTime; |
|
| 315 | performance.push({ |
|
| 316 | 'Element' : element, |
|
| 317 | 'Name' : message[0], |
|
| 318 | 'Arguments' : [].slice.call(message, 1) || '', |
|
| 319 | 'Execution Time' : executionTime |
|
| 320 | }); |
|
| 321 | } |
|
| 322 | clearTimeout(module.performance.timer); |
|
| 323 | module.performance.timer = setTimeout(module.performance.display, 500); |
|
| 324 | }, |
|
| 325 | display: function() { |
|
| 326 | var |
|
| 327 | title = settings.name + ':', |
|
| 328 | totalTime = 0 |
|
| 329 | ; |
|
| 330 | time = false; |
|
| 331 | clearTimeout(module.performance.timer); |
|
| 332 | $.each(performance, function(index, data) { |
|
| 333 | totalTime += data['Execution Time']; |
|
| 334 | }); |
|
| 335 | title += ' ' + totalTime + 'ms'; |
|
| 336 | if( (console.group !== undefined || console.table !== undefined) && performance.length > 0) { |
|
| 337 | console.groupCollapsed(title); |
|
| 338 | if(console.table) { |
|
| 339 | console.table(performance); |
|
| 340 | } |
|
| 341 | else { |
|
| 342 | $.each(performance, function(index, data) { |
|
| 343 | console.log(data['Name'] + ': ' + data['Execution Time']+'ms'); |
|
| 344 | }); |
|
| 345 | } |
|
| 346 | console.groupEnd(); |
|
| 347 | } |
|
| 348 | performance = []; |
|
| 349 | } |
|
| 350 | }, |
|
| 351 | invoke: function(query, passedArguments, context) { |
|
| 352 | var |
|
| 353 | object = instance, |
|
| 354 | maxDepth, |
|
| 355 | found, |
|
| 356 | response |
|
| 357 | ; |
|
| 358 | passedArguments = passedArguments || queryArguments; |
|
| 359 | context = element || context; |
|
| 360 | if(typeof query == 'string' && object !== undefined) { |
|
| 361 | query = query.split(/[\. ]/); |
|
| 362 | maxDepth = query.length - 1; |
|
| 363 | $.each(query, function(depth, value) { |
|
| 364 | var camelCaseValue = (depth != maxDepth) |
|
| 365 | ? value + query[depth + 1].charAt(0).toUpperCase() + query[depth + 1].slice(1) |
|
| 366 | : query |
|
| 367 | ; |
|
| 368 | if( $.isPlainObject( object[camelCaseValue] ) && (depth != maxDepth) ) { |
|
| 369 | object = object[camelCaseValue]; |
|
| 370 | } |
|
| 371 | else if( object[camelCaseValue] !== undefined ) { |
|
| 372 | found = object[camelCaseValue]; |
|
| 373 | return false; |
|
| 374 | } |
|
| 375 | else if( $.isPlainObject( object[value] ) && (depth != maxDepth) ) { |
|
| 376 | object = object[value]; |
|
| 377 | } |
|
| 378 | else if( object[value] !== undefined ) { |
|
| 379 | found = object[value]; |
|
| 380 | return false; |
|
| 381 | } |
|
| 382 | else { |
|
| 383 | module.error(error.method, query); |
|
| 384 | return false; |
|
| 385 | } |
|
| 386 | }); |
|
| 387 | } |
|
| 388 | if ( $.isFunction( found ) ) { |
|
| 389 | response = found.apply(context, passedArguments); |
|
| 390 | } |
|
| 391 | else if(found !== undefined) { |
|
| 392 | response = found; |
|
| 393 | } |
|
| 394 | if($.isArray(returnedValue)) { |
|
| 395 | returnedValue.push(response); |
|
| 396 | } |
|
| 397 | else if(returnedValue !== undefined) { |
|
| 398 | returnedValue = [returnedValue, response]; |
|
| 399 | } |
|
| 400 | else if(response !== undefined) { |
|
| 401 | returnedValue = response; |
|
| 402 | } |
|
| 403 | return found; |
|
| 404 | } |
|
| 405 | }; |
|
| 406 | ||
| 407 | if(methodInvoked) { |
|
| 408 | if(instance === undefined) { |
|
| 409 | module.initialize(); |
|
| 410 | } |
|
| 411 | module.invoke(query); |
|
| 412 | } |
|
| 413 | else { |
|
| 414 | if(instance !== undefined) { |
|
| 415 | module.destroy(); |
|
| 416 | } |
|
| 417 | module.initialize(); |
|
| 418 | } |
|
| 419 | return (returnedValue !== undefined) |
|
| 420 | ? returnedValue |
|
| 421 | : this |
|
| 422 | ; |
|
| 423 | }; |
|
| 424 | ||
| 425 | $.site.settings = { |
|
| 426 | ||
| 427 | name : 'Site', |
|
| 428 | namespace : 'site', |
|
| 429 | ||
| 430 | error : { |
|
| 431 | console : 'Console cannot be restored, most likely it was overwritten outside of module', |
|
| 432 | method : 'The method you called is not defined.' |
|
| 433 | }, |
|
| 434 | ||
| 435 | debug : false, |
|
| 436 | verbose : false, |
|
| 437 | performance : true, |
|
| 438 | ||
| 439 | modules: [ |
|
| 440 | 'accordion', |
|
| 441 | 'api', |
|
| 442 | 'checkbox', |
|
| 443 | 'dimmer', |
|
| 444 | 'dropdown', |
|
| 445 | 'embed', |
|
| 446 | 'form', |
|
| 447 | 'modal', |
|
| 448 | 'nag', |
|
| 449 | 'popup', |
|
| 450 | 'rating', |
|
| 451 | 'shape', |
|
| 452 | 'sidebar', |
|
| 453 | 'state', |
|
| 454 | 'sticky', |
|
| 455 | 'tab', |
|
| 456 | 'transition', |
|
| 457 | 'visit', |
|
| 458 | 'visibility' |
|
| 459 | ], |
|
| 460 | ||
| 461 | siteNamespace : 'site', |
|
| 462 | namespaceStub : { |
|
| 463 | cache : {}, |
|
| 464 | config : {}, |
|
| 465 | sections : {}, |
|
| 466 | section : {}, |
|
| 467 | utilities : {} |
|
| 468 | } |
|
| 469 | ||
| 470 | }; |
|
| 471 | ||
| 472 | // allows for selection of elements with data attributes |
|
| 473 | $.extend($.expr[ ":" ], { |
|
| 474 | data: ($.expr.createPseudo) |
|
| 475 | ? $.expr.createPseudo(function(dataName) { |
|
| 476 | return function(elem) { |
|
| 477 | return !!$.data(elem, dataName); |
|
| 478 | }; |
|
| 479 | }) |
|
| 480 | : function(elem, i, match) { |
|
| 481 | // support: jQuery < 1.8 |
|
| 482 | return !!$.data(elem, match[ 3 ]); |
|
| 483 | } |
|
| 484 | }); |
|
| 485 | ||
| 486 | ||
| 487 | })( jQuery, window, document ); |
|
| 488 | ||