/********************************************************************************** * modular_core.js * * Modular 프레임워크의 핵심과 관련된 부분이 포함되어 있는 스크립트 파일 * 'Modular' 이라는 네임스페이스를 사용하고 있음 * * Modular 프레임워크에서 추가적인 네임스페이스를 사용하고자 할 경우에는 * 여기 포함되어 있는 Modular.namespace 함수를 사용하여 네임 스페이스를 추가해야 함 * * @author 김선엽(sunyoupk@udapsoft.co.kr) **********************************************************************************/ /** * 프레임워크의 메인 네임스페이스 */ Modular = { /** * Modular JavaScript 프레임워크 버전 */ version : "0.0.9", namespace : function() { var a = arguments, o = null, i, j, d, rt; for (i = 0; i < a.length; ++i) { d = a[i].split("."); rt = d[0]; eval("if (typeof " + rt + " == 'undefined'){" + rt + " = {};} o = " + rt + ";"); for (j = 1; j < d.length; ++j) { /* * 예시) * Modular["model"] = Modular["model"] || {}; * Modular["model"] = typeof Modular["model"] == "undefined" ? {} : Modular["model"]; */ o[d[j]] = o[d[j]] || {}; o = o[d[j]]; }//end for }//end for } }; /* * Modular에 namespace를 추가하고자 할 경우에는 필히 아래에 해당 namespace를 기술해야만 한다. * */ Modular.namespace("Modular", "Modular.model", "Modular.view", "Modular.controller"); /******************************************************* * Modular 프레임워크의 템플릿과 관련된 부분 *******************************************************/ /* * template 적용을 위한 jquery.template.js 기본 설정 적용 * * 설정 변수는 #변수명# 형태로 지정한다. * */ jQuery.template.regx.modular = /#([\w-]+)(?:\:([\w\.]*)(?:\((.*?)?\))?)?#/g; jQuery.template.regx.standard = jQuery.template.regx.modular; /******************************************************* * Modular 프레임워크의 유틸리티와 관련된 부분 *******************************************************/ /** * 문자열에 존재하는 공백을 삭제합니다. *
 * 
 * var s = "  foo bar  ";
 * alert("[" + s + "]");         //alerts "[  foo bar  ]"
 * alert("[" + s.trim() + "]");  //alerts "[foo bar]"
 * 
 * 
* * @return {String} 공백이 제거된 문자열 */ String.prototype.trim = function() { return function(){ return jQuery.trim(this); }; }(); /** * 주어진 문자열이 해당 문자열로 시작되는지 확인 * @param prefix {String} 검사 대상 시작 문자열 * @return {Boolean} true or false */ String.prototype.startsWith = function(prefix) { return this.indexOf(prefix) == 0; }; /** * 주어진 문자열이 해당 문자열로 종료되는지 확인 * @param suffix {String} 검사 대상 종료 문자열 * @return {Boolean} true or false */ String.prototype.endsWith = function(suffix) { return this.match(suffix + "$") == suffix; }; /** * 프레임워크의 유틸리티 함수가 포함된 클래스 */ Modular.Utils = { /** * 주어진 문자열에 text가 존재하는지 확인합니다. *
	 * 
	 * var s = "";
	 * alert(Modular.Utils.hasText(s));	//alerts "false"
	 * 
	 * 
* * @param str {String} 검사 대상 문자열 * @return {boolean} 검사 결과 (Text 존재 시 true / 미 존재 시 false) */ hasText : function(str) { var strVal; if (!str) { return false; }//end if if (typeof str == "object") { strVal = str.value; } else { strVal = new String(str); }//end if else if (strVal && strVal.trim().length > 0) { return true; } else { return false; }//end if else }, /** * 주어진 객체를 JSON String 형태로 변환하여 리턴합니다. * * 이 메소드는 jQuery.toJSON.js 플러그인을 사용하고 있습니다. * 따라서, 페이지 내에서 정상적으로 동작하기 위해서는 * * 와 같이 스크립트 소스 가 설정되어 있어야 합니다. * * @param object {Object} JSON String으로 변환하려는 대상 객체 * @return {String} 변환된 JSON String */ toJSON : function(object) { return jQuery.toJSON(object); }, /** * 해당 배열에 지정된 이름에 해당하는 값이 있는지 여부를 리턴합니다. * * @param array {Array} 배열객체 * @param obj {String} 찾고자 하는 값 * @return {boolean} 검사 결과 (산택값 존재 시 true / 미 존재 시 false) */ containsArray: function( array, obj ) { if ( array && array.length > 0 ) { for ( var i = 0 ; i < array.length ; i++ ) { if ( array[i] == obj ) { return true; } } } return false; }, /** * 지정된 이름에 해당하는 쿠키 값을 리턴합니다. * * @param name {String} 쿠키 이름 * @return {String} 쿠키 값 */ getCookie : function (name) { return jQuery.cookie(name); }, /** * 지정된 이름과 종료 일자에 해당하는 쿠키 값을 설정합니다. * * @param name {String} 쿠키 이름 * @param value {String} 쿠키 값 * @param expiredays {Number} 만료 날짜 */ setCookie : function (name, value, expiredays) { var ed = new Number(expiredays); if (isNaN(ed)) { jQuery.cookie(name, value); } else { jQuery.cookie(name, value, {expires: ed.valueOf()}); }//end if else }, /** * 지정된 이름의 쿠키를 삭제합니다. * * @param name {String} 쿠키 이름 */ removeCookie : function (name) { jQuery.cookie(name); }, /** * 지정된 ID에 해당하는 정보를 쿠키의 유효기간 설정을 사용하여 * 지정된 기간동안 유효하도록 설정합니다. * * @param name {String} 쿠기 이름 * @param expiredays {Number} 유효 날짜 */ setOpenEventDays : function (name, expiredays) { this.setCookie("openevent_" + name, "check", expiredays); }, /** * 해당 Form내의 지정된 Key에 해당 하는 checkbox들을 toggle합니다. * * @param formId {String} 타겟 Form 아이디 * @param chkKey {String} checkbox 엘리멘트 이름 */ toggleCheckBox : function(formId, chkKey) { jQuery("#"+formId + " input:checkbox[name='" + chkKey + "']").each(function (i) { this.checked = (this.checked) ? false : true; }); }, /** * 해당 Form내의 지정된 Key에 해당 하는 선택된 checkbox 값이 있는지 여부 반환 * * @param formId {String} 타겟 Form 아이디 * @param chkKey {String} checkbox 엘리멘트 이름 * @return {boolean} 검사 결과 (산택값 존재 시 true / 미 존재 시 false) */ hasCheckedValue : function (formId, chkKey) { return jQuery("#"+formId + " input:checkbox[name='" + chkKey + "']:checked").size() > 0; }, /** * 해당 Form내의 지정된 Key에 해당 하는 선택된 checkbox 값을 * 주어진 구분자를 사용해 문자열로 반환합니다. * * @param formId {String} 타겟 Form 아이디 * @param chkKey {String} checkbox 엘리멘트 이름 * @param delimeter {String} 구분자 */ getCheckedValue : function (formId, chkKey, delimeter) { var arr = []; jQuery("#"+formId + " input:checkbox[name='" + chkKey + "']:checked").each(function (i) { arr.push(jQuery(this).val()); }); return arr.join(delimeter); } }; /** * 페이지 이동과 관련된 유틸리티 메소드를 포함하는 클래스 */ Modular.Page = { /** * 주어진 페이지로 이동합니다. * * @param location {String} 이동하려는 URL * @param hasHistory {boolean} 이력 저장 여부 */ go : function (location, hasHistory) { var historyKey = "modular.web.mvc.history"; var params = {}; if (hasHistory) { params[historyKey] = "true"; }//end if window.location.href = location + "?" + jQuery.param(params); } }; /** * Modular.debug()를 통한 디버깅 dialog를 제공한다. * (jQuery Dialog를 이용.) */ Modular.Debugger = { enabled : true, //debugger를 on off 한다. dialog : jQuery("
"), body : jQuery("
"), shown : false, show : function(){ if(this.dialog.dialog( "isOpen" )) return; if(this.shown){ this.dialog.dialog( "open" ); }else{ this.dialog.append(this.body); this.dialog.dialog({ autoOpen: true, title: "HONE Debug Dialog", width: 600, show: 'blind', hide: 'blind', position : ['center','bottom'], buttons: { "clear": function() { Modular.Debugger.body.html(""); }} }); this.shown = true; } } }; /** * 디버깅용 로그 기록하기. */ Modular.debug = function(msg){ if(Modular.Debugger.enabled){ Modular.Debugger.show(); var d = new Date(); var currentTime = "["+d.getFullYear() + "." + (d.getMonth() + 1) + "."+ d.getDate()+ " "+ d.getHours()+ ":" + d.getMinutes()+":"+d.getSeconds()+"] "; var logMsg = jQuery(""+currentTime+""+msg+""); jQuery("td", logMsg).css({'border-bottom': '1px dotted red'}); Modular.Debugger.body.prepend(logMsg); } };