/** widget boxes */ (function($ , undefined) { var widget_box = function(box, options) { this.$box = $(box); var that = this; //this.options = $.extend({}, $.fn.widget_box.defaults, options); this.reload = function() { var $box = this.$box; var $remove_position = false; if($box.css('position') == 'static') { $remove_position = true; $box.addclass('position-relative'); } $box.append('
'); $box.one('reloaded.ace.widget', function() { $box.find('.widget-box-overlay').remove(); if($remove_position) $box.removeclass('position-relative'); }); } this.close = function() { var $box = this.$box; var closespeed = 300; $box.fadeout(closespeed , function(){ $box.trigger('closed.ace.widget'); $box.remove(); } ) } this.toggle = function(type, button) { var $box = this.$box; var $body = $box.find('.widget-body').eq(0); var $icon = null; var event_name = typeof type !== 'undefined' ? type : ($box.hasclass('collapsed') ? 'show' : 'hide'); var event_complete_name = event_name == 'show' ? 'shown' : 'hidden'; if(typeof button === 'undefined') { button = $box.find('> .widget-header a[data-action=collapse]').eq(0); if(button.length == 0) button = null; } if(button) { $icon = button.find(ace.vars['.icon']).eq(0); var $match var $icon_down = null var $icon_up = null if( ($icon_down = $icon.attr('data-icon-show')) ) { $icon_up = $icon.attr('data-icon-hide') } else if( $match = $icon.attr('class').match(/fa\-(.*)\-(up|down)/) ) { $icon_down = 'fa-'+$match[1]+'-down' $icon_up = 'fa-'+$match[1]+'-up' } } var expandspeed = 250; var collapsespeed = 200; if( event_name == 'show' ) { if($icon) $icon.removeclass($icon_down).addclass($icon_up); $body.hide(); $box.removeclass('collapsed'); $body.slidedown(expandspeed, function(){ $box.trigger(event_complete_name+'.ace.widget') }) } else { if($icon) $icon.removeclass($icon_up).addclass($icon_down); $body.slideup(collapsespeed, function(){ $box.addclass('collapsed') $box.trigger(event_complete_name+'.ace.widget') } ); } } this.hide = function() { this.toggle('hide'); } this.show = function() { this.toggle('show'); } this.fullscreen = function() { var $icon = this.$box.find('> .widget-header a[data-action=fullscreen]').find(ace.vars['.icon']).eq(0); var $icon_expand = null var $icon_compress = null if( ($icon_expand = $icon.attr('data-icon1')) ) { $icon_compress = $icon.attr('data-icon2') } else { $icon_expand = 'fa-expand'; $icon_compress = 'fa-compress'; } if(!this.$box.hasclass('fullscreen')) { $icon.removeclass($icon_expand).addclass($icon_compress); this.$box.addclass('fullscreen'); applyscrollbars(this.$box, true); } else { $icon.addclass($icon_expand).removeclass($icon_compress); this.$box.removeclass('fullscreen'); applyscrollbars(this.$box, false); } this.$box.trigger('fullscreened.ace.widget') } } $.fn.widget_box = function (option, value) { var method_call; var $set = this.each(function () { var $this = $(this); var data = $this.data('widget_box'); var options = typeof option === 'object' && option; if (!data) $this.data('widget_box', (data = new widget_box(this, options))); if (typeof option === 'string') method_call = data[option](value); }); return (method_call === undefined) ? $set : method_call; }; $(document).on('click.ace.widget', '.widget-header a[data-action]', function (ev) { ev.preventdefault(); var $this = $(this); var $box = $this.closest('.widget-box'); if( $box.length == 0 || $box.hasclass('ui-sortable-helper') ) return; var $widget_box = $box.data('widget_box'); if (!$widget_box) { $box.data('widget_box', ($widget_box = new widget_box($box.get(0)))); } var $action = $this.data('action'); if($action == 'collapse') { var event_name = $box.hasclass('collapsed') ? 'show' : 'hide'; var event $box.trigger(event = $.event(event_name+'.ace.widget')) if (event.isdefaultprevented()) return $widget_box.toggle(event_name, $this); } else if($action == 'close') { var event $box.trigger(event = $.event('close.ace.widget')) if (event.isdefaultprevented()) return $widget_box.close(); } else if($action == 'reload') { $this.blur(); var event $box.trigger(event = $.event('reload.ace.widget')) if (event.isdefaultprevented()) return $widget_box.reload(); } else if($action == 'fullscreen') { var event $box.trigger(event = $.event('fullscreen.ace.widget')) if (event.isdefaultprevented()) return $widget_box.fullscreen(); } else if($action == 'settings') { $box.trigger('setting.ace.widget') } }); function applyscrollbars($widget, enable) { var $main = $widget.find('.widget-main').eq(0); $(window).off('resize.widget.scroll'); //ie8 has an unresolvable issue!!! re-scrollbaring with unknown values?! var nativescrollbars = ace.vars['old_ie'] || ace.vars['touch']; if(enable) { var ace_scroll = $main.data('ace_scroll'); if( ace_scroll ) { $main.data('save_scroll', {size: ace_scroll['size'], lock: ace_scroll['lock'], lock_anyway: ace_scroll['lock_anyway']}); } var size = $widget.height() - $widget.find('.widget-header').height() - 10;//extra paddings size = parseint(size); $main.css('min-height', size); if( !nativescrollbars ) { if( ace_scroll ) { $main.ace_scroll('update', {'size': size, 'mousewheellock': true, 'lockanyway': true}); } else { $main.ace_scroll({'size': size, 'mousewheellock': true, 'lockanyway': true}); } $main.ace_scroll('enable').ace_scroll('reset'); } else { if( ace_scroll ) $main.ace_scroll('disable'); $main.css('max-height', size).addclass('overflow-scroll'); } $(window) .on('resize.widget.scroll', function() { var size = $widget.height() - $widget.find('.widget-header').height() - 10;//extra paddings size = parseint(size); $main.css('min-height', size); if( !nativescrollbars ) { $main.ace_scroll('update', {'size': size}).ace_scroll('reset'); } else { $main.css('max-height', size).addclass('overflow-scroll'); } }); } else { $main.css('min-height', ''); var saved_scroll = $main.data('save_scroll'); if(saved_scroll) { $main .ace_scroll('update', {'size': saved_scroll['size'], 'mousewheellock': saved_scroll['lock'], 'lockanyway': saved_scroll['lock_anyway']}) .ace_scroll('enable') .ace_scroll('reset'); } if( !nativescrollbars ) { if(!saved_scroll) $main.ace_scroll('disable'); } else { $main.css('max-height', '').removeclass('overflow-scroll'); } } } })(window.jquery);