PageSourceSearch

https://onmusicgb.co.kr/js/article_reaction.js?1782135066

js onmusicgb.co.kr collected 2026-10-01 15:16:50 UTC 7,036 bytes, 219 lines download raw bytes

1var ARTICLE_REACTION = function(){
2	var $btn,$num;
3	var target_type, target_code;
4	var like_token, like_token_key;
5	var like_token_loading = false;
6	var like_token_callbacks = [];
7	var like_token_request_id = 0;
8	var like_token_request_timeout = null;
9	var post_position; //글목록에서 좋아요 클릭시 클릭한 글이 무엇인지 알기 위한 변수
10	var recommend_token, recommend_token_key;
11	var init = function(type,code,$b,$n){
12		$btn = $b;
13		$num = $n;
14		target_type = type;
15		target_code = code;
16	};
17
18	//글 목록에서 좋아요 클릭구분
19	var checkLikeToken = function(key,token,current_position){
20		if((typeof like_token === "undefined") || (typeof like_token_key === "undefined") || (post_position !== current_position)){
21			like_token = token;
22			like_token_key = key;
23
24		}
25	};
26
27	var setLikeToken = function(){
28		if(isEdgeStatelessPage()) return;
29		requestLikeToken();
30	};
31
32	var requestLikeToken = function(callback){
33		if(typeof callback === 'function'){
34			like_token_callbacks.push(callback);
35		}
36		if(like_token_loading) return;
37		like_token_loading = true;
38		// 토큰 요청 재시도 후 늦게 도착한 이전 응답은 무시한다.
39		like_token_request_id++;
40		var current_request_id = like_token_request_id;
41		if(like_token_request_timeout !== null) clearTimeout(like_token_request_timeout);
42		like_token_request_timeout = setTimeout(function(){
43			if(current_request_id !== like_token_request_id) return;
44			like_token_loading = false;
45			like_token_callbacks = [];
46			like_token_request_timeout = null;
47		}, 10000);
48		TOKEN.makeToken(86400,'article_reaction_set_like',function(token,token_key){
49			if(current_request_id !== like_token_request_id) return;
50			if(like_token_request_timeout !== null){
51				clearTimeout(like_token_request_timeout);
52				like_token_request_timeout = null;
53			}
54			like_token = token;
55			like_token_key = token_key;
56			like_token_loading = false;
57			runLikeTokenCallbacks();
58		});
59	};
60
61	var runLikeTokenCallbacks = function(){
62		var callbacks = like_token_callbacks.slice(0);
63		like_token_callbacks = [];
64		for(var i = 0; i < callbacks.length; i++){
65			if(typeof callbacks[i] === 'function') callbacks[i]();
66		}
67	};
68
69	var ensureLikeToken = function(callback){
70		if((typeof like_token !== "undefined") && (typeof like_token_key !== "undefined")){
71			callback();
72			return;
73		}
74		requestLikeToken(callback);
75	};
76
77	var isEdgeStatelessPage = function(){
78		return typeof window !== 'undefined' && !!window.IMWEB_EDGE_STATELESS_TOKEN;
79	};
80
81	var setRecommendToken = function(){
82		TOKEN.makeToken(86400,'article_reaction_set_recommend',function(token,token_key){
83			recommend_token = token;
84			recommend_token_key = token_key;
85		});
86	};
87
88	var toggleLike = function(){
89		ensureLikeToken(function(){
90			toggleReaction('like');
91		});
92	};
93
94	var toggleReaction = function(type){
95		$.ajax({
96			type        : 'POST',
97			data        : {'target_type':target_type, 'target_code' : target_code,'token':like_token, 'key' : like_token_key, 'type' : type},
98			url         : ('/ajax/article_reaction.cm'),
99			dataType    : 'json',
100			async       : true,
101			cache       : false,
102			success     : function (result) {
103				if(result.msg == 'SUCCESS'){
104
105
106					//최신글 위젯의 좋아요 버튼, 카운트
107					var newest_like_btn = $("[name='newest_like_btn_" + target_code + "']");
108					var newest_like_count = $("[name='newest_like_count_" + target_code + "']");
109
110					if(result.mode == 'add'){
111
112						//최신글 위젯 갱신
113						$.each(newest_like_btn, function(){
114							newest_like_btn.toggleClass('on', true);
115						});
116
117						$.each(newest_like_count, function(index){
118							newest_like_count.eq(index).text(parseInt(newest_like_count.eq(index).text()) + 1);
119						});
120
121						$btn.toggleClass('on', true);
122						$num.text(parseInt($num.text()) + 1);
123					}else if(result.mode == 'delete'){
124
125						//최신글 위젯 갱신
126						$.each(newest_like_btn, function(){
127							newest_like_btn.toggleClass('on',false);
128						});
129
130						$.each(newest_like_count, function(index){
131							newest_like_count.eq(index).text(parseInt(newest_like_count.eq(index).text())-1);
132						});
133
134						$btn.toggleClass('on',false);
135						$num.text(parseInt($num.text())-1);
136						$('#like_token_key_' + target_code).val(result.key);
137						$('#like_token_' + target_code).val(result.token);
138						like_token = result.token;
139						like_token_key = result.key;
140					}
141					post_position = target_code; //글 목록에서 좋아요 클릭한 글의 위치를 파악하기위해 저장
142				}
143			}
144		});
145	};
146
147	var mapToggleLike = function(idx,list_type){
148		ensureLikeToken(function(){
149			mapToggleReaction('like',idx,list_type);
150		});
151	};
152
153	var mapToggleReaction = function(type,idx,list_type){
154
155		$.ajax({
156			type        : 'POST',
157			data        : {'target_type':target_type, 'target_code' : target_code,'token':like_token, 'key' : like_token_key, 'type' : type},
158			url         : ('/ajax/article_reaction.cm'),
159			dataType    : 'json',
160			async       : true,
161			cache       : false,
162			success     : function (result) {
163				if(result.msg == 'SUCCESS'){
164					if(list_type == 'map'){
165						if(result.mode == 'add'){
166							$btn.toggleClass('on', true);
167							$('#list_pop_'+idx).find('#like_btn_' + target_code).toggleClass('on', true);
168							$num.text(parseInt($num.text()) + 1);
169							$('#list_'+idx).find('#like_count_' + target_code).text(parseInt($num.text()));
170							$('#list_pop_'+idx).find('#like_count_' + target_code).text(parseInt($num.text()));
171						}else if(result.mode == 'delete'){
172							$btn.toggleClass('on',false);
173							$('#list_pop_'+idx).find('#like_btn_' + target_code).toggleClass('on', false);
174							$num.text(parseInt($num.text())-1);
175							$('#list_'+idx).find('#like_count_' + target_code).text(parseInt($num.text()));
176							$('#list_'+idx).find('#like_token_key_' + target_code).val(result.key);
177							$('#list_'+idx).find('#like_token_' + target_code).val(result.token);
178							$('#list_pop_'+idx).find('#like_count_' + target_code).text(parseInt($num.text()));
179							like_token = result.token;
180							like_token_key = result.key;
181						}
182					}else{
183						if(result.mode == 'add'){
184							$btn.toggleClass('on', true);
185							$num.text(parseInt($num.text()) + 1);
186						}else if(result.mode == 'delete'){
187							$btn.toggleClass('on',false);
188							$num.text(parseInt($num.text())-1);
189							like_token = result.token;
190							like_token_key = result.key;
191						}
192					}
193					post_position = target_code; //글 목록에서 좋아요 클릭한 글의 위치를 파악하기위해 저장
194				}
195			}
196		});
197	};
198
199	return {
200		'init' : function(type,code,$btn,$num){
201			init(type,code,$btn,$num);
202		},
203		'checkLikeToken' : function(key,token, current_position){
204			checkLikeToken(key,token, current_position);
205		},
206		'setLikeToken' : function(){
207			setLikeToken();
208		},
209		'setRecommendToken' : function(){
210			setRecommendToken();
211		},
212		'toggleLike' : function(){
213			toggleLike();
214		},
215		'mapToggleLike' : function(idx,list_type){
216			mapToggleLike(idx,list_type);
217		}
218	}
219};

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.