PageSourceSearch

https://static.syosetu.com/view/js/lib/jquery.hina.js?t4tsco

js syosetu.com collected 2026-09-24 08:46:36 UTC 32,062 bytes, 1,036 lines download raw bytes

1// jQuery用プラグイン集
2
3/**
4 * Polyfill
5 * UTCでの1970年1月1日0時0分0秒から現在までの経過時間をミリ秒単位で取得
6 *
7 * @return number
8 */
9if(!Date.now){
10	Date.now = function(){
11		return new Date().getTime();
12	};
13}
14
15/**
16 * クッキーを制御
17 *
18 * @requires jQuery
19 * @author 株式会社ヒナプロジェクト
20 * @version 1.0.1
21 */
22(function($){
23$.extend({cookie:function(key, value, settings){
24
25	// 全てのクッキーをオブジェクトで取得
26	var data = {};
27	if(document.cookie){
28		$.each(document.cookie.split('; '), function(i, v){
29			var kvPair = v.split('=');
30			data[decodeURIComponent(kvPair[0])] = decodeURIComponent(kvPair[1]);
31		});
32	}
33
34	// キーの指定が無ければ全て取得
35	if(typeof key == 'undefined'){return data;}
36
37	// 値の指定が無ければ取得
38	if(typeof value == 'undefined'){
39		value = (key in data) ? data[key] : null;
40		return value;
41	}
42
43	// パラメータを初期化
44	var params = [];
45	if(!settings){settings = {};}
46
47	// 古い値を取得
48	var oldValue = (key in data) ? data[key] : null;
49
50	// キーと値を追加
51	params.push(encodeURIComponent(key) + '=' + encodeURIComponent(value));
52
53	// パスが指定されている場合
54	if('path' in settings){params.push('path=' + settings['path']);}
55
56	// ドメインが指定されている場合
57	if('domain' in settings){params.push('domain=' + settings['domain']);}
58
59	// 無効な値が指定されていれば削除処理
60	if((value === false) || (value === null) || ((typeof value == 'string') && !value.length)){
61		settings['max-age'] = settings['expires'] = 0;
62	}
63
64	// 寿命が指定されている場合
65	if('max-age' in settings){
66		params.push('max-age=' + settings['max-age']);
67		// 有効期限を寿命に沿った値に変更
68		settings['expires'] = new Date(Date.now() + (settings['max-age'] * 1000)).toUTCString();
69	}
70
71	// 有効期限が指定されている場合
72	if('expires' in settings){
73		if(typeof settings['expires'] == 'number'){
74			params.push('expires=' + new Date(settings['expires']).toUTCString());
75		}else{
76			params.push('expires=' + settings['expires']);
77		}
78	}
79
80	// セキュア属性が指定されている場合
81	if('secure' in settings){params.push('secure');}
82
83	// バージョンが指定されている場合
84	if('version' in settings){params.push('version=' + encodeURIComponent(settings['version']));}
85
86	// コメントが指定されている場合
87	if('comment' in settings){params.push('comment=' + encodeURIComponent(settings['comment']));}
88
89	// クッキーを書き込み
90	document.cookie = params.join('; ');
91
92	// 古い値を返す
93	return oldValue;
94
95}});
96})(jQuery);
97
98/**
99 * ウェブストレージを制御
100 *
101 * @requires jQuery
102 * @author 株式会社ヒナプロジェクト
103 * @version 1.0.1
104 */
105(function($){
106$.extend({storage:function(key, value, settings){
107
108	// パラメータを初期化
109	if(!settings){settings = {};}
110	if(!('type' in settings)){settings['type'] = 'local';}
111
112	// ストレージの種類を取得
113	var storage = (settings['type'] == 'session') ? sessionStorage : localStorage;
114
115	// キーの指定が無ければ全てのデータをオブジェクトで取得
116	if(typeof key == 'undefined'){
117		var data = {}, index = 0;
118		while((key = storage.key(index)) !== null){
119			value = storage.getItem(key);
120			try{
121				var parseValue = JSON.parse(value);
122				data[key] = parseValue;
123			}catch(exception){
124				data[key] = value;
125			}
126			++index;
127		}
128		return data;
129	}
130
131	// 値の指定が無ければ読み込み
132	if(typeof value == 'undefined'){
133		value = storage.getItem(key);
134		if(value !== null){
135			try{
136				var parseValue = JSON.parse(value);
137				value = parseValue;
138			}catch(exception){
139			}
140		}
141		return value;
142	}
143
144	// 古い値を取得
145	var oldValue = storage.getItem(key);
146	if(oldValue !== null){
147		try{
148			var parseValue = JSON.parse(oldValue);
149			oldValue = parseValue;
150		}catch(exception){
151		}
152	}
153
154	// 無効な値が指定されていれば削除処理
155	if((value === false) || (value === null) || !value.length){
156		storage.removeItem(key);
157		return oldValue;
158	}
159
160	// 値をJSON文字列にシリアライズ
161	var jsonValue = JSON.stringify(value);
162
163	// 値を保存
164	storage.setItem(key, value);
165
166	return oldValue;
167
168}});
169})(jQuery);
170
171/**
172 * スマートフォンかどうか判別
173 *
174 * @requires jQuery
175 * @author 株式会社ヒナプロジェクト
176 * @version 1.0.1
177 */
178(function($){
179$.extend({isSmartPhone:function(){
180
181	if(navigator.userAgent.match(/i(Phone|Pod)/)){
182		// iPhoneまたはiPodの場合
183		return true;
184	}else if(navigator.userAgent.match(/Android/) && navigator.userAgent.match(/Mobile/)){
185		// Androidかつモバイルの場合
186		return true;
187	}else if(navigator.userAgent.match(/Windows Phone/)){
188		// Windows Phoneの場合
189		return true;
190	}else if(navigator.userAgent.match(/BlackBerry/)){
191		// BlackBerryの場合
192		return true;
193	}
194
195	return false;
196
197}});
198})(jQuery);
199
200/**
201 * タブレットかどうか判別
202 *
203 * @requires jQuery
204 * @author 株式会社ヒナプロジェクト
205 * @version 1.0.1
206 */
207(function($){
208$.extend({isTablet:function(){
209
210	var result = false;
211
212	if(navigator.userAgent.match(/iPad/)){
213		// iPadの場合
214		return true;
215	}else if(navigator.userAgent.match(/Android/) && !navigator.userAgent.match(/Mobile/)){
216		// Androidかつモバイルではない場合
217		return true;
218	}
219
220	return false;
221
222}});
223})(jQuery);
224
225/**
226 * Android端末かどうか判別
227 *
228 * @requires jQuery
229 * @author 株式会社ヒナプロジェクト
230 * @version 1.0.1
231 */
232(function($){
233$.extend({isAndroid:function(){
234
235	return navigator.userAgent.match(/Android/) ? true : false;
236
237}});
238})(jQuery);
239
240/**
241 * Apple端末かどうか判別
242 *
243 * @requires jQuery
244 * @author 株式会社ヒナプロジェクト
245 * @version 1.0.1
246 */
247(function($){
248$.extend({isApple:function(){
249
250	return navigator.userAgent.match(/i(Phone|Pod|Pad)/) ? true : false;
251
252}});
253})(jQuery);
254
255/**
256 * タッチ可能端末かどうか判別
257 *
258 * @requires jQuery
259 * @author 株式会社ヒナプロジェクト
260 * @version 1.0.0
261 */
262(function($){
263$.extend({isTouch:function(){
264
265	return ('TouchEvent' in window) ? true : false;
266
267}});
268})(jQuery);
269
270/**
271 * IEブラウザかどうか判別
272 *
273 * @requires jQuery
274 * @author 株式会社ヒナプロジェクト
275 * @version 1.0.0
276 */
277(function($){
278$.extend({isIE:function(){
279
280	return navigator.userAgent.match(/(MSIE|Trident)/) ? true : false;
281
282}});
283})(jQuery);
284
285/**
286 * Edgeブラウザかどうか判別
287 *
288 * @requires jQuery
289 * @author 株式会社ヒナプロジェクト
290 * @version 1.0.1
291 */
292(function($){
293$.extend({isEdge:function(){
294
295	return navigator.userAgent.match(/Edge/) ? true : false;
296
297}});
298})(jQuery);
299
300/**
301 * Chromeブラウザかどうか判別
302 *
303 * @requires jQuery
304 * @author 株式会社ヒナプロジェクト
305 * @version 1.0.0
306 */
307(function($){
308$.extend({isChrome:function(){
309
310	return navigator.userAgent.match(/(Chrome|CriOS)/) ? true : false;
311
312}});
313})(jQuery);
314
315/**
316 * Chromiumブラウザかどうか判別
317 *
318 * @requires jQuery
319 * @author 株式会社ヒナプロジェクト
320 * @version 1.0.0
321 */
322(function($){
323$.extend({isChromium:function(){
324
325	return navigator.userAgent.match(/Chromium/) ? true : false;
326
327}});
328})(jQuery);
329
330/**
331 * Firefoxブラウザかどうか判別
332 *
333 * @requires jQuery
334 * @author 株式会社ヒナプロジェクト
335 * @version 1.0.0
336 */
337(function($){
338$.extend({isFirefox:function(){
339
340	return navigator.userAgent.match(/(Firefox|FxiOS)/) ? true : false;
341
342}});
343})(jQuery);
344
345/**
346 * Safariブラウザかどうか判別
347 *
348 * @requires jQuery
349 * @author 株式会社ヒナプロジェクト
350 * @version 1.0.1
351 */
352(function($){
353$.extend({isSafari:function(){
354
355	return (!$.isChrome() && navigator.userAgent.match(/Safari/)) ? true : false;
356
357}});
358})(jQuery);
359
360/**
361 * Operaブラウザかどうか判別
362 *
363 * @requires jQuery
364 * @author 株式会社ヒナプロジェクト
365 * @version 1.0.0
366 */
367(function($){
368$.extend({isOpera:function(){
369
370	return navigator.userAgent.match(/Opera/) ? true : false;
371
372}});
373})(jQuery);
374
375/**
376 * プライベートブラウズかどうか判別
377 *
378 * @requires jQuery
379 * @author 株式会社ヒナプロジェクト
380 * @version 1.0.1
381 */
382(function($){
383$.extend({isPrivateBrowse:function(){
384
385	if(!window.localStorage){return false;}
386
387	var key = 'isPrivateBrowse-' + Math.random();
388	if($.isSafari()){
389		try{
390			localStorage.setItem(key, true);
391			localStorage.removeItem(key);
392		}catch(e){
393			if(e.code && (e.code == 22)) return true;
394		}
395	}
396
397	return false;
398
399}});
400})(jQuery);
401
402/**
403 * 特殊文字をHTMLエンティティに変換
404 *
405 * @requires jQuery
406 * @author 株式会社ヒナプロジェクト
407 * @version 1.0.0
408 */
409(function($){
410$.extend({htmlspecialchars:function(string, options){
411
412	if((typeof string == 'undefined') || (string === null)){return string;}
413	if(typeof string != 'string'){string = new String(string);}
414
415	// デフォルト引数を取得
416	var settings = $.extend({compat:true, quotes:false, noquotes:false}, options);
417
418	// 変換
419	string = string.replace(/&/g, '&amp;').replace(/</g, '&lt;').replace(/>/g, '&gt;');
420	if(settings.compat){
421		string = string.replace(/\"/g, '&quot;');
422	}else if(settings.quotes){
423		string = string.replace(/\'/g, '&apos;').replace(/\"/g, '&quot;');
424	}else if(settings.noquotes){
425	}
426
427	return string;
428
429}});
430})(jQuery);
431
432/**
433 * 文字列に含まれる全角文字の連想配列を取得
434 *
435 * @requires jQuery
436 * @author 株式会社ヒナプロジェクト
437 * @version 1.0.0
438 */
439(function($){
440$.extend({findFullWidthCharacter:function(string){
441
442	var result = {}
442, charCode;
443
444	for(var i = 0; i < string.length; ++i){
445		charCode = string.charCodeAt(i);
446		if(!isNaN(charCode) && (charCode > 255)){result[i] = string.charAt(i);}
447	}
448
449	return Object.keys(result).length ? result : null;
450
451}});
452})(jQuery);
453
454/**
455 * 文字列に含まれる半角文字を全角に変換する
456 */
457(function($){
458const fullKanaList = ['。', '「', '」', '、', '・', 'ヲ', 'ァ', 'ィ', 'ゥ', 'ェ', 'ォ', 'ャ', 'ュ', 'ョ', 'ッ', 'ー', 'ア', 'イ', 'ウ', 'エ', 'オ', 'カ', 'キ', 'ク', 'ケ', 'コ', 'サ', 'シ', 'ス', 'セ', 'ソ', 'タ', 'チ', 'ツ', 'テ', 'ト', 'ナ', 'ニ', 'ヌ', 'ネ', 'ノ', 'ハ', 'ヒ', 'フ', 'ヘ', 'ホ', 'マ', 'ミ', 'ム', 'メ', 'モ', 'ヤ', 'ユ', 'ヨ', 'ラ', 'リ', 'ル', 'レ', 'ロ', 'ワ', 'ン', '゛', '゜', 'ヺ', 'ヴ', 'ガ', 'ギ', 'グ', 'ゲ', 'ゴ', 'ザ', 'ジ', 'ズ', 'ゼ', 'ゾ', 'ダ', 'ヂ', 'ヅ', 'デ', 'ド', 'バ', 'パ', 'ビ', 'ピ', 'ブ', 'プ', 'ベ', 'ペ', 'ボ', 'ポ', 'ヷ'];
459const halfKanaList = ['。', '「', '」', '、', '・', 'ヲ', 'ァ', 'ィ', 'ゥ', 'ェ', 'ォ', 'ャ', 'ュ', 'ョ', 'ッ', 'ー', 'ア', 'イ', 'ウ', 'エ', 'オ', 'カ', 'キ', 'ク', 'ケ', 'コ', 'サ', 'シ', 'ス', 'セ', 'ソ', 'タ', 'チ', 'ツ', 'テ', 'ト', 'ナ', 'ニ', 'ヌ', 'ネ', 'ノ', 'ハ', 'ヒ', 'フ', 'ヘ', 'ホ', 'マ', 'ミ', 'ム', 'メ', 'モ', 'ヤ', 'ユ', 'ヨ', 'ラ', 'リ', 'ル', 'レ', 'ロ', 'ワ', 'ン', '゙', '゚', 'ヺ', 'ヴ', 'ガ', 'ギ', 'グ', 'ゲ', 'ゴ', 'ザ', 'ジ', 'ズ', 'ゼ', 'ゾ', 'ダ', 'ヂ', 'ヅ', 'デ', 'ド', 'バ', 'パ', 'ビ', 'ピ', 'ブ', 'プ', 'ベ', 'ペ', 'ボ', 'ポ', 'ヷ'];
460
461$.extend({toZenkaku:function(string, option = 'NESK'){
462	let modeList = Array.from(option);
463	modeList.forEach((mode) => {
464		switch(mode){
465			// 半角数値⇒全角数値
466			case 'N':
467				string = string.replace(/[0-9]/g, function(s) {
468					return String.fromCharCode(s.charCodeAt(0) + 0xFEE0);
469				});
470				break;
471			// 半角英字⇒全角英字
472			case 'E':
473				string = string.replace(/[A-Za-z]/g, function(s) {
474					return String.fromCharCode(s.charCodeAt(0) + 0xFEE0);
475				});
476				break;
477			// 半角スペース⇒全角スペース
478			case 'S':
479				string = string.replaceAll(' ', ' ');
480				break;
481			// 半角カタカナ⇒全角カタカナ
482			case 'K':
483				string = string.replace(/([\uff66-\uff9c]\uff9e)|([\uff8a-\uff8e]\uff9f)|([\uff61-\uff9f])/g, function(s) {
484					let key = halfKanaList.indexOf(s);
485					return fullKanaList[key];
486				});
487				break;
488		}
489	});
490	return string;
491}});
492$.extend({toHankaku:function(string, option = 'NESK'){
493	let modeList = Array.from(option);
494	modeList.forEach((mode) => {
495		switch(mode){
496			// 半角数値⇒全角数値
497			case 'N':
498				string = string.replace(/[0-9]/g, function(s) {
499					return String.fromCharCode(s.charCodeAt(0) - 0xFEE0);
500				});
501				break;
502			// 半角英字⇒全角英字
503			case 'E':
504				string = string.replace(/[A-Za-z]/g, function(s) {
505					return String.fromCharCode(s.charCodeAt(0) - 0xFEE0);
506				});
507				break;
508			// 半角スペース⇒全角スペース
509			case 'S':
510				string = string.replaceAll(' ', ' ');
511				break;
512			// 半角カタカナ⇒全角カタカナ
513			case 'K':
514				string = string.replace(/([\u30a1-\u30f6])/g, function(s) {
515					let key = fullKanaList.indexOf(s);
516					return halfKanaList[key];
517				});
518				break;
519		}
520	});
521	return string;
522}});
523})(jQuery);
524
525/**
526 * 文字列に含まれる半角文字の連想配列を取得
527 *
528 * @requires jQuery
529 * @author 株式会社ヒナプロジェクト
530 * @version 1.0.0
531 */
532(function($){
533$.extend({findHalfWidthCharacter:function(string){
534
535	var result = {}, charCode;
536
537	for(var i = 0; i < string.length; ++i){
538		charCode = string.charCodeAt(i);
539		if(!isNaN(charCode) && (charCode <= 255)){result[i] = string.charAt(i);}
540	}
541
542	return Object.keys(result).length ? result : null;
543
544}});
545})(jQuery);
546
547/**
548 * 文字列に含まれるサロゲートペアの配列を取得
549 *
550 * @requires jQuery
551 * @author 株式会社ヒナプロジェクト
552 * @version 1.0.0
553 */
554(function($){
555$.extend({findSurrogatePair:function(string){
556
557	return string.match(/([\uD800-\uDBFF][\uDC00-\uDFFF])/g);
558
559}});
560})(jQuery);
561
562/**
563 * 対象要素をプログレスバー画像に変更
564 *
565 * @requires jQuery
566 * @author 株式会社ヒナプロジェクト
567 * @version 1.0.1
568 */
569(function($){
570$.fn.extend({progressImage:function(options){
571
572	// デフォルト引数を取得
573	var settings = $.extend({src:'data:image/gif;base64,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', alt:'送信中', title:'送信中', id:null, customClass:null}, options);
574
575	// 画像を作成
576	var $img = $('<img/>').attr({src:settings.src, alt:settings.alt, title:settings.title});
577
578	// idの指定があれば追加
579	if(settings.id){$img.attr('id', settings.id);}
580
581	// customClassの指定があれば追加
582	if(settings.customClass){$img.addClass($.isArray(settings.customClass) ? settings.customClass.join(' ') : settings.customClass);}
583
584	// 画像に置換
585	this.replaceWith($img);
586
587	return this;
588
589}});
590})(jQuery);
591
592/**
593 * ローディング画像をモーダル表示
594 *
595 * @requires jQuery
596 * @author 株式会社ヒナプロジェクト
597 * @version 1.0.1
598 */
599(function($){
600$.extend({loading:function(options){
601
602	// デフォルト引数を取得
603	var settings = $.extend({method:'show', customClass:null, parentElement:null}, options);
604
605	if(settings.method == 'show'){
606		// モーダル要素を作成して表示
607		if(!$('.jquery-hina-loading').length){
608			var $loading = $('<div/>').addClass('jquery-hina-loading');
609			if(settings.customClass){$loading.addClass(settings.customClass);}
610
611			// 親要素を使用する場合
612			if (settings.parentElement) {
613				// body 要素の最後に要素を追加
614				$(settings.parentElement).appendTo('body');
615
616				// bodyの子要素の最後にライブラリ用のクラスを追加
617				$('body').children().last().addClass('jquery-hina-loading');
618
619				// bodyの子要素の最後にローディングモーダルを追加
620				$('body').children().last().append($loading);
621
622			// デフォルト
623			}else{
624				$loading.appendTo('body')
625			}
626
627		}
628	}else if(settings.method == 'hide'){
629		// モーダル要素を削除
630		$('.jquery-hina-loading').remove();
631	}
632
633	return this;
634
635}});
636})(jQuery);
637
638/**
639 * トーストを表示
640 *
641 * @requires jQuery
642 * @author 株式会社ヒナプロジェクト
643 * @version 1.0.1
644 */
645(function($){
646$.extend({toast:function(text, title, options){
647
648	// デフォルト引数を取得
649	if(typeof text == 'undefined'){text = null;}
650	if(typeof title == 'undefined'){title = null;}
651	var settings = $.extend({nl2br:true, html:false, position:'center-middle', customClass:null, attr:{}, css:{}, duration:'fast', displayTime:2000, closeByTap:false, showCloseButton:false, closeButtonText:'×'}, options);
652
653	// 属性を初期化
654	if(!settings.attr){settings.attr = {};}
655	if(!settings.attr.box){settings.attr.box = {};}
656	if(!settings.attr.closeButton){settings.attr.closeButton = {};}
657	if(!settings.attr.title){settings.attr.title = {};}
658	if(!settings.attr.text){settings.attr.text = {};}
659
660	// CSSを初期化
661	if(!settings.css){settings.css = {};}
662	if(!settings.css.box){settings.css.box = {};}
663	if(!settings.css.closeButton){settings.css.closeButton = {};}
664	if(!settings.css.title){settings.css.title = {};}
665	if(!settings.css.text){settings.css.text = {};}
666
667	// ブロック要素を作成
668	var $toast = $('<div/>').addClass('jquery-hina-toast-box');
669	if(settings.customClass){$toast.addClass(settings.customClass);}
670	if(settings.attr.box){$toast.attr(settings.attr.box);}
671	if(settings.css.box){$toast.css(settings.css.box);}
672
673	// 閉じるボタンの表示指定があれば追加
674	if(settings.showCloseButton){
675		var $bar = $('<p/>').addClass('jquery-hina-toast-bar');
676		var $closeButton = $('<a/>').addClass('jquery-hina-toast-close-button').attr('href', 'javascript:void(0);').text(settings.closeButtonText);
677		if(settings.attr.closeButton){$closeButton.attr(settings.attr.closeButton);}
678		if(settings.css.closeButton){$closeButton.css(settings.css.closeButton);}
679		$closeButton.click(function(event){
680			$toast.animate({opacity:'hide'}, settings.duration, function(){
681				$(this).remove();
682			});
683		});
684		$closeButton.appendTo($bar);
685		$bar.appendTo($toast);
686	}
687
688	// タイトルの指定があれば追加
689	if(title){
690		var $title = $('<p/>').addClass('jquery-hina-toast-title').text(title);
691		if(settings.attr.title){$title.attr(settings.attr.title);}
692		if(settings.css.title){$title.css(settings.css.title);}
693		$title.appendTo($toast);
694	}
695
696	// 内容の指定があれば追加
697	if(text){
698		var $text = $('<p/>').addClass('jquery-hina-toast-text');
699		if(settings.attr.text){$text.attr(settings.attr.text);}
700		if(settings.css.text){$text.css(settings.css.text);}
701		if(!settings.html){text = $('<p/>').text(text).html();}
702		if(settings.nl2br){text = text.replace(/[\r\n]/g, '<br />');}
703		$text.html(text).appendTo($toast);
704	}
705
706	// タップ動作で閉じる指定があればイベント処理を追加
707	if(settings.closeByTap){
708		$toast.click(function(event){
709			$(this).animate({opacity:'hide'}, settings.duration, function(){
710				$(this).remove();
711			});
712		});
713	}
714
715	// DOMを挿入
716	$toast.appendTo('body');
717
718	// 位置の指定がある場合
719	if(settings.position){
720		if($.isPlainObject(settings.position)){
721			$toast.css(settings.position);
722		}else{
723			var positionList = settings.position.toLowerCase().split('-');
724			if(positionList.length == 2){
725				var position = {};
726
727				if(positionList[0] == 'left'){
728					position.left = 0;
729				}else if(positionList[0] == 'center'){
730					position.left = ($(window).width() / 2) - ($toast.width() / 2);
731				}else if(positionList[0] == 'right'){
732					position.right = 0;
733				}
734
735				if(positionList[1] == 'top'){
736					position.top = 0;
737				}else if(positionList[1] == 'middle'){
738					position.top = ($(window).height() / 2) - ($toast.height() / 2);
739				}else if(positionList[1] == 'bottom'){
740					position.bottom = 0;
741				}
742
743				$toast.css(position);
744			}
745		}
746	}
747
748	// 表示
749	$toast.animate({opacity:'show'}, settings.duration, function(){
750		// 表示時間の指定がある場合はフェードアウト開始用のタイマーを作成
751		if(settings.displayTime && (settings.displayTime > 0)){
752			setTimeout(function(){
753				$toast.animate({opacity:'hide'}, settings.duration, function(){
754					$(this).remove();
755				});
756			}, settings.displayTime);
757		}
758	});
759
760	return this;
761
762}});
763})(jQuery);
764
765/**
766 * 対象要素を起点にトーストを表示
767 *
768 * @requires jQuery
769 * @author 株式会社ヒナプロジェクト
770 * @version 1.0.0
771 */
772(function($){
773$.fn.extend({toast:function(text, title, options){
774
775	// デフォルト引数を取得
776	if(typeof text == 'undefined'){text = null;}
777	if(typeof title == 'undefined'){title = null;}
778	var settings = $.extend({nl2br:true, html:false, position:'center-bottom', customClass:null, attr:{}, css:{}, duration:'fast', displayTime:2000, showCloseButton:false, closeByTouch:false}, options);
779
780	// 属性を初期化
781	if(!settings.attr){settings.attr = {};}
782	if(!settings.attr.box){settings.attr.box = {};}
783	if(!settings.attr.closeButton){settings.attr.closeButton = {};}
784	if(!settings.attr.title){settings.attr.title = {};}
785	if(!settings.attr.text){settings.attr.text = {};}
786
787	// CSSを初期化
788	if(!settings.css){settings.css = {};}
789	if(!settings.css.box){settings.css.box = {};}
790	if(!settings.css.closeButton){settings.css.closeButton = {};}
791	if(!settings.css.title){settings.css.title = {};}
792	if(!settings.css.text){settings.css.text = {};}
793
794	// 要素毎にトーストを表示
795	this.each(function(){
796		// ブロック要素を作成
797		var $toast = $('<div/>').addClass('jquery-hina-toast-box').css('position', 'absolute');
798		if(settings.customClass){$toast.addClass(settings.customClass);}
799		if(settings.attr.box){$toast.attr(settings.attr.box);}
800		if(settings.css.box){$toast.css(settings.css.box);}
801
802		// 閉じるボタンの表示指定があれば追加
803		if(settings.showCloseButton){
804			var $bar = $('<p/>').addClass('jquery-hina-toast-bar');
805			var $closeButton = $('<a/>').addClass('jquery-hina-toast-close-button').attr('href', 'javascript:void(0);
805').text(settings.closeButtonText);
806			if(settings.attr.closeButton){$closeButton.attr(settings.attr.closeButton);}
807			if(settings.css.closeButton){$closeButton.css(settings.css.closeButton);}
808			$closeButton.click(function(event){
809				$toast.animate({opacity:'hide'}, settings.duration, function(){
810					$(this).remove();
811				});
812			});
813			$closeButton.appendTo($bar);
814			$bar.appendTo($toast);
815		}
816
817		// タイトルの指定があれば追加
818		if(title){
819			var $title = $('<p/>').addClass('jquery-hina-toast-title').text(title);
820			if(settings.attr.title){$title.attr(settings.attr.title);}
821			if(settings.css.title){$title.css(settings.css.title);}
822			$title.appendTo($toast);
823		}
824
825		// 内容の指定があれば追加
826		if(text){
827			var $text = $('<p/>').addClass('jquery-hina-toast-text');
828			if(settings.attr.text){$text.attr(settings.attr.text);}
829			if(settings.css.text){$text.css(settings.css.text);}
830			if(!settings.html){text = $('<p/>').text(text).html();}
831			if(settings.nl2br){text = text.replace(/[\r\n]/g, '<br />');}
832			$text.html(text).appendTo($toast);
833		}
834
835		// タップ動作で閉じる指定があればイベント処理を追加
836		if(settings.closeByTap){
837			$toast.click(function(event){
838				$(this).animate({opacity:'hide'}, settings.duration, function(){
839					$(this).remove();
840				});
841			});
842		}
843
844		// DOMを挿入
845		$toast.appendTo('body');
846
847		// 位置の指定がある場合
848		if(settings.position){
849			if($.isPlainObject(settings.position)){
850				$toast.css(settings.position);
851			}else{
852				var positionList = settings.position.toLowerCase().split('-');
853				if(positionList.length == 2){
854					var position = {}, offset = $(this).offset();
855
856					if(positionList[0] == 'left'){
857						position.left = offset.left - $toast.outerWidth();
858					}else if(positionList[0] == 'center'){
859						position.left = offset.left + ($(this).outerWidth() / 2) - ($toast.outerWidth() / 2);
860					}else if(positionList[0] == 'right'){
861						position.left = offset.left + $(this).outerWidth();
862					}
863
864					if(positionList[1] == 'top'){
865						position.top = offset.top - $toast.outerHeight();
866					}else if(positionList[1] == 'middle'){
867						position.top = offset.top + ($(this).outerHeight() / 2) - ($toast.outerHeight() / 2);
868					}else if(positionList[1] == 'bottom'){
869						position.top = offset.top + $(this).outerHeight();
870					}
871
872					$toast.css(position);
873				}
874			}
875		}
876
877		// 表示
878		$toast.animate({opacity:'show'}, settings.duration, function(){
879			// 表示時間の指定がある場合はフェードアウト開始用のタイマーを作成
880			if(settings.displayTime && (settings.displayTime > 0)){
881				setTimeout(function(){
882					$toast.animate({opacity:'hide'}, settings.duration, function(){
883						$(this).remove();
884					});
885				}, settings.displayTime);
886			}
887		});
888	});
889
890	return this;
891
892}});
893})(jQuery);
894
895/**
896 * 対象要素のdisabled属性を変更
897 *
898 * @requires jQuery
899 * @author 株式会社ヒナプロジェクト
900 * @version 1.0.1
901 */
902(function($){
903$.fn.extend({disabled:function(delay, flag){
904
905	// delayの指定が無ければディレイを5000ミリ秒に指定
906	if(typeof delay == 'undefined'){delay = 5000;}
907
908	// flagの指定が無ければtrueを代入
909	if(typeof flag == 'undefined'){flag = true;}
910
911	// disabled属性を変更
912	this.prop('disabled', flag);
913
914	// ディレイの指定があれば指定時間経過後にdisabled属性を戻す
915	if(delay){
916		setTimeout(function($object){
917			$object.prop('disabled', !flag);
918		}, delay, this);
919	}
920
921	return this;
922
923}});
924})(jQuery);
925
926/**
927 * jQuery UIを使った単純なモーダルアラートダイアログを表示
928 *
929 * @requires jQuery
930 * @requires jQuery UI
931 * @author 株式会社ヒナプロジェクト
932 * @version 1.0.1
933 */
934(function($){
935$.extend({alert:function(message, title, settings){
936
937	if(typeof title == 'undefined'){title = null;}
938	settings = $.extend({
939		button: 'OK',
940		html: false
941	}, settings || {});
942	var $dialog = $('<div/>');
943	var params = {title:title, closeText:'閉じる', modal:true, resizable:false, buttons:{}};
944	params.buttons[settings.button] = function(){$(this).dialog('close').remove();};
945	var $message = $('<p/>').addClass('hina-ui-alert');
946	settings.html ? $message.html(message) : $message.text(message);
947	$message.appendTo($dialog);
948	$dialog.dialog(params);
949
950}});
951})(jQuery);
952
953/**
954 * 全ての要素の動的プロパティを静的属性に反映
955 *
956 * @requires jQuery
957 * @author 株式会社ヒナプロジェクト
958 * @version 1.0.0
959 */
960(function($){
961$.extend({prop2attr:function(){
962
963	// 入力要素の内容を属性に反映
964	$('input[type="text"],input[type="hidden"],input[type="password"]').each(function(){
965		$(this).attr('value', $(this).val());
966	});
967
968	// テキストエリアの内容を要素に反映
969	$('textarea').each(function(){
970		$(this).text($(this).val());
971	});
972
973	// オプション要素の選択を属性に反映
974	$('option').each(function(){
975		$(this).is(':selected') ? $(this).attr('selected', 'selected') : $(this).removeAttr('selected');
976	});
977
978	// ラジオボタン・チェックボックスの選択状態を属性に反映
979	$('input[type="radio"],input[type="checkbox"]').each(function(){
980		$(this).is(':checked') ? $(this).attr('checked', 'checked') : $(this).removeAttr('checked');
981	});
982
983	return this;
984
985}});
986})(jQuery);
987
988
989// 高さを自動調整
990(function($){
991	$.fn.autoHeight = function(defaultHeight, flag){
992
993		if(this.length == 0) return this;
994
995		if(typeof flag == 'undefined') flag = true;
996		defaultHeight = parseInt(defaultHeight, 10);
997
998		if(flag){
999			var parent = this;
1000
1001			if(isNaN(defaultHeight) || (defaultHeight <= 0)){
1002				defaultHeight = this.height();
1003			}else{
1004				this.height(defaultHeight);
1005			}
1006			this.css('overflow-y', 'hidden');
1007
1008			function setHeight(){
1009				var oldScrollTop = $(window).scrollTop();
1010				parent.height(0);
1011				var height = parseInt(parent.prop('scrollHeight'), 10);
1012				if(height < defaultHeight) height = defaultHeight;
1013				parent.height(height);
1014				var newScrollTop = $(window).scrollTop();
1015				if(newScrollTop != oldScrollTop) $(window).scrollTop(oldScrollTop);
1016			}
1017
1018			function resetHeight(){
1019				parent.height(defaultHeight);
1020			}
1021
1022			this
1023				.focus(setHeight)
1024				.keyup(setHeight)
1025		}else{
1026			this
1027				.unbind('focus')
1028				.unbind('keyup')
1029				.css('overflow-y', 'auto');
1030			if(!isNaN(defaultHeight) && (defaultHeight > 0)) this.height(defaultHeight);
1031		}
1032
1033		return this;
1034
1035	}
1036})(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.