PageSourceSearch

https://aidoly.net/module/partsGoods/common/js/goods.js?1552353558

js aidoly.net collected 2026-10-07 05:52:29 UTC 22,185 bytes, 658 lines download raw bytes

1
2/* 商品入力フォームを取得 */
3var $goods_form ;
4jQuery.ajax({
5	url : 'm_api.php' ,
6	type : 'POST',
7	dataType : "text",
8	data: 'c=partsGoodsApi&m=drawInputForm',
9	success: function(data){
10		$goods_form = data;
11	}
12});
13
14$(function(){
15
16	form = '<li><img src="./module/partsGoods/common/img/tab_goods.png" class="part_add_btn_goods con_goods" id="con_goods" /></li>';
17	add_form = '<li><img src="./module/partsGoods/common/img/tab_goods.png" class="part_add_btn_goods con_goods" /></li>';
18	$('.edit_button.edit_button_head').find('ul').append(form);
19	$('.edit_button.items_part_add').find('ul').append(add_form);
20
21	$(document).on('click', '.add_icon', function(){
22		// 商品アイテムアイコンの追加
23		add_items = $(this).parent().find('.edit_button.items_part_add');
24		if(add_items.find('.con_goods').size() < 1)
25		{
26			add_form = '<li><img src="./module/partsGoods/common/img/tab_goods.png" class="part_add_btn_goods con_goods" /></li>';
27			add_items.find('ul').append(add_form);
28		}
29	});
30
31/*****************************************************************************
32 * 商品アイテム入力フォームを表示
33 *****************************************************************************/
34	$(document).on("click",".part_add_btn_goods",function(){
35		addPartsForm($(this),$goods_form);
36	});
37
38/*****************************************************************************
39 * 商品アイテム追加
40 *****************************************************************************/
41	$(document).on("click","#add_goods",function(){
42		var check = "";
43		var $check = true;
44
45		var self = $(this).parents('.add_part_body');
46		delPartsErrorMessage(self);
47
48		var p_title = self.find("[name=title]");
49		title = p_title.val();
50		if(title.length < 1 ){
51			check = "商品名を入力してください。";
52			addPartsErrorMessage(p_title, check, '', 'after');
53			$check = false;
54		}
55		var p_link_url = self.find("[name=link_url]");
56		link_url = p_link_url.val();
57		if(link_url.length < 1 ){
58			check = "リンク先を入力してください。";
59			addPartsErrorMessage(p_link_url, check, '', 'after');
60			$check = false;
61		}
62		var p_text = self.find("[name=text]");
63		price = p_text.val();
64		if(price.match(/[^0-9]+/)){
65			check = "価格は半角数字だけで入力してください。";
66			addPartsErrorMessage(self.find('.yen'), check, '', 'after');
67			$check = false;
68		}
69
70		var p_comment = self.find("[name=comment]");
71		var p_img_url = self.find("[name=img_url]");
72		comment = p_comment.val();
73		img_url = p_img_url.val();
74		var enc_img_url = encodeURIComponent(img_url);
75		if(img_url.length > 0)
76		{
77			jQuery.ajax({
78				async : false,
79				url : 'm_api.php' ,
80				type : 'POST',
81				dataType : "json",
82				data : 'c=itemsApi&m=checkImageURL&url='+enc_img_url,
83				success : function(res){
84					if(res.status == 'error'){
85						var msg = httpCheckMsg (res.Code);
86						addPartsErrorMessage(p_img_url, msg, '', 'after');
87						$check = false;
88						return ;
89					}
90					img_url = res.img;
91				},
92				error   : function(xml, status, e){
93					$check = false;
94					var msg = 'URLのチェックに失敗しました。';
95					addPartsErrorMessage(p_img_url, msg, '', 'after');
96				}
97			});
98		}
99
100		var enc_link_url = encodeURIComponent(link_url);
101		if(enc_link_url.length > 0)
102		{
103			jQuery.ajax({
104				async : false,
105				url : 'm_api.php' ,
106				type : 'POST',
107				dataType : "json",
108				data : 'c=itemsApi&m=getHttpStatusCode&url='+enc_link_url,
109				success : function(res){
110					if(res.status == 'error'){
111						var msg = httpCheckMsg (res.Code);
112						addPartsErrorMessage(p_link_url, msg, '', 'after');
113						$check = false;
114						return ;
115					}
116				},
117				error   : function(xml, status, e){
118					$check = false;
119					var msg = 'URLのチェックに失敗しました。';
120					addPartsErrorMessage(p_link_url, msg, '', 'after');
121				}
122			});
123		}
124		if(! $check) return;
125
126		time = jQuery.now();
127		if(title != null || title.length == 0){
128
129			tag = subGetGoodsParts(time, title, comment, price, link_url, img_url);
130
131			self.find("[name=text]").val('');
132			self.find("[name=title]").val('');
133			self.find("[name=comment]").val('');
134			self.find("[name=quote_url]").val('');
135
136			inputPartForm(tag,$(this));
137		}
138		else{
139			check = "内容が間違っている可能性があります。もう一度入力してください。";
140			addPartsErrorMessage(p_title, check, '', 'after');
141		}
142	});
143
144/*****************************************************************************
145 * 商品アイテムキーワードから探す 初期フォームの表示
146 *****************************************************************************/
147	$(document).on("click",".search_goods",function(){
148		var id = $(this).parents('[id^=part].part_start').attr('id');
149		string = getGoodsSearchForm(id);
150		parent.$('#container').prepend(string);
151		parent.$('#matome_list').css({
152			'pointer-events' : 'none',
153		});
154		$(window).scrollTop = 0;
155	});
156
157/*****************************************************************************
158 * 商品アイテムキーワードから探す 検索するサイトのフォームの表示
159 *****************************************************************************/
160	$(document).on("click",".goods_search",function(){
161		search_type = $(this).attr('class');
162		$('#img_form_side').find('li').attr('class','');
163		$(this).parent('li').attr('class','active');
164
165		if(search_type.match(/rakuten/))
166		{
167			// 楽天 検索
168			$('#search_link_form').html(getRakutenGoodsForm());
169		}
170		else if(search_type.match(/amazon/))
171		{
172			// Amazon 検索
173			$('#search_link_form').html(getAmazonGoodsForm());
174		}
175	});
176
177/* 商品検索結果表示 */
178	$(document).on("click",".search_form_good",function(){
179		changeGoodsResultListHeight();
180		getSearchGoodsResultList($(this));
181	});
182
183/* 商品の検索結果を追加 */
184	$(document).on("click","#add_goods_list",function(){
185		getSearchGoodsResultAddList($(this));
186	});
187
188/* キーワードから検索した商品追加 */
189	$(document).on("click", ".goods_to_items",function(){
190
191		if($(this).parents('.goods_data.added').size() > 0){
192			alert('すでに追加しました。');
193			return ;
194		}
195
196		var undefined;
197		p_obj = $(this).parents('.goods_data');
198		tmp = p_obj.attr('class');
199
200		time = jQuery . now();
201		title = p_obj.find('.goods_name').find('a').text();
202		if(p_obj.find('.goods_img').find('img').attr('src') == undefined)
203		{
204			img_url = "";
205		}else {
206			img_url = p_obj.find('.goods_img').find('img').attr('src');
207		}
208		link_url = p_obj.find('.goods_name').find('a').attr('href');
209		price = delComma(p_obj.find('.goods_price').text());
210		//	楽天の商品説明にはhtmlソースがあるため、除外
211		comment = "";
212
213		tag = subGetGoodsParts(time, title, comment, price, link_url, img_url);
214
215		id = $(document).find('#sample01_overlay').attr('data-add-id');
216		obj = $('#'+id).find('.add_part_body');
217		inputSearchPartTag(tag,obj);
218
219		p_obj.attr('class',tmp + ' added');
220	});
221
222/* 修正項目表示 */
223	$(document).on("click", ".edit_part_goods",function(){
224
225		var self = $(this).parents('.part_start');
226		$(this).parent(".part-tools").hide();
227		view_parts = self.find('.view_parts');
228		edit_form = self.find('.edit_form');
229		edit_form.show();
230		self.find('.add_icon').hide();
231		self.find('.edit_button').hide();
232		edit_form.append('<span class="notview"></span>');
233
234		if(view_parts.find('img').length > 0)
235		{
236			var obj = $('<div />');
237			obj.attr('class','view_clone');
238			var clone = view_parts.find('img').clone(true);
239			obj2 = $('<p />');
240			obj2.append(clone);
241			obj.append(obj2);
242			edit_form.find('h4').after(obj);
243		}
244
245		self.find('.view_parts').hide();
246		// 商品名
247		edit_form.find('.part_title').show();
248		// 価格
249		edit_form.find('.part_description').show();
250		// リンク先URL
251		edit_form.find('.part_source').show();
252		//	コメント
253		edit_form.find('.part_comment').show();
254		// 画像のURL
255		edit_form.find('.part_url').show();
256	});
257
258/* 修正内容の反映 */
259	$(document).on("click", ".close_b_goods",function(){
260		var check = "";
261		var $check = true;
262
263		self_part = $(this).parents('.part_start[id^=part]');
264
265		delPartsErrorMessage(self_part);
266		var edit = self_part.find('.edit_form');
267		var p_title = self_part.find('[name="part_title[]"]');
268		var p_sorce = self_part.find('[name="part_sorce[]"]');
269		var p_description = self_part.find('[name="part_description[]"]');
270		var p_img = self_part.find('[name="part_url[]"]')
271
272		name = p_title.val();
273		if(name.length < 1)
274		{
275			check = "商品名を入力してください。";
276			addPartsErrorMessage(p_title, check, '', 'after');
277			$check = false;
278		}
279		link_url = p_sorce.val();
280		if(link_url.length < 1)
281		{
282			check = "リンク先を入力してください。";
283			addPartsErrorMessage(p_sorce, check, '', 'after');
284			$check = false;
285		}
286		price = p_description.val();
287		if(price.match(/[^0-9]+/)){
288			check = "価格は半角数字だけで入力してください。";
289			addPartsErrorMessage(edit.find('.yen'), check, '', 'after');
290			$check = false;
291		}
292
293		img_url = p_img.val();
294		if(img_url.length > 0)
295		{
296			jQuery.ajax({
297				async : false,
298				url : 'm_api.php' ,
299				type : 'POST',
300				dataType : "json",
301				data : 'c=itemsApi&m=checkImageURL&url='+img_url,
302				success : function(res){
303					if(res.status == 'error'){
304						var msg = httpCheckMsg (res.Code);
305						addPartsErrorMessage(p_img, msg, '', 'after');
306						$check = false;
307						return ;
308					}
309					img_url = res.img;
310				},
311				error   : function(xml, status, e){
312					$check = false;
313					var msg = 'URLのチェックに失敗しました。';
314					addPartsErrorMessage(p_img, msg, '', 'after');1
315				}
316			});
317			if(! $check) return;
318		}
319
320		if(link_url.length > 0)
321		{
322			jQuery.ajax({
323				async : false,
324				url : 'm_api.php' ,
325				type : 'POST',
326				dataType : "json",
327				data : { 'c':'itemsApi','m':'getHttpStatusCode','url':link_url },
328				success : function(res){
329					if(res.status == 'error'){
330						var msg = httpCheckMsg (res.Code);
331						addPartsErrorMessage(p_sorce, msg, '', 'after');
332						$check = false;
333						return ;
334					}
335				},
336				error   : function(xml, status, e){
337					$check = false;
338					var msg = 'URLのチェックに失敗しました。';
339					addPartsErrorMessage(p_sorce, msg, '', 'after');
340				}
341			});
342		}
343		if(! $check) return;
344
345		price = addComma(price);
346		val = self_part.find('[name="part_comment[]"]').val();
347		val = nl2brforParts(escape_html(val));
348
349		if(link_url.length > 0)
350		{
351			if(self_part.find(".goods_url").find('a').size() < 1)
352			{
353				self_part.find(".goods_url").append('<a>');
354				self_part.find(".goods_url").find('a').attr('target','_blank');
355			}
356			self_part.find(".goods_url").find('a').attr('href',link_url);
357			self_part.find(".goods_url").find('a').text('この商品の通販サイトへ');
358		}else{
359			self_part.find(".goods_url").find('a').remove();
360		}
361
362		if(img_url.length > 0)
363		{
364			if(self_part.find(".item_goods").find("img").size() < 1)
365			{
366				self_part.find(".item_goods").prepend('<img>');
367			}
368			self_part.find('.view_parts').find('img').attr('src',img_url);
369		}
370		else{
371			self_part.find('[name="part_image_tmp[]"]').val('');
372			self_part.find('.view_parts').find("img").remove();
373		}
374
375		self_part.find(".goods_title").find('a').text(name);
376		str_price = '';
377		if(price.length > 0)
378		{
379			str_price = price+'円';
380		}
381		self_part.find(".goods_price").find('p').text(str_price);
382		self_part.find(".goods_comment").html(val);
383
384		// ダミーで表示しているものを削除
385		self_part.find('.view_clone').remove();
386
387		self_part.find('.notview').remove();
388		self_part.find(".part-tools").show();
389		self_part.find(".add_icon").show();
390		self_part.find('.view_parts').show();
391		self_part.find(".edit_form").hide();
392	});
393
394/* 検索フォーム 閉じる */
395	$(document).on("click", ".search_goods_form_close",function(){
396		id = $(document).find('#sample01_overlay').attr('data-add-id');
397		obj = $('#'+id).find('.add_part_body');
398		$('#sample01_overlay').remove();
399		$('#search_goods').remove();
400		$('#matome_list').css({
401			'pointer-events' : 'auto',
402		});
403		closedPartForm(obj);
404		//removePartForm();
405	});
406
407/* 検索画面の高さ変更 */
408	$(window).on('load resize', function(){
409		if($('#search_goods').size() > 0)
410		{
411			changeGoodsResultListHeight();
412		}
413	});
414});
415
416/* 検索画面の高さ変更 */
417function changeGoodsResultListHeight()
418{
419	h = window.innerHeight ? window.innerHeight: $(window).height();
420	$('#search_link_result').height(h - 20 - $('#search_link_form').outerHeight(true));
421}
422
423function subGetGoodsParts(time, title, comment, price, link_url, img_url)
424{
425	
426	title    = escape_html(title);
427	comment  = escape_html(comment);
428	price    = escape_html(price);
429	link_url = escape_url(link_url);
430	img_url  = escape_url(img_url);
431	
432	var view_comment = nl2brforParts(comment);
433	var tag = '';
434	tag += '<div class="post part_start" id="part_'+time+'">';
435	tag += addItemsPart();
436	tag += '<div class="view_parts">';
437
438	tag += '<div class="item_list item_goods">';
439	tag += '<div>';
440	if(img_url.length > 0){
441		tag += '<p>';
442		tag += '<img src="'+img_url+'" />';
443		tag += '</p>';
444	}
445	tag += '</div>';
446
447	tag += '<div class="title goods_title"><p>'+title+'</p></div>';
448
449	if(price.length > 0){
450		tag += '<div class="sorce goods_price"><p>'+addComma(price)+'円</p></div>';
451	}else
452	{
453		tag += '<div class="sorce goods_price"><p></p></div>';
454	}
455	tag += '<div class="comment goods_comment">'+view_comment+'</div>';
456	if(link_url == ''){
457		tag += '<div class="goods_link goods_url"></div>';
458	}else{
459		tag += '<div class="goods_link goods_url"><p><a href="'+link_url+'" target="_blank">この商品の通販サイトへ</a></p></div>';		
460	}
461	tag += '</div>';
462
463	tag += '</div>';
464	tag += '<div class="edit_form" style="display: none;">';
465	tag += '<h4>商品</h4>';
466	tag += '<div class="part_type" style="display:none;"><input type="hidden" name="part_type[]" value="goods" /></div>';
467	tag += '<div class="part_title" style="display:none;"><p>商品名:</p><input class="ui_ex_input" type="text" size="70" name="part_title[]" placeholder="商品名" value="'+title+'" /></div>';
468	tag += '<div class="part_url" style="display:none;"><p>画像のURL:</p><input class="ui_ex_input" type="text" size="70" name="part_url[]" placeholder="商品画像のURL" value="'+img_url+'" /></div>';
469	tag += '<div class="part_source" style="display:none;"><p>リンク先URL:</p><input class="ui_ex_input" type="text" size="70" name="part_sorce[]" placeholder="リンク先URL" value="'+link_url+'" /></div>';
470	tag += '<div class="part_description" style="display:none;"><p>価格:</p><input class="ui_ex_input price" type="text" size="70" name="part_description[]" placeholder="価格" value="'+price+'" /><span class="yen">円</span></div>';
471	tag += '<div class="part_image" style="display:none;"><input type="hidden" name="part_image[]" value="" /></div>';
472	tag += '<div class="part_image_tmp" style="display:none;"><input style="display:none;" type="text" name="part_image_tmp[]" value="" /></div>';
473	tag += '<div class="part_comment" style="display:none;"><p>コメント:</p><textarea class="ui_ex_textarea" name="part_comment[]" rows="5" cols="80" placeholder="コメント">
473'+comment+'</textarea></div>';
474	tag += '<div class="part_html" style="display:none;"><input type="hidden" name="part_html[]" value="" /></div>';
475	tag += '<div class="ui_btn_wrap"><p><button class="close_b_goods btn_common" type="button">閉じる</button></p></div>';
476	tag += '</div>';
477	tag += '<div class="part-tools">';
478	tag += addPartMoveTool();
479	tag += '<button class="edit_part_goods" type="button">修正</button>';
480	tag += '<button class="delete_part" type="button">削除</button>';
481	tag += '</div>';	
482	tag += "</div>";
483
484	return tag ;
485
486}
487
488function getGoodsSearchForm(id)
489{
490	var data = "";
491	if(id !== undefined ) data = "data-add-id='"+id+"'";
492
493	var string  = "";
494	string += "<span id='sample01_overlay' "+data+"></span>";
495	string += "<div id='search_goods'>";
496
497	string += "<div id='goods_form_type' class='search_window'>";
498	string += "<div class='contents_inline c2'>";
499	string += "<div id='img_form_side' class='contents_s'>";
500	string += "<div class='headarea'><p class='title_imgsearch'>商品を探す</p></div>";
501	string += "<ul>";
502	var form_str = "";
503	if($rakuten == 1)
504	{
505		var rl = "<li class='active'><a class='goods_search rakuten'>楽天で検索</a></li>";
506		form_str = getRakutenGoodsForm();
507		string += rl;
508	}
509	if($amazon == 1)
510	{
511		var al = "<li><a class='goods_search amazon'>Amazonで検索</a></li>";
512		if( form_str.length == 0 )
513		{
514			al = "<li class='active'><a class='goods_search amazon'>Amazonで検索</a></li>";
515			form_str = getAmazonGoodsForm();
516		}
517		string += al;
518	}
519	string += "</ul>";
520	string += "</div>";
521
522	string += "<div id='goods_form_main' class='contents_m'>";
523	string += "<div id='search_link_form' class='headarea'>";
524	string += form_str;
525	string += "</div>";
526
527	string += "<div class='keyword_load'></div>";
528	string += "<div id='search_link_result'></div>";
529	string += "</div>";
530	string += "</div>";
531	string += "</div>";
532	string += "</div>";
533
534	return string;
535}
536
537/* 商品の検索結果 */
538function getSearchGoodsResultList(obj)
539{
540	var keyword = $('[name=search_text]').val();
541	var type =    $('[name=goods_type]').val();
542	jQuery.support.cors = true;
543	time = jQuery.now();
544
545	if(keyword == null || keyword == ''){
546		alert('キーワードを入力してください。');
547		return ;
548	}
549
550	if(type == null || type == ''){
551		alert('不正入力がありました。\nページの再読み込みをして下さい。');
552		return ;
553	}
554
555	key = '&keyword=' + keyword + '&type=' + type;
556	if($('[name="search_index"]').size() > 0)
557	{
558		key = key + '&search_index=' + $('[name="search_index"] option:selected').val();
559	}
560	$('#search_link_result').empty();
561
562	$('#search_link_result').css({
563		'background-image': 'url("./common/img/ajax-loader.gif")',
564		'background-repeat': 'no-repeat',
565	});
566
567	jQuery.ajax({
568		url : 'm_api.php' ,
569		type : 'POST',
570		dataType : "text",
571		data: 'c=partsGoodsApi&m=getGoodsSearchList&' + key,
572		success: function(data){
573			$('#search_link_result').append(data);
574		},
575		error: function(){
576			alert('現在このサービスはご利用できません');
577		},
578		complete : function() {
579			$('#search_link_result').css({
580				'background-image': '',
581				'background-repeat': '',
582			});
583		}
584	});
585}
586
587function getSearchGoodsResultAddList(obj)
588{
589
590	$('#add_goods_list').remove();
591	last_obj = $('.goods_data').filter(":last");
592	last_obj.after("<div class='keyword_load'><img src='./common/img/ajax-loader.gif'/></div>");
593
594	jQuery.ajax({
595		url : 'm_api.php' ,
596		type : 'POST',
597		dataType : "text",
598		data: 'c=partsGoodsApi&m=getGoodsSearchAddList&',
599		success: function(data){
600			$('.goods_list').append(data);
601		},
602		error: function(){
603			alert('現在このサービスはご利用できません');
604		},
605		complete : function() {
606			$(".keyword_load").remove();
607		}
608	});
609}
610
611
612
613function getRakutenGoodsForm()
614{
615	var string  = "";
616	string += "<input type='text' name='search_text' placeholder='検索する商品のキーワードを入力'\ class='ui_ex_input' />";
617	string += "<input class='search_form_good btn_p' type='button' value='検索'>";
618	string += "<input type='hidden' name='goods_type' value='rakuten'>";
619	string += "<a class='search_goods_form_close'>閉じる</a>";
620
621	return string;
622}
623
624function getAmazonGoodsForm()
625{
626	var string  = "";
627	string += "<input type='text' name='search_text' placeholder='検索する商品のキーワードを入力'\ class='ui_ex_input' />";
628	string += "<select name='search_index'>";
629	string += "<option value='All'>全てから探す</option>";
630	string += "<option value='Apparel'>アパレルから探す</option>";
631	string += "<option value='Baby'>ベビー&マタニティから探す</option>";
632	string += "<option value='Beauty'>コスメから探す</option>";
633	string += "<option value='Books'>本(和書)から探す</option>";
634	string += "<option value='Classical'>クラシック音楽から探す</option>";
635	string += "<option value='DVD'>DVDから探す</option>";
636	string += "<option value='Electronics'>エレクトロニクスから探す</option>";
637	string += "<option value='ForeignBooks'>洋書から探す</option>";
638	string += "<option value='Grocery'>食品から探す</option>";
639	string += "<option value='HealthPersonalCare'>ヘルスケアから探す</option>";
640	string += "<option value='Hobbies'>ホビーから探す</option>";
641	string += "<option value='Jewelry'>ジュエリーから探す</option>";
642	string += "<option value='Kitchen'>ホーム&キッチンから探す</option>";
643	string += "<option value='Music'>ミュージックから探す</option>";
644	string += "<option value='MusicTracks'>曲名から探す</option>";
645	string += "<option value='Software'>ソフトウェアから探す</option>";
646	string += "<option value='SportingGoods'>スポーツ&アウトドアから探す</option>";
647	string += "<option value='Toys'>おもちゃから探す</option>";
648	string += "<option value='VHS'>VHSから探す</option>";
649	string += "<option value='Video'>ビデオから探す</option>";
650	string += "<option value='VideoGames'>ゲームから探す</option>";
651	string += "<option value='Watches'>時計から探す</option>";
652	string += "</select>";
653	string += "<input class='search_form_good btn_p' type='button' value='検索'>";
654	string += "<input type='hidden' name='goods_type' value='amazon'>";
655	string += "<a class='search_goods_form_close'>閉じる</a>";
656
657	return string;
658}

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.