All Downloads are FREE. Search and download functionalities are using the official Maven repository.

gwt.material.design.addins.client.livestamp.resources.js.livestamp.js Maven / Gradle / Ivy

There is a newer version: 2.8.3
Show newest version
// Livestamp.js / v1.1.2 / (c) 2012 Matt Bradley / MIT License
(function($, moment) {
    var updateInterval = 1e3,
        paused = false,
        $livestamps = $([]),

        init = function() {
            livestampGlobal.resume();
        },

        prep = function($el, timestamp) {
            var oldData = $el.data('livestampdata');
            if (typeof timestamp == 'number')
                timestamp *= 1e3;

            $el.removeAttr('data-livestamp')
                .removeData('livestamp');

            timestamp = moment(timestamp);
            if (moment.isMoment(timestamp) && !isNaN(+timestamp)) {
                var newData = $.extend({ }, { 'original': $el.contents() }, oldData);
                newData.moment = moment(timestamp);

                $el.data('livestampdata', newData).empty();
                $livestamps.push($el[0]);
            }
        },

        run = function() {
            if (paused) return;
            livestampGlobal.update();
            setTimeout(run, updateInterval);
        },

        livestampGlobal = {
            update: function() {
                $('[data-livestamp]').each(function() {
                    var $this = $(this);
                    prep($this, $this.data('livestamp'));
                });

                var toRemove = [];
                $livestamps.each(function() {
                    var $this = $(this),
                        data = $this.data('livestampdata');

                    if (data === undefined)
                        toRemove.push(this);
                    else if (moment.isMoment(data.moment)) {
                        var from = $this.html(),
                            to = data.moment.fromNow();

                        if (from != to) {
                            var e = $.Event('change.livestamp');
                            $this.trigger(e, [from, to]);
                            if (!e.isDefaultPrevented())
                                $this.html(to);
                        }
                    }
                });

                $livestamps = $livestamps.not(toRemove);
            },

            pause: function() {
                paused = true;
            },

            resume: function() {
                paused = false;
                run();
            },

            interval: function(interval) {
                if (interval === undefined)
                    return updateInterval;
                updateInterval = interval;
            }
        },

        livestampLocal = {
            add: function($el, timestamp) {
                if (typeof timestamp == 'number')
                    timestamp *= 1e3;
                timestamp = moment(timestamp);

                if (moment.isMoment(timestamp) && !isNaN(+timestamp)) {
                    $el.each(function() {
                        prep($(this), timestamp);
                    });
                    livestampGlobal.update();
                }

                return $el;
            },

            destroy: function($el) {
                $livestamps = $livestamps.not($el);
                $el.each(function() {
                    var $this = $(this),
                        data = $this.data('livestampdata');

                    if (data === undefined)
                        return $el;

                    $this
                        .html(data.original ? data.original : '')
                        .removeData('livestampdata');
                });

                return $el;
            },

            isLivestamp: function($el) {
                return $el.data('livestampdata') !== undefined;
            }
        };

    $.livestamp = livestampGlobal;
    $(init);
    $.fn.livestamp = function(method, options) {
        if (!livestampLocal[method]) {
            options = method;
            method = 'add';
        }

        return livestampLocal[method](this, options);
    };
})(jQuery, moment);




© 2015 - 2024 Weber Informatics LLC | Privacy Policy