]> git.ipfire.org Git - thirdparty/moment.git/commitdiff
allow listing of months and weekdays
authorIsaac Cambron <isaac@isaaccambron.com>
Sun, 15 Sep 2013 21:26:16 +0000 (17:26 -0400)
committerIsaac Cambron <isaac@isaaccambron.com>
Sun, 15 Sep 2013 21:26:16 +0000 (17:26 -0400)
moment.js
test/moment/listers.js [new file with mode: 0644]

index 3a5ebd2fe711efb3cc37fa0fa5d6364a6a74e25e..024cc0bd0075399f8637ebf8a0096a15a49d5974 100644 (file)
--- a/moment.js
+++ b/moment.js
         return units ? unitAliases[units] || units.toLowerCase().replace(/(.)s$/, '$1') : units;
     }
 
+    function listLocal(field, format) {
+        var i, m, str, method, count, setter,
+            months = [];
+
+        if (field.match(/^week/)) {
+            count = 7;
+            setter = 'day';
+        }
+        else if (field.match(/^month/)) {
+            count = 12;
+            setter = 'month';
+        }
+        else {
+            return [];
+        }
+
+        for (i = 0; i < count; i++) {
+            m = moment().utc().set(setter, i);
+            method = moment.fn._lang[field] || Language.prototype[field];
+            str = method.call(moment.fn._lang, m, format || '');
+            months.push(str);
+        }
+
+        return months;
+    }
 
     /************************************
         Languages
         return getLangDefinition(key);
     };
 
+    moment.months = function (format) {
+        return listLocal('months', format);
+    };
+
+    moment.monthsShort = function (format) {
+        return listLocal('monthsShort', format);
+    };
+
+    moment.weekdays = function () {
+        return listLocal('weekdays');
+    };
+
+    moment.weekdaysShort = function () {
+        return listLocal('weekdaysShort');
+    };
+
+    moment.weekdaysMin = function () {
+        return listLocal('weekdaysMin');
+    };
+
     // compare moment object
     moment.isMoment = function (obj) {
         return obj instanceof Moment;
         set : function (units, value) {
             units = normalizeUnits(units);
             this[units.toLowerCase()](value);
+            return this;
         },
 
         // If passed a language key, it will set the language for this
diff --git a/test/moment/listers.js b/test/moment/listers.js
new file mode 100644 (file)
index 0000000..8427abb
--- /dev/null
@@ -0,0 +1,58 @@
+var moment = require("../../moment");
+
+exports.listers = {
+    "default" : function (test) {
+        moment.lang('en');
+
+        test.expect(5);
+        test.deepEqual(moment.months(), ["January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December"]);
+        test.deepEqual(moment.monthsShort(), ["Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"]);
+        test.deepEqual(moment.weekdays(), ["Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"]);
+        test.deepEqual(moment.weekdaysShort(), ["Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat"]);
+        test.deepEqual(moment.weekdaysMin(), ["Su", "Mo", "Tu", "We", "Th", "Fr", "Sa"]);
+        test.done();
+    },
+
+    "localized" : function (test) {
+        var months = "one_two_three_four_five_six_seven_eight_nine_ten_eleven_twelve".split('_'),
+            monthsShort = "on_tw_th_fo_fi_si_se_ei_ni_te_el_tw".split("_"),
+            weekdays = "one_two_three_four_five_six_seven".split("_"),
+            weekdaysShort = "on_tw_th_fo_fi_si_se".split("_"),
+            weekdaysMin = "1_2_3_4_5_6_7".split("_");
+
+        moment.lang('numerologists', {
+            months : months,
+            monthsShort : monthsShort,
+            weekdays : weekdays,
+            weekdaysShort: weekdaysShort,
+            weekdaysMin: weekdaysMin
+        });
+
+        test.expect(5);
+        test.deepEqual(moment.months(), months);
+        test.deepEqual(moment.monthsShort(), monthsShort);
+        test.deepEqual(moment.weekdays(), weekdays);
+        test.deepEqual(moment.weekdaysShort(), weekdaysShort);
+        test.deepEqual(moment.weekdaysMin(), weekdaysMin);
+        test.done();
+    },
+
+    "with functions" : function (test) {
+        var monthsShort = "one_two_three_four_five_six_seven_eight_nine_ten_eleven_twelve".split('_'),
+            monthsShortWeird = "onesy_twosy_threesy_foursy_fivesy_sixsy_sevensy_eightsy_ninesy_tensy_elevensy_twelvesy".split('_');
+
+        moment.lang("difficult", {
+
+            monthsShort: function (m, format) {
+                var arr = format.match(/-MMM-/) ? monthsShortWeird : monthsShort;
+                return arr[m.month()];
+            }
+        });
+
+        test.expect(3);
+        test.deepEqual(moment.monthsShort(), monthsShort);
+        test.deepEqual(moment.monthsShort('MMM'), monthsShort);
+        test.deepEqual(moment.monthsShort('-MMM-'), monthsShortWeird);
+        test.done();
+    }
+};