Skip to main content
Code Review

Return to Question

edited tags
Link
Quill
  • 12k
  • 5
  • 41
  • 93
Tweeted twitter.com/#!/StackCodeReview/status/505127824735608832
added 1337 characters in body
Source Link
Jamal
  • 35.2k
  • 13
  • 134
  • 238

So essentially forFor my first use of javascript I've made an app that takes an input verb from html in japaneseJapanese and outputs it in to many conjugated (manipulated) forms.

Right now I'm at a loss on how to rewrite it in modular JS. I have a couple libraries defined in the htmlHTML (bootstrap, jQuery, and a Japanese IME). Although I'm using self-invoking functions and have a general idea of what modules are, I have no idea what a practical way of splitting up the code in to modules would be. Any help would be appreciated! (sorry for the length, reading all of the functions isn't necessary)

$(document).ready(function () {
//hiragana table
var hiragana = {
 a: ["あ", "か", "さ", "た", "な", "は", "ま", "や", "ら", "わ", "が", "ざ", "だ", "ば", "ぱ"],
 i: ["い", "き", "し", "ち", "に", "ひ", "み", " ", "り", " ", "ぎ", "じ", "ぢ", "び", "ぴ"],
 u: ["う", "く", "す", "つ", "ぬ", "ふ", "む", "ゆ", "る", " ", "ぐ", "ず", "づ", "ぶ", "ぷ"],
 e: ["え", "け", "せ", "て", "ね", "へ", "め", " ", "れ", " ", "げ", "ぜ", "で", "べ", "ぺ"],
 o: ["お", "こ", "そ", "と", "の", "ほ", "も", "よ", "ろ", "を", "ご", "ぞ", "ど", "ぼ", "ぽ"],
 teOne: ["み", "に", "び"],
 teTwo: ["い", "ち", "り"],
 change: function (input, initVowel, desiredVowel) {
 var x = hiragana[initVowel].indexOf(input);
 return hiragana[desiredVowel][x];
  }
};
var groupOneExceptions = ["はいる", "はしる", "かえる", "かぎる", "きる", "しゃべる", "しる", "いる"];
var groupThree = ["くる", "する"];
var existence = [["いる", "ある"], ["です"]];
//check if inreturn arrayhiragana[desiredVowel][x];
function isInArray(array, search) {
 return array.indexOf(search) >= 0;
}
//add input to the page
function printPage(id, value) {
 $("#" + id).replaceWith("<div id = " + id + ">" + value + "</span>");
};
//bind input to wanakana onvar pagegroupOneExceptions load= ["はいる", "はしる", "かえる", "かぎる", "きる", "しゃべる", "しる", "いる"];
var inputgroupThree = document.getElementById("input");["くる", "する"];
wanakana.bind(input); var existence = [["いる", "ある"], ["です"]];
//check radio buttons and enact changes on enter//check form
$("input:radio[name=input-method]").change(functionif ()in {array
 iffunction ($(this).valisInArray() ===array, "Hiragana"search) {
 //wanakana support
 return wanakanaarray.bindindexOf(inputsearch);
  $("#input").attr("placeholder",>= "たべる");0;
 }
 if//add ($(this).val()input ===to "Romaji")the {page
 function wanakana.unbindprintPage(inputid, value); {
 $("#input""#" + id).attrreplaceWith("placeholder","<div "taberu"id = " + id + ">" + value + "</span>");
 }
});

//Click the button to get the form value.
$("#submit").click(function () {
  var verb = {
  //put an if check here for masu? LATER
 group: "",
 u: $("#input").val(),
 end: "",
 endTwo: "",
 withoutEnd: "",
 i: "",
 te: "",
 preMasu: "",
 masu: "",
 ta: "",
 taEnd: "",
 nakatta: "",
 mashita: "",
 masendeshita: "",
 teEnd: "",
 nai: "",
 naiEnd: "",
 masen: "",
 ou: "",
 ouEnd: "",
 naidarou: "",
 eba: "",
 ebaEnd: "",
 nakereba: "",
 eru: "",
 eruEnd: "",
 erunai: "",
 seru: "",
 serunai: "",
 reru: "",
 bind rerunai:input ""
to wanakana on page };
load
 var initinput = (function document.getElementById("input") {;
 printPagewanakana.bind("callout", ""input);
 //clear table
 //check radio buttons and forenact (propchanges inon verb)enter {form
 $("input:radio[name=input-method]").change(function () {
  if (typeof verb[prop]$(this).val() === "string""Hiragana") {
 //wanakana support
 printPage(prop, "" wanakana.bind(input);
 }$("#input").attr("placeholder", "たべる");
 }
 //initif verb($(this).uval() for=== hiragana"Romaji") processing{
 if (wanakana.isKanaunbind(verb.u) === falseinput) {;
 verb.u = wanakana.toHiragana$(verb"#input").uattr("placeholder", "taberu");
 }
 });

 //do some initial slicing
 Click the button to get verb.endthe =form verb.uvalue.slice(-1);
 verb.endTwo = verb.u.slice$(-2, -1"#submit");
 verb.withoutEnd = verb.u.sliceclick(0,function -1(); {
 var verb = {
 //put an if (isInArraycheck here for masu? LATER
 group: "",
 u: $(hiragana"#input").uval(), verb.end): ==="",
 false) { endTwo: "",
 printPage("callout"withoutEnd: "", "<div class=\"bs-callout bs-callout-danger\"> It doesn't look like " + verb.u + "i: is"",
 a valid Japanese verb in plain form. Try something that ends withte: an"",
 \"u\".</div>"); preMasu: "",
 masu: "",
 ta: "",
 taEnd: "",
 nakatta: "",
 mashita: "",
 masendeshita: "",
 teEnd: "",
 nai: "",
 naiEnd: "",
 masen: "",
 ou: "",
 ouEnd: "",
 naidarou: "",
 eba: "",
 ebaEnd: "",
 nakereba: "",
 eru: "",
 eruEnd: "",
 erunai: "",
 seru: "",
 serunai: "",
 reru: "",
 rerunai: ""
 };
 if (isInArray(existence[0], verb.u)) {
 printPage("callout", "<div class=\"bs-callout bs-callout-info\"> If you were referring to the existence construct " + verb.uvar +init "= (to be), refer here.</div>");
 } else iffunction (isInArray(existence[1], verb.u)) {
 printPage("callout", "<div class=\"bs-callout bs-callout-info\"> If you were"");
 referring to the existence construct " + verb.u + " (is), refer here.</div>");
 /clear }table
 } for (prop in verb) {
 if (typeof verb[prop] === "string") {
 printPage(prop, "");
 }
 }
 //init verb.u for hiragana processing
 if (isInArraywanakana.isKana(hiraganaverb.u,) === false) {
 verb.end)u = wanakana.toHiragana(verb.u);
 { }
 //do some initial slicing
 verb.getGroupend = verb.u.slice(function-1);
  verb.endTwo = verb.u.slice(-2, -1);
 { verb.withoutEnd = verb.u.slice(0, -1);
 if (isInArray(groupThree, verb.u)) {
 verb.group = "3";
 } else if (verb.end === "る" && (isInArray(hiragana.iu, verb.endTwoend) || isInArray(hiragana.e,=== verb.endTwo))false) {
 verb.group = "2";
 printPage("callout", "<div class=\"bs-callout bs-callout-danger\"> It doesn't }look elselike if" (isInArray(hiragana.u,+ verb.end))u {
+ " is a valid Japanese verb in plain form. Try something that ends with an verb\"u\".group = "1";</div>");
 }
 if (isInArray(groupOneExceptionsexistence[0], verb.u)) {
 printPage("callout", "<div class=\"bs-callout bs-callout-info\"> If you were referring to the existence construct " + verb.groupu =+ "1";" (to be), refer here.</div>");
 } else if (isInArray(existence[1], verb.u)) {
 printPage("callout", "<div class=\"bs-callout bs-callout-info\"> If you were referring to the existence construct " + verb.u + " (is), refer here.</div>");
 }
 })();
 verb.getI = (function () {
 if (verb.group === "1") {
 verb.preMasu = hiragana.changeisInArray(verbhiragana.end, "u"u, "i");
  verb.i = verb.u.slice(0, -1end) +) verb.preMasu;{
 }
 if (verb.group === "2") {
 verb.igetGroup = verb.u.slice(0,function -1();
  }{
 if (isInArray(groupThree, verb.u)) {
 verb.group = "3";
  } else if (verb.end === "3""る" && (isInArray(hiragana.i, verb.endTwo) || isInArray(hiragana.e, verb.endTwo))) {
 verb.igroup = "2";
  } else if (isInArray(hiragana.change(u, verb.withoutEnd,end)) "u",{
 "i"); verb.group = "1";
 }
 if (isInArray(groupOneExceptions, verb.u)) {
 verb.group = "1";
 }
 })();
 verb.getTegetI = (function () {
 if (verb.group === "1") {
 verb.preMasu = hiragana.change(verb.end, "u", "i");
 verb.i = verb.u.slice(0, -1) + verb.preMasu;
 if (verb.group === "3" || verb.group === "2") {
 verb.te = verb.i + "て";
 }
 if (verb.group === "1") {
 if (isInArray(hiragana.teOne, verb.preMasu)) {
 verb.teEnd = "んで";
 } else if (isInArray(hiragana.teTwo, verb.preMasu)) {
 verb.teEnd = "って";
 } else if (verb.preMasu === "き") {
 verb.teEnd = "いて";
 } else if (verb.preMasu === "ぎ") {
 verb.teEnd = "いで";
 } else if (verb.preMasu === "し") {
 verb.teEnd = "して";
 }
 if (verb.group === "2") {
 verb.i = verb.u.slice(0, -1);
 }

 //exception
 if (verb.ugroup === "いく""3") {
 verb.teEndi = "って";hiragana.change(verb.withoutEnd, "u", "i");
 }
 verb.te = verb.withoutEnd + verb.teEnd;
 })();
 }) verb.getTe = (function (); {
 verb.getNai = (function () {
  if (verb.group === "3") {
  if|| (verb.ugroup === "する""2") {
 verb.naite = "しない";verb.i + "て";
 }
 if (verb.group === "1") {
 if (isInArray(hiragana.teOne, verb.preMasu)) {
 verb.teEnd = "んで";
 } else if (isInArray(hiragana.teTwo, verb.preMasu)) {
 verb.teEnd = "って";
 } else if (verb.preMasu === "き") {
 verb.teEnd = "いて";
 } else if (verb.preMasu === "ぎ") {
 verb.teEnd = "いで";
 } else if (verb.preMasu === "し") {
 verb.teEnd = "して";
 }
 //exception
 if (verb.u === "くる""いく") {
 verb.teEnd = "って";
 }
  verb.naite = "こない";verb.withoutEnd + verb.teEnd;
 }
 }

 if })(verb.group === "2") {
 verb.nai = verb.i + "ない";
 };
 verb.getNai = (function () {
 if (verb.group === "1""3") {
 if (verb.preMasuu === "い""する") {
 verb.naiEndnai = "わ";"しない";
 } else if (verb.u === "くる") {
 verb.naiEndnai = hiragana.change(verb.preMasu,"こない";
 "i", "a") + "ない"; }
 }
 verb.nai = verb.withoutEnd + verb.naiEnd;

 if (verb.ugroup === "ある""2") {
 verb.nai = verb.i + "ない";
 }
 }

 } if (verb.group === "1") {
 if (verb.preMasu === "い"); {
 verb.naiEnd = "わ";
 } else {
 verb.naiEnd = hiragana.change(verb.preMasu, "i", "a") + "ない";
 }
 verb.nai = verb.withoutEnd + verb.naiEnd;
 verb.getMasu = (function if (verb.u === "ある") {
 verb.masunai = verb.i"ない";
 + "ます"; }
 }
 })();
 verb.getMasengetMasu = (function () {
 verb.masenmasu = verb.i + "ません";"ます";
 })();
 verb.getTa = (function () {
  if (verb.group === "3" || verb.group === "2") {
 verb.ta = verb.i + "た";
 }
 if (verb.group === "1") {
 verb.taEndgetMasen = verb.teEnd.slice(0, -1) +function hiragana.change(verb.teEnd.slice(-1), "e", "a");{
 verb.tamasen = verb.withoutEndi + verb.taEnd;
  }"ません";
 })();
 verb.getNakattagetTa = (function () {
 if (verb.nakattagroup === "3" || verb.group === "2") {
 verb.ta = verb.naii + "た";
 }
 if (verb.group === "1") {
 verb.taEnd = verb.teEnd.slice(0, -1) + "かった";hiragana.change(verb.teEnd.slice(-1), "e", "a");
 verb.ta = verb.withoutEnd + verb.taEnd;
 }
 })();
 verb.getMashitagetNakatta = (function () {
 verb.mashitanakatta = verb.inai.slice(0, -1) + "ました";"かった";
 })();
 verb.getMasendeshitagetMashita = (function () {
 verb.masendeshitamashita = verb.maseni + " でした";"ました";
 })();
 verb.getOu = (function () {
 if (verb.group === "3") {
  verb.ougetMasendeshita = verb.nai.slice(0, -2) + "よう";
 }
 if (verb.group === "2") {
 verb.ou = verb.i + "よう";
 }
 iffunction (verb.group === "1") {
 verb.ouEnd = hiragana.change(verb.preMasu, "i", "o") + "う";
 verb.oumasendeshita = verb.withoutEndmasen + verb.ouEnd;
 " }でした";
 })();
 verb.getNaidarougetOu = (function () {
 if (verb.naidarougroup === "3") {
  verb.ou = verb.nai.slice(0, -2) + ""よう";
 だろう"; }
 if (verb.group === "2") {
 verb.ou = verb.i + "よう";
 }
 if (verb.group === "1") {
 verb.ouEnd = hiragana.change(verb.preMasu, "i", "o") + "う";
 verb.ou = verb.withoutEnd + verb.ouEnd;
 }
 })();
 verb.getEba = (function () {
 if (verb.group === "3") {
  verb.ebagetNaidarou = verb.withoutEnd + "れば";
 }
 if (verb.group === "2") {
 verb.eba = verb.i + "れば";
 }
 iffunction (verb.group === "1") {
 verb.ebaEnd = hiragana.change(verb.preMasu, "i", "e") + "ば";
 verb.ebanaidarou = verb.withoutEndnai + verb.ebaEnd;
  " }だろう";
 })();
 verb.getNakerebagetEba = (function () {
 if (verb.nakerebagroup ==== "3") {
  verb.naieba = verb.slicewithoutEnd + "れば";
 }
 if (0,verb.group -1=== "2") {
 verb.eba = verb.i + "ければ";"れば";
 }
 if (verb.group === "1") {
 verb.ebaEnd = hiragana.change(verb.preMasu, "i", "e"); + "ば";
 verb.eba = verb.withoutEnd + verb.ebaEnd;
 }
 })();
 verb.getNakereba = (function () {
 verb.nakereba = verb.nai.slice(0, -1) + "ければ";
 })();
 verb.getEru = (function () {
 if (verb.group === "3") {
 if (verb.u === "する") {
 verb.eru = "できる";
 }
 if (verb.u === "くる") {
 verb.eru = "こられる";
 }
 }
 if (verb.ugroup === "くる""2") {
 verb.eru = "こられる";verb.withoutEnd + "られる";
 }
 }
  if (verb.group === "2""1") {
 verb.eru = verb.withoutEnd + "られる";
 }
 if (verb.group === "1") {
  verb.eruEnd = hiragana.change(verb.preMasu, "i", "e") + "る";
 verb.eru = verb.withoutEnd + verb.eruEnd;
 }
 })();
 verb.getErunai = (function () {
 verb.erunai = verb.eru.slice(0, -1) + "ない";
 })();
 verb.getReru = (function () {
 if (verb.group === "3") {
 if (verb.u === "する") {
 verb.reru = "される";
 }
 if (verb.u === "くる") {
 verb.reru = "こらせる";
 }
 }
 if (verb.ugroup === "くる""2") {
 verb.reru = "こらせる";verb.eru;
 }
 }
  if (verb.group === "2""1") {
 verb.reru = verb.eru;
 }
 if (verb.group === "1") {
  verb.reru = verb.nai.slice(0, -2) + "れる";
 }
 })();
 verb.getRerunai = (function () {
 verb.rerunai = verb.reru.slice(0, -1) + "ない";
 })();
 verb.getSeru = (function () {
 if (verb.group === "3") {
 if (verb.u === "する") {
 verb.seru = "させる";
 }
 if (verb.u === "くる") {
 verb.seru = "こさせる";
 }
 }
 if (verb.ugroup === "くる""2") {
 verb.seru = "こさせる";verb.withoutEnd + "させる";
 }
 }
  if (verb.group === "2""1") {
 verb.seru = verb.withoutEnd + "させる";
 }
  if (verb.group === "1") {
 verb.seru = verb.nai.slice(0, -2) + "せる";
 }
 })();
 verb.getserunai = (function () {
 verb.serunai = verb.seru.slice(0, -1) + "ない";
 })();
 verb.process = (function () {
 var prop = "";
 //goes through verb object, checks for romaji, prints page
 for (prop in verb) {
 if (typeof verb[prop] === "string") {
 if (wanakana.isKana($("#input").val()) === false) {
 verb[prop] = wanakana.toRomaji(verb[prop]);
 }
 printPage(prop, verb[prop]);
 } //string
 } //for in
 })();
 }
 });
});

});

So essentially for my first use of javascript I've made an app that takes an input verb from html in japanese and outputs it in to many conjugated (manipulated) forms.

Right now I'm at a loss on how to rewrite it in modular JS. I have a couple libraries defined in the html (bootstrap, jQuery, and a Japanese IME). Although I'm using self-invoking functions and have a general idea of what modules are, I have no idea what a practical way of splitting up the code in to modules would be. Any help would be appreciated! (sorry for the length, reading all of the functions isn't necessary)

$(document).ready(function () {
//hiragana table
var hiragana = {
 a: ["あ", "か", "さ", "た", "な", "は", "ま", "や", "ら", "わ", "が", "ざ", "だ", "ば", "ぱ"],
 i: ["い", "き", "し", "ち", "に", "ひ", "み", " ", "り", " ", "ぎ", "じ", "ぢ", "び", "ぴ"],
 u: ["う", "く", "す", "つ", "ぬ", "ふ", "む", "ゆ", "る", " ", "ぐ", "ず", "づ", "ぶ", "ぷ"],
 e: ["え", "け", "せ", "て", "ね", "へ", "め", " ", "れ", " ", "げ", "ぜ", "で", "べ", "ぺ"],
 o: ["お", "こ", "そ", "と", "の", "ほ", "も", "よ", "ろ", "を", "ご", "ぞ", "ど", "ぼ", "ぽ"],
 teOne: ["み", "に", "び"],
 teTwo: ["い", "ち", "り"],
 change: function (input, initVowel, desiredVowel) {
 var x = hiragana[initVowel].indexOf(input);
 return hiragana[desiredVowel][x];
  }
};
var groupOneExceptions = ["はいる", "はしる", "かえる", "かぎる", "きる", "しゃべる", "しる", "いる"];
var groupThree = ["くる", "する"];
var existence = [["いる", "ある"], ["です"]];
//check if in array
function isInArray(array, search) {
 return array.indexOf(search) >= 0;
}
//add input to the page
function printPage(id, value) {
 $("#" + id).replaceWith("<div id = " + id + ">" + value + "</span>");
}
//bind input to wanakana on page load
var input = document.getElementById("input");
wanakana.bind(input);
//check radio buttons and enact changes on enter form
$("input:radio[name=input-method]").change(function () {
 if ($(this).val() === "Hiragana") {
 //wanakana support
 wanakana.bind(input);
  $("#input").attr("placeholder", "たべる");
 }
 if ($(this).val() === "Romaji") {
 wanakana.unbind(input);
 $("#input").attr("placeholder", "taberu");
 }
});

//Click the button to get the form value.
$("#submit").click(function () {
  var verb = {
  //put an if check here for masu? LATER
 group: "",
 u: $("#input").val(),
 end: "",
 endTwo: "",
 withoutEnd: "",
 i: "",
 te: "",
 preMasu: "",
 masu: "",
 ta: "",
 taEnd: "",
 nakatta: "",
 mashita: "",
 masendeshita: "",
 teEnd: "",
 nai: "",
 naiEnd: "",
 masen: "",
 ou: "",
 ouEnd: "",
 naidarou: "",
 eba: "",
 ebaEnd: "",
 nakereba: "",
 eru: "",
 eruEnd: "",
 erunai: "",
 seru: "",
 serunai: "",
 reru: "",
  rerunai: ""
 };

 var init = (function () {
 printPage("callout", "");
 //clear table
 for (prop in verb) {
 if (typeof verb[prop] === "string") {
 printPage(prop, "");
 }
 }
 //init verb.u for hiragana processing
 if (wanakana.isKana(verb.u) === false) {
 verb.u = wanakana.toHiragana(verb.u);
 }
 //do some initial slicing
  verb.end = verb.u.slice(-1);
 verb.endTwo = verb.u.slice(-2, -1);
 verb.withoutEnd = verb.u.slice(0, -1);
 if (isInArray(hiragana.u, verb.end) === false) {
 printPage("callout", "<div class=\"bs-callout bs-callout-danger\"> It doesn't look like " + verb.u + " is a valid Japanese verb in plain form. Try something that ends with an \"u\".</div>");
 }
 if (isInArray(existence[0], verb.u)) {
 printPage("callout", "<div class=\"bs-callout bs-callout-info\"> If you were referring to the existence construct " + verb.u + " (to be), refer here.</div>");
 } else if (isInArray(existence[1], verb.u)) {
 printPage("callout", "<div class=\"bs-callout bs-callout-info\"> If you were referring to the existence construct " + verb.u + " (is), refer here.</div>");
  }
 })();
 if (isInArray(hiragana.u, verb.end)) {
 verb.getGroup = (function () {
 if (isInArray(groupThree, verb.u)) {
 verb.group = "3";
 } else if (verb.end === "る" && (isInArray(hiragana.i, verb.endTwo) || isInArray(hiragana.e, verb.endTwo))) {
 verb.group = "2";
  } else if (isInArray(hiragana.u, verb.end)) {
 verb.group = "1";
 }
 if (isInArray(groupOneExceptions, verb.u)) {
 verb.group = "1";
 }
 })();
 verb.getI = (function () {
 if (verb.group === "1") {
 verb.preMasu = hiragana.change(verb.end, "u", "i");
  verb.i = verb.u.slice(0, -1) + verb.preMasu;
 }
 if (verb.group === "2") {
 verb.i = verb.u.slice(0, -1);
  }
 if (verb.group === "3") {
 verb.i = hiragana.change(verb.withoutEnd, "u", "i");
 }
 })();
 verb.getTe = (function () {
 if (verb.group === "3" || verb.group === "2") {
 verb.te = verb.i + "て";
 }
 if (verb.group === "1") {
 if (isInArray(hiragana.teOne, verb.preMasu)) {
 verb.teEnd = "んで";
 } else if (isInArray(hiragana.teTwo, verb.preMasu)) {
 verb.teEnd = "って";
 } else if (verb.preMasu === "き") {
 verb.teEnd = "いて";
 } else if (verb.preMasu === "ぎ") {
 verb.teEnd = "いで";
 } else if (verb.preMasu === "し") {
 verb.teEnd = "して";
 }
 //exception
 if (verb.u === "いく") {
 verb.teEnd = "って";
 }
 verb.te = verb.withoutEnd + verb.teEnd;
 }
 })();
 verb.getNai = (function () {
  if (verb.group === "3") {
  if (verb.u === "する") {
 verb.nai = "しない";
 }
 if (verb.u === "くる") {
 verb.nai = "こない";
 }
 }

 if (verb.group === "2") {
 verb.nai = verb.i + "ない";
 }
 if (verb.group === "1") {
 if (verb.preMasu === "い") {
 verb.naiEnd = "わ";
 } else {
 verb.naiEnd = hiragana.change(verb.preMasu, "i", "a") + "ない";
 }
 verb.nai = verb.withoutEnd + verb.naiEnd;

 if (verb.u === "ある") {
 verb.nai = "ない";
 }
 }

 })();
 verb.getMasu = (function () {
 verb.masu = verb.i + "ます";
 })();
 verb.getMasen = (function () {
 verb.masen = verb.i + "ません";
 })();
 verb.getTa = (function () {
  if (verb.group === "3" || verb.group === "2") {
 verb.ta = verb.i + "た";
 }
 if (verb.group === "1") {
 verb.taEnd = verb.teEnd.slice(0, -1) + hiragana.change(verb.teEnd.slice(-1), "e", "a");
 verb.ta = verb.withoutEnd + verb.taEnd;
  }
 })();
 verb.getNakatta = (function () {
 verb.nakatta = verb.nai.slice(0, -1) + "かった";
 })();
 verb.getMashita = (function () {
 verb.mashita = verb.i + "ました";
 })();
 verb.getMasendeshita = (function () {
 verb.masendeshita = verb.masen + " でした";
 })();
 verb.getOu = (function () {
 if (verb.group === "3") {
  verb.ou = verb.nai.slice(0, -2) + "よう";
 }
 if (verb.group === "2") {
 verb.ou = verb.i + "よう";
 }
 if (verb.group === "1") {
 verb.ouEnd = hiragana.change(verb.preMasu, "i", "o") + "う";
 verb.ou = verb.withoutEnd + verb.ouEnd;
  }
 })();
 verb.getNaidarou = (function () {
 verb.naidarou = verb.nai + " だろう";
 })();
 verb.getEba = (function () {
 if (verb.group === "3") {
  verb.eba = verb.withoutEnd + "れば";
 }
 if (verb.group === "2") {
 verb.eba = verb.i + "れば";
 }
 if (verb.group === "1") {
 verb.ebaEnd = hiragana.change(verb.preMasu, "i", "e") + "ば";
 verb.eba = verb.withoutEnd + verb.ebaEnd;
  }
 })();
 verb.getNakereba = (function () {
 verb.nakereba = verb.nai.slice(0, -1) + "ければ";
 })();
 verb.getEru = (function () {
 if (verb.group === "3") {
 if (verb.u === "する") {
 verb.eru = "できる";
 }
 if (verb.u === "くる") {
 verb.eru = "こられる";
 }
 }
  if (verb.group === "2") {
 verb.eru = verb.withoutEnd + "られる";
 }
 if (verb.group === "1") {
  verb.eruEnd = hiragana.change(verb.preMasu, "i", "e") + "る";
 verb.eru = verb.withoutEnd + verb.eruEnd;
 }
 })();
 verb.getErunai = (function () {
 verb.erunai = verb.eru.slice(0, -1) + "ない";
 })();
 verb.getReru = (function () {
 if (verb.group === "3") {
 if (verb.u === "する") {
 verb.reru = "される";
 }
 if (verb.u === "くる") {
 verb.reru = "こらせる";
 }
 }
  if (verb.group === "2") {
 verb.reru = verb.eru;
 }
 if (verb.group === "1") {
  verb.reru = verb.nai.slice(0, -2) + "れる";
 }
 })();
 verb.getRerunai = (function () {
 verb.rerunai = verb.reru.slice(0, -1) + "ない";
 })();
 verb.getSeru = (function () {
 if (verb.group === "3") {
 if (verb.u === "する") {
 verb.seru = "させる";
 }
 if (verb.u === "くる") {
 verb.seru = "こさせる";
 }
 }
  if (verb.group === "2") {
 verb.seru = verb.withoutEnd + "させる";
 }
  if (verb.group === "1") {
 verb.seru = verb.nai.slice(0, -2) + "せる";
 }
 })();
 verb.getserunai = (function () {
 verb.serunai = verb.seru.slice(0, -1) + "ない";
 })();
 verb.process = (function () {
 var prop = "";
 //goes through verb object, checks for romaji, prints page
 for (prop in verb) {
 if (typeof verb[prop] === "string") {
 if (wanakana.isKana($("#input").val()) === false) {
 verb[prop] = wanakana.toRomaji(verb[prop]);
 }
 printPage(prop, verb[prop]);
 } //string
 } //for in
 })();
 }
});

});

For my first use of javascript I've made an app that takes an input verb from html in Japanese and outputs it in to many conjugated (manipulated) forms.

Right now I'm at a loss on how to rewrite it in modular JS. I have a couple libraries defined in the HTML (bootstrap, jQuery, and a Japanese IME). Although I'm using self-invoking functions and have a general idea of what modules are, I have no idea what a practical way of splitting up the code in to modules would be.

$(document).ready(function () {
//hiragana table
var hiragana = {
 a: ["あ", "か", "さ", "た", "な", "は", "ま", "や", "ら", "わ", "が", "ざ", "だ", "ば", "ぱ"],
 i: ["い", "き", "し", "ち", "に", "ひ", "み", " ", "り", " ", "ぎ", "じ", "ぢ", "び", "ぴ"],
 u: ["う", "く", "す", "つ", "ぬ", "ふ", "む", "ゆ", "る", " ", "ぐ", "ず", "づ", "ぶ", "ぷ"],
 e: ["え", "け", "せ", "て", "ね", "へ", "め", " ", "れ", " ", "げ", "ぜ", "で", "べ", "ぺ"],
 o: ["お", "こ", "そ", "と", "の", "ほ", "も", "よ", "ろ", "を", "ご", "ぞ", "ど", "ぼ", "ぽ"],
 teOne: ["み", "に", "び"],
 teTwo: ["い", "ち", "り"],
 change: function (input, initVowel, desiredVowel) {
 var x = hiragana[initVowel].indexOf(input);
 return hiragana[desiredVowel][x];
 }
 };
 var groupOneExceptions = ["はいる", "はしる", "かえる", "かぎる", "きる", "しゃべる", "しる", "いる"];
var groupThree = ["くる", "する"];
 var existence = [["いる", "ある"], ["です"]];
 //check if in array
 function isInArray(array, search) {
 return array.indexOf(search) >= 0;
 }
 //add input to the page
 function printPage(id, value) {
 $("#" + id).replaceWith("<div id = " + id + ">" + value + "</span>");
 }
 //bind input to wanakana on page load
 var input = document.getElementById("input");
 wanakana.bind(input);
 //check radio buttons and enact changes on enter form
 $("input:radio[name=input-method]").change(function () {
  if ($(this).val() === "Hiragana") {
 //wanakana support
  wanakana.bind(input);
 $("#input").attr("placeholder", "たべる");
 }
 if ($(this).val() === "Romaji") {
 wanakana.unbind(input);
 $("#input").attr("placeholder", "taberu");
 }
 });

 //Click the button to get the form value.
 $("#submit").click(function () {
 var verb = {
 //put an if check here for masu? LATER
 group: "",
 u: $("#input").val(), end: "",
  endTwo: "",
 withoutEnd: "", i: "",
 te: "",
  preMasu: "",
 masu: "",
 ta: "",
 taEnd: "",
 nakatta: "",
 mashita: "",
 masendeshita: "",
 teEnd: "",
 nai: "",
 naiEnd: "",
 masen: "",
 ou: "",
 ouEnd: "",
 naidarou: "",
 eba: "",
 ebaEnd: "",
 nakereba: "",
 eru: "",
 eruEnd: "",
 erunai: "",
 seru: "",
 serunai: "",
 reru: "",
 rerunai: ""
 };
 var init = (function () {
 printPage("callout", "");
 //clear table
  for (prop in verb) {
 if (typeof verb[prop] === "string") {
 printPage(prop, "");
 }
 }
 //init verb.u for hiragana processing
 if (wanakana.isKana(verb.u) === false) {
 verb.u = wanakana.toHiragana(verb.u);
  }
 //do some initial slicing
 verb.end = verb.u.slice(-1);
  verb.endTwo = verb.u.slice(-2, -1);
  verb.withoutEnd = verb.u.slice(0, -1);
 if (isInArray(hiragana.u, verb.end) === false) {
 printPage("callout", "<div class=\"bs-callout bs-callout-danger\"> It doesn't look like " + verb.u + " is a valid Japanese verb in plain form. Try something that ends with an \"u\".</div>");
 }
 if (isInArray(existence[0], verb.u)) {
 printPage("callout", "<div class=\"bs-callout bs-callout-info\"> If you were referring to the existence construct " + verb.u + " (to be), refer here.</div>");
 } else if (isInArray(existence[1], verb.u)) {
 printPage("callout", "<div class=\"bs-callout bs-callout-info\"> If you were referring to the existence construct " + verb.u + " (is), refer here.</div>");
 }
 })();
 if (isInArray(hiragana.u, verb.end)) {
 verb.getGroup = (function () {
 if (isInArray(groupThree, verb.u)) {
 verb.group = "3";
  } else if (verb.end === "る" && (isInArray(hiragana.i, verb.endTwo) || isInArray(hiragana.e, verb.endTwo))) {
 verb.group = "2";
  } else if (isInArray(hiragana.u, verb.end)) {
  verb.group = "1";
 }
 if (isInArray(groupOneExceptions, verb.u)) {
 verb.group = "1";
 }
 })();
 verb.getI = (function () {
 if (verb.group === "1") {
 verb.preMasu = hiragana.change(verb.end, "u", "i");
 verb.i = verb.u.slice(0, -1) + verb.preMasu;
 }
 if (verb.group === "2") {
 verb.i = verb.u.slice(0, -1);
 }

 if (verb.group === "3") {
 verb.i = hiragana.change(verb.withoutEnd, "u", "i");
 }
 })();
  verb.getTe = (function () {
 if (verb.group === "3" || verb.group === "2") {
 verb.te = verb.i + "て";
 }
 if (verb.group === "1") {
 if (isInArray(hiragana.teOne, verb.preMasu)) {
 verb.teEnd = "んで";
 } else if (isInArray(hiragana.teTwo, verb.preMasu)) {
 verb.teEnd = "って";
 } else if (verb.preMasu === "き") {
 verb.teEnd = "いて";
 } else if (verb.preMasu === "ぎ") {
 verb.teEnd = "いで";
 } else if (verb.preMasu === "し") {
 verb.teEnd = "して";
 }
 //exception
 if (verb.u === "いく") {
 verb.teEnd = "って";
 }
  verb.te = verb.withoutEnd + verb.teEnd;
 }
 })();
 verb.getNai = (function () {
 if (verb.group === "3") {
 if (verb.u === "する") {
 verb.nai = "しない";
 } if (verb.u === "くる") {
 verb.nai = "こない";
  }
 }
 if (verb.group === "2") {
 verb.nai = verb.i + "ない";
 }
  if (verb.group === "1") {
 if (verb.preMasu === "い") {
 verb.naiEnd = "わ";
 } else {
 verb.naiEnd = hiragana.change(verb.preMasu, "i", "a") + "ない";
 }
 verb.nai = verb.withoutEnd + verb.naiEnd;
 if (verb.u === "ある") {
 verb.nai = "ない";
  }
 }
 })();
 verb.getMasu = (function () {
 verb.masu = verb.i + "ます";
 })();
 verb.getMasen = (function () {
 verb.masen = verb.i + "ません";
 })();
 verb.getTa = (function () {
 if (verb.group === "3" || verb.group === "2") {
 verb.ta = verb.i + "た";
 }
 if (verb.group === "1") {
 verb.taEnd = verb.teEnd.slice(0, -1) + hiragana.change(verb.teEnd.slice(-1), "e", "a");
 verb.ta = verb.withoutEnd + verb.taEnd;
 }
 })();
 verb.getNakatta = (function () {
 verb.nakatta = verb.nai.slice(0, -1) + "かった";
 })();
 verb.getMashita = (function () {
 verb.mashita = verb.i + "ました";
 })();
 verb.getMasendeshita = (function () {
 verb.masendeshita = verb.masen + " でした";
 })();
 verb.getOu = (function () {
 if (verb.group === "3") {
  verb.ou = verb.nai.slice(0, -2) + "よう";
  }
 if (verb.group === "2") {
 verb.ou = verb.i + "よう";
 }
 if (verb.group === "1") {
 verb.ouEnd = hiragana.change(verb.preMasu, "i", "o") + "う";
 verb.ou = verb.withoutEnd + verb.ouEnd;
 }
 })();
 verb.getNaidarou = (function () {
 verb.naidarou = verb.nai + " だろう";
 })();
 verb.getEba = (function () {
 if (verb.group === "3") {
  verb.eba = verb.withoutEnd + "れば";
 }
 if (verb.group === "2") {
 verb.eba = verb.i + "れば";
 }
 if (verb.group === "1") {
 verb.ebaEnd = hiragana.change(verb.preMasu, "i", "e") + "ば";
 verb.eba = verb.withoutEnd + verb.ebaEnd;
 }
 })();
 verb.getNakereba = (function () {
 verb.nakereba = verb.nai.slice(0, -1) + "ければ";
 })();
 verb.getEru = (function () {
 if (verb.group === "3") {
 if (verb.u === "する") {
 verb.eru = "できる";
 }
 if (verb.u === "くる") {
 verb.eru = "こられる";
 }
 }
 if (verb.group === "2") {
 verb.eru = verb.withoutEnd + "られる";
 }
 if (verb.group === "1") {
 verb.eruEnd = hiragana.change(verb.preMasu, "i", "e") + "る";
 verb.eru = verb.withoutEnd + verb.eruEnd;
 }
 })();
 verb.getErunai = (function () {
 verb.erunai = verb.eru.slice(0, -1) + "ない";
 })();
 verb.getReru = (function () {
 if (verb.group === "3") {
 if (verb.u === "する") {
 verb.reru = "される";
 }
 if (verb.u === "くる") {
 verb.reru = "こらせる";
 }
 }
 if (verb.group === "2") {
 verb.reru = verb.eru;
 }
 if (verb.group === "1") {
 verb.reru = verb.nai.slice(0, -2) + "れる";
 }
 })();
 verb.getRerunai = (function () {
 verb.rerunai = verb.reru.slice(0, -1) + "ない";
 })();
 verb.getSeru = (function () {
 if (verb.group === "3") {
 if (verb.u === "する") {
 verb.seru = "させる";
 }
 if (verb.u === "くる") {
 verb.seru = "こさせる";
 }
 }
 if (verb.group === "2") {
 verb.seru = verb.withoutEnd + "させる";
 }
 if (verb.group === "1") {
 verb.seru = verb.nai.slice(0, -2) + "せる";
 }
 })();
 verb.getserunai = (function () {
 verb.serunai = verb.seru.slice(0, -1) + "ない";
 })();
 verb.process = (function () {
 var prop = "";
 //goes through verb object, checks for romaji, prints page
 for (prop in verb) {
 if (typeof verb[prop] === "string") {
 if (wanakana.isKana($("#input").val()) === false) {
 verb[prop] = wanakana.toRomaji(verb[prop]);
 }
 printPage(prop, verb[prop]);
 } //string
 } //for in
 })();
 }
 });
});
Source Link

Correctly rewriting Japanese verb conjugator in modular JS

So essentially for my first use of javascript I've made an app that takes an input verb from html in japanese and outputs it in to many conjugated (manipulated) forms.

Essentially, it defines an alphabet, some initial arrays and functions for use, a function to initially check for values and interact with the html page, an object to pass different verb values to, and then a whole slew of "self invoking functions" that essentially take the verb and pass it to the object, and then another function to interact with the page.

Right now I'm at a loss on how to rewrite it in modular JS. I have a couple libraries defined in the html (bootstrap, jQuery, and a Japanese IME). Although I'm using self-invoking functions and have a general idea of what modules are, I have no idea what a practical way of splitting up the code in to modules would be. Any help would be appreciated! (sorry for the length, reading all of the functions isn't necessary)

$(document).ready(function () {
//hiragana table
var hiragana = {
 a: ["あ", "か", "さ", "た", "な", "は", "ま", "や", "ら", "わ", "が", "ざ", "だ", "ば", "ぱ"],
 i: ["い", "き", "し", "ち", "に", "ひ", "み", " ", "り", " ", "ぎ", "じ", "ぢ", "び", "ぴ"],
 u: ["う", "く", "す", "つ", "ぬ", "ふ", "む", "ゆ", "る", " ", "ぐ", "ず", "づ", "ぶ", "ぷ"],
 e: ["え", "け", "せ", "て", "ね", "へ", "め", " ", "れ", " ", "げ", "ぜ", "で", "べ", "ぺ"],
 o: ["お", "こ", "そ", "と", "の", "ほ", "も", "よ", "ろ", "を", "ご", "ぞ", "ど", "ぼ", "ぽ"],
 teOne: ["み", "に", "び"],
 teTwo: ["い", "ち", "り"],
 change: function (input, initVowel, desiredVowel) {
 var x = hiragana[initVowel].indexOf(input);
 return hiragana[desiredVowel][x];
 }
};
var groupOneExceptions = ["はいる", "はしる", "かえる", "かぎる", "きる", "しゃべる", "しる", "いる"];
var groupThree = ["くる", "する"];
var existence = [["いる", "ある"], ["です"]];
//check if in array
function isInArray(array, search) {
 return array.indexOf(search) >= 0;
}
//add input to the page
function printPage(id, value) {
 $("#" + id).replaceWith("<div id = " + id + ">" + value + "</span>");
}
//bind input to wanakana on page load
var input = document.getElementById("input");
wanakana.bind(input);
//check radio buttons and enact changes on enter form
$("input:radio[name=input-method]").change(function () {
 if ($(this).val() === "Hiragana") {
 //wanakana support
 wanakana.bind(input);
 $("#input").attr("placeholder", "たべる");
 }
 if ($(this).val() === "Romaji") {
 wanakana.unbind(input);
 $("#input").attr("placeholder", "taberu");
 }
});
//Click the button to get the form value.
$("#submit").click(function () {
 var verb = {
 //put an if check here for masu? LATER
 group: "",
 u: $("#input").val(),
 end: "",
 endTwo: "",
 withoutEnd: "",
 i: "",
 te: "",
 preMasu: "",
 masu: "",
 ta: "",
 taEnd: "",
 nakatta: "",
 mashita: "",
 masendeshita: "",
 teEnd: "",
 nai: "",
 naiEnd: "",
 masen: "",
 ou: "",
 ouEnd: "",
 naidarou: "",
 eba: "",
 ebaEnd: "",
 nakereba: "",
 eru: "",
 eruEnd: "",
 erunai: "",
 seru: "",
 serunai: "",
 reru: "",
 rerunai: ""
 };
 var init = (function () {
 printPage("callout", "");
 //clear table
 for (prop in verb) {
 if (typeof verb[prop] === "string") {
 printPage(prop, "");
 }
 }
 //init verb.u for hiragana processing
 if (wanakana.isKana(verb.u) === false) {
 verb.u = wanakana.toHiragana(verb.u);
 }
 //do some initial slicing
 verb.end = verb.u.slice(-1);
 verb.endTwo = verb.u.slice(-2, -1);
 verb.withoutEnd = verb.u.slice(0, -1);
 if (isInArray(hiragana.u, verb.end) === false) {
 printPage("callout", "<div class=\"bs-callout bs-callout-danger\"> It doesn't look like " + verb.u + " is a valid Japanese verb in plain form. Try something that ends with an \"u\".</div>");
 }
 if (isInArray(existence[0], verb.u)) {
 printPage("callout", "<div class=\"bs-callout bs-callout-info\"> If you were referring to the existence construct " + verb.u + " (to be), refer here.</div>");
 } else if (isInArray(existence[1], verb.u)) {
 printPage("callout", "<div class=\"bs-callout bs-callout-info\"> If you were referring to the existence construct " + verb.u + " (is), refer here.</div>");
 }
 })();
 if (isInArray(hiragana.u, verb.end)) {
 verb.getGroup = (function () {
 if (isInArray(groupThree, verb.u)) {
 verb.group = "3";
 } else if (verb.end === "る" && (isInArray(hiragana.i, verb.endTwo) || isInArray(hiragana.e, verb.endTwo))) {
 verb.group = "2";
 } else if (isInArray(hiragana.u, verb.end)) {
 verb.group = "1";
 }
 if (isInArray(groupOneExceptions, verb.u)) {
 verb.group = "1";
 }
 })();
 verb.getI = (function () {
 if (verb.group === "1") {
 verb.preMasu = hiragana.change(verb.end, "u", "i");
 verb.i = verb.u.slice(0, -1) + verb.preMasu;
 }
 if (verb.group === "2") {
 verb.i = verb.u.slice(0, -1);
 }
 if (verb.group === "3") {
 verb.i = hiragana.change(verb.withoutEnd, "u", "i");
 }
 })();
 verb.getTe = (function () {
 if (verb.group === "3" || verb.group === "2") {
 verb.te = verb.i + "て";
 }
 if (verb.group === "1") {
 if (isInArray(hiragana.teOne, verb.preMasu)) {
 verb.teEnd = "んで";
 } else if (isInArray(hiragana.teTwo, verb.preMasu)) {
 verb.teEnd = "って";
 } else if (verb.preMasu === "き") {
 verb.teEnd = "いて";
 } else if (verb.preMasu === "ぎ") {
 verb.teEnd = "いで";
 } else if (verb.preMasu === "し") {
 verb.teEnd = "して";
 }
 //exception
 if (verb.u === "いく") {
 verb.teEnd = "って";
 }
 verb.te = verb.withoutEnd + verb.teEnd;
 }
 })();
 verb.getNai = (function () {
 if (verb.group === "3") {
 if (verb.u === "する") {
 verb.nai = "しない";
 }
 if (verb.u === "くる") {
 verb.nai = "こない";
 }
 }
 if (verb.group === "2") {
 verb.nai = verb.i + "ない";
 }
 if (verb.group === "1") {
 if (verb.preMasu === "い") {
 verb.naiEnd = "わ";
 } else {
 verb.naiEnd = hiragana.change(verb.preMasu, "i", "a") + "ない";
 }
 verb.nai = verb.withoutEnd + verb.naiEnd;
 if (verb.u === "ある") {
 verb.nai = "ない";
 }
 }
 })();
 verb.getMasu = (function () {
 verb.masu = verb.i + "ます";
 })();
 verb.getMasen = (function () {
 verb.masen = verb.i + "ません";
 })();
 verb.getTa = (function () {
 if (verb.group === "3" || verb.group === "2") {
 verb.ta = verb.i + "た";
 }
 if (verb.group === "1") {
 verb.taEnd = verb.teEnd.slice(0, -1) + hiragana.change(verb.teEnd.slice(-1), "e", "a");
 verb.ta = verb.withoutEnd + verb.taEnd;
 }
 })();
 verb.getNakatta = (function () {
 verb.nakatta = verb.nai.slice(0, -1) + "かった";
 })();
 verb.getMashita = (function () {
 verb.mashita = verb.i + "ました";
 })();
 verb.getMasendeshita = (function () {
 verb.masendeshita = verb.masen + " でした";
 })();
 verb.getOu = (function () {
 if (verb.group === "3") {
 verb.ou = verb.nai.slice(0, -2) + "よう";
 }
 if (verb.group === "2") {
 verb.ou = verb.i + "よう";
 }
 if (verb.group === "1") {
 verb.ouEnd = hiragana.change(verb.preMasu, "i", "o") + "う";
 verb.ou = verb.withoutEnd + verb.ouEnd;
 }
 })();
 verb.getNaidarou = (function () {
 verb.naidarou = verb.nai + " だろう";
 })();
 verb.getEba = (function () {
 if (verb.group === "3") {
 verb.eba = verb.withoutEnd + "れば";
 }
 if (verb.group === "2") {
 verb.eba = verb.i + "れば";
 }
 if (verb.group === "1") {
 verb.ebaEnd = hiragana.change(verb.preMasu, "i", "e") + "ば";
 verb.eba = verb.withoutEnd + verb.ebaEnd;
 }
 })();
 verb.getNakereba = (function () {
 verb.nakereba = verb.nai.slice(0, -1) + "ければ";
 })();
 verb.getEru = (function () {
 if (verb.group === "3") {
 if (verb.u === "する") {
 verb.eru = "できる";
 }
 if (verb.u === "くる") {
 verb.eru = "こられる";
 }
 }
 if (verb.group === "2") {
 verb.eru = verb.withoutEnd + "られる";
 }
 if (verb.group === "1") {
 verb.eruEnd = hiragana.change(verb.preMasu, "i", "e") + "る";
 verb.eru = verb.withoutEnd + verb.eruEnd;
 }
 })();
 verb.getErunai = (function () {
 verb.erunai = verb.eru.slice(0, -1) + "ない";
 })();
 verb.getReru = (function () {
 if (verb.group === "3") {
 if (verb.u === "する") {
 verb.reru = "される";
 }
 if (verb.u === "くる") {
 verb.reru = "こらせる";
 }
 }
 if (verb.group === "2") {
 verb.reru = verb.eru;
 }
 if (verb.group === "1") {
 verb.reru = verb.nai.slice(0, -2) + "れる";
 }
 })();
 verb.getRerunai = (function () {
 verb.rerunai = verb.reru.slice(0, -1) + "ない";
 })();
 verb.getSeru = (function () {
 if (verb.group === "3") {
 if (verb.u === "する") {
 verb.seru = "させる";
 }
 if (verb.u === "くる") {
 verb.seru = "こさせる";
 }
 }
 if (verb.group === "2") {
 verb.seru = verb.withoutEnd + "させる";
 }
 if (verb.group === "1") {
 verb.seru = verb.nai.slice(0, -2) + "せる";
 }
 })();
 verb.getserunai = (function () {
 verb.serunai = verb.seru.slice(0, -1) + "ない";
 })();
 verb.process = (function () {
 var prop = "";
 //goes through verb object, checks for romaji, prints page
 for (prop in verb) {
 if (typeof verb[prop] === "string") {
 if (wanakana.isKana($("#input").val()) === false) {
 verb[prop] = wanakana.toRomaji(verb[prop]);
 }
 printPage(prop, verb[prop]);
 } //string
 } //for in
 })();
 }
});

});

default

AltStyle によって変換されたページ (->オリジナル) /