Email Development
As Creative Services Developer at Sailthru, I designed and developed dynamic email templates for e-commerce and publishing clients. Using the platform’s proprietary scripting language and feed-driven personalization technology, live templates are coded with variables that populate content from the client’s RSS feed. Subscribers receive unique emails, populated at the moment they open, with the most relevant content for them. So, most images in these samples (aside from logos, etc.) are placeholders.
- All
- Newsletter
- Transactional
setTimeout(function () { jQuery(".thumbnail_98").each(function(){ // console.log(jQuery(this).width() + "x" + jQuery(this).height()) var h = jQuery(this).height(); var w = jQuery(this).width(); jQuery(this).height(h); jQuery(this).width(w); jQuery(this).resize(); }); }, 2500);
jQuery(document).ready(function (jQuery) { jQuery('.filtr-item').addClass('animateonload'); jQuery('#filter_gallery_98').show(); jQuery('.loading-wrapper').hide(); jQuery(".loader_img").hide(); jQuery(".lg_load_more").show(); jQuery(".filtr-container").css("opacity", 1);
// Define Filterizr Default Options const options = { animationDuration: 0.5, callbacks: { onFilteringStart: function() { // Apply sorting shortly after filtering starts setTimeout(function() { }, 50); }, onFilteringEnd: function() { // Apply sorting shortly after filtering ends setTimeout(function() { }, 50); }, onShufflingStart: function() { }, onShufflingEnd: function() { }, onSortingStart: function() { }, onSortingEnd: function() { } }, controlsSelector: '.filtr-controls-98', filter: 'all', filterOutCss: { top: '0px', left: '0px', opacity: 0.001, transform: '' }, filterInCss: { top: '0px', left: '0px', opacity: 1, transform: '' }, layout: 'sameWidth', selector: '.filtr-item', setupControls: false };
// Initialize Filterizr and ensure it is globally accessible window.filterizd = jQuery('.filter_gallery_98').filterizr(options);
jQuery('.filter_gallery_98').imagesLoaded(function() { // Reapply sorting after initial load
// Resize handling jQuery(window).resize(function() { jQuery(".thumbnail_98").each(function() { var h = jQuery(this).height(); var w = jQuery(this).width(); jQuery(this).height(h); jQuery(this).width(w); });
// Reapply sorting after resizing }); });
//bootstrap-lightbox-js // delegate calls to data-toggle="lightbox" document.addEventListener('DOMContentLoaded', (event) => { document.querySelectorAll('.my-lightbox-toggle').forEach((el) => { el.addEventListener('click', (e) => { e.preventDefault();
const options = { keyboard: true, size: 'fullscreen' };
// Assuming Lightbox is a constructor from the included library // Check if the Lightbox class or function exists if (typeof Lightbox !== 'undefined') { const lightbox = new Lightbox(el, options); lightbox.show(); } else { console.error('Lightbox library is not loaded.'); } }); }); }); jQuery('.filtr-control-98 [data-filter]').click(function() { //jQuery('.swiper-98').swipebox('swipebox-destroy'); var targetFilter = jQuery(this).data('filter'); var lighbox_class_name = "pfg-lightbox-" + targetFilter; jQuery('.pfg-lightbox-' + targetFilter ).attr('data-lightbox', lighbox_class_name); // add data filter for parent filters });
// video player jQuery(function(){ jQuery("a.video-box-98").YouTubePopUp( { autoplay: 0 } ); // Disable autoplay });
});







