PageSourceSearch

https://cafegate.co.kr/js/sns_share.js?1788413711

js cafegate.co.kr collected 2026-09-24 14:04:04 UTC 14,659 bytes, 517 lines download raw bytes

1var SNS = function(){
2	var pin_page = false;
3	var snsObjList = [];
4	var main_url, site_name, subject, content, image_url, link_url, security_link_url;
5	var api_url;
6	var kakao_loaded = false;
7	var kakao_message_template_id;
8
9	var share_type;
10	var social = {};
11	var additional = {};
12
13	function SnsObjects(){
14		this.name = "";
15		this.show = true;
16		this.order = 0;
17		this.iconClass = "";
18		this.type = "";
19	}
20
21
22	var loadKakaoApi = function(key){
23		// 카카오 이미 호출되어있으면 호출하지 않음 추가
24		if(kakao_loaded) return false;
25
26		if(LIMIT_API_LIST.indexOf('kakao_link') === -1){
27			try{
28				if(key != undefined){
29					key = key.trim();
30					if(key != '' && Kakao){
31						if (!Kakao.isInitialized()) {
32							Kakao.init(key);
33						}
34						kakao_loaded = true;
35					}
36				}
37			}catch(e){
38			}
39		}
40	};
41
42	var init = function(d){
43		// 상품&예약 상세페이지 데이터는 고정
44		if(pin_page) return false;
45
46		var data = d;
47
48		if (data.kakao_api_key !== undefined){
49			loadKakaoApi(data.kakao_api_key);
50			kakao_message_template_id = data.kakao_message_template_id;
51		}
52
53		main_url = data._main_url;
54		site_name = data._site_name;
55		subject = data._subject;
56		content = data._body === null ? '' : makeShareContent(data._body);
57		image_url = data._img;
58		link_url = data._post_url;
59		security_link_url = data._security_post_url;
60		api_url = "https://sns.imweb.me/?url=";
61
62		social = data._social;
63		additional = data._additional;
64		share_type = data._share_type;
65		if(data._pin_page != undefined){
66			pin_page = true;
67		}
68	};
69
70	var makeShareContent = function(s){
71		s = removeHtmlTag(s);
72
73		// 공유하기에 보이는 내용에서 치환
74		s = s.replace(/ /ig, " ");
75		s = s.replace(/&lt;/ig, "<");
76		s = s.replace(/&gt;/ig, ">");
77
78
79		//글자수가 너무 길때 처리 - 공유하기 권장 110글자
80		var content_max_len = 110;
81		s = (s.length > content_max_len)? s.substring(0,content_max_len) : s;
82		return s;
83	};
84
85	//SNS공유 초기설정
86	//var snsInit = function(_main_url, _site_name, _subject, _content, _link_url, _security_link_url, _image){
87	//
88	//	try{
89	//		if(Kakao) Kakao.init('63e1a2ee956b3aa85ca51663ce4caccb');
90	//	}catch(e){
91	//
92	//	}
93	//
94	//
95	//	main_url = _main_url;
96	//	site_name = _site_name != "" ? "[" + _site_name + "]" : "";
97	//	api_url = "https://sns.imweb.me/?url=";
98	//	subject = _subject;
99	//	content = _content;
100	//	image_url = _image;
101	//	link_url = _link_url;
102	//	security_link_url = _security_link_url;
103	//};
104
105
106	var setSnsObj = function(){
107		snsObjList = [];
108		if(SITE_COUNTRY_CODE === KOREA_COUNTRY_CODE){
109			if(LIMIT_API_LIST.indexOf('kakao_link') === -1){
110				var snsObj = new SnsObjects();
111				snsObj.name = LOCALIZE.버튼_카카오톡();
112				snsObj.show = true;
113				snsObj.order = 1;
114				snsObj.iconClass = "kakao";
115				snsObj.type = "kakaotalk";
116				snsObjList.push(snsObj);
117			}
118		}
119
120			if(LIMIT_API_LIST.indexOf('line_link') === -1){
121				snsObj = new SnsObjects();
122				snsObj.name = LOCALIZE.버튼_라인();
123				snsObj.show = true;
124				snsObj.order = 1;
125				snsObj.iconClass = "line";
126				snsObj.type = "line";
127				snsObjList.push(snsObj);
128			}
129
130		if(SITE_COUNTRY_CODE === KOREA_COUNTRY_CODE){
131			if(LIMIT_API_LIST.indexOf('band_link') === -1){
132				snsObj = new SnsObjects();
133				snsObj.name = LOCALIZE.버튼_밴드();
134				snsObj.show = true;
135				snsObj.order = 1;
136				snsObj.iconClass = "band";
137				snsObj.type = "band";
138				snsObjList.push(snsObj);
139			}
140
141			if(LIMIT_API_LIST.indexOf('naver_link') === -1){
142				snsObj = new SnsObjects();
143				snsObj.name = LOCALIZE.버튼_네이버();
144				snsObj.show = true;
145				snsObj.order = 1;
146				snsObj.iconClass = "naver";
147				snsObj.type = 'naver';
148				snsObjList.push(snsObj);
149			}
150		}
151
152		if(LIMIT_API_LIST.indexOf('facebook_link') === -1){
153			snsObj = new SnsObjects();
154			snsObj.name = LOCALIZE.버튼_페이스북();
155			snsObj.show = true;
156			snsObj.order = 1;
157			snsObj.iconClass = "face";
158			snsObj.type = "facebook";
159			snsObjList.push(snsObj);
160		}
161
162		if(LIMIT_API_LIST.indexOf('twitter_link') === -1){
163			snsObj = new SnsObjects();
164			snsObj.name = 'X';
165			snsObj.show = true;
166			snsObj.order = 1;
167			snsObj.iconClass = "twitter";
168			snsObj.type = "twitter";
169			snsObjList.push(snsObj);
170		}
171
172		if(LIMIT_API_LIST.indexOf('instagram') === -1){
173			snsObj = new SnsObjects();
174			snsObj.name = LOCALIZE.버튼_인스타그램();
175			snsObj.show = false;
176			snsObj.order = 1;
177			snsObj.iconClass = "instagram";
178			snsObj.type = "instagram";
179			snsObjList.push(snsObj);
180		}
181	};
182
183	var getDefaultHtml = function(){
184
185    const snsList = [];
186		for(var index in snsObjList){
187			const snsObj = snsObjList[index];
188			if(!snsObj.show) continue;
189      snsList.push(`
190        <li role='' class='${snsObj.iconClass}'>
191          <a href='javascript:;' onclick="SNS.setSnsApi('${snsObj.type}')\">${snsObj.name}</a>
192        </li>
193      `)
194		}
195    // [IWIS-2692] 상품상세(commerce) 공유 모달 + 친구초대 캠페인 운영중이면 상단에 배너+공유버튼 애드온(§3.8.3-1).
196    var fieCtx = window['__friend-invite-event__'];
197    var fieAddon = (share_type === 'commerce' && fieCtx && fieCtx.campaignRunning)
198      ? "<magnet-shell data-manifest-url='/_/fo-friend-invite-event-widget/index.magnet.json' data-mode='share-addon'><friend-invite-event-widget data-clay-theme='light-only'></friend-invite-event-widget></magnet-shell>"
199      : '';
200    const html = `
201      <div class='modal-header text-basic'>
202        <button type='button' class='close' data-dismiss='modal' aria-label='Close'><i class='btl bt-times'></i></button>
203        <h4 class='modal-title'>${LOCALIZE.버튼_공유하기()}</h4>
204        </div>
205        <div class='modal-body text-basic'>
206        ${fieAddon}
207        <div class='social-btn'>
208        <ul>
209          ${snsList.join('')}
210        </ul>
211        </div>
212        <div class='url-copy holder'>
213          <div class='form-control-line'>
214            <input type='text' id='sns_copy_url' class='_sns_copy_url form-control' value='${link_url}' readonly>
215            <button type='button' class='_sns_copy_btn sns_copy_btn btn btn-default' onclick=\"SNS.copyToClipboard()\" data-clipboard-target='._sns_copy_url'>${LOCALIZE.버튼_복사()}</button>
216          </div>
217        </div>
218        <div id='copy_complete' class='copy_complete text-center'></div>
219      </div>
220    `;
221		return html;
222	};
223
224	var copyToClipboard = function(){
225		$('#sns_copy_url').select();
226		document.execCommand("Copy");
227		$('#copy_complete').text(LOCALIZE.설명_URL이복사되었습니다());
228		$('#copy_complete').addClass('copied');
229		setTimeout(function () {
230			$('#copy_complete').removeClass('copied');
231		},4000);
232	};
233
234	var showDefalutSnsShareList = function(){
235		//snsInit(_main_domain, _site_name, _subject, _content, _link_url, _security_link_url, _image);
236		setSnsObj();
237		var html = $(getDefaultHtml());
238		$.cocoaDialog.open({type : 'post_social', custom_popup : html});
239	};
240
241
242	var setSnsApi = function(type){
243		switch(type){
244			case 'kakaotalk':
245				shareKakaoTalk();
246				break;
247			case 'line':
248				shareLine();
249				break;
250			case 'band':
251				shareBand();
252				break;
253			case 'naver':
254				shareNaver();
255				break;
256			case 'facebook':
257				shareFacebook();
258				break;
259			case 'twitter':
260				shareTwitter();
261				break;
262			case 'instagram':
263				shareInstagram();
264				break;
265		}
266
267	};
268
269
270	/***
271	 * 카카오톡 공유하기
272	 * https://developers.kakao.com/docs/latest/ko/message/js
273	 */
274	var shareKakaoTalk = function(){
275		if(LIMIT_API_LIST.indexOf('kakao_link') === -1){
276      subject = decodeHTMLEntities(subject);
277      content = decodeHTMLEntities(content);
278
279			var type = share_type;
280			var kakao_link = location.href;
281			var kakao_send_data = {
282				content: {
283					title: subject,
284					description: content,
285					imageUrl: image_url,
286					imageWidth: 300,
287					imageHeight: 200,
288					link: {
289						mobileWebUrl: kakao_link,
290						webUrl: kakao_link
291					}
292				},
293				buttons: [
294					{
295						title: '자세히보기',
296						link: {
297							mobileWebUrl: kakao_link,
298							webUrl: kakao_link
299						}
300					}
301				]
302			};
303			switch(share_type){
304				case 'booking':
305					kakao_send_data.buttons[0]['title'] = '예약하기';
306					type = 'feed';
307					break;
308				case 'commerce':
309					if(additional == undefined || additional.commerce == undefined || additional.hide_price === 'Y'){
310						type = 'feed';
311						break;
312					}
313
314					kakao_send_data.buttons[0]['title'] = '구매하기';
315					kakao_send_data.commerce ={};
316					kakao_send_data.commerce.regularPrice = additional.commerce.orig_price;			// 정상가격
317					if(additional.commerce.sale_price != undefined) {
318						kakao_send_data.commerce.discountPrice = additional.commerce.sale_price;	// 할인가격
319						kakao_send_data.commerce.discountRate =
320							Math.round((kakao_send_data.commerce.regularPrice - kakao_send_data.commerce.discountPrice) * 100 / kakao_send_data.commerce.regularPrice);
321					}
322					break;
323				case 'feed':
324				case 'location':
325					if(social){
326						kakao_send_data.social = {};
327						for(key in social){
328							kakao_send_data.social[key] = parseInt(social[key]);
329						}
330					}
331					if(share_type == 'location'){
332						if(additional == undefined || additional.location == undefined){
333							type = 'feed';
334							break;
335						}
336						kakao_send_data.address = additional.location.address;
337						kakao_send_data.addressTitle = subject;
338					}
339					break;
340				default:
341					type = 'feed';
342					break;
343			}
344
345			/**
346			 * 커머스의 경우 sendCustom() 을 이용하기 위함.
347			 * 커머스이고, 템플릿 ID 가 있는 경우에는 sendCustom()
348			 * 커머스이고 템플릿 ID 가 없는 경우에는 sendDefault()
349			 *
350			 * linkUrl 은 카카오 디벨로퍼 앱의 출처 링크 형식으로 리다이렉트
351			 * 출처 링크에 url 쿼리 스트링을 붙여 출처 링크 + path 로 리다이렉트 하도록 함.
352			 *
353			 * @see https://developers.kakao.com/docs/latest/ko/message/js-link#custom-template-msg
354			 */
355			var kakao_template_id = parseInt(kakao_message_template_id);
356			if (type === 'commerce' && kakao_template_id > 0) {
357				kakao_send_data = {
358					templateId: kakao_template_id,
359					templateArgs: {
360						title: subject,
361						imageUrl: image_url,
362						imageWidth: 300,
363						imageHeight: 200,
364						btnStr: "구매하기",
365						linkUrl: (location.pathname + location.search).slice(1),
366						originalPrice: additional.commerce.orig_price,
367					},
368					installTalk: true
369				};
370
371				if (additional.commerce.sale_price !== undefined) {
372					kakao_send_data.templateArgs.salePrice = additional.commerce.sale_price; // 할인가격
373					kakao_send_data.templateArgs.discountPercent =
374						Math.round((kakao_send_data.templateArgs.originalPrice - kakao_send_data.templateArgs.salePrice) * 100 / kakao_send_data.templateArgs.originalPrice); // 할인율
375				}
376
377				Kakao.Link.sendCustom(kakao_send_data);
378			} else {
379				kakao_send_data.objectType = type;
380				Kakao.Link.sendDefault(kakao_send_data);
381			}
382		}else{
383			alert(LOCALIZE.설명_사이트관리자설정에의해차단된콘텐츠입니다());
384		}
385
386	};
387
388	/***
389	 * 라인 공유하기
390	 */
391	var shareLine = function(){
392		if(LIMIT_API_LIST.indexOf('line_link') === -1){
393			window.open("http://line.naver.jp/R/msg/text/?" + fixedEncodeURIComponent(subject) + " " + fixedEncodeURIComponent(location.href));
394		}else{
395			alert(LOCALIZE.설명_사이트관리자설정에의해차단된콘텐츠입니다());
396		}
397	};
398
399	/***
400	 * 밴드 공유하기
401	 */
402	var shareBand = function(){
403		if(LIMIT_API_LIST.indexOf('band_link') === -1){
404			var tmp_subject = encodeURIComponent(subject + "\n");
405			var body = tmp_subject + fixedEncodeURIComponent(location.href);
406			window.open("http://band.us/plugin/share?body=" + body + "&route=" + fixedEncodeURIComponent(location.href));
407		}else{
408			alert(LOCALIZE.설명_사이트관리자설정에의해차단된콘텐츠입니다());
409		}
410	};
411
412	function fixedEncodeURIComponent(str) {
413		return encodeURIComponent(str).replace(/[\.]/g, function(c) {     return '%' + c.charCodeAt(0).toString(16);   });
414	}
415
416	var shareNaver = function(){
417		if(LIMIT_API_LIST.indexOf('naver_link') === -1){
418			if(content.length == 0){
419				if(confirm('네이버 블로그 공유 시 본문 텍스트가 없을 경우 사이트 내용 텍스트를 순차적으로 출력합니다. 그래도 공유하시겠습니까?')){
420					shareSnsMetatag('naver');
421				}
422			}else{
423				shareSnsMetatag('naver');
424			}
425		}else{
426			alert(LOCALIZE.설명_사이트관리자설정에의해차단된콘텐츠입니다());
427		}
428	};
429
430	/***
431	 * 페이스북 공유하기
432	 */
433	var shareFacebook = function(){
434		if(LIMIT_API_LIST.indexOf('facebook_link') === -1){
435			shareSnsMetatag('facebook');
436		}else{
437			alert(LOCALIZE.설명_사이트관리자설정에의해차단된콘텐츠입니다());
438		}
439	};
440
441	/***
442	 * 트위터 공유하기
443	 */
444	var shareTwitter = function(){
445		if(LIMIT_API_LIST.indexOf('twitter_link') === -1){
446			shareSnsMetatag('twitter');
447		}else{
448			alert(LOCALIZE.설명_사이트관리자설정에의해차단된콘텐츠입니다());
449		}
450	};
451
452	/***
453	 * 인스타그램 공유하기
454	 */
455	var shareInstagram = function(){
456		if(IS_MOBILE){
457
458		}else{
459
460		}
461	};
462
463	var shareSnsMetatag = function(type){
464
465		switch(type){
466			case 'naver':
467				window.open("https://share.naver.com/web/shareView.nhn?url=" + encodeURI(encodeURIComponent(location.href)) + "&title=" + encodeURIComponent(subject));
468				break;
469			case 'facebook':
470				window.open("http://www.facebook.com/sharer/sharer.php?u=" + encodeURIComponent(location.href));
471				break;
472			case 'twitter':
473				window.open("https://twitter.com/intent/tweet?text=" + encodeURIComponent(subject) + "&url=" + encodeURIComponent(location.href));
474				break;
475			default:
476				alert(LOCALIZE.설명_공유에실패하였습니다());
477				break;
478		}
479	};
480
481	return {
482		showDefalutSnsShareList : function(_main_url, _site_name, _subject, _content, _link_url, _security_link_url, _image){
483			return showDefalutSnsShareList(_main_url, _site_name, _subject, _content, _link_url, _security_link_url, _image);
484		},
485		setSnsApi : function(_type){
486			return setSnsApi(_type);
487		},
488		shareKakaoTalk : function(_type){
489			return shareKakaoTalk(_type);
490		},
491		shareLine : function(){
492			return shareLine();
493		},
494		shareBand : function(){
495			return shareBand();
496		},
497		shareNaver : function(){
498			return shareNaver();
499		},
500		shareFacebook : function(){
501			return shareFacebook();
502		},
503		shareTwitter : function(){
504			return shareTwitter();
505		},
506		copyToClipboard : function(text){
507			return copyToClipboard(text);
508		},
509		loadKakaoApi : function(key){
510			loadKakaoApi(key);
511		},
512		init : function(d){
513			return init(d);
514		}
515	};
516
517}();

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.