PHP Classes

File: plugins/news-vertical/jquery.bootstrap.newsbox.js

Recommend this page to a friend!
  Classes of Laudir Bispo   PHP Real Estate Website   plugins/news-vertical/jquery.bootstrap.newsbox.js   Download  
File: plugins/news-vertical/jquery.bootstrap.newsbox.js
Role: Auxiliary data
Content type: text/plain
Description: Auxiliary data
Class: PHP Real Estate Website
Manage the properties of a real estate business
Author: By
Last change:
Date: 3 years ago
Size: 9,565 bytes
 

Contents

Class file image Download
?/* * jQuery Bootstrap News Box v1.0.1 * * Copyright 2014, Dragan Mitrovic * email: gagi270683@gmail.com * Free to use and abuse under the MIT license. * http://www.opensource.org/licenses/mit-license.php */ //Utility if (typeof Object.create !== 'function') { //Douglas Crockford inheritance function Object.create = function (obj) { function F() { }; F.prototype = obj; return new F(); }; } (function ($, w, d, undefined) { var NewsBox = { init: function ( options, elem ) { //cache the references var self = this; self.elem = elem; self.$elem = $( elem ); self.newsTagName = self.$elem.find(":first-child").prop('tagName'); self.newsClassName = self.$elem.find(":first-child").attr('class'); self.timer = null; self.resizeTimer = null; // used with window.resize event self.animationStarted = false; self.isHovered = false; if ( typeof options === 'string' ) { //string was passed if(console) { console.error("String property override is not supported"); } throw ("String property override is not supported"); } else { //object was passed //extend user options overrides self.options = $.extend( {}, $.fn.bootstrapNews.options, options ); self.prepareLayout(); //autostart animation if(self.options.autoplay) { self.animate(); } if ( self.options.navigation ) { self.buildNavigation(); } //enable users to override the methods if( typeof self.options.onToDo === 'function') { self.options.onToDo.apply(self, arguments); } } }, prepareLayout: function() { var self = this; //checking mouse position $(self.elem).find('.'+self.newsClassName).on('mouseenter', function(){ self.onReset(true); }); $(self.elem).find('.'+self.newsClassName).on('mouseout', function(){ self.onReset(false); }); //set news visible / hidden $.map(self.$elem.find(self.newsTagName), function(newsItem, index){ if(index > self.options.newsPerPage - 1) { $(newsItem).hide(); } else { $(newsItem).show(); } }); //prevent user to select more news that it actualy have if( self.$elem.find(self.newsTagName).length < self.options.newsPerPage ) { self.options.newsPerPage = self.$elem.find(self.newsTagName).length; } //get height of the very first self.options.newsPerPage news var height = 0; $.map(self.$elem.find(self.newsTagName), function( newsItem, index ) { if ( index < self.options.newsPerPage ) { height = parseInt(height) + parseInt($(newsItem).height()) + 10; } }); $(self.elem).css({"overflow-y": "hidden", "height": height}); //recalculate news box height for responsive interfaces $( w ).resize(function() { if ( self.resizeTimer !== null ) { clearTimeout( self.resizeTimer ); } self.resizeTimer = setTimeout( function() { self.prepareLayout(); }, 200 ); }); }, findPanelObject: function() { var panel = this.$elem; while ( panel.parent() !== undefined ) { panel = panel.parent(); if ( panel.parent().hasClass('panel') ) { return panel.parent(); } } return undefined; }, buildNavigation: function() { var panel = this.findPanelObject(); if( panel ) { var nav = '<ul class="pagination pull-right" style="margin: 0px;">' + '<li><a href="#" class="prev"><span class="glyphicon glyphicon-chevron-down"></span></a></li>' + '<li><a href="#" class="next"><span class="glyphicon glyphicon-chevron-up"></span></a></li>' + '</ul><div class="clearfix"></div>'; var footer = $(panel).find(".panel-footer")[0]; if( footer ) { $(footer).append(nav); } else { $(panel).append('<div class="panel-footer">' + nav + '</div>'); } var self = this; $(panel).find('.prev').on('click', function(ev){ ev.preventDefault(); self.onPrev(); }); $(panel).find('.next').on('click', function(ev){ ev.preventDefault(); self.onNext(); }); } }, onStop: function() { }, onPause: function() { var self = this; self.isHovered = true; if(this.options.autoplay && self.timer) { clearTimeout(self.timer); } }, onReset: function(status) { var self = this; if(self.timer) { clearTimeout(self.timer); } if(self.options.autoplay) { self.isHovered = status; self.animate(); } }, animate: function() { var self = this; self.timer = setTimeout(function() { if ( !self.options.pauseOnHover ) { self.isHovered = false; } if (! self.isHovered) { if(self.options.direction === 'up') { self.onNext(); } else { self.onPrev(); } } }, self.options.newsTickerInterval); }, onPrev: function() { var self = this; if ( self.animationStarted ) { return false; } self.animationStarted = true; var html = '<' + self.newsTagName + ' style="display:none;" class="' + self.newsClassName + '">' + $(self.$elem).find(self.newsTagName).last().html() + '</' + self.newsTagName + '>'; $(self.$elem).prepend(html); $(self.$elem).find(self.newsTagName).first().slideDown(self.options.animationSpeed, function(){ $(self.$elem).find(self.newsTagName).last().remove(); }); $(self.$elem).find(self.newsTagName +':nth-child(' + parseInt(self.options.newsPerPage + 1) + ')').slideUp(self.options.animationSpeed, function(){ self.animationStarted = false; self.onReset(self.isHovered); }); $(self.elem).find('.'+self.newsClassName).on('mouseenter', function(){ self.onReset(true); }); $(self.elem).find('.'+self.newsClassName).on('mouseout', function(){ self.onReset(false); }); }, onNext: function() { var self = this; if ( self.animationStarted ) { return false; } self.animationStarted = true; var html = '<' + self.newsTagName + ' style="display:none;" class=' + self.newsClassName + '>' + $(self.$elem).find(self.newsTagName).first().html() + '</' + self.newsTagName + '>'; $(self.$elem).append(html); $(self.$elem).find(self.newsTagName).first().slideUp(self.options.animationSpeed, function(){ $(this).remove(); }); $(self.$elem).find(self.newsTagName +':nth-child(' + parseInt(self.options.newsPerPage + 1) + ')').slideDown(self.options.animationSpeed, function(){ self.animationStarted = false; self.onReset(self.isHovered); }); $(self.elem).find('.'+self.newsClassName).on('mouseenter', function(){ self.onReset(true); }); $(self.elem).find('.'+self.newsClassName).on('mouseout', function(){ self.onReset(false); }); } }; $.fn.bootstrapNews = function ( options ) { //enable multiple DOM object selection (class selector) + enable chaining like $(".class").bootstrapNews().chainingMethod() return this.each( function () { var newsBox = Object.create( NewsBox ); newsBox.init( options, this ); //console.log(newsBox); }); }; $.fn.bootstrapNews.options = { newsPerPage: 4, navigation: true, autoplay: true, direction:'up', animationSpeed: 'normal', newsTickerInterval: 4000, //4 secs pauseOnHover: true, onStop: null, onPause: null, onReset: null, onPrev: null, onNext: null, onToDo: null }; })(jQuery, window, document);