aboutsummaryrefslogtreecommitdiffstats
path: root/zurb-F5-basic/static/js/foundation/foundation.reveal.js
diff options
context:
space:
mode:
authorShuaib Hanief <shuaib@hanief.net>2013-12-31 22:54:56 -0500
committerShuaib Hanief <shuaib@hanief.net>2013-12-31 22:54:56 -0500
commit49f5657d936e352112fdcfa61473f5f38cda1c14 (patch)
tree75f480ed27af49c8dd1149344b967b5676d2460e /zurb-F5-basic/static/js/foundation/foundation.reveal.js
parenteada362fff3da25eae0ca9283ac5fcb2f65e2e6a (diff)
downloadpelican-themes-49f5657d936e352112fdcfa61473f5f38cda1c14.tar.gz
add a theme based on the new Zurb Foundation 5 framework
Diffstat (limited to 'zurb-F5-basic/static/js/foundation/foundation.reveal.js')
-rw-r--r--zurb-F5-basic/static/js/foundation/foundation.reveal.js347
1 files changed, 347 insertions, 0 deletions
diff --git a/zurb-F5-basic/static/js/foundation/foundation.reveal.js b/zurb-F5-basic/static/js/foundation/foundation.reveal.js
new file mode 100644
index 0000000..a7521ec
--- /dev/null
+++ b/zurb-F5-basic/static/js/foundation/foundation.reveal.js
@@ -0,0 +1,347 @@
+;(function ($, window, document, undefined) {
+ 'use strict';
+
+ Foundation.libs.reveal = {
+ name : 'reveal',
+
+ version : '5.0.0',
+
+ locked : false,
+
+ settings : {
+ animation: 'fadeAndPop',
+ animation_speed: 250,
+ close_on_background_click: true,
+ close_on_esc: true,
+ dismiss_modal_class: 'close-reveal-modal',
+ bg_class: 'reveal-modal-bg',
+ open: function(){},
+ opened: function(){},
+ close: function(){},
+ closed: function(){},
+ bg : $('.reveal-modal-bg'),
+ css : {
+ open : {
+ 'opacity': 0,
+ 'visibility': 'visible',
+ 'display' : 'block'
+ },
+ close : {
+ 'opacity': 1,
+ 'visibility': 'hidden',
+ 'display': 'none'
+ }
+ }
+ },
+
+ init : function (scope, method, options) {
+ Foundation.inherit(this, 'delay');
+
+ this.bindings(method, options);
+ },
+
+ events : function (scope) {
+ var self = this;
+
+ $('[data-reveal-id]', this.scope)
+ .off('.reveal')
+ .on('click.fndtn.reveal', function (e) {
+ e.preventDefault();
+
+ if (!self.locked) {
+ var element = $(this),
+ ajax = element.data('reveal-ajax');
+
+ self.locked = true;
+
+ if (typeof ajax === 'undefined') {
+ self.open.call(self, element);
+ } else {
+ var url = ajax === true ? element.attr('href') : ajax;
+
+ self.open.call(self, element, {url: url});
+ }
+ }
+ });
+
+ $(this.scope)
+ .off('.reveal')
+ .on('click.fndtn.reveal', this.close_targets(), function (e) {
+
+ e.preventDefault();
+
+ if (!self.locked) {
+ var settings = $('[data-reveal].open').data('reveal-init'),
+ bg_clicked = $(e.target)[0] === $('.' + settings.bg_class)[0];
+
+ if (bg_clicked && !settings.close_on_background_click) {
+ return;
+ }
+
+ self.locked = true;
+ self.close.call(self, bg_clicked ? $('[data-reveal].open') : $(this).closest('[data-reveal]'));
+ }
+ });
+
+ if($('[data-reveal]', this.scope).length > 0) {
+ $(this.scope)
+ // .off('.reveal')
+ .on('open.fndtn.reveal', this.settings.open)
+ .on('opened.fndtn.reveal', this.settings.opened)
+ .on('opened.fndtn.reveal', this.open_video)
+ .on('close.fndtn.reveal', this.settings.close)
+ .on('closed.fndtn.reveal', this.settings.closed)
+ .on('closed.fndtn.reveal', this.close_video);
+ } else {
+ $(this.scope)
+ // .off('.reveal')
+ .on('open.fndtn.reveal', '[data-reveal]', this.settings.open)
+ .on('opened.fndtn.reveal', '[data-reveal]', this.settings.opened)
+ .on('opened.fndtn.reveal', '[data-reveal]', this.open_video)
+ .on('close.fndtn.reveal', '[data-reveal]', this.settings.close)
+ .on('closed.fndtn.reveal', '[data-reveal]', this.settings.closed)
+ .on('closed.fndtn.reveal', '[data-reveal]', this.close_video);
+ }
+
+ $('body').on('keyup.fndtn.reveal', function ( event ) {
+ var open_modal = $('[data-reveal].open'),
+ settings = open_modal.data('reveal-init');
+ if ( event.which === 27 && settings.close_on_esc) { // 27 is the keycode for the Escape key
+ open_modal.foundation('reveal', 'close');
+ }
+ });
+
+ return true;
+ },
+
+ open : function (target, ajax_settings) {
+ if (target) {
+ if (typeof target.selector !== 'undefined') {
+ var modal = $('#' + target.data('reveal-id'));
+ } else {
+ var modal = $(this.scope);
+
+ ajax_settings = target;
+ }
+ } else {
+ var modal = $(this.scope);
+ }
+
+ if (!modal.hasClass('open')) {
+ var open_modal = $('[data-reveal].open');
+
+ if (typeof modal.data('css-top') === 'undefined') {
+ modal.data('css-top', parseInt(modal.css('top'), 10))
+ .data('offset', this.cache_offset(modal));
+ }
+
+ modal.trigger('open');
+
+ if (open_modal.length < 1) {
+ this.toggle_bg();
+ }
+
+ if (typeof ajax_settings === 'undefined' || !ajax_settings.url) {
+ this.hide(open_modal, this.settings.css.close);
+ this.show(modal, this.settings.css.open);
+ } else {
+ var self = this,
+ old_success = typeof ajax_settings.success !== 'undefined' ? ajax_settings.success : null;
+
+ $.extend(ajax_settings, {
+ success: function (data, textStatus, jqXHR) {
+ if ( $.isFunction(old_success) ) {
+ old_success(data, textStatus, jqXHR);
+ }
+
+ modal.html(data);
+ $(modal).foundation('section', 'reflow');
+
+ self.hide(open_modal, self.settings.css.close);
+ self.show(modal, self.settings.css.open);
+ }
+ });
+
+ $.ajax(ajax_settings);
+ }
+ }
+ },
+
+ close : function (modal) {
+
+ var modal = modal && modal.length ? modal : $(this.scope),
+ open_modals = $('[data-reveal].open');
+
+ if (open_modals.length > 0) {
+ this.locked = true;
+ modal.trigger('close');
+ this.toggle_bg();
+ this.hide(open_modals, this.settings.css.close);
+ }
+ },
+
+ close_targets : function () {
+ var base = '.' + this.settings.dismiss_modal_class;
+
+ if (this.settings.close_on_background_click) {
+ return base + ', .' + this.settings.bg_class;
+ }
+
+ return base;
+ },
+
+ toggle_bg : function () {
+ if ($('.' + this.settings.bg_class).length === 0) {
+ this.settings.bg = $('<div />', {'class': this.settings.bg_class})
+ .appendTo('body');
+ }
+
+ if (this.settings.bg.filter(':visible').length > 0) {
+ this.hide(this.settings.bg);
+ } else {
+ this.show(this.settings.bg);
+ }
+ },
+
+ show : function (el, css) {
+ // is modal
+ if (css) {
+ if (el.parent('body').length === 0) {
+ var placeholder = el.wrap('<div style="display: none;" />').parent();
+ el.on('closed.fndtn.reveal.wrapped', function() {
+ el.detach().appendTo(placeholder);
+ el.unwrap().unbind('closed.fndtn.reveal.wrapped');
+ });
+
+ el.detach().appendTo('body');
+ }
+
+ if (/pop/i.test(this.settings.animation)) {
+ css.top = $(window).scrollTop() - el.data('offset') + 'px';
+ var end_css = {
+ top: $(window).scrollTop() + el.data('css-top') + 'px',
+ opacity: 1
+ };
+
+ return this.delay(function () {
+ return el
+ .css(css)
+ .animate(end_css, this.settings.animation_speed, 'linear', function () {
+ this.locked = false;
+ el.trigger('opened');
+ }.bind(this))
+ .addClass('open');
+ }.bind(this), this.settings.animation_speed / 2);
+ }
+
+ if (/fade/i.test(this.settings.animation)) {
+ var end_css = {opacity: 1};
+
+ return this.delay(function () {
+ return el
+ .css(css)
+ .animate(end_css, this.settings.animation_speed, 'linear', function () {
+ this.locked = false;
+ el.trigger('opened');
+ }.bind(this))
+ .addClass('open');
+ }.bind(this), this.settings.animation_speed / 2);
+ }
+
+ return el.css(css).show().css({opacity: 1}).addClass('open').trigger('opened');
+ }
+
+ // should we animate the background?
+ if (/fade/i.test(this.settings.animation)) {
+ return el.fadeIn(this.settings.animation_speed / 2);
+ }
+
+ return el.show();
+ },
+
+ hide : function (el, css) {
+ // is modal
+ if (css) {
+ if (/pop/i.test(this.settings.animation)) {
+ var end_css = {
+ top: - $(window).scrollTop() - el.data('offset') + 'px',
+ opacity: 0
+ };
+
+ return this.delay(function () {
+ return el
+ .animate(end_css, this.settings.animation_speed, 'linear', function () {
+ this.locked = false;
+ el.css(css).trigger('closed');
+ }.bind(this))
+ .removeClass('open');
+ }.bind(this), this.settings.animation_speed / 2);
+ }
+
+ if (/fade/i.test(this.settings.animation)) {
+ var end_css = {opacity: 0};
+
+ return this.delay(function () {
+ return el
+ .animate(end_css, this.settings.animation_speed, 'linear', function () {
+ this.locked = false;
+ el.css(css).trigger('closed');
+ }.bind(this))
+ .removeClass('open');
+ }.bind(this), this.settings.animation_speed / 2);
+ }
+
+ return el.hide().css(css).removeClass('open').trigger('closed');
+ }
+
+ // should we animate the background?
+ if (/fade/i.test(this.settings.animation)) {
+ return el.fadeOut(this.settings.animation_speed / 2);
+ }
+
+ return el.hide();
+ },
+
+ close_video : function (e) {
+ var video = $(this).find('.flex-video'),
+ iframe = video.find('iframe');
+
+ if (iframe.length > 0) {
+ iframe.attr('data-src', iframe[0].src);
+ iframe.attr('src', 'about:blank');
+ video.hide();
+ }
+ },
+
+ open_video : function (e) {
+ var video = $(this).find('.flex-video'),
+ iframe = video.find('iframe');
+
+ if (iframe.length > 0) {
+ var data_src = iframe.attr('data-src');
+ if (typeof data_src === 'string') {
+ iframe[0].src = iframe.attr('data-src');
+ } else {
+ var src = iframe[0].src;
+ iframe[0].src = undefined;
+ iframe[0].src = src;
+ }
+ video.show();
+ }
+ },
+
+ cache_offset : function (modal) {
+ var offset = modal.show().height() + parseInt(modal.css('top'), 10);
+
+ modal.hide();
+
+ return offset;
+ },
+
+ off : function () {
+ $(this.scope).off('.fndtn.reveal');
+ },
+
+ reflow : function () {}
+ };
+}(jQuery, this, this.document));