From eb789dbf757e760e8348e0aa75343eb53996b7e3 Mon Sep 17 00:00:00 2001 From: Tom Hughes Date: Sun, 4 Mar 2012 16:22:08 +0000 Subject: [PATCH] Show an animation while a preview is loading --- app/assets/images/loading.gif | Bin 0 -> 26498 bytes app/assets/javascripts/site.js | 10 +- app/assets/stylesheets/common.css.scss | 6 ++ vendor/assets/jquery/jquery.timers.js | 138 +++++++++++++++++++++++++ 4 files changed, 153 insertions(+), 1 deletion(-) create mode 100644 app/assets/images/loading.gif create mode 100644 vendor/assets/jquery/jquery.timers.js diff --git a/app/assets/images/loading.gif b/app/assets/images/loading.gif new file mode 100644 index 0000000000000000000000000000000000000000..c21d3ede83ac9b2d3a08249a65f37ce87a0211d9 GIT binary patch literal 26498 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 literal 0 HcmV?d00001 diff --git a/app/assets/javascripts/site.js b/app/assets/javascripts/site.js index 5d727a069..3d4130580 100644 --- a/app/assets/javascripts/site.js +++ b/app/assets/javascripts/site.js @@ -1,6 +1,7 @@ //= require jquery //= require jquery_ujs //= require jquery.autogrowtextarea +//= require jquery.timers /* * Called as the user scrolls/zooms around to aniplate hrefs of the @@ -216,7 +217,14 @@ function previewRichtext(event) { var minHeight = editor.outerHeight() - preview.outerHeight() + preview.innerHeight(); editor.hide(); - preview.load(editor.attr("data-preview-url"), { text: editor.val() }); + preview.html(""); + preview.oneTime(500, "loading", function () { + preview.addClass("loading"); + }); + preview.load(editor.attr("data-preview-url"), { text: editor.val() }, function () { + preview.stopTime("loading"); + preview.removeClass("loading"); + }); preview.width(width); preview.css("min-height", minHeight + "px"); preview.show(); diff --git a/app/assets/stylesheets/common.css.scss b/app/assets/stylesheets/common.css.scss index 0c2873acc..72ef6b049 100644 --- a/app/assets/stylesheets/common.css.scss +++ b/app/assets/stylesheets/common.css.scss @@ -1058,6 +1058,12 @@ abbr.geo { background-color: #eee; white-space: normal; + &.loading { + background-image: image-url("loading.gif"); + background-repeat: no-repeat; + background-position: center; + } + > :first-child { margin-top: 0px; } diff --git a/vendor/assets/jquery/jquery.timers.js b/vendor/assets/jquery/jquery.timers.js new file mode 100644 index 000000000..ce66eaf47 --- /dev/null +++ b/vendor/assets/jquery/jquery.timers.js @@ -0,0 +1,138 @@ +/** + * jQuery.timers - Timer abstractions for jQuery + * Written by Blair Mitchelmore (blair DOT mitchelmore AT gmail DOT com) + * Licensed under the WTFPL (http://sam.zoy.org/wtfpl/). + * Date: 2009/10/16 + * + * @author Blair Mitchelmore + * @version 1.2 + * + **/ + +jQuery.fn.extend({ + everyTime: function(interval, label, fn, times) { + return this.each(function() { + jQuery.timer.add(this, interval, label, fn, times); + }); + }, + oneTime: function(interval, label, fn) { + return this.each(function() { + jQuery.timer.add(this, interval, label, fn, 1); + }); + }, + stopTime: function(label, fn) { + return this.each(function() { + jQuery.timer.remove(this, label, fn); + }); + } +}); + +jQuery.extend({ + timer: { + global: [], + guid: 1, + dataKey: "jQuery.timer", + regex: /^([0-9]+(?:\.[0-9]*)?)\s*(.*s)?$/, + powers: { + // Yeah this is major overkill... + 'ms': 1, + 'cs': 10, + 'ds': 100, + 's': 1000, + 'das': 10000, + 'hs': 100000, + 'ks': 1000000 + }, + timeParse: function(value) { + if (value == undefined || value == null) + return null; + var result = this.regex.exec(jQuery.trim(value.toString())); + if (result[2]) { + var num = parseFloat(result[1]); + var mult = this.powers[result[2]] || 1; + return num * mult; + } else { + return value; + } + }, + add: function(element, interval, label, fn, times) { + var counter = 0; + + if (jQuery.isFunction(label)) { + if (!times) + times = fn; + fn = label; + label = interval; + } + + interval = jQuery.timer.timeParse(interval); + + if (typeof interval != 'number' || isNaN(interval) || interval < 0) + return; + + if (typeof times != 'number' || isNaN(times) || times < 0) + times = 0; + + times = times || 0; + + var timers = jQuery.data(element, this.dataKey) || jQuery.data(element, this.dataKey, {}); + + if (!timers[label]) + timers[label] = {}; + + fn.timerID = fn.timerID || this.guid++; + + var handler = function() { + if ((++counter > times && times !== 0) || fn.call(element, counter) === false) + jQuery.timer.remove(element, label, fn); + }; + + handler.timerID = fn.timerID; + + if (!timers[label][fn.timerID]) + timers[label][fn.timerID] = window.setInterval(handler,interval); + + this.global.push( element ); + + }, + remove: function(element, label, fn) { + var timers = jQuery.data(element, this.dataKey), ret; + + if ( timers ) { + + if (!label) { + for ( label in timers ) + this.remove(element, label, fn); + } else if ( timers[label] ) { + if ( fn ) { + if ( fn.timerID ) { + window.clearInterval(timers[label][fn.timerID]); + delete timers[label][fn.timerID]; + } + } else { + for ( var fn in timers[label] ) { + window.clearInterval(timers[label][fn]); + delete timers[label][fn]; + } + } + + for ( ret in timers[label] ) break; + if ( !ret ) { + ret = null; + delete timers[label]; + } + } + + for ( ret in timers ) break; + if ( !ret ) + jQuery.removeData(element, this.dataKey); + } + } + } +}); + +jQuery(window).bind("unload", function() { + jQuery.each(jQuery.timer.global, function(index, item) { + jQuery.timer.remove(item); + }); +}); \ No newline at end of file -- 2.43.2