mirror of
https://github.com/Lastorder-DC/rhymix.git
synced 2026-05-10 20:44:28 +09:00
#18576578 XMLJsFilter를 JAF에 맞도록 변환
git-svn-id: http://xe-core.googlecode.com/svn/sandbox@7079 201d5d3c-b55e-5fd7-737f-ddc643e51545
This commit is contained in:
parent
7352faa914
commit
e4f0306a42
2 changed files with 496 additions and 532 deletions
|
|
@ -107,8 +107,6 @@
|
||||||
// method가 존재하면 실행
|
// method가 존재하면 실행
|
||||||
if(method_exists($oExtendFilter, $method)) {
|
if(method_exists($oExtendFilter, $method)) {
|
||||||
// 결과를 받음
|
// 결과를 받음
|
||||||
//$extend_filter_list = call_user_method($method, $oExtendFilter, true);
|
|
||||||
//$extend_filter_list = call_user_func(array($oExtendFilter, $method));
|
|
||||||
$extend_filter_list = $oExtendFilter->{$method}(true);
|
$extend_filter_list = $oExtendFilter->{$method}(true);
|
||||||
$extend_filter_count = count($extend_filter_list);
|
$extend_filter_count = count($extend_filter_list);
|
||||||
|
|
||||||
|
|
@ -131,8 +129,21 @@
|
||||||
$target_type_list = array();
|
$target_type_list = array();
|
||||||
|
|
||||||
// js function 을 만들기 시작
|
// js function 을 만들기 시작
|
||||||
$js_doc = sprintf("function %s(fo_obj) {\n", $filter_name);
|
$js_doc = array();
|
||||||
$js_doc .= sprintf("\tvar oFilter = new XmlJsFilter(fo_obj, \"%s\", \"%s\", %s);\n", $module, $act, $callback_func);
|
$js_doc[] = "function {$filter_name}(fo_obj){";
|
||||||
|
$js_doc[] = "\tvar validator = xe.getApp('validator')[0];";
|
||||||
|
$js_doc[] = "\tif(!validator) return false;";
|
||||||
|
$js_doc[] = "\tif(!fo_obj.elements['_filter']) jQuery(fo_obj).prepend('<input type=\"hidden\" name=\"_filter\" value=\"\" />');";
|
||||||
|
$js_doc[] = "\tfo_obj.elements['_filter'].value = '{$filter_name}';";
|
||||||
|
$js_doc[] = "\tjQuery(fo_obj).attr('action', request_uri+'index.php?module={$module}&act={$act}'+(typeof(xeVid)=='string'?'&vid='+xeVid:''));";
|
||||||
|
|
||||||
|
$jsdoc = array();
|
||||||
|
$jsdoc[] = '(function($){';
|
||||||
|
$jsdoc[] = "\tvar validator = xe.getApp('Validator')[0];";
|
||||||
|
$jsdoc[] = "\tif(!validator) return false;";
|
||||||
|
$jsdoc[] = "\tvalidator.cast('ADD_FILTER', ['{$filter_name}', {";
|
||||||
|
|
||||||
|
$fields = array();
|
||||||
|
|
||||||
// field, 즉 체크항목의 script 생성
|
// field, 즉 체크항목의 script 생성
|
||||||
$node_count = count($field_node);
|
$node_count = count($field_node);
|
||||||
|
|
@ -141,16 +152,18 @@
|
||||||
$attrs = $node->attrs;
|
$attrs = $node->attrs;
|
||||||
$target = trim($attrs->target);
|
$target = trim($attrs->target);
|
||||||
if(!$target) continue;
|
if(!$target) continue;
|
||||||
$required = $attrs->required=='true'?'true':'false';
|
|
||||||
$minlength = $attrs->minlength>0?$attrs->minlength:'0';
|
|
||||||
$maxlength = $attrs->maxlength>0?$attrs->maxlength:'0';
|
|
||||||
$equalto = trim($attrs->equalto);
|
|
||||||
$filter = $attrs->filter;
|
$filter = $attrs->filter;
|
||||||
|
|
||||||
$js_doc .= sprintf(
|
$attrs->equalto = trim($attrs->equalto);
|
||||||
"\toFilter.addFieldItem(\"%s\",%s,%s,%s,\"%s\",\"%s\");\n",
|
|
||||||
$target, $required, $minlength, $maxlength, $equalto, $filter
|
$field = array();
|
||||||
);
|
if($attrs->required == 'true') $field[] = 'required:true';
|
||||||
|
if($attrs->minlength > 0) $field[] = 'minlength:'.$attrs->minlength;
|
||||||
|
if($attrs->maxlength > 0) $field[] = 'maxlength:'.$attrs->maxlength;
|
||||||
|
if($attrs->equalto) $field[] = "equalto:'{$attrs->equalto}'";
|
||||||
|
if($attrs->filter) $field[] = "rule:'{$attrs->filter}'";
|
||||||
|
$s_field = implode(',', $field);
|
||||||
|
$fields[] = "\t\t'{$target}': {{$s_field}}";
|
||||||
|
|
||||||
if(!in_array($target, $target_list)) $target_list[] = $target;
|
if(!in_array($target, $target_list)) $target_list[] = $target;
|
||||||
if(!$target_type_list[$target]) $target_type_list[$target] = $filter;
|
if(!$target_type_list[$target]) $target_type_list[$target] = $filter;
|
||||||
|
|
@ -166,28 +179,27 @@
|
||||||
$required = $filter_item->required?'true':'false';
|
$required = $filter_item->required?'true':'false';
|
||||||
|
|
||||||
// extend filter item의 type으로 filter를 구함
|
// extend filter item의 type으로 filter를 구함
|
||||||
switch($type) {
|
$types = array('homepage'=>'homepage', 'email_address'=>'email');
|
||||||
case 'homepage' :
|
$fitler = $types[$type]?$types[$type]:'';
|
||||||
$filter = 'homepage';
|
|
||||||
break;
|
|
||||||
case 'email_address' :
|
|
||||||
$filter = 'email';
|
|
||||||
break;
|
|
||||||
default :
|
|
||||||
$filter = '';
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
$js_doc .= sprintf(
|
$field = array();
|
||||||
"\toFilter.addFieldItem(\"%s\",%s,%s,%s,\"%s\",\"%s\");\n",
|
if($filter_item->required == 'true') $field[] = 'required:true';
|
||||||
$target, $required, 0, 0, '', $filter
|
if($filter) $field[] = "rule:'{$filter}'";
|
||||||
);
|
$s_field = implode(',', $field);
|
||||||
|
$fields[] = "\t\t'{$target}' : {{$s_field}}";
|
||||||
|
|
||||||
if(!in_array($target, $target_list)) $target_list[] = $target;
|
if(!in_array($target, $target_list)) $target_list[] = $target;
|
||||||
if(!$target_type_list[$target]) $target_type_list[$target] = $type;
|
if(!$target_type_list[$target]) $target_type_list[$target] = $type;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
$jsdoc[] = implode(",\n", $fields);
|
||||||
|
$jsdoc[] = "\t}]);";
|
||||||
|
|
||||||
|
// javascript callback function
|
||||||
|
$js_doc[] = "\tvalidator.cast('ADD_CALLBACK', ['{$filter_name}', function(form){";
|
||||||
|
$js_doc[] = "\t\tvar params={}, responses=[], elms=form.elements, data=jQuery(form).serializeArray();";
|
||||||
|
$js_doc[] = "\t\tjQuery.each(data, function(i, field){ if(field.value) params[field.name] = field.value; });";
|
||||||
|
|
||||||
// 데이터를 만들기 위한 parameter script 생성
|
// 데이터를 만들기 위한 parameter script 생성
|
||||||
$parameter_count = count($parameter_param);
|
$parameter_count = count($parameter_param);
|
||||||
if($parameter_count) {
|
if($parameter_count) {
|
||||||
|
|
@ -196,13 +208,8 @@
|
||||||
$attrs = $param->attrs;
|
$attrs = $param->attrs;
|
||||||
$name = trim($attrs->name);
|
$name = trim($attrs->name);
|
||||||
$target = trim($attrs->target);
|
$target = trim($attrs->target);
|
||||||
if(!$name || !$target) continue;
|
|
||||||
$target = htmlentities($target,ENT_QUOTES);
|
|
||||||
|
|
||||||
$js_doc .= sprintf(
|
if($name && $target && ($name != $target)) $js_doc[] = "\t\tparams['{$name}'] = params['{$target}']; delete params['{$target}'];";
|
||||||
"\toFilter.addParameterItem(\"%s\",\"%s\");\n",
|
|
||||||
$name, $target
|
|
||||||
);
|
|
||||||
if(!in_array($name, $target_list)) $target_list[] = $name;
|
if(!in_array($name, $target_list)) $target_list[] = $name;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -211,52 +218,63 @@
|
||||||
$filter_item = $extend_filter_list[$i];
|
$filter_item = $extend_filter_list[$i];
|
||||||
$target = $name = trim($filter_item->name);
|
$target = $name = trim($filter_item->name);
|
||||||
if(!$name || !$target) continue;
|
if(!$name || !$target) continue;
|
||||||
$target = htmlentities($target,ENT_QUOTES);
|
|
||||||
|
|
||||||
$js_doc .= sprintf(
|
|
||||||
"\toFilter.addParameterItem(\"%s\",\"%s\");\n",
|
|
||||||
$name, $target
|
|
||||||
);
|
|
||||||
if(!in_array($name, $target_list)) $target_list[] = $name;
|
if(!in_array($name, $target_list)) $target_list[] = $name;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// response script 생성
|
// response script 생성
|
||||||
$response_count = count($response_tag);
|
$response_count = count($response_tag);
|
||||||
|
$responses = array();
|
||||||
for($i=0;$i<$response_count;$i++) {
|
for($i=0;$i<$response_count;$i++) {
|
||||||
$attrs = $response_tag[$i]->attrs;
|
$attrs = $response_tag[$i]->attrs;
|
||||||
$name = $attrs->name;
|
$name = $attrs->name;
|
||||||
$js_doc .= sprintf("\toFilter.addResponseItem(\"%s\");\n", $name);
|
$responses[] = "'{$name}'";
|
||||||
}
|
}
|
||||||
|
$js_doc[] = "\t\tresponses = [".implode(',', $responses)."];";
|
||||||
|
|
||||||
if($confirm_msg_code) $js_doc .= sprintf("\treturn oFilter.proc(\"%s\");\n",str_replace('"','\"',$lang->{$confirm_msg_code}));
|
//if($confirm_msg_code) $js_doc .= sprintf("\treturn oFilter.proc(\"%s\");\n",str_replace('"','\"',$lang->{$confirm_msg_code}));
|
||||||
else $js_doc .= sprintf("\treturn oFilter.proc();\n");
|
//else $js_doc .= sprintf("\treturn oFilter.proc();\n");
|
||||||
$js_doc .= "}\n";
|
//$js_doc .= "}\n";
|
||||||
|
|
||||||
|
$js_doc[] = "\t\texec_xml('{$module}','{$act}', params, {$callback_func}, responses, params, form);";
|
||||||
|
$js_doc[] = "\t}]);";
|
||||||
|
|
||||||
// form 필드 lang 값을 기록
|
// form 필드 lang 값을 기록
|
||||||
$target_count = count($target_list);
|
$target_count = count($target_list);
|
||||||
for($i=0;$i<$target_count;$i++) {
|
for($i=0;$i<$target_count;$i++) {
|
||||||
$target = $target_list[$i];
|
$target = $target_list[$i];
|
||||||
if(!$lang->{$target}) $lang->{$target} = $target;
|
if(!$lang->{$target}) $lang->{$target} = $target;
|
||||||
$js_doc .= sprintf("alertMsg[\"%s\"] = \"%s\";\n", $target, str_replace("\"","\\\"",$lang->{$target}));
|
$jsdoc[] = sprintf("\tvalidator.cast('ADD_MESSAGE', ['%s', '%s']);", $target, str_replace('\'', '\\\'', $lang->{$target}));
|
||||||
}
|
}
|
||||||
|
|
||||||
// target type을 기록
|
// target type을 기록
|
||||||
|
/*
|
||||||
$target_type_count = count($target_type_list);
|
$target_type_count = count($target_type_list);
|
||||||
if($target_type_count) {
|
if($target_type_count) {
|
||||||
foreach($target_type_list as $target => $type) {
|
foreach($target_type_list as $target => $type) {
|
||||||
$js_doc .= sprintf("target_type_list[\"%s\"] = \"%s\";\n", $target, $type);
|
//$js_doc .= sprintf("target_type_list[\"%s\"] = \"%s\";\n", $target, $type);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
*/
|
||||||
|
|
||||||
// 에러 메세지를 기록
|
// 에러 메세지를 기록
|
||||||
foreach($lang->filter as $key => $val) {
|
foreach($lang->filter as $key => $val) {
|
||||||
if(!$val) $val = $key;
|
if(!$val) $val = $key;
|
||||||
$js_doc .= sprintf("alertMsg[\"%s\"] = \"%s\";\n", $key, str_replace("\"","\\\"",$val));
|
$jsdoc[] = sprintf("\tvalidator.cast('ADD_MESSAGE', ['%s', '%s']);", $key, str_replace('\'', '\\\'', $val));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
$jsdoc[] = '})(jQuery);';
|
||||||
|
|
||||||
|
$js_doc[] = "\tvalidator.cast('VALIDATE', [fo_obj,'{$filter_name}']);";
|
||||||
|
$js_doc[] = "\treturn false;";
|
||||||
|
$js_doc[] = "};\n";
|
||||||
|
|
||||||
|
$js_doc = implode("\n", $js_doc);
|
||||||
|
$jsdoc = implode("\n", $jsdoc);
|
||||||
|
|
||||||
// js파일 생성
|
// js파일 생성
|
||||||
FileHandler::writeFile($this->js_file, $js_doc);
|
FileHandler::writeFile($this->js_file, $js_doc."\n".$jsdoc);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
|
||||||
|
|
@ -1,16 +1,248 @@
|
||||||
/**
|
/**
|
||||||
* @file common/js/xml_js_filter.js
|
* @file common/js/xml_js_filter.js
|
||||||
* @author zero (zero@nzeo.com)
|
* @author taggon (taggon@gmail.com)
|
||||||
* @brief xml filter에서 사용될 js
|
* @brief xml filter (validator) plugin
|
||||||
*
|
*
|
||||||
* zbxe 에서 form의 동작시 필수입력 여부등을 선처리하고 xml_handler.js의 exec_xml()을 통해서
|
* A rule is a method validate one field.
|
||||||
* 특정 모듈과의 ajax 통신을 통해 process를 진행시킴
|
* A filter is made up of one or more rules.
|
||||||
**/
|
**/
|
||||||
|
(function($){
|
||||||
|
|
||||||
var alertMsg = new Array();
|
var messages = [];
|
||||||
var target_type_list = new Array();
|
var rules = [];
|
||||||
var notnull_list = new Array();
|
var filters = [];
|
||||||
var extra_vars = new Array();
|
var callbacks = [];
|
||||||
|
|
||||||
|
var Validator = xe.createApp('Validator', {
|
||||||
|
init : function() {
|
||||||
|
// {{{ add filters
|
||||||
|
// email
|
||||||
|
var regEmail = /^[\w-]+(\.[\w-]+)*@[\w-]+(\.[\w-]+)*$/;
|
||||||
|
this.cast('ADD_RULE', ['email', regEmail]);
|
||||||
|
this.cast('ADD_RULE', ['email_address', regEmail]);
|
||||||
|
|
||||||
|
// userid
|
||||||
|
var regUserid = /^[a-z]+[\w-]*[a-z0-9]+$/i;
|
||||||
|
this.cast('ADD_RULE', ['userid', regUserid]);
|
||||||
|
this.cast('ADD_RULE', ['user_id', regUserid]);
|
||||||
|
|
||||||
|
// url
|
||||||
|
var regUrl = /^(https?|ftp|mms):\/\/[0-9a-z-]+(\.[_0-9a-z-\/\~]+)+(:[0-9]{2,4})*$/;
|
||||||
|
this.cast('ADD_RULE', ['url', regUrl]);
|
||||||
|
this.cast('ADD_RULE', ['homepage', regUrl]);
|
||||||
|
|
||||||
|
// korean
|
||||||
|
var regKor = /^[가-힣]*$/;
|
||||||
|
this.cast('ADD_RULE', ['koeran', regKor]);
|
||||||
|
|
||||||
|
// korean_number
|
||||||
|
var regKorNum = /^[가-힣0-9]*$/;
|
||||||
|
this.cast('ADD_RULE', ['korean_number', regKorNum]);
|
||||||
|
|
||||||
|
// alpha
|
||||||
|
var regAlpha = /^[a-z]*$/i;
|
||||||
|
this.cast('ADD_RULE', ['alpha', regAlpha]);
|
||||||
|
|
||||||
|
// alpha_number
|
||||||
|
var regAlphaNum = /^[a-z][a-z0-9_]*$/i;
|
||||||
|
this.cast('ADD_RULE', ['alpha_number', regAlphaNum]);
|
||||||
|
|
||||||
|
// numver
|
||||||
|
var regNum = /^[0-9]*$/i;
|
||||||
|
this.cast('ADD_RULE', ['number', regNum]);
|
||||||
|
// }}} add filters
|
||||||
|
},
|
||||||
|
// run validator
|
||||||
|
run : function(oForm) {
|
||||||
|
var filter = '';
|
||||||
|
|
||||||
|
if (oForm._filter) filter = oForm._filter.value;
|
||||||
|
|
||||||
|
return this.cast('VALIDATE', [oForm, filter]);
|
||||||
|
},
|
||||||
|
API_ONREADY : function() {
|
||||||
|
var self = this;
|
||||||
|
|
||||||
|
// hook form submit event
|
||||||
|
$('form')
|
||||||
|
.each(function(){
|
||||||
|
if (this.onsubmit) {
|
||||||
|
this['xe:onsubmit'] = this.onsubmit;
|
||||||
|
this.onsubmit = null;
|
||||||
|
}
|
||||||
|
})
|
||||||
|
.submit(function(){
|
||||||
|
var legacyFn = this['xe:onsubmit'];
|
||||||
|
var hasLegacyFn = $.isFunction(legacyFn);
|
||||||
|
var bResult = hasLegacyFn?legacyFn.apply(this):self.run(this);
|
||||||
|
|
||||||
|
return false;
|
||||||
|
});
|
||||||
|
},
|
||||||
|
API_VALIDATE : function(sender, params) {
|
||||||
|
var self = this, result = true, form = params[0], filter=null, callback=null;
|
||||||
|
|
||||||
|
if (form.elements['_filter']) filter = form.elements['_filter'].value;
|
||||||
|
if (!filter) return true;
|
||||||
|
if ($.isFunction(callbacks[filter])) callback = callbacks[filter];
|
||||||
|
filter = filters[filter.toLowerCase()] || null;
|
||||||
|
|
||||||
|
$.each(filter, function(name) {
|
||||||
|
var _el = form.elements[name];
|
||||||
|
|
||||||
|
if (!_el) return true;
|
||||||
|
|
||||||
|
var el = $(_el), val = get_value(el);
|
||||||
|
var minlen = parseInt(this.minlen) || 0;
|
||||||
|
var maxlen = parseInt(this.maxlen) || 0;
|
||||||
|
var rule = (this.rule || '').split(',');
|
||||||
|
|
||||||
|
if (this.required && !val) (result = (!!self.cast('ALERT', [form, name, 'isnull']) && false));
|
||||||
|
if ((minlen && maxlen) && (val.length < minlen || val.length > maxlen)) return (result = (!!self.cast('ALERT', [form, name, 'outofrange', minlen, maxlen]) && false));
|
||||||
|
|
||||||
|
if (this.equalto) {
|
||||||
|
var eq_val = get_value(form.elements[this.equalto]);
|
||||||
|
if (eq_val != val) return (result = (!!self.cast('ALERT', [form, name, 'equalto']) && false));
|
||||||
|
}
|
||||||
|
|
||||||
|
$.each(rule, function() {
|
||||||
|
var ret = self.cast('APPLY_RULE', [this, val]);
|
||||||
|
if (!ret) return (result = false);
|
||||||
|
});
|
||||||
|
|
||||||
|
if (!result) return false;
|
||||||
|
});
|
||||||
|
|
||||||
|
if (!result) return false;
|
||||||
|
if ($.isFunction(callback)) return callback(form);
|
||||||
|
|
||||||
|
return true;
|
||||||
|
},
|
||||||
|
API_ADD_RULE : function(sender, params) {
|
||||||
|
var name = params[0].toLowerCase();
|
||||||
|
rules[name] = params[1];
|
||||||
|
},
|
||||||
|
API_DEL_RULE : function(sender, params) {
|
||||||
|
var name = params[0].toLowerCase();
|
||||||
|
delete rules[name];
|
||||||
|
},
|
||||||
|
API_GET_RULE : function(sender, params) {
|
||||||
|
var name = params[0].toLowerCase();
|
||||||
|
|
||||||
|
if (rules[name]) {
|
||||||
|
return rules[name];
|
||||||
|
} else {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
},
|
||||||
|
API_ADD_FILTER : function(sender, params) {
|
||||||
|
var name = params[0].toLowerCase();
|
||||||
|
var filter = params[1];
|
||||||
|
|
||||||
|
filters[name] = filter;
|
||||||
|
},
|
||||||
|
API_DEL_FILTER : function(sender, params) {
|
||||||
|
var name = params[0].toLowerCase();
|
||||||
|
delete filters[name];
|
||||||
|
},
|
||||||
|
API_GET_FILTER : function(sender, params) {
|
||||||
|
var name = params[0].toLowerCase();
|
||||||
|
|
||||||
|
if (filters[name]) {
|
||||||
|
return filters[name];
|
||||||
|
} else {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
},
|
||||||
|
API_APPLY_RULE : function(sender, params) {
|
||||||
|
var name = params[0].toLowerCase();
|
||||||
|
var value = params[1];
|
||||||
|
|
||||||
|
if (typeof(rules[name]) == 'undefined') return true; // no filter
|
||||||
|
if ($.isFunction(rules[name])) return rules[name](value);
|
||||||
|
if (rules[name] instanceof RegExp) return rules[name].test(value);
|
||||||
|
|
||||||
|
return true;
|
||||||
|
},
|
||||||
|
API_ALERT : function(sender, params) {
|
||||||
|
var form = params[0];
|
||||||
|
var field_name = params[1];
|
||||||
|
var msg_code = params[2];
|
||||||
|
var minlen = params[3];
|
||||||
|
var maxlen = params[4];
|
||||||
|
|
||||||
|
var field_msg = this.cast('GET_MESSAGE', [field_name]);
|
||||||
|
var msg = this.cast('GET_MESSAGE', [msg_code]);
|
||||||
|
|
||||||
|
if (msg != msg_code) msg = (msg.indexOf('%s')<0)?(field_msg+msg):(msg.replace('%s',field_msg));
|
||||||
|
if (typeof(minlen)!='undefined' && typeof(maxlen)!='undefined') msg += '('+minlen+'~'+maxlen+')';
|
||||||
|
|
||||||
|
this.cast('SHOW_ALERT', [msg]);
|
||||||
|
|
||||||
|
// set focus
|
||||||
|
$(form.elements[field_name]).focus();
|
||||||
|
},
|
||||||
|
API_SHOW_ALERT : function(sender, params) {
|
||||||
|
alert(params[0]);
|
||||||
|
},
|
||||||
|
API_ADD_MESSAGE : function(sender, params) {
|
||||||
|
var msg_code = params[0];
|
||||||
|
var msg_str = params[1];
|
||||||
|
|
||||||
|
messages[msg_code] = msg_str;
|
||||||
|
},
|
||||||
|
API_GET_MESSAGE : function(sender, params) {
|
||||||
|
var msg_code = params[0];
|
||||||
|
|
||||||
|
return messages[msg_code] || msg_code;
|
||||||
|
},
|
||||||
|
API_ADD_CALLBACK : function(sender, params) {
|
||||||
|
var name = params[0];
|
||||||
|
var func = params[1];
|
||||||
|
|
||||||
|
callbacks[name] = func;
|
||||||
|
},
|
||||||
|
API_REMOVE_CALLBACK : function(sender, params) {
|
||||||
|
var name = params[0];
|
||||||
|
|
||||||
|
delete callbacks[name];
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
var oValidator = new Validator;
|
||||||
|
|
||||||
|
// register validator
|
||||||
|
xe.registerApp(oValidator);
|
||||||
|
|
||||||
|
// 호환성을 위해 추가한 플러그인 - 에디터에서 컨텐트를 가져와서 설정한다.
|
||||||
|
var EditorStub = xe.createPlugin('editor_stub', {
|
||||||
|
API_BEFORE_VALIDATE : function(sender, params) {
|
||||||
|
var form = params[0];
|
||||||
|
var seq = form.getAttribute('editor_sequence');
|
||||||
|
|
||||||
|
if (seq) {
|
||||||
|
form.content.value = editorGetContentTextarea_xe(seq) || '';
|
||||||
|
}
|
||||||
|
}
|
||||||
|
});
|
||||||
|
oValidator.registerPlugin(new EditorStub);
|
||||||
|
|
||||||
|
// functions
|
||||||
|
function get_value(elem) {
|
||||||
|
if (elem.is(':radio')){
|
||||||
|
return elem.filter(':checked').val();
|
||||||
|
} else if (elem.is(':checkbox')) {
|
||||||
|
var vals = [];
|
||||||
|
elem.filter(':checked').each(function(){
|
||||||
|
vals.push(this.value);
|
||||||
|
});
|
||||||
|
return vals.join('|@|');
|
||||||
|
} else {
|
||||||
|
return elem.val();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
})(jQuery);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @function filterAlertMessage
|
* @function filterAlertMessage
|
||||||
|
|
@ -34,297 +266,11 @@ function filterAlertMessage(ret_obj) {
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @class XmlJsFilter
|
* @brief Function to process filters
|
||||||
* @authro zero (zero@nzeo.com)
|
* @deprecated
|
||||||
* @brief form elements, module/act, callback_user_func을 이용하여 서버에 ajax로 form 데이터를 넘기고 결과를 받아오는 js class
|
*/
|
||||||
**/
|
function procFilter(fo_obj, filter_func)
|
||||||
function XmlJsFilter(form_object, module, act, callback_user_func) {
|
{
|
||||||
this.field = new Array();
|
|
||||||
this.parameter = new Array();
|
|
||||||
this.response = new Array();
|
|
||||||
|
|
||||||
this.fo_obj = form_object;
|
|
||||||
this.module = module;
|
|
||||||
this.act = act;
|
|
||||||
this.user_func = callback_user_func;
|
|
||||||
this.setFocus = XmlJsFilterSetFocus;
|
|
||||||
this.addFieldItem = XmlJsFilterAddFieldItem;
|
|
||||||
this.addParameterItem = XmlJsFilterAddParameterItem;
|
|
||||||
this.addResponseItem = XmlJsFilterAddResponseItem;
|
|
||||||
this.getValue = XmlJsFilterGetValue;
|
|
||||||
this.executeFilter = XmlJsFilterExecuteFilter;
|
|
||||||
this.checkFieldItem = XmlJsFilterCheckFieldItem;
|
|
||||||
this.getParameterParam = XmlJsFilterGetParameterParam;
|
|
||||||
this.alertMsg = XmlJsFilterAlertMsg;
|
|
||||||
this.proc = XmlJsFilterProc;
|
|
||||||
}
|
|
||||||
|
|
||||||
function XmlJsFilterSetFocus(target_name) {
|
|
||||||
var obj = this.fo_obj[target_name];
|
|
||||||
if(typeof(obj)=='undefined' || !obj) return;
|
|
||||||
|
|
||||||
var length = obj.length;
|
|
||||||
try {
|
|
||||||
if(typeof(length)!='undefined') {
|
|
||||||
obj[0].focus();
|
|
||||||
} else {
|
|
||||||
obj.focus();
|
|
||||||
}
|
|
||||||
} catch(e) {
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
function XmlJsFilterAddFieldItem(target, required, minlength, maxlength, equalto, filter) {
|
|
||||||
var obj = new Array(target, required, minlength, maxlength, equalto, filter);
|
|
||||||
this.field[this.field.length] = obj;
|
|
||||||
}
|
|
||||||
|
|
||||||
function XmlJsFilterAddParameterItem(param, target) {
|
|
||||||
var obj = new Array(param, target);
|
|
||||||
this.parameter[this.parameter.length] = obj;
|
|
||||||
}
|
|
||||||
|
|
||||||
function XmlJsFilterAddResponseItem(name) {
|
|
||||||
this.response[this.response.length] = name;
|
|
||||||
}
|
|
||||||
|
|
||||||
function XmlJsFilterGetValue(target_name) {
|
|
||||||
var obj = this.fo_obj[target_name];
|
|
||||||
if(typeof(obj)=='undefined' || !obj) return '';
|
|
||||||
var value = '';
|
|
||||||
var length = obj.length;
|
|
||||||
var type = obj.type;
|
|
||||||
if((typeof(type)=='undefined'||!type) && typeof(length)!='undefined' && typeof(obj[0])!='undefined' && length>0) type = obj[0].type;
|
|
||||||
else length = 0;
|
|
||||||
|
|
||||||
switch(type) {
|
|
||||||
case 'checkbox' :
|
|
||||||
if(length>0) {
|
|
||||||
var value_list = new Array();
|
|
||||||
for(var i=0;i<length;i++) {
|
|
||||||
if(obj[i].checked) value_list[value_list.length] = obj[i].value;
|
|
||||||
}
|
|
||||||
value = value_list.join('|@|');
|
|
||||||
} else {
|
|
||||||
if(obj.checked) value = obj.value;
|
|
||||||
else value = '';
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
case 'radio' :
|
|
||||||
if(length>0) {
|
|
||||||
for(var i=0;i<length;i++) {
|
|
||||||
if(obj[i].checked) value = obj[i].value;
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
if(obj.checked) value = obj.value;
|
|
||||||
else value = '';
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
case 'select' :
|
|
||||||
case 'select-one' :
|
|
||||||
if(obj.selectedIndex>=0) value = obj.options[obj.selectedIndex].value;
|
|
||||||
break;
|
|
||||||
default :
|
|
||||||
if(length>0 && target_type_list[target_name]) {
|
|
||||||
switch(target_type_list[target_name]) {
|
|
||||||
case 'kr_zip' :
|
|
||||||
var val1 = obj[0].value;
|
|
||||||
var val2 = obj[1].value;
|
|
||||||
if(val1&&val2) {
|
|
||||||
value = val1+'|@|'+val2;
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
case 'tel' :
|
|
||||||
var val1 = obj[0].value;
|
|
||||||
var val2 = obj[1].value;
|
|
||||||
var val3 = obj[2].value;
|
|
||||||
if(val1&&val2&&val3) {
|
|
||||||
value = val1+'|@|'+val2+'|@|'+val3;
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
} else {
|
|
||||||
value = obj.value;
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
if(typeof(value)=='undefined'||!value) return '';
|
|
||||||
return value.trim();
|
|
||||||
}
|
|
||||||
|
|
||||||
function XmlJsFilterExecuteFilter(filter, value) {
|
|
||||||
switch(filter) {
|
|
||||||
case "email" :
|
|
||||||
case "email_address" :
|
|
||||||
var regx = /^[_0-9a-zA-Z-]+(\.[_0-9a-zA-Z-]+)*@[0-9a-zA-Z-]+(\.[0-9a-zA-Z-]+)*$/;
|
|
||||||
return regx.test(value);
|
|
||||||
break;
|
|
||||||
case "userid" :
|
|
||||||
case "user_id" :
|
|
||||||
var regx = /^[a-zA-Z]+([_0-9a-zA-Z]+)*$/;
|
|
||||||
return regx.test(value);
|
|
||||||
break;
|
|
||||||
case "homepage" :
|
|
||||||
var regx = /^(http|https|ftp|mms):\/\/[0-9a-z-]+(\.[_0-9a-z-\/\~]+)+(:[0-9]{2,4})*$/;
|
|
||||||
return regx.test(value);
|
|
||||||
break;
|
|
||||||
case "korean" :
|
|
||||||
var regx = /^[가-힣]*$/;
|
|
||||||
return regx.test(value);
|
|
||||||
break;
|
|
||||||
case "korean_number" :
|
|
||||||
var regx = /^[가-힣0-9]*$/;
|
|
||||||
return regx.test(value);
|
|
||||||
break;
|
|
||||||
case "alpha" :
|
|
||||||
var regx = /^[a-zA-Z]*$/;
|
|
||||||
return regx.test(value);
|
|
||||||
break;
|
|
||||||
case "alpha_number" :
|
|
||||||
var regx = /^[a-zA-Z][a-zA-Z0-9\_]*$/;
|
|
||||||
return regx.test(value);
|
|
||||||
break;
|
|
||||||
case "number" :
|
|
||||||
return !isNaN(value);
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
|
|
||||||
function XmlJsFilterAlertMsg(target, msg_code, minlength, maxlength) {
|
|
||||||
var target_msg = "";
|
|
||||||
|
|
||||||
if(alertMsg[target]!='undefined') target_msg = alertMsg[target];
|
|
||||||
else target_msg = target;
|
|
||||||
|
|
||||||
var msg = "";
|
|
||||||
if(typeof(alertMsg[msg_code])!='undefined') {
|
|
||||||
if(alertMsg[msg_code].indexOf('%s')>=0) msg = alertMsg[msg_code].replace('%s',target_msg);
|
|
||||||
else msg = target_msg+alertMsg[msg_code];
|
|
||||||
} else {
|
|
||||||
msg = msg_code;
|
|
||||||
}
|
|
||||||
|
|
||||||
if(typeof(minlength)!='undefined' && typeof(maxlength)!='undefined') msg += "("+minlength+"~"+maxlength+")";
|
|
||||||
|
|
||||||
alert(msg);
|
|
||||||
this.setFocus(target);
|
|
||||||
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
function XmlJsFilterCheckFieldItem() {
|
|
||||||
for(var i=0; i<extra_vars.length;i++) {
|
|
||||||
var name = extra_vars[i];
|
|
||||||
this.addFieldItem(name, false, 0, 0, "", "");
|
|
||||||
}
|
|
||||||
|
|
||||||
for(var i=0; i<this.field.length;i++) {
|
|
||||||
var item = this.field[i];
|
|
||||||
var target = item[0];
|
|
||||||
var required = item[1];
|
|
||||||
var minlength = item[2];
|
|
||||||
var maxlength = item[3];
|
|
||||||
var equalto = item[4];
|
|
||||||
var filter = item[5].split(",");
|
|
||||||
|
|
||||||
if(typeof(this.fo_obj[target])=='undefined') continue;
|
|
||||||
|
|
||||||
for(var j=0; j<notnull_list.length; j++) {
|
|
||||||
if(notnull_list[j]==target) required = true;
|
|
||||||
}
|
|
||||||
|
|
||||||
var value = this.getValue(target);
|
|
||||||
if(!required && !value) continue;
|
|
||||||
if(required && !value && this.fo_obj[target]) return this.alertMsg(target,'isnull');
|
|
||||||
|
|
||||||
if(minlength>0 && maxlength>0 && (value.length < minlength || value.length > maxlength)) return this.alertMsg(target, 'outofrange', minlength, maxlength);
|
|
||||||
|
|
||||||
if(equalto) {
|
|
||||||
var equalto_value = this.getValue(equalto);
|
|
||||||
if(equalto_value != value) return this.alertMsg(target, 'equalto');
|
|
||||||
}
|
|
||||||
|
|
||||||
if(filter.length && filter[0]) {
|
|
||||||
for(var j=0;j<filter.length;j++) {
|
|
||||||
var filter_item = filter[j];
|
|
||||||
if(!this.executeFilter(filter_item, value)) return this.alertMsg(target, "invalid_"+filter_item);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
function XmlJsFilterGetParameterParam() {
|
|
||||||
if(!this.fo_obj) return new Array();
|
|
||||||
|
|
||||||
var prev_name = '';
|
|
||||||
if(this.parameter.length<1) {
|
|
||||||
for(var i=0;i<this.fo_obj.length;i++) {
|
|
||||||
var name = this.fo_obj[i].name;
|
|
||||||
if(typeof(name)=='undefined'||!name||name==prev_name) continue;
|
|
||||||
this.addParameterItem(name, name);
|
|
||||||
prev_name = name;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
var params = new Array();
|
|
||||||
for(var i=0; i<this.parameter.length;i++) {
|
|
||||||
var item = this.parameter[i];
|
|
||||||
var param = item[0];
|
|
||||||
var target = item[1];
|
|
||||||
var value = this.getValue(target);
|
|
||||||
params[param] = value;
|
|
||||||
}
|
|
||||||
return params;
|
|
||||||
}
|
|
||||||
|
|
||||||
function XmlJsFilterProc(confirm_msg) {
|
|
||||||
var result = this.checkFieldItem();
|
|
||||||
if(!result) return false;
|
|
||||||
|
|
||||||
if(typeof(confirm_msg)=='undefined') confirm_msg = '';
|
|
||||||
|
|
||||||
var params = this.getParameterParam();
|
|
||||||
var response = this.response;
|
|
||||||
if(confirm_msg && !confirm(confirm_msg)) return false;
|
|
||||||
if(!this.act) {
|
|
||||||
this.user_func(this.fo_obj, params);
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
exec_xml(this.module, this.act, params, this.user_func, response, params, this.fo_obj);
|
|
||||||
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
// form proc
|
|
||||||
function procFilter(fo_obj, filter_func) {
|
|
||||||
// form문 안에 위지윅 에디터가 세팅되어 있을 경우 에디터의 값과 지정된 content field를 sync
|
|
||||||
var editor_sequence = fo_obj.getAttribute('editor_sequence');
|
|
||||||
|
|
||||||
if(typeof(editor_sequence)!='undefined' && editor_sequence && typeof(editorRelKeys)!='undefined') {
|
|
||||||
if(jQuery.isFunction(editorRelKeys[editor_sequence]['pasteHTML'])){
|
|
||||||
var content = editorGetContent(editor_sequence);
|
|
||||||
editorRelKeys[editor_sequence]['content'].value = content;
|
|
||||||
}else{
|
|
||||||
var content = editorGetContent(editor_sequence);
|
|
||||||
var dummy = xCreateElement("div");
|
|
||||||
xInnerHtml(dummy, content);
|
|
||||||
|
|
||||||
// IE에서 컨텐츠 전체를 P태그로 감싸는 경우가 있어서 이 의미없는 P태그를 제거
|
|
||||||
if(dummy.firstChild && dummy.firstChild.nodeName == 'P' && dummy.firstChild == dummy.lastChild) {
|
|
||||||
var content = xInnerHtml(dummy.firstChild);
|
|
||||||
xInnerHtml(dummy,content);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
var regxPath = new RegExp('(src|href)=("|\'){1}'+request_uri.replace(/\//g,'\\/')+'([^"\']+)("|\'){1}','g');
|
|
||||||
content = content.replace(regxPath, '$1="./$3"');
|
|
||||||
editorRelKeys[editor_sequence]['content'].value = content;
|
|
||||||
}
|
|
||||||
|
|
||||||
filter_func(fo_obj);
|
filter_func(fo_obj);
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
Loading…
Add table
Add a link
Reference in a new issue