diff --git a/.gitattributes b/.gitattributes new file mode 100644 index 0000000..412eeda --- /dev/null +++ b/.gitattributes @@ -0,0 +1,22 @@ +# Auto detect text files and perform LF normalization +* text=auto + +# Custom for Visual Studio +*.cs diff=csharp +*.sln merge=union +*.csproj merge=union +*.vbproj merge=union +*.fsproj merge=union +*.dbproj merge=union + +# Standard to msysgit +*.doc diff=astextplain +*.DOC diff=astextplain +*.docx diff=astextplain +*.DOCX diff=astextplain +*.dot diff=astextplain +*.DOT diff=astextplain +*.pdf diff=astextplain +*.PDF diff=astextplain +*.rtf diff=astextplain +*.RTF diff=astextplain diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..b9d6bd9 --- /dev/null +++ b/.gitignore @@ -0,0 +1,215 @@ +################# +## Eclipse +################# + +*.pydevproject +.project +.metadata +bin/ +tmp/ +*.tmp +*.bak +*.swp +*~.nib +local.properties +.classpath +.settings/ +.loadpath + +# External tool builders +.externalToolBuilders/ + +# Locally stored "Eclipse launch configurations" +*.launch + +# CDT-specific +.cproject + +# PDT-specific +.buildpath + + +################# +## Visual Studio +################# + +## Ignore Visual Studio temporary files, build results, and +## files generated by popular Visual Studio add-ons. + +# User-specific files +*.suo +*.user +*.sln.docstates + +# Build results + +[Dd]ebug/ +[Rr]elease/ +x64/ +build/ +[Bb]in/ +[Oo]bj/ + +# MSTest test Results +[Tt]est[Rr]esult*/ +[Bb]uild[Ll]og.* + +*_i.c +*_p.c +*.ilk +*.meta +*.obj +*.pch +*.pdb +*.pgc +*.pgd +*.rsp +*.sbr +*.tlb +*.tli +*.tlh +*.tmp +*.tmp_proj +*.log +*.vspscc +*.vssscc +.builds +*.pidb +*.log +*.scc + +# Visual C++ cache files +ipch/ +*.aps +*.ncb +*.opensdf +*.sdf +*.cachefile + +# Visual Studio profiler +*.psess +*.vsp +*.vspx + +# Guidance Automation Toolkit +*.gpState + +# ReSharper is a .NET coding add-in +_ReSharper*/ +*.[Rr]e[Ss]harper + +# TeamCity is a build add-in +_TeamCity* + +# DotCover is a Code Coverage Tool +*.dotCover + +# NCrunch +*.ncrunch* +.*crunch*.local.xml + +# Installshield output folder +[Ee]xpress/ + +# DocProject is a documentation generator add-in +DocProject/buildhelp/ +DocProject/Help/*.HxT +DocProject/Help/*.HxC +DocProject/Help/*.hhc +DocProject/Help/*.hhk +DocProject/Help/*.hhp +DocProject/Help/Html2 +DocProject/Help/html + +# Click-Once directory +publish/ + +# Publish Web Output +*.Publish.xml +*.pubxml + +# NuGet Packages Directory +## TODO: If you have NuGet Package Restore enabled, uncomment the next line +#packages/ + +# Windows Azure Build Output +csx +*.build.csdef + +# Windows Store app package directory +AppPackages/ + +# Others +sql/ +*.Cache +ClientBin/ +[Ss]tyle[Cc]op.* +~$* +*~ +*.dbmdl +*.[Pp]ublish.xml +*.pfx +*.publishsettings + +# RIA/Silverlight projects +Generated_Code/ + +# Backup & report files from converting an old project file to a newer +# Visual Studio version. Backup files are not needed, because we have git ;-) +_UpgradeReport_Files/ +Backup*/ +UpgradeLog*.XML +UpgradeLog*.htm + +# SQL Server files +App_Data/*.mdf +App_Data/*.ldf + +############# +## Windows detritus +############# + +# Windows image file caches +Thumbs.db +ehthumbs.db + +# Folder config file +Desktop.ini + +# Recycle Bin used on file shares +$RECYCLE.BIN/ + +# Mac crap +.DS_Store + + +############# +## Python +############# + +*.py[co] + +# Packages +*.egg +*.egg-info +dist/ +build/ +eggs/ +parts/ +var/ +sdist/ +develop-eggs/ +.installed.cfg + +# Installer logs +pip-log.txt + +# Unit test / coverage reports +.coverage +.tox + +#Translations +*.mo + +#Mr Developer +.mr.developer.cfg diff --git a/pgwslider.js b/pgwslider.js new file mode 100644 index 0000000..0523047 --- /dev/null +++ b/pgwslider.js @@ -0,0 +1,213 @@ +/** + * PgwSlider - Version 1.0 + * + * Copyright 2014, Jonathan M. Piat + * http://pgwjs.com - http://pagawa.com + * + * Released under the MIT license - http://opensource.org/licenses/MIT + */ +;(function($){ + $.fn.pgwSlider = function(options) { + + var defaults = { + containerHeight : 300, + intervalDuration : 3000, + transitionDuration : 400 + }; + + if (this.length == 0) { + return this; + } else if(this.length > 1) { + this.each(function() { + $(this).pgwSlider(options); + }); + return this; + } + + var pgwSlider = {}; + pgwSlider.plugin = this; + pgwSlider.data = []; + pgwSlider.currentNumber = 0; + pgwSlider.totalNumber = 0; + pgwSlider.eventInterval = null; + + // Init function + var init = function() { + // Merge user options with defaults settings + pgwSlider.settings = $.extend({}, defaults, options); + + // Setup + setup(); + + // Active interval + activeInterval(); + }; + + // Get element data fucntion + var getElementData = function(obj) { + var element = {}; + + var elementLink = obj.find('a').attr('href'); + if ((typeof elementLink != 'undefined') && (elementLink != '')) { + element.link = elementLink; + var elementLinkTarget = obj.find('a').attr('target'); + if ((typeof elementLinkTarget != 'undefined') && (elementLinkTarget != '')) { + element.linkTarget = elementLinkTarget; + } + } + + var elementThumbnail = obj.find('img').attr('src'); + if ((typeof elementThumbnail != 'undefined') && (elementThumbnail != '')) { + element.thumbnail = elementThumbnail; + } + + var elementImage = obj.find('img').attr('data-large-url'); + if ((typeof elementImage != 'undefined') && (elementImage != '')) { + element.image = elementImage; + } + + var elementSpan = obj.find('span').text(); + if ((typeof elementSpan != 'undefined') && (elementSpan != '')) { + element.title = elementSpan; + } else { + var elementTitle = obj.find('img').attr('data-title'); + if ((typeof elementTitle != 'undefined') && (elementTitle != '')) { + element.title = elementTitle; + } + } + + var elementDescription = obj.find('img').attr('data-description'); + if ((typeof elementDescription != 'undefined') && (elementDescription != '')) { + element.description = elementDescription; + } + + return element; + }; + + // Setup function + var setup = function() { + + // Create slider div + pgwSlider.plugin.prepend('
'); + + // Set the height and the width of element links + pgwSlider.totalNumber = pgwSlider.plugin.find('ul li').length; + + var elementHeight = ((pgwSlider.settings.containerHeight - ((pgwSlider.totalNumber - 1) * 6)) / pgwSlider.totalNumber); + pgwSlider.plugin.find('ul li').css('height', elementHeight + 'px'); + + var elementWidth = (100 / pgwSlider.totalNumber); + pgwSlider.plugin.find('ul li').css('width', elementWidth + '%'); + + // Get and save each element data + var elementId = 0; + pgwSlider.plugin.find('ul li').each(function() { + var element = getElementData($(this)); + element.id = elementId; + pgwSlider.data.push(element); + + $(this).addClass('elt_' + element.id); + + if (typeof element.title != 'undefined') { + if ($(this).find('span').length == 1) { + if ($(this).find('span').text() == '') { + $(this).find('span').text(element.title); + } + } else { + $(this).find('img').after('' + element.title + ''); + } + } + + $(this).css('cursor', 'pointer').click(function(event) { + event.preventDefault(); + display(element.id); + }); + + elementId++; + }); + + pgwSlider.plugin.on('mouseenter', function() { + clearInterval(pgwSlider.eventInterval); + pgwSlider.eventInterval = null; + }); + pgwSlider.plugin.on('mouseleave', function() { + activeInterval(); + }); + + // Display first element + display(0); + + // Display slider container + pgwSlider.plugin.removeClass('init'); + pgwSlider.plugin.animate({ + opacity: 1 + }, 400); + }; + + // Display element + var display = function(elementId) { + + pgwSlider.currentNumber = elementId; + var element = pgwSlider.data[elementId]; + var elementContainer = pgwSlider.plugin.find('div'); + + elementContainer.animate({ + opacity : 0, + }, pgwSlider.settings.transitionDuration, function() { + + pgwSlider.plugin.find('ul li').css('opacity', '0.6'); + pgwSlider.plugin.find('ul li.elt_' + elementId).css('opacity', '1'); + + if (typeof element.image != 'undefined') { + elementContainer.html(''); + } else if (typeof element.thumbnail != 'undefined') { + elementContainer.html(''); + } else { + elementContainer.html(''); + } + + var elementText = ''; + if (typeof element.title != 'undefined') { + elementText += '' + element.title + ''; + } + + if (typeof element.description != 'undefined') { + if (elementText != '') elementText += '
'; + elementText += element.description; + } + + if (elementText != '') { + elementContainer.append('' + elementText + ''); + } + + if (typeof element.link != 'undefined') { + var linkTarget = ''; + if (typeof element.linkTarget != 'undefined') { + var linkTarget = 'target="' + element.linkTarget + '"'; + } + elementContainer.html('' + elementContainer.html() + ''); + } + + elementContainer.animate({ + opacity : 1, + }, pgwSlider.settings.transitionDuration); + }); + }; + + // Active interval function + var activeInterval = function() { + pgwSlider.eventInterval = setInterval(function() { + var maxNumber = pgwSlider.totalNumber - 1; + if (pgwSlider.currentNumber + 1 <= maxNumber) { + var nextNumber = pgwSlider.currentNumber + 1; + } else { + var nextNumber = 0; + } + display(nextNumber); + }, pgwSlider.settings.intervalDuration); + }; + + init(); + return this; + } +})(jQuery); \ No newline at end of file diff --git a/pgwslider.min.js b/pgwslider.min.js new file mode 100644 index 0000000..2872c16 --- /dev/null +++ b/pgwslider.min.js @@ -0,0 +1,9 @@ +/** + * PgwSlider - Version 1.0 + * + * Copyright 2014, Jonathan M. Piat + * http://pgwjs.com - http://pagawa.com + * + * Released under the MIT license - http://opensource.org/licenses/MIT + */ +(function(a){a.fn.pgwSlider=function(c){var h={containerHeight:300,intervalDuration:3000,transitionDuration:400};if(this.length==0){return this}else{if(this.length>1){this.each(function(){a(this).pgwSlider(c)});return this}}var e={};e.plugin=this;e.data=[];e.currentNumber=0;e.totalNumber=0;e.eventInterval=null;var i=function(){e.settings=a.extend({},h,c);b();d()};var f=function(k){var l={};var n=k.find("a").attr("href");if((typeof n!="undefined")&&(n!="")){l.link=n;var q=k.find("a").attr("target");if((typeof q!="undefined")&&(q!="")){l.linkTarget=q}}var j=k.find("img").attr("src");if((typeof j!="undefined")&&(j!="")){l.thumbnail=j}var r=k.find("img").attr("data-large-url");if((typeof r!="undefined")&&(r!="")){l.image=r}var o=k.find("span").text();if((typeof o!="undefined")&&(o!="")){l.title=o}else{var m=k.find("img").attr("data-title");if((typeof m!="undefined")&&(m!="")){l.title=m}}var p=k.find("img").attr("data-description");if((typeof p!="undefined")&&(p!="")){l.description=p}return l};var b=function(){e.plugin.prepend('
');e.totalNumber=e.plugin.find("ul li").length;var k=((e.settings.containerHeight-((e.totalNumber-1)*6))/e.totalNumber);e.plugin.find("ul li").css("height",k+"px");var l=(100/e.totalNumber);e.plugin.find("ul li").css("width",l+"%");var j=0;e.plugin.find("ul li").each(function(){var m=f(a(this));m.id=j;e.data.push(m);a(this).addClass("elt_"+m.id);if(typeof m.title!="undefined"){if(a(this).find("span").length==1){if(a(this).find("span").text()==""){a(this).find("span").text(m.title)}}else{a(this).find("img").after(""+m.title+"")}}a(this).css("cursor","pointer").click(function(n){n.preventDefault();g(m.id)});j++});e.plugin.on("mouseenter",function(){clearInterval(e.eventInterval);e.eventInterval=null});e.plugin.on("mouseleave",function(){d()});g(0);e.plugin.removeClass("init");e.plugin.animate({opacity:1},400)};var g=function(j){e.currentNumber=j;var l=e.data[j];var k=e.plugin.find("div");k.animate({opacity:0},e.settings.transitionDuration,function(){e.plugin.find("ul li").css("opacity","0.6");e.plugin.find("ul li.elt_"+j).css("opacity","1");if(typeof l.image!="undefined"){k.html('')}else{if(typeof l.thumbnail!="undefined"){k.html('')}else{k.html("")}}var m="";if(typeof l.title!="undefined"){m+=""+l.title+""}if(typeof l.description!="undefined"){if(m!=""){m+="
"}m+=l.description}if(m!=""){k.append(""+m+"")}if(typeof l.link!="undefined"){var n="";if(typeof l.linkTarget!="undefined"){var n='target="'+l.linkTarget+'"'}k.html('"+k.html()+"")}k.animate({opacity:1},e.settings.transitionDuration)})};var d=function(){e.eventInterval=setInterval(function(){var k=e.totalNumber-1;if(e.currentNumber+1<=k){var j=e.currentNumber+1}else{var j=0}g(j)},e.settings.intervalDuration)};i();return this}})(jQuery); \ No newline at end of file