App.core.js CORE The heart and soul of SmartAdmin - Responsive WebApp

Debugging console.log

view the app.core.js debugger in realtime; assists in the detection and correction of errors

App API

Control options for the app API
Usage Returns Description
null Pushes selected classes from the body tag to localstorage/database
- Remove classes from body & saves to localstorage/database
- Clears your localStorage effectively removing all settings and panel configs
- Indicator for Save Settings (mostly aesthetics)
- Push array to body tag. See saving to database for more details
string Fetch class names from body and convert them to JSON string. See saving to database for more details
string Detects webkit and chrome browsers
string Detects whether device is desktop or mobile
- Saves app settings to localstorage
- Saves app settings to localstorage
string Saves app settings to localstorage
bool Saves app settings to localstorage
- Saves app settings to localstorage
- Fires a series of events, see "Initialization shell" to your left, for more details.

Action buttons

Allows you to add action to any HTML element on 'mouseUp' event
Action Type Description
toggle Push data-class to body element
data-action="toggle" data-class="class-a class-b" data-target="#ID"
toggle-swap data-action="toggle-swap" data-class="class-a class-b" data-target="#ID"
toggle-replace data-action="toggle-replace" data-replaceclass="classesToReplace" data-class="replaceWithClass" data-target="body"
data-panel-* Push array to body tag. See saving to database for more details
theme-update data-action="theme-update" data-theme="path_to_css/css.css"
app-reset data-action="app-reset"
factory-reset data-action="factory-reset"
app-print Print page (similar to pressing CTRL/CMD + P) data-action="app-print"
app-fullscreen Activates broswer's fullscreen command (may not work in all browsers) data-action="app-fullscreen"
app-loadscript Load scripts on demand data-action="app-fullscreen" data-loadurl="script.js" data-loadfunction="functionName()" or you can also use initApp.loadScript("js/my_lovely_script.js", myFunction)
playsound Play sounds using data-action="playsound" data-soundpath="media/sound/" data-soundfile="filename" (no file extensions)

Config settings

Define preferred application behaviors or configuration options; can modify some functionality of the app
var myapp_config = {
	root_: $('body'),
	root_logo: $('.page-sidebar > .page-logo')
	throttleDelay: 450,
	filterDelay: 150,
	thisDevice: null, 
	isMobile: (/iphone|ipad|ipod|android|blackberry|mini|windows\sce|palm/i.test(navigator.userAgent.toLowerCase())), 
	mobileMenuTrigger: null,
	mobileResolutionTrigger: 992,
	isWebkit: ((!!window.chrome && !!window.chrome.webstore) === true || Object.prototype.toString.call(window.HTMLElement).indexOf('Constructor') > 0 === true),
	isChrome: (/chrom(e|ium)/.test(navigator.userAgent.toLowerCase())),
	isIE: ( (window.navigator.userAgent.indexOf('Trident/') ) > 0 === true ),
	debugState: true, 
	rippleEffect: true, 
	mythemeAnchor: '#mytheme',
	navAnchor: '#js-primary-nav',
	navHooks: '#js-primary-nav > ul.navigation'
	navClosedSign: 'ni ni-chevron-down',
	navOpenedSign: 'ni ni-chevron-up',
	navAccordion: true,
	navInitalized: 'js-nav-built',
	navFilterInput: $('#nav_filter_input'),
	navHorizontalWrapperId: 'js-nav-menu-wrapper',
	navSpeed: 500, 
	navClosedSign: 'fal fa-angle-down',
	navOpenedSign: 'fal fa-angle-up',
	appDateHook: $('.js-get-date'),
	storeLocally: true,
	jsArray : []
};

Initilization shell

Showcasing app JS skeleton
/* App initialize */
var initApp = (function(app) {
	app.saveSettings = function () { ... }
	app.resetSettings = function () { ... }
	app.accessIndicator = function () { ... }
	app.pushSettings = function (DB_string) { ... }
	app.getSettings = function () { ... }
	app.detectBrowserType = function () { ... }
	app.addDeviceType = function() { ... }
	app.windowScrollEvents = function () { ... }
	app.checkNavigationOrientation = function() { ... }
	app.buildNavigation = function() { ... }
	app.mobileCheckActivation = function(){ ... }
	app.toggleVisibility = function (id) { ... }
	app.domReadyMisc = function() { 
	   /* get app date */
	   /* activate last tab used */
	   /* activate/destroy slimscroll */
	   /* activates tooltip */
	   /* activates image lazyload mechanic */
	   /* enable dropdown */
	   /* enable ripple effect */
	   /* attach action buttons */
	   /* menu tap actions (for mobile) */
	   /* initialize windows mobile 8 fix for BS4 */
	   ...
	}
	return app;
})({});

/* Bind the throttled handler to the resize event */
$(window).resize(
	$.throttle( myapp_config.throttleDelay, function (e) {
		/* (1a) ADD CLASS WHEN BELOW CERTAIN WIDTH (MOBILE MENU) */
		initApp.mobileCheckActivation(); 
	})
); 

/* Bind the throttled handler to the scroll event */
$(window).scroll(
	$.throttle( myapp_config.throttleDelay, function (e) {
		/* EVENTS */
		...
	})
);

/* Initiate scroll events */
$(window).on('scroll', initApp.windowScrollEvents);

/* Document loaded event */
jQuery(document).ready(function() {
	/* detect desktop or mobile */
	initApp.addDeviceType();
	/* detect Webkit Browser */
	initApp.detectBrowserType();
	/* a. check for mobile view width and add class .mobile-view-activated */
	initApp.mobileCheckActivation();
	/* b. build navigation */
	initApp.buildNavigation(myapp_config.navHooks);
	/* c. run DOM misc functions */
	initApp.domReadyMisc();
});