Created
July 16, 2011 11:48
-
-
Save exoego/1086288 to your computer and use it in GitHub Desktop.
inspired by monday.vim
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
/** | |
* @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