Skip to content

Instantly share code, notes, and snippets.

@exoego
Created July 16, 2011 11:48
Show Gist options
  • Save exoego/1086288 to your computer and use it in GitHub Desktop.
Save exoego/1086288 to your computer and use it in GitHub Desktop.
inspired by monday.vim
/**
* @author <a href="mailto:[email protected]">MOGAMI Shu</a>
*/
(function(namespace){
/** @private */
var _map = {};
// assign static function to monday
monday["addAll"] = addAll;
monday["addPair"] = addPair;
// export
namespace["monday"] = monday;
/**
* Get a successors/predecessors of a word from circulating words group.
* @param {string} word
* @param {number} [num=0]
* @return {string} successor or predecessor of a word
* @example monday("mon") === "tue"
* @example monday("mon", 2) === "wed"
* @example monday("mon", 7) === "mon"
* @example monday("mon",-1) === "sun"
*/
function monday(word, num) {
if (num == null) num = +1;
if ((num|0) == 0) return word;
if (_map.hasOwnProperty(word)) {
if (num > 0) {
var successor = _map[word];
return monday(successor, num-1);
} else {
for (var pre in _map) if (_map.hasOwnProperty(pre)) {
if (_map[pre] == word) {
return monday(pre, num+1);
}
}
}
}
return ""; // not found
}
/**
* Make circulating word by chaining all parameters.
* @param {...string} var_args
* @example addAll("spring","summer","fall","winter")
*/
function addAll(var_args) {
var args = arguments,
i=0,
iz=args.length;
while(i<iz) {
addPair(args[i], args[++i]);
}
addPair(args[iz-1], args[0]); // connect last to first
}
/**
* Add the word pair (successor/predecessor)
* @param {string} successor
* @param {string} predecessor
*/
function addPair(successor, predecessor) {
_map[successor] = predecessor;
}
// days abbreviation
addAll("Mon", "Tue", "Wed", "Thu", "Fri", "Sat", "Sun");
addAll("mon", "tue", "wed", "thu", "fri", "sat", "sun");
addAll("MON", "TUE", "WED", "THU", "FRI", "SAT", "SUN");
// days full
addAll("Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday", "Sunday");
addAll("monday", "tuesday", "wednesday", "thursday", "friday", "saturday", "sunday");
addAll("MONDAY", "TUESDAY", "WEDNESDAY", "THURSDAY", "FRIDAY", "SATURDAY", "SUNDAY");
// months abbreviation
addAll("Jan","Feb","Mar","Apr","May", "Jun", "Jul","Aug","Sep", "Oct", "Nov", "Dec"); // May -> June
addAll("jan","feb","mar","apr","may", "jun", "jul","aug","sep", "oct", "nov", "dec"); // may -> june
addAll("JAN","FEB","MAR","APR","MAY", "JUN", "JUL","AUG","SEP", "OCT", "NOV", "DEC"); // MAY -> JUNE
// months full
addAll("January","February","March","April","May", "June", "July","August","September", "October", "November", "December");
addAll("january","february","march","april","may", "june", "july","august","september", "october", "november", "december");
addAll("JANUARY","FEBRUARY","MARCH","APRIL","MAY", "JUNE", "JULY","AUGUST","SEPTEMBER", "OCTOBER", "NOVEMBER", "DECEMBER");
// two alternatives
addAll("true","false");
addAll("yes","no");
addAll("on","off");
})(window || this);
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment