PageSourceSearch

http://ehbook.co.kr/home/wp-content/themes/ehbook2014/js/lib.js?ver=0108

js ehbook.co.kr collected 2026-09-25 00:31:40 UTC 15,139 bytes, 607 lines download raw bytes

1$.fn.my_create_multi_field = function(_opts){
2	if( this.length==0 ) 
3		return;
4	
5	var defaults = {
6		add_button_label: '필드 추가'
7	};
8	var opts = $.extend(defaults, _opts);
9	
10	var t = this.wrapInner('<li/>').wrapInner('<ul/>');
11	var list = $('ul', t);
12	var btn = $('<a href="#" class="add button">' + opts.add_button_label + '</a>').appendTo(t);
13	var tmpl = $('li:eq(0)', t).clone();
14	
15	$('li:eq(0)', t).remove();
16	
17	list.sortable({	axis:'y'});
18	
19	btn.click(function(e){
20		e.preventDefault();
21		var field = tmpl.clone().append('&nbsp;<a href="#" class="x">제거</a>');
22		list.append(field);
23	});
24	
25	$('a.x', t).live('click', function(e){
26		e.preventDefault();
27		$(this).parent('li').remove();
28	});
29}
30
31$.fn.my_book_connect_field = function(_opts){
32	var t = this;
33	
34	var defaults = {
35		field_name: 'connect_book_id[]',
36		values: {book_id: '', book_title: ''},
37		callback: null,
38		s: '',
39		static_mode: false,
40		required: false,
41		modal: false
42	};
43	var opts = $.extend(defaults, _opts);
44	
45	if( !opts.static_mode && $.fn.sortable )
46		t.sortable({axis: 'y'});
47	
48	var html = '';
49	html += opts.static_mode ? '<span class="item">' : '<li class="item">';
50	
51	html += '<input type="text" value="'+opts.values.book_title+'" class="book-title regular-text" readonly="readonly"> ';
52	html += '<input type="hidden" name="'+opts.field_name+'" value="'+opts.values.book_id+'" class="book-id"> ';
53	html += opts.static_mode ? '</span>' : '</li>';
54	
55	var item = $(html).appendTo(t);
56	
57	if( opts.required )
58		item.find('.book-title').addClass('required');
59		
60	if( !opts.static_mode )
61		item.append(' <a href="#" class="delete">x</a> ');
62	
63	var result_click_cb = function(book_id, book_title){
64		$('input.book-id', item).val(book_id);
65		$('input.book-title', item).val(book_title);
66		if( opts.callback )
67			opts.callback(item, book_id, book_title);
68	}
69	
70	var finder = my_create_book_finder({modal:opts.modal});
71	
72	$('.book-title', item).click(function(){
73		finder.open(result_click_cb, $(this).val());
74	});
75	
76	$('.delete', item).click(function(e){
77		e.preventDefault();
78		$(this).parents('.item:eq(0)').remove();
79	});
80	
81	if( opts.s ){
82		finder.find(opts.s);
83	}
84	
85	return item;
86}
87
88
89var my_create_book_finder = function(_opts){
90	if( window.my_book_finder )
91		return window.my_book_finder;
92	
93	var defaults = {modal: false};
94	var opts = $.extend(defaults, _opts);
95	var callback;
96	var html = '';
97	html+= '<div id="bcp-book-finder" title="도서 찾기">';
98	html+= '	<div class="s-row">';
99	html+= '		<input type="text" class="s" value="" placeholder="도서명">';
100	html+= '		<a href="#" class="s-submit button">찾기</a>';
101	html+= '	</div>';
102	html+= '	<div class="result"></div>';
103	html+= '</div>';
104	
105	var t = window.my_book_finder = $(html).dialog({
106		width: Math.min($(window).width(), 400), 
107		height: Math.min($(window).height(), 600), 
108		autoOpen: false,
109		modal: opts.modal
110	});
111	var search_input = $('input.s', t);
112	var search_button = $('.s-submit', t);
113	var result = $('.result', t).hide();
114	var paged = 1;
115	
116	var find = t.find = function(_s){
117		var s = _s || $.trim( search_input.val() );
118		
119		result.show().text('검색중...');
120		
121		var data = {
122			action: 'book',
123			action_scope: 'search-book',
124			s: s,
125			paged: paged,
126			posts_per_page: 10
127		}
128		$.post(bcp_vars.ajaxurl, data, function(rs){
129			if( !rs.rows || rs.rows.length==0 ){
130				result.text('검색 결과가 없습니다.');
131			}else{
132				var output = '<table>';
133				for(var i in rs.rows){
134					var d = rs.rows[i];
135					output += '<tr>';
136					output += '	<td class="thumb"><img src="' + d.thumbnail + '"></td>';
137					output += '	<td class="text">';
138					output += '		<div class="title"><a href="' + d.permalink + '" target="_blank">' + d.book_title + '</a></div>';
139					output += '		<div class="info">' + d.book_author + '</div>';
140					output += '	</td>';
141					output += '	<td class="buttons"><a href="#" data-id="' + d.book_id + '" data-name="' + d.book_title + '" class="insert button">선택</a></td>';
142					output += '</tr>';
143				}
144				output += '</table>';
145				
146				if( typeof rs.paginate_links=='string' )
147					output += '<div class="paged-nav">' + rs.paginate_links + '</div>';
148				
149				result.html(output).find('a.insert').click(function(e){
150					e.preventDefault();
151					if( typeof callback == 'function' )
152						callback( $(this).data('id'), $(this).data('name') );
153					close();
154				});
155				
156				result.find('.paged-nav a').click(function(e){
157					e.preventDefault();
158					paged = parseInt(this.text);
159					find();
160				});
161			}
162		}, 'json');
163	}
164	
165	var open = t.open = function(_callback, _val){
166		callback = _callback;
167		t.dialog('open');
168		search_input.val(_val).select();
169		find(_val);
170	}
171	
172	var close = t.close = function(){
173		t.dialog('close');
174	}
175	
176	search_button.click(function(e){
177		e.preventDefault();
178		paged = 1;
179		find();
180	});
181	search_input.keyup(function(e){
182		if( e.keyCode==13 ){
183			paged = 1;
184			find();
185		}
186	});
187	
188	t.hover(
189		function(){
190			$('body').addClass('overflow-hidden');
191		},
192		function(){
193			$('body').removeClass('overflow-hidden');
194		}
195	);
196	
197	return t;
198}
199
200$.fn.my_book_store_field = function(field_name){
201	if( this.length==0 ) return;
202	
203	var t = this;
204	var holder = t.find('.items');
205	
206	var add = function(_name, _url, _index){
207		var index = _index || new Date().getTime();
208		var name = _name || '';
209		var url = _url || '';
210		var html = '';
211		html += '<div class="item">';
212		html += '	<input placeholder="상점명" type="text" name="book['+field_name+']['+index+'][name]" value="'+name+'">';
213		html += '	<input placeholder="URL" type="text" name="book['+field_name+']['+index+'][url]" value="'+url+'">';
214		html += '	<a href="#" class="del dashicons dashicons-dismiss"></a>';
215		html += '</div>';
216		holder.append(html);
217	}
218	
219	$('.add', t).click(function(e){
220		e.preventDefault();
221		add();
222	});
223	
224	$('.del', t).live('click', function(e){
225		e.preventDefault();
226		$(this).parents('.item:eq(0)').remove();
227	});
228	
229	this.add = add;
230	return t;
231}
232
233$.fn.my_bookauth_connect_field = function(_opts){
234	var t = this;
235	
236	var defaults = {
237		post_id_field_name: 'bookauth[post_id][]',
238		role_id_field_name: 'bookauth[role_id][]',
239		values: {post_id: '', name: '', role_id: ''},
240		callback: null,
241		roles: '',
242		s: '',
243		static_mode: false,
244		required: false,
245		modal: false
246	};
247	var opts = $.extend(defaults, _opts);
248	
249	if( !opts.static_mode && $.fn.sortable )
250		t.sortable({axis: 'y'});
251	
252	var html = '';
253	html += opts.static_mode ? '<span class="item">' : '<li class="item">';
254	html += '<input type="text" value="'+opts.values.name+'" class="bookauth-name" readonly="readonly"> ';
255	html += '<input type="hidden" name="'+opts.post_id_field_name+'" value="'+opts.values.post_id+'" class="bookauth-post_id"> ';
256	if( typeof opts.roles == 'object' ){
257		html += '	<select name="'+opts.role_id_field_name+'" class="bookauth-role_id">';
258		html += '	<option value="">- 역할 -</option>';
259		for(var i in opts.roles){
260			var role_selected = ( opts.values.role_id==i ) ? 'selected="selected"' : '';
261			html += '	<option value="'+i+'" '+role_selected+'>'+opts.roles[i]+'</option>';
262		}
263		html += '	</select>';
264	}
265	html += opts.static_mode ? '</span>' : '</li>';
266	
267	var item = $(html).appendTo(t);
268	
269	if( opts.required )
270		item.find('.bookauth-name').addClass('required');
271		
272	if( !opts.static_mode )
273		item.append(' <a href="#" class="delete">x</a> ');
274	
275	var result_click_cb = function(post_id, name){
276		$('input.bookauth-post_id', item).val(post_id);
277		$('input.bookauth-name', item).val(name);
278		if( opts.callback )
279			opts.callback(item, post_id, name);
280	}
281	
282	var finder = my_create_bookauth_finder({modal:opts.modal});
283	
284	$('.bookauth-name', item).click(function(){
285		finder.open(result_click_cb, $(this).val());
286	});
287	
288	$('.delete', item).click(function(e){
289		e.preventDefault();
290		$(this).parents('.item:eq(0)').remove();
291	});
292	
293	if( opts.s ){
294		finder.find(opts.s);
295	}
296	
297	return item;
298}
299
300
301var my_create_bookauth_finder = function(_opts){
302	if( window.my_bookauth_finder )
303		return window.my_bookauth_finder;
304	
305	var defaults = {modal: false};
306	var opts = $.extend(defaults, _opts);
307	var callback;
308	var html = '';
309	html+= '<div id="bcp-bookauth-finder" title="저자 찾기">';
310	html+= '	<div class="s-row">';
311	html+= '		<input type="text" class="s" value="" placeholder="저자명">';
312	html+= '		<a href="#" class="s-submit button">찾기</a>';
313	html+= '	</div>';
314	html+= '	<div class="result"></div>';
315	html+= '</div>';
316	
317	var t = window.my_bookauth_finder = $(html).dialog({
318		width: Math.min($(window).width(), 400), 
319		height: Math.min($(window).height(), 600), 
320		autoOpen: false,
321		modal: opts.modal
322	});
323	var search_input = $('input.s', t);
324	var search_button = $('.s-submit', t);
325	var result = $('.result', t).hide();
326	var paged = 1;
327	
328	var find = t.find = function(_s){
329		var s = _s || $.trim( search_input.val() );
330		
331		result.show().text('검색중…');
332		
333		var data = {
334			action: 'bookauth',
335			action_scope: 'search-bookauth',
336			s: s,
337			paged: paged,
338			posts_per_page: 10
339		}
340		$.post(bcp_vars.ajaxurl, data, function(rs){
341			if( !rs.rows || rs.rows.length==0 ){
342				result.text('검색 결과가 없습니다.');
343			}else{
344				var output = '<table>';
345				for(var i in rs.rows){
346					var d = rs.rows[i];
347					output += '<tr>';
348					output += '	<td class="text">';
349					output += '		<div class="title"><a href="' + d.permalink + '" target="_blank">' + d.name + '</a></div>';
350					output += '		<div class="info">' + d.info + '</div>';
351					output += '	</td>';
352					output += '	<td class="buttons"><a href="#" data-id="' + d.post_id + '" data-name="' + d.name + '" class="insert button">선택</a></td>';
353					output += '</tr>';
354				}
355				output += '</table>';
356				
357				if( typeof rs.paginate_links=='string' )
358					output += '<div class="paged-nav">' + rs.paginate_links + '</div>';
359					
360				result.html(output).find('a.insert').click(function(e){
361					e.preventDefault();
362					if( typeof callback == 'function' )
363						callback( $(this).data('id'), $(this).data('name') );
364					close();
365				});
366				
367				result.find('.paged-nav a').click(function(e){
368					e.preventDefault();
369					paged = parseInt(this.text);
370					find();
371				});
372			}
373		}, 'json');
374	}
375	
376	var open = t.open = function(_callback, _val){
377		callback = _callback;
378		t.dialog('open');
379		search_input.val(_val).select();
380		find(_val);
381	}
382	
383	var close = t.close = function(){
384		t.dialog('close');
385	}
386	
387	search_button.click(function(e){
388		e.preventDefault();
389		paged = 1;
390		find();
391	});
392	search_input.keyup(function(e){
393		if( e.keyCode==13 ){
394			paged = 1;
395			find();
396		}
397	});
398	
399	t.hover(
400		function(){
401			$('body').addClass('overflow-hidden');
402		},
403		function(){
404			$('body').removeClass('overflow-hidden');
405		}
406	);
407	
408	return t;
409}
410
411$.fn.book_preview_link = function(){
412	return this.each(function(){
413		var t = $(this);
414		
415		t.click(function(){
416			var url = t.attr('href');
417			if( url ){
418				bcp.open_window(url, {winnm: 'bookpreview', width: 1240, height: 850});
419			}else{
420				if( $(this).hasClass('loading') ){
421					alert('미리보기를 가져오는 중입니다.');
422				}else{
423					alert('미리보기가 없습니다');
424				}
425			}
426			return false;
427		});
428		
429		if( t.attr('href')=='' || t.attr('href')=='#' ){
430			t.addClass('loading');
431			var data = {
432				action: 'book',
433				action_scope: 'book-preview-url',
434				book_id: t.data('book_id')
435			}
436			$.post(bcp_vars.ajaxurl, data, function(url){
437				if( url ){
438					t.attr('href', url);
439				}else{
440					t.addClass('disabled');
441				}
442			}).always(function(){
443				t.removeClass('loading');
444			}).fail(function(e){
445				t.addClass('disabled');
446			});
447		}
448	});
449}
450
451$.fn.book_shop_links = function(){
452	return this.each(function(){
453		var t = $(this);
454		var holder = $('.list', t);
455		
456		var search = function(){
457			t.addClass('loading');
458			holder.text('구매처 검색중…');
459			
460			var data = {
461				action: 'book',
462				action_scope: 'book_shop_links',
463				book_id: t.data('book_id')
464			}
465			$.post(bcp_vars.ajaxurl, data, function(rs){
466				t.removeClass('loading');
467				if( rs ){
468					holder.html(rs);
469				}else{
470					t.remove();
471				}
472			});
473		}
474		
475		if( $('a', holder).length==0 )
476			search();
477	});
478}
479
480
481
482
483
484$.fn.my_authors_list = function(){
485	if( this.length==0 ) 
486		return;
487	
488	var t = this;
489	var reader_w = 300;
490	var reader = $('<div id="auth-reader"><div class="inner"/><span class="close"/><span class="prong"/></div>').appendTo('body').css('width', reader_w);
491	var reader_inner = $('.inner', reader);
492	var closer = $('.close', reader);
493	
494	$('.list a', t).click(function(e){
495		e.preventDefault();
496		
497		reader.removeClass('prong-left').removeClass('prong-right').removeClass('prong-up');
498		
499		$('.list a.selected', t).removeClass('selected');
500		$(this).addClass('selected');
501		
502		var offset = $(this).offset();
503		var pos = [offset.left, offset.top-15];
504		
505		if( pos[0]+$(this).width()+(reader_w+12) <= $(window).width() ){	
506			pos[0]+=$(this).width();
507			reader.addClass('prong-left');
508		}else if( pos[0]-(reader_w+12) >= 0 ){	
509			pos[0]-=reader_w+12;
510			reader.addClass('prong-right');
511		}else{
512			pos[1] += 48;
513			reader.addClass('prong-up');
514		}
515		
516		reader.addClass('open').css({left:pos[0], top:pos[1]});
517		reader_inner.text('가져오는중...');
518		
519		var data = {
520			action: 'bookauth_dialog_content',
521			post_id: $(this).data('id')
522		}
523		$.post(bcp_vars.ajaxurl, data, function(r){
524			reader_inner.html(r).focus().find('.content').bcp().scrollpane();
525		});
526	});
527	
528	closer.click(function(e){
529		e.preventDefault();
530		reader.removeClass('open');
531	});
532	
533	reader.bcp().onclick_outside(function(){
534		reader.removeClass('open');
535	});
536	
537	$(window).resize(function(){
538		reader.removeClass('open');
539		$('.list a.selected', t).removeClass('selected');
540	});
541	
542	t.bcp().columns();
543}
544
545$.fn.my_login_popup_link = function(){
546	if( bcp.is_logged_in )
547		return this;
548	
549	return this.each(function(){
550		var t = $(this);
551		var opts = t.data();
552		var href = t.attr('href');
553		var redirect_to = location.href;
554		
555		if( opts.redirect_to ){
556			redirect_to = opts.redirect_to;
557		}else if( href.indexOf('http') == 0 || href.indexOf('/') == 0 ){
558			if( href.indexOf('wp-login.php') != -1 ){
559				var tmp = href.get_value_from_querystring('redirect_to');
560				if( tmp )
561					redirect_to = decodeURIComponent(tmp);
562			}else{
563				redirect_to = href;
564			}
565		}
566		
567		t.click(function(e){
568			e.preventDefault();
569			if( opts.alert_message )
570				alert( opts.alert_message );
571			bcp.login_popup({modal:opts.modal});
572		});
573	
574		$('#loginform').live('login-success', function(){
575			location.href = redirect_to;
576		});
577	});
578}
579
580$.fn.my_mobile_menu = function(){
581	var t = this.appendTo('body');
582	
583	var menu = $('#mobile-gnb');
584	
585	menu.prepend('<li class="home"><a href="/">홈</a></li>');
586	
587	menu.my_mobile_gnb_singular_select();
588	
589	$('.sub-menu .current-menu-item', menu).parents('li:eq(0)').addClass('current-menu-parent');
590	
591	$('a', menu).each(function(){
592		var a = $(this);
593		var li = a.parents('li:eq(0)');
594		var sub = a.parent().next('.sub-menu');
595		if( sub.length > 0 ){
596			li.addClass('has-sub');
597			a.click(function(e){
598				if( sub.css('display')=='none' ){
599					e.preventDefault();
600					sub.slideToggle(200);
601				}
602			});
603		}else{
604			li.addClass('no-sub');
605		}
606	});
607}

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.