Files @ a00195c8f6d0
Branch filter:

Location: website/www/conservancy/static/admin/js/timeparse.js

a00195c8f6d0 2.4 KiB application/javascript Show Annotation Show as Raw Download as Raw
brett
static.views: Deduplicate code.

The primary goal here is to get templates rendered more like our "regular"
templates, by using more of the standard tools to do so rather than roll our
own.

* Use TemplateResponse. This requires less boilerplate and ensures the
rendering runs through our local context processors.
* Use the existing definition of fundgoal_lookup.
var timeParsePatterns = [
    // 9
    {   re: /^\d{1,2}$/i,
        handler: function(bits) {
            if (bits[0].length == 1) {
                return '0' + bits[0] + ':00';
            } else {
                return bits[0] + ':00';
            }
        }
    },
    // 13:00
    {   re: /^\d{2}[:.]\d{2}$/i,
        handler: function(bits) {
            return bits[0].replace('.', ':');
        }
    },
    // 9:00
    {   re: /^\d[:.]\d{2}$/i,
        handler: function(bits) {
            return '0' + bits[0].replace('.', ':');
        }
    },
    // 3 am / 3 a.m. / 3am
    {   re: /^(\d+)\s*([ap])(?:.?m.?)?$/i,
        handler: function(bits) {
            var hour = parseInt(bits[1]);
            if (hour == 12) {
                hour = 0;
            }
            if (bits[2].toLowerCase() == 'p') {
                if (hour == 12) {
                    hour = 0;
                }
                return (hour + 12) + ':00';
            } else {
                if (hour < 10) {
                    return '0' + hour + ':00';
                } else {
                    return hour + ':00';
                }
            }
        }
    },
    // 3.30 am / 3:15 a.m. / 3.00am
    {   re: /^(\d+)[.:](\d{2})\s*([ap]).?m.?$/i,
        handler: function(bits) {
            var hour = parseInt(bits[1]);
            var mins = parseInt(bits[2]);
            if (mins < 10) {
                mins = '0' + mins;
            }
            if (hour == 12) {
                hour = 0;
            }
            if (bits[3].toLowerCase() == 'p') {
                if (hour == 12) {
                    hour = 0;
                }
                return (hour + 12) + ':' + mins;
            } else {
                if (hour < 10) {
                    return '0' + hour + ':' + mins;
                } else {
                    return hour + ':' + mins;
                }
            }
        }
    },
    // noon
    {   re: /^no/i,
        handler: function(bits) {
            return '12:00';
        }
    },
    // midnight
    {   re: /^mid/i,
        handler: function(bits) {
            return '00:00';
        }
    }
];

function parseTimeString(s) {
    for (var i = 0; i < timeParsePatterns.length; i++) {
        var re = timeParsePatterns[i].re;
        var handler = timeParsePatterns[i].handler;
        var bits = re.exec(s);
        if (bits) {
            return handler(bits);
        }
    }
    return s;
}