PageSourceSearch

http://www.kk-report.com/themes/main/js/valueconvertor.js

js kk-report.com collected 2026-10-02 21:25:59 UTC 9,066 bytes, 254 lines download raw bytes

1/*====================================================================================================
2//////////////////////////////////////////////////////////////////////////////////////////////////////
3
4 author : http://www.yomotsu.net
5 thanks : http://css-happylife.com
6 created: 2008/02/23
7 update : 2009/01/06
8 
9 public domain
10 
11 入力されたテキストを自動で指定の形式(半角,全角,ひらがな,全角カタカナ)に変換する JavaScript。
12 自動で指定の形式に変換したい input 要素、または textarea 要素の class 属性に
13 この JS 内の conf で設定した内容を指定すると動作します。
14
15//////////////////////////////////////////////////////////////////////////////////////////////////////
16====================================================================================================*/
17
18var valueConvertor = {
19	
20	conf : {
21		asciiClass        : "ascii",
22		multibyteClass    : "multibyte",
23		hiraganaClass     : "hiragana",
24		katakanaClass     : "katakana",
25		fullwidthKanaClass: "fullwidth-kana",
26		halfwidthKanaClass: "halfwidth-kana"
27	},
28	
29
30	main : function (){
31		var i;
32		var input    = document.getElementsByTagName("input");
33		var textarea = document.getElementsByTagName("textarea");
34		
35		for ( i in valueConvertor.conf ){
36			valueConvertor.conf[i] = new RegExp("\\b"+valueConvertor.conf[i]+"\\b");
37		}
38		
39		for(i=0;i<input.length;i++)	{
40			try {
41				input[i].addEventListener('blur', valueConvertor.convert, false);
42			} catch (e) {
43				input[i].attachEvent('onblur', (function(el){return function(){valueConvertor.convert.call(el);};})(input[i])); 
44			}
45		}
46		for(i=0;i<textarea.length;i++){
47			try {	
48				textarea[i].addEventListener('blur', valueConvertor.convert, false);
49			} catch (e) {
50				textarea[i].attachEvent('onblur', (function(el){return function(){valueConvertor.convert.call(el);};})(textarea[i])); 
51			}
52		}
53	},
54
55	convert : function(){
56		
57		if (this.className.match(valueConvertor.conf.asciiClass))
58			this.value = valueConvertor.toAsciiCase(this.value);
59		else if (this.className.match(valueConvertor.conf.multibyteClass))
60			this.value = valueConvertor.toMultibyteCase(this.value);
61			
62		if (this.className.match(valueConvertor.conf.hiraganaClass)){
63			this.value = valueConvertor.toZenkanaCase(this.value);
64			this.value = valueConvertor.toHiraganaCase(this.value);
65			this.value = valueConvertor.toPaddingCase(this.value);
66		}
67		else if (this.className.match(valueConvertor.conf.katakanaClass)){
68			this.value = valueConvertor.toZenkanaCase(this.value);
69			this.value = valueConvertor.toKatakanaCase(this.value);
70			this.value = valueConvertor.toPaddingCase(this.value);
71		}
72		
73		if(this.className.match(valueConvertor.conf.fullwidthKanaClass)){
74			this.value = valueConvertor.toZenkanaCase(this.value);
75			this.value = valueConvertor.toPaddingCase(this.value);
76		}
77		else if(this.className.match(valueConvertor.conf.halfwidthKanaClass)){
78			this.value = valueConvertor.toHankanaCase(this.value);
79		}
80	},
81	
82	toAsciiCase : function(text){
83		var i, charCode, charArray = [];
84		for(i=text.length-1;0<=i;i--) {
85			charCode = charArray[i] = text.charCodeAt(i);
86			switch(true) {
87				case (charCode <= 0xff5e && 0xff01 <= charCode):
88					charArray[i] -= 0xfee0;
89					break;
90				case (charCode == 0x3000):
91					charArray[i] = 0x0020;
92					break;
93				case (charCode == 0x30FC):
94					charArray[i] = 0x002D;
95					break;
96			}
97		}
98		return String.fromCharCode.apply(null, charArray);
99	},
100	
101	toMultibyteCase : function(text){
102		var i, charCode, charArray = [];
103		for(i=text.length-1;0<=i;i--)
104		{
105			charCode = charArray[i] = text.charCodeAt(i);
106			switch(true) {
107				case (charCode <= 0x007E && 0x0021 <= charCode):
108					charArray[i] += 0xFEE0;
109					break;
110				case (charCode == 0x0020):
111					charArray[i] = 0x3000;
112					break;
113			}
114		}
115		return String.fromCharCode.apply(null, charArray);	
116	},
117	
118	toZenkanaCase : function(text){
119		var i, charCode, m, charArray = [];
120		m =
121		{
122			0xFF66:0x30F2, 0xFF67:0x30A1, 0xFF68:0x30A3, 0xFF69:0x30A5, 0xFF6A:0x30A7,
123			0xFF6B:0x30A9, 0xff6c:0x30e3, 0xff6d:0x30e5, 0xff6e:0x30e7, 0xff6f:0x30c3,
124			0xFF70:0x30FC, 0xFF71:0x30A2, 0xFF72:0x30A4, 0xFF73:0x30A6, 0xFF74:0x30A8,
125			0xFF75:0x30AA, 0xFF76:0x30AB, 0xFF77:0x30AD, 0xFF78:0x30AF, 0xFF79:0x30B1,
126			0xFF7A:0x30B3, 0xFF7B:0x30B5, 0xFF7C:0x30B7, 0xFF7D:0x30B9, 0xFF7E:0x30BB,
127			0xFF7F:0x30BD, 0xFF80:0x30BF, 0xFF81:0x30C1, 0xFF82:0x30C4, 0xFF83:0x30C6,
128			0xFF84:0x30C8, 0xFF85:0x30CA, 0xFF86:0x30CB, 0xFF87:0x30CC, 0xFF88:0x30CD,
129			0xFF89:0x30CE, 0xFF8A:0x30CF, 0xFF8B:0x30D2, 0xFF8C:0x30D5, 0xFF8D:0x30D8,
130			0xFF8E:0x30DB, 0xFF8F:0x30DE, 0xFF90:0x30DF, 0xFF91:0x30E0, 0xFF92:0x30E1,
131			0xFF93:0x30E2, 0xFF94:0x30E4, 0xFF95:0x30E6, 0xFF96:0x30E8, 0xFF97:0x30E9,
132			0xFF98:0x30EA, 0xFF99:0x30EB, 0xFF9A:0x30EC, 0xFF9B:0x30ED, 0xFF9C:0x30EF,
133			0xFF9D:0x30F3, 0xFF9E:0x309B, 0xFF9F:0x309C
134		};
135		
136		for(i=text.length-1;0<=i;i--){
137			charCode = text.charCodeAt(i);
138			if (m[charCode]){
139				charArray[i] = m[charCode];
140			}
141			else{
142				charArray[i] = charCode;
143			}
144		}
145		
146		return String.fromCharCode.apply(null, charArray);
147	},
148	
149	toHankanaCase : function(text){
150		var i, charCode, m, charArray = [];
151		m =
152		{
153			0x30A1:0xFF67, 0x30A3:0xFF68, 0x30A5:0xFF69, 0x30A7:0xFF6A, 0x30A9:0xFF6B,
154			0x30e3:0xff6c, 0x30e5:0xff6d, 0x30e7:0xff6e, 0x30c3:0xff6f, 0x30FC:0xFF70,
155			0x30A2:0xFF71, 0x30A4:0xFF72, 0x30A6:0xFF73, 0x30A8:0xFF74, 0x30AA:0xFF75,
156			0x30AB:0xFF76, 0x30AD:0xFF77, 0x30AF:0xFF78, 0x30B1:0xFF79, 0x30B3:0xFF7A,
157			0x30B5:0xFF7B, 0x30B7:0xFF7C, 0x30B9:0xFF7D, 0x30BB:0xFF7E, 0x30BD:0xFF7F,
158			0x30BF:0xFF80, 0x30C1:0xFF81, 0x30C4:0xFF82, 0x30C6:0xFF83, 0x30C8:0xFF84,
159			0x30CA:0xFF85, 0x30CB:0xFF86, 0x30CC:0xFF87, 0x30CD:0xFF88, 0x30CE:0xFF89,
160			0x30CF:0xFF8A, 0x30D2:0xFF8B, 0x30D5:0xFF8C, 0x30D8:0xFF8D, 0x30DB:0xFF8E,
161			0x30DE:0xFF8F, 0x30DF:0xFF90, 0x30E0:0xFF91, 0x30E1:0xFF92, 0x30E2:0xFF93,
162			0x30E4:0xFF94, 0x30E6:0xFF95, 0x30E8:0xFF96, 0x30E9:0xFF97, 0x30EA:0xFF98,
163			0x30EB:0xFF99, 0x30EC:0xFF9A, 0x30ED:0xFF9B, 0x30EF:0xFF9C, 0x30F3:0xFF9D,
164			0x309B:0xFF9E, 0x309C:0xFF9F, 0x30F2:0xFF66
165		};
166		for(i=0;i<text.length;i++) {
167			charCode = text.charCodeAt(i);
168			switch(true) {
169				case (charCode in m):
170					charArray.push(m[charCode]);
171					break;
172				case (0x30AB <= charCode && charCode <= 0x30C9):
173					charArray.push(m[charCode-1], 0xFF9E);
174					break;
175				case (0x30CF <= charCode && charCode <= 0x30DD):
176					charArray.push(m[charCode-charCode%3], [0xFF9E,0xFF9F][charCode%3-1]);
177					break;
178				case (0x30f4 == charCode):
179					charArray.push(0xff73, 0xFF9E);
180					break;
181				default:
182					charArray.push(charCode);
183					break;
184			}
185		}
186		return String.fromCharCode.apply(null, charArray);
187	},
188	
189	toHiraganaCase : function(text){
190		var i, charCode, charArray = [];
191		for(i=text.length-1;0<=i;i--){
192			charCode = text.charCodeAt(i);
193			charArray[i] = (0x30A1 <= charCode && charCode <= 0x30F6) ? charCode - 0x0060 : charCode;
194		}
195		return String.fromCharCode.apply(null, charArray);
196	},
197	
198	toKatakanaCase : function(text){
199		var i, charCode, m, charArray = [];
200		for(i=text.length-1;0<=i;i--){
201			charCode = text.charCodeAt(i);
202			if(0x3041 <= charCode && charCode <= 0x3096){
203				charArray[i] = charCode + 0x0060 ;
204			}
205			else{
206				charArray[i] = charCode;
207			}
208		}
209		return String.fromCharCode.apply(null, charArray);
210	},
211		
212	//半角の濁点、半角の半濁点の処理
213	toPaddingCase : function(text){
214		var i, charCode, charArray = [];
215		for(i=0;i<text.length;i++)
216		{
217			charCode = text.charCodeAt(i);
218			switch(true)
219			{
220				case (0x304B <= charCode && charCode <= 0x3062 && (charCode % 2 == 1)):
221				case (0x30AB <= charCode && charCode <= 0x30C2 && (charCode % 2 == 1)):
222				case (0x3064 <= charCode && charCode <= 0x3069 && (charCode % 2 == 0)):
223				case (0x30C4 <= charCode && charCode <= 0x30C9 && (charCode % 2 == 0)):
224					charArray.push(charCode + ({0x309B:1}[text.charCodeAt(i+1)] || 0));
225					if(charArray[charArray.length-1] != charCode){ i++; };
226					break;
227				case (0x306F <= charCode && charCode <= 0x307F && (charCode % 3 == 0)):
228				case (0x30CF <= charCode && charCode <= 0x30DD && (charCode % 3 == 0)):
229					charArray.push(charCode + ({0x309B:1,0x309C:2}[text.charCodeAt(i+1)] || 0));
230					if(charArray[charArray.length-1] != charCode){ i++; };
231					break;
232				case (0x3046 == charCode || 0x30a6 == charCode):
233					charArray.push(charCode + ({0x309B:78}[text.charCodeAt(i+1)] || 0));
234					if(charArray[charArray.length-1] != charCode){ i++; };
235					break;
236				default:
237					charArray.push(charCode);
238					break;
239				}
240		}
241		return String.fromCharCode.apply(null, charArray);
242	},
243	
244	addEvent : function(){
245		try {
246			window.addEventListener('load', this.main, false);
247		} catch (e) {
248			window.attachEvent('onload', this.main);
249		}
250	}
251	
252}
253
254valueConvertor.addEvent();

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.