PageSourceSearch

https://innobranch.com/resources/common/js/common.js

js innobranch.com collected 2026-10-08 08:26:14 UTC 13,138 bytes, 518 lines download raw bytes

1	/* 정규식 */
2	var REGEX_TIME_HHMM = /([01][0-9]|2[0-3])[\:\s]*([0-6][0-9])$/;
3
4	/***** Date *****/
5	var MONTH_NAMES = ["JANUARY", "FEBRUARY", "MARCH", "APRIL", "MAY", "JUNE", "JULY",
6	                   "AUGUST", "SEPTEMBER", "OCTOBER", "NOVEMBER", "DECEMBER"];
7	
8	var WEEK_NAMES = ["SUN", "MON", "TUE", "WED", "THU", "FRI", "SAT"];
9
10	Date.prototype.format = function(f) {
11	    if (!this.valueOf()) return " ";
12	 
13	    var weekName = ["SUNDAY", "MONDAY", "TUESDAY", "WEDNESDAY", "THURSDAY", "FRIDAY", "SATURDAY"];
14	    var weekNameShort = ["SUN", "MON", "TUE", "WED", "THU", "FRI", "SAT"];
15	    var weekNameKr = ["일요일", "월요일", "화요일", "수요일", "목요일", "금요일", "토요일"];
16	    var d = this;
17	     
18	    return f.replace(/(yyyy|yy|MM|dd|E|hh|mm|ss|SSS|a\/p)/gi, function($1) {
19	        switch ($1) {
20	            case "yyyy": return d.getFullYear();
21	            case "yy": return (d.getFullYear() % 1000).zf(2);
22	            case "MM": return (d.getMonth() + 1).zf(2);
23	            case "dd": return d.getDate().zf(2);
24	            case "E": return weekNameKr[d.getDay()];
25	            case "e": return weekNameShort[d.getDay()];
26	            case "HH": return d.getHours().zf(2);
27	            case "hh": return ((h = d.getHours() % 12) ? h : 12).zf(2);
28	            case "mm": return d.getMinutes().zf(2);
29	            case "ss": return d.getSeconds().zf(2);
30	            case "SSS": return d.getMilliseconds().zf(3);
31	            case "a/p": return d.getHours() < 12 ? "오전" : "오후";
32	            default: return $1;
33	        }
34	    });
35	};
36	
37	function parseDate(s)
38	{
39		if (!s) {return null;}
40		if (s.length == 0)
41		{
42			return null;
43		}
44		
45		s= s.replace(/\-/g, "");
46		
47		var years = 0;
48		var months = 0;
49		var days = 0;
50		var hours = 0;
51		var minutes = 0;
52		var seconds = 0;
53		var milliSeconds = 0;
54		
55		if (s.length >= 8)
56		{
57			years = parseInt(s.substring(0, 4));
58			months = parseInt(s.substring(4, 6)) - 1;
59			days = parseInt(s.substring(6, 8));
60		}
61		if (s.length >= 14)
62		{
63			hours = parseInt(s.substring(8, 10));
64			minutes = parseInt(s.substring(10, 12));
65			seconds = parseInt(s.substring(12, 14));
66		}
67		if (s.length == 17)
68		{
69			milliSeconds = parseInt(s.substring(14));
70		}
71		
72		var time = new Date();
73		time.setFullYear(years, months, days);
74		time.setHours(hours, minutes, seconds, milliSeconds);
75		
76		return time;
77	}
78	
79	
80	function isNowIncluded(from, to)
81	{
82		var now = new Date().getTime();
83		
84		if (from == null)
85		{
86			if (to == null)
87			{
88				return true;
89			}
90			else
91			{
92				to.setHours(23, 59, 59, 999);
93				return (now <= to.getTime());
94			}
95		}
96		else
97		{
98			from.setHours(0, 0, 0, 0);
99			
100			if (to == null)
101			{
102				return (now >= from.getTime());
103			}
104			else
105			{
106				to.setHours(23, 59, 59, 999);
107				return ((now >= from.getTime()) && (now <= to.getTime()));
108			}
109		}
110	}
111	
112	
113	/***** String *****/
114	String.prototype.string = function(len){var s = '', i = 0; while (i++ < len) { s += this; } return s;};
115	String.prototype.zf = function(len){return "0".string(len - this.length) + this;};
116	Number.prototype.zf = function(len){return this.toString().zf(len);};
117
118	function initExtraProtoType() {
119		if(typeof String.prototype.trim !== 'function') {
120		    String.prototype.trim = function() {
121		        return this.replace(/^\s+|\s+$/g, ''); 
122		    };
123		}
124	}
125	
126	if (!String.prototype.endsWith) {
127		  String.prototype.endsWith = function(searchString, position) {
128		      var subjectString = this.toString();
129		      if (typeof position !== 'number' || !isFinite(position) || Math.floor(position) !== position || position > subjectString.length) {
130		        position = subjectString.length;
131		      }
132		      position -= searchString.length;
133		      var lastIndex = subjectString.indexOf(searchString, position);
134		      return lastIndex !== -1 && lastIndex === position;
135		  };
136		}
137
138	
139	/***** 우편번호 *****/
140	function zip(fnCallback)	// <script src="http://dmaps.daum.net/map_js_init/postcode.v2.js"></script> 추가되어 있어야 함
141	{
142		new daum.Postcode({
143	        oncomplete: function(data) {
144	            var zipcode = data.zonecode;
145	            var address = data.address;
146	            
147	            if (fnCallback)
148	            {
149	            	fnCallback(zipcode, address);
150	            }
151	            
152	        }
153	    }).open();
154		
155	}
156	
157
158	/***** 전화번호 Parser *****/
159	function PhoneNumber()
160	{
161		this.phoneNumber1 = "";
162		this.phoneNumber2 = "";
163		this.phoneNumber3 = "";
164		
165		this.validPhoneNumber = false;
166	}
167	
168	PhoneNumber.prototype.parse = function(phoneNumber)
169	{
170		if (phoneNumber == "")
171		{
172			this.valid = true;
173			return;
174		}
175		
176		var regex = /^\(?([0-9]{3})\)?[-. ]?([0-9]{4})[-. ]?([0-9]{4})$/;	// xxx xxxx xxxx
177		var result = phoneNumber.match(regex);
178
179		if (!result)
180		{
181			regex = /^\(?([02]{2})\)?[-. ]?([0-9]{3})[-. ]?([0-9]{4})$/;	// 02 xxx xxxx
182			result = phoneNumber.match(regex);
183		}
184
185		if (!result)
186		{
187			regex = /^\(?([02]{2})\)?[-. ]?([0-9]{4})[-. ]?([0-9]{4})$/;	// 02 xxxx xxxx
188			result = phoneNumber.match(regex);
189		}
190
191		if (!result)
192		{
193			regex = /^\(?([0-9]{3})\)?[-. ]?([0-9]{3})[-. ]?([0-9]{4})$/;	// xxx xxx xxxx
194			result = phoneNumber.match(regex);
195		}
196
197		if (result)
198		{
199			this.phoneNumber1 = result[1];
200			this.phoneNumber2 = result[2];
201			this.phoneNumber3 = result[3];
202			
203			this.valid = true;
204		}
205		else
206		{
207			this.valid = false;
208		}
209	};
210	
211	/**
212	 * 파일 이름의 확장자를 이용해서 주어진 파일 이름을 가진 파일이 사진(그림) 파일인지 여부를 되돌린다.
213	 * 
214	 * @param fileName 파일 이름
215	 * @returns 사진(그림) 파일이면 true, 아니면 false
216	 */
217	function isImageFile(fileName)
218	{
219		return (fileName.toLowerCase().match(/\.(jpg|jpeg|png|gif)$/));
220	}
221
222	
223	/**
224	 * 파일 이름의 확장자를 이용해서 주어진 파일 이름을 가진 파일이 동영상 파일인지 여부를 되돌린다.
225	 * 
226	 * @param fileName 파일 이름
227	 * @returns 동영상 파일이면 true, 아니면 false
228	 */
229	function isMovieFile(fileName)
230	{
231		return (fileName.toLowerCase().match(/\.(avi|mp4|mpg|mpeg|mpe|wmv|asf|asx)$/));
232	}
233	
234	
235	function setCookie(name, value, expireDay) 
236	{
237		var cookies = name + '=' + escape(value) + '; path=/ ';
238
239		if (typeof expireDay != 'undefined')
240		{
241			var expire = new Date();
242			expire.setDate(expire.getDate() + expireDay);
243			cookies += ';expires=' + expire.toGMTString() + ';';
244		}
245			
246		document.cookie = cookies;
247	}
248	
249	function getCookie(name) {
250		name = name + '=';
251		var cookieData = document.cookie;
252
253		var start = cookieData.indexOf(name);
254		var value = '';
255		
256		if (start != -1) 
257		{
258			start += name.length;
259			var end = cookieData.indexOf(';', start);
260			if (end == -1)
261			{
262				end = cookieData.length;
263			}
264			value = cookieData.substring(start, end);
265		}
266		return unescape(value);
267	}
268
269	
270	function removeDuplicatedItem(list)
271	{
272		if (list instanceof Array)
273		{
274			var removeCount = 0;
275			for (var i = 0 ; i < list.length ; i++)
276			{
277				for (var j = i + 1 ; j < list.length ; j++)
278				{
279					removeCount = 0;
280					
281					if (list[i] == list[j])
282					{
283						list.splice(j, 1);
284						
285						j--;
286						removeCount++;
287					}
288				}
289				i -= removeCount;
290			}
291		}
292	}
293	
294	
295	/**
296	 * 임의의 object에 포함되어 이벤트 발생과 수신을 담당할 이벤트 관리자
297	 */
298	function EventDispatcher()
299	{
300		this.listenerMap = {};
301	}
302	
303	/* 이벤트 리스너를 등록한다. */
304	EventDispatcher.prototype.addEventListener = function(eventType, fnListener)
305	{
306		var listeners = this.listenerMap[eventType];
307		if (listeners === undefined)
308		{
309			listeners = [];
310			this.listenerMap[eventType] = listeners;
311		}
312		
313		listeners.push(fnListener);
314	};
315	
316	/* 이벤트 리스너를 제거한다. */
317	EventDispatcher.prototype.removeEventListener = function(eventType, fnListener)
318	{
319		var listeners = this.listenerMap[eventType];
320		if (listeners)
321		{
322			for (var i in listeners)
323			{
324				if (listeners[i] === fnListener)
325				{
326					listeners.splice(i, 1);
327					break;
328				}
329			}
330		}
331	};
332	
333	/* 이벤트를 발생시킨다. */
334	EventDispatcher.prototype.dispatchEvent = function(eventType)
335	{
336		var listeners = this.listenerMap[eventType];
337
338		if (listeners)
339		{
340			var args = [];
341			for (var j = 1 ; j < arguments.length ; j++)
342			{
343				args.push(arguments[j]);
344			}
345			
346			for (var i in listeners)
347			{
348				listeners[i].apply(this, args);
349			}
350		}
351	};
352
353	
354	function zeroFill( number, width )
355	{
356		width -= number.toString().length;
357		if (width > 0) {
358			return new Array(width + (/\./.test(number) ? 2 : 1)).join('0')
359					+ number;
360		}
361		return number + "";
362	}
363	
364	
365	function justifyLabels()
366	{
367		$(".form_item label").each(function(index, label) {
368			var $label = $(label);
369			var labelWidth = $label.width();
370			labelWidth = 80;
371			var text = $label.html().trim();
372			
373			var div = $("<div>");
374			div.css("width", " 200px")
375			div.css("height", "15px");
376			div.html(text);
377			
378			$label.empty();
379			$label.append(div);
380			
381			var fontName = $label.css("font-family");
382			var wordWidth = getWidthOfText(text, fontName, $label.css("font-size"));
383
384			var letterSpacing = ((((labelWidth - 0) - (wordWidth + 0)) /  (text.length - 1))) * 1.0; 
385			
386			$label.css("letter-spacing", letterSpacing + "px");
387		});
388		
389		
390		function getWidthOfText(txt, fontname, fontsize)
391		{
392			  // Create dummy span
393			  var e = document.createElement('span');
394			  // Set font-size
395			  e.style.fontSize = fontsize;
396			  // Set font-face / font-family
397			  e.style.fontFamily = fontname;
398			  // Set text
399			  e.innerHTML = txt;
400			  document.body.appendChild(e);
401			  // Get width NOW, since the dummy span is about to be removed from the document
402			  var w = e.offsetWidth;
403			  // Cleanup
404			  document.body.removeChild(e);
405			  // All right, we're done
406			  return w;
407			}
408	}
409
410	function formatNumber(x) 
411	{
412		return x.toString().replace(/\B(?=(\d{3})+(?!\d))/g, ",");
413	}
414	
415	function formatNewline(src)
416	{
417		return replaceAll(src, "\n", "<br>");
418	}
419
420	function replaceAll(str, searchStr, replaceStr) 
421	{
422		return str.split(searchStr).join(replaceStr);
423	}
424
425	/* query string을 parsing 해서 json 으로 되돌림 */
426	function getUrlParams() {
427		var params = {};
428		window.location.search.replace(/[?&]+([^=&]+)=([^&]*)/gi, function (str, key, value) { params[key] = value; });
429		return params;
430	};
431	
432	
433	/*color*/
434	
435	const hsbToHex = (h, s, b) => {
436		let rgb = hsbToRgb(h, s, b);
437		return rgbToHex(rgb[0], rgb[1], rgb[2]);
438	}
439	
440	const hexToHsb = hex=>{
441		let rgb = hexToRgb(hex);
442		return rgbToHsb(rgb[0], rgb[1], rgb[2]);
443	}
444	
445	const rgbToHex = (r, g, b) =>
446  ((r << 16) + (g << 8) + b).toString(16).padStart(6, '0');
447  
448  const hexToRgb = hex => {
449  let alpha = false,
450      h = hex.slice(hex.startsWith('#') ? 1 : 0);
451  if (h.length === 3) h = [...h].map(x => x + x).join('');
452  else if (h.length === 8) alpha = true;
453  h = parseInt(h, 16);
454  var result = [(h >>> (alpha ? 24 : 16)),((h & (alpha ? 0x00ff0000 : 0x00ff00)) >>> (alpha ? 16 : 8)),((h & (alpha ? 0x0000ff00 : 0x0000ff)) >>> (alpha ? 8 : 0)), (alpha ? `, ${h & 0x000000ff}` : '')];
455  
456  for(i in result){
457	  result[i] = Math.round(result[i]);
458  }
459
460	return result;
461};
462
463const rgbToHsb = (r, g, b) => {
464  r /= 255;
465  g /= 255;
466  b /= 255;
467  const v = Math.max(r, g, b),
468    n = v - Math.min(r, g, b);
469  const h =
470    n === 0 ? 0 : n && v === r ? (g - b) / n : v === g ? 2 + (b - r) / n : 4 + (r - g) / n;
471  var result = [60 * (h < 0 ? h + 6 : h), v && (n / v) * 100, v * 100]
472  
473  for(i in result){
474	  result[i] = Math.round(result[i]);
475  }
476
477	return result;
478};
479
480const hsbToRgb = (h, s, b) => {
481  s /= 100;
482  b /= 100;
483  const k = (n) => (n + h / 60) % 6;
484  const f = (n) => b * (1 - s * Math.max(0, Math.min(k(n), 4 - k(n), 1)));
485  var result = [255 * f(5), 255 * f(3), 255 * f(1)];
486  
487  for(i in result){
488	  result[i] = Math.round(result[i]);
489  }
490	
491	return result;
492};
493
494function lpad(str, padLen, padStr) {
495    if (padStr.length > padLen) {
496        console.log("오류 : 채우고자 하는 문자열이 요청 길이보다 큽니다");
497        return str;
498    }
499    str += ""; // 문자로
500    padStr += ""; // 문자로
501    while (str.length < padLen)
502        str = padStr + str;
503    str = str.length >= padLen ? str.substring(0, padLen) : str;
504    return str;
505}
506
507function rpad(str, padLen, padStr) {
508    if (padStr.length > padLen) {
509        console.log("오류 : 채우고자 하는 문자열이 요청 길이보다 큽니다");
510        return str + "";
511    }
512    str += ""; // 문자로
513    padStr += ""; // 문자로
514    while (str.length < padLen)
515        str += padStr;
516    str = str.length >= padLen ? str.substring(0, padLen) : str;
517    return str;
518}

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.