window.theme = {};
// Navigation
(function( $ ) {
'use strict';
var $items = $( '.nav-main li.nav-parent' );
function expand( li ) {
li.children( 'ul.nav-children' ).slideDown( 'fast', function() {
li.addClass( 'nav-expanded' );
$(this).css( 'display', '' );
ensureVisible( li );
});
}
function collapse( li ) {
li.children('ul.nav-children' ).slideUp( 'fast', function() {
$(this).css( 'display', '' );
li.removeClass( 'nav-expanded' );
});
}
function ensureVisible( li ) {
var scroller = li.offsetParent();
if ( !scroller.get(0) ) {
return false;
}
var top = li.position().top;
if ( top < 0 ) {
scroller.animate({
scrollTop: scroller.scrollTop() + top
}, 'fast');
}
}
$items.find('> a').on('click', function() {
var prev = $( this ).closest('ul.nav').find('> li.nav-expanded' ),
next = $( this ).closest('li');
if ( prev.get( 0 ) !== next.get( 0 ) ) {
collapse( prev );
expand( next );
} else {
collapse( prev );
}
});
}).apply( this, [ jQuery ]);
// Skeleton
(function(theme, $) {
'use strict';
theme = theme || {};
var $body = $( 'body' ),
$html = $( 'html' ),
$window = $( window ),
isAndroid = navigator.userAgent.toLowerCase().indexOf('android') > -1;
// mobile devices with fixed has a lot of issues when focus inputs and others...
if ( typeof $.browser !== 'undefined' && $.browser.mobile && $html.hasClass('fixed') ) {
$html.removeClass( 'fixed' ).addClass( 'scroll' );
}
var Skeleton = {
options: {
sidebars: {
menu: '#content-menu',
left: '#sidebar-left',
right: '#sidebar-right'
}
},
customScroll: ( !Modernizr.overflowscrolling && !isAndroid && $.fn.nanoScroller !== 'undefined'),
initialize: function() {
this
.setVars()
.build()
.events();
},
setVars: function() {
this.sidebars = {};
this.sidebars.left = {
$el: $( this.options.sidebars.left )
};
this.sidebars.right = {
$el: $( this.options.sidebars.right ),
isOpened: $html.hasClass( 'sidebar-right-opened' )
};
this.sidebars.menu = {
$el: $( this.options.sidebars.menu ),
isOpened: $html.hasClass( 'inner-menu-opened' )
};
return this;
},
build: function() {
if ( typeof $.browser !== 'undefined' && $.browser.mobile ) {
$html.addClass( 'mobile-device' );
} else {
$html.addClass( 'no-mobile-device' );
}
$html.addClass( 'custom-scroll' );
if ( this.customScroll ) {
this.buildSidebarLeft();
this.buildContentMenu();
}
this.buildSidebarRight();
return this;
},
events: function() {
if ( this.customScroll ) {
this.eventsSidebarLeft();
}
this.eventsSidebarRight();
this.eventsContentMenu();
if ( typeof $.browser !== 'undefined' && !this.customScroll && isAndroid ) {
this.fixScroll();
}
return this;
},
fixScroll: function() {
var _self = this;
$window
.on( 'sidebar-left-opened sidebar-right-toggle', function( e, data ) {
_self.preventBodyScrollToggle( data.added );
});
},
buildSidebarLeft: function() {
this.sidebars.left.$nano = this.sidebars.left.$el.find( '.nano' );
this.sidebars.left.$nano.nanoScroller({
alwaysVisible: true,
preventPageScrolling: true
});
return this;
},
eventsSidebarLeft: function() {
var $nano = this.sidebars.left.$nano;
var updateNanoScroll = function() {
if ( $.support.transition ) {
$nano.nanoScroller();
$nano
.one('bsTransitionEnd', updateNanoScroll)
.emulateTransitionEnd(150)
} else {
updateNanoScroll();
}
};
this.sidebars.left.$el
.on( 'click', function() {
updateNanoScroll();
});
$nano
.on( 'mouseenter', function() {
if ( $html.hasClass( 'sidebar-left-collapsed' ) ) {
$nano.nanoScroller();
}
})
.on( 'mouseleave', function() {
if ( $html.hasClass( 'sidebar-left-collapsed' ) ) {
$nano.nanoScroller();
}
});
return this;
},
buildSidebarRight: function() {
this.sidebars.right.isOpened = $html.hasClass( 'sidebar-right-opened' );
if ( this.customScroll ) {
this.sidebars.right.$nano = this.sidebars.right.$el.find( '.nano' );
this.sidebars.right.$nano.nanoScroller({
alwaysVisible: true,
preventPageScrolling: true
});
}
return this;
},
eventsSidebarRight: function() {
var _self = this;
var open = function() {
if ( _self.sidebars.right.isOpened ) {
return close();
}
_self.sidebars.right.isOpened = true;
$html.addClass( 'sidebar-right-opened' );
$window.trigger( 'sidebar-right-toggle', {
added: true,
removed: false
});
$html.on( 'click.close-right-sidebar', function(e) {
e.stopPropagation();
close(e);
});
};
var close = function(e) {
if ( !!e && !!e.target && ($(e.target).closest( '.sidebar-right' ).get(0) || !$(e.target).closest( 'html' ).get(0)) ) {
e.preventDefault();
return false;
}
$html.removeClass( 'sidebar-right-opened' );
$html.off( 'click.close-right-sidebar' );
$window.trigger( 'sidebar-right-toggle', {
added: false,
removed: true
});
_self.sidebars.right.isOpened = false;
};
var bind = function() {
$('[data-open="sidebar-right"]').on('click', function(e) {
var $el = $(this);
e.stopPropagation();
if ( $el.is('a') )
e.preventDefault();
open();
});
};
this.sidebars.right.$el.find( '.mobile-close' )
.on( 'click', function( e ) {
e.preventDefault();
$html.trigger( 'click.close-right-sidebar' );
});
bind();
return this;
},
buildContentMenu: function() {
if ( !$html.hasClass( 'fixed' ) ) {
return false;
}
this.sidebars.menu.$nano = this.sidebars.menu.$el.find( '.nano' );
this.sidebars.menu.$nano.nanoScroller({
alwaysVisible: true,
preventPageScrolling: true
});
return this;
},
eventsContentMenu: function() {
var _self = this;
var open = function() {
if ( _self.sidebars.menu.isOpened ) {
return close();
}
_self.sidebars.menu.isOpened = true;
$html.addClass( 'inner-menu-opened' );
$window.trigger( 'inner-menu-toggle', {
added: true,
removed: false
});
$html.on( 'click.close-inner-menu', function(e) {
close(e);
});
};
var close = function(e) {
if ( !!e && !!e.target && !$(e.target).closest( '.inner-menu-collapse' ).get(0) && ($(e.target).closest( '.inner-menu' ).get(0) || !$(e.target).closest( 'html' ).get(0)) ) {
return false;
}
e.stopPropagation();
$html.removeClass( 'inner-menu-opened' );
$html.off( 'click.close-inner-menu' );
$window.trigger( 'inner-menu-toggle', {
added: false,
removed: true
});
_self.sidebars.menu.isOpened = false;
};
var bind = function() {
$('[data-open="inner-menu"]').on('click', function(e) {
var $el = $(this);
e.stopPropagation();
if ( $el.is('a') )
e.preventDefault();
open();
});
};
bind();
/* Nano Scroll */
if ( $html.hasClass( 'fixed' ) ) {
var $nano = this.sidebars.menu.$nano;
var updateNanoScroll = function() {
if ( $.support.transition ) {
$nano.nanoScroller();
$nano
.one('bsTransitionEnd', updateNanoScroll)
.emulateTransitionEnd(150)
} else {
updateNanoScroll();
}
};
this.sidebars.menu.$el
.on( 'click', function() {
updateNanoScroll();
});
}
return this;
},
preventBodyScrollToggle: function( shouldPrevent, $el ) {
setTimeout(function() {
if ( shouldPrevent ) {
$body
.data( 'scrollTop', $body.get(0).scrollTop )
.css({
position: 'fixed',
top: $body.get(0).scrollTop * -1
})
} else {
$body
.css({
position: '',
top: ''
})
.scrollTop( $body.data( 'scrollTop' ) );
}
}, 150);
}
};
// expose to scope
$.extend(theme, {
Skeleton: Skeleton
});
}).apply(this, [ window.theme, jQuery ]);
// Base
(function(theme, $) {
'use strict';
theme = theme || {};
theme.Skeleton.initialize();
}).apply(this, [ window.theme, jQuery ]);
/*
Name: Theme Admin Extension
Written by: Okler Themes - (http://www.okler.net)
Theme Version: 1.3.0
*/
window.theme = {};
// Mailbox
(function(theme, $) {
theme = theme || {};
var instanceName = '__mailbox';
var capitalizeString = function( str ) {
return str.charAt( 0 ).toUpperCase() + str.slice( 1 );
}
var Mailbox = function($wrapper) {
return this.initialize($wrapper);
};
Mailbox.prototype = {
initialize: function($wrapper) {
if ( $wrapper.data( instanceName ) ) {
return this;
}
this.$wrapper = $wrapper;
this
.setVars()
.setData()
.build()
.events();
return this;
},
setVars: function() {
this.view = capitalizeString( this.$wrapper.data( 'mailbox-view' ) || "" );
return this;
},
setData: function() {
this.$wrapper.data(instanceName, this);
return this;
},
build: function() {
if ( typeof this[ 'build' + this.view ] === 'function' ) {
this[ 'build' + this.view ].call( this );
}
return this;
},
events: function() {
if ( typeof this[ 'events' + this.view ] === 'function' ) {
this[ 'events' + this.view ].call( this );
}
return this;
},
buildFolder: function() {
this.$wrapper.find('.mailbox-email-list .nano').nanoScroller({
alwaysVisible: true,
preventPageScrolling: true
});
},
buildEmail: function() {
this.buildComposer();
},
buildCompose: function() {
this.buildComposer();
},
buildComposer: function() {
this.$wrapper.find( '#compose-field' ).summernote({
height: 250,
toolbar: [
['style', ['style']],
['font', ['bold', 'italic', 'underline', 'clear']],
['fontname', ['fontname']],
['color', ['color']],
['para', ['ul', 'ol', 'paragraph']],
['height', ['height']],
['table', ['table']],
['insert', ['link', 'picture', 'video']],
['view', ['fullscreen']],
['help', ['help']]
]
});
},
eventsCompose: function() {
var $composer,
$contentBody,
$html,
$innerBody;
$composer = $( '.note-editable' );
$contentBody = $( '.content-body' );
$html = $( 'html' );
$innerBody = $( '.inner-body' );
var adjustComposeSize = function() {
var composerHeight,
composerTop,
contentBodyPaddingBottom,
innerBodyHeight,
viewportHeight,
viewportWidth;
contentBodyPaddingBottom = parseInt( $contentBody.css('paddingBottom'), 10 ) || 0;
viewportHeight = Math.max( document.documentElement.clientHeight, window.innerHeight || 0 );
viewportWidth = Math.max( document.documentElement.clientWidth, window.innerWidth || 0 );
$composer.css( 'height', '' );
if ( viewportWidth < 767 || $html.hasClass('mobile-device') ) {
composerTop = $composer.offset().top;
composerHeight = viewportHeight - composerTop;
} else {
if ( $html.hasClass( 'fixed' ) ) {
composerTop = $composer.offset().top;
} else {
composerTop = $composer.position().top;
}
composerHeight = $innerBody.outerHeight() - composerTop;
}
composerHeight -= contentBodyPaddingBottom;
$composer.css({
height: composerHeight
});
};
var timer;
$(window)
.on( 'resize orientationchange sidebar-left-toggle mailbox-recalc', function() {
clearTimeout( timer );
timer = setTimeout(function() {
adjustComposeSize();
}, 100);
});
adjustComposeSize();
}
};
// expose to scope
$.extend(theme, {
Mailbox: Mailbox
});
// jquery plugin
$.fn.themeMailbox = function(opts) {
return this.each(function() {
var $this = $(this);
if ($this.data(instanceName)) {
return $this.data(instanceName);
} else {
return new Mailbox($this);
}
});
}
}).apply(this, [ window.theme, jQuery ]);
// Lock Screen
(function( $ ) {
'use strict';
var LockScreen = {
initialize: function() {
this.$body = $( 'body' );
this
.build()
.events();
},
build: function() {
var lockHTML,
userinfo;
userinfo = this.getUserInfo();
this.lockHTML = this.buildTemplate( userinfo );
this.$lock = this.$body.children( '#LockScreenInline' );
this.$userPicture = this.$lock.find( '#LockUserPicture' );
this.$userName = this.$lock.find( '#LockUserName' );
this.$userEmail = this.$lock.find( '#LockUserEmail' );
return this;
},
events: function() {
var _self = this;
this.$body.find( '[data-lock-screen="true"]' ).on( 'click', function( e ) {
e.preventDefault();
_self.show();
});
return this;
},
formEvents: function( $form ) {
var _self = this;
$form.on( 'submit', function( e ) {
e.preventDefault();
_self.hide();
});
},
show: function() {
var _self = this,
userinfo = this.getUserInfo();
this.$userPicture.attr( 'src', userinfo.picture );
this.$userName.text( userinfo.username );
this.$userEmail.text( userinfo.email );
this.$body.addClass( 'show-lock-screen' );
$.magnificPopup.open({
items: {
src: this.lockHTML,
type: 'inline'
},
modal: true,
mainClass: 'mfp-lock-screen',
callbacks: {
change: function() {
_self.formEvents( this.content.find( 'form' ) );
}
}
});
},
hide: function() {
$.magnificPopup.close();
},
getUserInfo: function() {
var $info,
picture,
name,
email;
// always search in case something is changed through ajax
$info = $( '#userbox' );
picture = $info.find( '.profile-picture img' ).attr( 'data-lock-picture' );
name = $info.find( '.profile-info' ).attr( 'data-lock-name' );
email = $info.find( '.profile-info' ).attr( 'data-lock-email' );
return {
picture: picture,
username: name,
email: email
};
},
buildTemplate: function( userinfo ) {
return [
'<section id="LockScreenInline" class="body-sign body-locked body-locked-inline">',
'<div class="center-sign">',
'<div class="panel panel-sign">',
'<div class="panel-body">',
'<form>',
'<div class="current-user text-center">',
'<img id="LockUserPicture" src="{{picture}}" alt="John Doe" class="img-circle user-image" />',
'<h2 id="LockUserName" class="user-name text-dark m-none">{{username}}</h2>',
'<p id="LockUserEmail" class="user-email m-none">{{email}}</p>',
'</div>',
'<div class="form-group mb-lg">',
'<div class="input-group input-group-icon">',
'<input id="pwd" name="pwd" type="password" class="form-control input-lg" placeholder="Password" />',
'<span class="input-group-addon">',
'<span class="icon icon-lg">',
'<i class="fa fa-lock"></i>',
'</span>',
'</span>',
'</div>',
'</div>',
'<div class="row">',
'<div class="col-xs-6">',
'<p class="mt-xs mb-none">',
'<a href="#">Not John Doe?</a>',
'</p>',
'</div>',
'<div class="col-xs-6 text-right">',
'<button type="submit" class="btn btn-primary">Unlock</button>',
'</div>',
'</div>',
'</form>',
'</div>',
'</div>',
'</div>',
'</section>'
]
.join( '' )
.replace( /\{\{picture\}\}/, userinfo.picture )
.replace( /\{\{username\}\}/, userinfo.username )
.replace( /\{\{email\}\}/, userinfo.email );
}
};
this.LockScreen = LockScreen;
$(function() {
LockScreen.initialize();
});
}).apply(this, [ jQuery ]);
// Panels
(function( $ ) {
$(function() {
$('.panel')
.on( 'click', '.panel-actions a.fa-caret-up', function( e ) {
e.preventDefault();
var $this,
$panel;
$this = $( this );
$panel = $this.closest( '.panel' );
$this
.removeClass( 'fa-caret-up' )
.addClass( 'fa-caret-down' );
$panel.find('.panel-body, .panel-footer').slideDown( 200 );
})
.on( 'click', '.panel-actions a.fa-caret-down', function( e ) {
e.preventDefault();
var $this,
$panel;
$this = $( this );
$panel = $this.closest( '.panel' );
$this
.removeClass( 'fa-caret-down' )
.addClass( 'fa-caret-up' );
$panel.find('.panel-body, .panel-footer').slideUp( 200 );
})
.on( 'click', '.panel-actions a.fa-times', function( e ) {
e.preventDefault();
var $panel,
$row;
$panel = $(this).closest('.panel');
if ( !!( $panel.parent('div').attr('class') || '' ).match( /col-(xs|sm|md|lg)/g ) && $panel.siblings().length === 0 ) {
$row = $panel.closest('.row');
$panel.parent('div').remove();
if ( $row.children().length === 0 ) {
$row.remove();
}
} else {
$panel.remove();
}
});
});
})( jQuery );
// Bootstrap Toggle
(function( $ ) {
'use strict';
var $window = $( window );
var toggleClass = function( $el ) {
if ( !!$el.data('toggleClassBinded') ) {
return false;
}
var $target,
className,
eventName;
$target = $( $el.attr('data-target') );
className = $el.attr('data-toggle-class');
eventName = $el.attr('data-fire-event');
$el.on('click.toggleClass', function(e) {
e.preventDefault();
$target.toggleClass( className );
var hasClass = $target.hasClass( className );
if ( !!eventName ) {
$window.trigger( eventName, {
added: hasClass,
removed: !hasClass
});
}
});
$el.data('toggleClassBinded', true);
return true;
};
$(function() {
$('[data-toggle-class][data-target]').each(function() {
toggleClass( $(this) );
});
});
}).apply( this, [ jQuery ]);
// Form to Object
(function( $ ) {
'use strict';
$.fn.formToObject = function() {
var arrayData,
objectData;
arrayData = this.serializeArray();
objectData = {};
$.each( arrayData, function() {
var value;
if (this.value != null) {
value = this.value;
} else {
value = '';
}
if (objectData[this.name] != null) {
if (!objectData[this.name].push) {
objectData[this.name] = [objectData[this.name]];
}
objectData[this.name].push(value);
} else {
objectData[this.name] = value;
}
});
return objectData;
};
})( jQuery );
// Codemirror
(function(theme, $) {
theme = theme || {};
var instanceName = '__codemirror';
var PluginCodeMirror = function($el, opts) {
return this.initialize($el, opts);
};
PluginCodeMirror.defaults = {
lineNumbers: true,
styleActiveLine: true,
matchBrackets: true,
theme: 'monokai'
};
PluginCodeMirror.prototype = {
initialize: function($el, opts) {
if ( $el.data( instanceName ) ) {
return this;
}
this.$el = $el;
this
.setData()
.setOptions(opts)
.build();
return this;
},
setData: function() {
this.$el.data(instanceName, this);
return this;
},
setOptions: function(opts) {
this.options = $.extend( true, {}, PluginCodeMirror.defaults, opts );
return this;
},
build: function() {
CodeMirror.fromTextArea( this.$el.get(0), this.options );
return this;
}
};
// expose to scope
$.extend(theme, {
PluginCodeMirror: PluginCodeMirror
});
// jquery plugin
$.fn.themePluginCodeMirror = function(opts) {
return this.each(function() {
var $this = $(this);
if ($this.data(instanceName)) {
return $this.data(instanceName);
} else {
return new PluginCodeMirror($this, opts);
}
});
}
}).apply(this, [ window.theme, jQuery ]);
// Colorpicker
(function(theme, $) {
theme = theme || {};
var instanceName = '__colorpicker';
var PluginColorPicker = function($el, opts) {
return this.initialize($el, opts);
};
PluginColorPicker.defaults = {
};
PluginColorPicker.prototype = {
initialize: function($el, opts) {
if ( $el.data( instanceName ) ) {
return this;
}
this.$el = $el;
this
.setData()
.setOptions(opts)
.build();
return this;
},
setData: function() {
this.$el.data(instanceName, this);
return this;
},
setOptions: function(opts) {
this.options = $.extend( true, {}, PluginColorPicker.defaults, opts );
return this;
},
build: function() {
this.$el.colorpicker( this.options );
return this;
}
};
// expose to scope
$.extend(theme, {
PluginColorPicker: PluginColorPicker
});
// jquery plugin
$.fn.themePluginColorPicker = function(opts) {
return this.each(function() {
var $this = $(this);
if ($this.data(instanceName)) {
return $this.data(instanceName);
} else {
return new PluginColorPicker($this, opts);
}
});
}
}).apply(this, [ window.theme, jQuery ]);
// Datepicker
(function(theme, $) {
theme = theme || {};
var instanceName = '__datepicker';
var PluginDatePicker = function($el, opts) {
return this.initialize($el, opts);
};
PluginDatePicker.defaults = {
};
PluginDatePicker.prototype = {
initialize: function($el, opts) {
if ( $el.data( instanceName ) ) {
return this;
}
this.$el = $el;
this
.setVars()
.setData()
.setOptions(opts)
.build();
return this;
},
setVars: function() {
this.skin = this.$el.data( 'plugin-skin' );
return this;
},
setData: function() {
this.$el.data(instanceName, this);
return this;
},
setOptions: function(opts) {
this.options = $.extend( true, {}, PluginDatePicker.defaults, opts );
return this;
},
build: function() {
this.$el.datepicker( this.options );
if ( !!this.skin ) {
this.$el.data('datepicker').picker.addClass( 'datepicker-' + this.skin );
}
return this;
}
};
// expose to scope
$.extend(theme, {
PluginDatePicker: PluginDatePicker
});
// jquery plugin
$.fn.themePluginDatePicker = function(opts) {
return this.each(function() {
var $this = $(this);
if ($this.data(instanceName)) {
return $this.data(instanceName);
} else {
return new PluginDatePicker($this, opts);
}
});
}
}).apply(this, [ window.theme, jQuery ]);
// iosSwitcher
(function(theme, $) {
theme = theme || {};
var instanceName = '__IOS7Switch';
var PluginIOS7Switch = function($el) {
return this.initialize($el);
};
PluginIOS7Switch.prototype = {
initialize: function($el) {
if ( $el.data( instanceName ) ) {
return this;
}
this.$el = $el;
this
.setData()
.build();
return this;
},
setData: function() {
this.$el.data(instanceName, this);
return this;
},
build: function() {
var switcher = new Switch( this.$el.get(0) );
$( switcher.el ).on( 'click', function( e ) {
e.preventDefault();
switcher.toggle();
});
return this;
}
};
// expose to scope
$.extend(theme, {
PluginIOS7Switch: PluginIOS7Switch
});
// jquery plugin
$.fn.themePluginIOS7Switch = function(opts) {
return this.each(function() {
var $this = $(this);
if ($this.data(instanceName)) {
return $this.data(instanceName);
} else {
return new PluginIOS7Switch($this);
}
});
}
}).apply(this, [ window.theme, jQuery ]);
// Markdown
(function(theme, $) {
theme = theme || {};
var instanceName = '__markdownEditor';
var PluginMarkdownEditor = function($el, opts) {
return this.initialize($el, opts);
};
PluginMarkdownEditor.defaults = {
iconlibrary: 'fa'
};
PluginMarkdownEditor.prototype = {
initialize: function($el, opts) {
if ( $el.data( instanceName ) ) {
return this;
}
this.$el = $el;
this
.setData()
.setOptions(opts)
.build();
return this;
},
setData: function() {
this.$el.data(instanceName, this);
return this;
},
setOptions: function(opts) {
this.options = $.extend( true, {}, PluginMarkdownEditor.defaults, opts );
return this;
},
build: function() {
this.$el.markdown( this.options );
return this;
}
};
// expose to scope
$.extend(theme, {
PluginMarkdownEditor: PluginMarkdownEditor
});
// jquery plugin
$.fn.themePluginMarkdownEditor = function(opts) {
return this.each(function() {
var $this = $(this);
if ($this.data(instanceName)) {
return $this.data(instanceName);
} else {
return new PluginMarkdownEditor($this, opts);
}
});
}
}).apply(this, [ window.theme, jQuery ]);
// Masked Input
(function(theme, $) {
theme = theme || {};
var instanceName = '__maskedInput';
var PluginMaskedInput = function($el, opts) {
return this.initialize($el, opts);
};
PluginMaskedInput.defaults = {
};
PluginMaskedInput.prototype = {
initialize: function($el, opts) {
if ( $el.data( instanceName ) ) {
return this;
}
this.$el = $el;
this
.setData()
.setOptions(opts)
.build();
return this;
},
setData: function() {
this.$el.data(instanceName, this);
return this;
},
setOptions: function(opts) {
this.options = $.extend( true, {}, PluginMaskedInput.defaults, opts );
return this;
},
build: function() {
this.$el.mask( this.$el.data('input-mask'), this.options );
return this;
}
};
// expose to scope
$.extend(theme, {
PluginMaskedInput: PluginMaskedInput
});
// jquery plugin
$.fn.themePluginMaskedInput = function(opts) {
return this.each(function() {
var $this = $(this);
if ($this.data(instanceName)) {
return $this.data(instanceName);
} else {
return new PluginMaskedInput($this, opts);
}
});
}
}).apply(this, [ window.theme, jQuery ]);
// MaxLength
(function(theme, $) {
theme = theme || {};
var instanceName = '__maxlength';
var PluginMaxLength = function($el, opts) {
return this.initialize($el, opts);
};
PluginMaxLength.defaults = {
alwaysShow: true,
placement: 'bottom-left',
warningClass: 'label label-success bottom-left',
limitReachedClass: 'label label-danger bottom-left'
};
PluginMaxLength.prototype = {
initialize: function($el, opts) {
if ( $el.data( instanceName ) ) {
return this;
}
this.$el = $el;
this
.setData()
.setOptions(opts)
.build();
return this;
},
setData: function() {
this.$el.data(instanceName, this);
return this;
},
setOptions: function(opts) {
this.options = $.extend( true, {}, PluginMaxLength.defaults, opts );
return this;
},
build: function() {
this.$el.maxlength( this.options );
return this;
}
};
// expose to scope
$.extend(theme, {
PluginMaxLength: PluginMaxLength
});
// jquery plugin
$.fn.themePluginMaxLength = function(opts) {
return this.each(function() {
var $this = $(this);
if ($this.data(instanceName)) {
return $this.data(instanceName);
} else {
return new PluginMaxLength($this, opts);
}
});
}
}).apply(this, [ window.theme, jQuery ]);
// MultiSelect
(function(theme, $) {
theme = theme || {};
var instanceName = '__multiselect';
var PluginMultiSelect = function($el, opts) {
return this.initialize($el, opts);
};
PluginMultiSelect.defaults = {
templates: {
filter: '<div class="input-group"><span class="input-group-addon"><i class="fa fa-search"></i></span><input class="form-control multiselect-search" type="text"></div>'
}
};
PluginMultiSelect.prototype = {
initialize: function($el, opts) {
if ( $el.data( instanceName ) ) {
return this;
}
this.$el = $el;
this
.setData()
.setOptions(opts)
.build();
return this;
},
setData: function() {
this.$el.data(instanceName, this);
return this;
},
setOptions: function(opts) {
this.options = $.extend( true, {}, PluginMultiSelect.defaults, opts );
return this;
},
build: function() {
this.$el.multiselect( this.options );
return this;
}
};
// expose to scope
$.extend(theme, {
PluginMultiSelect: PluginMultiSelect
});
// jquery plugin
$.fn.themePluginMultiSelect = function(opts) {
return this.each(function() {
var $this = $(this);
if ($this.data(instanceName)) {
return $this.data(instanceName);
} else {
return new PluginMultiSelect($this, opts);
}
});
}
}).apply(this, [ window.theme, jQuery ]);
// Select2
(function(theme, $) {
theme = theme || {};
var instanceName = '__select2';
var PluginSelect2 = function($el, opts) {
return this.initialize($el, opts);
};
PluginSelect2.defaults = {
};
PluginSelect2.prototype = {
initialize: function($el, opts) {
if ( $el.data( instanceName ) ) {
return this;
}
this.$el = $el;
this
.setData()
.setOptions(opts)
.build();
return this;
},
setData: function() {
this.$el.data(instanceName, this);
return this;
},
setOptions: function(opts) {
this.options = $.extend( true, {}, PluginSelect2.defaults, opts );
return this;
},
build: function() {
this.$el.select2( this.options );
return this;
}
};
// expose to scope
$.extend(theme, {
PluginSelect2: PluginSelect2
});
// jquery plugin
$.fn.themePluginSelect2 = function(opts) {
return this.each(function() {
var $this = $(this);
if ($this.data(instanceName)) {
return $this.data(instanceName);
} else {
return new PluginSelect2($this, opts);
}
});
}
}).apply(this, [ window.theme, jQuery ]);
// Spinner
(function(theme, $) {
theme = theme || {};
var instanceName = '__spinner';
var PluginSpinner = function($el, opts) {
return this.initialize($el, opts);
};
PluginSpinner.defaults = {
};
PluginSpinner.prototype = {
initialize: function($el, opts) {
if ( $el.data( instanceName ) ) {
return this;
}
this.$el = $el;
this
.setData()
.setOptions(opts)
.build();
return this;
},
setData: function() {
this.$el.data(instanceName, this);
return this;
},
setOptions: function(opts) {
this.options = $.extend( true, {}, PluginSpinner.defaults, opts );
return this;
},
build: function() {
this.$el.spinner( this.options );
return this;
}
};
// expose to scope
$.extend(theme, {
PluginSpinner: PluginSpinner
});
// jquery plugin
$.fn.themePluginSpinner = function(opts) {
return this.each(function() {
var $this = $(this);
if ($this.data(instanceName)) {
return $this.data(instanceName);
} else {
return new PluginSpinner($this, opts);
}
});
}
}).apply(this, [ window.theme, jQuery ]);
// SummerNote
(function(theme, $) {
theme = theme || {};
var instanceName = '__summernote';
var PluginSummerNote = function($el, opts) {
return this.initialize($el, opts);
};
PluginSummerNote.defaults = {
onfocus: function() {
$( this ).closest( '.note-editor' ).addClass( 'active' );
},
onblur: function() {
$( this ).closest( '.note-editor' ).removeClass( 'active' );
}
};
PluginSummerNote.prototype = {
initialize: function($el, opts) {
if ( $el.data( instanceName ) ) {
return this;
}
this.$el = $el;
this
.setData()
.setOptions(opts)
.build();
return this;
},
setData: function() {
this.$el.data(instanceName, this);
return this;
},
setOptions: function(opts) {
this.options = $.extend( true, {}, PluginSummerNote.defaults, opts );
return this;
},
build: function() {
this.$el.summernote( this.options );
return this;
}
};
// expose to scope
$.extend(theme, {
PluginSummerNote: PluginSummerNote
});
// jquery plugin
$.fn.themePluginSummerNote = function(opts) {
return this.each(function() {
var $this = $(this);
if ($this.data(instanceName)) {
return $this.data(instanceName);
} else {
return new PluginSummerNote($this, opts);
}
});
}
}).apply(this, [ window.theme, jQuery ]);
// TextArea AutoSize
(function(theme, $) {
theme = theme || {};
var initialized = false;
var instanceName = '__textareaAutosize';
var PluginTextAreaAutoSize = function($el, opts) {
return this.initialize($el, opts);
};
PluginTextAreaAutoSize.defaults = {
};
PluginTextAreaAutoSize.prototype = {
initialize: function($el, opts) {
if (initialized) {
return this;
}
this.$el = $el;
this
.setData()
.setOptions(opts)
.build();
return this;
},
setData: function() {
this.$el.data(instanceName, this);
return this;
},
setOptions: function(opts) {
this.options = $.extend( true, {}, PluginTextAreaAutoSize.defaults, opts );
return this;
},
build: function() {
this.$el.autosize( this.options );
return this;
}
};
// expose to scope
$.extend(theme, {
PluginTextAreaAutoSize: PluginTextAreaAutoSize
});
// jquery plugin
$.fn.themePluginTextAreaAutoSize = function(opts) {
return this.each(function() {
var $this = $(this);
if ($this.data(instanceName)) {
return $this.data(instanceName);
} else {
return new PluginTextAreaAutoSize($this, opts);
}
});
}
}).apply(this, [ window.theme, jQuery ]);
// TimePicker
(function(theme, $) {
theme = theme || {};
var instanceName = '__timepicker';
var PluginTimePicker = function($el, opts) {
return this.initialize($el, opts);
};
PluginTimePicker.defaults = {
disableMousewheel: true
};
PluginTimePicker.prototype = {
initialize: function($el, opts) {
if ( $el.data( instanceName ) ) {
return this;
}
this.$el = $el;
this
.setData()
.setOptions(opts)
.build();
return this;
},
setData: function() {
this.$el.data(instanceName, this);
return this;
},
setOptions: function(opts) {
this.options = $.extend( true, {}, PluginTimePicker.defaults, opts );
return this;
},
build: function() {
this.$el.timepicker( this.options );
return this;
}
};
// expose to scope
$.extend(theme, {
PluginTimePicker: PluginTimePicker
});
// jquery plugin
$.fn.themePluginTimePicker = function(opts) {
return this.each(function() {
var $this = $(this);
if ($this.data(instanceName)) {
return $this.data(instanceName);
} else {
return new PluginTimePicker($this, opts);
}
});
}
}).apply(this, [ window.theme, jQuery ]);
// Map Builder
(function( theme, $ ) {
'use strict';
// prevent undefined var
theme = theme || {};
// internal var to check if reached limit
var timeouts = 0;
// instance
var instanceName = '__gmapbuilder';
// private
var roundNumber = function( number, precision ) {
if( precision < 0 ) {
precision = 0;
} else if( precision > 10 ) {
precision = 10;
}
var a = [ 1, 10, 100, 1000, 10000, 100000, 1000000, 10000000, 100000000, 1000000000, 10000000000 ];
return Math.round( number * a[ precision ] ) / a[ precision ];
};
// definition
var GMapBuilder = function( $wrapper, opts ) {
return this.initialize( $wrapper, opts );
};
GMapBuilder.defaults = {
mapSelector: '#gmap',
markers: {
modal: '#MarkerModal',
list: '#MarkersList',
removeAll: '#MarkerRemoveAll'
},
previewModal: '#ModalPreview',
getCodeModal: '#ModalGetCode',
mapOptions: {
center: {
lat: -38.908133,
lng: -13.692628
},
panControl: true,
zoom: 3
}
};
GMapBuilder.prototype = {
markers: [],
initialize: function( $wrapper, opts ) {
this.$wrapper = $wrapper;
this
.setData()
.setOptions( opts )
.setVars()
.build()
.events();
return this;
},
setData: function() {
this.$wrapper.data( instanceName, this );
return this;
},
setOptions: function( opts ) {
this.options = $.extend( true, {}, GMapBuilder.defaults, opts );
return this;
},
setVars: function() {
this.$mapContainer = this.$wrapper.find( this.options.mapSelector );
this.$previewModal = $( this.options.previewModal );
this.$getCodeModal = $( this.options.getCodeModal );
this.marker = {};
this.marker.$modal = $( this.options.markers.modal );
this.marker.$form = this.marker.$modal.find( 'form' );
this.marker.$list = $( this.options.markers.list );
this.marker.$removeAll = $( this.options.markers.removeAll );
return this;
},
build: function() {
var _self = this;
if ( !!window.SnazzyThemes ) {
var themeOpts = [];
$.each( window.SnazzyThemes, function( i, theme ) {
themeOpts.push( $('<option value="' + theme.id + '">' + theme.name + '</option>').data( 'json', theme.json ) );
});
this.$wrapper.find( '[data-builder-field="maptheme"]' ).append( themeOpts );
}
this.geocoder = new google.maps.Geocoder();
google.maps.event.addDomListener( window, 'load', function() {
_self.options.mapOptions.center = new google.maps.LatLng( _self.options.mapOptions.center.lat, _self.options.mapOptions.center.lng );
_self.map = new google.maps.Map( _self.$mapContainer.get(0), _self.options.mapOptions );
_self
.updateControl( 'latlng' )
.updateControl( 'zoomlevel' );
_self.mapEvents();
});
return this;
},
events: function() {
var _self = this;
this.$wrapper.find( '[data-builder-field]' ).each(function() {
var $this = $( this ),
field,
value;
field = $this.data( 'builder-field' );
$this.on( 'change', function() {
if ( $this.is( 'select' ) ) {
value = $this.children( 'option:selected' ).val().toLowerCase();
} else {
value = $this.val().toLowerCase();
}
_self.updateMap( field, value );
});
});
this.marker.$form.on( 'submit', function( e ) {
e.preventDefault();
_self.saveMarker( _self.marker.$form.formToObject() );
});
this.marker.$removeAll.on( 'click', function( e ) {
e.preventDefault();
_self.removeAllMarkers();
});
// preview events
this.$previewModal.on( 'shown.bs.modal', function() {
_self.preview();
});
this.$previewModal.on( 'hidden.bs.modal', function() {
_self.$previewModal.find( 'iframe' ).get(0).contentWindow.document.body.innerHTML = '';
});
// get code events
this.$getCodeModal.on( 'shown.bs.modal', function() {
_self.getCode();
});
return this;
},
// MAP FUNCTIONS
// -----------------------------------------------------------------------------
mapEvents: function() {
var _self = this;
google.maps.event.addDomListener( _self.map, 'resize', function() {
google.maps.event.trigger( _self.map, 'resize' );
});
google.maps.event.addListener( this.map, 'center_changed', function() {
var coords = _self.map.getCenter();
_self.updateControl( 'latlng', {
lat: roundNumber( coords.lat(), 6 ),
lng: roundNumber( coords.lng(), 6 )
});
});
google.maps.event.addListener( this.map, 'zoom_changed', function() {
_self.updateControl( 'zoomlevel', _self.map.getZoom() );
});
google.maps.event.addListener( this.map, 'maptypeid_changed', function() {
_self.updateControl( 'maptype', _self.map.getMapTypeId() );
});
return this;
},
updateMap: function( prop, value ) {
var updateFn;
updateFn = this.updateMapProperty[ prop ];
if ( $.isFunction( updateFn ) ) {
updateFn.apply( this, [ value ] );
} else {
console.info( 'missing update function for', prop );
}
return this;
},
updateMapProperty: {
latlng: function() {
var lat,
lng;
lat = this.$wrapper.find('[data-builder-field][name="latitude"]').val();
lng = this.$wrapper.find('[data-builder-field][name="longitude"]').val();
if ( lat.length > 0 && lng.length > 0 ) {
this.map.setCenter( new google.maps.LatLng( lat, lng ) );
}
return this;
},
zoomlevel: function( value ) {
var value = arguments[ 0 ];
this.map.setZoom( parseInt( value, 10 ) );
return this;
},
maptypecontrol: function( value ) {
var options;
options = {};
if ( value === 'false' ){
options.mapTypeControl = false;
} else {
options = {
mapTypeControl: true,
mapTypeControlOptions: {
style: google.maps.MapTypeControlStyle[ value.toUpperCase() ]
}
};
}
this.map.setOptions( options );
return this;
},
zoomcontrol: function( value ) {
var options;
options = {};
if ( value === 'false' ){
options.zoomControl = false;
} else {
options = {
zoomControl: true,
zoomControlOptions: {
style: google.maps.ZoomControlStyle[ value.toUpperCase() ]
}
};
}
this.map.setOptions( options );
return this;
},
scalecontrol: function( value ) {
var options;
options = {};
options.scaleControl = value !== 'false';
this.map.setOptions( options );
return this;
},
streetviewcontrol: function( value ) {
var options;
options = {};
options.streetViewControl = value !== 'false';
this.map.setOptions( options );
return this;
},
pancontrol: function( value ) {
var options;
options = {};
options.panControl = value !== 'false';
this.map.setOptions( options );
return this;
},
overviewcontrol: function( value ) {
var options;
options = {};
if ( value === 'false' ){
options.overviewMapControl = false;
} else {
options = {
overviewMapControl: true,
overviewMapControlOptions: {
opened: value === 'opened'
}
};
}
this.map.setOptions( options );
return this;
},
draggablecontrol: function( value ) {
var options;
options = {};
options.draggable = value !== 'false';
this.map.setOptions( options );
return this;
},
clicktozoomcontrol: function( value ) {
var options;
options = {};
options.disableDoubleClickZoom = value === 'false';
this.map.setOptions( options );
return this;
},
scrollwheelcontrol: function( value ) {
var options;
options = {};
options.scrollwheel = value !== 'false';
this.map.setOptions( options );
return this;
},
maptype: function( value ) {
var options,
mapStyles,
mapType;
mapStyles = this.$wrapper.find( '[data-builder-field="maptheme"]' ).children( 'option' ).filter( ':selected' ).data( 'json' );
mapType = google.maps.MapTypeId[ value.toUpperCase() ];
options = {
mapTypeId: mapType
};
if ( $.inArray( google.maps.MapTypeId[ value.toUpperCase() ], [ 'terrain', 'roadmap' ]) > -1 && !!mapStyles ) {
options.styles = eval( mapStyles );
} else {
options.styles = false;
this.updateControl( 'maptheme' );
}
this.map.setOptions( options );
},
maptheme: function( value ) {
var json,
mapType,
options;
mapType = google.maps.MapTypeId[ this.map.getMapTypeId() === 'terrain' ? 'TERRAIN' : 'ROADMAP' ];
options = {};
json = this.$wrapper.find( '[data-builder-field="maptheme"]' ).children( 'option' ).filter( ':selected' ).data( 'json' );
if ( !json ) {
options = {
mapTypeId: mapType,
styles: false
};
} else {
options = {
mapTypeId: mapType,
styles: eval( json )
};
}
this.map.setOptions( options );
}
},
// CONTROLS FUNCTIONS
// -----------------------------------------------------------------------------
updateControl: function( prop ) {
var updateFn;
updateFn = this.updateControlValue[ prop ];
if ( $.isFunction( updateFn ) ) {
updateFn.apply( this );
} else {
console.info( 'missing update function for', prop );
}
return this;
},
updateControlValue: {
latlng: function() {
var center = this.map.getCenter();
this.$wrapper.find('[data-builder-field][name="latitude"]').val( roundNumber( center.lat() , 6 ) );
this.$wrapper.find('[data-builder-field][name="longitude"]').val( roundNumber( center.lng() , 6 ) );
},
zoomlevel: function() {
var $control,
level;
level = this.map.getZoom();
$control = this.$wrapper.find('[data-builder-field="zoomlevel"]');
$control
.children( 'option[value="' + level + '"]' )
.prop( 'selected', true );
if ( $control.hasClass( 'select2-offscreen' ) ) {
$control.select2( 'val', level );
}
},
maptype: function() {
var $control,
mapType;
mapType = this.map.getMapTypeId();
$control = this.$wrapper.find('[data-builder-field="maptype"]');
$control
.children( 'option[value="' + mapType + '"]' )
.prop( 'selected', true );
if ( $control.hasClass( 'select2-offscreen' ) ) {
$control.select2( 'val', mapType );
}
},
maptheme: function() {
var $control;
$control = this.$wrapper.find('[data-builder-field="maptheme"]');
$control
.children( 'option[value="false"]' )
.prop( 'selected', true );
if ( $control.hasClass( 'select2-offscreen' ) ) {
$control.select2( 'val', 'false' );
}
}
},
// MARKERS FUNCTIONS
// -----------------------------------------------------------------------------
editMarker: function( marker ) {
this.currentMarker = marker;
this.marker.$form
.find( '#MarkerLocation' ).val( marker.location );
this.marker.$form
.find( '#MarkerTitle' ).val( marker.title );
this.marker.$form
.find( '#MarkerDescription' ).val( marker.description );
this.marker.$modal.modal( 'show' );
},
removeMarker: function( marker ) {
var i;
marker._instance.setMap( null );
marker._$html.remove();
for( i = 0; i < this.markers.length; i++ ) {
if ( marker === this.markers[ i ] ) {
this.markers.splice( i, 1 );
break;
}
}
if ( this.markers.length === 0 ) {
this.marker.$list.addClass( 'hidden' );
}
},
saveMarker: function( marker ) {
this._geocode( marker );
},
removeAllMarkers: function() {
var i = 0,
l,
marker;
l = this.markers.length;
for( ; i < l; i++ ) {
marker = this.markers[ i ];
marker._instance.setMap( null );
marker._$html.remove();
}
this.markers = [];
this.marker.$list.addClass( 'hidden' );
},
_geocode: function( marker ) {
var _self = this,
status;
this.geocoder.geocode({ address: marker.location }, function( response, status ) {
_self._onGeocodeResult( marker, response, status );
});
},
_onGeocodeResult: function( marker, response, status ) {
var result;
if ( !response || status !== google.maps.GeocoderStatus.OK ) {
if ( status == google.maps.GeocoderStatus.ZERO_RESULTS ) {
// show notification
} else {
timeouts++;
if ( timeouts > 3 ) {
// show notification reached limit of requests
}
}
} else {
timeouts = 0;
if ( this.currentMarker ) {
this.removeMarker( this.currentMarker );
this.currentMarker = null;
}
// grab first result of the list
result = response[ 0 ];
// get lat & lng and set to marker
marker.lat = Math.round( result.geometry.location.lat() * 1000000 ) / 1000000;
marker.lng = Math.round( result.geometry.location.lng() * 1000000 ) / 1000000;
var opts = {
position: new google.maps.LatLng( marker.lat, marker.lng ),
map: this.map
};
if ( marker.title.length > 0 ) {
opts.title = marker.title;
}
if ( marker.description.length > 0 ) {
opts.desc = marker.description;
}
marker.position = opts.position;
marker._instance = new google.maps.Marker( opts );
if ( !!marker.title || !!marker.description ) {
this._bindMarkerClick( marker );
}
this.markers.push( marker );
// append to markers list
this._appendMarkerToList( marker );
// hide modal and reset form
this.marker.$form.get(0).reset();
this.marker.$modal.modal( 'hide' );
}
},
_appendMarkerToList: function( marker ) {
var _self = this,
html;
html = [
'<li>',
'<p>{location}</p>',
'<a href="#" class="location-action location-center"><i class="fa fa-map-marker"></i></a>',
'<a href="#" class="location-action location-edit"><i class="fa fa-edit"></i></a>',
'<a href="#" class="location-action location-remove text-danger"><i class="fa fa-times"></i></a>',
'</li>'
].join('');
html = html.replace( /\{location\}/, !!marker.title ? marker.title : marker.location );
marker._$html = $( html );
// events
marker._$html.find( '.location-center' )
.on( 'click', function( e ) {
_self.map.setCenter( marker.position );
});
marker._$html.find( '.location-remove' )
.on( 'click', function( e ) {
e.preventDefault();
_self.removeMarker( marker );
});
marker._$html.find( '.location-edit' )
.on( 'click', function( e ) {
e.preventDefault();
_self.editMarker( marker );
});
this.marker.$list
.append( marker._$html )
.removeClass( 'hidden' );
},
_bindMarkerClick: function( marker ) {
var _self = this,
html;
html = [
'<div style="background-color: #FFF; color: #000; padding: 5px; width: 150px;">',
'{title}',
'{description}',
'</div>'
].join('');
html = html.replace(/\{title\}/, !!marker.title ? ("<h4>" + marker.title + "</h4>") : "" );
html = html.replace(/\{description\}/, !!marker.description ? ("<p>" + marker.description + "</p>") : "" );
marker._infoWindow = new google.maps.InfoWindow({ content: html });
google.maps.event.addListener( marker._instance, 'click', function() {
if ( marker._infoWindow.isOpened ) {
marker._infoWindow.close();
marker._infoWindow.isOpened = false;
} else {
marker._infoWindow.open( _self.map, this );
marker._infoWindow.isOpened = true;
}
});
},
preview: function() {
var customScript,
googleScript,
iframe,
previewHtml;
previewHtml = [
'<style>',
'html, body { margin: 0; padding: 0; }',
'</style>',
'<div id="' + this.$wrapper.find('[data-builder-field="mapid"]').val() + '" style="width: 100%; height: 100%;"></div>'
];
iframe = this.$previewModal.find( 'iframe' ).get(0).contentWindow.document;
iframe.body.innerHTML = previewHtml.join('');
customScript = iframe.createElement( 'script' );
customScript.type = 'text/javascript';
customScript.text = "window.initialize = function() { " + this.generate() + " init(); }; ";
iframe.body.appendChild( customScript );
googleScript = iframe.createElement( 'script' );
googleScript.type = 'text/javascript';
googleScript.text = 'function loadScript() { var script = document.createElement("script"); script.type = "text/javascript"; script.src = "http://maps.googleapis.com/maps/api/js?key=&sensor=&callback=initialize"; document.body.appendChild(script); } loadScript()';
iframe.body.appendChild( googleScript );
},
getCode: function() {
this.$getCodeModal.find('.modal-body pre').html( this.generate().replace( /</g, '<' ).replace( />/g, '>' ) );
},
// GENERATE CODE
// -----------------------------------------------------------------------------
generate: function() {
var i,
work;
var output = [
' google.maps.event.addDomListener(window, "load", init);',
' var map;',
' function init() {',
' var mapOptions = {',
' center: new google.maps.LatLng({lat}, {lng}),',
' zoom: {zoom},',
' zoomControl: {zoomControl},',
' {zoomControlOptions}',
' disableDoubleClickZoom: {disableDoubleClickZoom},',
' mapTypeControl: {mapTypeControl},',
' {mapTypeControlOptions}',
' scaleControl: {scaleControl},',
' scrollwheel: {scrollwheel},',
' panControl: {panControl},',
' streetViewControl: {streetViewControl},',
' draggable : {draggable},',
' overviewMapControl: {overviewMapControl},',
' {overviewMapControlOptions}',
' mapTypeId: google.maps.MapTypeId.{mapTypeId}{styles}',
' };',
'',
' var mapElement = document.getElementById("{mapid}");',
' var map = new google.maps.Map(mapElement, mapOptions);',
' {locations}',
' }'
];
output = output.join("\r\n");
var zoomControl = this.$wrapper.find('[data-builder-field="zoomcontrol"] option:selected').val() !== 'false';
var mapTypeControl = this.$wrapper.find('[data-builder-field="maptypecontrol"] option:selected').val() !== 'false';
var overviewMapControl = this.$wrapper.find('[data-builder-field="overviewcontrol"] option:selected').val().toLowerCase();
var $themeControl = this.$wrapper.find('[data-builder-field="maptheme"] option:selected').filter( ':selected' );
output = output
.replace( /\{mapid\}/, this.$wrapper.find('[data-builder-field="mapid"]').val() )
.replace( /\{lat\}/, this.$wrapper.find('[data-builder-field][name="latitude"]').val() )
.replace( /\{lng\}/, this.$wrapper.find('[data-builder-field][name="longitude"]').val() )
.replace( /\{zoom\}/, this.$wrapper.find('[data-builder-field="zoomlevel"] option:selected').val() )
.replace( /\{zoomControl\}/, zoomControl )
.replace( /\{disableDoubleClickZoom\}/, this.$wrapper.find('[data-builder-field="clicktozoomcontrol"] option:selected').val() === 'false' )
.replace( /\{mapTypeControl\}/, mapTypeControl )
.replace( /\{scaleControl\}/, this.$wrapper.find('[data-builder-field="scalecontrol"] option:selected').val() !== 'false' )
.replace( /\{scrollwheel\}/, this.$wrapper.find('[data-builder-field="scrollwheelcontrol"] option:selected').val() !== 'false' )
.replace( /\{panControl\}/, this.$wrapper.find('[data-builder-field="pancontrol"] option:selected').val() !== 'false' )
.replace( /\{streetViewControl\}/, this.$wrapper.find('[data-builder-field="streetviewcontrol"] option:selected').val() !== 'false' )
.replace( /\{draggable\}/, this.$wrapper.find('[data-builder-field="draggablecontrol"] option:selected').val() !== 'false' )
.replace( /\{overviewMapControl\}/, overviewMapControl !== 'false' )
.replace( /\{mapTypeId\}/, this.$wrapper.find('[data-builder-field="maptype"] option:selected').val().toUpperCase() );
if ( zoomControl ) {
work = {
zoomControlOptions: {
style: this.$wrapper.find('[data-builder-field="maptypecontrol"] option:selected').val().toUpperCase()
}
};
output = output.replace( /\{zoomControlOptions\}/, "zoomControlOptions: {\r\n style: google.maps.ZoomControlStyle." + this.$wrapper.find('[data-builder-field="zoomcontrol"] option:selected').val().toUpperCase() + "\r\n\ },");
} else {
output = output.replace( /\{zoomControlOptions\}/, '' );
}
if ( mapTypeControl ) {
work = {
zoomControlOptions: {
style: this.$wrapper.find('[data-builder-field="maptypecontrol"] option:selected').val().toUpperCase()
}
};
output = output.replace( /\{mapTypeControlOptions\}/, "mapTypeControlOptions: {\r\n style: google.maps.MapTypeControlStyle." + this.$wrapper.find('[data-builder-field="maptypecontrol"] option:selected').val().toUpperCase() + "\r\n\ },");
} else {
output = output.replace( /\{mapTypeControlOptions\}/, '' );
}
if ( overviewMapControl !== 'false' ) {
output = output.replace( /\{overviewMapControlOptions\}/, "overviewMapControlOptions: {\r\n opened: " + (overviewMapControl === 'opened') + "\r\n\ },");
} else {
output = output.replace( /\{overviewMapControlOptions\}/, '' );
}
if ( $themeControl.val() !== 'false' ) {
output = output.replace( /\{styles\}/, ',\r\n styles: ' + $themeControl.data( 'json' ).replace(/\r\n/g, '') );
} else {
output = output.replace( /\{styles\}/, '' );
}
if ( this.markers.length > 0 ) {
var work = [ 'var locations = [' ];
var m,
object;
for( i = 0; i < this.markers.length; i++ ) {
m = this.markers[ i ];
object = '';
object += ' { lat: ' + m.lat + ', lng: ' + m.lng;
if ( !!m.title ) {
object += ', title: "' + m.title + '"';
}
if ( !!m.description ) {
object += ', description: "' + m.description + '"';
}
object += ' }';
if ( i + 1 < this.markers.length ) {
object += ',';
}
work.push( object );
}
work.push( ' ];\r\n' )
work.push( ' var opts = {};' )
work.push( ' for (var i = 0; i < locations.length; i++) {' );
work.push( ' opts.position = new google.maps.LatLng( locations[ i ].lat, locations[ i ].lng );' );
work.push( ' opts.map = map;' );
work.push( ' if ( !!locations[ i ] .title ) { opts.title = locations[ i ].title; }');
work.push( ' if ( !!locations[ i ] .description ) { opts.description = locations[ i ].description; }');
work.push( ' marker = new google.maps.Marker( opts );' );
work.push( '' );
work.push( ' (function() {' );
work.push( ' var html = [' );
work.push( ' \'<div style="background-color: #FFF; color: #000; padding: 5px; width: 150px;">\',' );
work.push( ' \'{title}\',' );
work.push( ' \'{description}\',' );
work.push( ' \'</div>\'' );
work.push( ' ].join(\'\');' );
work.push( '' );
work.push( ' html = html.replace(/\{title\}/, !!opts.title ? ("<h4>" + opts.title + "</h4>") : "" );' );
work.push( ' html = html.replace(/\{description\}/, !!opts.description ? ("<p>" + opts.description + "</p>") : "" );' );
work.push( ' var infoWindow = new google.maps.InfoWindow({ content: html });' );
work.push( ' google.maps.event.addListener( marker, \'click\', function() {' );
work.push( ' if ( infoWindow.isOpened ) {' );
work.push( ' infoWindow.close();' );
work.push( ' infoWindow.isOpened = false;' );
work.push( ' } else {' );
work.push( ' infoWindow.open( map, this );' );
work.push( ' infoWindow.isOpened = true;' );
work.push( ' }' );
work.push( ' });' );
work.push( ' })();' )
work.push( ' }');
output = output.replace( /\{locations\}/, work.join('\r\n') );
} else {
output = output.replace( /\{locations\}/, '' );
}
console.log( output );
return output;
}
};
// expose
$.extend( true, theme, {
Maps: {
GMapBuilder: GMapBuilder
}
});
// jQuery plugin
$.fn.themeGMapBuilder = function( opts ) {
return this.map(function() {
var $this = $( this ),
instance;
instance = $this.data( instanceName );
if ( instance ) {
return instance;
} else {
return (new GMapBuilder( $this, opts ));
}
});
};
// auto initialize
$(function() {
$('[data-theme-gmap-builder]').each(function() {
var $this = $( this );
window.builder = $this.themeGMapBuilder();
});
});
}).apply(this, [ window.theme, jQuery ]);
// Animate
(function(theme, $) {
theme = theme || {};
var instanceName = '__animate';
var PluginAnimate = function($el, opts) {
return this.initialize($el, opts);
};
PluginAnimate.defaults = {
accX: 0,
accY: -150,
delay: 1
};
PluginAnimate.prototype = {
initialize: function($el, opts) {
if ( $el.data( instanceName ) ) {
return this;
}
this.$el = $el;
this
.setData()
.setOptions(opts)
.build();
return this;
},
setData: function() {
this.$el.data(instanceName, this);
return this;
},
setOptions: function(opts) {
this.options = $.extend(true, {}, PluginAnimate.defaults, opts, {
wrapper: this.$el
});
return this;
},
build: function() {
var self = this,
$el = this.options.wrapper,
delay = 0;
$el.addClass('appear-animation');
if(!$('html').hasClass('no-csstransitions') && $(window).width() > 767) {
$el.appear(function() {
delay = ($el.attr('data-appear-animation-delay') ? $el.attr('data-appear-animation-delay') : self.options.delay);
if(delay > 1) {
$el.css('animation-delay', delay + 'ms');
}
$el.addClass($el.attr('data-appear-animation'));
setTimeout(function() {
$el.addClass('appear-animation-visible');
}, delay);
}, {accX: self.options.accX, accY: self.options.accY});
} else {
$el.addClass('appear-animation-visible');
}
return this;
}
};
// expose to scope
$.extend(theme, {
PluginAnimate: PluginAnimate
});
// jquery plugin
$.fn.themePluginAnimate = function(opts) {
return this.map(function() {
var $this = $(this);
if ($this.data(instanceName)) {
return $this.data(instanceName);
} else {
return new PluginAnimate($this, opts);
}
});
};
}).apply(this, [ window.theme, jQuery ]);
// Carousel
(function(theme, $) {
theme = theme || {};
var initialized = false;
var instanceName = '__carousel';
var PluginCarousel = function($el, opts) {
return this.initialize($el, opts);
};
PluginCarousel.defaults = {
itemsDesktop: false,
itemsDesktopSmall: false,
itemsTablet: false,
itemsTabletSmall: false,
itemsMobile: false
};
PluginCarousel.prototype = {
initialize: function($el, opts) {
if ( $el.data( instanceName ) ) {
return this;
}
this.$el = $el;
this
.setData()
.setOptions(opts)
.build();
return this;
},
setData: function() {
this.$el.data(instanceName, this);
return this;
},
setOptions: function(opts) {
this.options = $.extend(true, {}, PluginCarousel.defaults, opts, {
wrapper: this.$el
});
return this;
},
build: function() {
this.options.wrapper.owlCarousel(this.options).addClass("owl-carousel-init");
return this;
}
};
// expose to scope
$.extend(theme, {
PluginCarousel: PluginCarousel
});
// jquery plugin
$.fn.themePluginCarousel = function(opts) {
return this.map(function() {
var $this = $(this);
if ($this.data(instanceName)) {
return $this.data(instanceName);
} else {
return new PluginCarousel($this, opts);
}
});
}
}).apply(this, [ window.theme, jQuery ]);
// Chart Circular
(function(theme, $) {
theme = theme || {};
var instanceName = '__chartCircular';
var PluginChartCircular = function($el, opts) {
return this.initialize($el, opts);
};
PluginChartCircular.defaults = {
accX: 0,
accY: -150,
delay: 1,
barColor: '#0088CC',
trackColor: '#f2f2f2',
scaleColor: false,
scaleLength: 5,
lineCap: 'round',
lineWidth: 13,
size: 175,
rotate: 0,
animate: ({
duration: 2500,
enabled: true
})
};
PluginChartCircular.prototype = {
initialize: function($el, opts) {
if ( $el.data( instanceName ) ) {
return this;
}
this.$el = $el;
this
.setData()
.setOptions(opts)
.build();
return this;
},
setData: function() {
this.$el.data(instanceName, this);
return this;
},
setOptions: function(opts) {
this.options = $.extend(true, {}, PluginChartCircular.defaults, opts, {
wrapper: this.$el
});
return this;
},
build: function() {
var self = this,
$el = this.options.wrapper,
value = ($el.attr('data-percent') ? $el.attr('data-percent') : 0),
percentEl = $el.find('.percent'),
shouldAnimate,
data;
shouldAnimate = $.isFunction($.fn[ 'appear' ]) && ( typeof $.browser !== 'undefined' && !$.browser.mobile );
data = { accX: self.options.accX, accY: self.options.accY };
$.extend(true, self.options, {
onStep: function(from, to, currentValue) {
percentEl.html(parseInt(currentValue));
}
});
$el.attr('data-percent', (shouldAnimate ? 0 : value) );
$el.easyPieChart( this.options );
if ( shouldAnimate ) {
$el.appear(function() {
setTimeout(function() {
$el.data('easyPieChart').update(value);
$el.attr('data-percent', value);
}, self.options.delay);
}, data);
} else {
$el.data('easyPieChart').update(value);
$el.attr('data-percent', value);
}
return this;
}
};
// expose to scope
$.extend(true, theme, {
Chart: {
PluginChartCircular: PluginChartCircular
}
});
// jquery plugin
$.fn.themePluginChartCircular = function(opts) {
return this.map(function() {
var $this = $(this);
if ($this.data(instanceName)) {
return $this.data(instanceName);
} else {
return new PluginChartCircular($this, opts);
}
});
}
}).apply(this, [ window.theme, jQuery ]);
// Lightbox
(function(theme, $) {
theme = theme || {};
var instanceName = '__lightbox';
var PluginLightbox = function($el, opts) {
return this.initialize($el, opts);
};
PluginLightbox.defaults = {
tClose: 'Close (Esc)', // Alt text on close button
tLoading: 'Loading...', // Text that is displayed during loading. Can contain %curr% and %total% keys
gallery: {
tPrev: 'Previous (Left arrow key)', // Alt text on left arrow
tNext: 'Next (Right arrow key)', // Alt text on right arrow
tCounter: '%curr% of %total%' // Markup for "1 of 7" counter
},
image: {
tError: '<a href="%url%">The image</a> could not be loaded.' // Error message when image could not be loaded
},
ajax: {
tError: '<a href="%url%">The content</a> could not be loaded.' // Error message when ajax request failed
}
};
PluginLightbox.prototype = {
initialize: function($el, opts) {
if ( $el.data( instanceName ) ) {
return this;
}
this.$el = $el;
this
.setData()
.setOptions(opts)
.build();
return this;
},
setData: function() {
this.$el.data(instanceName, this);
return this;
},
setOptions: function(opts) {
this.options = $.extend(true, {}, PluginLightbox.defaults, opts, {
wrapper: this.$el
});
return this;
},
build: function() {
this.options.wrapper.magnificPopup(this.options);
return this;
}
};
// expose to scope
$.extend(theme, {
PluginLightbox: PluginLightbox
});
// jquery plugin
$.fn.themePluginLightbox = function(opts) {
return this.each(function() {
var $this = $(this);
if ($this.data(instanceName)) {
return $this.data(instanceName);
} else {
return new PluginLightbox($this, opts);
}
});
}
}).apply(this, [ window.theme, jQuery ]);
// Portlets
(function(theme, $) {
theme = theme || {};
var instanceName = '__portlet',
storageOrderKey = '__portletOrder',
storageStateKey = '__portletState';
var PluginPortlet = function($el, opts) {
return this.initialize($el, opts);
};
PluginPortlet.defaults = {
connectWith: '[data-plugin-portlet]',
items: '[data-portlet-item]',
handle: '.portlet-handler',
opacity: 0.7,
placeholder: 'portlet-placeholder',
cancel: 'portlet-cancel',
forcePlaceholderSize: true,
forceHelperSize: true,
tolerance: 'pointer',
helper: 'original',
revert: 200
};
PluginPortlet.prototype = {
initialize: function($el, opts) {
if ( $el.data( instanceName ) ) {
return this;
}
this.$el = $el;
this
.setData()
.setOptions(opts)
.build();
return this;
},
setData: function() {
this.$el.data(instanceName, this);
return this;
},
setOptions: function(opts) {
var _self = this;
this.options = $.extend(true, {}, PluginPortlet.defaults, opts, {
wrapper: this.$el,
update: _self.onUpdate,
create: _self.onLoad
});
return this;
},
onUpdate: function(event, ui) {
var key = storageOrderKey,
data = store.get(key),
$this = $(this),
porletId = $this.prop('id');
if (!data) {
data = {};
}
if (!!porletId) {
data[porletId] = $this.sortable('toArray');
store.set(key, data);
}
},
onLoad: function(event, ui) {
var key = storageOrderKey,
data = store.get(key),
$this = $(this),
porletId = $this.prop('id'),
portlet = $('#' + porletId);
if (!!data) {
var panels = data[porletId];
if (!!panels) {
$.each(panels, function(index, panelId) {
$('#' + panelId).appendTo(portlet);
});
}
}
},
saveState: function( panel ) {
var key = storageStateKey,
data = store.get(key),
panelId = panel.prop('id');
if (!data) {
data = {};
}
if (!panelId) {
return this;
}
var collapse = panel.find('.panel-actions').children('a.fa-caret-up, a.fa-caret-down'),
isCollapsed = !!collapse.hasClass('fa-caret-up'),
isRemoved = !panel.closest('body').get(0);
if (isRemoved) {
data[panelId] = 'removed';
} else if (isCollapsed) {
data[panelId] = 'collapsed';
} else {
delete data[panelId];
}
store.set(key, data);
return this;
},
loadState: function() {
var key = storageStateKey,
data = store.get(key);
if (!!data) {
$.each(data, function(panelId, state) {
var panel = $('#' + panelId);
if (!panel.data('portlet-state-loaded')) {
if (state == 'collapsed') {
panel.find('.panel-actions a.fa-caret-down').trigger('click');
} else if (state == 'removed') {
panel.find('.panel-actions a.fa-times').trigger('click');
}
panel.data('portlet-state-loaded', true);
}
});
}
return this;
},
build: function() {
var _self = this;
if ( $.isFunction( $.fn.sortable ) ) {
this.$el.sortable( this.options );
this.$el.find('[data-portlet-item]').each(function() {
_self.events( $(this) );
});
}
var portlet = this.$el;
portlet.css('min-height', 150);
return this;
},
events: function($el) {
var _self = this,
portlet = $el.closest('[data-plugin-portlet]');
this.loadState();
$el.find('.panel-actions').on( 'click', 'a.fa-caret-up, a.fa-caret-down, a.fa-times', function( e ) {
setTimeout(function() {
_self.saveState( $el );
}, 250);
});
return this;
}
};
// expose to scope
$.extend(theme, {
PluginPortlet: PluginPortlet
});
// jquery plugin
$.fn.themePluginPortlet = function(opts) {
return this.map(function() {
var $this = $(this);
if ($this.data(instanceName)) {
return $this.data(instanceName);
} else {
return new PluginPortlet($this, opts);
}
});
}
}).apply(this, [ window.theme, jQuery ]);
// Slider
(function(theme, $) {
theme = theme || {};
var instanceName = '__slider';
var PluginSlider = function($el, opts) {
return this.initialize($el, opts);
};
PluginSlider.defaults = {
};
PluginSlider.prototype = {
initialize: function($el, opts) {
if ( $el.data( instanceName ) ) {
return this;
}
this.$el = $el;
this
.setVars()
.setData()
.setOptions(opts)
.build();
return this;
},
setVars: function() {
var $output = $( this.$el.data('plugin-slider-output') );
this.$output = $output.get(0) ? $output : null;
return this;
},
setData: function() {
this.$el.data(instanceName, this);
return this;
},
setOptions: function(opts) {
var _self = this;
this.options = $.extend( true, {}, PluginSlider.defaults, opts );
if ( this.$output ) {
$.extend( this.options, {
slide: function( event, ui ) {
_self.onSlide( event, ui );
}
});
}
return this;
},
build: function() {
this.$el.slider( this.options );
return this;
},
onSlide: function( event, ui ) {
if ( !ui.values ) {
this.$output.val( ui.value );
} else {
this.$output.val( ui.values[ 0 ] + '/' + ui.values[ 1 ] );
}
this.$output.trigger('change');
}
};
// expose to scope
$.extend(theme, {
PluginSlider: PluginSlider
});
// jquery plugin
$.fn.themePluginSlider = function(opts) {
return this.each(function() {
var $this = $(this);
if ($this.data(instanceName)) {
return $this.data(instanceName);
} else {
return new PluginSlider($this, opts);
}
});
}
}).apply(this, [ window.theme, jQuery ]);
// Toggle
(function(theme, $) {
theme = theme || {};
var instanceName = '__toggle';
var PluginToggle = function($el, opts) {
return this.initialize($el, opts);
};
PluginToggle.defaults = {
duration: 350,
isAccordion: false,
addIcons: true
};
PluginToggle.prototype = {
initialize: function($el, opts) {
if ( $el.data( instanceName ) ) {
return this;
}
this.$el = $el;
this
.setData()
.setOptions(opts)
.build();
return this;
},
setData: function() {
this.$el.data(instanceName, this);
return this;
},
setOptions: function(opts) {
this.options = $.extend(true, {}, PluginToggle.defaults, opts, {
wrapper: this.$el
});
return this;
},
build: function() {
var self = this,
$wrapper = this.options.wrapper,
$items = $wrapper.find('.toggle'),
$el = null;
$items.each(function() {
$el = $(this);
if(self.options.addIcons) {
$el.find('> label').prepend(
$('<i />').addClass('fa fa-plus'),
$('<i />').addClass('fa fa-minus')
);
}
if($el.hasClass('active')) {
$el.find('> p').addClass('preview-active');
$el.find('> .toggle-content').slideDown(self.options.duration);
}
self.events($el);
});
if(self.options.isAccordion) {
self.options.duration = self.options.duration/2;
}
return this;
},
events: function($el) {
var self = this,
previewParCurrentHeight = 0,
previewParAnimateHeight = 0,
toggleContent = null;
$el.find('> label').click(function(e) {
var $this = $(this),
parentSection = $this.parent(),
parentWrapper = $this.parents('.toggle'),
previewPar = null,
closeElement = null;
if(self.options.isAccordion && typeof(e.originalEvent) != 'undefined') {
closeElement = parentWrapper.find('.toggle.active > label');
if(closeElement[0] == $this[0]) {
return;
}
}
parentSection.toggleClass('active');
// Preview Paragraph
if(parentSection.find('> p').get(0)) {
previewPar = parentSection.find('> p');
previewParCurrentHeight = previewPar.css('height');
previewPar.css('height', 'auto');
previewParAnimateHeight = previewPar.css('height');
previewPar.css('height', previewParCurrentHeight);
}
// Content
toggleContent = parentSection.find('> .toggle-content');
if(parentSection.hasClass('active')) {
$(previewPar).animate({
height: previewParAnimateHeight
}, self.options.duration, function() {
$(this).addClass('preview-active');
});
toggleContent.slideDown(self.options.duration, function() {
if(closeElement) {
closeElement.trigger('click');
}
});
} else {
$(previewPar).animate({
height: 0
}, self.options.duration, function() {
$(this).removeClass('preview-active');
});
toggleContent.slideUp(self.options.duration);
}
});
}
};
// expose to scope
$.extend(theme, {
PluginToggle: PluginToggle
});
// jquery plugin
$.fn.themePluginToggle = function(opts) {
return this.map(function() {
var $this = $(this);
if ($this.data(instanceName)) {
return $this.data(instanceName);
} else {
return new PluginToggle($this, opts);
}
});
}
}).apply(this, [ window.theme, jQuery ]);
// Widget - Todo
(function(theme, $) {
theme = theme || {};
var instanceName = '__widgetTodoList';
var WidgetTodoList = function($el, opts) {
return this.initialize($el, opts);
};
WidgetTodoList.defaults = {
};
WidgetTodoList.prototype = {
initialize: function($el, opts) {
if ( $el.data( instanceName ) ) {
return this;
}
this.$el = $el;
this
.setData()
.setOptions(opts)
.build()
.events();
return this;
},
setData: function() {
this.$el.data(instanceName, this);
return this;
},
setOptions: function(opts) {
this.options = $.extend( true, {}, WidgetTodoList.defaults, opts );
return this;
},
check: function( input, label ) {
if ( input.is(':checked') ) {
label.addClass('line-through');
} else {
label.removeClass('line-through');
}
},
build: function() {
var _self = this,
$check = this.$el.find('.todo-check');
$check.each(function () {
var label = $(this).closest('li').find('.todo-label');
_self.check( $(this), label );
});
return this;
},
events: function() {
var _self = this,
$remove = this.$el.find( '.todo-remove' ),
$check = this.$el.find('.todo-check'),
$window = $( window );
$remove.on('click.widget-todo-list', function( ev ) {
ev.preventDefault();
$(this).closest("li").remove();
});
$check.on('change', function () {
var label = $(this).closest('li').find('.todo-label');
_self.check( $(this), label );
});
if ( $.isFunction( $.fn.sortable ) ) {
this.$el.sortable({
sort: function(event, ui) {
var top = event.pageY - _self.$el.offset().top - (ui.helper.outerHeight(true) / 2);
ui.helper.css({'top' : top + 'px'});
}
});
}
return this;
}
};
// expose to scope
$.extend(theme, {
WidgetTodoList: WidgetTodoList
});
// jquery plugin
$.fn.themePluginWidgetTodoList = function(opts) {
return this.each(function() {
var $this = $(this);
if ($this.data(instanceName)) {
return $this.data(instanceName);
} else {
return new WidgetTodoList($this, opts);
}
});
}
}).apply(this, [ window.theme, jQuery ]);
// Widget - Toggle
(function(theme, $) {
theme = theme || {};
var instanceName = '__widgetToggleExpand';
var WidgetToggleExpand = function($el, opts) {
return this.initialize($el, opts);
};
WidgetToggleExpand.defaults = {
};
WidgetToggleExpand.prototype = {
initialize: function($el, opts) {
if ( $el.data( instanceName ) ) {
return this;
}
this.$el = $el;
this
.setData()
.setOptions(opts)
.build()
.events();
return this;
},
setData: function() {
this.$el.data(instanceName, this);
return this;
},
setOptions: function(opts) {
this.options = $.extend( true, {}, WidgetToggleExpand.defaults, opts );
return this;
},
build: function() {
return this;
},
events: function() {
var _self = this,
$toggler = this.$el.find( '.widget-toggle' );
$toggler.on('click.widget-toggler', function() {
_self.$el.hasClass('widget-collapsed') ? _self.expand( _self.$el ) : _self.collapse( _self.$el );
});
return this;
},
expand: function( content ) {
content.children( '.widget-content-expanded' ).slideDown( 'fast', function() {
$(this).css( 'display', '' );
content.removeClass( 'widget-collapsed' );
});
},
collapse: function( content ) {
content.children('.widget-content-expanded' ).slideUp( 'fast', function() {
content.addClass( 'widget-collapsed' );
$(this).css( 'display', '' );
});
}
};
// expose to scope
$.extend(theme, {
WidgetToggleExpand: WidgetToggleExpand
});
// jquery plugin
$.fn.themePluginWidgetToggleExpand = function(opts) {
return this.each(function() {
var $this = $(this);
if ($this.data(instanceName)) {
return $this.data(instanceName);
} else {
return new WidgetToggleExpand($this, opts);
}
});
}
}).apply(this, [ window.theme, jQuery ]);
// Word Rotate
(function(theme, $) {
theme = theme || {};
var instanceName = '__wordRotate';
var PluginWordRotate = function($el, opts) {
return this.initialize($el, opts);
};
PluginWordRotate.defaults = {
delay: 2000
};
PluginWordRotate.prototype = {
initialize: function($el, opts) {
if ( $el.data( instanceName ) ) {
return this;
}
this.$el = $el;
this
.setData()
.setOptions(opts)
.build();
return this;
},
setData: function() {
this.$el.data(instanceName, this);
return this;
},
setOptions: function(opts) {
this.options = $.extend(true, {}, PluginWordRotate.defaults, opts, {
wrapper: this.$el
});
return this;
},
build: function() {
var $el = this.options.wrapper,
itemsWrapper = $el.find(".word-rotate-items"),
items = itemsWrapper.find("> span"),
firstItem = items.eq(0),
firstItemClone = firstItem.clone(),
itemHeight = firstItem.height(),
currentItem = 1,
currentTop = 0;
itemsWrapper.append(firstItemClone);
$el
.height(itemHeight)
.addClass("active");
setInterval(function() {
currentTop = (currentItem * itemHeight);
itemsWrapper.animate({
top: -(currentTop) + "px"
}, 300, function() {
currentItem++;
if(currentItem > items.length) {
itemsWrapper.css("top", 0);
currentItem = 1;
}
});
}, this.options.delay);
return this;
}
};
// expose to scope
$.extend(theme, {
PluginWordRotate: PluginWordRotate
});
// jquery plugin
$.fn.themePluginWordRotate = function(opts) {
return this.each(function() {
var $this = $(this);
if ($this.data(instanceName)) {
return $this.data(instanceName);
} else {
return new PluginWordRotate($this, opts);
}
});
}
}).apply(this, [ window.theme, jQuery ]);
// Data Tables - Config
(function($) {
'use strict';
// we overwrite initialize of all datatables here
// because we want to use select2, give search input a bootstrap look
// keep in mind if you overwrite this fnInitComplete somewhere,
// you should run the code inside this function to keep functionality.
//
// there's no better way to do this at this time :(
if ( $.isFunction( $.fn[ 'dataTable' ] ) ) {
$.extend(true, $.fn.dataTable.defaults, {
sDom: "<'row datatables-header form-inline'<'col-sm-12 col-md-6'l><'col-sm-12 col-md-6'f>r><'table-responsive't><'row datatables-footer'<'col-sm-12 col-md-6'i><'col-sm-12 col-md-6'p>>",
oLanguage: {
sLengthMenu: '_MENU_ records per page',
sProcessing: '<i class="fa fa-spinner fa-spin"></i> Loading'
},
fnInitComplete: function( settings, json ) {
// select 2
if ( $.isFunction( $.fn[ 'select2' ] ) ) {
$('.dataTables_length select', settings.nTableWrapper).select2({
minimumResultsForSearch: -1
});
}
var options = $( 'table', settings.nTableWrapper ).data( 'plugin-options' ) || {};
// search
var $search = $('.dataTables_filter input', settings.nTableWrapper);
$search
.attr({
placeholder: typeof options.searchPlaceholder !== 'undefined' ? options.searchPlaceholder : 'Search'
})
.addClass('form-control');
if ( $.isFunction( $.fn.placeholder ) ) {
$search.placeholder();
}
}
});
}
}).apply( this, [ jQuery ]);
// Notifications - Config
(function($) {
'use strict';
// use font awesome icons if available
if ( typeof PNotify != 'undefined' ) {
PNotify.prototype.options.styling = "fontawesome";
$.extend(true, PNotify.prototype.options, {
shadow: false,
stack: {
spacing1: 15,
spacing2: 15
}
});
$.extend(PNotify.styling.fontawesome, {
// classes
container: "notification",
notice: "notification-warning",
info: "notification-info",
success: "notification-success",
error: "notification-danger",
// icons
notice_icon: "fa fa-exclamation",
info_icon: "fa fa-info",
success_icon: "fa fa-check",
error_icon: "fa fa-times"
});
}
}).apply(this, [jQuery]);
Anons79 File Manager Version 1.0, Coded By Anons79
Email: [email protected]