PageSourceSearch

https://www.effectimbeauty.com/Js/AutoKana/jquery.autoKana.js

js effectimbeauty.com collected 2026-10-04 19:06:01 UTC 10,052 bytes, 285 lines download raw bytes

1// ※Mac時の独自の処理があるため上書きする際は注意してください!!
2
3// Copyright (c) 2013 Keith Perhac @ DelfiNet (http://delfi-net.com)
4//
5// Based on the AutoRuby library created by:
6// Copyright (c) 2005-2008 spinelz.org (http://script.spinelz.org/)
7//
8// Permission is hereby granted, free of charge, to any person obtaining
9// a copy of this software and associated documentation files (the
10// "Software"), to deal in the Software without restriction, including
11// without limitation the rights to use, copy, modify, merge, publish,
12// distribute, sublicense, and/or sell copies of the Software, and to
13// permit persons to whom the Software is furnished to do so, subject to
14// the following conditions:
15//
16// The above copyright notice and this permission notice shall be
17// included in all copies or substantial portions of the Software.
18//
19// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
20// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
21// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
22// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
23// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
24// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
25// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
26
27(function ($) {
28	$.fn.autoKana = function (element1, element2, passedOptions) {
29
30		// Mac時の処理上書き注意
31		var ua = navigator.userAgent.toLowerCase();
32		var isMac = ((ua.indexOf("mac") > -1) && (ua.indexOf("os") > -1)) && !((ua.indexOf("iphone") > -1) || (ua.indexOf("ipad") > -1) || (ua.indexOf("windows") > -1));
33
34		var options = $.extend(
35			{
36				"katakana": false
37			}, passedOptions);
38
39		var kanaExtractionPattern = new RegExp("[^  ぁあ-んー]", "g");
40		var kanaCompactingPattern = new RegExp("[ぁぃぅぇぉっゃゅょ]", "g");
41		var elName,
42			elKana,
43			active = false,
44			timer = null,
45			flagConvert = true,
46			input,
47			romanChar,
48			values,
49			ignoreString,
50			baseKana;
51
52		elName = $(element1);
53		elKana = $(element2);
54		active = true;
55		stateClear();
56
57		if (isMac) {
58			elName.keyup(eventKeyUp);
59		} else {
60			elName.blur(eventBlur);
61			elName.focus(eventFocus);
62			elName.keydown(eventKeyDown);
63		}
64
65		function checkConvert(newValues) {
66			if (!flagConvert) {
67				if (Math.abs(values.length - newValues.length) > 1) {
68					var tmpValues = newValues.join("").replace(kanaCompactingPattern, "").split("");
69					if (Math.abs(values.length - tmpValues.length) > 1) {
70						stateConvert();
71					}
72				} else {
73					if (values.length === input.length && values.join("") !== input) {
74						if (input.match(kanaExtractionPattern)) {
75							stateConvert();
76						}
77					}
78				}
79			}
80		};
81
82		function checkValue() {
83			var newInput, newValues;
84			newInput = elName.val();
85			if (newInput === "") {
86				stateClear();
87				setKana();
88			} else {
89				newInput = removeString(newInput);
90				if (input === newInput) {
91					return;
92				} else {
93					input = newInput;
94					if (!flagConvert) {
95						newValues = newInput.replace(kanaExtractionPattern, "").split("");
96						checkConvert(newValues);
97						setKana(newValues);
98					}
99				}
100			}
101		};
102
103		function resetInterval() {
104			clearInterval(timer);
105		};
106
107		function eventBlur(event) {
108			resetInterval();
109		};
110		function eventFocus(event) {
111			stateInput();
112			startInterval();
113		};
114		function eventKeyDown(event) {
115			if (flagConvert) {
116				stateInput();
117			}
118		};
119
120		// Mac時の処理上書き注意
121		function eventKeyUp(event) {// キーボード入力が行われた場合(キーが入力されたら毎度行う)
122
123			var realTimeKeyCode = event.keyCode;// キーコードを所得
124			if (65 <= realTimeKeyCode && realTimeKeyCode <= 90) {
125				romanChar += String.fromCharCode(realTimeKeyCode)// ローマ字が入る(a-z)
126			} else if (realTimeKeyCode === 8 && elName.val() === "") {// TextBoxの中身が空になった場合
127				romanChar = "";
128				elKana.val("");
129			} else if (realTimeKeyCode === 13) {// Enterを押された場合
130				romanChar = "";
131			}
132			if (romanChar) {
133				var newValues = romanToHiragana(romanChar.toLowerCase());
133// ローマ字からひらがなへ変換している
134				if (newValues.match(/^[ぁ-んー ]+$/)) {// ひらがなが入っているかチェックはいていたらsetKanaを行う
135					setKanaMac(newValues);
136					romanChar = "";
137				}
138			}
139		};
140		function isHiragana(chara) {
141			return ((chara >= 12353 && chara <= 12435) || chara == 12445 || chara == 12446);
142		};
143		function removeString(newInput) {
144			if (newInput.indexOf(ignoreString) !== -1) {
145				return newInput.replace(ignoreString, "");
146			} else {
147				var i;
148				var ignoreArray = ignoreString.split("");
149				var inputArray = newInput.split("");
150				for (i = 0; i < ignoreArray.length; i++) {
151					if (ignoreArray[i] === inputArray[i]) {
152						inputArray[i] = "";
153					}
154				}
155				return inputArray.join("");
156			}
157		};
158		function startInterval() {
159			var self = this;
160			timer = setInterval(checkValue, 30);
161		};
162		function setKana(newValues) {
163			if (!flagConvert) {
164				if (newValues) {
165					values = newValues;
166				}
167				if (active) {
168					var _val = toKatakana(baseKana + values.join(""));
169					elKana.val(_val);
170				}
171			}
172		};
173		// Mac時の処理上書き注意
174		function setKanaMac(newValues) {
175			baseKana = elKana.val();
176			var values = toKatakana(baseKana + newValues);
177			elKana.val(values);
178		};
179		function stateClear() {
180			baseKana = "";
181			flagConvert = false;
182			ignoreString = "";
183			input = "";
184			romanChar = "";
185			values = [];
186		};
187		function stateInput() {
188			baseKana = elKana.val();
189			flagConvert = false;
190			ignoreString = elName.val();
191		};
192		function stateConvert() {
193			baseKana = baseKana + values.join("");
194			flagConvert = true;
195			values = [];
196		};
197		function toKatakana(src) {
198			if (options.katakana) {
199				var c, i, str;
200				str = new String;
201				for (i = 0; i < src.length; i++) {
202					c = src.charCodeAt(i);
203					if (isHiragana(c)) {
204						str += String.fromCharCode(c + 96);
205					} else {
206						str += src.charAt(i);
207					}
208				}
209				return str;
210			} else {
211				return src;
212			}
213		}
214		// Mac時の処理上書き注意
215		var hiraganaBox = {
216			"a": "あ", "i": "い", "u": "う", "e": "え", "o": "お",
217			"ka": "か", "ki": "き", "ku": "く", "ke": "け", "ko": "こ",
218			"sa": "さ", "si": "し", "su": "す", "se": "せ", "so": "そ",
219			"ta": "た", "ti": "ち", "tu": "つ", "te": "て", "to": "と", "chi": "ち", "tsu": "つ",
220			"na": "な", "ni": "に", "nu": "ぬ", "ne": "ね", "no": "の",
221			"ha": "は", "hi": "ひ", "hu": "ふ", "he": "へ", "ho": "ほ", "fu": "ふ",
222			"ma": "ま", "mi": "み", "mu": "む", "me": "め", "mo": "も",
223			"ya": "や", "yi": "い", "yu": "ゆ", "ye": "いぇ", "yo": "よ",
224			"ra": "ら", "ri": "り", "ru": "る", "re": "れ", "ro": "ろ",
225			"wa": "わ", "wyi": "ゐ", "wu": "う", "wye": "ゑ", "wo": "を",
226			"nn": "ん",
227			"ga": "が", "gi": "ぎ", "gu": "ぐ", "ge": "げ", "go": "ご",
228			"za": "ざ", "zi": "じ", "zu": "ず", "ze": "ぜ", "zo": "ぞ", "ji": "じ",
229			"da": "だ", "di": "ぢ", "du": "づ", "de": "で", "do": "ど",
230			"ba": "ば", "bi": "び", "bu": "ぶ", "be": "べ", "bo": "ぼ",
231			"pa": "ぱ", "pi": "ぴ", "pu": "ぷ", "pe": "ぺ", "po": "ぽ",
232			"kya": "きゃ", "kyu": "きゅ", "kyo": "きょ",
233			"sya": "しゃ", "syu": "しゅ", "syo": "しょ",
234			"tya": "ちゃ", "tyi": "ちぃ", "tyu": "ちゅ", "tye": "ちぇ", "tyo": "ちょ", "cha": "ちゃ", "chu": "ちゅ", "che": "ちぇ", "cho": "ちょ",
235			"nya": "にゃ", "nyi": "にぃ", "nyu": "にゅ", "nye": "にぇ", "nyo": "にょ",
236			"hya": "ひゃ", "hyi": "ひぃ", "hyu": "ひゅ", "hye": "ひぇ", "hyo": "ひょ",
237			"mya": "みゃ", "myi": "みぃ", "myu": "みゅ", "mye": "みぇ", "myo": "みょ",
238			"rya": "りゃ", "ryi": "りぃ", "ryu": "りゅ", "rye": "りぇ", "ryo": "りょ",
239			"gya": "ぎゃ", "gyi": "ぎぃ", "gyu": "ぎゅ", "gye": "ぎぇ", "gyo": "ぎょ",
240			"zya": "じゃ", "zyi": "じぃ", "zyu": "じゅ", "zye": "じぇ", "zyo": "じょ",
241			"ja": "じゃ", "ju": "じゅ", "je": "じぇ", "jo": "じょ", "jya": "じゃ", "jyi": "じぃ", "jyu": "じゅ", "jye": "じぇ", "jyo": "じょ",
242			"dya": "ぢゃ", "dyi": "ぢぃ", "dyu": "ぢゅ", "dye": "ぢぇ", "dyo": "ぢょ",
243			"bya": "びゃ", "byi": "びぃ", "byu": "びゅ", "bye": "びぇ", "byo": "びょ",
244			"pya": "ぴゃ", "pyi": "ぴぃ", "pyu": "ぴゅ", "pye": "ぴぇ", "pyo": "ぴょ",
245			"fa": "ふぁ", "fi": "ふぃ", "fe": "ふぇ", "fo": "ふぉ",
246			"fya": "ふゃ", "fyu": "ふゅ", "fyo": "ふょ",
247			"xa": "ぁ", "xi": "ぃ", "xu": "ぅ", "xe": "ぇ", "xo": "ぉ", "la": "ぁ", "li": "ぃ", "lu": "ぅ", "le": "ぇ", "lo": "ぉ",
248			"xya": "ゃ", "xyu": "ゅ", "xyo": "ょ",
249			"xtu": "っ", "xtsu": "っ",
250			"wi": "うぃ", "we": "うぇ",
251			"va": "ヴぁ", "vi": "ヴぃ", "vu": "ヴ", "ve": "ヴぇ", "vo": "ヴぉ"
252		};
253		// Mac時の処理上書き注意
254		function romanToHiragana(roman) {
255			var i, iz, match, regex,
256				hiragana = "", table = hiraganaBox;
257
258			regex = new RegExp((function (table) {
259				var key,
260					s = "^(?:";
261
262				for (key in table) if (table.hasOwnProperty(key)) {
263					s += key + "|";
264				}
265				return s + "(?:n(?![aiueo]|y[aiueo]|$))|" + "([^aiueon])\\1)";
266			})(table));
267			for (i = 0, iz = roman.length; i < iz; ++i) {
268				if (match = roman.slice(i).match(regex)) {
269					if (match[0] === "n") {
270						hiragana += "ん";
271					} else if (/^([^n])\1$/.test(match[0])) {
272						hiragana += "っ";
273						--i;
274					} else {
275						hiragana += table[match[0]];
276					}
277					i += match[0].length - 1;
278				} else {
279					hiragana += roman[i];
280				}
281			}
282			return hiragana;
283		};
284	};
285})(jQuery);

Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.