mirror of
https://github.com/Lastorder-DC/rhymix.git
synced 2026-04-23 20:32:14 +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
|
|
@ -1,269 +1,287 @@
|
|||
<?php
|
||||
/**
|
||||
* @class XmlJsFilter
|
||||
* @author zero (zero@nzeo.com)
|
||||
* @brief filter xml문서를 해석하여 js파일로 만듬
|
||||
* @version 0.1
|
||||
*
|
||||
* xml filter 파일은 js script로 컴파일 되어 캐싱됨
|
||||
*
|
||||
* <filter name="js function 이름" act="서버에 요청할 action 이름" confirm_msg_code="submit시에 prompt로 물어볼 메세지의 코드" >
|
||||
* <form> <-- 폼 항목의 체크
|
||||
* <node target="name" required="true" minlength="1" maxlength="5" filter="email,userid,alpha,number" equalto="target" />
|
||||
* </form>
|
||||
* <parameter> <-- 폼 항목을 조합하여 key=val 의 js array로 return, act는 필수
|
||||
* <param name="key" target="target" />
|
||||
* </parameter>
|
||||
* <response callback_func="callback 받게 될 js function 이름 지정" > <-- 서버에 ajax로 전송하여 받을 결과값
|
||||
* <tag name="error" /> <-- error이름의 결과값을 받겠다는 것
|
||||
* </response>
|
||||
* </filter>
|
||||
*
|
||||
* - form - node
|
||||
* target = 폼 element의 이름
|
||||
* required = true/ false 꼭 있어야 하는지에 대한 체크
|
||||
* minlength, maxlength = 최소/최대 길이
|
||||
* filter = javascript로 체크하기 위한 체크 필터
|
||||
* email : email의 형식 ( aaa.aaa@aaa.com)
|
||||
* userid : 영문+숫자+_, 첫 글자는 영문, 소문자
|
||||
* alpha : 영문값만 허용
|
||||
* number : 숫자만 허용
|
||||
* equalto = target , 현재 폼과 지정 target의 값이 동일해야 함
|
||||
*
|
||||
* - parameter - param
|
||||
* name = key : key를 이름으로 가지고 value의 값을 가지는 array 값 생성
|
||||
* target = target_name : target form element의 값을 가져옴
|
||||
*
|
||||
* - response
|
||||
* tag = key : return받을 결과값의 변수명
|
||||
**/
|
||||
/**
|
||||
* @class XmlJsFilter
|
||||
* @author zero (zero@nzeo.com)
|
||||
* @brief filter xml문서를 해석하여 js파일로 만듬
|
||||
* @version 0.1
|
||||
*
|
||||
* xml filter 파일은 js script로 컴파일 되어 캐싱됨
|
||||
*
|
||||
* <filter name="js function 이름" act="서버에 요청할 action 이름" confirm_msg_code="submit시에 prompt로 물어볼 메세지의 코드" >
|
||||
* <form> <-- 폼 항목의 체크
|
||||
* <node target="name" required="true" minlength="1" maxlength="5" filter="email,userid,alpha,number" equalto="target" />
|
||||
* </form>
|
||||
* <parameter> <-- 폼 항목을 조합하여 key=val 의 js array로 return, act는 필수
|
||||
* <param name="key" target="target" />
|
||||
* </parameter>
|
||||
* <response callback_func="callback 받게 될 js function 이름 지정" > <-- 서버에 ajax로 전송하여 받을 결과값
|
||||
* <tag name="error" /> <-- error이름의 결과값을 받겠다는 것
|
||||
* </response>
|
||||
* </filter>
|
||||
*
|
||||
* - form - node
|
||||
* target = 폼 element의 이름
|
||||
* required = true/ false 꼭 있어야 하는지에 대한 체크
|
||||
* minlength, maxlength = 최소/최대 길이
|
||||
* filter = javascript로 체크하기 위한 체크 필터
|
||||
* email : email의 형식 ( aaa.aaa@aaa.com)
|
||||
* userid : 영문+숫자+_, 첫 글자는 영문, 소문자
|
||||
* alpha : 영문값만 허용
|
||||
* number : 숫자만 허용
|
||||
* equalto = target , 현재 폼과 지정 target의 값이 동일해야 함
|
||||
*
|
||||
* - parameter - param
|
||||
* name = key : key를 이름으로 가지고 value의 값을 가지는 array 값 생성
|
||||
* target = target_name : target form element의 값을 가져옴
|
||||
*
|
||||
* - response
|
||||
* tag = key : return받을 결과값의 변수명
|
||||
**/
|
||||
|
||||
class XmlJsFilter extends XmlParser {
|
||||
var $compiled_path = './files/cache/js_filter_compiled/'; ///< 컴파일된 캐시 파일이 놓일 위치
|
||||
var $xml_file = NULL; ///< 대상 xml 파일
|
||||
var $js_file = NULL; ///< 컴파일된 js 파일
|
||||
class XmlJsFilter extends XmlParser {
|
||||
var $compiled_path = './files/cache/js_filter_compiled/'; ///< 컴파일된 캐시 파일이 놓일 위치
|
||||
var $xml_file = NULL; ///< 대상 xml 파일
|
||||
var $js_file = NULL; ///< 컴파일된 js 파일
|
||||
|
||||
/**
|
||||
* @brief constructor
|
||||
**/
|
||||
function XmlJsFilter($path, $xml_file) {
|
||||
if(substr($path,-1)!=='/') $path .= '/';
|
||||
$this->xml_file = sprintf("%s%s",$path, $xml_file);
|
||||
$this->js_file = $this->_getCompiledFileName($this->xml_file);
|
||||
}
|
||||
/**
|
||||
* @brief constructor
|
||||
**/
|
||||
function XmlJsFilter($path, $xml_file) {
|
||||
if(substr($path,-1)!=='/') $path .= '/';
|
||||
$this->xml_file = sprintf("%s%s",$path, $xml_file);
|
||||
$this->js_file = $this->_getCompiledFileName($this->xml_file);
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief 원 xml파일과 compiled된js파일의 시간 비교 및 유무 비교등을 처리
|
||||
**/
|
||||
function compile() {
|
||||
if(!file_exists($this->xml_file)) return;
|
||||
if(!file_exists($this->js_file)) $this->_compile();
|
||||
else if(filemtime($this->xml_file)>filemtime($this->js_file)) $this->_compile();
|
||||
Context::addJsFile($this->js_file);
|
||||
}
|
||||
/**
|
||||
* @brief 원 xml파일과 compiled된js파일의 시간 비교 및 유무 비교등을 처리
|
||||
**/
|
||||
function compile() {
|
||||
if(!file_exists($this->xml_file)) return;
|
||||
if(!file_exists($this->js_file)) $this->_compile();
|
||||
else if(filemtime($this->xml_file)>filemtime($this->js_file)) $this->_compile();
|
||||
Context::addJsFile($this->js_file);
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief 실제 xml_file을 컴파일하여 js_file을 생성
|
||||
**/
|
||||
function _compile() {
|
||||
global $lang;
|
||||
/**
|
||||
* @brief 실제 xml_file을 컴파일하여 js_file을 생성
|
||||
**/
|
||||
function _compile() {
|
||||
global $lang;
|
||||
|
||||
// xml 파일을 읽음
|
||||
$buff = FileHandler::readFile($this->xml_file);
|
||||
// xml 파일을 읽음
|
||||
$buff = FileHandler::readFile($this->xml_file);
|
||||
|
||||
// xml parsing
|
||||
$xml_obj = parent::parse($buff);
|
||||
// xml parsing
|
||||
$xml_obj = parent::parse($buff);
|
||||
|
||||
// XmlJsFilter는 filter_name, field, parameter 3개의 데이터를 핸들링
|
||||
$filter_name = $xml_obj->filter->attrs->name;
|
||||
$confirm_msg_code = $xml_obj->filter->attrs->confirm_msg_code;
|
||||
$module = $xml_obj->filter->attrs->module;
|
||||
$act = $xml_obj->filter->attrs->act;
|
||||
$extend_filter = $xml_obj->filter->attrs->extend_filter;
|
||||
// XmlJsFilter는 filter_name, field, parameter 3개의 데이터를 핸들링
|
||||
$filter_name = $xml_obj->filter->attrs->name;
|
||||
$confirm_msg_code = $xml_obj->filter->attrs->confirm_msg_code;
|
||||
$module = $xml_obj->filter->attrs->module;
|
||||
$act = $xml_obj->filter->attrs->act;
|
||||
$extend_filter = $xml_obj->filter->attrs->extend_filter;
|
||||
|
||||
$field_node = $xml_obj->filter->form->node;
|
||||
if($field_node && !is_array($field_node)) $field_node = array($field_node);
|
||||
$field_node = $xml_obj->filter->form->node;
|
||||
if($field_node && !is_array($field_node)) $field_node = array($field_node);
|
||||
|
||||
$parameter_param = $xml_obj->filter->parameter->param;
|
||||
if($parameter_param && !is_array($parameter_param)) $parameter_param = array($parameter_param);
|
||||
$parameter_param = $xml_obj->filter->parameter->param;
|
||||
if($parameter_param && !is_array($parameter_param)) $parameter_param = array($parameter_param);
|
||||
|
||||
$response_tag = $xml_obj->filter->response->tag;
|
||||
if($response_tag && !is_array($response_tag)) $response_tag = array($response_tag);
|
||||
$response_tag = $xml_obj->filter->response->tag;
|
||||
if($response_tag && !is_array($response_tag)) $response_tag = array($response_tag);
|
||||
|
||||
// extend_filter가 있을 경우 해당 method를 호출하여 결과를 받음
|
||||
if($extend_filter) {
|
||||
// extend_filter가 있을 경우 해당 method를 호출하여 결과를 받음
|
||||
if($extend_filter) {
|
||||
|
||||
// extend_filter가 있을 경우 캐시 사용을 못하도록 js 캐시 파일명을 변경
|
||||
$this->js_file .= '.nocache.js';
|
||||
// extend_filter가 있을 경우 캐시 사용을 못하도록 js 캐시 파일명을 변경
|
||||
$this->js_file .= '.nocache.js';
|
||||
|
||||
// extend_filter는 module.method 로 지칭되어 이를 분리
|
||||
list($module_name, $method) = explode('.',$extend_filter);
|
||||
// extend_filter는 module.method 로 지칭되어 이를 분리
|
||||
list($module_name, $method) = explode('.',$extend_filter);
|
||||
|
||||
// 모듈 이름과 method가 있을 경우 진행
|
||||
if($module_name&&$method) {
|
||||
// 해당 module의 model 객체를 받음
|
||||
$oExtendFilter = &getModel($module_name);
|
||||
// 모듈 이름과 method가 있을 경우 진행
|
||||
if($module_name&&$method) {
|
||||
// 해당 module의 model 객체를 받음
|
||||
$oExtendFilter = &getModel($module_name);
|
||||
|
||||
// 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_count = count($extend_filter_list);
|
||||
// method가 존재하면 실행
|
||||
if(method_exists($oExtendFilter, $method)) {
|
||||
// 결과를 받음
|
||||
$extend_filter_list = $oExtendFilter->{$method}(true);
|
||||
$extend_filter_count = count($extend_filter_list);
|
||||
|
||||
// 결과에서 lang값을 이용 문서 변수에 적용
|
||||
for($i=0;$i<$extend_filter_count;$i++) {
|
||||
$name = $extend_filter_list[$i]->name;
|
||||
$lang_value = $extend_filter_list[$i]->lang;
|
||||
if($lang_value) $lang->{$name} = $lang_value;
|
||||
}
|
||||
}
|
||||
// 결과에서 lang값을 이용 문서 변수에 적용
|
||||
for($i=0; $i < $extend_filter_count; $i++) {
|
||||
$name = $extend_filter_list[$i]->name;
|
||||
$lang_value = $extend_filter_list[$i]->lang;
|
||||
if($lang_value) $lang->{$name} = $lang_value;
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
$callback_func = $xml_obj->filter->response->attrs->callback_func;
|
||||
if(!$callback_func) $callback_func = "filterAlertMessage";
|
||||
$callback_func = $xml_obj->filter->response->attrs->callback_func;
|
||||
if(!$callback_func) $callback_func = "filterAlertMessage";
|
||||
|
||||
// 언어 입력을 위한 사용되는 필드 조사
|
||||
$target_list = array();
|
||||
$target_type_list = array();
|
||||
// 언어 입력을 위한 사용되는 필드 조사
|
||||
$target_list = array();
|
||||
$target_type_list = array();
|
||||
|
||||
// js function 을 만들기 시작
|
||||
$js_doc = sprintf("function %s(fo_obj) {\n", $filter_name);
|
||||
$js_doc .= sprintf("\tvar oFilter = new XmlJsFilter(fo_obj, \"%s\", \"%s\", %s);\n", $module, $act, $callback_func);
|
||||
// js function 을 만들기 시작
|
||||
$js_doc = array();
|
||||
$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:''));";
|
||||
|
||||
// field, 즉 체크항목의 script 생성
|
||||
$node_count = count($field_node);
|
||||
if($node_count) {
|
||||
foreach($field_node as $key =>$node) {
|
||||
$attrs = $node->attrs;
|
||||
$target = trim($attrs->target);
|
||||
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;
|
||||
$jsdoc = array();
|
||||
$jsdoc[] = '(function($){';
|
||||
$jsdoc[] = "\tvar validator = xe.getApp('Validator')[0];";
|
||||
$jsdoc[] = "\tif(!validator) return false;";
|
||||
$jsdoc[] = "\tvalidator.cast('ADD_FILTER', ['{$filter_name}', {";
|
||||
|
||||
$js_doc .= sprintf(
|
||||
"\toFilter.addFieldItem(\"%s\",%s,%s,%s,\"%s\",\"%s\");\n",
|
||||
$target, $required, $minlength, $maxlength, $equalto, $filter
|
||||
);
|
||||
$fields = array();
|
||||
|
||||
if(!in_array($target, $target_list)) $target_list[] = $target;
|
||||
if(!$target_type_list[$target]) $target_type_list[$target] = $filter;
|
||||
}
|
||||
}
|
||||
// field, 즉 체크항목의 script 생성
|
||||
$node_count = count($field_node);
|
||||
if($node_count) {
|
||||
foreach($field_node as $key =>$node) {
|
||||
$attrs = $node->attrs;
|
||||
$target = trim($attrs->target);
|
||||
if(!$target) continue;
|
||||
$filter = $attrs->filter;
|
||||
|
||||
// extend_filter_item 체크
|
||||
for($i=0;$i<$extend_filter_count;$i++) {
|
||||
$filter_item = $extend_filter_list[$i];
|
||||
$target = trim($filter_item->name);
|
||||
if(!$target) continue;
|
||||
$type = $filter_item->type;
|
||||
$required = $filter_item->required?'true':'false';
|
||||
$attrs->equalto = trim($attrs->equalto);
|
||||
|
||||
// extend filter item의 type으로 filter를 구함
|
||||
switch($type) {
|
||||
case 'homepage' :
|
||||
$filter = 'homepage';
|
||||
break;
|
||||
case 'email_address' :
|
||||
$filter = 'email';
|
||||
break;
|
||||
default :
|
||||
$filter = '';
|
||||
break;
|
||||
}
|
||||
$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}}";
|
||||
|
||||
$js_doc .= sprintf(
|
||||
"\toFilter.addFieldItem(\"%s\",%s,%s,%s,\"%s\",\"%s\");\n",
|
||||
$target, $required, 0, 0, '', $filter
|
||||
);
|
||||
if(!in_array($target, $target_list)) $target_list[] = $target;
|
||||
if(!$target_type_list[$target]) $target_type_list[$target] = $filter;
|
||||
}
|
||||
}
|
||||
|
||||
if(!in_array($target, $target_list)) $target_list[] = $target;
|
||||
if(!$target_type_list[$target]) $target_type_list[$target] = $type;
|
||||
// extend_filter_item 체크
|
||||
for($i=0;$i<$extend_filter_count;$i++) {
|
||||
$filter_item = $extend_filter_list[$i];
|
||||
$target = trim($filter_item->name);
|
||||
if(!$target) continue;
|
||||
$type = $filter_item->type;
|
||||
$required = $filter_item->required?'true':'false';
|
||||
|
||||
}
|
||||
// extend filter item의 type으로 filter를 구함
|
||||
$types = array('homepage'=>'homepage', 'email_address'=>'email');
|
||||
$fitler = $types[$type]?$types[$type]:'';
|
||||
|
||||
// 데이터를 만들기 위한 parameter script 생성
|
||||
$parameter_count = count($parameter_param);
|
||||
if($parameter_count) {
|
||||
// 기본 필터 내용의 parameter로 구성
|
||||
foreach($parameter_param as $key =>$param) {
|
||||
$attrs = $param->attrs;
|
||||
$name = trim($attrs->name);
|
||||
$target = trim($attrs->target);
|
||||
if(!$name || !$target) continue;
|
||||
$target = htmlentities($target,ENT_QUOTES);
|
||||
$field = array();
|
||||
if($filter_item->required == 'true') $field[] = 'required:true';
|
||||
if($filter) $field[] = "rule:'{$filter}'";
|
||||
$s_field = implode(',', $field);
|
||||
$fields[] = "\t\t'{$target}' : {{$s_field}}";
|
||||
|
||||
$js_doc .= sprintf(
|
||||
"\toFilter.addParameterItem(\"%s\",\"%s\");\n",
|
||||
$name, $target
|
||||
);
|
||||
if(!in_array($name, $target_list)) $target_list[] = $name;
|
||||
}
|
||||
if(!in_array($target, $target_list)) $target_list[] = $target;
|
||||
if(!$target_type_list[$target]) $target_type_list[$target] = $type;
|
||||
}
|
||||
|
||||
// extend_filter_item 체크
|
||||
for($i=0;$i<$extend_filter_count;$i++) {
|
||||
$filter_item = $extend_filter_list[$i];
|
||||
$target = $name = trim($filter_item->name);
|
||||
if(!$name || !$target) continue;
|
||||
$target = htmlentities($target,ENT_QUOTES);
|
||||
$jsdoc[] = implode(",\n", $fields);
|
||||
$jsdoc[] = "\t}]);";
|
||||
|
||||
$js_doc .= sprintf(
|
||||
"\toFilter.addParameterItem(\"%s\",\"%s\");\n",
|
||||
$name, $target
|
||||
);
|
||||
if(!in_array($name, $target_list)) $target_list[] = $name;
|
||||
}
|
||||
}
|
||||
// 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; });";
|
||||
|
||||
// response script 생성
|
||||
$response_count = count($response_tag);
|
||||
for($i=0;$i<$response_count;$i++) {
|
||||
$attrs = $response_tag[$i]->attrs;
|
||||
$name = $attrs->name;
|
||||
$js_doc .= sprintf("\toFilter.addResponseItem(\"%s\");\n", $name);
|
||||
}
|
||||
// 데이터를 만들기 위한 parameter script 생성
|
||||
$parameter_count = count($parameter_param);
|
||||
if($parameter_count) {
|
||||
// 기본 필터 내용의 parameter로 구성
|
||||
foreach($parameter_param as $key =>$param) {
|
||||
$attrs = $param->attrs;
|
||||
$name = trim($attrs->name);
|
||||
$target = trim($attrs->target);
|
||||
|
||||
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");
|
||||
$js_doc .= "}\n";
|
||||
if($name && $target && ($name != $target)) $js_doc[] = "\t\tparams['{$name}'] = params['{$target}']; delete params['{$target}'];";
|
||||
if(!in_array($name, $target_list)) $target_list[] = $name;
|
||||
}
|
||||
|
||||
// form 필드 lang 값을 기록
|
||||
$target_count = count($target_list);
|
||||
for($i=0;$i<$target_count;$i++) {
|
||||
$target = $target_list[$i];
|
||||
if(!$lang->{$target}) $lang->{$target} = $target;
|
||||
$js_doc .= sprintf("alertMsg[\"%s\"] = \"%s\";\n", $target, str_replace("\"","\\\"",$lang->{$target}));
|
||||
}
|
||||
// extend_filter_item 체크
|
||||
for($i=0;$i<$extend_filter_count;$i++) {
|
||||
$filter_item = $extend_filter_list[$i];
|
||||
$target = $name = trim($filter_item->name);
|
||||
if(!$name || !$target) continue;
|
||||
|
||||
// target type을 기록
|
||||
$target_type_count = count($target_type_list);
|
||||
if($target_type_count) {
|
||||
foreach($target_type_list as $target => $type) {
|
||||
$js_doc .= sprintf("target_type_list[\"%s\"] = \"%s\";\n", $target, $type);
|
||||
}
|
||||
}
|
||||
if(!in_array($name, $target_list)) $target_list[] = $name;
|
||||
}
|
||||
}
|
||||
|
||||
// 에러 메세지를 기록
|
||||
foreach($lang->filter as $key => $val) {
|
||||
if(!$val) $val = $key;
|
||||
$js_doc .= sprintf("alertMsg[\"%s\"] = \"%s\";\n", $key, str_replace("\"","\\\"",$val));
|
||||
}
|
||||
// response script 생성
|
||||
$response_count = count($response_tag);
|
||||
$responses = array();
|
||||
for($i=0;$i<$response_count;$i++) {
|
||||
$attrs = $response_tag[$i]->attrs;
|
||||
$name = $attrs->name;
|
||||
$responses[] = "'{$name}'";
|
||||
}
|
||||
$js_doc[] = "\t\tresponses = [".implode(',', $responses)."];";
|
||||
|
||||
// js파일 생성
|
||||
FileHandler::writeFile($this->js_file, $js_doc);
|
||||
}
|
||||
//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");
|
||||
//$js_doc .= "}\n";
|
||||
|
||||
/**
|
||||
* @brief $xml_file로 compiled_xml_file이름을 return
|
||||
**/
|
||||
function _getCompiledFileName($xml_file) {
|
||||
return sprintf('%s%s.%s.compiled.js',$this->compiled_path, md5($xml_file),Context::getLangType());
|
||||
}
|
||||
}
|
||||
?>
|
||||
$js_doc[] = "\t\texec_xml('{$module}','{$act}', params, {$callback_func}, responses, params, form);";
|
||||
$js_doc[] = "\t}]);";
|
||||
|
||||
// form 필드 lang 값을 기록
|
||||
$target_count = count($target_list);
|
||||
for($i=0;$i<$target_count;$i++) {
|
||||
$target = $target_list[$i];
|
||||
if(!$lang->{$target}) $lang->{$target} = $target;
|
||||
$jsdoc[] = sprintf("\tvalidator.cast('ADD_MESSAGE', ['%s', '%s']);", $target, str_replace('\'', '\\\'', $lang->{$target}));
|
||||
}
|
||||
|
||||
// target type을 기록
|
||||
/*
|
||||
$target_type_count = count($target_type_list);
|
||||
if($target_type_count) {
|
||||
foreach($target_type_list as $target => $type) {
|
||||
//$js_doc .= sprintf("target_type_list[\"%s\"] = \"%s\";\n", $target, $type);
|
||||
}
|
||||
}
|
||||
*/
|
||||
|
||||
// 에러 메세지를 기록
|
||||
foreach($lang->filter as $key => $val) {
|
||||
if(!$val) $val = $key;
|
||||
$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파일 생성
|
||||
FileHandler::writeFile($this->js_file, $js_doc."\n".$jsdoc);
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief $xml_file로 compiled_xml_file이름을 return
|
||||
**/
|
||||
function _getCompiledFileName($xml_file) {
|
||||
return sprintf('%s%s.%s.compiled.js',$this->compiled_path, md5($xml_file),Context::getLangType());
|
||||
}
|
||||
}
|
||||
?>
|
||||
|
|
@ -1,16 +1,248 @@
|
|||
/**
|
||||
* @file common/js/xml_js_filter.js
|
||||
* @author zero (zero@nzeo.com)
|
||||
* @brief xml filter에서 사용될 js
|
||||
*
|
||||
* zbxe 에서 form의 동작시 필수입력 여부등을 선처리하고 xml_handler.js의 exec_xml()을 통해서
|
||||
* 특정 모듈과의 ajax 통신을 통해 process를 진행시킴
|
||||
* @author taggon (taggon@gmail.com)
|
||||
* @brief xml filter (validator) plugin
|
||||
*
|
||||
* A rule is a method validate one field.
|
||||
* A filter is made up of one or more rules.
|
||||
**/
|
||||
(function($){
|
||||
|
||||
var alertMsg = new Array();
|
||||
var target_type_list = new Array();
|
||||
var notnull_list = new Array();
|
||||
var extra_vars = new Array();
|
||||
var messages = [];
|
||||
var rules = [];
|
||||
var filters = [];
|
||||
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
|
||||
|
|
@ -34,297 +266,11 @@ function filterAlertMessage(ret_obj) {
|
|||
}
|
||||
|
||||
/**
|
||||
* @class XmlJsFilter
|
||||
* @authro zero (zero@nzeo.com)
|
||||
* @brief form elements, module/act, callback_user_func을 이용하여 서버에 ajax로 form 데이터를 넘기고 결과를 받아오는 js class
|
||||
**/
|
||||
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);
|
||||
return false;
|
||||
}
|
||||
* @brief Function to process filters
|
||||
* @deprecated
|
||||
*/
|
||||
function procFilter(fo_obj, filter_func)
|
||||
{
|
||||
filter_func(fo_obj);
|
||||
return false;
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue